summaryrefslogtreecommitdiffstats
path: root/src/widgets/styles/qgtkstyle_p.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@digia.com>2012-10-10 18:39:51 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-11-06 16:30:11 +0100
commita80c217583e930997ffdbd04d64b7c9c5488ec10 (patch)
tree1a47969620e2d65f5e8e5d7d66d65240e3abd997 /src/widgets/styles/qgtkstyle_p.cpp
parent6952a9be5b2e60a7a1d8b64b1eef03d6a5b61c56 (diff)
QGtkStyle: handle focus & default widgets in GTK3 compatible way
Change-Id: Ib4409c15599953a6626738543b27d14d711e7109 Reviewed-by: Jens Bache-Wiig <jens.bache-wiig@digia.com>
Diffstat (limited to 'src/widgets/styles/qgtkstyle_p.cpp')
-rw-r--r--src/widgets/styles/qgtkstyle_p.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/widgets/styles/qgtkstyle_p.cpp b/src/widgets/styles/qgtkstyle_p.cpp
index 3bd5688f31..be0dbdb1db 100644
--- a/src/widgets/styles/qgtkstyle_p.cpp
+++ b/src/widgets/styles/qgtkstyle_p.cpp
@@ -175,11 +175,18 @@ Ptr_gtk_window_get_type QGtkStylePrivate::gtk_window_get_type = 0;
Ptr_gtk_widget_get_type QGtkStylePrivate::gtk_widget_get_type = 0;
Ptr_gtk_widget_get_parent QGtkStylePrivate::gtk_widget_get_parent = 0;
Ptr_gtk_widget_is_toplevel QGtkStylePrivate::gtk_widget_is_toplevel = 0;
+Ptr_gtk_widget_get_toplevel QGtkStylePrivate::gtk_widget_get_toplevel = 0;
Ptr_gtk_rc_get_style_by_paths QGtkStylePrivate::gtk_rc_get_style_by_paths = 0;
Ptr_gtk_check_version QGtkStylePrivate::gtk_check_version = 0;
Ptr_gtk_border_free QGtkStylePrivate::gtk_border_free = 0;
Ptr_gtk_widget_get_allocation QGtkStylePrivate::gtk_widget_get_allocation = 0;
Ptr_gtk_widget_set_allocation QGtkStylePrivate::gtk_widget_set_allocation = 0;
+Ptr_gtk_widget_set_can_default QGtkStylePrivate::gtk_widget_set_can_default = 0;
+Ptr_gtk_window_set_default QGtkStylePrivate::gtk_window_set_default = 0;
+
+Ptr_gdk_event_new QGtkStylePrivate::gdk_event_new = 0;
+Ptr_gdk_event_free QGtkStylePrivate::gdk_event_free = 0;
+Ptr_gtk_widget_send_focus_change QGtkStylePrivate::gtk_widget_send_focus_change = 0;
Ptr_pango_font_description_get_size QGtkStylePrivate::pango_font_description_get_size = 0;
Ptr_pango_font_description_get_weight QGtkStylePrivate::pango_font_description_get_weight = 0;
@@ -324,6 +331,24 @@ GtkStyle* QGtkStylePrivate::gtkStyle(const QHashableLatin1Literal &path)
return 0;
}
+void QGtkStylePrivate::gtkWidgetSetFocus(GtkWidget *widget, bool focus)
+{
+ if (QGtkStylePrivate::gtk_widget_send_focus_change) {
+ GdkEvent *event = QGtkStylePrivate::gdk_event_new(GDK_FOCUS_CHANGE);
+ event->focus_change.type = GDK_FOCUS_CHANGE;
+ event->focus_change.in = focus;
+ QGtkStylePrivate::gtk_widget_send_focus_change(widget, event);
+ QGtkStylePrivate::gdk_event_free(event);
+ } else {
+#if defined(GTK_WIDGET_SET_FLAGS) && defined(GTK_WIDGET_UNSET_FLAGS)
+ if (focus)
+ GTK_WIDGET_SET_FLAGS(widget, GTK_HAS_FOCUS);
+ else
+ GTK_WIDGET_UNSET_FLAGS(widget, GTK_HAS_FOCUS);
+#endif
+ }
+}
+
/*! \internal
* Get references to gtk functions after we dynamically load the library.
*/
@@ -445,6 +470,7 @@ void QGtkStylePrivate::resolveGtk() const
gtk_widget_get_type =(Ptr_gtk_widget_get_type)libgtk.resolve("gtk_widget_get_type");
gtk_widget_get_parent =(Ptr_gtk_widget_get_parent)libgtk.resolve("gtk_widget_get_parent");
gtk_widget_is_toplevel =(Ptr_gtk_widget_is_toplevel)libgtk.resolve("gtk_widget_is_toplevel");
+ gtk_widget_get_toplevel =(Ptr_gtk_widget_get_toplevel)libgtk.resolve("gtk_widget_get_toplevel");
gtk_rc_get_style_by_paths =(Ptr_gtk_rc_get_style_by_paths)libgtk.resolve("gtk_rc_get_style_by_paths");
gtk_check_version =(Ptr_gtk_check_version)libgtk.resolve("gtk_check_version");
@@ -452,6 +478,13 @@ void QGtkStylePrivate::resolveGtk() const
gtk_widget_get_allocation = (Ptr_gtk_widget_get_allocation)libgtk.resolve("gtk_widget_get_allocation");
gtk_widget_set_allocation = (Ptr_gtk_widget_set_allocation)libgtk.resolve("gtk_widget_set_allocation");
+ gtk_widget_set_can_default = (Ptr_gtk_widget_set_can_default)libgtk.resolve("gtk_widget_set_can_default");
+ gtk_window_set_default = (Ptr_gtk_window_set_default)libgtk.resolve("gtk_window_set_default");
+
+ gdk_event_new = (Ptr_gdk_event_new)libgtk.resolve("gdk_event_new");
+ gdk_event_free = (Ptr_gdk_event_free)libgtk.resolve("gdk_event_free");
+ gtk_widget_send_focus_change = (Ptr_gtk_widget_send_focus_change)libgtk.resolve("gtk_widget_send_focus_change");
+
pango_font_description_get_size = (Ptr_pango_font_description_get_size)libgtk.resolve("pango_font_description_get_size");
pango_font_description_get_weight = (Ptr_pango_font_description_get_weight)libgtk.resolve("pango_font_description_get_weight");
pango_font_description_get_family = (Ptr_pango_font_description_get_family)libgtk.resolve("pango_font_description_get_family");