diff options
author | Tadej Borovšak <tadeboro@gmail.com> | 2010-10-18 00:21:39 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2010-10-22 11:03:45 +0200 |
commit | 55196a705f00564a44647bfc97981db0a783369a (patch) | |
tree | 101187f418d74b2cb16929f0dcd4ce2ed4575e44 /gtk/gtktoolpalette.c | |
parent | 86b3c1b65e6fefc6f686279b1bc15b10895b61fe (diff) | |
download | gtk+-55196a705f00564a44647bfc97981db0a783369a.tar.gz |
Add GtkScrollable interface
The GtkScrollable interface provides "hadjustment" and "vadjustment"
properties that are used by GtkScrolledWindow. It replaces
the ::set_scroll_adjustment signal. The scrollable interface
also has ::min-display-width/height properties that can be
used to control the minimally visible part inside a scrolled window.
Diffstat (limited to 'gtk/gtktoolpalette.c')
-rw-r--r-- | gtk/gtktoolpalette.c | 201 |
1 files changed, 152 insertions, 49 deletions
diff --git a/gtk/gtktoolpalette.c b/gtk/gtktoolpalette.c index 397608e00a..0359fcfc45 100644 --- a/gtk/gtktoolpalette.c +++ b/gtk/gtktoolpalette.c @@ -28,6 +28,7 @@ #include "gtkmarshalers.h" #include "gtkprivate.h" +#include "gtkscrollable.h" #include "gtkintl.h" #define DEFAULT_ICON_SIZE GTK_ICON_SIZE_SMALL_TOOLBAR @@ -120,6 +121,10 @@ enum PROP_ICON_SIZE_SET, PROP_ORIENTATION, PROP_TOOLBAR_STYLE, + PROP_HADJUSTMENT, + PROP_VADJUSTMENT, + PROP_MIN_DISPLAY_WIDTH, + PROP_MIN_DISPLAY_HEIGHT }; enum @@ -145,6 +150,8 @@ struct _GtkToolPalettePrivate GtkAdjustment *hadjustment; GtkAdjustment *vadjustment; + gint min_display_width; + gint min_display_height; GtkIconSize icon_size; gboolean icon_size_set; @@ -177,10 +184,17 @@ static const GtkTargetEntry dnd_targets[] = { "application/x-gtk-tool-palette-group", GTK_TARGET_SAME_APP, 0 }, }; +static void gtk_tool_palette_set_hadjustment (GtkToolPalette *palette, + GtkAdjustment *adjustment); +static void gtk_tool_palette_set_vadjustment (GtkToolPalette *palette, + GtkAdjustment *adjustment); + + G_DEFINE_TYPE_WITH_CODE (GtkToolPalette, gtk_tool_palette, GTK_TYPE_CONTAINER, - G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL)); + G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL) + G_IMPLEMENT_INTERFACE (GTK_TYPE_SCROLLABLE, NULL)) static void gtk_tool_palette_init (GtkToolPalette *palette) @@ -197,6 +211,8 @@ gtk_tool_palette_init (GtkToolPalette *palette) palette->priv->orientation = DEFAULT_ORIENTATION; palette->priv->style = DEFAULT_TOOLBAR_STYLE; palette->priv->style_set = FALSE; + palette->priv->min_display_width = -1; + palette->priv->min_display_height = -1; palette->priv->text_size_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH); } @@ -258,6 +274,22 @@ gtk_tool_palette_set_property (GObject *object, } break; + case PROP_HADJUSTMENT: + gtk_tool_palette_set_hadjustment (palette, g_value_get_object (value)); + break; + + case PROP_VADJUSTMENT: + gtk_tool_palette_set_vadjustment (palette, g_value_get_object (value)); + break; + + case PROP_MIN_DISPLAY_WIDTH: + palette->priv->min_display_width = g_value_get_int (value); + break; + + case PROP_MIN_DISPLAY_HEIGHT: + palette->priv->min_display_height = g_value_get_int (value); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -290,6 +322,22 @@ gtk_tool_palette_get_property (GObject *object, g_value_set_enum (value, gtk_tool_palette_get_style (palette)); break; + case PROP_HADJUSTMENT: + g_value_set_object (value, palette->priv->hadjustment); + break; + + case PROP_VADJUSTMENT: + g_value_set_object (value, palette->priv->vadjustment); + break; + + case PROP_MIN_DISPLAY_WIDTH: + g_value_set_int (value, palette->priv->min_display_width); + break; + + case PROP_MIN_DISPLAY_HEIGHT: + g_value_set_int (value, palette->priv->min_display_height); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -703,33 +751,47 @@ gtk_tool_palette_adjustment_value_changed (GtkAdjustment *adjustment, } static void -gtk_tool_palette_set_scroll_adjustments (GtkWidget *widget, - GtkAdjustment *hadjustment, - GtkAdjustment *vadjustment) +gtk_tool_palette_set_adjustment (GtkToolPalette *palette, + GtkOrientation orientation, + GtkAdjustment *adjustment) { - GtkToolPalette *palette = GTK_TOOL_PALETTE (widget); + GtkAdjustment **adj_ptr; - if (hadjustment) - g_object_ref_sink (hadjustment); - if (vadjustment) - g_object_ref_sink (vadjustment); + if (orientation == GTK_ORIENTATION_HORIZONTAL) + { + if (adjustment && palette->priv->hadjustment == adjustment) + return; - if (palette->priv->hadjustment) - g_object_unref (palette->priv->hadjustment); - if (palette->priv->vadjustment) - g_object_unref (palette->priv->vadjustment); + adj_ptr = &palette->priv->hadjustment; + } + else + { + if (adjustment && palette->priv->vadjustment == adjustment) + return; - palette->priv->hadjustment = hadjustment; - palette->priv->vadjustment = vadjustment; + adj_ptr = &palette->priv->vadjustment; + } - if (palette->priv->hadjustment) - g_signal_connect (palette->priv->hadjustment, "value-changed", - G_CALLBACK (gtk_tool_palette_adjustment_value_changed), - palette); - if (palette->priv->vadjustment) - g_signal_connect (palette->priv->vadjustment, "value-changed", - G_CALLBACK (gtk_tool_palette_adjustment_value_changed), - palette); + /* Disconnect handler */ + if (*adj_ptr) + { + g_signal_handlers_disconnect_by_func (*adj_ptr, + gtk_tool_palette_adjustment_value_changed, + palette); + g_object_unref (*adj_ptr); + } + + /* Ensure adjustment */ + if (!adjustment) + adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, + 0.0, 0.0, 0.0)); + + /* Connect signal handler */ + g_signal_connect (adjustment, "value-changed", + G_CALLBACK (gtk_tool_palette_adjustment_value_changed), + palette); + *adj_ptr = g_object_ref_sink (adjustment); + /* FIXME: Adjustment should probably have it's values updated now */ } static void @@ -952,38 +1014,17 @@ gtk_tool_palette_class_init (GtkToolPaletteClass *cls) cclass->set_child_property = gtk_tool_palette_set_child_property; cclass->get_child_property = gtk_tool_palette_get_child_property; - cls->set_scroll_adjustments = gtk_tool_palette_set_scroll_adjustments; - /* Handle screen-changed so we can update our GtkSettings. */ wclass->screen_changed = gtk_tool_palette_screen_changed; - /** - * GtkToolPalette::set-scroll-adjustments: - * @widget: the GtkToolPalette that received the signal - * @hadjustment: The horizontal adjustment - * @vadjustment: The vertical adjustment - * - * Set the scroll adjustments for the viewport. - * Usually scrolled containers like GtkScrolledWindow will emit this - * signal to connect two instances of GtkScrollbar to the scroll - * directions of the GtkToolpalette. - * - * Since: 2.20 - */ - wclass->set_scroll_adjustments_signal = - g_signal_new ("set-scroll-adjustments", - G_TYPE_FROM_CLASS (oclass), - G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (GtkToolPaletteClass, set_scroll_adjustments), - NULL, NULL, - _gtk_marshal_VOID__OBJECT_OBJECT, - G_TYPE_NONE, 2, - GTK_TYPE_ADJUSTMENT, - GTK_TYPE_ADJUSTMENT); - g_object_class_override_property (oclass, PROP_ORIENTATION, "orientation"); + g_object_class_override_property (oclass, PROP_HADJUSTMENT, "hadjustment"); + g_object_class_override_property (oclass, PROP_VADJUSTMENT, "vadjustment"); + g_object_class_override_property (oclass, PROP_MIN_DISPLAY_WIDTH, "min-display-width"); + g_object_class_override_property (oclass, PROP_MIN_DISPLAY_HEIGHT, "min-display-height"); + /** * GtkToolPalette:icon-size: * @@ -1908,6 +1949,8 @@ _gtk_tool_palette_set_expanding_child (GtkToolPalette *palette, * Returns: (transfer none): the horizontal adjustment of @palette * * Since: 2.20 + * + * Deprecated: 3.0: Use gtk_scrollable_get_hadjustment() */ GtkAdjustment* gtk_tool_palette_get_hadjustment (GtkToolPalette *palette) @@ -1917,6 +1960,35 @@ gtk_tool_palette_get_hadjustment (GtkToolPalette *palette) return palette->priv->hadjustment; } +static void +gtk_tool_palette_set_hadjustment (GtkToolPalette *palette, + GtkAdjustment *adjustment) +{ + GtkToolPalettePrivate *priv = palette->priv; + + if (adjustment && priv->hadjustment == adjustment) + return; + + if (priv->hadjustment != NULL) + { + g_signal_handlers_disconnect_by_func (priv->hadjustment, + gtk_tool_palette_adjustment_value_changed, + palette); + g_object_unref (priv->hadjustment); + } + + if (adjustment != NULL) + adjustment = gtk_adjustment_new (0.0, 0.0, 0.0, + 0.0, 0.0, 0.0); + + g_signal_connect (adjustment, "value-changed", + G_CALLBACK (gtk_tool_palette_adjustment_value_changed), + palette); + priv->hadjustment = g_object_ref_sink (adjustment); + /* FIXME: Adjustment should probably have it's values updated now */ + g_object_notify (G_OBJECT (palette), "hadjustment"); +} + /** * gtk_tool_palette_get_vadjustment: * @palette: a #GtkToolPalette @@ -1926,6 +1998,8 @@ gtk_tool_palette_get_hadjustment (GtkToolPalette *palette) * Returns: (transfer none): the vertical adjustment of @palette * * Since: 2.20 + * + * Deprecated: 3.0: Use gtk_scrollable_get_vadjustment() */ GtkAdjustment* gtk_tool_palette_get_vadjustment (GtkToolPalette *palette) @@ -1935,6 +2009,35 @@ gtk_tool_palette_get_vadjustment (GtkToolPalette *palette) return palette->priv->vadjustment; } +static void +gtk_tool_palette_set_vadjustment (GtkToolPalette *palette, + GtkAdjustment *adjustment) +{ + GtkToolPalettePrivate *priv = palette->priv; + + if (adjustment && priv->vadjustment == adjustment) + return; + + if (priv->vadjustment != NULL) + { + g_signal_handlers_disconnect_by_func (priv->vadjustment, + gtk_tool_palette_adjustment_value_changed, + palette); + g_object_unref (priv->vadjustment); + } + + if (adjustment != NULL) + adjustment = gtk_adjustment_new (0.0, 0.0, 0.0, + 0.0, 0.0, 0.0); + + g_signal_connect (adjustment, "value-changed", + G_CALLBACK (gtk_tool_palette_adjustment_value_changed), + palette); + priv->vadjustment = g_object_ref_sink (adjustment); + /* FIXME: Adjustment should probably have it's values updated now */ + g_object_notify (G_OBJECT (palette), "vadjustment"); +} + GtkSizeGroup * _gtk_tool_palette_get_size_group (GtkToolPalette *palette) { |