summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dietrich-de@nokia.com>2012-10-09 11:27:01 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-10 13:15:57 +0200
commit06332df7438c8d2215b02f1e01ce2ed28a49a320 (patch)
tree3d8b8ad1896d611b349717b80f5b33464653fa9b
parent571545590149fe9bb3cce308490d66ac2c3f1318 (diff)
Mac: Bring back "Text boxes and list only" tab navigation
Added ThemeHint::TabAllWidgets as a mean to access that platform specific bool. The default implementation returns always true when querying QPlatformTheme::themeHint(). Several auto-tests had to be updated to reflect for qt_tab_all_widgets' type change. One XFAIL removed from tst_QApplication::focusChanged(). Task-number: QTBUG-24372 Change-Id: Ie1f0486c19898fe54c53aa4a27e378485075e512 Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
-rw-r--r--src/gui/kernel/qplatformtheme.cpp5
-rw-r--r--src/gui/kernel/qplatformtheme.h3
-rw-r--r--src/plugins/platforms/cocoa/qcocoatheme.mm4
-rw-r--r--src/widgets/graphicsview/qgraphicsproxywidget.cpp4
-rw-r--r--src/widgets/kernel/qapplication.cpp10
-rw-r--r--src/widgets/widgets/qabstractbutton.cpp4
-rw-r--r--tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp4
-rw-r--r--tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp8
-rw-r--r--tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp4
-rw-r--r--tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp4
-rw-r--r--tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp4
11 files changed, 33 insertions, 21 deletions
diff --git a/src/gui/kernel/qplatformtheme.cpp b/src/gui/kernel/qplatformtheme.cpp
index c35b534473..b91d3d0281 100644
--- a/src/gui/kernel/qplatformtheme.cpp
+++ b/src/gui/kernel/qplatformtheme.cpp
@@ -129,6 +129,9 @@ QT_BEGIN_NAMESPACE
\value SpellCheckUnderlineStyle (int) A QTextCharFormat::UnderlineStyle specifying
the underline style used misspelled words when spell checking.
+ \value TabAllWidgets (bool) Whether tab navigation should go through all the widgets or components,
+ or just through text boxes and list views. This is mostly a Mac feature.
+
\sa themeHint(), QStyle::pixelMetric()
*/
@@ -218,6 +221,8 @@ QVariant QPlatformTheme::defaultThemeHint(ThemeHint hint)
return QVariant(int(0));
case SpellCheckUnderlineStyle:
return QVariant(int(QTextCharFormat::SpellCheckUnderline));
+ case TabAllWidgets:
+ return QVariant(true);
}
return QVariant();
}
diff --git a/src/gui/kernel/qplatformtheme.h b/src/gui/kernel/qplatformtheme.h
index 417b4eda4d..398339255c 100644
--- a/src/gui/kernel/qplatformtheme.h
+++ b/src/gui/kernel/qplatformtheme.h
@@ -96,7 +96,8 @@ public:
UseFullScreenForPopupMenu,
KeyboardScheme,
UiEffects,
- SpellCheckUnderlineStyle
+ SpellCheckUnderlineStyle,
+ TabAllWidgets
};
enum DialogType {
diff --git a/src/plugins/platforms/cocoa/qcocoatheme.mm b/src/plugins/platforms/cocoa/qcocoatheme.mm
index 3e2515d5f4..ddb550dd5f 100644
--- a/src/plugins/platforms/cocoa/qcocoatheme.mm
+++ b/src/plugins/platforms/cocoa/qcocoatheme.mm
@@ -39,6 +39,8 @@
**
****************************************************************************/
+#import <Cocoa/Cocoa.h>
+
#include "qcocoatheme.h"
#include <QtCore/QVariant>
@@ -142,6 +144,8 @@ QVariant QCocoaTheme::themeHint(ThemeHint hint) const
return QVariant(1); // QDialogButtonBox::MacLayout
case KeyboardScheme:
return QVariant(int(MacKeyboardScheme));
+ case TabAllWidgets:
+ return QVariant(bool([[NSApplication sharedApplication] isFullKeyboardAccessEnabled]));
default:
break;
}
diff --git a/src/widgets/graphicsview/qgraphicsproxywidget.cpp b/src/widgets/graphicsview/qgraphicsproxywidget.cpp
index a0b3f99d5d..6dd03e76b0 100644
--- a/src/widgets/graphicsview/qgraphicsproxywidget.cpp
+++ b/src/widgets/graphicsview/qgraphicsproxywidget.cpp
@@ -190,7 +190,7 @@ QT_BEGIN_NAMESPACE
*/
extern bool qt_sendSpontaneousEvent(QObject *, QEvent *);
-Q_WIDGETS_EXPORT extern bool qt_tab_all_widgets;
+Q_WIDGETS_EXPORT extern bool qt_tab_all_widgets();
/*!
\internal
@@ -357,7 +357,7 @@ QWidget *QGraphicsProxyWidgetPrivate::findFocusChild(QWidget *child, bool next)
}
QWidget *oldChild = child;
- uint focus_flag = qt_tab_all_widgets ? Qt::TabFocus : Qt::StrongFocus;
+ uint focus_flag = qt_tab_all_widgets() ? Qt::TabFocus : Qt::StrongFocus;
do {
if (child->isEnabled()
&& child->isVisibleTo(widget)
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index 68d7ee3378..86a27b2574 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -397,7 +397,6 @@ QWidget *QApplicationPrivate::active_window = 0; // toplevel with keyboar
#ifndef QT_NO_WHEELEVENT
int QApplicationPrivate::wheel_scroll_lines; // number of lines to scroll
#endif
-bool Q_WIDGETS_EXPORT qt_tab_all_widgets = true;
bool qt_in_tab_key_event = false;
int qt_antialiasing_threshold = -1;
QSize QApplicationPrivate::app_strut = QSize(0,0); // no default application strut
@@ -416,6 +415,13 @@ inline bool QApplicationPrivate::isAlien(QWidget *widget)
return widget && !widget->isWindow();
}
+bool Q_WIDGETS_EXPORT qt_tab_all_widgets()
+{
+ if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme())
+ return theme->themeHint(QPlatformTheme::TabAllWidgets).toBool();
+ return true;
+}
+
// ######## move to QApplicationPrivate
// Default application palettes and fonts (per widget type)
Q_GLOBAL_STATIC(PaletteHash, app_palettes)
@@ -2080,7 +2086,7 @@ void QApplication::setActiveWindow(QWidget* act)
*/
QWidget *QApplicationPrivate::focusNextPrevChild_helper(QWidget *toplevel, bool next)
{
- uint focus_flag = qt_tab_all_widgets ? Qt::TabFocus : Qt::StrongFocus;
+ uint focus_flag = qt_tab_all_widgets() ? Qt::TabFocus : Qt::StrongFocus;
QWidget *f = toplevel->focusWidget();
if (!f)
diff --git a/src/widgets/widgets/qabstractbutton.cpp b/src/widgets/widgets/qabstractbutton.cpp
index 451a7d3a96..5d879c8930 100644
--- a/src/widgets/widgets/qabstractbutton.cpp
+++ b/src/widgets/widgets/qabstractbutton.cpp
@@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE
#define AUTO_REPEAT_DELAY 300
#define AUTO_REPEAT_INTERVAL 100
-Q_WIDGETS_EXPORT extern bool qt_tab_all_widgets;
+Q_WIDGETS_EXPORT extern bool qt_tab_all_widgets();
/*!
\class QAbstractButton
@@ -385,7 +385,7 @@ void QAbstractButtonPrivate::moveFocus(int key)
int bestScore = -1;
QRect target = f->rect().translated(f->mapToGlobal(QPoint(0,0)));
QPoint goal = target.center();
- uint focus_flag = qt_tab_all_widgets ? Qt::TabFocus : Qt::StrongFocus;
+ uint focus_flag = qt_tab_all_widgets() ? Qt::TabFocus : Qt::StrongFocus;
for (int i = 0; i < buttonList.count(); ++i) {
QAbstractButton *button = buttonList.at(i);
diff --git a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp
index 259b060ea2..dc4171ef56 100644
--- a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp
+++ b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp
@@ -3331,12 +3331,12 @@ void tst_QTableView::resizeToContents()
}
QT_BEGIN_NAMESPACE
-extern bool Q_GUI_EXPORT qt_tab_all_widgets; // qapplication.cpp
+extern bool Q_GUI_EXPORT qt_tab_all_widgets(); // qapplication.cpp
QT_END_NAMESPACE
void tst_QTableView::tabFocus()
{
- if (!qt_tab_all_widgets)
+ if (!qt_tab_all_widgets())
QSKIP("This test requires full keyboard control to be enabled.");
// QTableView enables tabKeyNavigation by default, but you should be able
diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
index 2a3a3a166e..9ea8589e76 100644
--- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
+++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
@@ -100,7 +100,7 @@ static QList<struct QWindowSystemInterface::TouchPoint> touchPointList(const QLi
-extern bool Q_GUI_EXPORT qt_tab_all_widgets; // from qapplication.cpp
+extern bool Q_GUI_EXPORT qt_tab_all_widgets(); // from qapplication.cpp
QT_END_NAMESPACE
class tst_QApplication : public QObject
@@ -1597,14 +1597,10 @@ void tst_QApplication::focusChanged()
QSettings appleSettings(QLatin1String("apple.com"));
QVariant appleValue = appleSettings.value(QLatin1String("AppleKeyboardUIMode"), 0);
tabAllControls = (appleValue.toInt() & 0x2);
- if (!tabAllControls) {
- QEXPECT_FAIL("", "QTBUG-24372 Mac tab key \"Text boxes and lists only\" vs "
- "\"All controls\" setting is not respected in Qt5", Abort);
- }
#endif
// make sure Qt's idea of tabbing between widgets matches what we think it should
- QCOMPARE(qt_tab_all_widgets, tabAllControls);
+ QCOMPARE(qt_tab_all_widgets(), tabAllControls);
tab.simulate(now);
if (!tabAllControls) {
diff --git a/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp b/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp
index 3e0cc42c45..5c1de27ef9 100644
--- a/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp
+++ b/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp
@@ -121,13 +121,13 @@ void tst_QButtonGroup::cleanup()
}
QT_BEGIN_NAMESPACE
-extern bool Q_GUI_EXPORT qt_tab_all_widgets;
+extern bool Q_GUI_EXPORT qt_tab_all_widgets();
QT_END_NAMESPACE
void tst_QButtonGroup::arrowKeyNavigation()
{
- if (!qt_tab_all_widgets)
+ if (!qt_tab_all_widgets())
QSKIP("This test requires full keyboard control to be enabled.");
QDialog dlg(0);
diff --git a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
index 77a3dd56db..589f157254 100644
--- a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
+++ b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
@@ -65,7 +65,7 @@
QT_BEGIN_NAMESPACE
#if !defined(Q_WS_WIN)
-extern bool qt_tab_all_widgets;
+extern bool qt_tab_all_widgets();
#endif
QT_END_NAMESPACE
@@ -73,7 +73,7 @@ static inline bool tabAllWidgets()
{
#if !defined(Q_OS_WIN)
if (qApp->style()->inherits("QMacStyle"))
- return qt_tab_all_widgets;
+ return qt_tab_all_widgets();
#endif
return true;
}
diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
index bcd7f4fdcc..b159d0e6c3 100644
--- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
+++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
@@ -366,7 +366,7 @@ void tst_QMenu::keyboardNavigation()
#ifdef Q_OS_MAC
QT_BEGIN_NAMESPACE
- extern bool qt_tab_all_widgets; // from qapplication.cpp
+extern bool qt_tab_all_widgets(); // from qapplication.cpp
QT_END_NAMESPACE
#endif
@@ -378,7 +378,7 @@ void tst_QMenu::focus()
menu.addAction("Three");
#ifdef Q_OS_MAC
- if (!qt_tab_all_widgets)
+ if (!qt_tab_all_widgets())
QSKIP("Computer is currently set up to NOT tab to all widgets,"
" this test assumes you can tab to all widgets");
#endif