5#ifndef WINDOWCONTEXT_P_H
6#define WINDOWCONTEXT_P_H
21#include <QtCore/QPointer>
23#include <QtGui/QRegion>
24#include <QtGui/QWindow>
39 inline QObject *host()
const;
40 inline QWindow *
window()
const;
43 inline bool isHitTestVisible(
const QObject *obj)
const;
44 bool setHitTestVisible(
const QObject *obj,
bool visible);
50 inline QObject *titleBar()
const;
51 bool setTitleBar(QObject *obj);
59 bool isInTitleBarDraggableArea(
const QPoint &pos)
const;
61 bool isCaptionClassName(
const char *
name)
const;
62 void addCaptionClassName(
const QString &
name);
64 virtual QString key()
const;
75 virtual void virtual_hook(
int id,
void *data);
77 void showSystemMenu(
const QPoint &pos);
78 void notifyWinIdChange();
80 virtual QVariant windowAttribute(
const QString &key)
const;
81 virtual bool setWindowAttribute(
const QString &key,
const QVariant &attribute);
84 virtual bool windowAttributeChanged(
const QString &key,
const QVariant &attribute,
const QVariant &oldAttribute);
88 QWindow *m_windowHandle{};
96 QObject *m_titleBar{};
97 std::array<QObject *, WindowAgentBase::Close + 1> m_systemButtons{};
105inline QObject *WindowContext::host()
const
110inline QWindow *WindowContext::window()
const
112 return m_windowHandle;
117 return m_delegate.get();
120inline bool WindowContext::isHitTestVisible(
const QObject *obj)
const
122 return m_hitTestVisibleItems.contains(obj);
127 return m_systemButtons[
button];
130inline QObject *WindowContext::titleBar()
const
138 return m_systemButtonAreaCallback;
145#if ((_MSC_VER == 1929) || defined(Q_OS_WINDOWS)) && defined(QX_WINDOW_NATIVE)
156 ~WindowContextWin()
override;
167 QString
key()
const override;
173 bool windowAttributeChanged(
const QString &key,
const QVariant &attribute,
const QVariant &oldAttribute)
override;
175 bool windowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT *result);
177 bool systemMenuHandler(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT *result);
183 bool snapLayoutHandler(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT *result);
185 bool customWindowHandler(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT *result);
187 bool nonClientCalcSizeHandler(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT *result);
192 WindowPart lastHitTestResult = WindowPart::Outside;
196 bool mouseLeaveBlocked =
false;
198 bool initialCentered =
false;
203#elif defined(Q_OS_MAC) && defined(QX_WINDOW_NATIVE)
207class WindowContextCocoa :
public WindowContext
211 WindowContextCocoa();
212 ~WindowContextCocoa()
override;
214 QString key()
const override;
215 void virtual_hook(
int id,
void *data)
override;
217 QVariant windowAttribute(
const QString &key)
const override;
219 void winIdChanged()
override;
220 bool windowAttributeChanged(
const QString &key,
const QVariant &attribute,
const QVariant &oldAttribute)
override;
224 std::unique_ptr<WindowSharedEventFilter> cocoaWindowEventFilter;
239 QString key()
const override;
240 void virtual_hook(
int id,
void *data)
override;
242 void winIdChanged()
override;
std::unique_ptr< WindowSharedEventFilter > qtWindowEventFilter
~WindowContextQt() override
virtual QVariant windowAttribute(const QString &key) const
std::unique_ptr< QObject > m_winIdChangeEventFilter
std::unique_ptr< QObject > m_windowEventFilter
virtual bool windowAttributeChanged(const QString &key, const QVariant &attribute, const QVariant &oldAttribute)
QSet< const QObject * > m_hitTestVisibleItems
ScreenRectCallback m_systemButtonAreaCallback
QVariantHash m_windowAttributes
@ SystemButtonAreaChangedHook
@ DrawWindows10BorderHook
@ DrawWindows10BorderHook2
virtual void virtual_hook(int id, void *data)
~WindowContext() override
virtual QString key() const
virtual void winIdChanged()=0
std::unique_ptr< WindowItemDelegate > m_delegate
QList< QString > m_captionClassNameList
std::function< QRect(const QSize &)> ScreenRectCallback
#define QX_WINDOW_END_NAMESPACE
#define QX_WINDOW_BEGIN_NAMESPACE