From 0779d0a37ee0183e461e8a42977f36afb7beefea Mon Sep 17 00:00:00 2001 From: Cody Russell Date: Thu, 22 Oct 2009 16:05:52 -0500 Subject: Move GSEAL'd members of GtkAccelLabel into private struct. --- gtk/gtkaccellabel.c | 152 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 88 insertions(+), 64 deletions(-) (limited to 'gtk/gtkaccellabel.c') diff --git a/gtk/gtkaccellabel.c b/gtk/gtkaccellabel.c index da982bddf0..49cdbee03c 100644 --- a/gtk/gtkaccellabel.c +++ b/gtk/gtkaccellabel.c @@ -99,6 +99,16 @@ enum { PROP_ACCEL_WIDGET }; +struct _GtkAccelLabelPrivate +{ + guint accel_padding; /* should be style property? */ + GtkWidget *accel_widget; /* done*/ + GClosure *accel_closure; /* has set function */ + GtkAccelGroup *accel_group; /* set by set_accel_closure() */ + gchar *accel_string; /* has set function */ + guint16 accel_string_width; /* seems to be private */ +}; + static void gtk_accel_label_set_property (GObject *object, guint prop_id, const GValue *value, @@ -115,6 +125,7 @@ static gboolean gtk_accel_label_expose_event (GtkWidget *widget, GdkEventExpose *event); static const gchar *gtk_accel_label_get_string (GtkAccelLabel *accel_label); +#define GTK_ACCEL_LABEL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_ACCEL_LABEL, GtkAccelLabelPrivate)) G_DEFINE_TYPE (GtkAccelLabel, gtk_accel_label, GTK_TYPE_LABEL) @@ -186,6 +197,8 @@ gtk_accel_label_class_init (GtkAccelLabelClass *class) P_("The widget to be monitored for accelerator changes"), GTK_TYPE_WIDGET, GTK_PARAM_READWRITE)); + + g_type_class_add_private (gobject_class, sizeof (GtkAccelLabelPrivate)); } static void @@ -225,10 +238,10 @@ gtk_accel_label_get_property (GObject *object, switch (prop_id) { case PROP_ACCEL_CLOSURE: - g_value_set_boxed (value, accel_label->accel_closure); + g_value_set_boxed (value, accel_label->priv->accel_closure); break; case PROP_ACCEL_WIDGET: - g_value_set_object (value, accel_label->accel_widget); + g_value_set_object (value, accel_label->priv->accel_widget); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -239,11 +252,15 @@ gtk_accel_label_get_property (GObject *object, static void gtk_accel_label_init (GtkAccelLabel *accel_label) { - accel_label->accel_padding = 3; - accel_label->accel_widget = NULL; - accel_label->accel_closure = NULL; - accel_label->accel_group = NULL; - accel_label->accel_string = NULL; + GtkAccelLabelPrivate *priv = GTK_ACCEL_LABEL_GET_PRIVATE (accel_label); + + priv->accel_padding = 3; + priv->accel_widget = NULL; + priv->accel_closure = NULL; + priv->accel_group = NULL; + priv->accel_string = NULL; + + accel_label->priv = priv; } /** @@ -284,8 +301,8 @@ gtk_accel_label_finalize (GObject *object) { GtkAccelLabel *accel_label = GTK_ACCEL_LABEL (object); - g_free (accel_label->accel_string); - + g_free (accel_label->priv->accel_string); + G_OBJECT_CLASS (gtk_accel_label_parent_class)->finalize (object); } @@ -303,7 +320,7 @@ gtk_accel_label_get_accel_widget (GtkAccelLabel *accel_label) { g_return_val_if_fail (GTK_IS_ACCEL_LABEL (accel_label), NULL); - return accel_label->accel_widget; + return accel_label->priv->accel_widget; } /** @@ -320,9 +337,9 @@ guint gtk_accel_label_get_accel_width (GtkAccelLabel *accel_label) { g_return_val_if_fail (GTK_IS_ACCEL_LABEL (accel_label), 0); - - return (accel_label->accel_string_width + - (accel_label->accel_string_width ? accel_label->accel_padding : 0)); + + return (accel_label->priv->accel_string_width + + (accel_label->priv->accel_string_width ? accel_label->priv->accel_padding : 0)); } static void @@ -337,8 +354,8 @@ gtk_accel_label_size_request (GtkWidget *widget, layout = gtk_widget_create_pango_layout (widget, gtk_accel_label_get_string (accel_label)); pango_layout_get_pixel_size (layout, &width, NULL); - accel_label->accel_string_width = width; - + accel_label->priv->accel_string_width = width; + g_object_unref (layout); } @@ -368,10 +385,14 @@ gtk_accel_label_expose_event (GtkWidget *widget, if (gtk_widget_is_drawable (widget)) { guint ac_width; - + GtkAllocation allocation; + GtkRequisition requisition; + ac_width = gtk_accel_label_get_accel_width (accel_label); - - if (widget->allocation.width >= widget->requisition.width + ac_width) + gtk_widget_get_allocation (widget, &allocation); + gtk_widget_size_request (widget, &requisition); + + if (allocation.width >= requisition.width + ac_width) { PangoLayout *label_layout; PangoLayout *accel_layout; @@ -379,12 +400,13 @@ gtk_accel_label_expose_event (GtkWidget *widget, gint x; gint y; - + gint xpad; + label_layout = gtk_label_get_layout (GTK_LABEL (accel_label)); if (direction == GTK_TEXT_DIR_RTL) - widget->allocation.x += ac_width; - widget->allocation.width -= ac_width; + allocation.x += ac_width; + allocation.width -= ac_width; if (gtk_label_get_ellipsize (label)) pango_layout_set_width (label_layout, pango_layout_get_width (label_layout) @@ -393,17 +415,19 @@ gtk_accel_label_expose_event (GtkWidget *widget, if (GTK_WIDGET_CLASS (gtk_accel_label_parent_class)->expose_event) GTK_WIDGET_CLASS (gtk_accel_label_parent_class)->expose_event (widget, event); if (direction == GTK_TEXT_DIR_RTL) - widget->allocation.x -= ac_width; - widget->allocation.width += ac_width; + allocation.x -= ac_width; + allocation.width += ac_width; if (gtk_label_get_ellipsize (label)) pango_layout_set_width (label_layout, pango_layout_get_width (label_layout) + ac_width * PANGO_SCALE); - + + gtk_misc_get_padding (misc, &xpad, NULL); + if (direction == GTK_TEXT_DIR_RTL) - x = widget->allocation.x + misc->xpad; + x = allocation.x + xpad; else - x = widget->allocation.x + widget->allocation.width - misc->xpad - ac_width; + x = allocation.x + allocation.width - xpad - ac_width; gtk_label_get_layout_offsets (GTK_LABEL (accel_label), NULL, &y); @@ -411,8 +435,8 @@ gtk_accel_label_expose_event (GtkWidget *widget, y += get_first_baseline (label_layout) - get_first_baseline (accel_layout); - gtk_paint_layout (widget->style, - widget->window, + gtk_paint_layout (gtk_widget_get_style (widget), + gtk_widget_get_window (widget), gtk_widget_get_state (widget), FALSE, &event->area, @@ -440,9 +464,9 @@ refetch_widget_accel_closure (GtkAccelLabel *accel_label) GList *clist, *list; g_return_if_fail (GTK_IS_ACCEL_LABEL (accel_label)); - g_return_if_fail (GTK_IS_WIDGET (accel_label->accel_widget)); + g_return_if_fail (GTK_IS_WIDGET (accel_label->priv->accel_widget)); - clist = gtk_widget_list_accel_closures (accel_label->accel_widget); + clist = gtk_widget_list_accel_closures (accel_label->priv->accel_widget); for (list = clist; list; list = list->next) { /* we just take the first closure used */ @@ -468,21 +492,21 @@ gtk_accel_label_set_accel_widget (GtkAccelLabel *accel_label, if (accel_widget) g_return_if_fail (GTK_IS_WIDGET (accel_widget)); - if (accel_widget != accel_label->accel_widget) + if (accel_widget != accel_label->priv->accel_widget) { - if (accel_label->accel_widget) + if (accel_label->priv->accel_widget) { gtk_accel_label_set_accel_closure (accel_label, NULL); - g_signal_handlers_disconnect_by_func (accel_label->accel_widget, + g_signal_handlers_disconnect_by_func (accel_label->priv->accel_widget, refetch_widget_accel_closure, accel_label); - g_object_unref (accel_label->accel_widget); + g_object_unref (accel_label->priv->accel_widget); } - accel_label->accel_widget = accel_widget; - if (accel_label->accel_widget) + accel_label->priv->accel_widget = accel_widget; + if (accel_label->priv->accel_widget) { - g_object_ref (accel_label->accel_widget); - g_signal_connect_object (accel_label->accel_widget, "accel-closures-changed", + g_object_ref (accel_label->priv->accel_widget); + g_signal_connect_object (accel_label->priv->accel_widget, "accel-closures-changed", G_CALLBACK (refetch_widget_accel_closure), accel_label, G_CONNECT_SWAPPED); refetch_widget_accel_closure (accel_label); @@ -494,10 +518,10 @@ gtk_accel_label_set_accel_widget (GtkAccelLabel *accel_label, static void gtk_accel_label_reset (GtkAccelLabel *accel_label) { - if (accel_label->accel_string) + if (accel_label->priv->accel_string) { - g_free (accel_label->accel_string); - accel_label->accel_string = NULL; + g_free (accel_label->priv->accel_string); + accel_label->priv->accel_string = NULL; } gtk_widget_queue_resize (GTK_WIDGET (accel_label)); @@ -510,7 +534,7 @@ check_accel_changed (GtkAccelGroup *accel_group, GClosure *accel_closure, GtkAccelLabel *accel_label) { - if (accel_closure == accel_label->accel_closure) + if (accel_closure == accel_label->priv->accel_closure) gtk_accel_label_reset (accel_label); } @@ -530,22 +554,22 @@ gtk_accel_label_set_accel_closure (GtkAccelLabel *accel_label, if (accel_closure) g_return_if_fail (gtk_accel_group_from_accel_closure (accel_closure) != NULL); - if (accel_closure != accel_label->accel_closure) + if (accel_closure != accel_label->priv->accel_closure) { - if (accel_label->accel_closure) + if (accel_label->priv->accel_closure) { - g_signal_handlers_disconnect_by_func (accel_label->accel_group, + g_signal_handlers_disconnect_by_func (accel_label->priv->accel_group, check_accel_changed, accel_label); - accel_label->accel_group = NULL; - g_closure_unref (accel_label->accel_closure); + accel_label->priv->accel_group = NULL; + g_closure_unref (accel_label->priv->accel_closure); } - accel_label->accel_closure = accel_closure; - if (accel_label->accel_closure) + accel_label->priv->accel_closure = accel_closure; + if (accel_label->priv->accel_closure) { - g_closure_ref (accel_label->accel_closure); - accel_label->accel_group = gtk_accel_group_from_accel_closure (accel_closure); - g_signal_connect_object (accel_label->accel_group, "accel-changed", + g_closure_ref (accel_label->priv->accel_closure); + accel_label->priv->accel_group = gtk_accel_group_from_accel_closure (accel_closure); + g_signal_connect_object (accel_label->priv->accel_group, "accel-changed", G_CALLBACK (check_accel_changed), accel_label, 0); } @@ -565,10 +589,10 @@ find_accel (GtkAccelKey *key, static const gchar * gtk_accel_label_get_string (GtkAccelLabel *accel_label) { - if (!accel_label->accel_string) + if (!accel_label->priv->accel_string) gtk_accel_label_refetch (accel_label); - return accel_label->accel_string; + return accel_label->priv->accel_string; } /* Underscores in key names are better displayed as spaces @@ -838,19 +862,19 @@ gtk_accel_label_refetch (GtkAccelLabel *accel_label) g_return_val_if_fail (GTK_IS_ACCEL_LABEL (accel_label), FALSE); - if (accel_label->accel_string) + if (accel_label->priv->accel_string) { - g_free (accel_label->accel_string); - accel_label->accel_string = NULL; + g_free (accel_label->priv->accel_string); + accel_label->priv->accel_string = NULL; } g_object_get (gtk_widget_get_settings (GTK_WIDGET (accel_label)), "gtk-enable-accels", &enable_accels, NULL); - if (enable_accels && accel_label->accel_closure) + if (enable_accels && accel_label->priv->accel_closure) { - GtkAccelKey *key = gtk_accel_group_find (accel_label->accel_group, find_accel, accel_label->accel_closure); + GtkAccelKey *key = gtk_accel_group_find (accel_label->priv->accel_group, find_accel, accel_label->priv->accel_closure); if (key && key->accel_flags & GTK_ACCEL_VISIBLE) { @@ -861,15 +885,15 @@ gtk_accel_label_refetch (GtkAccelLabel *accel_label) tmp = _gtk_accel_label_class_get_accelerator_label (klass, key->accel_key, key->accel_mods); - accel_label->accel_string = g_strconcat (" ", tmp, NULL); + accel_label->priv->accel_string = g_strconcat (" ", tmp, NULL); g_free (tmp); } - if (!accel_label->accel_string) - accel_label->accel_string = g_strdup ("-/-"); + if (!accel_label->priv->accel_string) + accel_label->priv->accel_string = g_strdup ("-/-"); } - if (!accel_label->accel_string) - accel_label->accel_string = g_strdup (""); + if (!accel_label->priv->accel_string) + accel_label->priv->accel_string = g_strdup (""); gtk_widget_queue_resize (GTK_WIDGET (accel_label)); -- cgit v1.2.1