# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1615743906 0 # Node ID 67f98f3e47f431faf929e8bd8de97930663c56e9 # Parent b18ef6c5b77abd16cbde3833a383390613d98812 GTK4: Switch from "activate-focus" to "notify::is-active" for DW_SIGNAL_SET_FOCUS. "activate-focus" handled a keybinding event on GTK4 and not actual focus. diff -r b18ef6c5b77a -r 67f98f3e47f4 gtk4/dw.c --- a/gtk4/dw.c Sun Mar 14 07:42:03 2021 +0000 +++ b/gtk4/dw.c Sun Mar 14 17:45:06 2021 +0000 @@ -412,7 +412,7 @@ static gint _dw_container_enter_event(GtkEventController *controller, guint keyval, guint keycode, GdkModifierType state, gpointer data); static gint _dw_combobox_select_event(GtkWidget *widget, gpointer data); static gint _dw_expose_event(GtkWidget *widget, cairo_t *cr, int width, int height, gpointer data); -static gint _dw_set_focus_event(GtkWindow *window, gpointer data); +static void _dw_set_focus_event(GObject *window, GParamSpec *pspec, gpointer data); static gint _dw_tree_context_event(GtkGestureSingle *gesture, int n_press, double x, double y, gpointer data); static gint _dw_value_changed_event(GtkWidget *widget, gpointer user_data); static gint _dw_tree_select_event(GtkTreeSelection *sel, gpointer data); @@ -466,28 +466,28 @@ /* A list of signal forwarders, to account for paramater differences. */ static SignalList SignalTranslate[] = { - { _dw_configure_event, DW_SIGNAL_CONFIGURE, "resize", NULL }, - { _dw_key_press_event, DW_SIGNAL_KEY_PRESS, "key-pressed", _dw_key_setup }, - { _dw_button_press_event, DW_SIGNAL_BUTTON_PRESS, "pressed", _dw_mouse_setup }, - { _dw_button_release_event, DW_SIGNAL_BUTTON_RELEASE, "released", _dw_mouse_setup }, - { _dw_motion_notify_event, DW_SIGNAL_MOTION_NOTIFY, "motion", _dw_motion_setup }, - { _dw_delete_event, DW_SIGNAL_DELETE, "close-request", NULL }, - { _dw_expose_event, DW_SIGNAL_EXPOSE, "draw", _dw_draw_setup }, - { _dw_generic_event, DW_SIGNAL_CLICKED, "clicked", _dw_button_setup }, - { _dw_container_enter_event, DW_SIGNAL_ITEM_ENTER, "key-pressed", _dw_key_setup }, - { _dw_tree_context_event, DW_SIGNAL_ITEM_CONTEXT, "pressed", _dw_tree_setup }, - { _dw_combobox_select_event, DW_SIGNAL_LIST_SELECT, "changed", NULL }, - { _dw_tree_select_event, DW_SIGNAL_ITEM_SELECT, "changed", _dw_tree_setup }, - { _dw_set_focus_event, DW_SIGNAL_SET_FOCUS, "activate-focus", _dw_focus_setup }, - { _dw_value_changed_event, DW_SIGNAL_VALUE_CHANGED, "value-changed", _dw_value_setup }, - { _dw_switch_page_event, DW_SIGNAL_SWITCH_PAGE, "switch-page", NULL }, - { _dw_column_click_event, DW_SIGNAL_COLUMN_CLICK, "activate", _dw_tree_setup }, - { _dw_tree_expand_event, DW_SIGNAL_TREE_EXPAND, "row-expanded", NULL }, + { _dw_configure_event, DW_SIGNAL_CONFIGURE, "resize", NULL }, + { _dw_key_press_event, DW_SIGNAL_KEY_PRESS, "key-pressed", _dw_key_setup }, + { _dw_button_press_event, DW_SIGNAL_BUTTON_PRESS, "pressed", _dw_mouse_setup }, + { _dw_button_release_event, DW_SIGNAL_BUTTON_RELEASE, "released", _dw_mouse_setup }, + { _dw_motion_notify_event, DW_SIGNAL_MOTION_NOTIFY, "motion", _dw_motion_setup }, + { _dw_delete_event, DW_SIGNAL_DELETE, "close-request", NULL }, + { _dw_expose_event, DW_SIGNAL_EXPOSE, "draw", _dw_draw_setup }, + { _dw_generic_event, DW_SIGNAL_CLICKED, "clicked", _dw_button_setup }, + { _dw_container_enter_event, DW_SIGNAL_ITEM_ENTER, "key-pressed", _dw_key_setup }, + { _dw_tree_context_event, DW_SIGNAL_ITEM_CONTEXT, "pressed", _dw_tree_setup }, + { _dw_combobox_select_event, DW_SIGNAL_LIST_SELECT, "changed", NULL }, + { _dw_tree_select_event, DW_SIGNAL_ITEM_SELECT, "changed", _dw_tree_setup }, + { _dw_set_focus_event, DW_SIGNAL_SET_FOCUS, "notify::is-active", _dw_focus_setup }, + { _dw_value_changed_event, DW_SIGNAL_VALUE_CHANGED, "value-changed", _dw_value_setup }, + { _dw_switch_page_event, DW_SIGNAL_SWITCH_PAGE, "switch-page", NULL }, + { _dw_column_click_event, DW_SIGNAL_COLUMN_CLICK, "activate", _dw_tree_setup }, + { _dw_tree_expand_event, DW_SIGNAL_TREE_EXPAND, "row-expanded", NULL }, #ifdef USE_WEBKIT - { _dw_html_changed_event, DW_SIGNAL_HTML_CHANGED, "load-changed", NULL }, - { _dw_html_result_event, DW_SIGNAL_HTML_RESULT, "", _dw_html_setup }, + { _dw_html_changed_event, DW_SIGNAL_HTML_CHANGED, "load-changed", NULL }, + { _dw_html_result_event, DW_SIGNAL_HTML_RESULT, "", _dw_html_setup }, #endif - { NULL, "", "", NULL } + { NULL, "", "", NULL } }; /* Alignment flags */ @@ -691,18 +691,19 @@ } #endif -static gint _dw_set_focus_event(GtkWindow *window, gpointer data) +static void _dw_set_focus_event(GObject *window, GParamSpec *pspec, gpointer data) { SignalHandler work = _dw_get_signal_handler(data); - int retval = FALSE; + gboolean active; - if(work.window) + g_object_get(window, "is-active", &active, NULL); + + if(active && work.window) { int (*setfocusfunc)(HWND, void *) = work.func; - retval = setfocusfunc(work.window, work.data); - } - return retval; + setfocusfunc(work.window, work.data); + } } static gint _dw_button_press_event(GtkGestureSingle *gesture, int n_press, double x, double y, gpointer data)