# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1612210950 0 # Node ID 95796965bb014a9480bd07e1776827417af8b189 # Parent 2ce302c43f486ac7cb5a82d13373332a8774d1bb GTK4: More menu work, something still isn't working. diff -r 2ce302c43f48 -r 95796965bb01 gtk4/dw.c --- a/gtk4/dw.c Mon Feb 01 10:05:42 2021 +0000 +++ b/gtk4/dw.c Mon Feb 01 20:22:30 2021 +0000 @@ -1008,6 +1008,19 @@ func((HWND)DW_ULONGLONG_TO_POINTER(g_variant_get_uint64(param)), data); } +/* Handle menu click callbacks */ +static void _dw_menu_handler(GSimpleAction *action, GVariant *param, gpointer data) +{ + SignalHandler work = _dw_get_signal_handler(data); + + if(work.window) + { + int (*genericfunc)(HWND, void *) = work.func; + + genericfunc(work.window, work.data); + } +} + static void _dw_app_activate(GApplication *app, gpointer user_data) { /* Not sure why this signal is required, but GLib gives warnings @@ -2218,24 +2231,29 @@ } } -char _dw_removetilde(char *dest, const char *src) +char _dw_removetilde(char *action, char *dest, const char *src) { int z, cur=0; char accel = '\0'; for(z=0;zname, DW_SIGNAL_CLICKED) == 0) strcpy(signal->gname, "toggled"); + /* For menu items, get the G(Simple)Action and the signal is "activate" */ + else if(G_IS_MENU_ITEM(object) && strcmp(signal->name, DW_SIGNAL_CLICKED) == 0) + { + GSimpleAction *action = G_SIMPLE_ACTION(g_object_get_data(object, "_dw_action")); + + if(action) + { + int cid, sigid = _dw_set_signal_handler(G_OBJECT(action), (HWND)object, sigfunc, data, (gpointer)_dw_menu_handler, discfunc); + + params[0] = DW_INT_TO_POINTER(sigid); + params[2] = DW_POINTER(object); + cid = g_signal_connect_data(G_OBJECT(action), "activate", G_CALLBACK(_dw_menu_handler), params, _dw_signal_disconnect, 0); + _dw_set_signal_handler_id(object, sigid, cid); + } + return NULL; + } return object; }