File indexing completed on 2024-05-19 16:30:44
0001 #ifndef breezetoolsareamanager_h 0002 #define breezetoolsareamanager_h 0003 0004 #include "breezehelper.h" 0005 #include "breezestyle.h" 0006 #include <KConfigWatcher> 0007 #include <KSharedConfig> 0008 #include <QApplication> 0009 #include <QObject> 0010 0011 namespace Breeze 0012 { 0013 class ToolsAreaManager; 0014 0015 // Trying to discriminate QApplication events from events from all QObjects 0016 // belonging to it is impractical with everything going through a single 0017 // eventFilter, so we have this class which provides a second one that allows 0018 // us to filter for the events we want. 0019 class AppListener : public QObject 0020 { 0021 Q_OBJECT 0022 using QObject::QObject; 0023 0024 bool eventFilter(QObject *watched, QEvent *event) override; 0025 0026 ToolsAreaManager *manager; 0027 friend class ToolsAreaManager; 0028 }; 0029 0030 class ToolsAreaManager : public QObject 0031 { 0032 Q_OBJECT 0033 0034 private: 0035 Helper *_helper; 0036 QHash<const QMainWindow *, QVector<QPointer<QToolBar>>> _windows; 0037 KSharedConfigPtr _config; 0038 KConfigWatcher::Ptr _watcher; 0039 QPalette _palette = QPalette(); 0040 AppListener *_listener; 0041 bool _colorSchemeHasHeaderColor; 0042 0043 friend class AppListener; 0044 0045 protected: 0046 bool tryRegisterToolBar(QPointer<QMainWindow> window, QPointer<QWidget> widget); 0047 void tryUnregisterToolBar(QPointer<QMainWindow> window, QPointer<QWidget> widget); 0048 void configUpdated(); 0049 0050 public: 0051 explicit ToolsAreaManager(Helper *helper, QObject *parent = nullptr); 0052 ~ToolsAreaManager(); 0053 0054 bool eventFilter(QObject *watched, QEvent *event) override; 0055 0056 const QPalette &palette() const 0057 { 0058 return _palette; 0059 } 0060 0061 void registerApplication(QApplication *application); 0062 void registerWidget(QWidget *widget); 0063 void unregisterWidget(QWidget *widget); 0064 0065 QRect toolsAreaRect(const QMainWindow *window); 0066 0067 bool hasHeaderColors(); 0068 }; 0069 } 0070 0071 #endif