comparison gtk4/dw.c @ 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 0286ac44d347
comparison
equal deleted inserted replaced
2370:b18ef6c5b77a 2371:67f98f3e47f4
410 static gint _dw_generic_event(GtkWidget *widget, gpointer data); 410 static gint _dw_generic_event(GtkWidget *widget, gpointer data);
411 static gint _dw_configure_event(GtkWidget *widget, int width, int height, gpointer data); 411 static gint _dw_configure_event(GtkWidget *widget, int width, int height, gpointer data);
412 static gint _dw_container_enter_event(GtkEventController *controller, guint keyval, guint keycode, GdkModifierType state, gpointer data); 412 static gint _dw_container_enter_event(GtkEventController *controller, guint keyval, guint keycode, GdkModifierType state, gpointer data);
413 static gint _dw_combobox_select_event(GtkWidget *widget, gpointer data); 413 static gint _dw_combobox_select_event(GtkWidget *widget, gpointer data);
414 static gint _dw_expose_event(GtkWidget *widget, cairo_t *cr, int width, int height, gpointer data); 414 static gint _dw_expose_event(GtkWidget *widget, cairo_t *cr, int width, int height, gpointer data);
415 static gint _dw_set_focus_event(GtkWindow *window, gpointer data); 415 static void _dw_set_focus_event(GObject *window, GParamSpec *pspec, gpointer data);
416 static gint _dw_tree_context_event(GtkGestureSingle *gesture, int n_press, double x, double y, gpointer data); 416 static gint _dw_tree_context_event(GtkGestureSingle *gesture, int n_press, double x, double y, gpointer data);
417 static gint _dw_value_changed_event(GtkWidget *widget, gpointer user_data); 417 static gint _dw_value_changed_event(GtkWidget *widget, gpointer user_data);
418 static gint _dw_tree_select_event(GtkTreeSelection *sel, gpointer data); 418 static gint _dw_tree_select_event(GtkTreeSelection *sel, gpointer data);
419 static gint _dw_tree_expand_event(GtkTreeView *treeview, GtkTreeIter *arg1, GtkTreePath *arg2, gpointer data); 419 static gint _dw_tree_expand_event(GtkTreeView *treeview, GtkTreeIter *arg1, GtkTreePath *arg2, gpointer data);
420 static gint _dw_switch_page_event(GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer data); 420 static gint _dw_switch_page_event(GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer data);
464 464
465 } SignalHandler; 465 } SignalHandler;
466 466
467 /* A list of signal forwarders, to account for paramater differences. */ 467 /* A list of signal forwarders, to account for paramater differences. */
468 static SignalList SignalTranslate[] = { 468 static SignalList SignalTranslate[] = {
469 { _dw_configure_event, DW_SIGNAL_CONFIGURE, "resize", NULL }, 469 { _dw_configure_event, DW_SIGNAL_CONFIGURE, "resize", NULL },
470 { _dw_key_press_event, DW_SIGNAL_KEY_PRESS, "key-pressed", _dw_key_setup }, 470 { _dw_key_press_event, DW_SIGNAL_KEY_PRESS, "key-pressed", _dw_key_setup },
471 { _dw_button_press_event, DW_SIGNAL_BUTTON_PRESS, "pressed", _dw_mouse_setup }, 471 { _dw_button_press_event, DW_SIGNAL_BUTTON_PRESS, "pressed", _dw_mouse_setup },
472 { _dw_button_release_event, DW_SIGNAL_BUTTON_RELEASE, "released", _dw_mouse_setup }, 472 { _dw_button_release_event, DW_SIGNAL_BUTTON_RELEASE, "released", _dw_mouse_setup },
473 { _dw_motion_notify_event, DW_SIGNAL_MOTION_NOTIFY, "motion", _dw_motion_setup }, 473 { _dw_motion_notify_event, DW_SIGNAL_MOTION_NOTIFY, "motion", _dw_motion_setup },
474 { _dw_delete_event, DW_SIGNAL_DELETE, "close-request", NULL }, 474 { _dw_delete_event, DW_SIGNAL_DELETE, "close-request", NULL },
475 { _dw_expose_event, DW_SIGNAL_EXPOSE, "draw", _dw_draw_setup }, 475 { _dw_expose_event, DW_SIGNAL_EXPOSE, "draw", _dw_draw_setup },
476 { _dw_generic_event, DW_SIGNAL_CLICKED, "clicked", _dw_button_setup }, 476 { _dw_generic_event, DW_SIGNAL_CLICKED, "clicked", _dw_button_setup },
477 { _dw_container_enter_event, DW_SIGNAL_ITEM_ENTER, "key-pressed", _dw_key_setup }, 477 { _dw_container_enter_event, DW_SIGNAL_ITEM_ENTER, "key-pressed", _dw_key_setup },
478 { _dw_tree_context_event, DW_SIGNAL_ITEM_CONTEXT, "pressed", _dw_tree_setup }, 478 { _dw_tree_context_event, DW_SIGNAL_ITEM_CONTEXT, "pressed", _dw_tree_setup },
479 { _dw_combobox_select_event, DW_SIGNAL_LIST_SELECT, "changed", NULL }, 479 { _dw_combobox_select_event, DW_SIGNAL_LIST_SELECT, "changed", NULL },
480 { _dw_tree_select_event, DW_SIGNAL_ITEM_SELECT, "changed", _dw_tree_setup }, 480 { _dw_tree_select_event, DW_SIGNAL_ITEM_SELECT, "changed", _dw_tree_setup },
481 { _dw_set_focus_event, DW_SIGNAL_SET_FOCUS, "activate-focus", _dw_focus_setup }, 481 { _dw_set_focus_event, DW_SIGNAL_SET_FOCUS, "notify::is-active", _dw_focus_setup },
482 { _dw_value_changed_event, DW_SIGNAL_VALUE_CHANGED, "value-changed", _dw_value_setup }, 482 { _dw_value_changed_event, DW_SIGNAL_VALUE_CHANGED, "value-changed", _dw_value_setup },
483 { _dw_switch_page_event, DW_SIGNAL_SWITCH_PAGE, "switch-page", NULL }, 483 { _dw_switch_page_event, DW_SIGNAL_SWITCH_PAGE, "switch-page", NULL },
484 { _dw_column_click_event, DW_SIGNAL_COLUMN_CLICK, "activate", _dw_tree_setup }, 484 { _dw_column_click_event, DW_SIGNAL_COLUMN_CLICK, "activate", _dw_tree_setup },
485 { _dw_tree_expand_event, DW_SIGNAL_TREE_EXPAND, "row-expanded", NULL }, 485 { _dw_tree_expand_event, DW_SIGNAL_TREE_EXPAND, "row-expanded", NULL },
486 #ifdef USE_WEBKIT 486 #ifdef USE_WEBKIT
487 { _dw_html_changed_event, DW_SIGNAL_HTML_CHANGED, "load-changed", NULL }, 487 { _dw_html_changed_event, DW_SIGNAL_HTML_CHANGED, "load-changed", NULL },
488 { _dw_html_result_event, DW_SIGNAL_HTML_RESULT, "", _dw_html_setup }, 488 { _dw_html_result_event, DW_SIGNAL_HTML_RESULT, "", _dw_html_setup },
489 #endif 489 #endif
490 { NULL, "", "", NULL } 490 { NULL, "", "", NULL }
491 }; 491 };
492 492
493 /* Alignment flags */ 493 /* Alignment flags */
494 #define DW_CENTER 0.5f 494 #define DW_CENTER 0.5f
495 #define DW_LEFT 0.0f 495 #define DW_LEFT 0.0f
689 htmlchangedfunc(work.window, status, location, work.data); 689 htmlchangedfunc(work.window, status, location, work.data);
690 } 690 }
691 } 691 }
692 #endif 692 #endif
693 693
694 static gint _dw_set_focus_event(GtkWindow *window, gpointer data) 694 static void _dw_set_focus_event(GObject *window, GParamSpec *pspec, gpointer data)
695 { 695 {
696 SignalHandler work = _dw_get_signal_handler(data); 696 SignalHandler work = _dw_get_signal_handler(data);
697 int retval = FALSE; 697 gboolean active;
698 698
699 if(work.window) 699 g_object_get(window, "is-active", &active, NULL);
700
701 if(active && work.window)
700 { 702 {
701 int (*setfocusfunc)(HWND, void *) = work.func; 703 int (*setfocusfunc)(HWND, void *) = work.func;
702 704
703 retval = setfocusfunc(work.window, work.data); 705 setfocusfunc(work.window, work.data);
704 } 706 }
705 return retval;
706 } 707 }
707 708
708 static gint _dw_button_press_event(GtkGestureSingle *gesture, int n_press, double x, double y, gpointer data) 709 static gint _dw_button_press_event(GtkGestureSingle *gesture, int n_press, double x, double y, gpointer data)
709 { 710 {
710 SignalHandler work = _dw_get_signal_handler(data); 711 SignalHandler work = _dw_get_signal_handler(data);