From fc77bd3ee96cc74464f0d0f3ae0e2d368bb9cfbc Mon Sep 17 00:00:00 2001 From: John Thacker Date: Thu, 4 Apr 2024 09:33:14 -0400 Subject: [PATCH] Qt: Enable min/max button on GeometryStateDialogs by default GeometryStateDialog is used when we want to remember user-set geometry for a window. If we want the user to be able to control the geometry, we probably want to allow minimization and maximization. Pass Qt::Window as the default WindowFlag to GeometryStateDialog (which is what WiresharkDialogs already do). This on most platforms defaults to adding minimize and maximize buttons. (On some platforms, like recent GNOME, we're at the mercy of various settings like gsettings get org.gnome.desktop.wm.preferences button-layout but the user can access minimize and maximize actions via right-clicking the window title bar. Unfortunately it won't stop user confusion.) Fix #18980. Part of #12566. --- ui/qt/geometry_state_dialog.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/ui/qt/geometry_state_dialog.h b/ui/qt/geometry_state_dialog.h index b5baf3220c..d49e7e810c 100644 --- a/ui/qt/geometry_state_dialog.h +++ b/ui/qt/geometry_state_dialog.h @@ -45,14 +45,23 @@ public: // // Additionally, maximized, parent-less dialogs can close to a black screen // on macOS: https://gitlab.com/wireshark/wireshark/-/issues/12544 +// (aka https://bugreports.qt.io/browse/QTBUG-46701 ), which claims to +// be fixed in Qt 6.2.0 // // Pass in the parent on macOS and NULL elsewhere so that we have an // independent window that un-maximizes correctly. +// +// Pass Qt::Window as the flags that we have minimize and maximize buttons, as +// this class is for dialogs where we want to remember user-set geometry. +// (We're still at the mercy of the platform and Qt, e.g. recent GNOME defaults +// to not having min or max buttons, instead requiring right-clicking on the +// menu title bar to perform the minimize or maximize actions. We can't do +// anything about that, though users can.) #ifdef Q_OS_MAC - explicit GeometryStateDialog(QWidget *parent, Qt::WindowFlags f = Qt::WindowFlags()) : QDialog(parent, f) {} + explicit GeometryStateDialog(QWidget *parent, Qt::WindowFlags f = Qt::Window) : QDialog(parent, f) {} #else - explicit GeometryStateDialog(QWidget *, Qt::WindowFlags f = Qt::WindowFlags()) : QDialog(NULL, f) {} + explicit GeometryStateDialog(QWidget *, Qt::WindowFlags f = Qt::Window) : QDialog(NULL, f) {} #endif ~GeometryStateDialog();