diff options
author | Matthias Clasen <mclasen@redhat.com> | 2019-02-04 12:44:55 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2019-02-04 12:44:55 -0500 |
commit | 51207489813ebef7f143dcded70fab4a3edff612 (patch) | |
tree | e45da36bd09946f2dc21d44ab78510bf28c6c6c4 /gtk | |
parent | 25e199e7b789894f020ec740ff4a9419207f6a61 (diff) | |
download | gtk+-51207489813ebef7f143dcded70fab4a3edff612.tar.gz |
Drop GtkButtonBox
This widget does not seem worth keeping,
and we want to get rid of child properties.
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtk-autocleanups.h | 1 | ||||
-rw-r--r-- | gtk/gtk.h | 1 | ||||
-rw-r--r-- | gtk/gtkaboutdialog.c | 1 | ||||
-rw-r--r-- | gtk/gtkappchooserdialog.c | 1 | ||||
-rw-r--r-- | gtk/gtkbbox.c | 1090 | ||||
-rw-r--r-- | gtk/gtkbbox.h | 130 | ||||
-rw-r--r-- | gtk/gtkbuilder.c | 2 | ||||
-rw-r--r-- | gtk/gtkdialog.c | 4 | ||||
-rw-r--r-- | gtk/gtkenums.h | 3 | ||||
-rw-r--r-- | gtk/gtkinfobar.c | 8 | ||||
-rw-r--r-- | gtk/gtkmessagedialog.c | 4 | ||||
-rw-r--r-- | gtk/meson.build | 2 | ||||
-rw-r--r-- | gtk/ui/gtkappchooserdialog.ui | 3 | ||||
-rw-r--r-- | gtk/ui/gtkdialog.ui | 4 | ||||
-rw-r--r-- | gtk/ui/gtkfilechooserdialog.ui | 3 | ||||
-rw-r--r-- | gtk/ui/gtkinfobar.ui | 4 |
16 files changed, 10 insertions, 1251 deletions
diff --git a/gtk/gtk-autocleanups.h b/gtk/gtk-autocleanups.h index 118779d1fa..8966a3dca1 100644 --- a/gtk/gtk-autocleanups.h +++ b/gtk/gtk-autocleanups.h @@ -36,7 +36,6 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkBox, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkBuildable, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkBuilder, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkButton, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkButtonBox, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkCalendar, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkCellArea, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkCellAreaBox, g_object_unref) @@ -44,7 +44,6 @@ #include <gtk/gtkapplicationwindow.h> #include <gtk/gtkaspectframe.h> #include <gtk/gtkassistant.h> -#include <gtk/gtkbbox.h> #include <gtk/gtkbin.h> #include <gtk/gtkbindings.h> #include <gtk/gtkborder.h> diff --git a/gtk/gtkaboutdialog.c b/gtk/gtkaboutdialog.c index 6503f4ddaf..0fecd74e30 100644 --- a/gtk/gtkaboutdialog.c +++ b/gtk/gtkaboutdialog.c @@ -34,7 +34,6 @@ #include "gtkaboutdialog.h" #include "gtkbutton.h" -#include "gtkbbox.h" #include "gtkdialog.h" #include "gtkgrid.h" #include "gtkbox.h" diff --git a/gtk/gtkappchooserdialog.c b/gtk/gtkappchooserdialog.c index ab382e9d02..80143686ec 100644 --- a/gtk/gtkappchooserdialog.c +++ b/gtk/gtkappchooserdialog.c @@ -48,7 +48,6 @@ #include "gtkmessagedialog.h" #include "gtksettings.h" #include "gtklabel.h" -#include "gtkbbox.h" #include "gtkbutton.h" #include "gtkentry.h" #include "gtktogglebutton.h" diff --git a/gtk/gtkbbox.c b/gtk/gtkbbox.c deleted file mode 100644 index c9bccc0c6a..0000000000 --- a/gtk/gtkbbox.c +++ /dev/null @@ -1,1090 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -/* - * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -/** - * SECTION:gtkbbox - * @Short_description: A container for arranging buttons - * @Title: GtkButtonBox - * - * A button box should be used to provide a consistent layout of buttons - * throughout your application. The layout/spacing can be altered by the - * programmer, or if desired, by the user to alter the “feel” of a - * program to a small degree. - * - * gtk_button_box_get_layout() and gtk_button_box_set_layout() retrieve and - * alter the method used to spread the buttons in a button box across the - * container, respectively. - * - * The main purpose of GtkButtonBox is to make sure the children have all the - * same size. GtkButtonBox gives all children the same size, but it does allow - * 'outliers' to keep their own larger size. - * - * To exempt individual children from homogeneous sizing regardless of their - * 'outlier' status, you can set the non-homogeneous child - * property. - * - * # CSS nodes - * - * GtkButtonBox uses a single CSS node with name buttonbox. - */ - -#include "config.h" - -#include "gtkbbox.h" - -#include "gtkboxprivate.h" -#include "gtkorientable.h" -#include "gtktypebuiltins.h" -#include "gtkprivate.h" -#include "gtksizerequest.h" -#include "gtkwidgetprivate.h" -#include "gtkcontainerprivate.h" -#include "gtkintl.h" - - -struct _GtkButtonBoxPrivate -{ - GtkButtonBoxStyle layout_style; -}; - -enum { - PROP_0, - PROP_LAYOUT_STYLE -}; - -enum { - CHILD_PROP_0, - CHILD_PROP_SECONDARY, - CHILD_PROP_NONHOMOGENEOUS -}; - -#define GTK_BOX_SECONDARY_CHILD "gtk-box-secondary-child" -#define GTK_BOX_NON_HOMOGENEOUS "gtk-box-non-homogeneous" - -static void gtk_button_box_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gtk_button_box_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); -static void gtk_button_box_measure (GtkWidget *widget, - GtkOrientation orientation, - int for_size, - int *minimum, - int *natural, - int *minimum_baseline, - int *natural_baseline); -static void gtk_button_box_size_allocate (GtkWidget *widget, - int width, - int height, - int baseline); -static void gtk_button_box_remove (GtkContainer *container, - GtkWidget *widget); -static void gtk_button_box_set_child_property (GtkContainer *container, - GtkWidget *child, - guint property_id, - const GValue *value, - GParamSpec *pspec); -static void gtk_button_box_get_child_property (GtkContainer *container, - GtkWidget *child, - guint property_id, - GValue *value, - GParamSpec *pspec); - -#define DEFAULT_LAYOUT_STYLE GTK_BUTTONBOX_EDGE - -G_DEFINE_TYPE_WITH_PRIVATE (GtkButtonBox, gtk_button_box, GTK_TYPE_BOX) - -static void -gtk_button_box_class_init (GtkButtonBoxClass *class) -{ - GtkWidgetClass *widget_class; - GObjectClass *gobject_class; - GtkContainerClass *container_class; - - gobject_class = G_OBJECT_CLASS (class); - widget_class = (GtkWidgetClass*) class; - container_class = (GtkContainerClass*) class; - - gobject_class->set_property = gtk_button_box_set_property; - gobject_class->get_property = gtk_button_box_get_property; - - widget_class->measure = gtk_button_box_measure; - widget_class->size_allocate = gtk_button_box_size_allocate; - - container_class->remove = gtk_button_box_remove; - container_class->set_child_property = gtk_button_box_set_child_property; - container_class->get_child_property = gtk_button_box_get_child_property; - - g_object_class_install_property (gobject_class, - PROP_LAYOUT_STYLE, - g_param_spec_enum ("layout-style", - P_("Layout style"), - P_("How to lay out the buttons in the box. Possible values are: spread, edge, start and end"), - GTK_TYPE_BUTTON_BOX_STYLE, - DEFAULT_LAYOUT_STYLE, - GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - - gtk_container_class_install_child_property (container_class, - CHILD_PROP_SECONDARY, - g_param_spec_boolean ("secondary", - P_("Secondary"), - P_("If TRUE, the child appears in a secondary group of children, suitable for, e.g., help buttons"), - FALSE, - GTK_PARAM_READWRITE)); - - gtk_container_class_install_child_property (container_class, - CHILD_PROP_NONHOMOGENEOUS, - g_param_spec_boolean ("non-homogeneous", - P_("Non-Homogeneous"), - P_("If TRUE, the child will not be subject to homogeneous sizing"), - FALSE, - GTK_PARAM_READWRITE)); - - gtk_widget_class_set_css_name (widget_class, I_("buttonbox")); -} - -static void -gtk_button_box_init (GtkButtonBox *button_box) -{ - button_box->priv = gtk_button_box_get_instance_private (button_box); - button_box->priv->layout_style = DEFAULT_LAYOUT_STYLE; - - gtk_box_set_spacing (GTK_BOX (button_box), 0); -} - -static void -gtk_button_box_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - switch (prop_id) - { - case PROP_LAYOUT_STYLE: - gtk_button_box_set_layout (GTK_BUTTON_BOX (object), - g_value_get_enum (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gtk_button_box_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GtkButtonBoxPrivate *priv = GTK_BUTTON_BOX (object)->priv; - - switch (prop_id) - { - case PROP_LAYOUT_STYLE: - g_value_set_enum (value, priv->layout_style); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gtk_button_box_set_child_property (GtkContainer *container, - GtkWidget *child, - guint property_id, - const GValue *value, - GParamSpec *pspec) -{ - switch (property_id) - { - case CHILD_PROP_SECONDARY: - gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (container), child, - g_value_get_boolean (value)); - break; - case CHILD_PROP_NONHOMOGENEOUS: - gtk_button_box_set_child_non_homogeneous (GTK_BUTTON_BOX (container), child, - g_value_get_boolean (value)); - break; - default: - GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec); - break; - } -} - -static void -gtk_button_box_get_child_property (GtkContainer *container, - GtkWidget *child, - guint property_id, - GValue *value, - GParamSpec *pspec) -{ - switch (property_id) - { - case CHILD_PROP_SECONDARY: - g_value_set_boolean (value, - gtk_button_box_get_child_secondary (GTK_BUTTON_BOX (container), - child)); - break; - case CHILD_PROP_NONHOMOGENEOUS: - g_value_set_boolean (value, - gtk_button_box_get_child_non_homogeneous (GTK_BUTTON_BOX (container), - child)); - break; - default: - GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec); - break; - } -} - -static void -gtk_button_box_remove (GtkContainer *container, - GtkWidget *widget) -{ - /* clear is_secondary and nonhomogeneous flag in case the widget - * is added to another container - */ - gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (container), widget, FALSE); - gtk_button_box_set_child_non_homogeneous (GTK_BUTTON_BOX (container), widget, FALSE); - - GTK_CONTAINER_CLASS (gtk_button_box_parent_class)->remove (container, widget); -} - -/** - * gtk_button_box_set_layout: - * @widget: a #GtkButtonBox - * @layout_style: the new layout style - * - * Changes the way buttons are arranged in their container. - */ -void -gtk_button_box_set_layout (GtkButtonBox *widget, - GtkButtonBoxStyle layout_style) -{ - GtkButtonBoxPrivate *priv; - - g_return_if_fail (GTK_IS_BUTTON_BOX (widget)); - - priv = widget->priv; - - if (priv->layout_style != layout_style) - { - priv->layout_style = layout_style; - - if (priv->layout_style == GTK_BUTTONBOX_EXPAND) - { - gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (widget)), "linked"); - gtk_box_set_spacing (GTK_BOX (widget), 0); - gtk_box_set_homogeneous (GTK_BOX (widget), TRUE); - } - else - { - gtk_style_context_remove_class (gtk_widget_get_style_context (GTK_WIDGET (widget)), "linked"); - gtk_box_set_homogeneous (GTK_BOX (widget), FALSE); - } - - g_object_notify (G_OBJECT (widget), "layout-style"); - gtk_widget_queue_resize (GTK_WIDGET (widget)); - } -} - -/** - * gtk_button_box_get_layout: - * @widget: a #GtkButtonBox - * - * Retrieves the method being used to arrange the buttons in a button box. - * - * Returns: the method used to lay out buttons in @widget. - */ -GtkButtonBoxStyle -gtk_button_box_get_layout (GtkButtonBox *widget) -{ - g_return_val_if_fail (GTK_IS_BUTTON_BOX (widget), DEFAULT_LAYOUT_STYLE); - - return widget->priv->layout_style; -} - -/** - * gtk_button_box_get_child_secondary: - * @widget: a #GtkButtonBox - * @child: a child of @widget - * - * Returns whether @child should appear in a secondary group of children. - * - * Returns: whether @child should appear in a secondary group of children. - **/ -gboolean -gtk_button_box_get_child_secondary (GtkButtonBox *widget, - GtkWidget *child) -{ - g_return_val_if_fail (GTK_IS_BUTTON_BOX (widget), FALSE); - g_return_val_if_fail (GTK_IS_WIDGET (child), FALSE); - - return (g_object_get_data (G_OBJECT (child), GTK_BOX_SECONDARY_CHILD) != NULL); -} - -/** - * gtk_button_box_set_child_secondary: - * @widget: a #GtkButtonBox - * @child: a child of @widget - * @is_secondary: if %TRUE, the @child appears in a secondary group of the - * button box. - * - * Sets whether @child should appear in a secondary group of children. - * A typical use of a secondary child is the help button in a dialog. - * - * This group appears after the other children if the style - * is %GTK_BUTTONBOX_START, %GTK_BUTTONBOX_SPREAD or - * %GTK_BUTTONBOX_EDGE, and before the other children if the style - * is %GTK_BUTTONBOX_END. For horizontal button boxes, the definition - * of before/after depends on direction of the widget (see - * gtk_widget_set_direction()). If the style is %GTK_BUTTONBOX_START - * or %GTK_BUTTONBOX_END, then the secondary children are aligned at - * the other end of the button box from the main children. For the - * other styles, they appear immediately next to the main children. - **/ -void -gtk_button_box_set_child_secondary (GtkButtonBox *widget, - GtkWidget *child, - gboolean is_secondary) -{ - GtkButtonBox *bbox; - - g_return_if_fail (GTK_IS_BUTTON_BOX (widget)); - g_return_if_fail (GTK_IS_WIDGET (child)); - g_return_if_fail (gtk_widget_get_parent (child) == GTK_WIDGET (widget)); - - bbox = GTK_BUTTON_BOX (widget); - - g_object_set_data (G_OBJECT (child), - GTK_BOX_SECONDARY_CHILD, - is_secondary ? GINT_TO_POINTER (1) : NULL); - gtk_widget_child_notify (child, "secondary"); - - if (bbox->priv->layout_style == GTK_BUTTONBOX_EXPAND) - gtk_box_reorder_child_after (GTK_BOX (bbox), child, is_secondary ? NULL : gtk_widget_get_last_child (GTK_WIDGET (bbox))); - - if (gtk_widget_get_visible (GTK_WIDGET (widget)) && - gtk_widget_get_visible (child)) - gtk_widget_queue_resize (child); -} - -/* Ask children how much space they require and round up - * to match minimum size and internal padding. - * Returns the size each single child should have. - */ -static void -gtk_button_box_child_requisition (GtkWidget *widget, - gint *nvis_children, - gint *nvis_secondaries, - gint **widths, - gint **heights, - gint **baselines, - gint *baseline, - gint *baseline_height) -{ - GtkButtonBox *bbox; - GList *children, *list; - gint nchildren; - gint nsecondaries; - gint needed_width; - gint needed_height; - gint needed_above, needed_below; - gint avg_w, avg_h; - GtkRequisition child_requisition; - gint ipad_w; - gint ipad_h; - gboolean homogeneous; - gint i; - gint max_above, max_below, child_baseline; - GtkOrientation orientation; - gboolean have_baseline; - - g_return_if_fail (GTK_IS_BUTTON_BOX (widget)); - - bbox = GTK_BUTTON_BOX (widget); - - orientation = gtk_orientable_get_orientation (GTK_ORIENTABLE (widget)); - homogeneous = gtk_box_get_homogeneous (GTK_BOX (widget)); - - - nchildren = 0; - nsecondaries = 0; - list = children = _gtk_box_get_children (GTK_BOX (bbox)); - needed_width = 0; - needed_height = 0; - needed_above = 0; - needed_below = 0; - ipad_w = 0; - ipad_h = 0; - - have_baseline = FALSE; - max_above = max_below = 0; - avg_w = avg_h = 0; - for (children = list; children != NULL; children = children->next) - { - GtkWidget *child; - - child = children->data; - - if (gtk_widget_get_visible (child)) - { - nchildren += 1; - _gtk_widget_get_preferred_size_and_baseline (child, - &child_requisition, NULL, &child_baseline, NULL); - if (orientation == GTK_ORIENTATION_HORIZONTAL && - gtk_widget_get_valign (child) == GTK_ALIGN_BASELINE && - child_baseline != -1) - { - have_baseline = TRUE; - max_above = MAX (max_above, child_baseline); - max_below = MAX (max_below , child_requisition.height + ipad_h - (child_baseline)); - } - avg_w += child_requisition.width + ipad_w; - avg_h += child_requisition.height + ipad_h; - } - } - avg_w /= MAX (nchildren, 1); - avg_h /= MAX (nchildren, 1); - - if (baseline) - *baseline = have_baseline ? max_above : -1; - if (baseline_height) - *baseline_height = max_above + max_below; - - *widths = g_new (gint, nchildren); - *heights = g_new (gint, nchildren); - *baselines = g_new (gint, nchildren); - - i = 0; - children = list; - while (children) - { - GtkWidget *child; - gboolean is_secondary; - gboolean non_homogeneous; - - child = children->data; - children = children->next; - - if (gtk_widget_get_visible (child)) - { - is_secondary = gtk_button_box_get_child_secondary (bbox, child); - non_homogeneous = gtk_button_box_get_child_non_homogeneous (bbox, child); - - if (is_secondary) - nsecondaries++; - - _gtk_widget_get_preferred_size_and_baseline (child, - &child_requisition, NULL, &child_baseline, NULL); - - if (homogeneous || - (!non_homogeneous && (child_requisition.width + ipad_w < avg_w * 1.5))) - { - (*widths)[i] = -1; - if (child_requisition.width + ipad_w > needed_width) - needed_width = child_requisition.width + ipad_w; - } - else - { - (*widths)[i] = child_requisition.width + ipad_w; - } - - (*baselines)[i] = -1; - - if (homogeneous || - (!non_homogeneous && (child_requisition.height + ipad_h < avg_h * 1.5))) - { - (*heights)[i] = -1; - - if (orientation == GTK_ORIENTATION_HORIZONTAL && - gtk_widget_get_valign (child) == GTK_ALIGN_BASELINE && - child_baseline != -1) - { - (*baselines)[i] = child_baseline; - - if (child_baseline > needed_above) - needed_above = child_baseline; - if (child_requisition.height - child_baseline > needed_below) - needed_below = child_requisition.height - child_baseline; - } - else - { - if (child_requisition.height + ipad_h > needed_height) - needed_height = child_requisition.height + ipad_h; - } - } - else - { - (*heights)[i] = child_requisition.height + ipad_h; - - if (orientation == GTK_ORIENTATION_HORIZONTAL && - gtk_widget_get_valign (child) == GTK_ALIGN_BASELINE && - child_baseline != -1) - (*baselines)[i] = child_baseline; - } - - i++; - } - } - - g_list_free (list); - - needed_height = MAX (needed_height, needed_above + needed_below); - - for (i = 0; i < nchildren; i++) - { - if ((*widths)[i] == -1) - (*widths)[i] = needed_width; - if ((*heights)[i] == -1) - { - (*heights)[i] = needed_height; - if ((*baselines)[i] != -1) - (*baselines)[i] = needed_above; - } - } - - if (nvis_children) - *nvis_children = nchildren; - - if (nvis_secondaries) - *nvis_secondaries = nsecondaries; -} - -static void -gtk_button_box_size_request (GtkWidget *widget, - GtkRequisition *requisition, - gint *baseline) -{ - GtkButtonBoxPrivate *priv; - GtkButtonBox *bbox; - gint nvis_children; - gint max_size, max_above, max_below; - gint total_size; - gint spacing; - GtkOrientation orientation; - gint *widths; - gint *heights; - gint *baselines; - gint i; - - if (baseline) - *baseline = -1; - - bbox = GTK_BUTTON_BOX (widget); - priv = bbox->priv; - - orientation = gtk_orientable_get_orientation (GTK_ORIENTABLE (widget)); - spacing = gtk_box_get_spacing (GTK_BOX (widget)); - - gtk_button_box_child_requisition (widget, - &nvis_children, - NULL, - &widths, &heights, &baselines, baseline, NULL); - - max_size = max_above = max_below = 0; - total_size = 0; - for (i = 0; i < nvis_children; i++) - { - if (orientation == GTK_ORIENTATION_HORIZONTAL) - { - total_size += widths[i]; - if (baselines[i] == -1) - max_size = MAX (max_size, heights[i]); - else - { - max_above = MAX (max_above, baselines[i]); - max_below = MAX (max_below, heights[i] - baselines[i]); - } - } - else - { - total_size += heights[i]; - max_size = MAX (max_size, widths[i]); - } - } - g_free (widths); - g_free (heights); - g_free (baselines); - - max_size = MAX (max_size, max_above + max_below); - - switch (gtk_box_get_baseline_position (GTK_BOX (widget))) - { - default: - case GTK_BASELINE_POSITION_TOP: - break; - case GTK_BASELINE_POSITION_CENTER: - if (baseline != NULL && *baseline != -1) - *baseline += (max_size - (max_above + max_below)) / 2; - break; - case GTK_BASELINE_POSITION_BOTTOM: - if (baseline != NULL && *baseline != -1) - *baseline += max_size - (max_above + max_below); - break; - } - - if (nvis_children == 0) - { - requisition->width = 0; - requisition->height = 0; - } - else - { - switch (priv->layout_style) - { - case GTK_BUTTONBOX_SPREAD: - if (orientation == GTK_ORIENTATION_HORIZONTAL) - requisition->width = total_size + ((nvis_children + 1)*spacing); - else - requisition->height = total_size + ((nvis_children + 1)*spacing); - - break; - case GTK_BUTTONBOX_EDGE: - case GTK_BUTTONBOX_START: - case GTK_BUTTONBOX_END: - case GTK_BUTTONBOX_CENTER: - case GTK_BUTTONBOX_EXPAND: - if (orientation == GTK_ORIENTATION_HORIZONTAL) - requisition->width = total_size + ((nvis_children - 1)*spacing); - else - requisition->height = total_size + ((nvis_children - 1)*spacing); - - break; - default: - g_assert_not_reached (); - break; - } - - if (orientation == GTK_ORIENTATION_HORIZONTAL) - requisition->height = max_size; - else - requisition->width = max_size; - } -} - -static void -gtk_button_box_measure (GtkWidget *widget, - GtkOrientation orientation, - int for_size, - int *minimum, - int *natural, - int *minimum_baseline, - int *natural_baseline) -{ - GtkButtonBoxPrivate *priv = gtk_button_box_get_instance_private (GTK_BUTTON_BOX (widget)); - - if (priv->layout_style == GTK_BUTTONBOX_EXPAND) - { - GTK_WIDGET_CLASS (gtk_button_box_parent_class)->measure (widget, orientation, for_size, - minimum, natural, - minimum_baseline, natural_baseline); - } - else - { - GtkRequisition requisition; - int baseline; - int *pb; - - if (minimum_baseline || natural_baseline) - pb = &baseline; - else - pb = NULL; - - gtk_button_box_size_request (widget, &requisition, pb); - - if (orientation == GTK_ORIENTATION_HORIZONTAL) - *minimum = *natural = requisition.width; - else - *minimum = *natural = requisition.height; - - if (orientation == GTK_ORIENTATION_VERTICAL) - { - if (minimum_baseline) - *minimum_baseline = baseline; - if (natural_baseline) - *natural_baseline = baseline; - } - } -} - -static void -gtk_button_box_size_allocate (GtkWidget *widget, - int width, - int height, - int baseline) -{ - GtkButtonBox *bbox = GTK_BUTTON_BOX (widget); - GtkButtonBoxPrivate *priv = bbox->priv; - GList *children, *list; - GtkAllocation child_allocation; - gint nvis_children; - gint n_primaries; - gint n_secondaries; - gint x = 0; - gint y = 0; - gint secondary_x = 0; - gint secondary_y = 0; - gint childspacing = 0; - gint spacing; - GtkOrientation orientation; - gint *widths; - gint *heights; - gint *baselines; - gint *sizes; - gint primary_size; - gint secondary_size; - gint total_size; - gint baseline_height; - gint child_baseline; - gint i; - - if (priv->layout_style == GTK_BUTTONBOX_EXPAND) - { - GTK_WIDGET_CLASS (gtk_button_box_parent_class)->size_allocate (widget, - width, height, - baseline); - return; - } - - orientation = gtk_orientable_get_orientation (GTK_ORIENTABLE (widget)); - spacing = gtk_box_get_spacing (GTK_BOX (widget)); - - gtk_button_box_child_requisition (widget, - &nvis_children, - &n_secondaries, - &widths, &heights, &baselines, &baseline, &baseline_height); - - if (baseline != -1) - { - /* TODO: modify baseline based on baseline_pos && allocated_baseline*/ - switch (gtk_box_get_baseline_position (GTK_BOX (widget))) - { - case GTK_BASELINE_POSITION_TOP: - default: - /* keep baseline as is */ - break; - case GTK_BASELINE_POSITION_CENTER: - baseline = baseline + (height - baseline_height) / 2; - break; - case GTK_BASELINE_POSITION_BOTTOM: - baseline = height - (baseline_height - baseline); - break; - } - } - - n_primaries = nvis_children - n_secondaries; - primary_size = 0; - secondary_size = 0; - if (orientation == GTK_ORIENTATION_HORIZONTAL) - sizes = widths; - else - sizes = heights; - - i = 0; - list = children = _gtk_box_get_children (GTK_BOX (widget)); - while (children) - { - GtkWidget *child; - - child = children->data; - children = children->next; - - if (gtk_widget_get_visible (child)) - { - if (gtk_button_box_get_child_secondary (bbox, child)) - secondary_size += sizes[i]; - else - primary_size += sizes[i]; - i++; - } - } - total_size = primary_size + secondary_size; - - switch (priv->layout_style) - { - case GTK_BUTTONBOX_SPREAD: - - if (orientation == GTK_ORIENTATION_HORIZONTAL) - { - childspacing = (width - total_size) / (nvis_children + 1); - x = childspacing; - secondary_x = x + primary_size + n_primaries * childspacing; - } - else - { - childspacing = (height - total_size) / (nvis_children + 1); - y = childspacing; - secondary_y = y + primary_size + n_primaries * childspacing; - } - - break; - - case GTK_BUTTONBOX_EDGE: - - if (orientation == GTK_ORIENTATION_HORIZONTAL) - { - if (nvis_children >= 2) - { - childspacing = (width - total_size) / (nvis_children - 1); - x = 0; - secondary_x = x + primary_size + n_primaries * childspacing; - } - else if (nvis_children == 1) - { - /* one child, just center */ - childspacing = width; - x = secondary_x = (width - widths[0]) / 2; - } - else - { - /* zero children, meh */ - childspacing = width; - x = secondary_x = width / 2; - } - } - else - { - if (nvis_children >= 2) - { - childspacing = (height - total_size) / (nvis_children - 1); - y = 0; - secondary_y = y + primary_size + n_primaries * childspacing; - } - else if (nvis_children == 1) - { - /* one child, just center */ - childspacing = height; - y = secondary_y = 0 - + (height - heights[0]) / 2; - } - else - { - /* zero children, meh */ - childspacing = height; - y = secondary_y = 0 + height / 2; - } - } - - break; - - case GTK_BUTTONBOX_START: - - if (orientation == GTK_ORIENTATION_HORIZONTAL) - { - childspacing = spacing; - x = 0; - secondary_x = 0 + width - - secondary_size - spacing * (n_secondaries - 1); - } - else - { - childspacing = spacing; - y = 0; - secondary_y = 0 + height - - secondary_size - spacing * (n_secondaries - 1); - } - - break; - - case GTK_BUTTONBOX_END: - - if (orientation == GTK_ORIENTATION_HORIZONTAL) - { - childspacing = spacing; - x = 0 + width - - primary_size - spacing * (n_primaries - 1); - secondary_x = 0; - } - else - { - childspacing = spacing; - y = 0 + height - - primary_size - spacing * (n_primaries - 1); - secondary_y = 0; - } - - break; - - case GTK_BUTTONBOX_CENTER: - - if (orientation == GTK_ORIENTATION_HORIZONTAL) - { - childspacing = spacing; - x = 0 + - (width - - (primary_size + spacing * (n_primaries - 1))) / 2 - + (secondary_size + n_secondaries * spacing) / 2; - secondary_x = 0; - } - else - { - childspacing = spacing; - y = 0 + - (height - - (primary_size + spacing * (n_primaries - 1))) / 2 - + (secondary_size + n_secondaries * spacing) / 2; - secondary_y = 0; - } - - break; - - case GTK_BUTTONBOX_EXPAND: - default: - g_assert_not_reached (); - break; - } - - children = list; - i = 0; - while (children) - { - GtkWidget *child; - - child = children->data; - children = children->next; - - if (gtk_widget_get_visible (child)) - { - child_allocation.width = widths[i]; - child_allocation.height = heights[i]; - child_baseline = -1; - - if (orientation == GTK_ORIENTATION_HORIZONTAL) - { - if (baselines[i] != -1) - { - child_allocation.y = 0 + baseline - baselines[i]; - child_baseline = baselines[i]; - } - else - child_allocation.y = 0 + (height - child_allocation.height) / 2; - - if (gtk_button_box_get_child_secondary (bbox, child)) - { - child_allocation.x = secondary_x; - secondary_x += child_allocation.width + childspacing; - } - else - { - child_allocation.x = x; - x += child_allocation.width + childspacing; - } - - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - child_allocation.x = (0 + width) - - (child_allocation.x + child_allocation.width - 0); - } - else - { - child_allocation.x = 0 + (width - child_allocation.width) / 2; - - if (gtk_button_box_get_child_secondary (bbox, child)) - { - child_allocation.y = secondary_y; - secondary_y += child_allocation.height + childspacing; - } - else - { - child_allocation.y = y; - y += child_allocation.height + childspacing; - } - } - - gtk_widget_size_allocate (child, &child_allocation, child_baseline); - i++; - } - } - - g_list_free (list); - g_free (widths); - g_free (heights); - g_free (baselines); -} - -/** - * gtk_button_box_new: - * @orientation: the box's orientation. - * - * Creates a new #GtkButtonBox. - * - * Returns: a new #GtkButtonBox. - */ -GtkWidget * -gtk_button_box_new (GtkOrientation orientation) -{ - return g_object_new (GTK_TYPE_BUTTON_BOX, - "orientation", orientation, - NULL); -} - -/** - * gtk_button_box_get_child_non_homogeneous: - * @widget: a #GtkButtonBox - * @child: a child of @widget - * - * Returns whether the child is exempted from homogeneous - * sizing. - * - * Returns: %TRUE if the child is not subject to homogeneous sizing - */ -gboolean -gtk_button_box_get_child_non_homogeneous (GtkButtonBox *widget, - GtkWidget *child) -{ - g_return_val_if_fail (GTK_IS_BUTTON_BOX (widget), FALSE); - g_return_val_if_fail (GTK_IS_WIDGET (child), FALSE); - - return (g_object_get_data (G_OBJECT (child), GTK_BOX_NON_HOMOGENEOUS) != NULL); -} - -/** - * gtk_button_box_set_child_non_homogeneous: - * @widget: a #GtkButtonBox - * @child: a child of @widget - * @non_homogeneous: the new value - * - * Sets whether the child is exempted from homogeneous sizing. - */ -void -gtk_button_box_set_child_non_homogeneous (GtkButtonBox *widget, - GtkWidget *child, - gboolean non_homogeneous) -{ - g_return_if_fail (GTK_IS_BUTTON_BOX (widget)); - g_return_if_fail (GTK_IS_WIDGET (child)); - g_return_if_fail (gtk_widget_get_parent (child) == GTK_WIDGET (widget)); - - g_object_set_data (G_OBJECT (child), - GTK_BOX_NON_HOMOGENEOUS, - non_homogeneous ? GINT_TO_POINTER (1) : NULL); - gtk_widget_child_notify (child, "non-homogeneous"); - - if (gtk_widget_get_visible (GTK_WIDGET (widget)) && - gtk_widget_get_visible (child)) - gtk_widget_queue_resize (child); -} diff --git a/gtk/gtkbbox.h b/gtk/gtkbbox.h deleted file mode 100644 index 9b92665bf2..0000000000 --- a/gtk/gtkbbox.h +++ /dev/null @@ -1,130 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -/* - * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -#ifndef __GTK_BUTTON_BOX_H__ -#define __GTK_BUTTON_BOX_H__ - -#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk.h> can be included directly." -#endif - -#include <gtk/gtkbox.h> - - -G_BEGIN_DECLS - -#define GTK_TYPE_BUTTON_BOX (gtk_button_box_get_type ()) -#define GTK_BUTTON_BOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_BUTTON_BOX, GtkButtonBox)) -#define GTK_BUTTON_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_BUTTON_BOX, GtkButtonBoxClass)) -#define GTK_IS_BUTTON_BOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_BUTTON_BOX)) -#define GTK_IS_BUTTON_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_BUTTON_BOX)) -#define GTK_BUTTON_BOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_BUTTON_BOX, GtkButtonBoxClass)) - - -typedef struct _GtkButtonBox GtkButtonBox; -typedef struct _GtkButtonBoxPrivate GtkButtonBoxPrivate; -typedef struct _GtkButtonBoxClass GtkButtonBoxClass; - -struct _GtkButtonBox -{ - GtkBox box; - - /*< private >*/ - GtkButtonBoxPrivate *priv; -}; - -/** - * GtkButtonBoxClass: - * @parent_class: The parent class. - */ -struct _GtkButtonBoxClass -{ - GtkBoxClass parent_class; - - /*< private >*/ - - /* Padding for future expansion */ - void (*_gtk_reserved1) (void); - void (*_gtk_reserved2) (void); - void (*_gtk_reserved3) (void); - void (*_gtk_reserved4) (void); -}; - - -/** - * GtkButtonBoxStyle: - * @GTK_BUTTONBOX_SPREAD: Buttons are evenly spread across the box. - * @GTK_BUTTONBOX_EDGE: Buttons are placed at the edges of the box. - * @GTK_BUTTONBOX_START: Buttons are grouped towards the start of the box, - * (on the left for a HBox, or the top for a VBox). - * @GTK_BUTTONBOX_END: Buttons are grouped towards the end of the box, - * (on the right for a HBox, or the bottom for a VBox). - * @GTK_BUTTONBOX_CENTER: Buttons are centered in the box - * @GTK_BUTTONBOX_EXPAND: Buttons expand to fill the box. This entails giving - * buttons a "linked" appearance, making button sizes homogeneous, and - * setting spacing to 0 (same as calling gtk_box_set_homogeneous() and - * gtk_box_set_spacing() manually) - * - * Used to dictate the style that a #GtkButtonBox uses to layout the buttons it - * contains. - */ -typedef enum -{ - GTK_BUTTONBOX_SPREAD = 1, - GTK_BUTTONBOX_EDGE, - GTK_BUTTONBOX_START, - GTK_BUTTONBOX_END, - GTK_BUTTONBOX_CENTER, - GTK_BUTTONBOX_EXPAND -} GtkButtonBoxStyle; - - -GDK_AVAILABLE_IN_ALL -GType gtk_button_box_get_type (void) G_GNUC_CONST; -GDK_AVAILABLE_IN_ALL -GtkWidget * gtk_button_box_new (GtkOrientation orientation); -GDK_AVAILABLE_IN_ALL -GtkButtonBoxStyle gtk_button_box_get_layout (GtkButtonBox *widget); -GDK_AVAILABLE_IN_ALL -void gtk_button_box_set_layout (GtkButtonBox *widget, - GtkButtonBoxStyle layout_style); -GDK_AVAILABLE_IN_ALL -gboolean gtk_button_box_get_child_secondary (GtkButtonBox *widget, - GtkWidget *child); -GDK_AVAILABLE_IN_ALL -void gtk_button_box_set_child_secondary (GtkButtonBox *widget, - GtkWidget *child, - gboolean is_secondary); -GDK_AVAILABLE_IN_ALL -gboolean gtk_button_box_get_child_non_homogeneous (GtkButtonBox *widget, - GtkWidget *child); -GDK_AVAILABLE_IN_ALL -void gtk_button_box_set_child_non_homogeneous (GtkButtonBox *widget, - GtkWidget *child, - gboolean non_homogeneous); - - -G_END_DECLS - -#endif /* __GTK_BUTTON_BOX_H__ */ diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c index 5e5ce9fd65..944e4d6704 100644 --- a/gtk/gtkbuilder.c +++ b/gtk/gtkbuilder.c @@ -171,7 +171,7 @@ * <child internal-child="vbox"> * <object class="GtkBox" id="vbox1"> * <child internal-child="action_area"> - * <object class="GtkButtonBox" id="hbuttonbox1"> + * <object class="GtkBox" id="hbuttonbox1"> * <child> * <object class="GtkButton" id="ok_button"> * <property name="label">gtk-ok</property> diff --git a/gtk/gtkdialog.c b/gtk/gtkdialog.c index 3604c592c9..b183f37718 100644 --- a/gtk/gtkdialog.c +++ b/gtk/gtkdialog.c @@ -31,7 +31,6 @@ #include "gtkdialog.h" #include "gtkdialogprivate.h" #include "gtkheaderbar.h" -#include "gtkbbox.h" #include "gtklabel.h" #include "gtkmarshalers.h" #include "gtkbox.h" @@ -389,9 +388,6 @@ apply_response_for_action_area (GtkDialog *dialog, GtkDialogPrivate *priv = gtk_dialog_get_instance_private (dialog); g_assert (gtk_widget_get_parent (child) == priv->action_area); - - if (response_id == GTK_RESPONSE_HELP) - gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (priv->action_area), child, TRUE); } static void diff --git a/gtk/gtkenums.h b/gtk/gtkenums.h index 0dd737e418..e6ea7b3bb4 100644 --- a/gtk/gtkenums.h +++ b/gtk/gtkenums.h @@ -346,8 +346,7 @@ typedef enum * @GTK_PACK_START: The child is packed into the start of the box * @GTK_PACK_END: The child is packed into the end of the box * - * Represents the packing location #GtkBox children. (See: #GtkVBox, - * #GtkHBox, and #GtkButtonBox). + * Represents the packing location #GtkBox children */ typedef enum { diff --git a/gtk/gtkinfobar.c b/gtk/gtkinfobar.c index faf1e6af4d..2b469fbfcb 100644 --- a/gtk/gtkinfobar.c +++ b/gtk/gtkinfobar.c @@ -35,7 +35,6 @@ #include "gtkaccessible.h" #include "gtkbuildable.h" #include "gtkbuilderprivate.h" -#include "gtkbbox.h" #include "gtkbox.h" #include "gtklabel.h" #include "gtkbutton.h" @@ -510,9 +509,6 @@ gtk_info_bar_add_action_widget (GtkInfoBar *info_bar, g_warning ("Only 'activatable' widgets can be packed into the action area of a GtkInfoBar"); gtk_container_add (GTK_CONTAINER (priv->action_area), child); - if (response_id == GTK_RESPONSE_HELP) - gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (priv->action_area), - child, TRUE); } /** @@ -975,10 +971,6 @@ gtk_info_bar_buildable_custom_finished (GtkBuildable *buildable, G_OBJECT (info_bar)); g_signal_connect_closure_by_id (object, signal_id, 0, closure, FALSE); } - - if (ad->response_id == GTK_RESPONSE_HELP) - gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (priv->action_area), - GTK_WIDGET (object), TRUE); } g_slist_free_full (data->items, action_widget_info_free); diff --git a/gtk/gtkmessagedialog.c b/gtk/gtkmessagedialog.c index 19ebd784ba..e98a0ffb99 100644 --- a/gtk/gtkmessagedialog.c +++ b/gtk/gtkmessagedialog.c @@ -33,7 +33,6 @@ #include "gtkbuildable.h" #include "gtklabel.h" #include "gtkbox.h" -#include "gtkbbox.h" #include "gtkintl.h" #include "gtkprivate.h" #include "gtktypebuiltins.h" @@ -281,7 +280,8 @@ gtk_message_dialog_init (GtkMessageDialog *dialog) gtk_widget_init_template (GTK_WIDGET (dialog)); action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog)); - gtk_button_box_set_layout (GTK_BUTTON_BOX (action_area), GTK_BUTTONBOX_EXPAND); + gtk_widget_set_halign (action_area, GTK_ALIGN_FILL); + gtk_box_set_homogeneous (GTK_BOX (action_area), TRUE); settings = gtk_widget_get_settings (GTK_WIDGET (dialog)); g_object_get (settings, "gtk-keynav-use-caret", &use_caret, NULL); diff --git a/gtk/meson.build b/gtk/meson.build index e45b18bf8e..f11ce957c3 100644 --- a/gtk/meson.build +++ b/gtk/meson.build @@ -167,7 +167,6 @@ gtk_public_sources = files([ 'gtkapplicationwindow.c', 'gtkaspectframe.c', 'gtkassistant.c', - 'gtkbbox.c', 'gtkbin.c', 'gtkbindings.c', 'gtkborder.c', @@ -417,7 +416,6 @@ gtk_public_headers = files([ 'gtkapplicationwindow.h', 'gtkaspectframe.h', 'gtkassistant.h', - 'gtkbbox.h', 'gtkbin.h', 'gtkbindings.h', 'gtkborder.h', diff --git a/gtk/ui/gtkappchooserdialog.ui b/gtk/ui/gtkappchooserdialog.ui index 27a0a62114..6a3e0461a2 100644 --- a/gtk/ui/gtkappchooserdialog.ui +++ b/gtk/ui/gtkappchooserdialog.ui @@ -19,8 +19,7 @@ </object> </child> <child internal-child="action_area"> - <object class="GtkButtonBox" id="dialog-action_area1"> - <property name="layout-style">end</property> + <object class="GtkBox" id="dialog-action_area1"> <property name="hexpand">1</property> <property name="halign">end</property> </object> diff --git a/gtk/ui/gtkdialog.ui b/gtk/ui/gtkdialog.ui index 1bd869b6c5..6780d241c7 100644 --- a/gtk/ui/gtkdialog.ui +++ b/gtk/ui/gtkdialog.ui @@ -29,9 +29,9 @@ <class name="dialog-action-box"/> </style> <child> - <object class="GtkButtonBox" id="action_area"> - <property name="layout-style">end</property> + <object class="GtkBox" id="action_area"> <property name="hexpand">1</property> + <property name="halign">end</property> <style> <class name="dialog-action-area"/> </style> diff --git a/gtk/ui/gtkfilechooserdialog.ui b/gtk/ui/gtkfilechooserdialog.ui index 22a0f3bfce..6ae9756c4f 100644 --- a/gtk/ui/gtkfilechooserdialog.ui +++ b/gtk/ui/gtkfilechooserdialog.ui @@ -10,9 +10,8 @@ <object class="GtkBox"> <property name="orientation">vertical</property> <child internal-child="action_area"> - <object class="GtkButtonBox" id="dialog-action_area1"> + <object class="GtkBox" id="dialog-action_area1"> <property name="margin">6</property> - <property name="layout-style">end</property> <property name="hexpand">1</property> <property name="halign">end</property> </object> diff --git a/gtk/ui/gtkinfobar.ui b/gtk/ui/gtkinfobar.ui index aa0b2a05c8..5e2f42f50c 100644 --- a/gtk/ui/gtkinfobar.ui +++ b/gtk/ui/gtkinfobar.ui @@ -15,10 +15,10 @@ </object> </child> <child> - <object class="GtkButtonBox" id="action_area"> + <object class="GtkBox" id="action_area"> <property name="spacing">6</property> <property name="margin">6</property> - <property name="layout-style">end</property> + <property name="halign">end</property> </object> </child> <child> |