From 93336e9373bfec10f6f28f2930cb33f076e7af65 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 3 Aug 2012 03:19:34 +0000 Subject: Explicitly forward keyboard events to X11 UIs in Gtk. git-svn-id: http://svn.drobilla.net/lad/trunk/suil@4606 a436a847-0d15-0410-975c-d299462d15a1 --- src/x11_in_gtk2.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/x11_in_gtk2.c') diff --git a/src/x11_in_gtk2.c b/src/x11_in_gtk2.c index abb58f6..c2c73e3 100644 --- a/src/x11_in_gtk2.c +++ b/src/x11_in_gtk2.c @@ -17,6 +17,7 @@ #include #include +#include #include "./suil_internal.h" @@ -129,6 +130,19 @@ wrapper_free(SuilWrapper* wrapper) } } +static GdkFilterReturn +event_filter(GdkXEvent* xevent, GdkEvent* event, gpointer data) +{ + SuilX11Wrapper* wrap = (SuilX11Wrapper*)data; + XEvent* ev = (XEvent*)xevent; + if (wrap->instance->handle && (ev->type == KeyPress || ev->type == KeyRelease)) { + // Forward keyboard events to UI window + XSendEvent(ev->xkey.display, (Window)wrap->instance->ui_widget, 1, 0, ev); + XSync(ev->xkey.display, TRUE); + } + return GDK_FILTER_CONTINUE; +} + SUIL_API SuilWrapper* suil_wrapper_new(SuilHost* host, @@ -150,6 +164,9 @@ suil_wrapper_new(SuilHost* host, wrapper->resize.handle = wrap; wrapper->resize.ui_resize = wrapper_resize; + GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(wrap)); + gdk_window_add_filter(window, event_filter, wrap); + suil_add_feature(features, &n_features, LV2_UI__parent, (void*)(intptr_t)gtk_plug_get_id(wrap->plug)); -- cgit v1.2.1