]> git.sesse.net Git - vlc/blobdiff - modules/video_output/xcb/keys.c
Fix Solaris building
[vlc] / modules / video_output / xcb / keys.c
index a1369106528a7afad18dea1dde4be378646f3b1a..4dcfe999ca074ca8cbfef8fe25a627d777dac998 100644 (file)
 #include <assert.h>
 
 #include <xcb/xcb.h>
+#include <vlc_common.h>
+#include "xcb_vlc.h"
+
+#ifdef HAVE_XCB_KEYSYMS
 #include <xcb/xcb_keysyms.h>
 #include <X11/keysym.h>
 #include <X11/XF86keysym.h>
-
-#include <vlc_common.h>
 #include <vlc_keys.h>
 
-#include "xcb_vlc.h"
-
 struct key_handler_t
 {
     vlc_object_t      *obj;
@@ -85,94 +85,9 @@ static uint_fast32_t ConvertKeySym (xcb_keysym_t sym)
         xcb_keysym_t x11;
         uint32_t vlc;
     } *res, tab[] = {
-    /* This list MUST be in XK_* incremental order (see keysymdef.h),
-     * so that binary search works.
-     * Multiple X keys can match the same VLC key.
-     * X key symbols must be in the first column of the struct. */
-        { XK_BackSpace,     KEY_BACKSPACE, },
-        { XK_Tab,           KEY_TAB, },
-        { XK_Return,        KEY_ENTER, },
-        { XK_Escape,        KEY_ESC, },
-        { XK_Home,          KEY_HOME, },
-        { XK_Left,          KEY_LEFT, },
-        { XK_Up,            KEY_UP, },
-        { XK_Right,         KEY_RIGHT, },
-        { XK_Down,          KEY_DOWN, },
-        { XK_Page_Up,       KEY_PAGEUP, },
-        { XK_Page_Down,     KEY_PAGEDOWN, },
-        { XK_End,           KEY_END, },
-        { XK_Begin,         KEY_HOME, },
-        { XK_Insert,        KEY_INSERT, },
-        { XK_Menu,          KEY_MENU },
-
-        /* Numeric pad keys */
-        { XK_KP_Space,      ' ', },
-        { XK_KP_Tab,        KEY_TAB, },
-        { XK_KP_Enter,      KEY_ENTER, },
-        { XK_KP_F1,         KEY_F1, },
-        { XK_KP_F2,         KEY_F2, },
-        { XK_KP_F3,         KEY_F3, },
-        { XK_KP_F4,         KEY_F4, },
-        { XK_KP_Home,       KEY_HOME, },
-        { XK_KP_Left,       KEY_LEFT, },
-        { XK_KP_Up,         KEY_UP, },
-        { XK_KP_Right,      KEY_RIGHT, },
-        { XK_KP_Down,       KEY_DOWN, },
-        { XK_KP_Page_Up,    KEY_PAGEUP, },
-        { XK_KP_Page_Down,  KEY_PAGEDOWN, },
-        { XK_KP_End,        KEY_END, },
-        { XK_KP_Begin,      KEY_HOME, }, /* KP middle (5 without numlock) */
-        { XK_KP_Insert,     KEY_INSERT, },
-        { XK_KP_Delete,     KEY_DELETE, },
-        { XK_KP_Equal,      '=', },
-        { XK_KP_Multiply,   '*', },
-        { XK_KP_Add,        '+', },
-        { XK_KP_Separator,  ',', },
-        { XK_KP_Subtract,   '-', },
-        { XK_KP_Decimal,    ',', }, /* FIXME: I don't know that key */
-        { XK_KP_Divide,     '/', },
-        { XK_KP_0,          '0', },
-        { XK_KP_1,          '1', },
-        { XK_KP_2,          '2', },
-        { XK_KP_3,          '3', },
-        { XK_KP_4,          '4', },
-        { XK_KP_5,          '5', },
-        { XK_KP_6,          '6', },
-        { XK_KP_7,          '7', },
-        { XK_KP_8,          '8', },
-        { XK_KP_9,          '9', },
-
-        { XK_F1,            KEY_F1, },
-        { XK_F2,            KEY_F2, },
-        { XK_F3,            KEY_F3, },
-        { XK_F4,            KEY_F4, },
-        { XK_F5,            KEY_F5, },
-        { XK_F6,            KEY_F6, },
-        { XK_F7,            KEY_F7, },
-        { XK_F8,            KEY_F8, },
-        { XK_F9,            KEY_F9, },
-        { XK_F10,           KEY_F10, },
-        { XK_F11,           KEY_F11, },
-        { XK_F12,           KEY_F12, },
-        { XK_Delete,        KEY_DELETE, },
-
-        /* XFree86 extensions */
-        { XF86XK_AudioLowerVolume, KEY_VOLUME_DOWN, },
-        { XF86XK_AudioMute,        KEY_VOLUME_MUTE, },
-        { XF86XK_AudioRaiseVolume, KEY_VOLUME_UP, },
-        { XF86XK_AudioPlay,        KEY_MEDIA_PLAY_PAUSE, },
-        { XF86XK_AudioStop,        KEY_MEDIA_STOP, },
-        { XF86XK_AudioPrev,        KEY_MEDIA_PREV_TRACK, },
-        { XF86XK_AudioNext,        KEY_MEDIA_NEXT_TRACK, },
-        { XF86XK_HomePage,         KEY_BROWSER_HOME, },
-        { XF86XK_Search,           KEY_BROWSER_SEARCH, },
-        { XF86XK_Back,             KEY_BROWSER_BACK, },
-        { XF86XK_Forward,          KEY_BROWSER_FORWARD, },
-        { XF86XK_Stop,             KEY_BROWSER_STOP, },
-        { XF86XK_Refresh,          KEY_BROWSER_REFRESH, },
-        { XF86XK_Favorites,        KEY_BROWSER_FAVORITES, },
-        { XF86XK_AudioPause,       KEY_MEDIA_PLAY_PAUSE, },
-        { XF86XK_Reload,           KEY_BROWSER_REFRESH, },
+#include "xcb_keysym.h"
+    }, old[] = {
+#include "keysym.h"
     };
 
     /* X11 Latin-1 range */
@@ -187,6 +102,11 @@ static uint_fast32_t ConvertKeySym (xcb_keysym_t sym)
                    keysymcmp);
     if (res != NULL)
         return res->vlc;
+    /* Legacy X11 symbols outside the Unicode range */
+    res = bsearch (&sym, old, sizeof (old) / sizeof (old[0]), sizeof (old[0]),
+                   keysymcmp);
+    if (res != NULL)
+        return res->vlc;
 
     return KEY_UNSET;
 }
@@ -221,7 +141,7 @@ int ProcessKeyEvent (key_handler_t *ctx, xcb_generic_event_t *ev)
             if (e->state & XCB_MOD_MASK_1)
                 vk |= KEY_MODIFIER_ALT;
             if (e->state & XCB_MOD_MASK_4)
-                vk |= KEY_MODIFIER_COMMAND;
+                vk |= KEY_MODIFIER_META;
             var_SetInteger (ctx->obj->p_libvlc, "key-pressed", vk);
             break;
         }
@@ -244,3 +164,27 @@ int ProcessKeyEvent (key_handler_t *ctx, xcb_generic_event_t *ev)
     free (ev);
     return 0;
 }
+
+#else /* HAVE_XCB_KEYSYMS */
+
+key_handler_t *CreateKeyHandler (vlc_object_t *obj, xcb_connection_t *conn)
+{
+    msg_Err (obj, "X11 key press support not compiled-in");
+    (void) conn;
+    return NULL;
+}
+
+void DestroyKeyHandler (key_handler_t *ctx)
+{
+    (void) ctx;
+    abort ();
+}
+
+int ProcessKeyEvent (key_handler_t *ctx, xcb_generic_event_t *ev)
+{
+    (void) ctx;
+    (void) ev;
+    abort ();
+}
+
+#endif /* HAVE_XCB_KEYSYMS */