React to changes in the system color palette.
Task-number: QTBUG-49734 Change-Id: Ic7926b53b6ee417c6c6206f7a9d5bb08bfd0c051 Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>bb10
parent
95a6dc1cb9
commit
0ba7df2603
|
|
@ -37,6 +37,8 @@
|
|||
#include <QtCore/QHash>
|
||||
#include <qpa/qplatformtheme.h>
|
||||
|
||||
Q_FORWARD_DECLARE_OBJC_CLASS(QT_MANGLE_NAMESPACE(QCocoaThemeNotificationReceiver));
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QPalette;
|
||||
|
|
@ -46,6 +48,8 @@ public:
|
|||
QCocoaTheme();
|
||||
~QCocoaTheme();
|
||||
|
||||
void reset();
|
||||
|
||||
QPlatformMenuItem* createPlatformMenuItem() const Q_DECL_OVERRIDE;
|
||||
QPlatformMenu* createPlatformMenu() const Q_DECL_OVERRIDE;
|
||||
QPlatformMenuBar* createPlatformMenuBar() const Q_DECL_OVERRIDE;
|
||||
|
|
@ -73,6 +77,7 @@ private:
|
|||
mutable QPalette *m_systemPalette;
|
||||
mutable QHash<QPlatformTheme::Palette, QPalette*> m_palettes;
|
||||
mutable QHash<QPlatformTheme::Font, QFont*> m_fonts;
|
||||
mutable QCocoaThemeNotificationReceiver *m_notificationReceiver;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -57,6 +57,31 @@
|
|||
|
||||
#include <Carbon/Carbon.h>
|
||||
|
||||
@interface QT_MANGLE_NAMESPACE(QCocoaThemeNotificationReceiver) : NSObject {
|
||||
QCocoaTheme *mPrivate;
|
||||
}
|
||||
- (id)initWithPrivate:(QCocoaTheme *)priv;
|
||||
- (void)systemColorsDidChange:(NSNotification *)notification;
|
||||
@end
|
||||
|
||||
QT_NAMESPACE_ALIAS_OBJC_CLASS(QCocoaThemeNotificationReceiver);
|
||||
|
||||
@implementation QCocoaThemeNotificationReceiver
|
||||
- (id)initWithPrivate:(QCocoaTheme *)priv
|
||||
{
|
||||
self = [super init];
|
||||
mPrivate = priv;
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)systemColorsDidChange:(NSNotification *)notification
|
||||
{
|
||||
Q_UNUSED(notification);
|
||||
mPrivate->reset();
|
||||
QWindowSystemInterface::handleThemeChange(Q_NULLPTR);
|
||||
}
|
||||
@end
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
const char *QCocoaTheme::name = "cocoa";
|
||||
|
|
@ -64,16 +89,29 @@ const char *QCocoaTheme::name = "cocoa";
|
|||
QCocoaTheme::QCocoaTheme()
|
||||
:m_systemPalette(0)
|
||||
{
|
||||
|
||||
m_notificationReceiver = [[QT_MANGLE_NAMESPACE(QCocoaThemeNotificationReceiver) alloc] initWithPrivate:this];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:m_notificationReceiver
|
||||
selector:@selector(systemColorsDidChange:)
|
||||
name:NSSystemColorsDidChangeNotification
|
||||
object:nil];
|
||||
}
|
||||
|
||||
QCocoaTheme::~QCocoaTheme()
|
||||
{
|
||||
delete m_systemPalette;
|
||||
qDeleteAll(m_palettes);
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:m_notificationReceiver];
|
||||
[m_notificationReceiver release];
|
||||
reset();
|
||||
qDeleteAll(m_fonts);
|
||||
}
|
||||
|
||||
void QCocoaTheme::reset()
|
||||
{
|
||||
delete m_systemPalette;
|
||||
m_systemPalette = Q_NULLPTR;
|
||||
qDeleteAll(m_palettes);
|
||||
m_palettes.clear();
|
||||
}
|
||||
|
||||
bool QCocoaTheme::usePlatformNativeDialog(DialogType dialogType) const
|
||||
{
|
||||
if (dialogType == QPlatformTheme::FileDialog)
|
||||
|
|
|
|||
Loading…
Reference in New Issue