Make Window::changeMaximize() take MaximizeMode

remotes/origin/work/adrien/hightresolutionrebased
Vlad Zahorodnii 4 years ago
parent b044a7d5ff
commit 40a4cd13a4
  1. 33
      src/window.cpp
  2. 2
      src/window.h
  3. 21
      src/x11window.cpp
  4. 2
      src/x11window.h
  5. 10
      src/xdgshellwindow.cpp
  6. 2
      src/xdgshellwindow.h

@ -1581,23 +1581,28 @@ void Window::blockGeometryUpdates(bool block)
}
void Window::maximize(MaximizeMode m)
{
setMaximize(m & MaximizeVertical, m & MaximizeHorizontal);
}
void Window::setMaximize(bool vertically, bool horizontally)
{
const MaximizeMode oldMode = requestedMaximizeMode();
changeMaximize(
oldMode & MaximizeHorizontal ? !horizontally : horizontally,
oldMode & MaximizeVertical ? !vertically : vertically);
changeMaximize(m);
const MaximizeMode newMode = maximizeMode();
if (oldMode != newMode) {
Q_EMIT clientMaximizedStateChanged(this, newMode);
Q_EMIT clientMaximizedStateChanged(this, horizontally, vertically);
Q_EMIT clientMaximizedStateChanged(this, newMode & MaximizeHorizontal, newMode & MaximizeVertical);
}
}
void Window::setMaximize(bool vertically, bool horizontally)
{
MaximizeMode mode = MaximizeRestore;
if (vertically) {
mode = MaximizeMode(mode | MaximizeVertical);
}
if (horizontally) {
mode = MaximizeMode(mode | MaximizeHorizontal);
}
maximize(mode);
}
bool Window::startInteractiveMoveResize()
{
Q_ASSERT(!isInteractiveMoveResize());
@ -4333,15 +4338,9 @@ void Window::setGeometryRestore(const QRectF &rect)
m_maximizeGeometryRestore = rect;
}
/**
* Toggles the maximized state along specified dimensions @p horizontal and @p vertical.
*
* Default implementation does nothing.
*/
void Window::changeMaximize(bool horizontal, bool vertical)
void Window::changeMaximize(MaximizeMode mode)
{
Q_UNUSED(horizontal)
Q_UNUSED(vertical)
Q_UNUSED(mode)
qCWarning(KWIN_CORE, "%s doesn't support setting maximized state", metaObject()->className());
}

@ -1721,7 +1721,7 @@ protected:
int borderRight() const;
int borderTop() const;
int borderBottom() const;
virtual void changeMaximize(bool horizontal, bool vertical);
virtual void changeMaximize(MaximizeMode mode);
void setGeometryRestore(const QRectF &rect);
void blockGeometryUpdates(bool block);

@ -4265,7 +4265,7 @@ void X11Window::updateServerGeometry()
}
static bool changeMaximizeRecursion = false;
void X11Window::changeMaximize(bool horizontal, bool vertical)
void X11Window::changeMaximize(MaximizeMode mode)
{
if (changeMaximizeRecursion) {
return;
@ -4286,13 +4286,6 @@ void X11Window::changeMaximize(bool horizontal, bool vertical)
}
MaximizeMode old_mode = max_mode;
MaximizeMode mode = max_mode;
if (vertical) {
mode = MaximizeMode(mode ^ MaximizeVertical);
}
if (horizontal) {
mode = MaximizeMode(mode ^ MaximizeHorizontal);
}
// if the client insist on a fix aspect ratio, we check whether the maximizing will get us
// out of screen bounds and take that as a "full maximization with aspect check" then
@ -4323,16 +4316,16 @@ void X11Window::changeMaximize(bool horizontal, bool vertical)
GeometryUpdatesBlocker blocker(this);
Q_EMIT clientMaximizedStateAboutToChange(this, mode);
max_mode = mode;
// maximing one way and unmaximizing the other way shouldn't happen,
// so restore first and then maximize the other way
if ((old_mode == MaximizeVertical && max_mode == MaximizeHorizontal)
|| (old_mode == MaximizeHorizontal && max_mode == MaximizeVertical)) {
changeMaximize(false, false); // restore
if ((old_mode == MaximizeVertical && mode == MaximizeHorizontal)
|| (old_mode == MaximizeHorizontal && mode == MaximizeVertical)) {
changeMaximize(MaximizeRestore); // restore
}
Q_EMIT clientMaximizedStateAboutToChange(this, mode);
max_mode = mode;
// save sizes for restoring, if maximalizing
QSizeF sz;
if (isShade()) {

@ -392,7 +392,7 @@ private:
bool isManaged() const; ///< Returns false if this client is not yet managed
void updateAllowedActions(bool force = false);
QRect fullscreenMonitorsArea(NETFullscreenMonitors topology) const;
void changeMaximize(bool horizontal, bool vertical) override;
void changeMaximize(MaximizeMode mode) override;
void getWmNormalHints();
void getMotifHints();
void getIcons();

@ -1642,7 +1642,7 @@ void XdgToplevelWindow::setFullScreen(bool set, bool user)
* \todo Move to Window.
*/
static bool changeMaximizeRecursion = false;
void XdgToplevelWindow::changeMaximize(bool horizontal, bool vertical)
void XdgToplevelWindow::changeMaximize(MaximizeMode mode)
{
if (changeMaximizeRecursion) {
return;
@ -1657,14 +1657,6 @@ void XdgToplevelWindow::changeMaximize(bool horizontal, bool vertical)
const MaximizeMode oldMode = m_requestedMaximizeMode;
const QRectF oldGeometry = moveResizeGeometry();
MaximizeMode mode = m_requestedMaximizeMode;
if (vertical) {
mode = MaximizeMode(mode ^ MaximizeVertical);
}
if (horizontal) {
mode = MaximizeMode(mode ^ MaximizeHorizontal);
}
mode = rules()->checkMaximize(mode);
if (m_requestedMaximizeMode == mode) {
return;

@ -180,7 +180,7 @@ protected:
bool doStartInteractiveMoveResize() override;
void doFinishInteractiveMoveResize() override;
bool acceptsFocus() const override;
void changeMaximize(bool horizontal, bool vertical) override;
void changeMaximize(MaximizeMode mode) override;
Layer layerForDock() const override;
void doSetQuickTileMode() override;

Loading…
Cancel
Save