From bc5fedbbecb228785374cf4f80ce79577931e164 Mon Sep 17 00:00:00 2001 From: Shady Nawara Date: Thu, 28 Apr 2022 05:20:37 +0000 Subject: [PATCH] Hide dock icon on minimize macOS --- OpenRGB.pro | 2 ++ main.cpp | 7 +++++++ qt/OpenRGBDialog2.cpp | 13 +++++++++++++ qt/macutils.h | 10 ++++++++++ qt/macutils.mm | 9 +++++++++ 5 files changed, 41 insertions(+) create mode 100644 qt/macutils.h create mode 100644 qt/macutils.mm diff --git a/OpenRGB.pro b/OpenRGB.pro index 7c691b62..aecfbc04 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -1421,11 +1421,13 @@ macx { HEADERS += \ AutoStart/AutoStart-MacOS.h \ + qt/macutils.h \ SOURCES += \ dependencies/hueplusplus-1.0.0/src/LinHttpHandler.cpp \ serial_port/find_usb_serial_port_linux.cpp \ AutoStart/AutoStart-MacOS.cpp \ + qt/macutils.mm \ # Use mbedtls v2 instead of latest MBEDTLS_PREFIX = $$system(brew --prefix mbedtls@2) diff --git a/main.cpp b/main.cpp index 3e7dd0aa..abd5e504 100644 --- a/main.cpp +++ b/main.cpp @@ -21,6 +21,10 @@ #include "OpenRGBDialog2.h" +#ifdef __APPLE__ +#include "macutils.h" +#endif + using namespace std::chrono_literals; /*-------------------------------------------------------------*\ @@ -339,6 +343,9 @@ int main(int argc, char* argv[]) if(ret_flags & RET_FLAG_START_MINIMIZED) { +#ifdef __APPLE__ + MacUtils::ToggleApplicationDocklessState(false); +#endif dlg.hide(); } else diff --git a/qt/OpenRGBDialog2.cpp b/qt/OpenRGBDialog2.cpp index 59bd7b70..b04b76cd 100644 --- a/qt/OpenRGBDialog2.cpp +++ b/qt/OpenRGBDialog2.cpp @@ -18,6 +18,10 @@ #include #include +#ifdef __APPLE__ +#include "macutils.h" +#endif + using namespace Ui; static QString GetIconString(device_type type, bool dark) @@ -486,6 +490,9 @@ void OpenRGBDialog2::closeEvent(QCloseEvent *event) if (IsMinimizeOnClose() && !this->isHidden()) { +#ifdef __APPLE__ + MacUtils::ToggleApplicationDocklessState(false); +#endif hide(); event->ignore(); } @@ -1382,10 +1389,16 @@ void OpenRGBDialog2::on_ShowHide() { if(isHidden()) { +#ifdef __APPLE__ + MacUtils::ToggleApplicationDocklessState(true); +#endif show(); } else { +#ifdef __APPLE__ + MacUtils::ToggleApplicationDocklessState(false); +#endif hide(); } } diff --git a/qt/macutils.h b/qt/macutils.h new file mode 100644 index 00000000..53d6ece9 --- /dev/null +++ b/qt/macutils.h @@ -0,0 +1,10 @@ +#ifndef MACUTILS_H +#define MACUTILS_H + +class MacUtils +{ +public: + static void ToggleApplicationDocklessState(bool showDock); +}; + +#endif // MACUTILS_H diff --git a/qt/macutils.mm b/qt/macutils.mm new file mode 100644 index 00000000..10f299dc --- /dev/null +++ b/qt/macutils.mm @@ -0,0 +1,9 @@ +#import +#include "macutils.h" + +void MacUtils::ToggleApplicationDocklessState(bool showDock) +{ + ProcessApplicationTransformState transformState = showDock ? ProcessApplicationTransformState(kProcessTransformToForegroundApplication) : ProcessApplicationTransformState(kProcessTransformToUIElementApplication); + ProcessSerialNumber psn = { 0, kCurrentProcess }; + TransformProcessType(&psn, transformState); +}