| | |
| | | // |
| | | |
| | | #include <array> |
| | | #include <list> |
| | | #include <memory> |
| | | #include <utility> |
| | | |
| | | #include <QtCore/QSet> |
| | | #include <QtCore/QPointer> |
| | |
| | | inline WindowItemDelegate *delegate() const; |
| | | |
| | | inline bool isHitTestVisible(const QObject *obj) const; |
| | | bool setHitTestVisible(const QObject *obj, bool visible); |
| | | bool setHitTestVisible(QObject *obj, bool visible); |
| | | |
| | | inline QObject *systemButton(WindowAgentBase::SystemButton button) const; |
| | | bool setSystemButton(WindowAgentBase::SystemButton button, QObject *obj); |
| | |
| | | bool isInSystemButtons(const QPoint &pos, WindowAgentBase::SystemButton *button) const; |
| | | bool isInTitleBarDraggableArea(const QPoint &pos) const; |
| | | |
| | | inline bool isHostWidthFixed() const { |
| | | return m_windowHandle |
| | | ? ((m_windowHandle->flags() & Qt::MSWindowsFixedSizeDialogHint) || |
| | | m_windowHandle->minimumWidth() == m_windowHandle->maximumWidth()) |
| | | : false; |
| | | } |
| | | inline bool isHostHeightFixed() const { |
| | | return m_windowHandle |
| | | ? ((m_windowHandle->flags() & Qt::MSWindowsFixedSizeDialogHint) || |
| | | m_windowHandle->minimumHeight() == m_windowHandle->maximumHeight()) |
| | | : false; |
| | | } |
| | | inline bool isHostSizeFixed() const { |
| | | return m_windowHandle ? ((m_windowHandle->flags() & Qt::MSWindowsFixedSizeDialogHint) || |
| | | m_windowHandle->minimumSize() == m_windowHandle->maximumSize()) |
| | | : false; |
| | | } |
| | | |
| | | virtual QString key() const; |
| | | |
| | | enum WindowContextHook { |
| | |
| | | RaiseWindowHook, |
| | | ShowSystemMenuHook, |
| | | DefaultColorsHook, |
| | | DrawWindows10BorderHook, // Only works on Windows 10, emulated workaround |
| | | DrawWindows10BorderHook2, // Only works on Windows 10, native workaround |
| | | SystemButtonAreaChangedHook, // Only works on Mac |
| | | DrawWindows10BorderHook_Emulated, // Only works on Windows 10, emulated workaround |
| | | DrawWindows10BorderHook_Native, // Only works on Windows 10, native workaround |
| | | SystemButtonAreaChangedHook, // Only works on Mac |
| | | }; |
| | | virtual void virtual_hook(int id, void *data); |
| | | |
| | |
| | | QObject *m_titleBar{}; |
| | | std::array<QObject *, WindowAgentBase::Close + 1> m_systemButtons{}; |
| | | |
| | | QVariantHash m_windowAttributes; |
| | | std::list<std::pair<QString, QVariant>> m_windowAttributesOrder; |
| | | QHash<QString, decltype(m_windowAttributesOrder)::iterator> m_windowAttributes; |
| | | |
| | | std::unique_ptr<WinIdChangeEventFilter> m_winIdChangeEventFilter; |
| | | |
| | | void removeSystemButtonsAndHitTestItems(); |
| | | |
| | | private: |
| | | void _q_titleBarDistroyed(QObject *obj); |
| | | void _q_hitTestVisibleItemDestroyed(QObject *obj); |
| | | void _q_systemButtonDestroyed(QObject *obj); |
| | | }; |
| | | |
| | | inline QObject *AbstractWindowContext::host() const { |