From: Dana Jansens Date: Thu, 10 May 2007 15:33:03 +0000 (+0000) Subject: add the focusout test X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=df45b1e146b31e31f7cdf9142ffc04f44d6c9649;p=chaz%2Fopenbox add the focusout test --- diff --git a/tests/focusout.c b/tests/focusout.c new file mode 100644 index 00000000..1f31a8aa --- /dev/null +++ b/tests/focusout.c @@ -0,0 +1,165 @@ +/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- + + focusout.c for the Openbox window manager + Copyright (c) 2003-2007 Dana Jansens + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + See the COPYING file for a copy of the GNU General Public License. +*/ + +#include +#include +#include +#include + +int main () { + Display *display; + Window win, child; + XEvent report; + Atom _net_fs, _net_state; + XEvent msg; + int x=50,y=50,h=100,w=400; + XWMHints hint; + + display = XOpenDisplay(NULL); + + if (display == NULL) { + fprintf(stderr, "couldn't connect to X server :0\n"); + return 0; + } + + win = XCreateWindow(display, RootWindow(display, 0), + x, y, w, h, 10, CopyFromParent, CopyFromParent, + CopyFromParent, 0, NULL); + child = XCreateWindow(display, win, + 10, 10, w-20, h-20, 0, CopyFromParent, CopyFromParent, + CopyFromParent, 0, NULL); + + XSetWindowBackground(display,win,WhitePixel(display,0)); + XSetWindowBackground(display,child,BlackPixel(display,0)); + + XSelectInput(display, win, FocusChangeMask); + XMapWindow(display, win); + XMapWindow(display, child); + + while (1) { + const char *mode, *detail; + + XNextEvent(display, &report); + + switch (report.type) { + case ButtonPress: + printf("button press\n"); + printf("type : %d\n", report.xbutton.type); + printf("serial : %d\n", report.xbutton.serial); + printf("send_event : %d\n", report.xbutton.send_event); + printf("display : 0x%x\n", report.xbutton.display); + printf("window : 0x%x\n", report.xbutton.window); + printf("root : 0x%x\n", report.xbutton.root); + printf("subwindow : 0x%x\n", report.xbutton.subwindow); + printf("time : %d\n", report.xbutton.time); + printf("x, y : %d, %d\n", report.xbutton.x, + report.xbutton.y); + printf("rootx, rooty: %d, %d\n", report.xbutton.x_root, + report.xbutton.y_root); + printf("state : 0x%x\n", report.xbutton.state); + printf("button : %d\n", report.xbutton.button); + printf("same_screen : %d\n", report.xbutton.same_screen); + printf("---\n"); + break; + case MotionNotify: + printf("motion\n"); + printf("type : %d\n", report.xmotion.type); + printf("serial : %d\n", report.xmotion.serial); + printf("send_event : %d\n", report.xmotion.send_event); + printf("display : 0x%x\n", report.xmotion.display); + printf("window : 0x%x\n", report.xmotion.window); + printf("root : 0x%x\n", report.xmotion.root); + printf("subwindow : 0x%x\n", report.xmotion.subwindow); + printf("time : %d\n", report.xmotion.time); + printf("x, y : %d, %d\n", report.xmotion.x, + report.xmotion.y); + printf("rootx, rooty: %d, %d\n", report.xmotion.x_root, + report.xmotion.y_root); + printf("state : 0x%x\n", report.xmotion.state); + printf("is_hint : %d\n", report.xmotion.is_hint); + printf("same_screen : %d\n", report.xmotion.same_screen); + printf("---\n"); + if (XGrabPointer(display, win, False, ButtonReleaseMask, + GrabModeAsync, GrabModeAsync, None, None, + report.xmotion.time) == GrabSuccess) + printf("GrabSuccess\n"); + else + printf("GrabFail\n"); + break; + case ButtonRelease: + XUngrabPointer(display, report.xbutton.time); + break; + case FocusIn: + switch (report.xfocus.mode) { + case NotifyNormal: mode = "NotifyNormal"; break; + case NotifyGrab: mode = "NotifyGrab"; break; + case NotifyUngrab: mode = "NotifyUngrab"; break; + } + + switch (report.xfocus.detail) { + case NotifyAncestor: detail = "NotifyAncestor"; break; + case NotifyVirtual: detail = "NotifyVirtual"; break; + case NotifyInferior: detail = "NotifyInferior"; break; + case NotifyNonlinear: detail = "NotifyNonlinear"; break; + case NotifyNonlinearVirtual: detail = "NotifyNonlinearVirtual"; break; + case NotifyPointer: detail = "NotifyPointer"; break; + case NotifyPointerRoot: detail = "NotifyPointerRoot"; break; + case NotifyDetailNone: detail = "NotifyDetailNone"; break; + } + printf("focusin\n"); + printf("type : %d\n", report.xfocus.type); + printf("serial : %d\n", report.xfocus.serial); + printf("send_event: %d\n", report.xfocus.send_event); + printf("display : 0x%x\n", report.xfocus.display); + printf("window : 0x%x\n", report.xfocus.window); + printf("mode : %s\n", mode); + printf("detail : %s\n", detail); + printf("---\n"); + break; + case FocusOut: + switch (report.xfocus.mode) { + case NotifyNormal: mode = "NotifyNormal"; break; + case NotifyGrab: mode = "NotifyGrab"; break; + case NotifyUngrab: mode = "NotifyUngrab"; break; + } + + switch (report.xfocus.detail) { + case NotifyAncestor: detail = "NotifyAncestor"; break; + case NotifyVirtual: detail = "NotifyVirtual"; break; + case NotifyInferior: detail = "NotifyInferior"; break; + case NotifyNonlinear: detail = "NotifyNonlinear"; break; + case NotifyNonlinearVirtual: detail = "NotifyNonlinearVirtual"; break; + case NotifyPointer: detail = "NotifyPointer"; break; + case NotifyPointerRoot: detail = "NotifyPointerRoot"; break; + case NotifyDetailNone: detail = "NotifyDetailNone"; break; + } + printf("focusout\n"); + printf("type : %d\n", report.xfocus.type); + printf("serial : %d\n", report.xfocus.serial); + printf("send_event: %d\n", report.xfocus.send_event); + printf("display : 0x%x\n", report.xfocus.display); + printf("window : 0x%x\n", report.xfocus.window); + printf("mode : %s\n", mode); + printf("detail : %s\n", detail); + printf("---\n"); + } + + } + + return 1; +}