diff options
author | Soeren Sandmann <sandmann@daimi.au.dk> | 2003-10-25 19:58:51 +0000 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@src.gnome.org> | 2003-10-25 19:58:51 +0000 |
commit | 356df7f65002a47516b542ace1fe88badf9d4965 (patch) | |
tree | effb19a2188dff1b081eb353c61afa2539db64fa /gtk/gtkseparatortoolitem.c | |
parent | 3a7a64aa46ea1c312c06e17a177c81fddfa93683 (diff) | |
download | gtk+-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.c | 181 |
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"); + } +} + |