changeset 2371:67f98f3e47f4

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.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sun, 14 Mar 2021 17:45:06 +0000
parents b18ef6c5b77a
children df0a66945296
files gtk4/dw.c
diffstat 1 files changed, 28 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- 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)