another missing file
svn path=/trunk/kdebase/kwin/; revision=53659
This commit is contained in:
parent
64f8bc08a9
commit
601d183852
1 changed files with 81 additions and 0 deletions
81
killwindow.cpp
Normal file
81
killwindow.cpp
Normal file
|
@ -0,0 +1,81 @@
|
|||
/*****************************************************************
|
||||
kwin - the KDE window manager
|
||||
|
||||
Copyright (C) 1999, 2000 Matthias Ettrich <ettrich@kde.org>
|
||||
******************************************************************/
|
||||
|
||||
#define QT_CLEAN_NAMESPACE
|
||||
#include "killwindow.h"
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/keysym.h>
|
||||
#include <X11/keysymdef.h>
|
||||
#include <X11/cursorfont.h>
|
||||
|
||||
KillWindow::KillWindow( Workspace* ws )
|
||||
: workspace( ws ) {}
|
||||
|
||||
KillWindow::~KillWindow() {}
|
||||
|
||||
void KillWindow::start() {
|
||||
static Cursor kill_cursor = 0;
|
||||
if (!kill_cursor)
|
||||
kill_cursor = XCreateFontCursor(qt_xdisplay(), XC_pirate);
|
||||
|
||||
if (XGrabPointer(qt_xdisplay(), qt_xrootwin(), False,
|
||||
ButtonPressMask | ButtonReleaseMask |
|
||||
PointerMotionMask |
|
||||
EnterWindowMask | LeaveWindowMask,
|
||||
GrabModeAsync, GrabModeAsync, None,
|
||||
kill_cursor, CurrentTime) == GrabSuccess)
|
||||
{
|
||||
XGrabKeyboard(qt_xdisplay(), qt_xrootwin(), False,
|
||||
GrabModeAsync, GrabModeAsync, CurrentTime);
|
||||
|
||||
XEvent ev;
|
||||
int return_pressed = 0;
|
||||
int escape_pressed = 0;
|
||||
int button_released = 0;
|
||||
|
||||
XGrabServer(qt_xdisplay());
|
||||
|
||||
while (!return_pressed && !escape_pressed && !button_released)
|
||||
{
|
||||
XMaskEvent(qt_xdisplay(), KeyPressMask | ButtonPressMask |
|
||||
ButtonReleaseMask | PointerMotionMask, &ev);
|
||||
|
||||
if (ev.type == KeyPress)
|
||||
{
|
||||
int kc = XKeycodeToKeysym(qt_xdisplay(), ev.xkey.keycode, 0);
|
||||
int mx = 0;
|
||||
int my = 0;
|
||||
return_pressed = (kc == XK_Return) || (kc == XK_space);
|
||||
escape_pressed = (kc == XK_Escape);
|
||||
if (kc == XK_Left) mx = -10;
|
||||
if (kc == XK_Right) mx = 10;
|
||||
if (kc == XK_Up) my = -10;
|
||||
if (kc == XK_Down) my = 10;
|
||||
if (ev.xkey.state & ControlMask)
|
||||
{
|
||||
mx /= 10;
|
||||
my /= 10;
|
||||
}
|
||||
QCursor::setPos(QCursor::pos()+QPoint(mx, my));
|
||||
}
|
||||
|
||||
if (ev.type == ButtonRelease)
|
||||
{
|
||||
button_released = (ev.xbutton.button == Button1);
|
||||
workspace->killWindowAtPosition(ev.xbutton.x_root, ev.xbutton.y_root);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (return_pressed)
|
||||
workspace->killWindowAtPosition(QCursor::pos().x(), QCursor::pos().y());
|
||||
|
||||
XUngrabServer(qt_xdisplay());
|
||||
|
||||
XUngrabKeyboard(qt_xdisplay(), CurrentTime);
|
||||
XUngrabPointer(qt_xdisplay(), CurrentTime);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in a new issue