X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fuisupport%2Fgraphicalui.cpp;h=40921cff39b8f4df7cea1dfd7ef4cb07f22872e2;hb=27921f7bb1ae86aabc13a5a279624a2d61cc3f2a;hp=53042b8e65040c7c09043f3f72bf4d3e89e70118;hpb=8f9c35aefb50a0e1626907e19da87bdb107123b4;p=quassel.git diff --git a/src/uisupport/graphicalui.cpp b/src/uisupport/graphicalui.cpp index 53042b8e..40921cff 100644 --- a/src/uisupport/graphicalui.cpp +++ b/src/uisupport/graphicalui.cpp @@ -23,11 +23,20 @@ #include "actioncollection.h" #include "contextmenuactionprovider.h" +#ifdef Q_WS_X11 +# include +#endif +#ifdef HAVE_KDE +# include +# include +#endif + QWidget *GraphicalUi::_mainWidget = 0; QHash GraphicalUi::_actionCollections; ContextMenuActionProvider *GraphicalUi::_contextMenuActionProvider = 0; ToolBarActionProvider *GraphicalUi::_toolBarActionProvider = 0; UiStyle *GraphicalUi::_uiStyle = 0; +bool GraphicalUi::_onAllDesktops = false; GraphicalUi::GraphicalUi(QObject *parent) : AbstractUi(parent) { @@ -59,3 +68,55 @@ void GraphicalUi::setToolBarActionProvider(ToolBarActionProvider *provider) { void GraphicalUi::setUiStyle(UiStyle *style) { _uiStyle = style; } + +void GraphicalUi::activateMainWidget() { +#ifdef HAVE_KDE +# ifdef Q_WS_X11 + KWindowInfo info = KWindowSystem::windowInfo(mainWidget()->winId(), NET::WMDesktop | NET::WMFrameExtents); + if(_onAllDesktops) { + KWindowSystem::setOnAllDesktops(mainWidget()->winId(), true); + } else { + KWindowSystem::setCurrentDesktop(info.desktop()); + } + + mainWidget()->move(info.frameGeometry().topLeft()); // avoid placement policies + mainWidget()->show(); + mainWidget()->raise(); + KWindowSystem::raiseWindow(mainWidget()->winId()); + KWindowSystem::activateWindow(mainWidget()->winId()); +# else + mainWidget()->show(); + KWindowSystem::raiseWindow(mainWidget()->winId()); + KWindowSystem::forceActiveWindow(mainWidget()->winId()); +# endif + +#else /* HAVE_KDE */ + +#ifdef Q_WS_X11 + // Bypass focus stealing prevention + QX11Info::setAppUserTime(QX11Info::appTime()); +#endif + + if(mainWidget()->windowState() & Qt::WindowMinimized) { + // restore + mainWidget()->setWindowState((mainWidget()->windowState() & ~Qt::WindowMinimized) | Qt::WindowActive); + } + + // this does not actually work on all platforms... and causes more evil than good + // mainWidget()->move(mainWidget()->frameGeometry().topLeft()); // avoid placement policies + mainWidget()->show(); + mainWidget()->raise(); + mainWidget()->activateWindow(); + +#endif /* HAVE_KDE */ +} + +void GraphicalUi::hideMainWidget() { + +#if defined(HAVE_KDE) && defined(Q_WS_X11) + KWindowInfo info = KWindowSystem::windowInfo(mainWidget()->winId(), NET::WMDesktop | NET::WMFrameExtents); + _onAllDesktops = info.onAllDesktops(); +#endif + + mainWidget()->hide(); +}