X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fgraphicalui.cpp;h=fb4a2c7fdbfe7baee1102ce300e1040cb0d8efac;hp=1c17a5e81ab92b3cc8ec23e1d5040b6937299c6a;hb=f18d6c40cd704e26734a77b371ae2c4a284bee38;hpb=99678e189313b168c410fa15cd10cb673b73c8a2 diff --git a/src/uisupport/graphicalui.cpp b/src/uisupport/graphicalui.cpp index 1c17a5e8..fb4a2c7f 100644 --- a/src/uisupport/graphicalui.cpp +++ b/src/uisupport/graphicalui.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2014 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This contains code from KStatusNotifierItem, part of the KDE libs * @@ -31,12 +31,11 @@ #ifdef Q_WS_X11 # include #endif -#ifdef HAVE_KDE +#ifdef HAVE_KDE4 # include # include #endif -GraphicalUi *GraphicalUi::_instance = 0; QWidget *GraphicalUi::_mainWidget = 0; QHash GraphicalUi::_actionCollections; ContextMenuActionProvider *GraphicalUi::_contextMenuActionProvider = 0; @@ -44,6 +43,18 @@ ToolBarActionProvider *GraphicalUi::_toolBarActionProvider = 0; UiStyle *GraphicalUi::_uiStyle = 0; bool GraphicalUi::_onAllDesktops = false; +namespace { + +GraphicalUi *_instance{nullptr}; + +} + + +GraphicalUi *GraphicalUi::instance() { + return _instance; +} + + GraphicalUi::GraphicalUi(QObject *parent) : AbstractUi(parent) { Q_ASSERT(!_instance); @@ -52,6 +63,9 @@ GraphicalUi::GraphicalUi(QObject *parent) : AbstractUi(parent) #ifdef Q_OS_WIN _dwTickCount = 0; #endif +#ifdef Q_OS_MAC + GetFrontProcess(&_procNum); +#endif } @@ -146,6 +160,9 @@ bool GraphicalUi::eventFilter(QObject *obj, QEvent *event) } +// NOTE: Window activation stuff seems to work just fine in Plasma 5 without requiring X11 hacks. +// TODO: Evaluate cleaning all this up once we can get rid of Qt4/KDE4 + // Code taken from KStatusNotifierItem for handling minimize/restore bool GraphicalUi::checkMainWidgetVisibility(bool perform) @@ -166,7 +183,7 @@ bool GraphicalUi::checkMainWidgetVisibility(bool perform) return true; } -#elif defined(HAVE_KDE) && defined(Q_WS_X11) +#elif defined(HAVE_KDE4) && defined(Q_WS_X11) KWindowInfo info1 = KWindowSystem::windowInfo(mainWidget()->winId(), NET::XAWMState | NET::WMState | NET::WMDesktop); // mapped = visible (but possibly obscured) bool mapped = (info1.mappingState() == NET::Visible) && !info1.isMinimized(); @@ -261,7 +278,7 @@ void GraphicalUi::minimizeRestore(bool show) void GraphicalUi::activateMainWidget() { -#ifdef HAVE_KDE +#ifdef HAVE_KDE4 # ifdef Q_WS_X11 KWindowInfo info = KWindowSystem::windowInfo(mainWidget()->winId(), NET::WMDesktop | NET::WMFrameExtents); if (_onAllDesktops) { @@ -282,7 +299,7 @@ void GraphicalUi::activateMainWidget() KWindowSystem::forceActiveWindow(mainWidget()->winId()); # endif -#else /* HAVE_KDE */ +#else /* HAVE_KDE4 */ #ifdef Q_WS_X11 // Bypass focus stealing prevention @@ -296,23 +313,31 @@ void GraphicalUi::activateMainWidget() // this does not actually work on all platforms... and causes more evil than good // mainWidget()->move(mainWidget()->frameGeometry().topLeft()); // avoid placement policies +#ifdef Q_OS_MAC + SetFrontProcess(&instance()->_procNum); +#else mainWidget()->show(); mainWidget()->raise(); mainWidget()->activateWindow(); +#endif -#endif /* HAVE_KDE */ +#endif /* HAVE_KDE4 */ } void GraphicalUi::hideMainWidget() { -#if defined(HAVE_KDE) && defined(Q_WS_X11) +#if defined(HAVE_KDE4) && defined(Q_WS_X11) KWindowInfo info = KWindowSystem::windowInfo(mainWidget()->winId(), NET::WMDesktop | NET::WMFrameExtents); _onAllDesktops = info.onAllDesktops(); #endif if (instance()->isHidingMainWidgetAllowed()) +#ifdef Q_OS_MAC + ShowHideProcess(&instance()->_procNum, false); +#else mainWidget()->hide(); +#endif }