5#ifndef ABSTRACTWINDOWCONTEXT_P_H
6#define ABSTRACTWINDOWCONTEXT_P_H
23#include <QtCore/QPointer>
24#include <QtGui/QRegion>
25#include <QtGui/QWindow>
27#include <QWKCore/windowagentbase.h>
28#include <QWKCore/private/nativeeventfilter_p.h>
29#include <QWKCore/private/sharedeventfilter_p.h>
30#include <QWKCore/private/windowitemdelegate_p.h>
31#include <QWKCore/private/winidchangeeventfilter_p.h>
35 class QWK_CORE_EXPORT AbstractWindowContext :
public QObject,
36 public NativeEventDispatcher,
37 public SharedEventDispatcher {
40 AbstractWindowContext();
41 ~AbstractWindowContext()
override;
44 void setup(QObject *host, WindowItemDelegate *delegate);
46 inline QObject *host()
const;
47 inline QWindow *window()
const;
48 inline WId windowId()
const;
49 inline WindowItemDelegate *delegate()
const;
51 inline bool isHitTestVisible(
const QObject *obj)
const;
52 bool setHitTestVisible(QObject *obj,
bool visible);
54 inline QObject *systemButton(WindowAgentBase::SystemButton button)
const;
55 bool setSystemButton(WindowAgentBase::SystemButton button, QObject *obj);
57 inline QObject *titleBar()
const;
58 bool setTitleBar(QObject *obj);
61 inline ScreenRectCallback systemButtonAreaCallback()
const;
62 void setSystemButtonAreaCallback(
const ScreenRectCallback &callback);
65 bool isInSystemButtons(
const QPoint &pos, WindowAgentBase::SystemButton *button)
const;
66 bool isInTitleBarDraggableArea(
const QPoint &pos)
const;
68 inline bool isHostWidthFixed()
const;
69 inline bool isHostHeightFixed()
const;
70 inline bool isHostSizeFixed()
const;
72 virtual QString key()
const;
74 enum WindowContextHook {
79 DrawWindows10BorderHook_Emulated,
80 DrawWindows10BorderHook_Native,
81 SystemButtonAreaChangedHook,
83 virtual void virtual_hook(
int id,
void *data);
85 void showSystemMenu(
const QPoint &pos);
86 void notifyWinIdChange();
88 virtual QVariant windowAttribute(
const QString &key)
const;
89 virtual bool setWindowAttribute(
const QString &key,
const QVariant &attribute);
92 bool eventFilter(QObject *obj, QEvent *event)
override;
95 virtual void winIdChanged(WId winId, WId oldWinId) = 0;
96 virtual bool windowAttributeChanged(
const QString &key,
const QVariant &attribute,
97 const QVariant &oldAttribute);
101 std::unique_ptr<WindowItemDelegate> m_delegate;
102 QPointer<QWindow> m_windowHandle;
105 QVector<QPointer<QObject>> m_hitTestVisibleItems;
107 ScreenRectCallback m_systemButtonAreaCallback;
110 QPointer<QObject> m_titleBar{};
111 std::array<QPointer<QObject>, WindowAgentBase::Close + 1> m_systemButtons{};
113 std::list<std::pair<QString, QVariant>> m_windowAttributesOrder;
114 QHash<QString,
decltype(m_windowAttributesOrder)::iterator> m_windowAttributes;
116 std::unique_ptr<WinIdChangeEventFilter> m_winIdChangeEventFilter;
118 void removeSystemButtonsAndHitTestItems();
121 inline QObject *AbstractWindowContext::host()
const {
125 inline QWindow *AbstractWindowContext::window()
const {
126 return m_windowHandle;
129 inline WId AbstractWindowContext::windowId()
const {
133 inline WindowItemDelegate *AbstractWindowContext::delegate()
const {
134 return m_delegate.get();
137 inline bool AbstractWindowContext::isHitTestVisible(
const QObject *obj)
const {
138 return m_hitTestVisibleItems.contains(
const_cast<QObject *
>(obj));
142 AbstractWindowContext::systemButton(WindowAgentBase::SystemButton button)
const {
143 return m_systemButtons[button];
146 inline QObject *AbstractWindowContext::titleBar()
const {
151 inline ScreenRectCallback AbstractWindowContext::systemButtonAreaCallback()
const {
152 return m_systemButtonAreaCallback;
156 inline bool AbstractWindowContext::isHostWidthFixed()
const {
157 return m_windowHandle
158 ? ((m_windowHandle->flags() & Qt::MSWindowsFixedSizeDialogHint) ||
159 m_windowHandle->minimumWidth() == m_windowHandle->maximumWidth())
163 inline bool AbstractWindowContext::isHostHeightFixed()
const {
164 return m_windowHandle
165 ? ((m_windowHandle->flags() & Qt::MSWindowsFixedSizeDialogHint) ||
166 m_windowHandle->minimumHeight() == m_windowHandle->maximumHeight())
170 inline bool AbstractWindowContext::isHostSizeFixed()
const {
171 return m_windowHandle ? ((m_windowHandle->flags() & Qt::MSWindowsFixedSizeDialogHint) ||
172 m_windowHandle->minimumSize() == m_windowHandle->maximumSize())
QWindowKit namespace.
Definition abstractwindowcontext.cpp:13