From ceebebe2b7d2f78317c96540bd4c42d02f63ab3c Mon Sep 17 00:00:00 2001 From: Kim Woelders Date: Fri, 25 May 2018 08:27:27 +0200 Subject: [PATCH] Rewrite e_cb_key_change(), eliminating use of deprecated gdk_flush() --- viewer.c | 57 +++++++++++++++++++++++++++----------------------------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/viewer.c b/viewer.c index e349e91..e96cc72 100644 --- a/viewer.c +++ b/viewer.c @@ -1,16 +1,12 @@ #include "config.h" -#include #include #include #include #include #include -#include -#include -#include #include -#include +#include #include "e16keyedit.h" @@ -276,6 +272,30 @@ clist_row_moveto(GtkWidget * widget, int row) #endif } +static void +on_popup_clicked(GtkWidget * win, GdkEventKey * ev) +{ + char *key; + + key = gdk_keyval_name(ev->keyval); + gtk_entry_set_text(GTK_ENTRY(act_key), key); + clist_row_current_set_value(clist, 1, key); + + gtk_widget_destroy(win); +} + +static void +on_popup_mapped(GtkWidget * win, gpointer data __UNUSED__) +{ +#if USE_GTK == 2 + gdk_keyboard_grab(gtk_widget_get_window(win), FALSE, GDK_CURRENT_TIME); +#else + gdk_seat_grab(gdk_display_get_default_seat(gtk_widget_get_display(win)), + gtk_widget_get_window(win), GDK_SEAT_CAPABILITY_KEYBOARD, + FALSE, NULL, NULL, NULL, NULL); +#endif +} + static void e_cb_key_change(GtkWidget * widget __UNUSED__, gpointer data __UNUSED__) { @@ -294,32 +314,9 @@ e_cb_key_change(GtkWidget * widget __UNUSED__, gpointer data __UNUSED__) gtk_container_add(GTK_CONTAINER(vbox), label); gtk_container_set_border_width(GTK_CONTAINER(vbox), 32); gtk_widget_show_all(win); - while (gtk_events_pending()) - gtk_main_iteration(); - gdk_flush(); - while (gtk_events_pending()) - gtk_main_iteration(); - { - char *key; - XEvent ev; - -#define WIDGET_XID(widget) GDK_WINDOW_XID(gtk_widget_get_window(widget)) - gdk_window_set_events(gtk_widget_get_window(win), GDK_KEY_PRESS_MASK); - XGrabKeyboard(gdk_x11_get_default_xdisplay(), WIDGET_XID(win), - False, GrabModeAsync, GrabModeAsync, CurrentTime); - XSetInputFocus(gdk_x11_get_default_xdisplay(), WIDGET_XID(win), - RevertToPointerRoot, CurrentTime); - XWindowEvent(gdk_x11_get_default_xdisplay(), WIDGET_XID(win), - KeyPressMask, &ev); - XUngrabKeyboard(gdk_x11_get_default_xdisplay(), CurrentTime); - key = XKeysymToString(XkbKeycodeToKeysym(gdk_x11_get_default_xdisplay(), - ev.xkey.keycode, 0, 0)); - gtk_entry_set_text(GTK_ENTRY(act_key), key); - clist_row_current_set_value(clist, 1, key); - } - - gtk_widget_destroy(win); + g_signal_connect(win, "map-event", G_CALLBACK(on_popup_mapped), NULL); + g_signal_connect(win, "key-press-event", G_CALLBACK(on_popup_clicked), NULL); } static void