X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fgraphicalui.cpp;h=40921cff39b8f4df7cea1dfd7ef4cb07f22872e2;hp=db52686946e367b1923e5b9b56fe08b38203acb8;hb=86bd6b1ffb870e65af6d830a2ea16471c348ed5a;hpb=a540a0285feef171e16fd6225b0e045fc5fc52e4 diff --git a/src/uisupport/graphicalui.cpp b/src/uisupport/graphicalui.cpp index db526869..40921cff 100644 --- a/src/uisupport/graphicalui.cpp +++ b/src/uisupport/graphicalui.cpp @@ -20,14 +20,103 @@ #include "graphicalui.h" +#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) +{ + +} -GraphicalUi::GraphicalUi(QObject *parent) : AbstractUi(parent) { +ActionCollection *GraphicalUi::actionCollection(const QString &category) { + if(_actionCollections.contains(category)) + return _actionCollections.value(category); + ActionCollection *coll = new ActionCollection(_mainWidget); + if(_mainWidget) + coll->addAssociatedWidget(_mainWidget); + _actionCollections.insert(category, coll); + return coll; +} +void GraphicalUi::setMainWidget(QWidget *widget) { + _mainWidget = widget; } void GraphicalUi::setContextMenuActionProvider(ContextMenuActionProvider *provider) { _contextMenuActionProvider = provider; } + +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(); +}