X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fgraphicalui.cpp;h=40921cff39b8f4df7cea1dfd7ef4cb07f22872e2;hp=abd8cd173d343f50eb4566a11e9b582ecba92eb3;hb=86bd6b1ffb870e65af6d830a2ea16471c348ed5a;hpb=34cbd014160c25232e6f407ba6dcd0fe92ae7c17 diff --git a/src/uisupport/graphicalui.cpp b/src/uisupport/graphicalui.cpp index abd8cd17..40921cff 100644 --- a/src/uisupport/graphicalui.cpp +++ b/src/uisupport/graphicalui.cpp @@ -23,10 +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) { @@ -54,3 +64,59 @@ void GraphicalUi::setContextMenuActionProvider(ContextMenuActionProvider *provid void GraphicalUi::setToolBarActionProvider(ToolBarActionProvider *provider) { _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(); +}