15 #include "killwindow.h"
18 #include <X11/keysym.h>
19 #include <X11/keysymdef.h>
20 #include <X11/cursorfont.h>
22 namespace KWinInternal
25 KillWindow::KillWindow( Workspace* ws )
30 KillWindow::~KillWindow()
34 void KillWindow::start()
36 static Cursor kill_cursor = 0;
38 kill_cursor = XCreateFontCursor(qt_xdisplay(), XC_pirate);
40 if (XGrabPointer(qt_xdisplay(), qt_xrootwin(), False,
41 ButtonPressMask | ButtonReleaseMask |
43 EnterWindowMask | LeaveWindowMask,
44 GrabModeAsync, GrabModeAsync, None,
45 kill_cursor, CurrentTime) == GrabSuccess)
47 XGrabKeyboard(qt_xdisplay(), qt_xrootwin(), False,
48 GrabModeAsync, GrabModeAsync, CurrentTime);
51 int return_pressed = 0;
52 int escape_pressed = 0;
53 int button_released = 0;
57 while (!return_pressed && !escape_pressed && !button_released)
59 XMaskEvent(qt_xdisplay(), KeyPressMask | ButtonPressMask |
60 ButtonReleaseMask | PointerMotionMask, &ev);
62 if (ev.type == KeyPress)
64 int kc = XKeycodeToKeysym(qt_xdisplay(), ev.xkey.keycode, 0);
67 return_pressed = (kc == XK_Return) || (kc == XK_space);
68 escape_pressed = (kc == XK_Escape);
69 if (kc == XK_Left) mx = -10;
70 if (kc == XK_Right) mx = 10;
71 if (kc == XK_Up) my = -10;
72 if (kc == XK_Down) my = 10;
73 if (ev.xkey.state & ControlMask)
78 TQCursor::setPos(TQCursor::pos()+TQPoint(mx, my));
81 if (ev.type == ButtonRelease)
83 button_released = (ev.xbutton.button == Button1);
84 if ( ev.xbutton.button == Button3 )
86 escape_pressed = TRUE;
89 if( ev.xbutton.button == Button1 || ev.xbutton.button == Button2 )
90 workspace->killWindowId(ev.xbutton.subwindow);
97 int dummy1, dummy2, dummy3, dummy4;
99 if( XQueryPointer( qt_xdisplay(), qt_xrootwin(), &root, &child,
100 &dummy1, &dummy2, &dummy3, &dummy4, &dummy5 ) ==
true
102 workspace->killWindowId( child );
107 XUngrabKeyboard(qt_xdisplay(), CurrentTime);
108 XUngrabPointer(qt_xdisplay(), CurrentTime);