File indexing completed on 2024-04-28 05:26:27

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