diff options
author | Jens Bache-Wiig <jbache@trolltech.com> | 2010-01-21 10:26:14 (GMT) |
---|---|---|
committer | Jens Bache-Wiig <jbache@trolltech.com> | 2010-01-21 10:29:02 (GMT) |
commit | a6165c5ec3b16d3f778a2da38d90a8afe8d58cd8 (patch) | |
tree | f1ee5ce508d2a9d7631e31596b4f956f994b94e5 | |
parent | bd4cbc57ee6b3d2721a51932f4eaea8d8b07f04f (diff) | |
download | Qt-a6165c5ec3b16d3f778a2da38d90a8afe8d58cd8.zip Qt-a6165c5ec3b16d3f778a2da38d90a8afe8d58cd8.tar.gz Qt-a6165c5ec3b16d3f778a2da38d90a8afe8d58cd8.tar.bz2 |
Fix missing focus rect for check and radio buttons in some GTK+ themes
Some themes such as Nodoka does not draw a focus rect but instead
reads the focus flag on the widget itself. Hence we have to set
this flag before drawing.
Task-number: QTBUG-7504
Reviewed-by: thorbjorn
-rw-r--r-- | src/gui/styles/qgtkstyle.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/gui/styles/qgtkstyle.cpp b/src/gui/styles/qgtkstyle.cpp index 211f4ce..b5f052b 100644 --- a/src/gui/styles/qgtkstyle.cpp +++ b/src/gui/styles/qgtkstyle.cpp @@ -1106,8 +1106,14 @@ void QGtkStyle::drawPrimitive(PrimitiveElement element, // ### Note: Ubuntulooks breaks when the proper widget is passed // Murrine engine requires a widget not to get RGBA check - warnings GtkWidget *gtkCheckButton = d->gtkWidget(QLS("GtkCheckButton")); - gtkPainter.paintOption(gtkCheckButton , buttonRect, state, shadow, gtkRadioButton->style, QLS("radiobutton")); - + QString key(QLS("radiobutton")); + if (option->state & State_HasFocus) { // Themes such as Nodoka check this flag + key += QLatin1Char('f'); + GTK_WIDGET_SET_FLAGS(gtkCheckButton, GTK_HAS_FOCUS); + } + gtkPainter.paintOption(gtkCheckButton , buttonRect, state, shadow, gtkRadioButton->style, key); + if (option->state & State_HasFocus) + GTK_WIDGET_UNSET_FLAGS(gtkCheckButton, GTK_HAS_FOCUS); } break; @@ -1128,6 +1134,11 @@ void QGtkStyle::drawPrimitive(PrimitiveElement element, int spacing; GtkWidget *gtkCheckButton = d->gtkWidget(QLS("GtkCheckButton")); + QString key(QLS("checkbutton")); + if (option->state & State_HasFocus) { // Themes such as Nodoka checks this flag + key += QLatin1Char('f'); + GTK_WIDGET_SET_FLAGS(gtkCheckButton, GTK_HAS_FOCUS); + } // Some styles such as aero-clone assume they can paint in the spacing area gtkPainter.setClipRect(option->rect); @@ -1137,7 +1148,10 @@ void QGtkStyle::drawPrimitive(PrimitiveElement element, QRect checkRect = option->rect.adjusted(spacing, spacing, -spacing, -spacing); gtkPainter.paintCheckbox(gtkCheckButton, checkRect, state, shadow, gtkCheckButton->style, - QLS("checkbutton")); + key); + if (option->state & State_HasFocus) + GTK_WIDGET_UNSET_FLAGS(gtkCheckButton, GTK_HAS_FOCUS); + } break; |