This commit is contained in:
Jan Grulich 2021-06-02 14:47:18 +02:00
parent c3336ee9f4
commit d645f743df
5 changed files with 64 additions and 111 deletions

1
.gitignore vendored
View File

@ -9,3 +9,4 @@
/QGnomePlatform-0.6.90.tar.gz
/QGnomePlatform-0.7.0.tar.gz
/QGnomePlatform-0.7.1.tar.gz
/QGnomePlatform-0.8.0.tar.gz

View File

@ -1,97 +0,0 @@
From 0a9e409563e8fa8caee04b60922de5283c0e08a1 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com>
Date: Mon, 22 Feb 2021 11:48:02 +0100
Subject: Improve double-click to maximize reliability
diff --git a/decoration/qgnomeplatformdecoration.cpp b/decoration/qgnomeplatformdecoration.cpp
index c8b381c..a979ab7 100644
--- a/decoration/qgnomeplatformdecoration.cpp
+++ b/decoration/qgnomeplatformdecoration.cpp
@@ -360,6 +360,24 @@ bool QGnomePlatformDecoration::clickButton(Qt::MouseButtons b, Button btn)
return false;
}
+bool QGnomePlatformDecoration::doubleClickButton(Qt::MouseButtons b, const QPointF &local, const QDateTime &currentTime)
+{
+ if (b & Qt::LeftButton) {
+ const qint64 clickInterval = m_lastButtonClick.msecsTo(currentTime);
+ m_lastButtonClick = currentTime;
+ const int doubleClickDistance = m_hints->hint(QPlatformTheme::MouseDoubleClickDistance).toInt();
+ const QPointF posDiff = m_lastButtonClickPosition - local;
+ if ((clickInterval <= m_hints->hint(QPlatformTheme::MouseDoubleClickInterval).toInt()) &&
+ ((posDiff.x() <= doubleClickDistance && posDiff.x() >= -doubleClickDistance) && ((posDiff.y() <= doubleClickDistance && posDiff.y() >= -doubleClickDistance)))) {
+ return true;
+ }
+
+ m_lastButtonClickPosition = local;
+ }
+
+ return false;
+}
+
bool QGnomePlatformDecoration::handleMouse(QWaylandInputDevice *inputDevice, const QPointF &local, const QPointF &global, Qt::MouseButtons b, Qt::KeyboardModifiers mods)
{
Q_UNUSED(global);
@@ -459,31 +477,26 @@ void QGnomePlatformDecoration::processMouseTop(QWaylandInputDevice *inputDevice,
processMouseRight(inputDevice, local, b, mods);
} else if (closeButtonRect().contains(local)) {
updateButtonHoverState(Button::Close);
- if (clickButton(b, Close))
+ if (clickButton(b, Close)) {
QWindowSystemInterface::handleCloseEvent(window());
+ }
} else if (m_hints->titlebarButtons().testFlag(GnomeHintsSettings::MaximizeButton) && maximizeButtonRect().contains(local)) {
updateButtonHoverState(Button::Maximize);
- if (clickButton(b, Maximize))
+ if (clickButton(b, Maximize)) {
window()->setWindowStates(window()->windowStates() ^ Qt::WindowMaximized);
+ }
} else if (m_hints->titlebarButtons().testFlag(GnomeHintsSettings::MinimizeButton) && minimizeButtonRect().contains(local)) {
updateButtonHoverState(Button::Minimize);
- if (clickButton(b, Minimize))
+ if (clickButton(b, Minimize)) {
window()->setWindowState(Qt::WindowMinimized);
+ }
+ } else if (doubleClickButton(b, local, currentDateTime)) {
+ window()->setWindowStates(window()->windowStates() ^ Qt::WindowMaximized);
} else {
- if (clickButton(b, Maximize)) {
- const int doubleClickDistance = m_hints->hint(QPlatformTheme::MouseDoubleClickDistance).toInt();
- QPointF posDiff = m_lastButtonClickPosition - local;
- if ((m_lastButtonClick.msecsTo(currentDateTime) <= m_hints->hint(QPlatformTheme::MouseDoubleClickInterval).toInt()) &&
- ((posDiff.x() <= doubleClickDistance && posDiff.x() >= -doubleClickDistance) && ((posDiff.y() <= doubleClickDistance && posDiff.y() >= -doubleClickDistance))))
- window()->setWindowStates(window()->windowStates() ^ Qt::WindowMaximized);
- m_lastButtonClick = currentDateTime;
- m_lastButtonClickPosition = local;
- } else {
#if QT_CONFIG(cursor)
- waylandWindow()->restoreMouseCursor(inputDevice);
+ waylandWindow()->restoreMouseCursor(inputDevice);
#endif
- startMove(inputDevice,b);
- }
+ startMove(inputDevice,b);
}
}
diff --git a/decoration/qgnomeplatformdecoration.h b/decoration/qgnomeplatformdecoration.h
index c656b55..c8c793e 100644
--- a/decoration/qgnomeplatformdecoration.h
+++ b/decoration/qgnomeplatformdecoration.h
@@ -60,6 +60,7 @@ private:
void processMouseLeft(QWaylandInputDevice *inputDevice, const QPointF &local, Qt::MouseButtons b,Qt::KeyboardModifiers mods);
void processMouseRight(QWaylandInputDevice *inputDevice, const QPointF &local, Qt::MouseButtons b,Qt::KeyboardModifiers mods);
bool clickButton(Qt::MouseButtons b, Button btn);
+ bool doubleClickButton(Qt::MouseButtons b, const QPointF &local, const QDateTime &currentTime);
bool updateButtonHoverState(Button hoveredButton);
QRectF closeButtonRect() const;
@@ -84,6 +85,7 @@ private:
// For double-click support
QDateTime m_lastButtonClick;
QPointF m_lastButtonClickPosition;
+ Button m_doubleClicking = None;
QStaticText m_windowTitle;
Button m_clicking = None;

View File

@ -0,0 +1,49 @@
diff --git a/src/decoration/qgnomeplatformdecoration.cpp b/src/decoration/qgnomeplatformdecoration.cpp
index 1129b4f..be4ac21 100644
--- a/src/decoration/qgnomeplatformdecoration.cpp
+++ b/src/decoration/qgnomeplatformdecoration.cpp
@@ -178,7 +178,7 @@ QMargins QGnomePlatformDecoration::margins(MarginsType marginsType) const
#else
QMargins QGnomePlatformDecoration::margins() const
{
- if ((window()->windowStates() & Qt::WindowMaximized)) {
+ if ((waylandWindow()->windowStates() & Qt::WindowMaximized)) {
return QMargins(0, TITLEBAR_HEIGHT, 0, 0);
}
@@ -371,7 +371,7 @@ void QGnomePlatformDecoration::paint(QPaintDevice *device)
// * *
// ********************************
QPainterPath borderRect;
- if (!(window()->windowStates() & Qt::WindowMaximized)) {
+ if (!(waylandWindow()->windowStates() & Qt::WindowMaximized)) {
borderRect.addRoundedRect(0, 0, surfaceRect.width(), margins().top() + 8, 10, 10);
p.fillPath(borderRect.simplified(), borderColor);
}
@@ -389,7 +389,7 @@ void QGnomePlatformDecoration::paint(QPaintDevice *device)
// * *
// ********************************
QPainterPath roundedRect;
- if ((window()->windowStates() & Qt::WindowMaximized)) {
+ if ((waylandWindow()->windowStates() & Qt::WindowMaximized)) {
roundedRect.addRect(0, 0, surfaceRect.width(), margins().top() + 8);
} else {
roundedRect.addRoundedRect(WINDOW_BORDER_WIDTH, WINDOW_BORDER_WIDTH, surfaceRect.width() - margins().left() - margins().right(), margins().top() + 8, 8, 8);
@@ -412,7 +412,7 @@ void QGnomePlatformDecoration::paint(QPaintDevice *device)
// *| |*
// *------------------------------*
// ********************************
- if (!(window()->windowStates() & Qt::WindowMaximized)) {
+ if (!(waylandWindow()->windowStates() & Qt::WindowMaximized)) {
QPainterPath borderPath;
// Left
borderPath.addRect(0, margins().top(), margins().left(), surfaceRect.height() - margins().top() - WINDOW_BORDER_WIDTH);
@@ -522,7 +522,7 @@ void QGnomePlatformDecoration::paint(QPaintDevice *device)
Adwaita::Renderer::renderFlatRoundedButtonFrame(styleOptions);
}
decorationButtonStyle.setRect(QRect(static_cast<int>(rect.x()) + (BUTTON_WIDTH / 4), static_cast<int>(rect.y()) + (BUTTON_WIDTH / 4), BUTTON_WIDTH / 2, BUTTON_WIDTH / 2));
- const Adwaita::ButtonType buttonType = (window()->windowStates() & Qt::WindowMaximized) ? Adwaita::ButtonType::ButtonRestore : Adwaita::ButtonType::ButtonMaximize;
+ const Adwaita::ButtonType buttonType = (waylandWindow()->windowStates() & Qt::WindowMaximized) ? Adwaita::ButtonType::ButtonRestore : Adwaita::ButtonType::ButtonMaximize;
Adwaita::Renderer::renderDecorationButton(decorationButtonStyle, buttonType);
}

View File

@ -1,7 +1,7 @@
Name: qgnomeplatform
Version: 0.7.1
Release: 2%{?dist}
Version: 0.8.0
Release: 1%{?dist}
Summary: Qt Platform Theme aimed to accommodate Gnome settings
License: LGPLv2+
@ -9,7 +9,7 @@ URL: https://github.com/MartinBriza/QGnomePlatform
Source0: https://github.com/MartinBriza/QGnomePlatform/archive/%{version}/QGnomePlatform-%{version}.tar.gz
# Upstream patches
Patch0: qgnomeplatform-double-click-improvements.patch
Patch0: qgnomeplatform-use-more-updated-window-states-value.patch
BuildRequires: make
BuildRequires: pkgconfig(gio-2.0)
@ -22,7 +22,7 @@ BuildRequires: qt5-qtbase-devel >= 5.12.0
BuildRequires: qt5-qtbase-static >= 5.12.0
BuildRequires: qt5-qtwayland-devel >= 5.12.0
BuildRequires: libadwaita-qt5-devel >= 1.1.90
BuildRequires: libadwaita-qt5-devel >= 1.3.1
Requires: adwaita-qt5%{?_isa}
BuildRequires: qt5-qtbase-private-devel
@ -37,26 +37,26 @@ modifying them - making them fit into the environment as well as possible.
%prep
%autosetup -p1 -n QGnomePlatform-%{version}
%build
mkdir %{_target_platform}
pushd %{_target_platform}
%{qmake_qt5} ..
popd
%make_build -C %{_target_platform}
%cmake
%cmake_build
%install
make install INSTALL_ROOT=%{buildroot} -C %{_target_platform}
%cmake_install
%files
%doc README.md
%license LICENSE
%{_qt5_libdir}/qt5/plugins/platformthemes/libqgnomeplatform.so
%{_qt5_libdir}/libqgnomeplatform.so
%{_qt5_libdir}/qt5/plugins/platformthemes/libqgnomeplatformtheme.so
%{_qt5_libdir}/qt5/plugins/wayland-decoration-client/libqgnomeplatformdecoration.so
%changelog
* Wed Jun 02 2021 Jan Grulich <jgrulich@redhat.com> - 0.8.0-1
- 0.8.0
* Mon Apr 12 2021 Jan Grulich <jgrulich@redhat.com> - 0.7.1-2
- Improve double-click on titlebar to maximize/unmaximize reliability

View File

@ -1 +1 @@
SHA512 (QGnomePlatform-0.7.1.tar.gz) = 7e3ba774ee1387604f4c66bd75f9fb4c5305f4553886132e8e3991a3e42564844a7eafb1361e0e8c64743746e315c07b22c11c133be95c1c53afb62c062bfc6e
SHA512 (QGnomePlatform-0.8.0.tar.gz) = e862b84024ad77976b52cbacf1f920acaa60d2bfcb8f261f1215f2e5fb2dbe6d99e10aa425be70fa2dd324ac4d8c5b85958d68fae4fb7f9728caf097aa1bd102