Index: gtk/gtkwidget.c =================================================================== --- gtk/gtkwidget.c (revision 20818) +++ gtk/gtkwidget.c (working copy) @@ -154,7 +154,8 @@ PROP_HAS_TOOLTIP, PROP_TOOLTIP_MARKUP, PROP_TOOLTIP_TEXT, - PROP_WINDOW + PROP_WINDOW, + PROP_USE_TABS }; typedef struct _GtkStateData GtkStateData; @@ -689,6 +690,23 @@ GDK_TYPE_WINDOW, GTK_PARAM_READABLE)); + /** + * GtkWidget:use-tabs: + * + * The widget's main interface should use tabs. Tabs is a superior + * interface in many situations and this makes it easier for application + * developers to make their interfaces using a tabbed interface + * + * Since: 2.14 + */ + g_object_class_install_property (gobject_class, + PROP_USE_TABS, + g_param_spec_object ("use-tabs", + P_("Tabbed"), + P_("If widget's main interface should use tabs"), + G_BOOLEAN, + GTK_PARAM_READWRITE)); + widget_signals[SHOW] = g_signal_new (I_("show"), G_TYPE_FROM_CLASS (gobject_class), @@ -2512,6 +2530,9 @@ tmp = (tooltip_window != NULL || tooltip_markup != NULL); gtk_widget_real_set_has_tooltip (widget, tmp, FALSE); break; + case PROP_USE_TABS: + gtk_widget_set_use_tabs (value, g_value_get_boolean (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -2622,6 +2643,9 @@ case PROP_WINDOW: g_value_set_object (value, gtk_widget_get_window (widget)); break; + case PROP_USE_TABS: + g_value_set_boolean (value, gtk_widget_get_use_tabs (widget)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -9942,5 +9966,67 @@ return widget->window; } + +/** + * gtk_widget_set_use_tabs: + * @widget: a #GtkWidget + * @tabbed: whether or not @widget should use a tabbed interface. + * + * Sets the use-tabs property on @widget to @tabbed. See + * GtkWidget:use-tabs for more information. + * + * Since: 2.14 + */ +void +gtk_widget_set_use_tabs (GtkWidget *widget, + gboolean tabbed) +{ + g_return_if_fail (GTK_IS_WIDGET (widget)); + + if (widget->use_tabs != tabbed) + { + GtkWidget *notebook: + GtkWidget *parent; + + parent = gtk_widget_get_parent (widget); + + if (tabbed) + { + gtk_widget_remove (parent, widget); + + notebook = gtk_notebook_new (); + gtk_notebook_insert_page (notebook, + widget, + gtk_label_new ("Page 1"), + 0); + gtk_widget_show_all (notebook); + } + else + { + gtk_widget_set_parent (widget, gtk_widget_get_parent (parent)); + } + + widget->use_tabs = tabbed; + } + g_object_notify (G_OBJECT (widget), "use-tabs"); +} + + +/** + * gtk_widget_get_use_tabs: + * @widget: a #GtkWidget + * + * Returns: whether or not @widget should use a tabbed interface. + * + * Since: 2.14 + */ +gboolean +gtk_widget_get_use_tabs (GtkWidget *widget) +{ + g_return_if_fail (GTK_IS_WIDGET (widget)); + + return widget->use_tabs; +} + #define __GTK_WIDGET_C__ #include "gtkaliasdef.c" Index: gtk/gtkwidget.h =================================================================== --- gtk/gtkwidget.h (revision 20818) +++ gtk/gtkwidget.h (working copy) @@ -227,6 +227,8 @@ /* The widget's parent. */ GtkWidget *GSEAL (parent); + + gboolean use_tabs; }; struct _GtkWidgetClass Index: gtk/gtk.symbols =================================================================== --- gtk/gtk.symbols (revision 20818) +++ gtk/gtk.symbols (working copy) @@ -4708,6 +4708,7 @@ gtk_widget_get_tooltip_window gtk_widget_get_toplevel gtk_widget_get_type G_GNUC_CONST +gtk_widget_get_use_tabs gtk_widget_get_visual gtk_widget_grab_default gtk_widget_grab_focus @@ -4784,6 +4785,7 @@ gtk_widget_set_tooltip_markup gtk_widget_set_tooltip_text gtk_widget_set_tooltip_window +gtk_widget_set_use_tabs gtk_widget_shape_combine_mask gtk_widget_input_shape_combine_mask gtk_widget_show Index: ChangeLog =================================================================== --- ChangeLog (revision 20821) +++ ChangeLog (working copy) @@ -1,3 +1,14 @@ +2008-07-12 Johan Dahlin + + Bug XXXXXX - Make it easier to make a widget tabbed. + + * gtk/gtk.symbols: + * gtk/gtkwidget.c (gtk_widget_class_init), + (gtk_widget_set_property), (gtk_widget_get_property), + (gtk_widget_set_use_tabs), (gtk_widget_get_use_tabs): + * gtk/gtkwidget.h: + Add two new accessors for gtkwidget, set/get use-tabs. + 2008-07-11 Kristian Rietveld Bug 316087 - Resizing columns is chaotic