#include "gst/glib-compat-private.h"
+/* for XkbKeycodeToKeysym */
+#include <X11/XKBlib.h>
+
GST_DEBUG_CATEGORY_EXTERN (gst_debug_ximagesink);
#define GST_CAT_DEFAULT gst_debug_ximagesink
KeyPressMask | KeyReleaseMask |
ButtonPressMask | ButtonReleaseMask, &e)) {
KeySym keysym;
+ const char *key_str = NULL;
/* We lock only for the X function call */
g_mutex_unlock (ximagesink->x_lock);
case KeyRelease:
/* Key pressed/released over our window. We send upstream
events for interactivity/navigation */
- GST_DEBUG ("ximagesink key %d pressed over window at %d,%d",
- e.xkey.keycode, e.xkey.x, e.xkey.x);
g_mutex_lock (ximagesink->x_lock);
- keysym = XKeycodeToKeysym (ximagesink->xcontext->disp,
- e.xkey.keycode, 0);
- g_mutex_unlock (ximagesink->x_lock);
+ keysym = XkbKeycodeToKeysym (ximagesink->xcontext->disp,
+ e.xkey.keycode, 0, 0);
if (keysym != NoSymbol) {
- char *key_str = NULL;
-
- g_mutex_lock (ximagesink->x_lock);
key_str = XKeysymToString (keysym);
- g_mutex_unlock (ximagesink->x_lock);
- gst_navigation_send_key_event (GST_NAVIGATION (ximagesink),
- e.type == KeyPress ? "key-press" : "key-release", key_str);
-
} else {
- gst_navigation_send_key_event (GST_NAVIGATION (ximagesink),
- e.type == KeyPress ? "key-press" : "key-release", "unknown");
+ key_str = "unknown";
}
+ g_mutex_unlock (ximagesink->x_lock);
+ GST_DEBUG_OBJECT (ximagesink,
+ "key %d pressed over window at %d,%d (%s)",
+ e.xkey.keycode, e.xkey.x, e.xkey.y, key_str);
+ gst_navigation_send_key_event (GST_NAVIGATION (ximagesink),
+ e.type == KeyPress ? "key-press" : "key-release", key_str);
break;
default:
GST_DEBUG_OBJECT (ximagesink, "ximagesink unhandled X event (%d)",