• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • twin
 

twin

  • twin
killwindow.cpp
1 /*****************************************************************
2  KWin - the KDE window manager
3  This file is part of the KDE project.
4 
5 Copyright (C) 1999, 2000 Matthias Ettrich <ettrich@kde.org>
6 Copyright (C) 2003 Lubos Lunak <l.lunak@kde.org>
7 
8 You can Freely distribute this program under the GNU General Public
9 License. See the file "COPYING" for the exact licensing terms.
10 ******************************************************************/
11 
12 //#ifndef QT_CLEAN_NAMESPACE
13 //#define QT_CLEAN_NAMESPACE
14 //#endif
15 #include "killwindow.h"
16 #include <tqcursor.h>
17 #include <X11/Xlib.h>
18 #include <X11/XKBlib.h>
19 #include <X11/keysym.h>
20 #include <X11/keysymdef.h>
21 #include <X11/cursorfont.h>
22 
23 namespace KWinInternal
24 {
25 
26 KillWindow::KillWindow( Workspace* ws )
27  : workspace( ws )
28  {
29  }
30 
31 KillWindow::~KillWindow()
32  {
33  }
34 
35 void KillWindow::start()
36  {
37  static Cursor kill_cursor = 0;
38  if (!kill_cursor)
39  kill_cursor = XCreateFontCursor(tqt_xdisplay(), XC_pirate);
40 
41  if (XGrabPointer(tqt_xdisplay(), tqt_xrootwin(), False,
42  ButtonPressMask | ButtonReleaseMask |
43  PointerMotionMask |
44  EnterWindowMask | LeaveWindowMask,
45  GrabModeAsync, GrabModeAsync, None,
46  kill_cursor, CurrentTime) == GrabSuccess)
47  {
48  XGrabKeyboard(tqt_xdisplay(), tqt_xrootwin(), False,
49  GrabModeAsync, GrabModeAsync, CurrentTime);
50 
51  XEvent ev;
52  int return_pressed = 0;
53  int escape_pressed = 0;
54  int button_released = 0;
55 
56  grabXServer();
57 
58  while (!return_pressed && !escape_pressed && !button_released)
59  {
60  XMaskEvent(tqt_xdisplay(), KeyPressMask | ButtonPressMask |
61  ButtonReleaseMask | PointerMotionMask, &ev);
62 
63  if (ev.type == KeyPress)
64  {
65  int kc = XkbKeycodeToKeysym(tqt_xdisplay(), ev.xkey.keycode, 0, 0);
66  int mx = 0;
67  int my = 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)
75  {
76  mx /= 10;
77  my /= 10;
78  }
79  TQCursor::setPos(TQCursor::pos()+TQPoint(mx, my));
80  }
81 
82  if (ev.type == ButtonRelease)
83  {
84  button_released = (ev.xbutton.button == Button1);
85  if ( ev.xbutton.button == Button3 )
86  {
87  escape_pressed = TRUE;
88  break;
89  }
90  if( ev.xbutton.button == Button1 || ev.xbutton.button == Button2 )
91  workspace->killWindowId(ev.xbutton.subwindow);
92  }
93  continue;
94  }
95  if (return_pressed)
96  {
97  Window root, child;
98  int dummy1, dummy2, dummy3, dummy4;
99  unsigned int dummy5;
100  if( XQueryPointer( tqt_xdisplay(), tqt_xrootwin(), &root, &child,
101  &dummy1, &dummy2, &dummy3, &dummy4, &dummy5 ) == true
102  && child != None )
103  workspace->killWindowId( child );
104  }
105 
106  ungrabXServer();
107 
108  XUngrabKeyboard(tqt_xdisplay(), CurrentTime);
109  XUngrabPointer(tqt_xdisplay(), CurrentTime);
110  }
111  }
112 
113 } // namespace

twin

Skip menu "twin"
  • Main Page
  • Alphabetical List
  • Class List
  • File List
  • Class Members

twin

Skip menu "twin"
  • kate
  • libkonq
  • twin
  •   lib
Generated for twin by doxygen 1.8.1.2
This website is maintained by Timothy Pearson.