From c3c6647e7888b7dbe9d9d22fb77bf08104a3653c Mon Sep 17 00:00:00 2001 From: Sine Striker <trueful@163.com> Date: 周一, 11 12月 2023 02:14:32 +0800 Subject: [PATCH] refactor --- src/core/kernel/sharedeventfilter.h | 51 ++++ src/quick/quickwindowagent.h | 4 src/core/contexts/abstractwindowcontext_p.h | 22 + src/quick/CMakeLists.txt | 2 src/core/qwkglobal.h | 16 + src/core/contexts/win32windowcontext.cpp | 73 +++-- src/core/windowitemdelegate.cpp | 2 src/core/windowitemdelegate_p.h | 8 src/widgets/CMakeLists.txt | 2 src/core/CMakeLists.txt | 18 src/quick/quickitemdelegate_p.h | 2 src/core/contexts/qtwindowcontext.cpp | 4 src/core/kernel/nativeeventfilter.h | 23 + src/widgets/widgetwindowagent.h | 4 src/core/qwkglobal_p.h | 18 + src/core/windowagentbase_p.h | 30 ++ examples/mainwindow/mainwindow.cpp | 8 src/quick/quickwindowagent.cpp | 7 src/widgets/widgetitemdelegate_p.h | 2 src/core/contexts/abstractwindowcontext.cpp | 51 --- src/core/windowagentbase.h | 18 src/quick/quickwindowagent_p.h | 6 src/core/windowagentbase.cpp | 86 +++++++ src/widgets/widgetwindowagent_p.h | 6 src/core/contexts/qtwindowcontext_p.h | 1 /dev/null | 34 -- src/core/contexts/win32windowcontext_p.h | 2 src/widgets/widgetwindowagent.cpp | 7 src/core/kernel/nativeeventfilter.cpp | 65 +++++ src/core/kernel/sharedeventfilter.cpp | 90 +++++++ 30 files changed, 491 insertions(+), 171 deletions(-) diff --git a/examples/mainwindow/mainwindow.cpp b/examples/mainwindow/mainwindow.cpp index e0c7151..f98f43f 100644 --- a/examples/mainwindow/mainwindow.cpp +++ b/examples/mainwindow/mainwindow.cpp @@ -77,10 +77,10 @@ windowBar->setHostWidget(this); agent->setTitleBar(windowBar); - agent->setSystemButton(QWK::CoreWindowAgent::WindowIcon, iconButton); - agent->setSystemButton(QWK::CoreWindowAgent::Minimize, minButton); - agent->setSystemButton(QWK::CoreWindowAgent::Maximize, maxButton); - agent->setSystemButton(QWK::CoreWindowAgent::Close, closeButton); + agent->setSystemButton(QWK::WindowAgentBase::WindowIcon, iconButton); + agent->setSystemButton(QWK::WindowAgentBase::Minimize, minButton); + agent->setSystemButton(QWK::WindowAgentBase::Maximize, maxButton); + agent->setSystemButton(QWK::WindowAgentBase::Close, closeButton); agent->setHitTestVisible(menuBar, true); connect(windowBar, &QWK::WindowBar::minimizeRequested, this, &QWidget::showMinimized); diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 654a259..1464e23 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -5,13 +5,17 @@ set(_src qwkcoreglobal.h - qwkcoreglobal_p.h - qwkcoreglobal.cpp - corewindowagent.h - corewindowagent_p.h - corewindowagent.cpp - windowitemdelegate.h + qwkglobal.h + qwkglobal_p.h + windowagentbase.h + windowagentbase_p.h + windowagentbase.cpp + windowitemdelegate_p.h windowitemdelegate.cpp + kernel/nativeeventfilter.h + kernel/nativeeventfilter.cpp + kernel/sharedeventfilter.h + kernel/sharedeventfilter.cpp contexts/abstractwindowcontext_p.h contexts/abstractwindowcontext.cpp ) @@ -43,7 +47,7 @@ LINKS QT_LINKS Core Gui QT_INCLUDE_PRIVATE Core Gui - INCLUDE_PRIVATE contexts + INCLUDE_PRIVATE kernel contexts PREFIX QWK_CORE ) diff --git a/src/core/contexts/abstractwindowcontext.cpp b/src/core/contexts/abstractwindowcontext.cpp index c33f98c..71431ff 100644 --- a/src/core/contexts/abstractwindowcontext.cpp +++ b/src/core/contexts/abstractwindowcontext.cpp @@ -8,24 +8,6 @@ AbstractWindowContext::~AbstractWindowContext() = default; - class EventFilterForwarder : public QObject { - public: - using EventProc = bool (*)(QEvent *, void *); - - EventFilterForwarder(EventProc proc, void *user, QObject *parent = nullptr) - : QObject(parent), proc(proc), user(user) { - } - - bool eventFilter(QObject *obj, QEvent *event) override { - Q_UNUSED(obj) - return proc(event, user); - } - - protected: - EventProc proc; - void *user; - }; - bool AbstractWindowContext::setup(QObject *host, WindowItemDelegate *delegate) { if (!host || !delegate) { return false; @@ -46,14 +28,6 @@ m_windowHandle = nullptr; return false; } - - // Install specific event filter - host->installEventFilter(new EventFilterForwarder( - [](QEvent *event, void *user) { - return static_cast<AbstractWindowContext *>(user)->hostEventFilter(event); - }, - this, this)); - return true; } @@ -86,11 +60,11 @@ return true; } - bool AbstractWindowContext::setSystemButton(CoreWindowAgent::SystemButton button, + bool AbstractWindowContext::setSystemButton(WindowAgentBase::SystemButton button, const QObject *obj) { Q_ASSERT(obj); - Q_ASSERT(button != CoreWindowAgent::Unknown); - if (!obj || (button == CoreWindowAgent::Unknown)) { + Q_ASSERT(button != WindowAgentBase::Unknown); + if (!obj || (button == WindowAgentBase::Unknown)) { return false; } @@ -114,9 +88,7 @@ return true; } - void AbstractWindowContext::showSystemMenu(const QPoint &pos) { - // ? - } + void AbstractWindowContext::showSystemMenu(const QPoint &pos){Q_UNUSED(pos)} QRegion AbstractWindowContext::hitTestShape() const { if (hitTestVisibleShapeDirty) { @@ -130,16 +102,16 @@ } bool AbstractWindowContext::isInSystemButtons(const QPoint &pos, - CoreWindowAgent::SystemButton *button) const { - *button = CoreWindowAgent::Unknown; - for (int i = CoreWindowAgent::WindowIcon; i <= CoreWindowAgent::Close; ++i) { + WindowAgentBase::SystemButton *button) const { + *button = WindowAgentBase::Unknown; + for (int i = WindowAgentBase::WindowIcon; i <= WindowAgentBase::Close; ++i) { auto currentButton = m_systemButtons[i]; if (!currentButton || !m_delegate->isVisible(currentButton) || !m_delegate->isEnabled(currentButton)) { continue; } if (m_delegate->mapGeometryToScene(currentButton).contains(pos)) { - *button = static_cast<CoreWindowAgent::SystemButton>(i); + *button = static_cast<WindowAgentBase::SystemButton>(i); return true; } } @@ -168,7 +140,7 @@ return false; } - for (int i = CoreWindowAgent::WindowIcon; i <= CoreWindowAgent::Close; ++i) { + for (int i = WindowAgentBase::WindowIcon; i <= WindowAgentBase::Close; ++i) { auto currentButton = m_systemButtons[i]; if (currentButton && m_delegate->isVisible(currentButton) && m_delegate->isEnabled(currentButton) && @@ -190,9 +162,8 @@ return true; } - bool AbstractWindowContext::hostEventFilter(QEvent *event) { - Q_UNUSED(event) - return false; + QObject *AbstractWindowContext::target() const { + return m_host; } } \ No newline at end of file diff --git a/src/core/contexts/abstractwindowcontext_p.h b/src/core/contexts/abstractwindowcontext_p.h index 30ea3c1..28ff0de 100644 --- a/src/core/contexts/abstractwindowcontext_p.h +++ b/src/core/contexts/abstractwindowcontext_p.h @@ -8,12 +8,13 @@ #include <QtGui/QWindow> #include <QtGui/QPolygon> -#include <QWKCore/corewindowagent.h> -#include <QWKCore/windowitemdelegate.h> +#include <QWKCore/windowagentbase.h> +#include <QWKCore/sharedeventfilter.h> +#include <QWKCore/private/windowitemdelegate_p.h> namespace QWK { - class QWK_CORE_EXPORT AbstractWindowContext : public QObject { + class QWK_CORE_EXPORT AbstractWindowContext : public QObject, public SharedEventDispatcher { Q_OBJECT public: AbstractWindowContext(); @@ -29,21 +30,22 @@ bool setHitTestVisible(const QObject *obj, bool visible); bool setHitTestVisible(const QRect &rect, bool visible); - inline const QObject *systemButton(CoreWindowAgent::SystemButton button) const; - bool setSystemButton(CoreWindowAgent::SystemButton button, const QObject *obj); + inline const QObject *systemButton(WindowAgentBase::SystemButton button) const; + bool setSystemButton(WindowAgentBase::SystemButton button, const QObject *obj); inline const QObject *titleBar() const; bool setTitleBar(const QObject *obj); - void showSystemMenu(const QPoint &pos); + virtual void showSystemMenu(const QPoint &pos); QRegion hitTestShape() const; - bool isInSystemButtons(const QPoint &pos, CoreWindowAgent::SystemButton *button) const; + bool isInSystemButtons(const QPoint &pos, WindowAgentBase::SystemButton *button) const; bool isInTitleBarDraggableArea(const QPoint &pos) const; protected: virtual bool setupHost() = 0; - virtual bool hostEventFilter(QEvent *event); + + QObject *target() const override; protected: QObject *m_host; @@ -54,7 +56,7 @@ QList<QRect> m_hitTestVisibleRects; const QObject *m_titleBar{}; - std::array<const QObject *, CoreWindowAgent::NumSystemButton> m_systemButtons{}; + std::array<const QObject *, WindowAgentBase::NumSystemButton> m_systemButtons{}; // Cached shape mutable bool hitTestVisibleShapeDirty{}; @@ -74,7 +76,7 @@ } inline const QObject * - AbstractWindowContext::systemButton(CoreWindowAgent::SystemButton button) const { + AbstractWindowContext::systemButton(WindowAgentBase::SystemButton button) const { return m_systemButtons[button]; } diff --git a/src/core/contexts/qtwindowcontext.cpp b/src/core/contexts/qtwindowcontext.cpp index 5fa7787..0eaf7c8 100644 --- a/src/core/contexts/qtwindowcontext.cpp +++ b/src/core/contexts/qtwindowcontext.cpp @@ -50,8 +50,4 @@ return false; } - bool QtWindowContext::hostEventFilter(QEvent *event) { - return false; - } - } \ No newline at end of file diff --git a/src/core/contexts/qtwindowcontext_p.h b/src/core/contexts/qtwindowcontext_p.h index 6046633..7a31987 100644 --- a/src/core/contexts/qtwindowcontext_p.h +++ b/src/core/contexts/qtwindowcontext_p.h @@ -13,7 +13,6 @@ protected: bool setupHost() override; - bool hostEventFilter(QEvent *event) override; }; } diff --git a/src/core/contexts/win32windowcontext.cpp b/src/core/contexts/win32windowcontext.cpp index 4d08adc..9cf1ecc 100644 --- a/src/core/contexts/win32windowcontext.cpp +++ b/src/core/contexts/win32windowcontext.cpp @@ -1,10 +1,8 @@ #include "win32windowcontext_p.h" -#include "qwkcoreglobal_p.h" #include <optional> #include <QtCore/QHash> -#include <QtCore/QAbstractNativeEventFilter> #include <QtCore/QScopeGuard> #include <QtGui/QGuiApplication> @@ -24,6 +22,8 @@ #include <dwmapi.h> #include <timeapi.h> #include <versionhelpers.h> + +#include "nativeeventfilter.h" #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) Q_DECLARE_METATYPE(QMargins) @@ -62,7 +62,8 @@ // } // }; // -// #define DYNAMIC_API_DECLARE(NAME) decltype(&::NAME) p##NAME = DefaultFunc<decltype(&::NAME)>::func +// #define DYNAMIC_API_DECLARE(NAME) decltype(&::NAME) p##NAME = +// DefaultFunc<decltype(&::NAME)>::func #define DYNAMIC_API_DECLARE(NAME) decltype(&::NAME) p##NAME = nullptr DYNAMIC_API_DECLARE(DwmFlush); @@ -78,7 +79,8 @@ #undef DYNAMIC_API_DECLARE DynamicApis() { -#define DYNAMIC_API_RESOLVE(DLL, NAME) p##NAME = reinterpret_cast<decltype(p##NAME)>(DLL.resolve(#NAME)) +#define DYNAMIC_API_RESOLVE(DLL, NAME) \ + p##NAME = reinterpret_cast<decltype(p##NAME)>(DLL.resolve(#NAME)) QSystemLibrary user32(QStringLiteral("user32")); DYNAMIC_API_RESOLVE(user32, GetDpiForWindow); @@ -207,7 +209,8 @@ } static inline bool isWin11OrGreater() { - static const bool result = ::IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN10), LOBYTE(_WIN32_WINNT_WIN10), 22000); + static const bool result = ::IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN10), + LOBYTE(_WIN32_WINNT_WIN10), 22000); return result; } @@ -383,8 +386,8 @@ apis.ptimeEndPeriod(ms_granularity); } - static inline void showSystemMenu2(HWND hWnd, const POINT &pos, const bool selectFirstEntry, const bool fixedSize) - { + static inline void showSystemMenu2(HWND hWnd, const POINT &pos, const bool selectFirstEntry, + const bool fixedSize) { const HMENU hMenu = ::GetSystemMenu(hWnd, FALSE); if (!hMenu) { // The corresponding window doesn't have a system menu, most likely due to the @@ -395,8 +398,10 @@ const bool maxOrFull = IsMaximized(hWnd) || isFullScreen(hWnd); ::EnableMenuItem(hMenu, SC_CLOSE, (MF_BYCOMMAND | MFS_ENABLED)); - ::EnableMenuItem(hMenu, SC_MAXIMIZE, (MF_BYCOMMAND | ((maxOrFull || fixedSize) ? MFS_DISABLED : MFS_ENABLED))); - ::EnableMenuItem(hMenu, SC_RESTORE, (MF_BYCOMMAND | ((maxOrFull && !fixedSize) ? MFS_ENABLED : MFS_DISABLED))); + ::EnableMenuItem(hMenu, SC_MAXIMIZE, + (MF_BYCOMMAND | ((maxOrFull || fixedSize) ? MFS_DISABLED : MFS_ENABLED))); + ::EnableMenuItem(hMenu, SC_RESTORE, + (MF_BYCOMMAND | ((maxOrFull && !fixedSize) ? MFS_ENABLED : MFS_DISABLED))); // The first menu item should be selected by default if the menu is brought // up by keyboard. I don't know how to pre-select a menu item but it seems // highlight can do the job. However, there's an annoying issue if we do @@ -406,9 +411,11 @@ // highlight bar will not move accordingly, the OS will generate another // highlight bar to indicate the current selected menu item, which will make // the menu look kind of weird. Currently I don't know how to fix this issue. - ::HiliteMenuItem(hWnd, hMenu, SC_RESTORE, (MF_BYCOMMAND | (selectFirstEntry ? MFS_HILITE : MFS_UNHILITE))); + ::HiliteMenuItem(hWnd, hMenu, SC_RESTORE, + (MF_BYCOMMAND | (selectFirstEntry ? MFS_HILITE : MFS_UNHILITE))); ::EnableMenuItem(hMenu, SC_MINIMIZE, (MF_BYCOMMAND | MFS_ENABLED)); - ::EnableMenuItem(hMenu, SC_SIZE, (MF_BYCOMMAND | ((maxOrFull || fixedSize) ? MFS_DISABLED : MFS_ENABLED))); + ::EnableMenuItem(hMenu, SC_SIZE, + (MF_BYCOMMAND | ((maxOrFull || fixedSize) ? MFS_DISABLED : MFS_ENABLED))); ::EnableMenuItem(hMenu, SC_MOVE, (MF_BYCOMMAND | (maxOrFull ? MFS_DISABLED : MFS_ENABLED))); // The default menu item will appear in bold font. There can only be one default @@ -428,7 +435,10 @@ ::SetMenuDefaultItem(hMenu, defaultItemId, FALSE); // Popup the system menu at the required position. - const auto result = ::TrackPopupMenu(hMenu, (TPM_RETURNCMD | (QGuiApplication::isRightToLeft() ? TPM_RIGHTALIGN : TPM_LEFTALIGN)), pos.x, pos.y, 0, hWnd, nullptr); + const auto result = ::TrackPopupMenu( + hMenu, + (TPM_RETURNCMD | (QGuiApplication::isRightToLeft() ? TPM_RIGHTALIGN : TPM_LEFTALIGN)), + pos.x, pos.y, 0, hWnd, nullptr); // Unhighlight the first menu item after the popup menu is closed, otherwise it will keep // highlighting until we unhighlight it manually. @@ -511,7 +521,7 @@ // DefWindowProc(). Consequently, we have to add a global native filter that forwards the result // of the hook function, telling Qt whether we have filtered the events before. Since Qt only // handles Windows window messages in the main thread, it is safe to do so. - class WindowsNativeEventFilter : public QAbstractNativeEventFilter { + class WindowsNativeEventFilter : public NativeEventFilter { public: bool nativeEventFilter(const QByteArray &eventType, void *message, QT_NATIVE_EVENT_RESULT_TYPE *result) override { @@ -546,14 +556,12 @@ return; } instance = new WindowsNativeEventFilter(); - installNativeEventFilter(instance); } static inline void uninstall() { if (!instance) { return; } - removeNativeEventFilter(instance); delete instance; instance = nullptr; } @@ -659,6 +667,12 @@ WindowsNativeEventFilter::uninstall(); } } + } + + void Win32WindowContext::showSystemMenu(const QPoint &pos) { + auto winId = m_windowHandle->winId(); + auto hWnd = reinterpret_cast<HWND>(winId); + showSystemMenu2(hWnd, {pos.x(), pos.y()}, false, m_delegate->isHostSizeFixed(m_host)); } bool Win32WindowContext::setupHost() { @@ -884,8 +898,9 @@ DWORD dwScreenPos = ::GetMessagePos(); POINT screenPoint{GET_X_LPARAM(dwScreenPos), GET_Y_LPARAM(dwScreenPos)}; ::ScreenToClient(hWnd, &screenPoint); - QPoint qtScenePos = QHighDpi::fromNativeLocalPosition(point2qpoint(screenPoint), m_windowHandle); - auto dummy = CoreWindowAgent::Unknown; + QPoint qtScenePos = QHighDpi::fromNativeLocalPosition(point2qpoint(screenPoint), + m_windowHandle); + auto dummy = WindowAgentBase::Unknown; if (isInSystemButtons(qtScenePos, &dummy)) { // We must record whether the last WM_MOUSELEAVE was filtered, because if // Qt does not receive this message it will not call TrackMouseEvent() @@ -1116,13 +1131,14 @@ auto clientWidth = RECT_WIDTH(clientRect); auto clientHeight = RECT_HEIGHT(clientRect); - QPoint qtScenePos = QHighDpi::fromNativeLocalPosition(point2qpoint(nativeLocalPos), m_windowHandle); + QPoint qtScenePos = + QHighDpi::fromNativeLocalPosition(point2qpoint(nativeLocalPos), m_windowHandle); bool isFixedSize = m_delegate->isHostSizeFixed(m_host); bool isTitleBar = isInTitleBarDraggableArea(qtScenePos); bool dontOverrideCursor = false; // ### TODO - CoreWindowAgent::SystemButton sysButtonType = CoreWindowAgent::Unknown; + WindowAgentBase::SystemButton sysButtonType = WindowAgentBase::Unknown; if (!isFixedSize && isInSystemButtons(qtScenePos, &sysButtonType)) { // Firstly, we set the hit test result to a default value to be able to detect // whether we have changed it or not afterwards. @@ -1166,19 +1182,19 @@ // exact role of our button. The Snap Layout feature introduced in Windows // 11 won't work without this. switch (sysButtonType) { - case CoreWindowAgent::WindowIcon: + case WindowAgentBase::WindowIcon: *result = HTSYSMENU; break; - case CoreWindowAgent::Help: + case WindowAgentBase::Help: *result = HTHELP; break; - case CoreWindowAgent::Minimize: + case WindowAgentBase::Minimize: *result = HTREDUCE; break; - case CoreWindowAgent::Maximize: + case WindowAgentBase::Maximize: *result = HTZOOM; break; - case CoreWindowAgent::Close: + case WindowAgentBase::Close: *result = HTCLOSE; break; default: @@ -1628,7 +1644,8 @@ }(); RECT windowPos{}; ::GetWindowRect(hWnd, &windowPos); - return {static_cast<LONG>(windowPos.left + horizontalOffset), static_cast<LONG>(windowPos.top + verticalOffset)}; + return {static_cast<LONG>(windowPos.left + horizontalOffset), + static_cast<LONG>(windowPos.top + verticalOffset)}; }; bool shouldShowSystemMenu = false; bool broughtByKeyboard = false; @@ -1636,7 +1653,8 @@ switch (message) { case WM_RBUTTONUP: { const POINT nativeLocalPos = getNativePosFromMouse(); - const QPoint qtScenePos = QHighDpi::fromNativeLocalPosition(point2qpoint(nativeLocalPos), m_windowHandle); + const QPoint qtScenePos = + QHighDpi::fromNativeLocalPosition(point2qpoint(nativeLocalPos), m_windowHandle); if (isInTitleBarDraggableArea(qtScenePos)) { shouldShowSystemMenu = true; nativeGlobalPos = nativeLocalPos; @@ -1675,7 +1693,8 @@ break; } if (shouldShowSystemMenu) { - showSystemMenu2(hWnd, nativeGlobalPos, broughtByKeyboard, m_delegate->isHostSizeFixed(m_host)); + showSystemMenu2(hWnd, nativeGlobalPos, broughtByKeyboard, + m_delegate->isHostSizeFixed(m_host)); // QPA's internal code will handle system menu events separately, and its // behavior is not what we would want to see because it doesn't know our // window doesn't have any window frame now, so return early here to avoid diff --git a/src/core/contexts/win32windowcontext_p.h b/src/core/contexts/win32windowcontext_p.h index 27b4e1f..758633f 100644 --- a/src/core/contexts/win32windowcontext_p.h +++ b/src/core/contexts/win32windowcontext_p.h @@ -21,6 +21,8 @@ TitleBar, }; + void showSystemMenu(const QPoint &pos) override; + protected: bool setupHost() override; diff --git a/src/core/corewindowagent.cpp b/src/core/corewindowagent.cpp deleted file mode 100644 index d5dff5a..0000000 --- a/src/core/corewindowagent.cpp +++ /dev/null @@ -1,86 +0,0 @@ -#include "corewindowagent.h" -#include "corewindowagent_p.h" - -#include "qwkcoreglobal_p.h" - -#ifdef Q_OS_WINDOWS -# include "win32windowcontext_p.h" -#else -# include "qtwindowcontext_p.h" -#endif - -Q_LOGGING_CATEGORY(qWindowKitLog, "qwindowkit") - -namespace QWK { - - CoreWindowAgentPrivate::CoreWindowAgentPrivate() : q_ptr(nullptr), context(nullptr) { - } - - CoreWindowAgentPrivate::~CoreWindowAgentPrivate() = default; - - void CoreWindowAgentPrivate::init() { - } - - AbstractWindowContext *CoreWindowAgentPrivate::createContext() const { - return -#ifdef Q_OS_WINDOWS - new Win32WindowContext() -#else - new QtWindowContext() -#endif - ; - } - - - bool CoreWindowAgentPrivate::setup(QObject *host, WindowItemDelegate *delegate) { - std::unique_ptr<AbstractWindowContext> ctx(createContext()); - if (!ctx->setup(host, delegate)) { - return false; - } - context = std::move(ctx); - return true; - } - - CoreWindowAgent::~CoreWindowAgent() = default; - - void CoreWindowAgent::showSystemMenu(const QPoint &pos) { - Q_D(CoreWindowAgent); - d->context->showSystemMenu(pos); - } - - void CoreWindowAgent::startSystemMove(const QPoint &pos) { - Q_D(CoreWindowAgent); - auto win = d->context->window(); - if (!win) { - return; - } - - Q_UNUSED(pos) - win->startSystemMove(); - } - - void CoreWindowAgent::startSystemResize(Qt::Edges edges, const QPoint &pos) { - Q_D(CoreWindowAgent); - auto win = d->context->window(); - if (!win) { - return; - } - - Q_UNUSED(pos) - win->startSystemResize(edges); - } - - void CoreWindowAgent::centralize() { - } - - void CoreWindowAgent::raise() { - } - - CoreWindowAgent::CoreWindowAgent(CoreWindowAgentPrivate &d, QObject *parent) - : QObject(parent), d_ptr(&d) { - d.q_ptr = this; - - d.init(); - } - -} diff --git a/src/core/corewindowagent_p.h b/src/core/corewindowagent_p.h deleted file mode 100644 index 7ff6825..0000000 --- a/src/core/corewindowagent_p.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef COREWINDOWAGENTPRIVATE_H -#define COREWINDOWAGENTPRIVATE_H - -#include <QWKCore/corewindowagent.h> -#include <QWKCore/private/abstractwindowcontext_p.h> - -namespace QWK { - - class QWK_CORE_EXPORT CoreWindowAgentPrivate { - Q_DECLARE_PUBLIC(CoreWindowAgent) - public: - CoreWindowAgentPrivate(); - virtual ~CoreWindowAgentPrivate(); - - void init(); - - CoreWindowAgent *q_ptr; // no need to initialize - - virtual AbstractWindowContext *createContext() const; - - bool setup(QObject *host, WindowItemDelegate *delegate); - - std::unique_ptr<AbstractWindowContext> context; - - Q_DISABLE_COPY_MOVE(CoreWindowAgentPrivate) - }; - -} - -#endif // COREWINDOWAGENTPRIVATE_H \ No newline at end of file diff --git a/src/core/kernel/nativeeventfilter.cpp b/src/core/kernel/nativeeventfilter.cpp new file mode 100644 index 0000000..a3b8c1b --- /dev/null +++ b/src/core/kernel/nativeeventfilter.cpp @@ -0,0 +1,65 @@ +#include "nativeeventfilter.h" + +#include <QtCore/QAbstractNativeEventFilter> +#include <QtGui/QGuiApplication> + +namespace QWK { + + // Avoid adding multiple global native event filters to QGuiApplication + // in this library. + class MasterNativeEventFilter : public QAbstractNativeEventFilter { + public: + MasterNativeEventFilter() { + qApp->installNativeEventFilter(this); + } + + ~MasterNativeEventFilter() override { + qApp->removeNativeEventFilter(this); + } + + bool nativeEventFilter(const QByteArray &eventType, void *message, + QT_NATIVE_EVENT_RESULT_TYPE *result) override { + for (const auto &child : qAsConst(m_children)) { + if (child->nativeEventFilter(eventType, message, result)) { + return true; + } + } + return false; + } + + inline int count() const { + return m_children.size(); + } + + inline void addChild(NativeEventFilter *child) { + m_children.append(child); + } + + inline void removeChild(NativeEventFilter *child) { + m_children.removeOne(child); + } + + static MasterNativeEventFilter *instance; + + protected: + QVector<NativeEventFilter *> m_children; + }; + + MasterNativeEventFilter *MasterNativeEventFilter::instance = nullptr; + + NativeEventFilter::NativeEventFilter() { + if (!MasterNativeEventFilter::instance) { + MasterNativeEventFilter::instance = new MasterNativeEventFilter(); + } + MasterNativeEventFilter::instance->addChild(this); + } + + NativeEventFilter::~NativeEventFilter() { + MasterNativeEventFilter::instance->removeChild(this); + if (MasterNativeEventFilter::instance->count() == 0) { + delete MasterNativeEventFilter::instance; + MasterNativeEventFilter::instance = nullptr; + } + } + +} \ No newline at end of file diff --git a/src/core/kernel/nativeeventfilter.h b/src/core/kernel/nativeeventfilter.h new file mode 100644 index 0000000..103c025 --- /dev/null +++ b/src/core/kernel/nativeeventfilter.h @@ -0,0 +1,23 @@ +#ifndef NATIVEEVENTFILTER_H +#define NATIVEEVENTFILTER_H + +#include <QWKCore/qwkglobal.h> + +namespace QWK { + + class QWK_CORE_EXPORT NativeEventFilter { + public: + NativeEventFilter(); + virtual ~NativeEventFilter(); + + public: + virtual bool nativeEventFilter(const QByteArray &eventType, void *message, + QT_NATIVE_EVENT_RESULT_TYPE *result) = 0; + + private: + Q_DISABLE_COPY(NativeEventFilter) + }; + +} + +#endif // NATIVEEVENTFILTER_H diff --git a/src/core/kernel/sharedeventfilter.cpp b/src/core/kernel/sharedeventfilter.cpp new file mode 100644 index 0000000..26cb4ac --- /dev/null +++ b/src/core/kernel/sharedeventfilter.cpp @@ -0,0 +1,90 @@ +#include "sharedeventfilter.h" + +namespace QWK { + + class EventFilterForwarder : public QObject { + public: + explicit EventFilterForwarder(SharedEventDispatcherPrivate *master, + QObject *parent = nullptr) + : QObject(parent), master(master) { + } + + bool eventFilter(QObject *obj, QEvent *event) override; + + protected: + SharedEventDispatcherPrivate *master; + }; + + class SharedEventDispatcherPrivate { + public: + explicit SharedEventDispatcherPrivate(SharedEventDispatcher *q) + : q(q), forwarder(new EventFilterForwarder(this)) { + } + ~SharedEventDispatcherPrivate() = default; + + bool dispatch(QObject *obj, QEvent *event) { + for (const auto &ef : qAsConst(eventFilters)) { + if (ef->eventFilter(obj, event)) { + return true; + } + } + return false; + } + + inline void install(SharedEventFilter *eventFilter) { + bool empty = eventFilters.isEmpty(); + + eventFilters.append(eventFilter); + eventFilter->m_dispatcher = q; + + if (empty) { + q->target()->installEventFilter(forwarder.get()); + } + } + + inline void uninstall(SharedEventFilter *eventFilter) { + if (!eventFilters.removeOne(eventFilter)) { + return; + } + eventFilter->m_dispatcher = nullptr; + + if (eventFilters.isEmpty()) { + q->target()->removeEventFilter(forwarder.get()); + } + } + + SharedEventDispatcher *q; + + std::unique_ptr<EventFilterForwarder> forwarder; + QVector<SharedEventFilter *> eventFilters; + }; + + bool EventFilterForwarder::eventFilter(QObject *obj, QEvent *event) { + return master->dispatch(obj, event); + } + + SharedEventFilter::SharedEventFilter() : m_dispatcher(nullptr) { + } + + SharedEventFilter::~SharedEventFilter() { + if (m_dispatcher) + m_dispatcher->removeSharedEventFilter(this); + } + + SharedEventDispatcher::SharedEventDispatcher() : d(new SharedEventDispatcherPrivate(this)) { + } + + SharedEventDispatcher::~SharedEventDispatcher() { + delete d; + } + + void SharedEventDispatcher::installSharedEventFilter(SharedEventFilter *eventFilter) { + d->install(eventFilter); + } + + void SharedEventDispatcher::removeSharedEventFilter(SharedEventFilter *eventFilter) { + d->uninstall(eventFilter); + } + + +} \ No newline at end of file diff --git a/src/core/kernel/sharedeventfilter.h b/src/core/kernel/sharedeventfilter.h new file mode 100644 index 0000000..de74f3b --- /dev/null +++ b/src/core/kernel/sharedeventfilter.h @@ -0,0 +1,51 @@ +#ifndef SHAREDEVENTFILTER_H +#define SHAREDEVENTFILTER_H + +#include <QtCore/QObject> +#include <QtCore/QVector> + +#include <QWKCore/qwkcoreglobal.h> + +namespace QWK { + + class SharedEventDispatcherPrivate; + + class SharedEventDispatcher; + + class QWK_CORE_EXPORT SharedEventFilter { + public: + SharedEventFilter(); + virtual ~SharedEventFilter(); + + public: + virtual bool eventFilter(QObject *obj, QEvent *event) = 0; + + private: + SharedEventDispatcher *m_dispatcher; + + Q_DISABLE_COPY(SharedEventFilter) + + friend class SharedEventDispatcher; + friend class SharedEventDispatcherPrivate; + }; + + class QWK_CORE_EXPORT SharedEventDispatcher { + public: + SharedEventDispatcher(); + virtual ~SharedEventDispatcher(); + + public: + virtual QObject *target() const = 0; + + void installSharedEventFilter(SharedEventFilter *eventFilter); + void removeSharedEventFilter(SharedEventFilter *eventFilter); + + protected: + SharedEventDispatcherPrivate *d; + + Q_DISABLE_COPY(SharedEventDispatcher) + }; + +} + +#endif // SHAREDEVENTFILTER_H diff --git a/src/core/qwkcoreglobal.cpp b/src/core/qwkcoreglobal.cpp deleted file mode 100644 index 9047b5d..0000000 --- a/src/core/qwkcoreglobal.cpp +++ /dev/null @@ -1,74 +0,0 @@ -#include "qwkcoreglobal_p.h" - -#include <QtCore/QAbstractNativeEventFilter> -#include <QtCore/QCoreApplication> -#include <QtCore/QSet> - -namespace QWK { - - // Avoid adding multiple global native event filters to QCoreApplication - // in this library. - class NativeEventFilterManager : public QAbstractNativeEventFilter { - public: - NativeEventFilterManager() { - qApp->installNativeEventFilter(this); - } - - ~NativeEventFilterManager() override { - qApp->removeNativeEventFilter(this); - } - - bool nativeEventFilter(const QByteArray &eventType, void *message, - QT_NATIVE_EVENT_RESULT_TYPE *result) override { - for (const auto &child : qAsConst(m_children)) { - if (child->nativeEventFilter(eventType, message, result)) { - return true; - } - } - return false; - } - - inline int count() const { - return m_children.size(); - } - - inline void addChild(QAbstractNativeEventFilter *child) { - m_children.append(child); - } - - inline void removeChild(QAbstractNativeEventFilter *child) { - m_children.removeOne(child); - } - - static NativeEventFilterManager *instance; - - protected: - QVector<QAbstractNativeEventFilter *> m_children; - }; - - NativeEventFilterManager *NativeEventFilterManager::instance = nullptr; - - void installNativeEventFilter(QAbstractNativeEventFilter *eventFilter) { - if (!eventFilter) { - return; - } - - if (!NativeEventFilterManager::instance) { - NativeEventFilterManager::instance = new NativeEventFilterManager(); - } - NativeEventFilterManager::instance->addChild(eventFilter); - } - - void removeNativeEventFilter(QAbstractNativeEventFilter *eventFilter) { - if (!eventFilter || !NativeEventFilterManager::instance) { - return; - } - NativeEventFilterManager::instance->removeChild(eventFilter); - - if (NativeEventFilterManager::instance->count() == 0) { - delete NativeEventFilterManager::instance; - NativeEventFilterManager::instance = nullptr; - } - } - -} \ No newline at end of file diff --git a/src/core/qwkcoreglobal_p.h b/src/core/qwkcoreglobal_p.h deleted file mode 100644 index d18b54f..0000000 --- a/src/core/qwkcoreglobal_p.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef QWKCOREGLOBAL_P_H -#define QWKCOREGLOBAL_P_H - -#include <QtCore/QEvent> -#include <QtCore/QLoggingCategory> -#include <QtCore/QAbstractNativeEventFilter> -#include <QtGui/QtEvents> - -#include <QWKCore/qwkcoreglobal.h> - -#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) -using QT_NATIVE_EVENT_RESULT_TYPE = qintptr; -using QT_ENTER_EVENT_TYPE = QEnterEvent; -#else -using QT_NATIVE_EVENT_RESULT_TYPE = long; -using QT_ENTER_EVENT_TYPE = QEvent; -#endif - -QWK_CORE_EXPORT Q_DECLARE_LOGGING_CATEGORY(qWindowKitLog) - -#define QWK_INFO qCInfo(qWindowKitLog) -#define QWK_DEBUG qCDebug(qWindowKitLog) -#define QWK_WARNING qCWarning(qWindowKitLog) -#define QWK_CRITICAL qCCritical(qWindowKitLog) -#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0) -# define QWK_FATAL qCFatal(qWindowKitLog) -#endif - - -namespace QWK { - - QWK_CORE_EXPORT void installNativeEventFilter(QAbstractNativeEventFilter *eventFilter); - - QWK_CORE_EXPORT void removeNativeEventFilter(QAbstractNativeEventFilter *eventFilter); - -} - -#endif // QWKCOREGLOBAL_P_H diff --git a/src/core/qwkglobal.h b/src/core/qwkglobal.h new file mode 100644 index 0000000..fb15d4f --- /dev/null +++ b/src/core/qwkglobal.h @@ -0,0 +1,16 @@ +#ifndef QWKGLOBAL_H +#define QWKGLOBAL_H + +#include <QtCore/QEvent> + +#include <QWKCore/qwkcoreglobal.h> + +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) +using QT_NATIVE_EVENT_RESULT_TYPE = qintptr; +using QT_ENTER_EVENT_TYPE = QEnterEvent; +#else +using QT_NATIVE_EVENT_RESULT_TYPE = long; +using QT_ENTER_EVENT_TYPE = QEvent; +#endif + +#endif // QWKGLOBAL_H diff --git a/src/core/qwkglobal_p.h b/src/core/qwkglobal_p.h new file mode 100644 index 0000000..1a1f626 --- /dev/null +++ b/src/core/qwkglobal_p.h @@ -0,0 +1,18 @@ +#ifndef QWKGLOBAL_P_H +#define QWKGLOBAL_P_H + +#include <QtCore/QLoggingCategory> + +#include <QWKCore/qwkcoreglobal.h> + +QWK_CORE_EXPORT Q_DECLARE_LOGGING_CATEGORY(qWindowKitLog) + +#define QWK_INFO qCInfo(qWindowKitLog) +#define QWK_DEBUG qCDebug(qWindowKitLog) +#define QWK_WARNING qCWarning(qWindowKitLog) +#define QWK_CRITICAL qCCritical(qWindowKitLog) +#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0) +# define QWK_FATAL qCFatal(qWindowKitLog) +#endif + +#endif // QWKGLOBAL_P_H diff --git a/src/core/windowagentbase.cpp b/src/core/windowagentbase.cpp new file mode 100644 index 0000000..94d1fca --- /dev/null +++ b/src/core/windowagentbase.cpp @@ -0,0 +1,86 @@ +#include "windowagentbase.h" +#include "windowagentbase_p.h" + +#include "qwkglobal_p.h" + +#ifdef Q_OS_WINDOWS +# include "win32windowcontext_p.h" +#else +# include "qtwindowcontext_p.h" +#endif + +Q_LOGGING_CATEGORY(qWindowKitLog, "qwindowkit") + +namespace QWK { + + WindowAgentBasePrivate::WindowAgentBasePrivate() : q_ptr(nullptr), context(nullptr) { + } + + WindowAgentBasePrivate::~WindowAgentBasePrivate() = default; + + void WindowAgentBasePrivate::init() { + } + + AbstractWindowContext *WindowAgentBasePrivate::createContext() const { + return +#ifdef Q_OS_WINDOWS + new Win32WindowContext() +#else + new QtWindowContext() +#endif + ; + } + + + bool WindowAgentBasePrivate::setup(QObject *host, WindowItemDelegate *delegate) { + std::unique_ptr<AbstractWindowContext> ctx(createContext()); + if (!ctx->setup(host, delegate)) { + return false; + } + context = std::move(ctx); + return true; + } + + WindowAgentBase::~WindowAgentBase() = default; + + void WindowAgentBase::showSystemMenu(const QPoint &pos) { + Q_D(WindowAgentBase); + d->context->showSystemMenu(pos); + } + + void WindowAgentBase::startSystemMove(const QPoint &pos) { + Q_D(WindowAgentBase); + auto win = d->context->window(); + if (!win) { + return; + } + + Q_UNUSED(pos) + win->startSystemMove(); + } + + void WindowAgentBase::startSystemResize(Qt::Edges edges, const QPoint &pos) { + Q_D(WindowAgentBase); + auto win = d->context->window(); + if (!win) { + return; + } + + Q_UNUSED(pos) + win->startSystemResize(edges); + } + + void WindowAgentBase::centralize() { + } + + void WindowAgentBase::raise() { + } + + WindowAgentBase::WindowAgentBase(WindowAgentBasePrivate &d, QObject *parent) + : QObject(parent), d_ptr(&d) { + d.q_ptr = this; + + d.init(); + } + +} diff --git a/src/core/corewindowagent.h b/src/core/windowagentbase.h similarity index 62% rename from src/core/corewindowagent.h rename to src/core/windowagentbase.h index 1681acc..1f5e50a 100644 --- a/src/core/corewindowagent.h +++ b/src/core/windowagentbase.h @@ -1,5 +1,5 @@ -#ifndef COREWINDOWAGENT_H -#define COREWINDOWAGENT_H +#ifndef WINDOWAGENTBASE_H +#define WINDOWAGENTBASE_H #include <memory> @@ -9,13 +9,13 @@ namespace QWK { - class CoreWindowAgentPrivate; + class WindowAgentBasePrivate; - class QWK_CORE_EXPORT CoreWindowAgent : public QObject { + class QWK_CORE_EXPORT WindowAgentBase : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(CoreWindowAgent) + Q_DECLARE_PRIVATE(WindowAgentBase) public: - ~CoreWindowAgent() override; + ~WindowAgentBase() override; enum SystemButton { Unknown, @@ -36,11 +36,11 @@ void raise(); protected: - explicit CoreWindowAgent(CoreWindowAgentPrivate &d, QObject *parent = nullptr); + explicit WindowAgentBase(WindowAgentBasePrivate &d, QObject *parent = nullptr); - const std::unique_ptr<CoreWindowAgentPrivate> d_ptr; + const std::unique_ptr<WindowAgentBasePrivate> d_ptr; }; } -#endif // COREWINDOWAGENT_H \ No newline at end of file +#endif // WINDOWAGENTBASE_H \ No newline at end of file diff --git a/src/core/windowagentbase_p.h b/src/core/windowagentbase_p.h new file mode 100644 index 0000000..0fffb9c --- /dev/null +++ b/src/core/windowagentbase_p.h @@ -0,0 +1,30 @@ +#ifndef WINDOWAGENTBASEPRIVATE_H +#define WINDOWAGENTBASEPRIVATE_H + +#include <QWKCore/windowagentbase.h> +#include <QWKCore/private/abstractwindowcontext_p.h> + +namespace QWK { + + class QWK_CORE_EXPORT WindowAgentBasePrivate { + Q_DECLARE_PUBLIC(WindowAgentBase) + public: + WindowAgentBasePrivate(); + virtual ~WindowAgentBasePrivate(); + + void init(); + + WindowAgentBase *q_ptr; // no need to initialize + + virtual AbstractWindowContext *createContext() const; + + bool setup(QObject *host, WindowItemDelegate *delegate); + + std::unique_ptr<AbstractWindowContext> context; + + Q_DISABLE_COPY_MOVE(WindowAgentBasePrivate) + }; + +} + +#endif // WINDOWAGENTBASEPRIVATE_H \ No newline at end of file diff --git a/src/core/windowitemdelegate.cpp b/src/core/windowitemdelegate.cpp index 1539b3f..a460add 100644 --- a/src/core/windowitemdelegate.cpp +++ b/src/core/windowitemdelegate.cpp @@ -1,4 +1,4 @@ -#include "windowitemdelegate.h" +#include "windowitemdelegate_p.h" namespace QWK { diff --git a/src/core/windowitemdelegate.h b/src/core/windowitemdelegate_p.h similarity index 86% rename from src/core/windowitemdelegate.h rename to src/core/windowitemdelegate_p.h index 58dba1d..ee47067 100644 --- a/src/core/windowitemdelegate.h +++ b/src/core/windowitemdelegate_p.h @@ -1,11 +1,11 @@ -#ifndef WINDOWITEMDELEGATE_H -#define WINDOWITEMDELEGATE_H +#ifndef WINDOWITEMDELEGATE_P_H +#define WINDOWITEMDELEGATE_P_H #include <QtCore/QObject> #include <QtCore/QPoint> #include <QtGui/QWindow> -#include <QWKCore/corewindowagent.h> +#include <QWKCore/qwkcoreglobal.h> namespace QWK { @@ -34,4 +34,4 @@ } -#endif // WINDOWITEMDELEGATE_H +#endif // WINDOWITEMDELEGATE_P_H diff --git a/src/quick/CMakeLists.txt b/src/quick/CMakeLists.txt index 5d00ff2..0591a42 100644 --- a/src/quick/CMakeLists.txt +++ b/src/quick/CMakeLists.txt @@ -10,8 +10,6 @@ quickwindowagent.h quickwindowagent_p.h quickwindowagent.cpp - contexts/quickwindowcontext_p.h - contexts/quickwindowcontext.cpp ) qwk_add_library(${PROJECT_NAME} AUTOGEN diff --git a/src/quick/contexts/quickwindowcontext.cpp b/src/quick/contexts/quickwindowcontext.cpp deleted file mode 100644 index 4014ef1..0000000 --- a/src/quick/contexts/quickwindowcontext.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "quickwindowcontext_p.h" - -namespace QWK { - - bool QuickWindowContext::hostEventFilter(QEvent *event) { - return false; - } - -} \ No newline at end of file diff --git a/src/quick/contexts/quickwindowcontext_p.h b/src/quick/contexts/quickwindowcontext_p.h deleted file mode 100644 index 9479f3d..0000000 --- a/src/quick/contexts/quickwindowcontext_p.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef QUICKWINDOWCONTEXT_P_H -#define QUICKWINDOWCONTEXT_P_H - -#include <QtGlobal> - -#ifdef Q_OS_WINDOWS -# include <QWKCore/private/win32windowcontext_p.h> -#else -# include <QWKCore/private/qtwindowcontext_p.h> -#endif - -namespace QWK { - - using CoreWindowContext = -#ifdef Q_OS_WINDOWS - Win32WindowContext -#else - QtWindowContext -#endif - ; - - class QuickWindowContext : public CoreWindowContext { - Q_OBJECT - public: - QuickWindowContext() = default; - ~QuickWindowContext() override = default; - - protected: - bool hostEventFilter(QEvent *event) override; - }; - -} - -#endif // QUICKWINDOWCONTEXT_P_H diff --git a/src/quick/quickitemdelegate_p.h b/src/quick/quickitemdelegate_p.h index a63aa71..482d25f 100644 --- a/src/quick/quickitemdelegate_p.h +++ b/src/quick/quickitemdelegate_p.h @@ -4,7 +4,7 @@ #include <QtCore/QObject> #include <QtGui/QWindow> -#include <QWKCore/windowitemdelegate.h> +#include <QWKCore/private/windowitemdelegate_p.h> #include <QWKQuick/qwkquickglobal.h> namespace QWK { diff --git a/src/quick/quickwindowagent.cpp b/src/quick/quickwindowagent.cpp index be70ca6..7fc72f5 100644 --- a/src/quick/quickwindowagent.cpp +++ b/src/quick/quickwindowagent.cpp @@ -4,7 +4,6 @@ #include <QtQuick/QQuickWindow> #include "quickitemdelegate_p.h" -#include "quickwindowcontext_p.h" namespace QWK { @@ -15,10 +14,6 @@ } void QuickWindowAgentPrivate::init() { - } - - AbstractWindowContext *QuickWindowAgentPrivate::createContext() const { - return new QuickWindowContext(); } QuickWindowAgent::QuickWindowAgent(QObject *parent) @@ -88,7 +83,7 @@ } QuickWindowAgent::QuickWindowAgent(QuickWindowAgentPrivate &d, QObject *parent) - : CoreWindowAgent(d, parent) { + : WindowAgentBase(d, parent) { d.init(); } } diff --git a/src/quick/quickwindowagent.h b/src/quick/quickwindowagent.h index 53e8652..714ffcf 100644 --- a/src/quick/quickwindowagent.h +++ b/src/quick/quickwindowagent.h @@ -4,14 +4,14 @@ #include <QtQuick/QQuickItem> #include <QtQuick/QQuickWindow> -#include <QWKCore/corewindowagent.h> +#include <QWKCore/windowagentbase.h> #include <QWKQuick/qwkquickglobal.h> namespace QWK { class QuickWindowAgentPrivate; - class QWK_QUICK_EXPORT QuickWindowAgent : public CoreWindowAgent { + class QWK_QUICK_EXPORT QuickWindowAgent : public WindowAgentBase { Q_OBJECT Q_DECLARE_PRIVATE(QuickWindowAgent) public: diff --git a/src/quick/quickwindowagent_p.h b/src/quick/quickwindowagent_p.h index d1e7eb4..243f534 100644 --- a/src/quick/quickwindowagent_p.h +++ b/src/quick/quickwindowagent_p.h @@ -1,20 +1,18 @@ #ifndef QUICKWINDOWAGENTPRIVATE_H #define QUICKWINDOWAGENTPRIVATE_H -#include <QWKCore/private/corewindowagent_p.h> +#include <QWKCore/private/windowagentbase_p.h> #include <QWKQuick/quickwindowagent.h> namespace QWK { - class QuickWindowAgentPrivate : public CoreWindowAgentPrivate { + class QuickWindowAgentPrivate : public WindowAgentBasePrivate { Q_DECLARE_PUBLIC(QuickWindowAgent) public: QuickWindowAgentPrivate(); ~QuickWindowAgentPrivate() override; void init(); - - AbstractWindowContext * createContext() const override; // Host QQuickWindow *hostWindow{}; diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index 91119c8..4153460 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -10,8 +10,6 @@ widgetwindowagent.h widgetwindowagent_p.h widgetwindowagent.cpp - contexts/widgetwindowcontext_p.h - contexts/widgetwindowcontext.cpp ) qwk_add_library(${PROJECT_NAME} AUTOGEN diff --git a/src/widgets/contexts/widgetwindowcontext.cpp b/src/widgets/contexts/widgetwindowcontext.cpp deleted file mode 100644 index 3aa91f2..0000000 --- a/src/widgets/contexts/widgetwindowcontext.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "widgetwindowcontext_p.h" - -namespace QWK { - - bool WidgetWindowContext::hostEventFilter(QEvent *event) { - return false; - } - -} \ No newline at end of file diff --git a/src/widgets/contexts/widgetwindowcontext_p.h b/src/widgets/contexts/widgetwindowcontext_p.h deleted file mode 100644 index ce50acc..0000000 --- a/src/widgets/contexts/widgetwindowcontext_p.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef WIDGETWINDOWCONTEXT_P_H -#define WIDGETWINDOWCONTEXT_P_H - -#include <QtGlobal> - -#ifdef Q_OS_WINDOWS -# include <QWKCore/private/win32windowcontext_p.h> -#else -# include <QWKCore/private/qtwindowcontext_p.h> -#endif - -namespace QWK { - - using CoreWindowContext = -#ifdef Q_OS_WINDOWS - Win32WindowContext -#else - QtWindowContext -#endif - ; - - class WidgetWindowContext : public CoreWindowContext { - Q_OBJECT - public: - WidgetWindowContext() = default; - ~WidgetWindowContext() override = default; - - protected: - bool hostEventFilter(QEvent *event) override; - }; - -} - -#endif // WIDGETWINDOWCONTEXT_P_H diff --git a/src/widgets/widgetitemdelegate_p.h b/src/widgets/widgetitemdelegate_p.h index 1056f35..d04bfac 100644 --- a/src/widgets/widgetitemdelegate_p.h +++ b/src/widgets/widgetitemdelegate_p.h @@ -4,7 +4,7 @@ #include <QtCore/QObject> #include <QtGui/QWindow> -#include <QWKCore/windowitemdelegate.h> +#include <QWKCore/private/windowitemdelegate_p.h> #include <QWKWidgets/qwkwidgetsglobal.h> namespace QWK { diff --git a/src/widgets/widgetwindowagent.cpp b/src/widgets/widgetwindowagent.cpp index b183951..f7d016e 100644 --- a/src/widgets/widgetwindowagent.cpp +++ b/src/widgets/widgetwindowagent.cpp @@ -2,7 +2,6 @@ #include "widgetwindowagent_p.h" #include "widgetitemdelegate_p.h" -#include "widgetwindowcontext_p.h" namespace QWK { @@ -13,10 +12,6 @@ } void WidgetWindowAgentPrivate::init() { - } - - AbstractWindowContext *WidgetWindowAgentPrivate::createContext() const { - return new WidgetWindowContext(); } WidgetWindowAgent::WidgetWindowAgent(QObject *parent) @@ -89,7 +84,7 @@ } WidgetWindowAgent::WidgetWindowAgent(WidgetWindowAgentPrivate &d, QObject *parent) - : CoreWindowAgent(d, parent) { + : WindowAgentBase(d, parent) { d.init(); } } diff --git a/src/widgets/widgetwindowagent.h b/src/widgets/widgetwindowagent.h index cec5a88..d13d628 100644 --- a/src/widgets/widgetwindowagent.h +++ b/src/widgets/widgetwindowagent.h @@ -3,14 +3,14 @@ #include <QtWidgets/QWidget> -#include <QWKCore/corewindowagent.h> +#include <QWKCore/windowagentbase.h> #include <QWKWidgets/qwkwidgetsglobal.h> namespace QWK { class WidgetWindowAgentPrivate; - class QWK_WIDGETS_EXPORT WidgetWindowAgent : public CoreWindowAgent { + class QWK_WIDGETS_EXPORT WidgetWindowAgent : public WindowAgentBase { Q_OBJECT Q_DECLARE_PRIVATE(WidgetWindowAgent) public: diff --git a/src/widgets/widgetwindowagent_p.h b/src/widgets/widgetwindowagent_p.h index 3a4e682..d433064 100644 --- a/src/widgets/widgetwindowagent_p.h +++ b/src/widgets/widgetwindowagent_p.h @@ -1,20 +1,18 @@ #ifndef WIDGETWINDOWAGENTPRIVATE_H #define WIDGETWINDOWAGENTPRIVATE_H -#include <QWKCore/private/corewindowagent_p.h> +#include <QWKCore/private/windowagentbase_p.h> #include <QWKWidgets/widgetwindowagent.h> namespace QWK { - class WidgetWindowAgentPrivate : public CoreWindowAgentPrivate { + class WidgetWindowAgentPrivate : public WindowAgentBasePrivate { Q_DECLARE_PUBLIC(WidgetWindowAgent) public: WidgetWindowAgentPrivate(); ~WidgetWindowAgentPrivate(); void init(); - - AbstractWindowContext * createContext() const override; // Host QWidget *hostWidget{}; -- Gitblit v1.9.1