X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=linux%2Fxenv.c;h=94e1c504119e248f00417b82383b0bef2c23869e;hb=f89d84717ae3536779f04cdfb57cf940d2bd8ade;hp=a932a1ee367d331a91a77bac626fa39a167e9677;hpb=477ba3f2eca85b08ef3c1a9d1392698c1793403a;p=libpicofe.git diff --git a/linux/xenv.c b/linux/xenv.c index a932a1e..94e1c50 100644 --- a/linux/xenv.c +++ b/linux/xenv.c @@ -5,6 +5,7 @@ * (at your option): * - GNU GPL, version 2 or later. * - GNU LGPL, version 2.1 or later. + * - MAME license. * See the COPYING file in the top-level directory. */ @@ -25,6 +26,8 @@ #include #include +#include "xenv.h" + #define PFX "xenv: " #define FPTR(f) typeof(f) * p##f @@ -81,13 +84,14 @@ static Cursor transparent_cursor(struct xstuff *xf, Display *display, Window win return cursor; } -static int x11h_init(const char *window_title) +static int x11h_init(int *xenv_flags, const char *window_title) { unsigned int display_width, display_height; Display *display; XSetWindowAttributes attributes; Window win; Visual *visual; + long evt_mask; void *x11lib; int screen; @@ -153,10 +157,14 @@ static int x11h_init(const char *window_title) attributes.cursor = transparent_cursor(&g_xstuff, display, win); g_xstuff.pXChangeWindowAttributes(display, win, CWOverrideRedirect | CWCursor, &attributes); - g_xstuff.pXStoreName(display, win, window_title); - g_xstuff.pXSelectInput(display, win, ExposureMask | FocusChangeMask - | KeyPressMask | KeyReleaseMask | ButtonPressMask - | ButtonReleaseMask | PointerMotionMask | PropertyChangeMask); + if (window_title != NULL) + g_xstuff.pXStoreName(display, win, window_title); + evt_mask = ExposureMask | FocusChangeMask | PropertyChangeMask; + if (xenv_flags && (*xenv_flags & XENV_CAP_KEYS)) + evt_mask |= KeyPressMask | KeyReleaseMask; + if (xenv_flags && (*xenv_flags & XENV_CAP_MOUSE)) + evt_mask |= ButtonPressMask | ButtonReleaseMask | PointerMotionMask; + g_xstuff.pXSelectInput(display, win, evt_mask); g_xstuff.pXMapWindow(display, win); g_xstuff.pXGrabKeyboard(display, win, False, GrabModeAsync, GrabModeAsync, CurrentTime); g_xstuff.pXkbSetDetectableAutoRepeat(display, 1, NULL); @@ -368,17 +376,16 @@ static void tty_end(void) g_kbdfd = -1; } -int xenv_init(int *have_mouse_events, const char *window_title) +int xenv_init(int *xenv_flags, const char *window_title) { - int have_mouse = 0; int ret; - ret = x11h_init(window_title); - if (ret == 0) { - have_mouse = 1; + ret = x11h_init(xenv_flags, window_title); + if (ret == 0) goto out; - } + if (xenv_flags != NULL) + *xenv_flags &= ~(XENV_CAP_KEYS | XENV_CAP_MOUSE); /* TODO? */ ret = tty_init(); if (ret == 0) goto out; @@ -386,8 +393,6 @@ int xenv_init(int *have_mouse_events, const char *window_title) fprintf(stderr, PFX "error: both x11h_init and tty_init failed\n"); ret = -1; out: - if (have_mouse_events != NULL) - *have_mouse_events = have_mouse; return ret; }