summaryrefslogtreecommitdiff
path: root/gtk/gtkseparatortoolitem.c
diff options
context:
space:
mode:
authorSoeren Sandmann <sandmann@daimi.au.dk>2003-10-25 19:58:51 +0000
committerSøren Sandmann Pedersen <ssp@src.gnome.org>2003-10-25 19:58:51 +0000
commit356df7f65002a47516b542ace1fe88badf9d4965 (patch)
treeeffb19a2188dff1b081eb353c61afa2539db64fa /gtk/gtkseparatortoolitem.c
parent3a7a64aa46ea1c312c06e17a177c81fddfa93683 (diff)
downloadgtk+-356df7f65002a47516b542ace1fe88badf9d4965.tar.gz
Make this function take an index and a GtkToolItem.
Thu Oct 23 21:55:10 2003 Soeren Sandmann <sandmann@daimi.au.dk> * gtk/gtktoolbar.c (gtk_toolbar_highlight_drop_location): Make this function take an index and a GtkToolItem. * tests/testtoolbar.c (main): Make "Show Arrow" default to true. Make one of the separators !draw and expand. Update for new highlight_drop_location() API. * gtk/gtktoolitem.[ch]: Remove "pack_end" property * gtk/gtktoolbar.h: Formatting fixes. * gtk/gtktoolbar.c: Remove "pack_end" child property. Allow separator tool items to expand. (logical_to_physical, physical_to_logical): Fix off-by-one errors (Fix #125472, Marco Pesenti Gritti) * gtk/gtkseparatortoolitem.[ch]: Add new "draw" property. (gtk_separator_tool_item_expose) only draw if "draw" is TRUE. Also return FALSE, not TRUE. (gtk_separator_too_item_{set|get}_property, (gtk_separator_tool_item_{set|get}_draw): new functions
Diffstat (limited to 'gtk/gtkseparatortoolitem.c')
-rw-r--r--gtk/gtkseparatortoolitem.c181
1 files changed, 157 insertions, 24 deletions
diff --git a/gtk/gtkseparatortoolitem.c b/gtk/gtkseparatortoolitem.c
index 34015b888b..5fcefc25d8 100644
--- a/gtk/gtkseparatortoolitem.c
+++ b/gtk/gtkseparatortoolitem.c
@@ -36,26 +36,48 @@
#define MENU_ID "gtk-separator-tool-item-menu-id"
-static void gtk_separator_tool_item_class_init (GtkSeparatorToolItemClass *class);
-static gboolean gtk_separator_tool_item_create_menu_proxy (GtkToolItem *item);
-static void gtk_separator_tool_item_size_request (GtkWidget *widget,
-
- GtkRequisition *requisition);
-static gboolean gtk_separator_tool_item_expose (GtkWidget *widget,
- GdkEventExpose *event);
-static void gtk_separator_tool_item_add (GtkContainer *container,
- GtkWidget *child);
-static GtkToolbarSpaceStyle get_space_style (GtkToolItem *tool_item);
-static gint get_space_size (GtkToolItem *tool_item);
+enum {
+ PROP_0,
+ PROP_DRAW
+};
+
+static void gtk_separator_tool_item_class_init (GtkSeparatorToolItemClass *class);
+static void gtk_separator_tool_item_init (GtkSeparatorToolItem *separator_item,
+ GtkSeparatorToolItemClass *class);
+static gboolean gtk_separator_tool_item_create_menu_proxy (GtkToolItem *item);
+static void gtk_separator_tool_item_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void gtk_separator_tool_item_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void gtk_separator_tool_item_size_request (GtkWidget *widget,
+ GtkRequisition *requisition);
+static gboolean gtk_separator_tool_item_expose (GtkWidget *widget,
+ GdkEventExpose *event);
+static void gtk_separator_tool_item_add (GtkContainer *container,
+ GtkWidget *child);
+static GtkToolbarSpaceStyle get_space_style (GtkToolItem *tool_item);
+static gint get_space_size (GtkToolItem *tool_item);
+
+
static GObjectClass *parent_class = NULL;
+#define GTK_SEPARATOR_TOOL_ITEM_GET_PRIVATE(obj)(G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_SEPARATOR_TOOL_ITEM, GtkSeparatorToolItemPrivate))
+
+struct _GtkSeparatorToolItemPrivate
+{
+ guint draw : 1;
+};
GType
gtk_separator_tool_item_get_type (void)
{
static GType type = 0;
-
+
if (!type)
{
static const GTypeInfo type_info =
@@ -68,9 +90,9 @@ gtk_separator_tool_item_get_type (void)
NULL,
sizeof (GtkSeparatorToolItem),
0, /* n_preallocs */
- (GInstanceInitFunc) NULL,
+ (GInstanceInitFunc) gtk_separator_tool_item_init,
};
-
+
type = g_type_register_static (GTK_TYPE_TOOL_ITEM,
"GtkSeparatorToolItem", &type_info, 0);
}
@@ -82,14 +104,14 @@ get_space_style (GtkToolItem *tool_item)
{
GtkToolbarSpaceStyle space_style = DEFAULT_SPACE_STYLE;
GtkWidget *parent = GTK_WIDGET (tool_item)->parent;
-
+
if (GTK_IS_TOOLBAR (parent))
{
gtk_widget_style_get (parent,
"space_style", &space_style,
NULL);
}
-
+
return space_style;
}
@@ -105,27 +127,49 @@ get_space_size (GtkToolItem *tool_item)
"space_size", &space_size,
NULL);
}
-
+
return space_size;
}
static void
gtk_separator_tool_item_class_init (GtkSeparatorToolItemClass *class)
{
+ GObjectClass *object_class;
GtkContainerClass *container_class;
GtkToolItemClass *toolitem_class;
GtkWidgetClass *widget_class;
-
+
parent_class = g_type_class_peek_parent (class);
+ object_class = (GObjectClass *)class;
container_class = (GtkContainerClass *)class;
toolitem_class = (GtkToolItemClass *)class;
widget_class = (GtkWidgetClass *)class;
+ object_class->set_property = gtk_separator_tool_item_set_property;
+ object_class->get_property = gtk_separator_tool_item_get_property;
widget_class->size_request = gtk_separator_tool_item_size_request;
widget_class->expose_event = gtk_separator_tool_item_expose;
toolitem_class->create_menu_proxy = gtk_separator_tool_item_create_menu_proxy;
-
+
container_class->add = gtk_separator_tool_item_add;
+
+ g_object_class_install_property (object_class,
+ PROP_DRAW,
+ g_param_spec_boolean ("draw",
+ _("Draw"),
+ _("Whether the separator is drawn, or just blank"),
+ TRUE,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (object_class, sizeof (GtkSeparatorToolItemPrivate));
+}
+
+static void
+gtk_separator_tool_item_init (GtkSeparatorToolItem *separator_item,
+ GtkSeparatorToolItemClass *class)
+{
+ separator_item->priv = GTK_SEPARATOR_TOOL_ITEM_GET_PRIVATE (separator_item);
+ separator_item->priv->draw = TRUE;
}
static void
@@ -148,12 +192,50 @@ gtk_separator_tool_item_create_menu_proxy (GtkToolItem *item)
}
static void
+gtk_separator_tool_item_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GtkSeparatorToolItem *item = GTK_SEPARATOR_TOOL_ITEM (object);
+
+ switch (prop_id)
+ {
+ case PROP_DRAW:
+ gtk_separator_tool_item_set_draw (item, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gtk_separator_tool_item_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GtkSeparatorToolItem *item = GTK_SEPARATOR_TOOL_ITEM (object);
+
+ switch (prop_id)
+ {
+ case PROP_DRAW:
+ g_value_set_boolean (value, gtk_separator_tool_item_get_draw (item));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
gtk_separator_tool_item_size_request (GtkWidget *widget,
GtkRequisition *requisition)
{
GtkToolItem *item = GTK_TOOL_ITEM (widget);
GtkOrientation orientation = gtk_tool_item_get_orientation (item);
-
+
if (orientation == GTK_ORIENTATION_HORIZONTAL)
{
requisition->width = get_space_size (item);
@@ -171,18 +253,20 @@ gtk_separator_tool_item_expose (GtkWidget *widget,
GdkEventExpose *event)
{
GtkToolItem *tool_item = GTK_TOOL_ITEM (widget);
+ GtkSeparatorToolItem *separator_tool_item = GTK_SEPARATOR_TOOL_ITEM (widget);
gint space_size;
GtkAllocation *allocation;
GtkOrientation orientation;
GdkRectangle *area;
- if (get_space_style (tool_item) == GTK_TOOLBAR_SPACE_LINE)
+ if (separator_tool_item->priv->draw &&
+ get_space_style (tool_item) == GTK_TOOLBAR_SPACE_LINE)
{
space_size = get_space_size (tool_item);
allocation = &(widget->allocation);
orientation = gtk_tool_item_get_orientation (tool_item);
area = &(event->area);
-
+
if (orientation == GTK_ORIENTATION_HORIZONTAL)
{
gtk_paint_vline (widget->style, widget->window,
@@ -207,7 +291,7 @@ gtk_separator_tool_item_expose (GtkWidget *widget,
}
}
- return TRUE;
+ return FALSE;
}
/**
@@ -223,9 +307,58 @@ GtkToolItem *
gtk_separator_tool_item_new (void)
{
GtkToolItem *self;
-
+
self = g_object_new (GTK_TYPE_SEPARATOR_TOOL_ITEM,
NULL);
return self;
}
+
+/**
+ * gtk_separator_tool_item_get_draw:
+ * @separator_tool_item: a #GtkSeparatorToolItem
+ *
+ * Returns whether @separator_tool_item is drawn as a
+ * line, or just blank. See gtk_separator_tool_item_set_draw().
+ *
+ * Return value: #TRUE if @separator_tool_item is drawn as a line, or just blank.
+ *
+ * Since: 2.4
+ **/
+gboolean
+gtk_separator_tool_item_get_draw (GtkSeparatorToolItem *separator_tool_item)
+{
+ g_return_val_if_fail (GTK_IS_SEPARATOR_TOOL_ITEM (separator_tool_item), FALSE);
+
+ return separator_tool_item->priv->draw;
+}
+
+/**
+ * gtk_separator_tool_item_set_draw:
+ * @separator_tool_item: a #GtkSeparatorToolItem
+ * @draw: whether @separator_tool_item is drawn as a vertical iln
+ *
+ * When @separator_tool_items is drawn as a vertical line, or just blank.
+ * Setting this #FALSE along with gtk_tool_item_set_expand() is useful
+ * to create an item that forces following items to the end of the toolbar.
+ *
+ * Since: 2.4
+ **/
+void
+gtk_separator_tool_item_set_draw (GtkSeparatorToolItem *separator_tool_item,
+ gboolean draw)
+{
+ g_return_if_fail (GTK_IS_SEPARATOR_TOOL_ITEM (separator_tool_item));
+
+ draw = draw != FALSE;
+
+ if (draw != separator_tool_item->priv->draw)
+ {
+ separator_tool_item->priv->draw = draw;
+
+ gtk_widget_queue_draw (GTK_WIDGET (separator_tool_item));
+
+ g_object_notify (G_OBJECT (separator_tool_item), "draw");
+ }
+}
+