summaryrefslogtreecommitdiff
path: root/gtk/gtktoolpalette.c
diff options
context:
space:
mode:
authorTadej Borovšak <tadeboro@gmail.com>2010-10-18 00:21:39 -0400
committerMatthias Clasen <mclasen@redhat.com>2010-10-22 11:03:45 +0200
commit55196a705f00564a44647bfc97981db0a783369a (patch)
tree101187f418d74b2cb16929f0dcd4ce2ed4575e44 /gtk/gtktoolpalette.c
parent86b3c1b65e6fefc6f686279b1bc15b10895b61fe (diff)
downloadgtk+-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.c201
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)
{