static int spnav_x11_window(Window win) { int (*prev_xerr_handler)(Display*, XErrorEvent*); XEvent xev; Window daemon_win; if(!IS_OPEN) { return -1; } if(!(daemon_win = get_daemon_window(dpy))) { return -1; } prev_xerr_handler = XSetErrorHandler(catch_badwin); xev.type = ClientMessage; xev.xclient.send_event = False; xev.xclient.display = dpy; xev.xclient.window = win; xev.xclient.message_type = command_event; xev.xclient.format = 16; xev.xclient.data.s[0] = ((unsigned int)win & 0xffff0000) >> 16; xev.xclient.data.s[1] = (unsigned int)win & 0xffff; xev.xclient.data.s[2] = CMD_APP_WINDOW; XSendEvent(dpy, daemon_win, False, 0, &xev); XSync(dpy, False); XSetErrorHandler(prev_xerr_handler); return 0; }
static int x11_sensitivity(double sens) { int (*prev_xerr_handler)(Display*, XErrorEvent*); XEvent xev; Window daemon_win; float fsens; unsigned int isens; if(!(daemon_win = get_daemon_window(dpy))) { return -1; } fsens = sens; isens = *(unsigned int*)&fsens; prev_xerr_handler = XSetErrorHandler(catch_badwin); xev.type = ClientMessage; xev.xclient.send_event = False; xev.xclient.display = dpy; xev.xclient.window = app_win; xev.xclient.message_type = command_event; xev.xclient.format = 16; xev.xclient.data.s[0] = isens & 0xffff; xev.xclient.data.s[1] = (isens & 0xffff0000) >> 16; xev.xclient.data.s[2] = CMD_APP_SENS; XSendEvent(dpy, daemon_win, False, 0, &xev); XSync(dpy, False); XSetErrorHandler(prev_xerr_handler); return 0; }