Mercurial > dwindows
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); |