UI: Move taskbar overlay functions into platform.hpp

Refactors the existing implementation for Windows into
platform-windows.cpp, allowing for other OS implementations in the
future.
master
gxalpha 2022-04-23 18:05:21 +02:00 committed by Matt Gajownik
parent 5ac6c03a8a
commit 41521b2816
6 changed files with 61 additions and 35 deletions

View File

@ -215,6 +215,10 @@ bool ProcessIsRosettaTranslated()
#endif #endif
} }
// Not implemented yet
void TaskbarOverlayInit() {}
void TaskbarOverlaySetStatus(TaskbarOverlayStatus) {}
/* /*
* This custom NSApplication subclass makes the app compatible with CEF. Qt * This custom NSApplication subclass makes the app compatible with CEF. Qt
* also has an NSApplication subclass, but it doesn't conflict thanks to Qt * also has an NSApplication subclass, but it doesn't conflict thanks to Qt

View File

@ -37,6 +37,11 @@
#include <util/windows/HRError.hpp> #include <util/windows/HRError.hpp>
#include <util/windows/ComPtr.hpp> #include <util/windows/ComPtr.hpp>
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
#include <QWinTaskbarButton>
#include <QMainWindow>
#endif
using namespace std; using namespace std;
static inline bool check_path(const char *data, const char *path, static inline bool check_path(const char *data, const char *path,
@ -464,3 +469,36 @@ bool IsRunningOnWine()
return false; 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

View File

@ -251,3 +251,7 @@ bool SetDisplayAffinitySupported(void)
// Not implemented yet // Not implemented yet
return false; return false;
} }
// Not implemented yet
void TaskbarOverlayInit() {}
void TaskbarOverlaySetStatus(TaskbarOverlayStatus) {}

View File

@ -36,6 +36,14 @@ void SetAlwaysOnTop(QWidget *window, bool enable);
bool SetDisplayAffinitySupported(void); bool SetDisplayAffinitySupported(void);
enum TaskbarOverlayStatus {
TaskbarOverlayStatusInactive,
TaskbarOverlayStatusActive,
TaskbarOverlayStatusPaused,
};
void TaskbarOverlayInit();
void TaskbarOverlaySetStatus(TaskbarOverlayStatus status);
#ifdef _WIN32 #ifdef _WIN32
class RunOnceMutex; class RunOnceMutex;
RunOnceMutex RunOnceMutex

View File

@ -2011,9 +2011,7 @@ void OBSBasic::OBSInit()
SystemTray(true); SystemTray(true);
#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) TaskbarOverlayInit();
taskBtn->setWindow(windowHandle());
#endif
#ifdef __APPLE__ #ifdef __APPLE__
disableColorSpaceConversion(this); disableColorSpaceConversion(this);
@ -6713,10 +6711,7 @@ inline void OBSBasic::OnActivate(bool force)
App()->IncrementSleepInhibition(); App()->IncrementSleepInhibition();
UpdateProcessPriority(); UpdateProcessPriority();
#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) TaskbarOverlaySetStatus(TaskbarOverlayStatusActive);
taskBtn->setOverlayIcon(QIcon::fromTheme(
"obs-active", QIcon(":/res/images/active.png")));
#endif
if (trayIcon && trayIcon->isVisible()) { if (trayIcon && trayIcon->isVisible()) {
#ifdef __APPLE__ #ifdef __APPLE__
QIcon trayMask = QIcon trayMask =
@ -6744,9 +6739,7 @@ inline void OBSBasic::OnDeactivate()
App()->DecrementSleepInhibition(); App()->DecrementSleepInhibition();
ClearProcessPriority(); ClearProcessPriority();
#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) TaskbarOverlaySetStatus(TaskbarOverlayStatusInactive);
taskBtn->clearOverlayIcon();
#endif
if (trayIcon && trayIcon->isVisible()) { if (trayIcon && trayIcon->isVisible()) {
#ifdef __APPLE__ #ifdef __APPLE__
QIcon trayIconFile = QIcon trayIconFile =
@ -6771,11 +6764,7 @@ inline void OBSBasic::OnDeactivate()
#endif #endif
trayIcon->setIcon(QIcon::fromTheme("obs-tray-paused", trayIcon->setIcon(QIcon::fromTheme("obs-tray-paused",
trayIconFile)); trayIconFile));
#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) TaskbarOverlaySetStatus(TaskbarOverlayStatusPaused);
taskBtn->setOverlayIcon(QIcon::fromTheme(
"obs-paused",
QIcon(":/res/images/paused.png")));
#endif
} else { } else {
#ifdef __APPLE__ #ifdef __APPLE__
QIcon trayIconFile = QIcon trayIconFile =
@ -6787,11 +6776,7 @@ inline void OBSBasic::OnDeactivate()
#endif #endif
trayIcon->setIcon(QIcon::fromTheme("obs-tray-active", trayIcon->setIcon(QIcon::fromTheme("obs-tray-active",
trayIconFile)); trayIconFile));
#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) TaskbarOverlaySetStatus(TaskbarOverlayStatusActive);
taskBtn->setOverlayIcon(QIcon::fromTheme(
"obs-active",
QIcon(":/res/images/active.png")));
#endif
} }
} }
} }
@ -9773,10 +9758,7 @@ void OBSBasic::PauseRecording()
ui->statusbar->RecordingPaused(); ui->statusbar->RecordingPaused();
#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) TaskbarOverlaySetStatus(TaskbarOverlayStatusPaused);
taskBtn->setOverlayIcon(QIcon::fromTheme(
"obs-paused", QIcon(":/res/images/paused.png")));
#endif
if (trayIcon && trayIcon->isVisible()) { if (trayIcon && trayIcon->isVisible()) {
#ifdef __APPLE__ #ifdef __APPLE__
QIcon trayIconFile = QIcon trayIconFile =
@ -9820,10 +9802,7 @@ void OBSBasic::UnpauseRecording()
ui->statusbar->RecordingUnpaused(); ui->statusbar->RecordingUnpaused();
#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) TaskbarOverlaySetStatus(TaskbarOverlayStatusActive);
taskBtn->setOverlayIcon(QIcon::fromTheme(
"obs-active", QIcon(":/res/images/active.png")));
#endif
if (trayIcon && trayIcon->isVisible()) { if (trayIcon && trayIcon->isVisible()) {
#ifdef __APPLE__ #ifdef __APPLE__
QIcon trayIconFile = QIcon trayIconFile =

View File

@ -22,9 +22,6 @@
#include <QThread> #include <QThread>
#include <QWidgetAction> #include <QWidgetAction>
#include <QSystemTrayIcon> #include <QSystemTrayIcon>
#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
#include <QWinTaskbarButton>
#endif
#include <QStyledItemDelegate> #include <QStyledItemDelegate>
#include <obs.hpp> #include <obs.hpp>
#include <vector> #include <vector>
@ -325,10 +322,6 @@ private:
QPointer<QAction> renameScene; QPointer<QAction> renameScene;
QPointer<QAction> renameSource; QPointer<QAction> renameSource;
#if defined(_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QWinTaskbarButton *taskBtn = new QWinTaskbarButton(this);
#endif
QPointer<QWidget> programWidget; QPointer<QWidget> programWidget;
QPointer<QVBoxLayout> programLayout; QPointer<QVBoxLayout> programLayout;
QPointer<QLabel> programLabel; QPointer<QLabel> programLabel;