]> code.delx.au - spectrwm/commitdiff
Cleanup libswmhack.so.
authorReginald Kennedy <rk@rejii.com>
Wed, 20 May 2015 18:40:54 +0000 (02:40 +0800)
committerReginald Kennedy <rk@rejii.com>
Wed, 20 May 2015 19:30:53 +0000 (03:30 +0800)
lib/swm_hack.c

index 40fa2246322261cc313b966ac3f95b6f9fd86fb7..04be57be2cc24545141478cf2386aad509618f42 100644 (file)
@@ -41,6 +41,7 @@
  * Basic hack mechanism (dlopen etc.) taken from e_hack.c in e17.
  */
 #include <string.h>
+#include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <dlfcn.h>
@@ -54,11 +55,17 @@ static void         *lib_xlib = NULL;
 static void            *lib_xtlib = NULL;
 
 static Window          root = None;
-static int             xterm = 0;
+static bool            xterm = false;
 static Display         *display = NULL;
 
 void   set_property(Display *, Window, char *, char *);
 
+#ifdef _GNU_SOURCE
+#define DLOPEN(s)      RTLD_NEXT
+#else
+#define DLOPEN(s)      dlopen((s), RTLD_GLOBAL | RTLD_LAZY)
+#endif
+
 /* Find our root window */
 static              Window
 MyRoot(Display * dpy)
@@ -71,7 +78,7 @@ MyRoot(Display * dpy)
        root = DefaultRootWindow(dpy);
 
        s = getenv("ENL_WM_ROOT");
-       if (!s)
+       if (s == NULL)
                return root;
 
        sscanf(s, "%lx", &root);
@@ -95,23 +102,15 @@ set_property(Display *dpy, Window id, char *name, char *val)
        static XIA              *xia = NULL;
        static XCP              *xcp = NULL;
 
-#ifdef _GNU_SOURCE
-       /* load the function pointer with RTLD_NEXT
-        * this might be the real X function or another
-        * preloaded intercept
-        */
-       if (!lib_xlib)
-               lib_xlib = RTLD_NEXT;
-#else
-       /* find the real Xlib and the real X function */
-       if (!lib_xlib)
-               lib_xlib = dlopen("libX11.so", RTLD_GLOBAL | RTLD_LAZY);
-#endif
-       if (lib_xlib && !xia)
-               xia = (XIA *) dlsym(lib_xlib, "XInternAtom");
-       if (lib_xlib && !xcp)
-               xcp = (XCP *) dlsym(lib_xlib, "XChangeProperty");
-       if (!xia || !xcp) {
+       if (lib_xlib == NULL)
+               lib_xlib = DLOPEN("libX11.so");
+       if (lib_xlib) {
+               if (xia == NULL)
+                       xia = (XIA *) dlsym(lib_xlib, "XInternAtom");
+               if (xcp == NULL)
+                       xcp = (XCP *) dlsym(lib_xlib, "XChangeProperty");
+       }
+       if (xia == NULL || xcp == NULL) {
                fprintf(stderr, "libswmhack.so: ERROR: %s\n", dlerror());
                return;
        }
@@ -145,41 +144,31 @@ XCreateWindow(Display *dpy, Window parent, int x, int y,
        char            *env;
        Window          id;
 
-#ifdef _GNU_SOURCE
-       /* load the function pointer with RTLD_NEXT
-        * this might be the real X function or another
-        * preloaded intercept
-        */
-       if (!lib_xlib)
-               lib_xlib = RTLD_NEXT;
-#else
-       /* find the real Xlib and the real X function */
-       if (!lib_xlib)
-               lib_xlib = dlopen("libX11.so", RTLD_GLOBAL | RTLD_LAZY);
-#endif
-       if (lib_xlib && !func) {
+       if (lib_xlib == NULL)
+               lib_xlib = DLOPEN("libX11.so");
+       if (lib_xlib && func == NULL) {
                func = (CWF *) dlsym(lib_xlib, "XCreateWindow");
                display = dpy;
        }
-       if (!func) {
+       if (func == NULL) {
                fprintf(stderr, "libswmhack.so: ERROR: %s\n", dlerror());
-               return BadImplementation;
+               return None;
        }
 
        if (parent == DefaultRootWindow(dpy))
                parent = MyRoot(dpy);
-       
+
        id = (*func) (dpy, parent, x, y, width, height, border_width,
            depth, clss, visual, valuemask, attributes);
 
        if (id) {
-               if ((env = getenv("_SWM_WS")) != NULL) 
+               if ((env = getenv("_SWM_WS")) != NULL)
                        set_property(dpy, id, "_SWM_WS", env);
                if ((env = getenv("_SWM_PID")) != NULL)
                        set_property(dpy, id, "_SWM_PID", env);
                if ((env = getenv("_SWM_XTERM_FONTADJ")) != NULL) {
                        unsetenv("_SWM_XTERM_FONTADJ");
-                       xterm = 1;
+                       xterm = true;
                }
        }
        return (id);
@@ -203,23 +192,13 @@ XCreateSimpleWindow(Display *dpy, Window parent, int x, int y,
        char            *env;
        Window          id;
 
-#ifdef _GNU_SOURCE
-       /* load the function pointer with RTLD_NEXT
-        * this might be the real X function or another
-        * preloaded intercept
-        */
-       if (!lib_xlib)
-               lib_xlib = RTLD_NEXT;
-#else
-       /* find the real Xlib and the real X function */
-       if (!lib_xlib)
-               lib_xlib = dlopen("libX11.so", RTLD_GLOBAL | RTLD_LAZY);
-#endif
-       if (lib_xlib && !func)
+       if (lib_xlib == NULL)
+               lib_xlib = DLOPEN("libX11.so");
+       if (lib_xlib && func == NULL)
                func = (CSWF *) dlsym(lib_xlib, "XCreateSimpleWindow");
-       if (!func) {
+       if (func == NULL) {
                fprintf(stderr, "libswmhack.so: ERROR: %s\n", dlerror());
-               return BadImplementation;
+               return None;
        }
 
        if (parent == DefaultRootWindow(dpy))
@@ -229,13 +208,13 @@ XCreateSimpleWindow(Display *dpy, Window parent, int x, int y,
            border_width, border, background);
 
        if (id) {
-               if ((env = getenv("_SWM_WS")) != NULL) 
+               if ((env = getenv("_SWM_WS")) != NULL)
                        set_property(dpy, id, "_SWM_WS", env);
                if ((env = getenv("_SWM_PID")) != NULL)
                        set_property(dpy, id, "_SWM_PID", env);
                if ((env = getenv("_SWM_XTERM_FONTADJ")) != NULL) {
                        unsetenv("_SWM_XTERM_FONTADJ");
-                       xterm = 1;
+                       xterm = true;
                }
        }
        return (id);
@@ -250,23 +229,14 @@ XReparentWindow(Display *dpy, Window window, Window parent, int x, int y)
 {
        static RWF         *func = NULL;
 
-#ifdef _GNU_SOURCE
-       /* load the function pointer with RTLD_NEXT
-        * this might be the real X function or another
-        * preloaded intercept
-        */
-       if (!lib_xlib)
-               lib_xlib = RTLD_NEXT;
-#else
-       /* find the real Xlib and the real X function */
-       if (!lib_xlib)
-               lib_xlib = dlopen("libX11.so", RTLD_GLOBAL | RTLD_LAZY);
-#endif
-       if (lib_xlib && !func)
+       if (lib_xlib == NULL)
+               lib_xlib = DLOPEN("libX11.so");
+       if (lib_xlib && func == NULL)
                func = (RWF *) dlsym(lib_xlib, "XReparentWindow");
-       if (!func) {
+       if (func == NULL) {
                fprintf(stderr, "libswmhack.so: ERROR: %s\n", dlerror());
-               return BadImplementation;
+               /* Xlib function always returns 1, so return 0 here. */
+               return 0;
        }
 
        if (parent == DefaultRootWindow(dpy))
@@ -290,26 +260,16 @@ XtAppNextEvent(XtAppContext app_context, XEvent *event_return)
        static ANEF     *func = NULL;
        static KeyCode  kp_add = 0, kp_subtract = 0;
 
-#ifdef _GNU_SOURCE
-       /* load the function pointer with RTLD_NEXT
-        * this might be the real X function or another
-        * preloaded intercept
-        */
-       if (!lib_xtlib)
-               lib_xtlib = RTLD_NEXT;
-#else
-       /* find the real Xlib and the real X function */
-       if (!lib_xtlib)
-               lib_xtlib = dlopen("libXt.so", RTLD_GLOBAL | RTLD_LAZY);
-#endif
-       if (lib_xtlib && !func) {
+       if (lib_xtlib == NULL)
+               lib_xtlib = DLOPEN("libXt.so");
+       if (lib_xtlib && func == NULL) {
                func = (ANEF *) dlsym(lib_xtlib, "XtAppNextEvent");
-               if (display != NULL) {
+               if (display) {
                        kp_add = XKeysymToKeycode(display, XK_KP_Add);
                        kp_subtract = XKeysymToKeycode(display, XK_KP_Subtract);
                }
        }
-       if (!func) {
+       if (func == NULL) {
                fprintf(stderr, "libswmhack.so: ERROR: %s\n", dlerror());
                return;
        }
@@ -319,9 +279,9 @@ XtAppNextEvent(XtAppContext app_context, XEvent *event_return)
        /* Return here if it's not an Xterm. */
        if (!xterm)
                return;
-       
+
        /* Allow spoofing of font change keystrokes. */
-       if ((event_return->type == KeyPress ||  
+       if ((event_return->type == KeyPress ||
           event_return->type == KeyRelease) &&
           event_return->xkey.state == ShiftMask &&
           (event_return->xkey.keycode == kp_add ||