diff --git a/framelessquickhelper.cpp b/framelessquickhelper.cpp index cc101c8..9927427 100644 --- a/framelessquickhelper.cpp +++ b/framelessquickhelper.cpp @@ -28,6 +28,7 @@ #include "winnativeeventfilter.h" #endif #include +#include #ifdef Q_OS_WINDOWS namespace { @@ -309,7 +310,40 @@ void FramelessQuickHelper::removeWindowFrame(const bool center) { } } -void FramelessQuickHelper::moveWindowToDesktopCenter() { +QSize FramelessQuickHelper::desktopSize() const { + const auto win = window(); + if (win) { + const auto screen = win->screen(); + if (screen) { + return screen->size(); + } + } + return {}; +} + +QRect FramelessQuickHelper::desktopAvailableGeometry() const { + const auto win = window(); + if (win) { + const auto screen = win->screen(); + if (screen) { + return screen->availableGeometry(); + } + } + return {}; +} + +QSize FramelessQuickHelper::desktopAvailableSize() const { + const auto win = window(); + if (win) { + const auto screen = win->screen(); + if (screen) { + return screen->availableSize(); + } + } + return {}; +} + +void FramelessQuickHelper::moveWindowToDesktopCenter(const bool realCenter) { const auto win = window(); if (win) { #ifdef Q_OS_WINDOWS @@ -320,6 +354,11 @@ void FramelessQuickHelper::moveWindowToDesktopCenter() { #else FramelessHelper::moveWindowToDesktopCenter(win); #endif + if (!realCenter) { + const auto dag = desktopAvailableGeometry(); + win->setX(win->x() + dag.x()); + win->setY(win->y() + dag.y()); + } } } diff --git a/framelessquickhelper.h b/framelessquickhelper.h index 6440d28..1ae9338 100644 --- a/framelessquickhelper.h +++ b/framelessquickhelper.h @@ -91,7 +91,10 @@ public: public Q_SLOTS: void removeWindowFrame(const bool center = true); - void moveWindowToDesktopCenter(); + void moveWindowToDesktopCenter(const bool realCenter = true); + QSize desktopSize() const; + QRect desktopAvailableGeometry() const; + QSize desktopAvailableSize() const; void setIgnoreAreas(const QVector &val); void clearIgnoreAreas();