diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 9 | ||||
-rw-r--r-- | docs/reference/ChangeLog | 5 | ||||
-rw-r--r-- | docs/reference/gtk/tmpl/gtkuimanager.sgml | 49 | ||||
-rw-r--r-- | gtk/gtkuimanager.c | 20 |
6 files changed, 79 insertions, 22 deletions
@@ -1,3 +1,12 @@ +2005-02-08 Matthias Clasen <mclasen@redhat.com> + + * gtk/gtkuimanager.c (start_element_handler): Accept + the "expand" attribute and set a flag in the node if it + is set to "true". + (update_node): If the expand flag is set, make separator + toolitems non-drawn and expanding. (#166489, Christian Persch) + + 2005-02-05 Hans Breuer <hans@breuer.org> * gdk/makefile.msc gdk/win32/makefile.msc gtk/makefile.msc.in : diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 7d989873da..f7639c6057 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,12 @@ +2005-02-08 Matthias Clasen <mclasen@redhat.com> + + * gtk/gtkuimanager.c (start_element_handler): Accept + the "expand" attribute and set a flag in the node if it + is set to "true". + (update_node): If the expand flag is set, make separator + toolitems non-drawn and expanding. (#166489, Christian Persch) + + 2005-02-05 Hans Breuer <hans@breuer.org> * gdk/makefile.msc gdk/win32/makefile.msc gtk/makefile.msc.in : diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 7d989873da..f7639c6057 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,12 @@ +2005-02-08 Matthias Clasen <mclasen@redhat.com> + + * gtk/gtkuimanager.c (start_element_handler): Accept + the "expand" attribute and set a flag in the node if it + is set to "true". + (update_node): If the expand flag is set, make separator + toolitems non-drawn and expanding. (#166489, Christian Persch) + + 2005-02-05 Hans Breuer <hans@breuer.org> * gdk/makefile.msc gdk/win32/makefile.msc gtk/makefile.msc.in : diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog index 56308930ca..ae018f88f7 100644 --- a/docs/reference/ChangeLog +++ b/docs/reference/ChangeLog @@ -1,3 +1,8 @@ +2005-02-08 Matthias Clasen <mclasen@redhat.com> + + * gtk/tmpl/gtkuimanager.sgml: Mention the expanding + toolbar separators. + 2005-02-03 Matthias Clasen <mclasen@redhat.com> * gtk/gtk-sections.txt: Add gtk_stock_set_translate_func. diff --git a/docs/reference/gtk/tmpl/gtkuimanager.sgml b/docs/reference/gtk/tmpl/gtkuimanager.sgml index 9f82abf6d9..cda5c00fba 100644 --- a/docs/reference/gtk/tmpl/gtkuimanager.sgml +++ b/docs/reference/gtk/tmpl/gtkuimanager.sgml @@ -25,27 +25,28 @@ roughly described by the following DTD. <!ELEMENT toolitem EMPTY > <!ELEMENT separator EMPTY > <!ELEMENT accelerator EMPTY > -<!ATTLIST menubar name #IMPLIED - action #IMPLIED > -<!ATTLIST toolbar name #IMPLIED - action #IMPLIED > -<!ATTLIST popup name #IMPLIED - action #IMPLIED > -<!ATTLIST placeholder name #IMPLIED - action #IMPLIED > -<!ATTLIST separator name #IMPLIED - action #IMPLIED > -<!ATTLIST menu name #IMPLIED - action #REQUIRED - position (top|bot) #IMPLIED > -<!ATTLIST menuitem name #IMPLIED - action #REQUIRED - position (top|bot) #IMPLIED > -<!ATTLIST toolitem name #IMPLIED - action #REQUIRED - position (top|bot) #IMPLIED > -<!ATTLIST accelerator name #IMPLIED - action #REQUIRED > +<!ATTLIST menubar name #IMPLIED + action #IMPLIED > +<!ATTLIST toolbar name #IMPLIED + action #IMPLIED > +<!ATTLIST popup name #IMPLIED + action #IMPLIED > +<!ATTLIST placeholder name #IMPLIED + action #IMPLIED > +<!ATTLIST separator name #IMPLIED + action #IMPLIED + expand (true|false) #IMPLIED > +<!ATTLIST menu name #IMPLIED + action #REQUIRED + position (top|bot) #IMPLIED > +<!ATTLIST menuitem name #IMPLIED + action #REQUIRED + position (top|bot) #IMPLIED > +<!ATTLIST toolitem name #IMPLIED + action #REQUIRED + position (top|bot) #IMPLIED > +<!ATTLIST accelerator name #IMPLIED + action #REQUIRED > </programlisting> There are some additional restrictions beyond those specified in the DTD, e.g. every toolitem must have a toolbar in its anchestry and @@ -166,6 +167,12 @@ is a useful feature, since the merging of UI elements from multiple sources can make it hard or impossible to determine in advance whether a separator will end up in such an unfortunate position. </para> + +<para> +For separators in toolbars, you can set <literal>expand="true"</literal> to +turn them from a small, visible separator to an expanding, invisible one. +Toolitems following an expanding separator are effectively right-aligned. +</para> </refsect2> <refsect2> <title>Empty Menus</title> diff --git a/gtk/gtkuimanager.c b/gtk/gtkuimanager.c index 439cfc8ec3..a2dc4ac611 100644 --- a/gtk/gtkuimanager.c +++ b/gtk/gtkuimanager.c @@ -76,6 +76,7 @@ struct _Node { GList *uifiles; guint dirty : 1; + guint expand : 1; /* used for separators */ }; #define GTK_UI_MANAGER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_UI_MANAGER, GtkUIManagerPrivate)) @@ -1102,6 +1103,7 @@ start_element_handler (GMarkupParseContext *context, const gchar *action; GQuark action_quark; gboolean top; + gboolean expand; gboolean raise_error = TRUE; @@ -1125,6 +1127,10 @@ start_element_handler (GMarkupParseContext *context, { top = !strcmp (attribute_values[i], "top"); } + else if (!strcmp (attribute_names[i], "expand")) + { + expand = !strcmp (attribute_values[i], "true"); + } else { gint line_number, char_number; @@ -1282,6 +1288,8 @@ start_element_handler (GMarkupParseContext *context, NODE_TYPE_SEPARATOR, TRUE, top); + NODE_INFO (node)->expand = expand; + if (NODE_INFO (node)->action_name == 0) NODE_INFO (node)->action_name = action_quark; @@ -2467,6 +2475,7 @@ update_node (GtkUIManager *self, { GtkWidget *toolbar; gint pos; + gint separator_mode; if (GTK_IS_SEPARATOR_TOOL_ITEM (info->proxy)) { @@ -2484,9 +2493,18 @@ update_node (GtkUIManager *self, g_object_ref (info->proxy); gtk_object_sink (GTK_OBJECT (info->proxy)); gtk_widget_set_no_show_all (info->proxy, TRUE); + if (info->expand) + { + gtk_tool_item_set_expand (GTK_TOOL_ITEM (item), TRUE); + gtk_separator_tool_item_set_draw (item, FALSE); + separator_mode = SEPARATOR_MODE_VISIBLE; + } + else + separator_mode = SEPARATOR_MODE_SMART; + g_object_set_data (G_OBJECT (info->proxy), "gtk-separator-mode", - GINT_TO_POINTER (SEPARATOR_MODE_SMART)); + GINT_TO_POINTER (separator_mode)); gtk_widget_show (info->proxy); } } |