Make show() default to sane sizing behaviour based on the platform.

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 <Friedemann.Kleint@nokia.com>
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
bb10
Samuel Rødal 2012-01-11 08:31:00 +01:00 committed by Qt by Nokia
parent bffbcfd0cc
commit 8ff37ff535
8 changed files with 40 additions and 7 deletions

View File

@ -235,6 +235,8 @@ QVariant QPlatformIntegration::styleHint(StyleHint hint) const
return 10;
case StartDragTime:
return 500;
case ShowIsFullScreen:
return false;
}
return 0;

View File

@ -107,7 +107,8 @@ public:
MouseDoubleClickInterval,
StartDragDistance,
StartDragTime,
KeyboardAutoRepeatRate
KeyboardAutoRepeatRate,
ShowIsFullScreen
};
virtual QVariant styleHint(StyleHint hint) const;

View File

@ -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

View File

@ -62,6 +62,7 @@ public:
int keyboardInputInterval() const;
int keyboardAutoRepeatRate() const;
int cursorFlashTime() const;
bool showIsFullScreen() const;
private:
friend class QGuiApplication;
QStyleHints();

View File

@ -54,6 +54,8 @@
#include <QtCore/QDebug>
#include <QStyleHints>
QT_BEGIN_NAMESPACE
/*!
@ -741,30 +743,42 @@ QObject *QWindow::focusObject() const
return const_cast<QWindow *>(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()

View File

@ -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();

View File

@ -110,4 +110,12 @@ QAbstractEventDispatcher *QEglFSIntegration::guiThreadEventDispatcher() const
return createUnixEventDispatcher();
}
QVariant QEglFSIntegration::styleHint(QPlatformIntegration::StyleHint hint) const
{
if (hint == QPlatformIntegration::ShowIsFullScreen)
return true;
return QPlatformIntegration::styleHint(hint);
}
QT_END_NAMESPACE

View File

@ -66,6 +66,8 @@ public:
QAbstractEventDispatcher *guiThreadEventDispatcher() const;
QVariant styleHint(QPlatformIntegration::StyleHint hint) const;
private:
QPlatformFontDatabase *mFontDb;
};