You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
409 lines
12 KiB
409 lines
12 KiB
15 years ago
|
// -*- c++ -*-
|
||
|
/* This file is part of the KDE project
|
||
|
*
|
||
|
* Copyright (C) 2002 Till Krech <till@snafu.de>
|
||
|
*
|
||
|
* This library is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU Library General Public
|
||
|
* License as published by the Free Software Foundation; either
|
||
|
* version 2 of the License, or (at your option) any later version.
|
||
|
*
|
||
|
* This library is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
* Library General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU Library General Public License
|
||
|
* along with this library; see the file COPYING.LIB. If not, write to
|
||
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||
|
* Boston, MA 02110-1301, USA.
|
||
|
*/
|
||
|
|
||
|
#include <X11/X.h>
|
||
|
#include <X11/Xlib.h>
|
||
|
#include <X11/Xutil.h>
|
||
|
#include <X11/Xatom.h>
|
||
|
#include <qstring.h>
|
||
|
#include <qstringlist.h>
|
||
|
|
||
|
#include "kxeventutil.h"
|
||
|
|
||
|
QString KXEventUtil::getXAnyEventInfo(XEvent *xevent) {
|
||
|
XAnyEvent *e = &xevent->xany;
|
||
|
QString winname("window");
|
||
|
switch (e->type) {
|
||
|
case GraphicsExpose:
|
||
|
case NoExpose:
|
||
|
winname="drawable";
|
||
|
break;
|
||
|
case CreateNotify:
|
||
|
case ConfigureRequest:
|
||
|
winname="parent";
|
||
|
break;
|
||
|
case DestroyNotify:
|
||
|
case ConfigureNotify:
|
||
|
case MapNotify:
|
||
|
case ReparentNotify:
|
||
|
case UnmapNotify:
|
||
|
winname="event";
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
QString s("serial=%1 send_event=%2 display=0x%3 %4=%5");
|
||
|
return
|
||
|
s.arg(e->serial)
|
||
|
.arg(e->send_event)
|
||
|
.arg((long)e->display, 0, 16)
|
||
|
.arg(winname)
|
||
|
.arg(e->window);
|
||
|
}
|
||
|
QString KXEventUtil::getXButtonEventInfo(XEvent *xevent) {
|
||
|
XButtonEvent *e = &xevent->xbutton;
|
||
|
QString s("root=%1 subwindow=%2 time=%3 x=%4 y=%5 x_root=%6 y_root=%7 state=%8 button=%9");
|
||
|
QString t(" same_screen=%1");
|
||
|
return
|
||
|
s.arg(e->root)
|
||
|
.arg(e->subwindow)
|
||
|
.arg(e->time)
|
||
|
.arg(e->x)
|
||
|
.arg(e->y)
|
||
|
.arg(e->x_root)
|
||
|
.arg(e->y_root)
|
||
|
.arg(e->state)
|
||
|
.arg(e->button)
|
||
|
+t.arg(e->same_screen);
|
||
|
}
|
||
|
|
||
|
QString KXEventUtil::getXKeyEventInfo(XEvent *xevent) {
|
||
|
XKeyEvent *e = &xevent->xkey;
|
||
|
QString s("root=%1 subwindow=%2 time=%3 x=%4 y=%5 x_root=%6 y_root=%7 state=%8 keycode=%9");
|
||
|
QString t(" same_screen=%1");
|
||
|
return
|
||
|
s.arg(e->root)
|
||
|
.arg(e->subwindow)
|
||
|
.arg(e->time)
|
||
|
.arg(e->x)
|
||
|
.arg(e->y)
|
||
|
.arg(e->x_root)
|
||
|
.arg(e->y_root)
|
||
|
.arg(e->state)
|
||
|
.arg(e->keycode)
|
||
|
+t.arg(e->same_screen);
|
||
|
}
|
||
|
|
||
|
QString KXEventUtil::getXMotionEventInfo(XEvent *xevent) {
|
||
|
XMotionEvent *e = &xevent->xmotion;
|
||
|
QString s("root=%1 subwindow=%2 time=%3 x=%4 y=%5 x_root=%6 y_root=%7 state=%8 is_hint=%9");
|
||
|
QString t(" same_screen=%1");
|
||
|
return
|
||
|
s.arg(e->root)
|
||
|
.arg(e->subwindow)
|
||
|
.arg(e->time)
|
||
|
.arg(e->x)
|
||
|
.arg(e->y)
|
||
|
.arg(e->x_root)
|
||
|
.arg(e->y_root)
|
||
|
.arg(e->state)
|
||
|
.arg(e->is_hint)
|
||
|
+t.arg(e->same_screen);
|
||
|
}
|
||
|
QString KXEventUtil::getXCrossingEventInfo(XEvent *xevent) {
|
||
|
XCrossingEvent *e = &xevent->xcrossing;
|
||
|
QString ms, ds;
|
||
|
switch (e->mode) {
|
||
|
case NotifyNormal: ms = "NotifyNormal"; break;
|
||
|
case NotifyGrab: ms = "NotifyGrab"; break;
|
||
|
case NotifyUngrab: ms = "NotifyUngrab"; break;
|
||
|
default: ms="?";
|
||
|
}
|
||
|
switch (e->detail) {
|
||
|
case NotifyAncestor: ds = "NotifyAncestor"; break;
|
||
|
case NotifyVirtual: ds = "NotifyVirtual"; break;
|
||
|
case NotifyInferior: ds = "NotifyInferior"; break;
|
||
|
case NotifyNonlinear: ds = "NotifyNonlinear"; break;
|
||
|
case NotifyNonlinearVirtual: ds = "NotifyNonlinearVirtual"; break;
|
||
|
default: ds="?";
|
||
|
}
|
||
|
|
||
|
QString s("root=%1 subwindow=%2 time=%3 x=%4 y=%5 x_root=%6 y_root=%7 mode=%8=%9 ");
|
||
|
QString t("detail=%1=%2 same_screen=%3 focus=%4 state=%5");
|
||
|
return
|
||
|
s.arg(e->root)
|
||
|
.arg(e->subwindow)
|
||
|
.arg(e->time)
|
||
|
.arg(e->x)
|
||
|
.arg(e->y)
|
||
|
.arg(e->x_root)
|
||
|
.arg(e->y_root)
|
||
|
.arg(e->mode).arg(ms)
|
||
|
+
|
||
|
t.arg(e->detail).arg(ds)
|
||
|
.arg(e->same_screen)
|
||
|
.arg(e->focus)
|
||
|
.arg(e->state);
|
||
|
}
|
||
|
QString KXEventUtil::getXFocusChangeEventInfo(XEvent *xevent) {
|
||
|
XFocusChangeEvent *e = &xevent->xfocus;
|
||
|
QString s("mode=%1 detail=%2");
|
||
|
return
|
||
|
s.arg(e->mode)
|
||
|
.arg(e->detail);
|
||
|
}
|
||
|
QString KXEventUtil::getXExposeEventInfo(XEvent *xevent) {
|
||
|
XExposeEvent *e = &xevent->xexpose;
|
||
|
QString s("x=%1 y=%2 width=%3 height=%4 count=%5");
|
||
|
return
|
||
|
s.arg(e->x)
|
||
|
.arg(e->y)
|
||
|
.arg(e->width)
|
||
|
.arg(e->height)
|
||
|
.arg(e->count);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
QString KXEventUtil::getXGraphicsExposeEventInfo(XEvent *xevent) {
|
||
|
XGraphicsExposeEvent *e = &xevent->xgraphicsexpose;
|
||
|
QString s("x=%1 y=%2 width=%3 height=%4 count=%5 major_code=%6 minor_code=%7");
|
||
|
return
|
||
|
s.arg(e->x)
|
||
|
.arg(e->y)
|
||
|
.arg(e->width)
|
||
|
.arg(e->height)
|
||
|
.arg(e->count)
|
||
|
.arg(e->major_code)
|
||
|
.arg(e->minor_code);
|
||
|
}
|
||
|
QString KXEventUtil::getXNoExposeEventInfo(XEvent *xevent) {
|
||
|
XNoExposeEvent *e = &xevent->xnoexpose;
|
||
|
QString s("major_code=%1 minor_code=%2");
|
||
|
return
|
||
|
s.arg(e->major_code)
|
||
|
.arg(e->minor_code);
|
||
|
}
|
||
|
|
||
|
|
||
|
QString KXEventUtil::getXCreateWindowEventInfo(XEvent *xevent) {
|
||
|
XCreateWindowEvent *e = &xevent->xcreatewindow;
|
||
|
QString s("window=%1 x=%2 y=%3 width=%4 height=%5 border_width=%6 override_redirect=%7");
|
||
|
return
|
||
|
s.arg(e->window)
|
||
|
.arg(e->x)
|
||
|
.arg(e->y)
|
||
|
.arg(e->width)
|
||
|
.arg(e->height)
|
||
|
.arg(e->border_width)
|
||
|
.arg(e->override_redirect);
|
||
|
}
|
||
|
|
||
|
QString KXEventUtil::getXDestroyWindowEventInfo(XEvent *xevent) {
|
||
|
XDestroyWindowEvent *e = &xevent->xdestroywindow;
|
||
|
QString s("window=%1");
|
||
|
return
|
||
|
s.arg(e->window);
|
||
|
}
|
||
|
QString KXEventUtil::getXMapEventInfo(XEvent *xevent) {
|
||
|
XMapEvent *e = &xevent->xmap;
|
||
|
QString s("window=%1 override_redirect=%2");
|
||
|
return
|
||
|
s.arg(e->window)
|
||
|
.arg(e->override_redirect);
|
||
|
}
|
||
|
QString KXEventUtil::getXMappingEventInfo(XEvent *xevent) {
|
||
|
XMappingEvent *e = &xevent->xmapping;
|
||
|
QString s("request=%1 first_keycode=%2 count=%3");
|
||
|
return
|
||
|
s.arg(e->request)
|
||
|
.arg(e->first_keycode)
|
||
|
.arg(e->count);
|
||
|
}
|
||
|
QString KXEventUtil::getXReparentEventInfo(XEvent *xevent) {
|
||
|
XReparentEvent *e = &xevent->xreparent;
|
||
|
QString s("window=%1 parent=%2 x=%3 y=%4");
|
||
|
return
|
||
|
s.arg(e->window)
|
||
|
.arg(e->parent)
|
||
|
.arg(e->x)
|
||
|
.arg(e->y);
|
||
|
}
|
||
|
QString KXEventUtil::getXUnmapEventInfo(XEvent *xevent) {
|
||
|
XUnmapEvent *e = &xevent->xunmap;
|
||
|
QString s("window=%1 from_configure=%2");
|
||
|
return
|
||
|
s.arg(e->window)
|
||
|
.arg(e->from_configure);
|
||
|
}
|
||
|
|
||
|
QString KXEventUtil::getXConfigureEventInfo(XEvent *xevent) {
|
||
|
XConfigureEvent *e = &xevent->xconfigure;
|
||
|
QString s("window=%1 x=%2 y=%2 width=%3 height=%4 border_width=%5 above=%6 override_redirect=%7");
|
||
|
return
|
||
|
s.arg(e->window)
|
||
|
.arg(e->x).arg(e->y)
|
||
|
.arg(e->width).arg(e->height)
|
||
|
.arg(e->border_width)
|
||
|
.arg(e->above)
|
||
|
.arg(e->override_redirect);
|
||
|
}
|
||
|
|
||
|
QString KXEventUtil::getXConfigureRequestEventInfo(XEvent *xevent) {
|
||
|
XConfigureRequestEvent *e = &xevent->xconfigurerequest;
|
||
|
unsigned vm = e->value_mask;
|
||
|
QStringList vml;
|
||
|
if (vm & CWX) vml.append("CWX");
|
||
|
if (vm & CWY) vml.append("CWY");
|
||
|
if (vm & CWWidth) vml.append("CWWidth");
|
||
|
if (vm & CWHeight) vml.append("CWHeight");
|
||
|
if (vm & CWBorderWidth) vml.append("CWBorderWidth");
|
||
|
if (vm & CWSibling) vml.append("CWSibling");
|
||
|
if (vm & CWStackMode) vml.append("CWStackMode");
|
||
|
QString vms = vml.join("|");
|
||
|
QString s("window=%1 x=%2 y=%2 width=%3 height=%4 border_width=%5 above=%6 detail=%7 value_mask=0x%8=%9");
|
||
|
return
|
||
|
s.arg(e->window)
|
||
|
.arg(e->x).arg(e->y)
|
||
|
.arg(e->width).arg(e->height)
|
||
|
.arg(e->border_width)
|
||
|
.arg(e->above)
|
||
|
.arg(e->detail)
|
||
|
.arg(e->value_mask, 0, 16)
|
||
|
.arg(vms);
|
||
|
}
|
||
|
QString KXEventUtil::getX11EventInfo( XEvent* e )
|
||
|
{
|
||
|
QString anyInfo = getXAnyEventInfo(e);
|
||
|
QString info = "";
|
||
|
QString s;
|
||
|
switch( e->type )
|
||
|
{
|
||
|
case KeyPress:
|
||
|
s = "KeyPress";
|
||
|
info = getXKeyEventInfo(e);
|
||
|
break;
|
||
|
case KeyRelease:
|
||
|
s = "KeyRelease";
|
||
|
info = getXKeyEventInfo(e);
|
||
|
break;
|
||
|
case ButtonPress:
|
||
|
s = "ButtonPress";
|
||
|
info = getXButtonEventInfo(e);
|
||
|
break;
|
||
|
case ButtonRelease:
|
||
|
s = "ButtonRelease";
|
||
|
info = getXButtonEventInfo(e);
|
||
|
break;
|
||
|
case MotionNotify:
|
||
|
s = "MotionNotify";
|
||
|
info = getXMotionEventInfo(e);
|
||
|
break;
|
||
|
case EnterNotify:
|
||
|
s = "EnterNotify";
|
||
|
info = getXCrossingEventInfo(e);
|
||
|
break;
|
||
|
case LeaveNotify:
|
||
|
s = "LeaveNotify";
|
||
|
info = getXCrossingEventInfo(e);
|
||
|
break;
|
||
|
case FocusIn:
|
||
|
s = "FocusIn";
|
||
|
info = getXFocusChangeEventInfo(e);
|
||
|
break;
|
||
|
case FocusOut:
|
||
|
s = "FocusOut";
|
||
|
info = getXFocusChangeEventInfo(e);
|
||
|
break;
|
||
|
case KeymapNotify:
|
||
|
s = "KeymapNotify";
|
||
|
break;
|
||
|
case Expose:
|
||
|
s = "Expose";
|
||
|
info = getXExposeEventInfo(e);
|
||
|
break;
|
||
|
case GraphicsExpose:
|
||
|
s = "GraphicsExpose";
|
||
|
info = getXGraphicsExposeEventInfo(e);
|
||
|
break;
|
||
|
case NoExpose:
|
||
|
info = getXNoExposeEventInfo(e);
|
||
|
s = "NoExpose";
|
||
|
break;
|
||
|
case VisibilityNotify:
|
||
|
s = "VisibilityNotify";
|
||
|
break;
|
||
|
case CreateNotify:
|
||
|
s = "CreateNotify";
|
||
|
info = getXCreateWindowEventInfo(e);
|
||
|
break;
|
||
|
case DestroyNotify:
|
||
|
s = "DestroyNotify";
|
||
|
info = getXDestroyWindowEventInfo(e);
|
||
|
break;
|
||
|
case UnmapNotify:
|
||
|
s = "UnmapNotify";
|
||
|
info = getXUnmapEventInfo(e);
|
||
|
break;
|
||
|
case MapNotify:
|
||
|
s = "MapNotify";
|
||
|
info = getXMapEventInfo(e);
|
||
|
break;
|
||
|
case MapRequest:
|
||
|
s = "MapRequest";
|
||
|
break;
|
||
|
case ReparentNotify:
|
||
|
s = "ReparentNotify";
|
||
|
info = getXReparentEventInfo(e);
|
||
|
break;
|
||
|
case ConfigureNotify:
|
||
|
s = "ConfigureNotify";
|
||
|
info = getXConfigureEventInfo(e);
|
||
|
break;
|
||
|
case ConfigureRequest:
|
||
|
s = "ConfigureRequest";
|
||
|
info = getXConfigureRequestEventInfo(e);
|
||
|
break;
|
||
|
case GravityNotify:
|
||
|
s = "GravityNotify";
|
||
|
break;
|
||
|
case ResizeRequest:
|
||
|
s = "ResizeRequest";
|
||
|
break;
|
||
|
case CirculateNotify:
|
||
|
s = "CirculateNofify";
|
||
|
break;
|
||
|
case CirculateRequest:
|
||
|
s = "CirculateRequest";
|
||
|
break;
|
||
|
case PropertyNotify:
|
||
|
s = "PropertyNotify";
|
||
|
break;
|
||
|
case SelectionClear:
|
||
|
s = "SelectionClear";
|
||
|
break;
|
||
|
case SelectionRequest:
|
||
|
s = "SelectionRequest";
|
||
|
break;
|
||
|
case SelectionNotify:
|
||
|
s = "SelectionNotify";
|
||
|
break;
|
||
|
case ColormapNotify:
|
||
|
s = "ColormapNotify";
|
||
|
break;
|
||
|
case ClientMessage:
|
||
|
s = "ClientMessage";
|
||
|
break;
|
||
|
case MappingNotify:
|
||
|
s = "MappingNotify";
|
||
|
info = getXMappingEventInfo(e);
|
||
|
break;
|
||
|
case LASTEvent:
|
||
|
s = "LASTEvent";
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
s = "Undefined";
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return s + " " + anyInfo + " " + info;
|
||
|
}
|