Permalink
Browse files

Cleanup libswmhack.so.

  • Loading branch information...
1 parent 1fbe534 commit a3b566b69b5ad21bfe8a83c28ce31bb836785032 @LordReg LordReg committed May 20, 2015
Showing with 46 additions and 86 deletions.
  1. +46 −86 lib/swm_hack.c
View
@@ -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 ||

0 comments on commit a3b566b

Please sign in to comment.