diff options
Diffstat (limited to 'gtk/gtkexpander.c')
-rw-r--r-- | gtk/gtkexpander.c | 784 |
1 files changed, 431 insertions, 353 deletions
diff --git a/gtk/gtkexpander.c b/gtk/gtkexpander.c index 98590bcabc..7e173bcdca 100644 --- a/gtk/gtkexpander.c +++ b/gtk/gtkexpander.c @@ -18,7 +18,83 @@ * Boston, MA 02111-1307, USA. * * Authors: - * Mark McLoughlin <mark@skynet.ie> + * Mark McLoughlin <mark@skynet.ie> + */ + +/** + * SECTION:gtkexpander + * @Short_description: A container which can hide its child + * @Title: GtkExpander + * + * A #GtkExpander allows the user to hide or show its child by clicking + * on an expander triangle similar to the triangles used in a #GtkTreeView. + * + * Normally you use an expander as you would use any other descendant + * of #GtkBin; you create the child widget and use gtk_container_add() + * to add it to the expander. When the expander is toggled, it will take + * care of showing and hiding the child automatically. + * + * <section id="expander-special-usage"> + * <title>Special Usage</title> + * <para> + * There are situations in which you may prefer to show and hide the + * expanded widget yourself, such as when you want to actually create + * the widget at expansion time. In this case, create a #GtkExpander + * but do not add a child to it. The expander widget has an + * #GtkExpander:expanded property which can be used to monitor + * its expansion state. You should watch this property with a signal + * connection as follows: + * </para> + * <programlisting id="expander-callback-example"> + * expander = gtk_expander_new_with_mnemonic ("_More Options"); + * g_signal_connect (expander, "notify::expanded", + * G_CALLBACK (expander_callback), NULL); + * + * ... + * + * static void + * expander_callback (GObject *object, + * GParamSpec *param_spec, + * gpointer user_data) + * { + * GtkExpander *expander; + * + * expander = GTK_EXPANDER (object); + * + * if (gtk_expander_get_expanded (expander)) + * { + * /* Show or create widgets */ + * } + * else + * { + * /* Hide or destroy widgets */ + * } + * } + * </programlisting> + * </section> + * <refsect2 id="GtkExpander-BUILDER-UI"> + * <title>GtkExpander as GtkBuildable</title> + * <para> + * The GtkExpander implementation of the GtkBuildable interface + * supports placing a child in the label position by specifying + * "label" as the "type" attribute of a <child> element. + * A normal content child can be specified without specifying + * a <child> type attribute. + * </para> + * <example> + * <title>A UI definition fragment with GtkExpander</title> + * <programlisting><![CDATA[ + * <object class="GtkExpander"> + * <child type="label"> + * <object class="GtkLabel" id="expander-label"/> + * </child> + * <child> + * <object class="GtkEntry" id="expander-content"/> + * </child> + * </object> + * ]]></programlisting> + * </example> + * </refsect2> */ #include "config.h" @@ -69,66 +145,66 @@ struct _GtkExpanderPrivate }; static void gtk_expander_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); + guint prop_id, + const GValue *value, + GParamSpec *pspec); static void gtk_expander_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); + guint prop_id, + GValue *value, + GParamSpec *pspec); static void gtk_expander_destroy (GtkWidget *widget); static void gtk_expander_realize (GtkWidget *widget); static void gtk_expander_unrealize (GtkWidget *widget); static void gtk_expander_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); + GtkAllocation *allocation); static void gtk_expander_map (GtkWidget *widget); static void gtk_expander_unmap (GtkWidget *widget); static gboolean gtk_expander_draw (GtkWidget *widget, - cairo_t *cr); + cairo_t *cr); static gboolean gtk_expander_button_press (GtkWidget *widget, - GdkEventButton *event); + GdkEventButton *event); static gboolean gtk_expander_button_release (GtkWidget *widget, - GdkEventButton *event); + GdkEventButton *event); static gboolean gtk_expander_enter_notify (GtkWidget *widget, - GdkEventCrossing *event); + GdkEventCrossing *event); static gboolean gtk_expander_leave_notify (GtkWidget *widget, - GdkEventCrossing *event); + GdkEventCrossing *event); static gboolean gtk_expander_focus (GtkWidget *widget, - GtkDirectionType direction); + GtkDirectionType direction); static void gtk_expander_grab_notify (GtkWidget *widget, - gboolean was_grabbed); + gboolean was_grabbed); static void gtk_expander_state_flags_changed (GtkWidget *widget, GtkStateFlags previous_state); static gboolean gtk_expander_drag_motion (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - guint time); + GdkDragContext *context, + gint x, + gint y, + guint time); static void gtk_expander_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time); + GdkDragContext *context, + guint time); static void gtk_expander_add (GtkContainer *container, - GtkWidget *widget); + GtkWidget *widget); static void gtk_expander_remove (GtkContainer *container, - GtkWidget *widget); + GtkWidget *widget); static void gtk_expander_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data); + gboolean include_internals, + GtkCallback callback, + gpointer callback_data); static void gtk_expander_activate (GtkExpander *expander); static void get_expander_bounds (GtkExpander *expander, - GdkRectangle *rect); + GdkRectangle *rect); /* GtkBuildable */ static void gtk_expander_buildable_init (GtkBuildableIface *iface); static void gtk_expander_buildable_add_child (GtkBuildable *buildable, - GtkBuilder *builder, - GObject *child, - const gchar *type); + GtkBuilder *builder, + GObject *child, + const gchar *type); /* GtkWidget */ @@ -148,8 +224,8 @@ static void gtk_expander_get_preferred_width_for_height (GtkWidget * gint *natural_height); G_DEFINE_TYPE_WITH_CODE (GtkExpander, gtk_expander, GTK_TYPE_BIN, - G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, - gtk_expander_buildable_init)) + G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, + gtk_expander_buildable_init)) static void gtk_expander_class_init (GtkExpanderClass *klass) @@ -195,89 +271,89 @@ gtk_expander_class_init (GtkExpanderClass *klass) g_type_class_add_private (klass, sizeof (GtkExpanderPrivate)); g_object_class_install_property (gobject_class, - PROP_EXPANDED, - g_param_spec_boolean ("expanded", - P_("Expanded"), - P_("Whether the expander has been opened to reveal the child widget"), - FALSE, - GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + PROP_EXPANDED, + g_param_spec_boolean ("expanded", + P_("Expanded"), + P_("Whether the expander has been opened to reveal the child widget"), + FALSE, + GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT)); g_object_class_install_property (gobject_class, - PROP_LABEL, - g_param_spec_string ("label", - P_("Label"), - P_("Text of the expander's label"), - NULL, - GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + PROP_LABEL, + g_param_spec_string ("label", + P_("Label"), + P_("Text of the expander's label"), + NULL, + GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT)); g_object_class_install_property (gobject_class, - PROP_USE_UNDERLINE, - g_param_spec_boolean ("use-underline", - P_("Use underline"), - P_("If set, an underline in the text indicates the next character should be used for the mnemonic accelerator key"), - FALSE, - GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + PROP_USE_UNDERLINE, + g_param_spec_boolean ("use-underline", + P_("Use underline"), + P_("If set, an underline in the text indicates the next character should be used for the mnemonic accelerator key"), + FALSE, + GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT)); g_object_class_install_property (gobject_class, - PROP_USE_MARKUP, - g_param_spec_boolean ("use-markup", - P_("Use markup"), - P_("The text of the label includes XML markup. See pango_parse_markup()"), - FALSE, - GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + PROP_USE_MARKUP, + g_param_spec_boolean ("use-markup", + P_("Use markup"), + P_("The text of the label includes XML markup. See pango_parse_markup()"), + FALSE, + GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT)); g_object_class_install_property (gobject_class, - PROP_SPACING, - g_param_spec_int ("spacing", - P_("Spacing"), - P_("Space to put between the label and the child"), - 0, - G_MAXINT, - 0, - GTK_PARAM_READWRITE)); + PROP_SPACING, + g_param_spec_int ("spacing", + P_("Spacing"), + P_("Space to put between the label and the child"), + 0, + G_MAXINT, + 0, + GTK_PARAM_READWRITE)); g_object_class_install_property (gobject_class, - PROP_LABEL_WIDGET, - g_param_spec_object ("label-widget", - P_("Label widget"), - P_("A widget to display in place of the usual expander label"), - GTK_TYPE_WIDGET, - GTK_PARAM_READWRITE)); + PROP_LABEL_WIDGET, + g_param_spec_object ("label-widget", + P_("Label widget"), + P_("A widget to display in place of the usual expander label"), + GTK_TYPE_WIDGET, + GTK_PARAM_READWRITE)); g_object_class_install_property (gobject_class, - PROP_LABEL_FILL, - g_param_spec_boolean ("label-fill", - P_("Label fill"), - P_("Whether the label widget should fill all available horizontal space"), - FALSE, - GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + PROP_LABEL_FILL, + g_param_spec_boolean ("label-fill", + P_("Label fill"), + P_("Whether the label widget should fill all available horizontal space"), + FALSE, + GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT)); gtk_widget_class_install_style_property (widget_class, - g_param_spec_int ("expander-size", - P_("Expander Size"), - P_("Size of the expander arrow"), - 0, - G_MAXINT, - DEFAULT_EXPANDER_SIZE, - GTK_PARAM_READABLE)); + g_param_spec_int ("expander-size", + P_("Expander Size"), + P_("Size of the expander arrow"), + 0, + G_MAXINT, + DEFAULT_EXPANDER_SIZE, + GTK_PARAM_READABLE)); gtk_widget_class_install_style_property (widget_class, - g_param_spec_int ("expander-spacing", - P_("Indicator Spacing"), - P_("Spacing around expander arrow"), - 0, - G_MAXINT, - DEFAULT_EXPANDER_SPACING, - GTK_PARAM_READABLE)); + g_param_spec_int ("expander-spacing", + P_("Indicator Spacing"), + P_("Spacing around expander arrow"), + 0, + G_MAXINT, + DEFAULT_EXPANDER_SPACING, + GTK_PARAM_READABLE)); widget_class->activate_signal = g_signal_new (I_("activate"), - G_TYPE_FROM_CLASS (gobject_class), - G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (GtkExpanderClass, activate), - NULL, NULL, - _gtk_marshal_VOID__VOID, - G_TYPE_NONE, 0); + G_TYPE_FROM_CLASS (gobject_class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (GtkExpanderClass, activate), + NULL, NULL, + _gtk_marshal_VOID__VOID, + G_TYPE_NONE, 0); } static void @@ -310,9 +386,9 @@ gtk_expander_init (GtkExpander *expander) static void gtk_expander_buildable_add_child (GtkBuildable *buildable, - GtkBuilder *builder, - GObject *child, - const gchar *type) + GtkBuilder *builder, + GObject *child, + const gchar *type) { if (!type) gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child)); @@ -330,12 +406,12 @@ gtk_expander_buildable_init (GtkBuildableIface *iface) static void gtk_expander_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) + guint prop_id, + const GValue *value, + GParamSpec *pspec) { GtkExpander *expander = GTK_EXPANDER (object); - + switch (prop_id) { case PROP_EXPANDED: @@ -367,9 +443,9 @@ gtk_expander_set_property (GObject *object, static void gtk_expander_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) + guint prop_id, + GValue *value, + GParamSpec *pspec) { GtkExpander *expander = GTK_EXPANDER (object); GtkExpanderPrivate *priv = expander->priv; @@ -393,8 +469,8 @@ gtk_expander_get_property (GObject *object, break; case PROP_LABEL_WIDGET: g_value_set_object (value, - priv->label_widget ? - G_OBJECT (priv->label_widget) : NULL); + priv->label_widget ? + G_OBJECT (priv->label_widget) : NULL); break; case PROP_LABEL_FILL: g_value_set_boolean (value, priv->label_fill); @@ -438,7 +514,7 @@ gtk_expander_realize (GtkWidget *widget) border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); get_expander_bounds (GTK_EXPANDER (widget), &expander_rect); - + if (priv->label_widget && gtk_widget_get_visible (priv->label_widget)) { GtkRequisition label_requisition; @@ -458,11 +534,11 @@ gtk_expander_realize (GtkWidget *widget) attributes.width = MAX (allocation.width - 2 * border_width, 1); attributes.height = MAX (expander_rect.height, label_height - 2 * border_width); attributes.wclass = GDK_INPUT_ONLY; - attributes.event_mask = gtk_widget_get_events (widget) | - GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK | - GDK_ENTER_NOTIFY_MASK | - GDK_LEAVE_NOTIFY_MASK; + attributes.event_mask = gtk_widget_get_events (widget) + | GDK_BUTTON_PRESS_MASK + | GDK_BUTTON_RELEASE_MASK + | GDK_ENTER_NOTIFY_MASK + | GDK_LEAVE_NOTIFY_MASK; attributes_mask = GDK_WA_X | GDK_WA_Y; @@ -471,7 +547,7 @@ gtk_expander_realize (GtkWidget *widget) g_object_ref (window); priv->event_window = gdk_window_new (gtk_widget_get_parent_window (widget), - &attributes, attributes_mask); + &attributes, attributes_mask); gdk_window_set_user_data (priv->event_window, widget); } @@ -492,7 +568,7 @@ gtk_expander_unrealize (GtkWidget *widget) static void get_expander_bounds (GtkExpander *expander, - GdkRectangle *rect) + GdkRectangle *rect) { GtkAllocation allocation; GtkWidget *widget; @@ -513,12 +589,12 @@ get_expander_bounds (GtkExpander *expander, border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); gtk_widget_style_get (widget, - "interior-focus", &interior_focus, - "focus-line-width", &focus_width, - "focus-padding", &focus_pad, - "expander-size", &expander_size, - "expander-spacing", &expander_spacing, - NULL); + "interior-focus", &interior_focus, + "focus-line-width", &focus_width, + "focus-padding", &focus_pad, + "expander-size", &expander_size, + "expander-spacing", &expander_spacing, + NULL); ltr = gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL; @@ -538,9 +614,9 @@ get_expander_bounds (GtkExpander *expander, gtk_widget_get_allocation (priv->label_widget, &label_allocation); if (expander_size < label_allocation.height) - rect->y += focus_width + focus_pad + (label_allocation.height - expander_size) / 2; + rect->y += focus_width + focus_pad + (label_allocation.height - expander_size) / 2; else - rect->y += expander_spacing; + rect->y += expander_spacing; } else { @@ -550,9 +626,9 @@ get_expander_bounds (GtkExpander *expander, if (!interior_focus) { if (ltr) - rect->x += focus_width + focus_pad; + rect->x += focus_width + focus_pad; else - rect->x -= focus_width + focus_pad; + rect->x -= focus_width + focus_pad; rect->y += focus_width + focus_pad; } @@ -561,7 +637,7 @@ get_expander_bounds (GtkExpander *expander, static void gtk_expander_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) + GtkAllocation *allocation) { GtkExpander *expander; GtkWidget *child; @@ -586,12 +662,12 @@ gtk_expander_size_allocate (GtkWidget *widget, gtk_widget_set_allocation (widget, allocation); gtk_widget_style_get (widget, - "interior-focus", &interior_focus, - "focus-line-width", &focus_width, - "focus-padding", &focus_pad, - "expander-size", &expander_size, - "expander-spacing", &expander_spacing, - NULL); + "interior-focus", &interior_focus, + "focus-line-width", &focus_width, + "focus-padding", &focus_pad, + "expander-size", &expander_size, + "expander-spacing", &expander_spacing, + NULL); /* Calculate some offsets/padding first */ @@ -619,7 +695,8 @@ gtk_expander_size_allocate (GtkWidget *widget, label_allocation.width = MAX (label_allocation.width, 1); /* We distribute the minimum height to the label widget and prioritize - * the child widget giving it the remaining height */ + * the child widget giving it the remaining height + */ gtk_widget_get_preferred_height_for_width (priv->label_widget, label_allocation.width, &label_height, NULL); @@ -635,9 +712,9 @@ gtk_expander_size_allocate (GtkWidget *widget, label_allocation.y = allocation->y + border_width + focus_width + focus_pad; label_allocation.height = MIN (label_height, - allocation->height - 2 * border_width - - 2 * focus_width - 2 * focus_pad - - (child_visible ? priv->spacing : 0)); + allocation->height - 2 * border_width - + 2 * focus_width - 2 * focus_pad - + (child_visible ? priv->spacing : 0)); label_allocation.height = MAX (label_allocation.height, 1); gtk_widget_size_allocate (priv->label_widget, &label_allocation); @@ -656,10 +733,10 @@ gtk_expander_size_allocate (GtkWidget *widget, get_expander_bounds (expander, &rect); gdk_window_move_resize (priv->event_window, - allocation->x + border_width, - allocation->y + border_width, - MAX (allocation->width - 2 * border_width, 1), - MAX (rect.height, label_height - 2 * border_width)); + allocation->x + border_width, + allocation->y + border_width, + MAX (allocation->width - 2 * border_width, 1), + MAX (rect.height, label_height - 2 * border_width)); } if (child_visible) @@ -668,7 +745,7 @@ gtk_expander_size_allocate (GtkWidget *widget, gint top_height; top_height = MAX (top_min_height, - label_height + (interior_focus ? 2 * focus_width + 2 * focus_pad : 0)); + label_height + (interior_focus ? 2 * focus_width + 2 * focus_pad : 0)); child_allocation.x = allocation->x + border_width; child_allocation.y = allocation->y + top_height + child_yoffset; @@ -710,7 +787,8 @@ gtk_expander_unmap (GtkWidget *widget) } static void -gtk_expander_paint_prelight (GtkExpander *expander, cairo_t *cr) +gtk_expander_paint_prelight (GtkExpander *expander, + cairo_t *cr) { GtkAllocation allocation; GtkWidget *widget; @@ -730,12 +808,12 @@ gtk_expander_paint_prelight (GtkExpander *expander, cairo_t *cr) container = GTK_CONTAINER (expander); gtk_widget_style_get (widget, - "interior-focus", &interior_focus, - "focus-line-width", &focus_width, - "focus-padding", &focus_pad, - "expander-size", &expander_size, - "expander-spacing", &expander_spacing, - NULL); + "interior-focus", &interior_focus, + "focus-line-width", &focus_width, + "focus-padding", &focus_pad, + "expander-size", &expander_size, + "expander-spacing", &expander_spacing, + NULL); gtk_widget_get_allocation (widget, &allocation); @@ -765,7 +843,8 @@ gtk_expander_paint_prelight (GtkExpander *expander, cairo_t *cr) } static void -gtk_expander_paint (GtkExpander *expander, cairo_t *cr) +gtk_expander_paint (GtkExpander *expander, + cairo_t *cr) { GtkExpanderPrivate *priv = expander->priv; GtkWidget *widget; @@ -815,7 +894,7 @@ gtk_expander_paint (GtkExpander *expander, cairo_t *cr) static void gtk_expander_paint_focus (GtkExpander *expander, - cairo_t *cr) + cairo_t *cr) { GtkWidget *widget; GtkExpanderPrivate *priv; @@ -838,27 +917,27 @@ gtk_expander_paint_focus (GtkExpander *expander, gtk_widget_get_allocation (widget, &allocation); gtk_widget_style_get (widget, - "interior-focus", &interior_focus, - "focus-line-width", &focus_width, - "focus-padding", &focus_pad, - "expander-size", &expander_size, - "expander-spacing", &expander_spacing, - NULL); + "interior-focus", &interior_focus, + "focus-line-width", &focus_width, + "focus-padding", &focus_pad, + "expander-size", &expander_size, + "expander-spacing", &expander_spacing, + NULL); ltr = gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL; - + width = height = 0; if (priv->label_widget) { if (gtk_widget_get_visible (priv->label_widget)) - { - GtkAllocation label_allocation; + { + GtkAllocation label_allocation; - gtk_widget_get_allocation (priv->label_widget, &label_allocation); - width = label_allocation.width; - height = label_allocation.height; - } + gtk_widget_get_allocation (priv->label_widget, &label_allocation); + width = label_allocation.width; + height = label_allocation.height; + } width += 2 * focus_pad + 2 * focus_width; height += 2 * focus_pad + 2 * focus_width; @@ -867,21 +946,21 @@ gtk_expander_paint_focus (GtkExpander *expander, y = border_width; if (ltr) - { - if (interior_focus) - x += expander_spacing * 2 + expander_size; - } + { + if (interior_focus) + x += expander_spacing * 2 + expander_size; + } else - { - x += allocation.width - 2 * border_width - - expander_spacing * 2 - expander_size - width; - } + { + x += allocation.width - 2 * border_width + - expander_spacing * 2 - expander_size - width; + } if (!interior_focus) - { - width += expander_size + 2 * expander_spacing; - height = MAX (height, expander_size + 2 * expander_spacing); - } + { + width += expander_size + 2 * expander_spacing; + height = MAX (height, expander_size + 2 * expander_spacing); + } } else { @@ -900,7 +979,7 @@ gtk_expander_paint_focus (GtkExpander *expander, static gboolean gtk_expander_draw (GtkWidget *widget, - cairo_t *cr) + cairo_t *cr) { GtkExpander *expander = GTK_EXPANDER (widget); @@ -916,7 +995,7 @@ gtk_expander_draw (GtkWidget *widget, static gboolean gtk_expander_button_press (GtkWidget *widget, - GdkEventButton *event) + GdkEventButton *event) { GtkExpander *expander = GTK_EXPANDER (widget); @@ -931,7 +1010,7 @@ gtk_expander_button_press (GtkWidget *widget, static gboolean gtk_expander_button_release (GtkWidget *widget, - GdkEventButton *event) + GdkEventButton *event) { GtkExpander *expander = GTK_EXPANDER (widget); @@ -947,7 +1026,7 @@ gtk_expander_button_release (GtkWidget *widget, static void gtk_expander_grab_notify (GtkWidget *widget, - gboolean was_grabbed) + gboolean was_grabbed) { if (!was_grabbed) GTK_EXPANDER (widget)->priv->button_down = FALSE; @@ -976,7 +1055,7 @@ gtk_expander_redraw_expander (GtkExpander *expander) static gboolean gtk_expander_enter_notify (GtkWidget *widget, - GdkEventCrossing *event) + GdkEventCrossing *event) { GtkExpander *expander = GTK_EXPANDER (widget); @@ -998,7 +1077,7 @@ gtk_expander_enter_notify (GtkWidget *widget, static gboolean gtk_expander_leave_notify (GtkWidget *widget, - GdkEventCrossing *event) + GdkEventCrossing *event) { GtkExpander *expander = GTK_EXPANDER (widget); @@ -1031,10 +1110,10 @@ expand_timeout (gpointer data) static gboolean gtk_expander_drag_motion (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - guint time) + GdkDragContext *context, + gint x, + gint y, + guint time) { GtkExpander *expander = GTK_EXPANDER (widget); GtkExpanderPrivate *priv = expander->priv; @@ -1055,8 +1134,8 @@ gtk_expander_drag_motion (GtkWidget *widget, static void gtk_expander_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time) + GdkDragContext *context, + guint time) { GtkExpander *expander = GTK_EXPANDER (widget); GtkExpanderPrivate *priv = expander->priv; @@ -1078,7 +1157,7 @@ typedef enum static gboolean focus_current_site (GtkExpander *expander, - GtkDirectionType direction) + GtkDirectionType direction) { GtkWidget *current_focus; @@ -1092,8 +1171,8 @@ focus_current_site (GtkExpander *expander, static gboolean focus_in_site (GtkExpander *expander, - FocusSite site, - GtkDirectionType direction) + FocusSite site, + GtkDirectionType direction) { switch (site) { @@ -1102,17 +1181,17 @@ focus_in_site (GtkExpander *expander, return TRUE; case FOCUS_LABEL: if (expander->priv->label_widget) - return gtk_widget_child_focus (expander->priv->label_widget, direction); + return gtk_widget_child_focus (expander->priv->label_widget, direction); else - return FALSE; + return FALSE; case FOCUS_CHILD: { - GtkWidget *child = gtk_bin_get_child (GTK_BIN (expander)); + GtkWidget *child = gtk_bin_get_child (GTK_BIN (expander)); - if (child && gtk_widget_get_child_visible (child)) - return gtk_widget_child_focus (child, direction); - else - return FALSE; + if (child && gtk_widget_get_child_visible (child)) + return gtk_widget_child_focus (child, direction); + else + return FALSE; } case FOCUS_NONE: break; @@ -1124,8 +1203,8 @@ focus_in_site (GtkExpander *expander, static FocusSite get_next_site (GtkExpander *expander, - FocusSite site, - GtkDirectionType direction) + FocusSite site, + GtkDirectionType direction) { gboolean ltr; @@ -1135,58 +1214,58 @@ get_next_site (GtkExpander *expander, { case FOCUS_NONE: switch (direction) - { - case GTK_DIR_TAB_BACKWARD: - case GTK_DIR_LEFT: - case GTK_DIR_UP: - return FOCUS_CHILD; - case GTK_DIR_TAB_FORWARD: - case GTK_DIR_DOWN: - case GTK_DIR_RIGHT: - return FOCUS_WIDGET; - } + { + case GTK_DIR_TAB_BACKWARD: + case GTK_DIR_LEFT: + case GTK_DIR_UP: + return FOCUS_CHILD; + case GTK_DIR_TAB_FORWARD: + case GTK_DIR_DOWN: + case GTK_DIR_RIGHT: + return FOCUS_WIDGET; + } case FOCUS_WIDGET: switch (direction) - { - case GTK_DIR_TAB_BACKWARD: - case GTK_DIR_UP: - return FOCUS_NONE; - case GTK_DIR_LEFT: - return ltr ? FOCUS_NONE : FOCUS_LABEL; - case GTK_DIR_TAB_FORWARD: - case GTK_DIR_DOWN: - return FOCUS_LABEL; - case GTK_DIR_RIGHT: - return ltr ? FOCUS_LABEL : FOCUS_NONE; - break; - } + { + case GTK_DIR_TAB_BACKWARD: + case GTK_DIR_UP: + return FOCUS_NONE; + case GTK_DIR_LEFT: + return ltr ? FOCUS_NONE : FOCUS_LABEL; + case GTK_DIR_TAB_FORWARD: + case GTK_DIR_DOWN: + return FOCUS_LABEL; + case GTK_DIR_RIGHT: + return ltr ? FOCUS_LABEL : FOCUS_NONE; + break; + } case FOCUS_LABEL: switch (direction) - { - case GTK_DIR_TAB_BACKWARD: - case GTK_DIR_UP: - return FOCUS_WIDGET; - case GTK_DIR_LEFT: - return ltr ? FOCUS_WIDGET : FOCUS_CHILD; - case GTK_DIR_TAB_FORWARD: - case GTK_DIR_DOWN: - return FOCUS_CHILD; - case GTK_DIR_RIGHT: - return ltr ? FOCUS_CHILD : FOCUS_WIDGET; - break; - } + { + case GTK_DIR_TAB_BACKWARD: + case GTK_DIR_UP: + return FOCUS_WIDGET; + case GTK_DIR_LEFT: + return ltr ? FOCUS_WIDGET : FOCUS_CHILD; + case GTK_DIR_TAB_FORWARD: + case GTK_DIR_DOWN: + return FOCUS_CHILD; + case GTK_DIR_RIGHT: + return ltr ? FOCUS_CHILD : FOCUS_WIDGET; + break; + } case FOCUS_CHILD: switch (direction) - { - case GTK_DIR_TAB_BACKWARD: - case GTK_DIR_LEFT: - case GTK_DIR_UP: - return FOCUS_LABEL; - case GTK_DIR_TAB_FORWARD: - case GTK_DIR_DOWN: - case GTK_DIR_RIGHT: - return FOCUS_NONE; - } + { + case GTK_DIR_TAB_BACKWARD: + case GTK_DIR_LEFT: + case GTK_DIR_UP: + return FOCUS_LABEL; + case GTK_DIR_TAB_FORWARD: + case GTK_DIR_DOWN: + case GTK_DIR_RIGHT: + return FOCUS_NONE; + } } g_assert_not_reached (); @@ -1195,31 +1274,31 @@ get_next_site (GtkExpander *expander, static gboolean gtk_expander_focus (GtkWidget *widget, - GtkDirectionType direction) + GtkDirectionType direction) { GtkExpander *expander = GTK_EXPANDER (widget); - + if (!focus_current_site (expander, direction)) { GtkWidget *old_focus_child; gboolean widget_is_focus; FocusSite site = FOCUS_NONE; - + widget_is_focus = gtk_widget_is_focus (widget); old_focus_child = gtk_container_get_focus_child (GTK_CONTAINER (widget)); - + if (old_focus_child && old_focus_child == expander->priv->label_widget) - site = FOCUS_LABEL; + site = FOCUS_LABEL; else if (old_focus_child) - site = FOCUS_CHILD; + site = FOCUS_CHILD; else if (widget_is_focus) - site = FOCUS_WIDGET; + site = FOCUS_WIDGET; while ((site = get_next_site (expander, site, direction)) != FOCUS_NONE) - { - if (focus_in_site (expander, site, direction)) - return TRUE; - } + { + if (focus_in_site (expander, site, direction)) + return TRUE; + } return FALSE; } @@ -1229,7 +1308,7 @@ gtk_expander_focus (GtkWidget *widget, static void gtk_expander_add (GtkContainer *container, - GtkWidget *widget) + GtkWidget *widget) { GTK_CONTAINER_CLASS (gtk_expander_parent_class)->add (container, widget); @@ -1239,7 +1318,7 @@ gtk_expander_add (GtkContainer *container, static void gtk_expander_remove (GtkContainer *container, - GtkWidget *widget) + GtkWidget *widget) { GtkExpander *expander = GTK_EXPANDER (container); @@ -1251,9 +1330,9 @@ gtk_expander_remove (GtkContainer *container, static void gtk_expander_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data) + gboolean include_internals, + GtkCallback callback, + gpointer callback_data) { GtkBin *bin = GTK_BIN (container); GtkExpanderPrivate *priv = GTK_EXPANDER (container)->priv; @@ -1274,7 +1353,7 @@ gtk_expander_activate (GtkExpander *expander) } -static void +static void gtk_expander_get_preferred_width (GtkWidget *widget, gint *minimum_size, gint *natural_size) @@ -1296,14 +1375,14 @@ gtk_expander_get_preferred_width (GtkWidget *widget, border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); gtk_widget_style_get (GTK_WIDGET (widget), - "interior-focus", &interior_focus, - "focus-line-width", &focus_width, - "focus-padding", &focus_pad, - "expander-size", &expander_size, - "expander-spacing", &expander_spacing, - NULL); - - *minimum_size = *natural_size = + "interior-focus", &interior_focus, + "focus-line-width", &focus_width, + "focus-padding", &focus_pad, + "expander-size", &expander_size, + "expander-spacing", &expander_spacing, + NULL); + + *minimum_size = *natural_size = expander_size + 2 * expander_spacing + 2 * focus_width + 2 * focus_pad; @@ -1311,7 +1390,7 @@ gtk_expander_get_preferred_width (GtkWidget *widget, { gint label_min, label_nat; - gtk_widget_get_preferred_width (priv->label_widget, + gtk_widget_get_preferred_width (priv->label_widget, &label_min, &label_nat); *minimum_size += label_min; @@ -1322,7 +1401,7 @@ gtk_expander_get_preferred_width (GtkWidget *widget, { gint child_min, child_nat; - gtk_widget_get_preferred_width (child, + gtk_widget_get_preferred_width (child, &child_min, &child_nat); *minimum_size = MAX (*minimum_size, child_min); @@ -1338,7 +1417,7 @@ static void gtk_expander_get_preferred_height (GtkWidget *widget, gint *minimum_size, gint *natural_size) -{ +{ GtkExpander *expander; GtkWidget *child; GtkExpanderPrivate *priv; @@ -1356,14 +1435,14 @@ gtk_expander_get_preferred_height (GtkWidget *widget, border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); gtk_widget_style_get (GTK_WIDGET (widget), - "interior-focus", &interior_focus, - "focus-line-width", &focus_width, - "focus-padding", &focus_pad, - "expander-size", &expander_size, - "expander-spacing", &expander_spacing, - NULL); - - *minimum_size = *natural_size = + "interior-focus", &interior_focus, + "focus-line-width", &focus_width, + "focus-padding", &focus_pad, + "expander-size", &expander_size, + "expander-spacing", &expander_spacing, + NULL); + + *minimum_size = *natural_size = interior_focus ? (2 * focus_width + 2 * focus_pad) : 0; @@ -1371,9 +1450,9 @@ gtk_expander_get_preferred_height (GtkWidget *widget, { gint label_min, label_nat; - gtk_widget_get_preferred_height (priv->label_widget, + gtk_widget_get_preferred_height (priv->label_widget, &label_min, &label_nat); - + *minimum_size += label_min; *natural_size += label_nat; } @@ -1392,7 +1471,7 @@ gtk_expander_get_preferred_height (GtkWidget *widget, { gint child_min, child_nat; - gtk_widget_get_preferred_height (child, + gtk_widget_get_preferred_height (child, &child_min, &child_nat); *minimum_size += child_min + priv->spacing; @@ -1428,16 +1507,16 @@ gtk_expander_get_preferred_height_for_width (GtkWidget *widget, border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); gtk_widget_style_get (GTK_WIDGET (widget), - "interior-focus", &interior_focus, - "focus-line-width", &focus_width, - "focus-padding", &focus_pad, - "expander-size", &expander_size, - "expander-spacing", &expander_spacing, - NULL); + "interior-focus", &interior_focus, + "focus-line-width", &focus_width, + "focus-padding", &focus_pad, + "expander-size", &expander_size, + "expander-spacing", &expander_spacing, + NULL); label_xpad = 2 * border_width + expander_size + 2 * expander_spacing - 2 * focus_width + 2 * focus_pad; - *minimum_height = *natural_height = + *minimum_height = *natural_height = interior_focus ? (2 * focus_width + 2 * focus_pad) : 0; @@ -1445,10 +1524,10 @@ gtk_expander_get_preferred_height_for_width (GtkWidget *widget, { gint label_min, label_nat; - gtk_widget_get_preferred_height_for_width (priv->label_widget, - MAX (width - label_xpad, 1), + gtk_widget_get_preferred_height_for_width (priv->label_widget, + MAX (width - label_xpad, 1), &label_min, &label_nat); - + *minimum_height += label_min; *natural_height += label_nat; } @@ -1467,8 +1546,8 @@ gtk_expander_get_preferred_height_for_width (GtkWidget *widget, { gint child_min, child_nat; - gtk_widget_get_preferred_height_for_width (child, - MAX (width - 2 * border_width, 1), + gtk_widget_get_preferred_height_for_width (child, + MAX (width - 2 * border_width, 1), &child_min, &child_nat); *minimum_height += child_min + priv->spacing; @@ -1493,13 +1572,13 @@ gtk_expander_get_preferred_width_for_height (GtkWidget *widget, /** * gtk_expander_new: * @label: the text of the label - * + * * Creates a new expander using @label as the text of the label. - * + * * Return value: a new #GtkExpander widget. * * Since: 2.4 - **/ + */ GtkWidget * gtk_expander_new (const gchar *label) { @@ -1508,27 +1587,27 @@ gtk_expander_new (const gchar *label) /** * gtk_expander_new_with_mnemonic: - * @label: (allow-none): the text of the label with an underscore in front of the - * mnemonic character + * @label: (allow-none): the text of the label with an underscore + * in front of the mnemonic character * * Creates a new expander using @label as the text of the label. * If characters in @label are preceded by an underscore, they are underlined. - * If you need a literal underscore character in a label, use '__' (two - * underscores). The first underlined character represents a keyboard + * If you need a literal underscore character in a label, use '__' (two + * underscores). The first underlined character represents a keyboard * accelerator called a mnemonic. * Pressing Alt and that key activates the button. - * + * * Return value: a new #GtkExpander widget. * * Since: 2.4 - **/ + */ GtkWidget * gtk_expander_new_with_mnemonic (const gchar *label) { return g_object_new (GTK_TYPE_EXPANDER, - "label", label, - "use-underline", TRUE, - NULL); + "label", label, + "use-underline", TRUE, + NULL); } /** @@ -1541,10 +1620,10 @@ gtk_expander_new_with_mnemonic (const gchar *label) * child widget to be hidden. * * Since: 2.4 - **/ + */ void gtk_expander_set_expanded (GtkExpander *expander, - gboolean expanded) + gboolean expanded) { GtkExpanderPrivate *priv; GtkWidget *child; @@ -1568,7 +1647,7 @@ gtk_expander_set_expanded (GtkExpander *expander, g_object_get (settings, "gtk-enable-animations", &enable_animations, NULL); if (enable_animations && gtk_widget_get_realized (widget)) - { + { gtk_style_context_save (context); gtk_style_context_add_class (context, GTK_STYLE_CLASS_EXPANDER); @@ -1578,7 +1657,7 @@ gtk_expander_set_expanded (GtkExpander *expander, GTK_STATE_ACTIVE, expanded); gtk_style_context_restore (context); - } + } child = gtk_bin_get_child (GTK_BIN (expander)); @@ -1601,10 +1680,10 @@ gtk_expander_set_expanded (GtkExpander *expander, * * See gtk_expander_set_expanded(). * - * Return value: the current state of the expander. + * Return value: the current state of the expander * * Since: 2.4 - **/ + */ gboolean gtk_expander_get_expanded (GtkExpander *expander) { @@ -1616,16 +1695,16 @@ gtk_expander_get_expanded (GtkExpander *expander) /** * gtk_expander_set_spacing: * @expander: a #GtkExpander - * @spacing: distance between the expander and child in pixels. + * @spacing: distance between the expander and child in pixels * - * Sets the spacing field of @expander, which is the number of pixels to - * place between expander and the child. + * Sets the spacing field of @expander, which is the number of + * pixels to place between expander and the child. * * Since: 2.4 - **/ + */ void gtk_expander_set_spacing (GtkExpander *expander, - gint spacing) + gint spacing) { g_return_if_fail (GTK_IS_EXPANDER (expander)); g_return_if_fail (spacing >= 0); @@ -1646,10 +1725,10 @@ gtk_expander_set_spacing (GtkExpander *expander, * * Gets the value set by gtk_expander_set_spacing(). * - * Return value: spacing between the expander and child. + * Return value: spacing between the expander and child * * Since: 2.4 - **/ + */ gint gtk_expander_get_spacing (GtkExpander *expander) { @@ -1668,10 +1747,10 @@ gtk_expander_get_spacing (GtkExpander *expander) * This will also clear any previously set labels. * * Since: 2.4 - **/ + */ void gtk_expander_set_label (GtkExpander *expander, - const gchar *label) + const gchar *label) { g_return_if_fail (GTK_IS_EXPANDER (expander)); @@ -1711,10 +1790,10 @@ gtk_expander_set_label (GtkExpander *expander, * widget. * * Return value: The text of the label widget. This string is owned - * by the widget and must not be modified or freed. + * by the widget and must not be modified or freed. * * Since: 2.4 - **/ + */ G_CONST_RETURN char * gtk_expander_get_label (GtkExpander *expander) { @@ -1739,10 +1818,10 @@ gtk_expander_get_label (GtkExpander *expander) * the next character should be used for the mnemonic accelerator key. * * Since: 2.4 - **/ + */ void gtk_expander_set_use_underline (GtkExpander *expander, - gboolean use_underline) + gboolean use_underline) { GtkExpanderPrivate *priv; @@ -1757,7 +1836,7 @@ gtk_expander_set_use_underline (GtkExpander *expander, priv->use_underline = use_underline; if (GTK_IS_LABEL (priv->label_widget)) - gtk_label_set_use_underline (GTK_LABEL (priv->label_widget), use_underline); + gtk_label_set_use_underline (GTK_LABEL (priv->label_widget), use_underline); g_object_notify (G_OBJECT (expander), "use-underline"); } @@ -1767,14 +1846,14 @@ gtk_expander_set_use_underline (GtkExpander *expander, * gtk_expander_get_use_underline: * @expander: a #GtkExpander * - * Returns whether an embedded underline in the expander label indicates a - * mnemonic. See gtk_expander_set_use_underline(). + * Returns whether an embedded underline in the expander label + * indicates a mnemonic. See gtk_expander_set_use_underline(). * - * Return value: %TRUE if an embedded underline in the expander label - * indicates the mnemonic accelerator keys. + * Return value: %TRUE if an embedded underline in the expander + * label indicates the mnemonic accelerator keys * * Since: 2.4 - **/ + */ gboolean gtk_expander_get_use_underline (GtkExpander *expander) { @@ -1793,10 +1872,10 @@ gtk_expander_get_use_underline (GtkExpander *expander) * language</link>. See gtk_label_set_markup(). * * Since: 2.4 - **/ + */ void gtk_expander_set_use_markup (GtkExpander *expander, - gboolean use_markup) + gboolean use_markup) { GtkExpanderPrivate *priv; @@ -1811,7 +1890,7 @@ gtk_expander_set_use_markup (GtkExpander *expander, priv->use_markup = use_markup; if (GTK_IS_LABEL (priv->label_widget)) - gtk_label_set_use_markup (GTK_LABEL (priv->label_widget), use_markup); + gtk_label_set_use_markup (GTK_LABEL (priv->label_widget), use_markup); g_object_notify (G_OBJECT (expander), "use-markup"); } @@ -1823,12 +1902,12 @@ gtk_expander_set_use_markup (GtkExpander *expander, * * Returns whether the label's text is interpreted as marked up with * the <link linkend="PangoMarkupFormat">Pango text markup - * language</link>. See gtk_expander_set_use_markup (). + * language</link>. See gtk_expander_set_use_markup(). * * Return value: %TRUE if the label's text will be parsed for markup * * Since: 2.4 - **/ + */ gboolean gtk_expander_get_use_markup (GtkExpander *expander) { @@ -1846,10 +1925,10 @@ gtk_expander_get_use_markup (GtkExpander *expander) * that will appear embedded alongside the expander arrow. * * Since: 2.4 - **/ + */ void gtk_expander_set_label_widget (GtkExpander *expander, - GtkWidget *label_widget) + GtkWidget *label_widget) { GtkExpanderPrivate *priv; GtkWidget *widget; @@ -1879,7 +1958,7 @@ gtk_expander_set_label_widget (GtkExpander *expander, gtk_widget_set_parent (label_widget, widget); if (priv->prelight) - gtk_widget_set_state_flags (label_widget, + gtk_widget_set_state_flags (label_widget, GTK_STATE_FLAG_PRELIGHT, FALSE); } @@ -1901,10 +1980,10 @@ gtk_expander_set_label_widget (GtkExpander *expander, * gtk_expander_set_label_widget(). * * Return value: (transfer none): the label widget, - * or %NULL if there is none. + * or %NULL if there is none * * Since: 2.4 - **/ + */ GtkWidget * gtk_expander_get_label_widget (GtkExpander *expander) { @@ -1916,11 +1995,11 @@ gtk_expander_get_label_widget (GtkExpander *expander) /** * gtk_expander_set_label_fill: * @expander: a #GtkExpander - * @label_fill: %TRUE if the label should should fill all available horizontal - * space + * @label_fill: %TRUE if the label should should fill + * all available horizontal space * - * Sets whether the label widget should fill all available horizontal space - * allocated to @expander. + * Sets whether the label widget should fill all available + * horizontal space allocated to @expander. * * Since: 2.22 */ @@ -1951,11 +2030,11 @@ gtk_expander_set_label_fill (GtkExpander *expander, * gtk_expander_get_label_fill: * @expander: a #GtkExpander * - * Returns whether the label widget will fill all available horizontal - * space allocated to @expander. + * Returns whether the label widget will fill all available + * horizontal space allocated to @expander. * - * Return value: %TRUE if the label widget will fill all available horizontal - * space + * Return value: %TRUE if the label widget will fill all + * available horizontal space * * Since: 2.22 */ @@ -1966,4 +2045,3 @@ gtk_expander_get_label_fill (GtkExpander *expander) return expander->priv->label_fill; } - |