X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcontrib%2Flibqxt-2007-10-24%2Fsrc%2Fgui%2Fqxtapplication_x11.cpp;fp=src%2Fcontrib%2Flibqxt-2007-10-24%2Fsrc%2Fgui%2Fqxtapplication_x11.cpp;h=237a5e5fd7a0905b8fe8304cbe8462971191d6d7;hp=0000000000000000000000000000000000000000;hb=a634acadbcf6017474f68a3eaf7cb632660e9e49;hpb=cd122ca8e0d2c0ffc5397e0a813c75d791a7e6e3 diff --git a/src/contrib/libqxt-2007-10-24/src/gui/qxtapplication_x11.cpp b/src/contrib/libqxt-2007-10-24/src/gui/qxtapplication_x11.cpp new file mode 100644 index 00000000..237a5e5f --- /dev/null +++ b/src/contrib/libqxt-2007-10-24/src/gui/qxtapplication_x11.cpp @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) Qxt Foundation. Some rights reserved. +** +** This file is part of the QxtGui module of the Qt eXTension library +** +** This library is free software; you can redistribute it and/or modify it +** under the terms of th Common Public License, version 1.0, as published by +** IBM. +** +** This file is provided "AS IS", without WARRANTIES OR CONDITIONS OF ANY +** KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY +** WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR +** FITNESS FOR A PARTICULAR PURPOSE. +** +** You should have received a copy of the CPL along with this file. +** See the LICENSE file and the cpl1.0.txt file included with the source +** distribution for more information. If you did not receive a copy of the +** license, contact the Qxt Foundation. +** +** +** +****************************************************************************/ +#include "qxtapplication.h" +#include "qxtapplication_p.h" +#include +#include +#include + +QxtApplication::QxtApplication(Display* display, Qt::HANDLE visual, Qt::HANDLE colormap) + : QApplication(display, visual, colormap) +{} + +QxtApplication::QxtApplication(Display* display, int& argc, char** argv, Qt::HANDLE visual, Qt::HANDLE colormap) + : QApplication(display, argc, argv, visual, colormap) +{} + +bool QxtApplication::x11EventFilter(XEvent* event) +{ + foreach (QxtNativeEventFilter* filter, qxt_d().nativeFilters) + { + if (filter && filter->x11EventFilter(event)) + return true; + } + + if (event->type == KeyPress) + { + XKeyEvent* key = (XKeyEvent*) event; + qxt_d().activateHotKey(key->state, key->keycode); + } + return QApplication::x11EventFilter(event); +} + +uint QxtApplicationPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers) const +{ + // ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, and Mod5Mask + uint native = 0; + if (modifiers & Qt::ShiftModifier) + native |= ShiftMask; + if (modifiers & Qt::ControlModifier) + native |= ControlMask; + if (modifiers & Qt::AltModifier) + native |= Mod1Mask; + // TODO: resolve these? + //if (modifiers & Qt::MetaModifier) + //if (modifiers & Qt::KeypadModifier) + //if (modifiers & Qt::GroupSwitchModifier) + return native; +} + +uint QxtApplicationPrivate::nativeKeycode(Qt::Key key) const +{ + Display* display = QX11Info::display(); + return XKeysymToKeycode(display, XStringToKeysym(QKeySequence(key).toString().toLatin1().data())); +} + +bool QxtApplicationPrivate::registerHotKey(uint modifiers, uint keycode, QWidget* receiver) +{ + Q_UNUSED(receiver); + Display* display = QX11Info::display(); + Window window = QX11Info::appRootWindow(); + Bool owner = True; + int pointer = GrabModeAsync; + int keyboard = GrabModeAsync; + return XGrabKey(display, keycode, modifiers, window, owner, pointer, keyboard); +} + +bool QxtApplicationPrivate::unregisterHotKey(uint modifiers, uint keycode, QWidget* receiver) +{ + Q_UNUSED(receiver); + Display* display = QX11Info::display(); + Window window = QX11Info::appRootWindow(); + return XUngrabKey(display, keycode, modifiers, window); +}