diff options
author | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2012-07-19 11:03:54 +0000 |
---|---|---|
committer | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2012-07-19 11:03:54 +0000 |
commit | dce9b3baec72aa4d273ff03da6cb0dd246a73265 (patch) | |
tree | 001a279e6cb9b6b98270448fdcbff1a0aa3b3810 /ui/gtk/bytes_view.c | |
parent | e6c5c00453fd3dd0f8c83c576b5053835048abbc (diff) |
BytesView: Support for gtk3 scrollbar.
svn path=/trunk/; revision=43821
Diffstat (limited to 'ui/gtk/bytes_view.c')
-rw-r--r-- | ui/gtk/bytes_view.c | 98 |
1 files changed, 93 insertions, 5 deletions
diff --git a/ui/gtk/bytes_view.c b/ui/gtk/bytes_view.c index 248e1f3749..9882171e29 100644 --- a/ui/gtk/bytes_view.c +++ b/ui/gtk/bytes_view.c @@ -64,9 +64,13 @@ struct _BytesView int font_descent; int fontsize; - gint adj_tag; GtkAdjustment *vadj; GtkAdjustment *hadj; +#if GTK_CHECK_VERSION(3, 0, 0) + guint hscroll_policy : 1; + guint vscroll_policy : 1; +#endif + gint adj_tag; int max_width; gboolean bold_highlight; @@ -988,6 +992,9 @@ bytes_view_set_scroll_adjustments(BytesView *bv, GtkAdjustment *hadj, GtkAdjustm g_signal_connect(bv->vadj, "value-changed", G_CALLBACK(bytes_view_adjustment_changed), bv); need_adjust = TRUE; +#if GTK_CHECK_VERSION(3, 0, 0) + g_object_notify(G_OBJECT(bv), "vadjustment"); +#endif } if (bv->hadj && (bv->hadj != hadj)) { @@ -1000,12 +1007,83 @@ bytes_view_set_scroll_adjustments(BytesView *bv, GtkAdjustment *hadj, GtkAdjustm g_signal_connect(bv->hadj, "value-changed", G_CALLBACK(bytes_view_adjustment_changed), bv); need_adjust = TRUE; +#if GTK_CHECK_VERSION(3, 0, 0) + g_object_notify(G_OBJECT(bv), "hadjustment"); +#endif } if (need_adjust) bytes_view_adjustment_set(bv); } +#if GTK_CHECK_VERSION(3, 0, 0) +enum { + PROP_0, + PROP_HADJUSTMENT, + PROP_VADJUSTMENT, + PROP_HSCROLL_POLICY, + PROP_VSCROLL_POLICY +}; + +static void +bytes_view_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +{ + BytesView *bv = BYTES_VIEW(object); + + switch (prop_id) { + case PROP_HADJUSTMENT: + bytes_view_set_scroll_adjustments(bv, g_value_get_object(value), bv->vadj); + break; + + case PROP_VADJUSTMENT: + bytes_view_set_scroll_adjustments(bv, bv->hadj, g_value_get_object(value)); + break; + + case PROP_HSCROLL_POLICY: + bv->hscroll_policy = g_value_get_enum(value); + gtk_widget_queue_resize(GTK_WIDGET(bv)); + break; + + case PROP_VSCROLL_POLICY: + bv->vscroll_policy = g_value_get_enum(value); + gtk_widget_queue_resize(GTK_WIDGET(bv)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +static void +bytes_view_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +{ + BytesView *bv = BYTES_VIEW(object); + + switch (prop_id) { + case PROP_HADJUSTMENT: + g_value_set_object(value, bv->hadj); + break; + + case PROP_VADJUSTMENT: + g_value_set_object(value, bv->vadj); + break; + + case PROP_HSCROLL_POLICY: + g_value_set_enum(value, bv->hscroll_policy); + break; + + case PROP_VSCROLL_POLICY: + g_value_set_enum(value, bv->vscroll_policy); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} +#endif + static void bytes_view_class_init(BytesViewClass *klass) { @@ -1045,10 +1123,20 @@ bytes_view_class_init(BytesViewClass *klass) widget_class->scroll_event = bytes_view_scroll; #if GTK_CHECK_VERSION(3, 0, 0) - /* XXX, http://developer.gnome.org/gtk3/stable/GtkScrollable.html - * - * connect to hadjustment/vadjustment properties? - */ + { + GObjectClass *gobject_class = G_OBJECT_CLASS(klass); + + gobject_class->set_property = bytes_view_set_property; + gobject_class->get_property = bytes_view_get_property; + + /* XXX, move some code from widget->destroy to gobject->finalize? */ + /* gobject_class->finalize = bytes_view_finalize; */ + + g_object_class_override_property(gobject_class, PROP_HADJUSTMENT, "hadjustment"); + g_object_class_override_property(gobject_class, PROP_VADJUSTMENT, "vadjustment"); + g_object_class_override_property(gobject_class, PROP_HSCROLL_POLICY, "hscroll-policy"); + g_object_class_override_property(gobject_class, PROP_VSCROLL_POLICY, "vscroll-policy"); + } #else klass->set_scroll_adjustments = bytes_view_set_scroll_adjustments; |