Unregister window observer before theme manager is deallocated
Technically this probably isn't actually necessary since ThemeManager looks like it should remain allocated until the program quits, but... Signed-off-by: Kenneth Chew <79120643+kthchew@users.noreply.github.com>
This commit is contained in:
parent
3e65d3a9b5
commit
677a7d7a05
3 changed files with 20 additions and 4 deletions
|
@ -50,6 +50,11 @@ ThemeManager::ThemeManager()
|
|||
initializeCatPacks();
|
||||
}
|
||||
|
||||
ThemeManager::~ThemeManager()
|
||||
{
|
||||
stopSettingNewWindowColorsOnMac();
|
||||
}
|
||||
|
||||
/// @brief Adds the Theme to the list of themes
|
||||
/// @param theme The Theme to add
|
||||
/// @return Theme ID
|
||||
|
@ -179,6 +184,8 @@ void ThemeManager::setTitlebarColorOnMac(WId windowId, QColor color)
|
|||
{}
|
||||
void ThemeManager::setTitlebarColorOfAllWindowsOnMac(QColor color)
|
||||
{}
|
||||
void ThemeManager::stopSettingNewWindowColorsOnMac()
|
||||
{}
|
||||
#endif
|
||||
|
||||
QList<IconTheme*> ThemeManager::getValidIconThemes()
|
||||
|
|
|
@ -39,6 +39,7 @@ inline auto themeWarningLog()
|
|||
class ThemeManager {
|
||||
public:
|
||||
ThemeManager();
|
||||
~ThemeManager();
|
||||
|
||||
QList<IconTheme*> getValidIconThemes();
|
||||
QList<ITheme*> getValidApplicationThemes();
|
||||
|
@ -86,6 +87,8 @@ class ThemeManager {
|
|||
// This also will set the titlebar color of newly opened windows after this method is called.
|
||||
// On non-Mac systems, this is a no-op.
|
||||
void setTitlebarColorOfAllWindowsOnMac(QColor color);
|
||||
// On non-Mac systems, this is a no-op.
|
||||
void stopSettingNewWindowColorsOnMac();
|
||||
#ifdef Q_OS_MACOS
|
||||
NSObject* m_windowTitlebarObserver = nullptr;
|
||||
#endif
|
||||
|
|
|
@ -53,10 +53,7 @@ void ThemeManager::setTitlebarColorOfAllWindowsOnMac(QColor color)
|
|||
// There's no notification for when a new window is opened, but we can set the color when a window switches
|
||||
// from occluded to visible, which also fires on open.
|
||||
NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
|
||||
if (m_windowTitlebarObserver) {
|
||||
[center removeObserver:m_windowTitlebarObserver];
|
||||
m_windowTitlebarObserver = nil;
|
||||
}
|
||||
stopSettingNewWindowColorsOnMac();
|
||||
m_windowTitlebarObserver = [center addObserverForName:NSWindowDidChangeOcclusionStateNotification
|
||||
object:nil
|
||||
queue:[NSOperationQueue mainQueue]
|
||||
|
@ -65,3 +62,12 @@ void ThemeManager::setTitlebarColorOfAllWindowsOnMac(QColor color)
|
|||
setTitlebarColorOnMac((WId)window.contentView, color);
|
||||
}];
|
||||
}
|
||||
|
||||
void ThemeManager::stopSettingNewWindowColorsOnMac()
|
||||
{
|
||||
if (m_windowTitlebarObserver) {
|
||||
NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
|
||||
[center removeObserver:m_windowTitlebarObserver];
|
||||
m_windowTitlebarObserver = nil;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue