From 8ff37ff535318331f0179cdf0d2f6319cd7ae1c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 11 Jan 2012 08:31:00 +0100 Subject: Make show() default to sane sizing behaviour based on the platform. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Traditionally it's been hard to write a Qt app that behaves sanely across embedded and desktop platforms, i.e. defaults to fullscreen on embedded and non-fullscreen on desktop. For Qt 5 we can fix this by making the behaviour of the default QWindow::show() be customizable by the platform plugin. If the application developer wants to override this behaviour he can still use the explicit showFullScreen(), showNormal() etc functions. Change-Id: I26a907b404058e345d841c818daefbb57a26d3fd Reviewed-by: Friedemann Kleint Reviewed-by: Jørgen Lind Reviewed-by: Morten Johan Sørvig --- src/gui/kernel/qplatformintegration_qpa.cpp | 2 ++ src/gui/kernel/qplatformintegration_qpa.h | 3 ++- src/gui/kernel/qstylehints.cpp | 5 +++++ src/gui/kernel/qstylehints.h | 1 + src/gui/kernel/qwindow.cpp | 22 ++++++++++++++++++---- src/gui/kernel/qwindow.h | 4 ++-- 6 files changed, 30 insertions(+), 7 deletions(-) (limited to 'src/gui') diff --git a/src/gui/kernel/qplatformintegration_qpa.cpp b/src/gui/kernel/qplatformintegration_qpa.cpp index 35cb9a160d..b35af1e8b7 100644 --- a/src/gui/kernel/qplatformintegration_qpa.cpp +++ b/src/gui/kernel/qplatformintegration_qpa.cpp @@ -235,6 +235,8 @@ QVariant QPlatformIntegration::styleHint(StyleHint hint) const return 10; case StartDragTime: return 500; + case ShowIsFullScreen: + return false; } return 0; diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index f9a8a206a8..3975d82288 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -107,7 +107,8 @@ public: MouseDoubleClickInterval, StartDragDistance, StartDragTime, - KeyboardAutoRepeatRate + KeyboardAutoRepeatRate, + ShowIsFullScreen }; virtual QVariant styleHint(StyleHint hint) const; diff --git a/src/gui/kernel/qstylehints.cpp b/src/gui/kernel/qstylehints.cpp index 4218477aac..eb0f055270 100644 --- a/src/gui/kernel/qstylehints.cpp +++ b/src/gui/kernel/qstylehints.cpp @@ -86,4 +86,9 @@ int QStyleHints::cursorFlashTime() const return hint(QPlatformIntegration::CursorFlashTime).toInt(); } +bool QStyleHints::showIsFullScreen() const +{ + return hint(QPlatformIntegration::ShowIsFullScreen).toBool(); +} + QT_END_NAMESPACE diff --git a/src/gui/kernel/qstylehints.h b/src/gui/kernel/qstylehints.h index d4e0415ba4..6fa72110fb 100644 --- a/src/gui/kernel/qstylehints.h +++ b/src/gui/kernel/qstylehints.h @@ -62,6 +62,7 @@ public: int keyboardInputInterval() const; int keyboardAutoRepeatRate() const; int cursorFlashTime() const; + bool showIsFullScreen() const; private: friend class QGuiApplication; QStyleHints(); diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index 2e724e1b3c..0d08316945 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -54,6 +54,8 @@ #include +#include + QT_BEGIN_NAMESPACE /*! @@ -741,30 +743,42 @@ QObject *QWindow::focusObject() const return const_cast(this); } +void QWindow::show() +{ + if (qApp->styleHints()->showIsFullScreen()) + showFullScreen(); + else + showNormal(); +} + +void QWindow::hide() +{ + setVisible(false); +} void QWindow::showMinimized() { setWindowState(Qt::WindowMinimized); - show(); + setVisible(true); } void QWindow::showMaximized() { setWindowState(Qt::WindowMaximized); - show(); + setVisible(true); } void QWindow::showFullScreen() { setWindowState(Qt::WindowFullScreen); - show(); + setVisible(true); requestActivateWindow(); } void QWindow::showNormal() { setWindowState(Qt::WindowNoState); - show(); + setVisible(true); } bool QWindow::close() diff --git a/src/gui/kernel/qwindow.h b/src/gui/kernel/qwindow.h index 6f9e4855b1..4d161658c6 100644 --- a/src/gui/kernel/qwindow.h +++ b/src/gui/kernel/qwindow.h @@ -209,8 +209,8 @@ public: public Q_SLOTS: void setVisible(bool visible); - inline void show() { setVisible(true); } - inline void hide() { setVisible(false); } + void show(); + void hide(); void showMinimized(); void showMaximized(); -- cgit v1.2.3