Fix a11y crash: dock doesn't always have a widget.
authorFrederik Gladhorn <frederik.gladhorn@nokia.com>
Tue, 28 Jun 2011 12:37:10 +0000 (14:37 +0200)
committerQt by Nokia <qt-info@nokia.com>
Thu, 18 Aug 2011 13:51:10 +0000 (15:51 +0200)
Also return dock widget title.

Reviewed-by: Gabriel de Dietrich <gabriel.dietrich-de@nokia.com>
(cherry picked from commit 276d16583b80da2838f9af47e15fe3a83cdb0485)

Change-Id: I8d66bec4212cc2b1df8c9b041375d7455c6a76a3
Reviewed-on: http://codereview.qt.nokia.com/3023
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com>
src/plugins/accessible/widgets/qaccessiblewidgets.cpp

index ea5880c..45322e5 100644 (file)
@@ -73,6 +73,9 @@ QT_BEGIN_NAMESPACE
 
 using namespace QAccessible2;
 
+QString Q_GUI_EXPORT qt_accStripAmp(const QString &text);
+QString Q_GUI_EXPORT qt_accHotKey(const QString &text);
+
 QList<QWidget*> childWidgets(const QWidget *widget, bool includeTopLevel)
 {
     if (widget == 0)
@@ -1139,8 +1142,8 @@ int QAccessibleTitleBar::childCount() const
 QString QAccessibleTitleBar::text(Text t, int child) const
 {
     if (!child) {
-        if (t == Value) {
-            return dockWidget()->windowTitle();
+        if (t == Name || t == Value) {
+            return qt_accStripAmp(dockWidget()->windowTitle());
         }
     }
     return QString();
@@ -1171,17 +1174,19 @@ QAccessible::State QAccessibleTitleBar::state(int child) const
     return state;
 }
 
-QRect QAccessibleTitleBar::rect (int child ) const
+QRect QAccessibleTitleBar::rect(int child) const
 {
     bool mapToGlobal = true;
     QRect rect;
     if (child == 0) {
         if (dockWidget()->isFloating()) {
             rect = dockWidget()->frameGeometry();
-            QPoint globalPos = dockWidget()->mapToGlobal( dockWidget()->widget()->rect().topLeft() );
-            globalPos.ry()--;
-            rect.setBottom(globalPos.y());
-            mapToGlobal = false;
+            if (dockWidget()->widget()) {
+                QPoint globalPos = dockWidget()->mapToGlobal(dockWidget()->widget()->rect().topLeft());
+                globalPos.ry()--;
+                rect.setBottom(globalPos.y());
+                mapToGlobal = false;
+            }
         } else {
             QDockWidgetLayout *layout = qobject_cast<QDockWidgetLayout*>(dockWidget()->layout());
             rect = layout->titleArea();