X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fgraphicalui.cpp;h=40921cff39b8f4df7cea1dfd7ef4cb07f22872e2;hp=53042b8e65040c7c09043f3f72bf4d3e89e70118;hb=d452877910888c25d40590b5fff57eb8197ca9b0;hpb=c4b281a2f246e87c216d99c8c7f7bcd26b025cc0 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(); +}