diff --git a/UI/platform-osx.mm b/UI/platform-osx.mm index 4cbc468db..bab4018b5 100644 --- a/UI/platform-osx.mm +++ b/UI/platform-osx.mm @@ -215,6 +215,10 @@ bool ProcessIsRosettaTranslated() #endif } +// Not implemented yet +void TaskbarOverlayInit() {} +void TaskbarOverlaySetStatus(TaskbarOverlayStatus) {} + /* * This custom NSApplication subclass makes the app compatible with CEF. Qt * also has an NSApplication subclass, but it doesn't conflict thanks to Qt diff --git a/UI/platform-windows.cpp b/UI/platform-windows.cpp index 20312379e..2645c29bc 100644 --- a/UI/platform-windows.cpp +++ b/UI/platform-windows.cpp @@ -37,6 +37,11 @@ #include #include +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +#include +#include +#endif + using namespace std; static inline bool check_path(const char *data, const char *path, @@ -464,3 +469,36 @@ bool IsRunningOnWine() return false; } + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +QWinTaskbarButton *taskBtn; + +void TaskbarOverlayInit() +{ + QMainWindow *main = App()->GetMainWindow(); + taskBtn = new QWinTaskbarButton(main); + taskBtn->setWindow(main->windowHandle()); +} + +void TaskbarOverlaySetStatus(TaskbarOverlayStatus status) +{ + if (status == TaskbarOverlayStatusInactive) { + taskBtn->clearOverlayIcon(); + return; + } + + QIcon icon; + if (status == TaskbarOverlayStatusActive) { + icon = QIcon::fromTheme("obs-active", + QIcon(":/res/images/active.png")); + } else { + icon = QIcon::fromTheme("obs-paused", + QIcon(":/res/images/paused.png")); + } + taskBtn->setOverlayIcon(icon); +} +#else +// Needs to be re-implemented for Qt6, perhaps natively without Qt +void TaskbarOverlayInit() {} +void TaskbarOverlaySetStatus(TaskbarOverlayStatus) {} +#endif diff --git a/UI/platform-x11.cpp b/UI/platform-x11.cpp index f7437b656..63383a257 100644 --- a/UI/platform-x11.cpp +++ b/UI/platform-x11.cpp @@ -251,3 +251,7 @@ bool SetDisplayAffinitySupported(void) // Not implemented yet return false; } + +// Not implemented yet +void TaskbarOverlayInit() {} +void TaskbarOverlaySetStatus(TaskbarOverlayStatus) {} diff --git a/UI/platform.hpp b/UI/platform.hpp index 3735a5cf5..745273151 100644 --- a/UI/platform.hpp +++ b/UI/platform.hpp @@ -36,6 +36,14 @@ void SetAlwaysOnTop(QWidget *window, bool enable); bool SetDisplayAffinitySupported(void); +enum TaskbarOverlayStatus { + TaskbarOverlayStatusInactive, + TaskbarOverlayStatusActive, + TaskbarOverlayStatusPaused, +}; +void TaskbarOverlayInit(); +void TaskbarOverlaySetStatus(TaskbarOverlayStatus status); + #ifdef _WIN32 class RunOnceMutex; RunOnceMutex diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index a26008c17..e18a2a541 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -2011,9 +2011,7 @@ void OBSBasic::OBSInit() SystemTray(true); -#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - taskBtn->setWindow(windowHandle()); -#endif + TaskbarOverlayInit(); #ifdef __APPLE__ disableColorSpaceConversion(this); @@ -6713,10 +6711,7 @@ inline void OBSBasic::OnActivate(bool force) App()->IncrementSleepInhibition(); UpdateProcessPriority(); -#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - taskBtn->setOverlayIcon(QIcon::fromTheme( - "obs-active", QIcon(":/res/images/active.png"))); -#endif + TaskbarOverlaySetStatus(TaskbarOverlayStatusActive); if (trayIcon && trayIcon->isVisible()) { #ifdef __APPLE__ QIcon trayMask = @@ -6744,9 +6739,7 @@ inline void OBSBasic::OnDeactivate() App()->DecrementSleepInhibition(); ClearProcessPriority(); -#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - taskBtn->clearOverlayIcon(); -#endif + TaskbarOverlaySetStatus(TaskbarOverlayStatusInactive); if (trayIcon && trayIcon->isVisible()) { #ifdef __APPLE__ QIcon trayIconFile = @@ -6771,11 +6764,7 @@ inline void OBSBasic::OnDeactivate() #endif trayIcon->setIcon(QIcon::fromTheme("obs-tray-paused", trayIconFile)); -#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - taskBtn->setOverlayIcon(QIcon::fromTheme( - "obs-paused", - QIcon(":/res/images/paused.png"))); -#endif + TaskbarOverlaySetStatus(TaskbarOverlayStatusPaused); } else { #ifdef __APPLE__ QIcon trayIconFile = @@ -6787,11 +6776,7 @@ inline void OBSBasic::OnDeactivate() #endif trayIcon->setIcon(QIcon::fromTheme("obs-tray-active", trayIconFile)); -#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - taskBtn->setOverlayIcon(QIcon::fromTheme( - "obs-active", - QIcon(":/res/images/active.png"))); -#endif + TaskbarOverlaySetStatus(TaskbarOverlayStatusActive); } } } @@ -9773,10 +9758,7 @@ void OBSBasic::PauseRecording() ui->statusbar->RecordingPaused(); -#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - taskBtn->setOverlayIcon(QIcon::fromTheme( - "obs-paused", QIcon(":/res/images/paused.png"))); -#endif + TaskbarOverlaySetStatus(TaskbarOverlayStatusPaused); if (trayIcon && trayIcon->isVisible()) { #ifdef __APPLE__ QIcon trayIconFile = @@ -9820,10 +9802,7 @@ void OBSBasic::UnpauseRecording() ui->statusbar->RecordingUnpaused(); -#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - taskBtn->setOverlayIcon(QIcon::fromTheme( - "obs-active", QIcon(":/res/images/active.png"))); -#endif + TaskbarOverlaySetStatus(TaskbarOverlayStatusActive); if (trayIcon && trayIcon->isVisible()) { #ifdef __APPLE__ QIcon trayIconFile = diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 06a335007..a9cb8cc85 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -22,9 +22,6 @@ #include #include #include -#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -#include -#endif #include #include #include @@ -325,10 +322,6 @@ private: QPointer renameScene; QPointer renameSource; -#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - QWinTaskbarButton *taskBtn = new QWinTaskbarButton(this); -#endif - QPointer programWidget; QPointer programLayout; QPointer programLabel;