summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qguiapplication.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@nokia.com>2011-05-03 21:06:20 +0200
committerLars Knoll <lars.knoll@nokia.com>2011-05-03 21:06:20 +0200
commit5df3d517b48db1410e16947194a32137d08b70e6 (patch)
treeb55a5c87d5189e48939413a49c35f966f00752c8 /src/gui/kernel/qguiapplication.cpp
parent91d2b267f166b1ff229746bfdc3643a824b3566b (diff)
move layoutDirection from QApplication to QGuiApplication
The concept is needed in both QWidgets and QML, so it has to be in QGuiApplication.
Diffstat (limited to 'src/gui/kernel/qguiapplication.cpp')
-rw-r--r--src/gui/kernel/qguiapplication.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
index 2230c86469..6d680ecdfb 100644
--- a/src/gui/kernel/qguiapplication.cpp
+++ b/src/gui/kernel/qguiapplication.cpp
@@ -94,6 +94,9 @@ int QGuiApplicationPrivate::mousePressX = 0;
int QGuiApplicationPrivate::mousePressY = 0;
int QGuiApplicationPrivate::mouse_double_click_distance = 5;
+static Qt::LayoutDirection layout_direction = Qt::LeftToRight;
+static bool force_reverse = false;
+
QGuiApplicationPrivate *QGuiApplicationPrivate::self = 0;
#ifndef QT_NO_CLIPBOARD
@@ -103,6 +106,16 @@ QClipboard *QGuiApplicationPrivate::qt_clipboard = 0;
Q_GLOBAL_STATIC(QMutex, applicationFontMutex)
QFont *QGuiApplicationPrivate::app_font = 0;
+static bool qt_detectRTLLanguage()
+{
+ return force_reverse ^
+ (QApplication::tr("QT_LAYOUT_DIRECTION",
+ "Translate this string to the string 'LTR' in left-to-right"
+ " languages or to 'RTL' in right-to-left languages (such as Hebrew"
+ " and Arabic) to get proper widget layout.") == QLatin1String("RTL"));
+}
+
+
QGuiApplication::QGuiApplication(int &argc, char **argv, int flags)
: QCoreApplication(*new QGuiApplicationPrivate(argc, argv, flags))
{
@@ -213,6 +226,9 @@ void QGuiApplicationPrivate::init()
} else if (arg == "-plugin") {
if (++i < argc)
pluginList << argv[i];
+ } else if (arg == "-reverse") {
+ force_reverse = true;
+ QGuiApplication::setLayoutDirection(Qt::RightToLeft);
} else {
argv[j++] = argv[i];
}
@@ -245,6 +261,8 @@ QGuiApplicationPrivate::~QGuiApplicationPrivate()
is_app_running = false;
QFont::cleanup();
+
+ layout_direction = Qt::LeftToRight;
}
#if 0
@@ -314,6 +332,9 @@ bool QGuiApplication::notify(QObject *object, QEvent *event)
bool QGuiApplication::event(QEvent *e)
{
+ if(e->type() == QEvent::LanguageChange) {
+ setLayoutDirection(qt_detectRTLLanguage()?Qt::RightToLeft:Qt::LeftToRight);
+ }
return QCoreApplication::event(e);
}
@@ -816,4 +837,53 @@ void QGuiApplication::setFont(const QFont &font)
*QGuiApplicationPrivate::app_font = font;
}
+/*!
+ \fn bool QGuiApplication::isRightToLeft()
+
+ Returns true if the application's layout direction is
+ Qt::RightToLeft; otherwise returns false.
+
+ \sa layoutDirection(), isLeftToRight()
+*/
+
+/*!
+ \fn bool QGuiApplication::isLeftToRight()
+
+ Returns true if the application's layout direction is
+ Qt::LeftToRight; otherwise returns false.
+
+ \sa layoutDirection(), isRightToLeft()
+*/
+
+void QGuiApplicationPrivate::notifyLayoutDirectionChange()
+{
+}
+
+/*!
+ \property QGuiApplication::layoutDirection
+ \brief the default layout direction for this application
+
+ On system start-up, the default layout direction depends on the
+ application's language.
+
+ \sa QWidget::layoutDirection, isLeftToRight(), isRightToLeft()
+ */
+
+void QGuiApplication::setLayoutDirection(Qt::LayoutDirection direction)
+{
+ if (layout_direction == direction || direction == Qt::LayoutDirectionAuto)
+ return;
+
+ layout_direction = direction;
+
+ QGuiApplicationPrivate::self->notifyLayoutDirectionChange();
+}
+
+Qt::LayoutDirection QGuiApplication::layoutDirection()
+{
+ return layout_direction;
+}
+
+
+
QT_END_NAMESPACE