| 2316 } |
2316 } |
| 2317 |
2317 |
| 2318 static void listbox_button_clicked(GtkWidget *button, UiEventDataExt *data) { |
2318 static void listbox_button_clicked(GtkWidget *button, UiEventDataExt *data) { |
| 2319 UiListBoxSubList *sublist = data->customdata0; |
2319 UiListBoxSubList *sublist = data->customdata0; |
| 2320 |
2320 |
| 2321 UiSubListEventData eventdata; |
2321 UiSubListEventData *eventdata = &sublist->listbox->current_eventdata; |
| 2322 eventdata.list = sublist->var->value; |
2322 eventdata->list = sublist->var->value; |
| 2323 eventdata.sublist_index = sublist->index; |
2323 eventdata->sublist_index = sublist->index; |
| 2324 eventdata.row_index = data->value0; |
2324 eventdata->row_index = data->value0; |
| 2325 eventdata.sublist_userdata = sublist->userdata; |
2325 eventdata->sublist_userdata = sublist->userdata; |
| 2326 eventdata.row_data = eventdata.list->get(eventdata.list, eventdata.row_index); |
2326 eventdata->row_data = eventdata->list->get(eventdata->list, eventdata->row_index); |
| 2327 eventdata.event_data = data->customdata2; |
2327 eventdata->event_data = data->customdata2; |
| 2328 |
2328 |
| 2329 UiEvent event; |
2329 UiEvent event; |
| 2330 event.obj = data->obj; |
2330 event.obj = data->obj; |
| 2331 event.window = event.obj->window; |
2331 event.window = event.obj->window; |
| 2332 event.document = event.obj->ctx->document; |
2332 event.document = event.obj->ctx->document; |
| 2333 event.eventdata = &eventdata; |
2333 event.eventdata = eventdata; |
| 2334 event.eventdatatype = UI_EVENT_DATA_SUBLIST; |
2334 event.eventdatatype = UI_EVENT_DATA_SUBLIST; |
| 2335 event.intval = data->value0; |
2335 event.intval = data->value0; |
| 2336 event.set = ui_get_setop(); |
2336 event.set = ui_get_setop(); |
| 2337 |
2337 |
| 2338 if(data->callback2) { |
2338 if(data->callback2) { |
| 2339 data->callback2(&event, data->userdata2); |
2339 data->callback2(&event, data->userdata2); |
| 2340 } |
2340 } |
| 2341 |
2341 |
| 2342 if(data->customdata3) { |
2342 if(data->customdata3) { |
| |
2343 uic_set_tmp_eventdata(eventdata, UI_EVENT_DATA_SUBLIST); |
| |
2344 |
| 2343 UIMENU menu = data->customdata3; |
2345 UIMENU menu = data->customdata3; |
| 2344 g_object_set_data(G_OBJECT(button), "ui-button-popup", menu); |
2346 g_object_set_data(G_OBJECT(button), "ui-button-popup", menu); |
| 2345 gtk_popover_popup(GTK_POPOVER(menu)); |
2347 gtk_popover_popup(GTK_POPOVER(menu)); |
| 2346 } |
2348 } |
| 2347 } |
2349 } |
| 2348 |
2350 |
| 2349 #if GTK_CHECK_VERSION(3, 0, 0) |
2351 #if GTK_CHECK_VERSION(4, 0, 0) |
| 2350 static void button_popover_closed(GtkPopover *popover, GtkWidget *button) { |
2352 static void button_popover_closed(GtkPopover *popover, GtkWidget *button) { |
| |
2353 g_object_set_data(G_OBJECT(button), "ui-button-popup", NULL); |
| |
2354 if(g_object_get_data(G_OBJECT(button), "ui-button-invisible")) { |
| |
2355 g_object_set_data(G_OBJECT(button), "ui-button-invisible", NULL); |
| |
2356 gtk_widget_set_visible(button, FALSE); |
| |
2357 } |
| |
2358 } |
| |
2359 #else |
| |
2360 static void popup_hide(GtkWidget *self, GtkWidget *button) { |
| 2351 g_object_set_data(G_OBJECT(button), "ui-button-popup", NULL); |
2361 g_object_set_data(G_OBJECT(button), "ui-button-popup", NULL); |
| 2352 if(g_object_get_data(G_OBJECT(button), "ui-button-invisible")) { |
2362 if(g_object_get_data(G_OBJECT(button), "ui-button-invisible")) { |
| 2353 g_object_set_data(G_OBJECT(button), "ui-button-invisible", NULL); |
2363 g_object_set_data(G_OBJECT(button), "ui-button-invisible", NULL); |
| 2354 gtk_widget_set_visible(button, FALSE); |
2364 gtk_widget_set_visible(button, FALSE); |
| 2355 } |
2365 } |
| 2431 |
2441 |
| 2432 // menu |
2442 // menu |
| 2433 if(item->button_menu) { |
2443 if(item->button_menu) { |
| 2434 UIMENU menu = ui_contextmenu_create(item->button_menu, listbox->obj, button); |
2444 UIMENU menu = ui_contextmenu_create(item->button_menu, listbox->obj, button); |
| 2435 event->customdata3 = menu; |
2445 event->customdata3 = menu; |
| 2436 g_signal_connect(menu, "closed", G_CALLBACK(button_popover_closed), button); |
2446 #if GTK_CHECK_VERSION(4, 0, 0) |
| |
2447 g_signal_connect(menu, "closed", G_CALLBACK(button_popover_closed), button); |
| |
2448 #else |
| |
2449 g_signal_connect(menu, "hide", G_CALLBACK(popup_hide), button); |
| |
2450 #endif |
| 2437 ui_menubuilder_unref(item->button_menu); |
2451 ui_menubuilder_unref(item->button_menu); |
| 2438 } |
2452 } |
| 2439 } |
2453 } |
| 2440 } |
2454 } |
| 2441 |
2455 |