clang-tidy: Avoid potential memory leak in QtUi
[quassel.git] / src / uisupport / graphicalui.cpp
index 1bdf047..fb4a2c7 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2016 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     *
 #  include <KWindowInfo>
 #  include <KWindowSystem>
 #endif
-#ifdef Q_OS_MAC
-#include <Carbon/Carbon.h>
-#endif
 
-GraphicalUi *GraphicalUi::_instance = 0;
 QWidget *GraphicalUi::_mainWidget = 0;
 QHash<QString, ActionCollection *> GraphicalUi::_actionCollections;
 ContextMenuActionProvider *GraphicalUi::_contextMenuActionProvider = 0;
@@ -47,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);
@@ -55,6 +63,9 @@ GraphicalUi::GraphicalUi(QObject *parent) : AbstractUi(parent)
 #ifdef Q_OS_WIN
     _dwTickCount = 0;
 #endif
+#ifdef Q_OS_MAC
+    GetFrontProcess(&_procNum);
+#endif
 }
 
 
@@ -302,9 +313,13 @@ 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_KDE4 */
 }
@@ -316,18 +331,13 @@ void GraphicalUi::hideMainWidget()
     KWindowInfo info = KWindowSystem::windowInfo(mainWidget()->winId(), NET::WMDesktop | NET::WMFrameExtents);
     _onAllDesktops = info.onAllDesktops();
 #endif
-#ifdef Q_OS_MAC
-    ProcessSerialNumber pn;
-#endif
 
-    if (instance()->isHidingMainWidgetAllowed()) {
+    if (instance()->isHidingMainWidgetAllowed())
 #ifdef Q_OS_MAC
-        GetFrontProcess(&pn);
-        ShowHideProcess(&pn, false);
+        ShowHideProcess(&instance()->_procNum, false);
 #else
         mainWidget()->hide();
 #endif
-    }
 }