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

twin

killwindow.cpp

00001 /*****************************************************************
00002  KWin - the KDE window manager
00003  This file is part of the KDE project.
00004 
00005 Copyright (C) 1999, 2000 Matthias Ettrich <ettrich@kde.org>
00006 Copyright (C) 2003 Lubos Lunak <l.lunak@kde.org>
00007 
00008 You can Freely distribute this program under the GNU General Public
00009 License. See the file "COPYING" for the exact licensing terms.
00010 ******************************************************************/
00011 
00012 //#ifndef QT_CLEAN_NAMESPACE
00013 //#define QT_CLEAN_NAMESPACE
00014 //#endif
00015 #include "killwindow.h"
00016 #include <tqcursor.h>
00017 #include <X11/Xlib.h>
00018 #include <X11/XKBlib.h>
00019 #include <X11/keysym.h>
00020 #include <X11/keysymdef.h>
00021 #include <X11/cursorfont.h>
00022 
00023 namespace KWinInternal
00024 {
00025 
00026 KillWindow::KillWindow( Workspace* ws )
00027     : workspace( ws )
00028     {
00029     }
00030 
00031 KillWindow::~KillWindow()
00032     {
00033     }
00034 
00035 void KillWindow::start() 
00036     {
00037     static Cursor kill_cursor = 0;
00038     if (!kill_cursor)
00039         kill_cursor = XCreateFontCursor(tqt_xdisplay(), XC_pirate);
00040 
00041     if (XGrabPointer(tqt_xdisplay(), tqt_xrootwin(), False,
00042                      ButtonPressMask | ButtonReleaseMask |
00043                      PointerMotionMask |
00044                      EnterWindowMask | LeaveWindowMask,
00045                      GrabModeAsync, GrabModeAsync, None,
00046                      kill_cursor, CurrentTime) == GrabSuccess) 
00047         {
00048         XGrabKeyboard(tqt_xdisplay(), tqt_xrootwin(), False,
00049                       GrabModeAsync, GrabModeAsync, CurrentTime);
00050 
00051         XEvent ev;
00052         int return_pressed  = 0;
00053         int escape_pressed  = 0;
00054         int button_released = 0;
00055 
00056         grabXServer();
00057 
00058         while (!return_pressed && !escape_pressed && !button_released) 
00059             {
00060             XMaskEvent(tqt_xdisplay(), KeyPressMask | ButtonPressMask |
00061                        ButtonReleaseMask | PointerMotionMask, &ev);
00062 
00063             if (ev.type == KeyPress)    
00064                 {
00065                 int kc = XkbKeycodeToKeysym(tqt_xdisplay(), ev.xkey.keycode, 0, 0);
00066                 int mx = 0;
00067                 int my = 0;
00068                 return_pressed = (kc == XK_Return) || (kc == XK_space);
00069                 escape_pressed = (kc == XK_Escape);
00070                 if (kc == XK_Left)  mx = -10;
00071                 if (kc == XK_Right) mx = 10;
00072                 if (kc == XK_Up)    my = -10;
00073                 if (kc == XK_Down)  my = 10;
00074                 if (ev.xkey.state & ControlMask) 
00075                     {
00076                     mx /= 10;
00077                     my /= 10;
00078                     }
00079                 TQCursor::setPos(TQCursor::pos()+TQPoint(mx, my));
00080                 }
00081 
00082             if (ev.type == ButtonRelease) 
00083                 {
00084                 button_released = (ev.xbutton.button == Button1);
00085                 if ( ev.xbutton.button == Button3 ) 
00086                     {
00087                     escape_pressed = TRUE;
00088                     break;
00089                     }
00090                 if( ev.xbutton.button == Button1 || ev.xbutton.button == Button2 )
00091                     workspace->killWindowId(ev.xbutton.subwindow);
00092                 }
00093             continue;
00094             }
00095         if (return_pressed) 
00096             {
00097             Window root, child;
00098             int dummy1, dummy2, dummy3, dummy4;
00099             unsigned int dummy5;
00100             if( XQueryPointer( tqt_xdisplay(), tqt_xrootwin(), &root, &child,
00101                 &dummy1, &dummy2, &dummy3, &dummy4, &dummy5 ) == true
00102                 && child != None )
00103                 workspace->killWindowId( child );
00104             }
00105 
00106         ungrabXServer();
00107 
00108         XUngrabKeyboard(tqt_xdisplay(), CurrentTime);
00109         XUngrabPointer(tqt_xdisplay(), CurrentTime);
00110         }
00111     }
00112 
00113 } // 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.6.3
This website is maintained by Timothy Pearson.