15 #include "killwindow.h"
18 #include <X11/XKBlib.h>
19 #include <X11/keysym.h>
20 #include <X11/keysymdef.h>
21 #include <X11/cursorfont.h>
23 namespace KWinInternal
26 KillWindow::KillWindow( Workspace* ws )
31 KillWindow::~KillWindow()
35 void KillWindow::start()
37 static Cursor kill_cursor = 0;
39 kill_cursor = XCreateFontCursor(tqt_xdisplay(), XC_pirate);
41 if (XGrabPointer(tqt_xdisplay(), tqt_xrootwin(), False,
42 ButtonPressMask | ButtonReleaseMask |
44 EnterWindowMask | LeaveWindowMask,
45 GrabModeAsync, GrabModeAsync, None,
46 kill_cursor, CurrentTime) == GrabSuccess)
48 XGrabKeyboard(tqt_xdisplay(), tqt_xrootwin(), False,
49 GrabModeAsync, GrabModeAsync, CurrentTime);
52 int return_pressed = 0;
53 int escape_pressed = 0;
54 int button_released = 0;
58 while (!return_pressed && !escape_pressed && !button_released)
60 XMaskEvent(tqt_xdisplay(), KeyPressMask | ButtonPressMask |
61 ButtonReleaseMask | PointerMotionMask, &ev);
63 if (ev.type == KeyPress)
65 int kc = XkbKeycodeToKeysym(tqt_xdisplay(), ev.xkey.keycode, 0, 0);
68 return_pressed = (kc == XK_Return) || (kc == XK_space);
69 escape_pressed = (kc == XK_Escape);
70 if (kc == XK_Left) mx = -10;
71 if (kc == XK_Right) mx = 10;
72 if (kc == XK_Up) my = -10;
73 if (kc == XK_Down) my = 10;
74 if (ev.xkey.state & ControlMask)
79 TQCursor::setPos(TQCursor::pos()+TQPoint(mx, my));
82 if (ev.type == ButtonRelease)
84 button_released = (ev.xbutton.button == Button1);
85 if ( ev.xbutton.button == Button3 )
87 escape_pressed = TRUE;
90 if( ev.xbutton.button == Button1 || ev.xbutton.button == Button2 )
91 workspace->killWindowId(ev.xbutton.subwindow);
98 int dummy1, dummy2, dummy3, dummy4;
100 if( XQueryPointer( tqt_xdisplay(), tqt_xrootwin(), &root, &child,
101 &dummy1, &dummy2, &dummy3, &dummy4, &dummy5 ) ==
true
103 workspace->killWindowId( child );
108 XUngrabKeyboard(tqt_xdisplay(), CurrentTime);
109 XUngrabPointer(tqt_xdisplay(), CurrentTime);