From c295ab0943e78c673e49ff5199b1429dd43921db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jard=C3=B3n?= Date: Mon, 18 Oct 2010 19:39:19 +0200 Subject: [PATCH] gtktbutton: Move public members to private structure --- docs/reference/gtk/gtk3-sections.txt | 1 + gtk/gtkbutton.c | 413 +++++++++++++++------------ gtk/gtkbutton.h | 22 +- 3 files changed, 239 insertions(+), 197 deletions(-) diff --git a/docs/reference/gtk/gtk3-sections.txt b/docs/reference/gtk/gtk3-sections.txt index fe96c8190e..c81909b05a 100644 --- a/docs/reference/gtk/gtk3-sections.txt +++ b/docs/reference/gtk/gtk3-sections.txt @@ -578,6 +578,7 @@ GTK_BUTTON_CLASS GTK_IS_BUTTON_CLASS GTK_BUTTON_GET_CLASS +GtkButtonPrivate gtk_button_get_type diff --git a/gtk/gtkbutton.c b/gtk/gtkbutton.c index 5a37262ace..c341ccb0ad 100644 --- a/gtk/gtkbutton.c +++ b/gtk/gtkbutton.c @@ -56,6 +56,38 @@ #include "gtkintl.h" +struct _GtkButtonPrivate +{ + GtkAction *action; + GtkPositionType image_position; + GtkWidget *image; + + GdkDevice *grab_keyboard; + GdkWindow *event_window; + + gchar *label_text; + + gfloat xalign; + gfloat yalign; + + guint activate_timeout; + guint32 grab_time; + + guint align_set : 1; + guint button_down : 1; + guint constructed : 1; + guint depressed : 1; + guint depress_on_activate : 1; + guint focus_on_click : 1; + guint image_is_stock : 1; + guint in_button : 1; + guint relief : 2; + guint use_action_appearance : 1; + guint use_stock : 1; + guint use_underline : 1; +}; + + static const GtkBorder default_default_border = { 1, 1, 1, 1 }; static const GtkBorder default_default_outside_border = { 0, 0, 0, 0 }; static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; @@ -65,6 +97,7 @@ static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; */ #define ACTIVATE_TIMEOUT 250 + enum { PRESSED, RELEASED, @@ -92,22 +125,6 @@ enum { PROP_ACTIVATABLE_USE_ACTION_APPEARANCE }; -#define GTK_BUTTON_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_BUTTON, GtkButtonPrivate)) -typedef struct _GtkButtonPrivate GtkButtonPrivate; - -struct _GtkButtonPrivate -{ - gfloat xalign; - gfloat yalign; - GtkWidget *image; - guint align_set : 1; - guint image_is_stock : 1; - guint use_action_appearance : 1; - guint32 grab_time; - GdkDevice *grab_keyboard; - GtkPositionType image_position; - GtkAction *action; -}; static void gtk_button_destroy (GtkWidget *widget); static void gtk_button_dispose (GObject *object); @@ -544,23 +561,28 @@ gtk_button_class_init (GtkButtonClass *klass) static void gtk_button_init (GtkButton *button) { - GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (button); + GtkButtonPrivate *priv; + + button->priv = G_TYPE_INSTANCE_GET_PRIVATE (button, + GTK_TYPE_BUTTON, + GtkButtonPrivate); + priv = button->priv; gtk_widget_set_can_focus (GTK_WIDGET (button), TRUE); gtk_widget_set_receives_default (GTK_WIDGET (button), TRUE); gtk_widget_set_has_window (GTK_WIDGET (button), FALSE); - button->label_text = NULL; - - button->constructed = FALSE; - button->in_button = FALSE; - button->button_down = FALSE; - button->relief = GTK_RELIEF_NORMAL; - button->use_stock = FALSE; - button->use_underline = FALSE; - button->depressed = FALSE; - button->depress_on_activate = TRUE; - button->focus_on_click = TRUE; + priv->label_text = NULL; + + priv->constructed = FALSE; + priv->in_button = FALSE; + priv->button_down = FALSE; + priv->relief = GTK_RELIEF_NORMAL; + priv->use_stock = FALSE; + priv->use_underline = FALSE; + priv->depressed = FALSE; + priv->depress_on_activate = TRUE; + priv->focus_on_click = TRUE; priv->xalign = 0.5; priv->yalign = 0.5; @@ -574,11 +596,12 @@ static void gtk_button_destroy (GtkWidget *widget) { GtkButton *button = GTK_BUTTON (widget); + GtkButtonPrivate *priv = button->priv; - if (button->label_text) + if (priv->label_text) { - g_free (button->label_text); - button->label_text = NULL; + g_free (priv->label_text); + priv->label_text = NULL; } GTK_WIDGET_CLASS (gtk_button_parent_class)->destroy (widget); @@ -591,15 +614,18 @@ gtk_button_constructor (GType type, { GObject *object; GtkButton *button; + GtkButtonPrivate *priv; object = G_OBJECT_CLASS (gtk_button_parent_class)->constructor (type, n_construct_properties, construct_params); button = GTK_BUTTON (object); - button->constructed = TRUE; + priv = button->priv; - if (button->label_text != NULL) + priv->constructed = TRUE; + + if (priv->label_text != NULL) gtk_button_construct_child (button); return object; @@ -619,7 +645,7 @@ static void maybe_set_alignment (GtkButton *button, GtkWidget *widget) { - GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (button); + GtkButtonPrivate *priv = button->priv; if (GTK_IS_MISC (widget)) { @@ -658,7 +684,7 @@ static void gtk_button_dispose (GObject *object) { GtkButton *button = GTK_BUTTON (object); - GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (button); + GtkButtonPrivate *priv = button->priv; if (priv->action) { @@ -675,7 +701,7 @@ gtk_button_set_property (GObject *object, GParamSpec *pspec) { GtkButton *button = GTK_BUTTON (object); - GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (button); + GtkButtonPrivate *priv = button->priv; switch (prop_id) { @@ -725,27 +751,27 @@ gtk_button_get_property (GObject *object, GParamSpec *pspec) { GtkButton *button = GTK_BUTTON (object); - GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (button); + GtkButtonPrivate *priv = button->priv; switch (prop_id) { case PROP_LABEL: - g_value_set_string (value, button->label_text); + g_value_set_string (value, priv->label_text); break; case PROP_IMAGE: g_value_set_object (value, (GObject *)priv->image); break; case PROP_RELIEF: - g_value_set_enum (value, gtk_button_get_relief (button)); + g_value_set_enum (value, priv->relief); break; case PROP_USE_UNDERLINE: - g_value_set_boolean (value, button->use_underline); + g_value_set_boolean (value, priv->use_underline); break; case PROP_USE_STOCK: - g_value_set_boolean (value, button->use_stock); + g_value_set_boolean (value, priv->use_stock); break; case PROP_FOCUS_ON_CLICK: - g_value_set_boolean (value, button->focus_on_click); + g_value_set_boolean (value, priv->focus_on_click); break; case PROP_XALIGN: g_value_set_float (value, priv->xalign); @@ -844,7 +870,8 @@ gtk_button_update (GtkActivatable *activatable, GtkAction *action, const gchar *property_name) { - GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (activatable); + GtkButton *button = GTK_BUTTON (activatable); + GtkButtonPrivate *priv = button->priv; if (strcmp (property_name, "visible") == 0) { @@ -873,7 +900,8 @@ static void gtk_button_sync_action_properties (GtkActivatable *activatable, GtkAction *action) { - GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (activatable); + GtkButton *button = GTK_BUTTON (activatable); + GtkButtonPrivate *priv = button->priv; if (!action) return; @@ -898,7 +926,7 @@ static void gtk_button_set_related_action (GtkButton *button, GtkAction *action) { - GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (button); + GtkButtonPrivate *priv = button->priv; if (priv->action == action) return; @@ -921,7 +949,7 @@ static void gtk_button_set_use_action_appearance (GtkButton *button, gboolean use_appearance) { - GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (button); + GtkButtonPrivate *priv = button->priv; if (priv->use_action_appearance != use_appearance) { @@ -948,9 +976,10 @@ gtk_button_new (void) static gboolean show_image (GtkButton *button) { + GtkButtonPrivate *priv = button->priv; gboolean show; - - if (button->label_text) + + if (priv->label_text) { GtkSettings *settings; @@ -966,7 +995,7 @@ show_image (GtkButton *button) static void gtk_button_construct_child (GtkButton *button) { - GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (button); + GtkButtonPrivate *priv = button->priv; GtkStockItem item; GtkWidget *child; GtkWidget *label; @@ -976,10 +1005,10 @@ gtk_button_construct_child (GtkButton *button) gchar *label_text = NULL; gint image_spacing; - if (!button->constructed) + if (!priv->constructed) return; - if (!button->label_text && !priv->image) + if (!priv->label_text && !priv->image) return; gtk_widget_style_get (GTK_WIDGET (button), @@ -1003,17 +1032,17 @@ gtk_button_construct_child (GtkButton *button) if (child) gtk_container_remove (GTK_CONTAINER (button), child); - if (button->use_stock && - button->label_text && - gtk_stock_lookup (button->label_text, &item)) + if (priv->use_stock && + priv->label_text && + gtk_stock_lookup (priv->label_text, &item)) { if (!image) - image = g_object_ref (gtk_image_new_from_stock (button->label_text, GTK_ICON_SIZE_BUTTON)); + image = g_object_ref (gtk_image_new_from_stock (priv->label_text, GTK_ICON_SIZE_BUTTON)); label_text = item.label; } else - label_text = button->label_text; + label_text = priv->label_text; if (image) { @@ -1042,7 +1071,7 @@ gtk_button_construct_child (GtkButton *button) if (label_text) { - if (button->use_underline || button->use_stock) + if (priv->use_underline || priv->use_stock) { label = gtk_label_new_with_mnemonic (label_text); gtk_label_set_mnemonic_widget (GTK_LABEL (label), @@ -1067,13 +1096,13 @@ gtk_button_construct_child (GtkButton *button) return; } - if (button->use_underline || button->use_stock) + if (priv->use_underline || priv->use_stock) { - label = gtk_label_new_with_mnemonic (button->label_text); + label = gtk_label_new_with_mnemonic (priv->label_text); gtk_label_set_mnemonic_widget (GTK_LABEL (label), GTK_WIDGET (button)); } else - label = gtk_label_new (button->label_text); + label = gtk_label_new (priv->label_text); if (priv->align_set) gtk_misc_set_alignment (GTK_MISC (label), priv->xalign, priv->yalign); @@ -1153,7 +1182,6 @@ gtk_button_pressed (GtkButton *button) { g_return_if_fail (GTK_IS_BUTTON (button)); - g_signal_emit (button, button_signals[PRESSED], 0); } @@ -1234,11 +1262,15 @@ void gtk_button_set_relief (GtkButton *button, GtkReliefStyle newrelief) { + GtkButtonPrivate *priv; + g_return_if_fail (GTK_IS_BUTTON (button)); - if (newrelief != button->relief) + priv = button->priv; + + if (newrelief != priv->relief) { - button->relief = newrelief; + priv->relief = newrelief; g_object_notify (G_OBJECT (button), "relief"); gtk_widget_queue_draw (GTK_WIDGET (button)); } @@ -1257,13 +1289,14 @@ gtk_button_get_relief (GtkButton *button) { g_return_val_if_fail (GTK_IS_BUTTON (button), GTK_RELIEF_NORMAL); - return button->relief; + return button->priv->relief; } static void gtk_button_realize (GtkWidget *widget) { GtkButton *button = GTK_BUTTON (widget); + GtkButtonPrivate *priv = button->priv; GtkAllocation allocation; GdkWindow *window; GdkWindowAttr attributes; @@ -1291,9 +1324,9 @@ gtk_button_realize (GtkWidget *widget) gtk_widget_set_window (widget, window); g_object_ref (window); - button->event_window = gdk_window_new (window, - &attributes, attributes_mask); - gdk_window_set_user_data (button->event_window, button); + priv->event_window = gdk_window_new (window, + &attributes, attributes_mask); + gdk_window_set_user_data (priv->event_window, button); gtk_widget_style_attach (widget); } @@ -1302,17 +1335,18 @@ static void gtk_button_unrealize (GtkWidget *widget) { GtkButton *button = GTK_BUTTON (widget); + GtkButtonPrivate *priv = button->priv; - if (button->activate_timeout) + if (priv->activate_timeout) gtk_button_finish_activate (button, FALSE); - if (button->event_window) + if (priv->event_window) { - gdk_window_set_user_data (button->event_window, NULL); - gdk_window_destroy (button->event_window); - button->event_window = NULL; + gdk_window_set_user_data (priv->event_window, NULL); + gdk_window_destroy (priv->event_window); + priv->event_window = NULL; } - + GTK_WIDGET_CLASS (gtk_button_parent_class)->unrealize (widget); } @@ -1320,20 +1354,22 @@ static void gtk_button_map (GtkWidget *widget) { GtkButton *button = GTK_BUTTON (widget); - + GtkButtonPrivate *priv = button->priv; + GTK_WIDGET_CLASS (gtk_button_parent_class)->map (widget); - if (button->event_window) - gdk_window_show (button->event_window); + if (priv->event_window) + gdk_window_show (priv->event_window); } static void gtk_button_unmap (GtkWidget *widget) { GtkButton *button = GTK_BUTTON (widget); - - if (button->event_window) - gdk_window_hide (button->event_window); + GtkButtonPrivate *priv = button->priv; + + if (priv->event_window) + gdk_window_hide (priv->event_window); GTK_WIDGET_CLASS (gtk_button_parent_class)->unmap (widget); } @@ -1341,7 +1377,7 @@ gtk_button_unmap (GtkWidget *widget) static void gtk_button_update_image_spacing (GtkButton *button) { - GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (button); + GtkButtonPrivate *priv = button->priv; GtkWidget *child; gint spacing; @@ -1349,7 +1385,7 @@ gtk_button_update_image_spacing (GtkButton *button) * we only want to update the spacing if the box * was constructed there. */ - if (!button->constructed || !priv->image) + if (!priv->constructed || !priv->image) return; child = gtk_bin_get_child (GTK_BIN (button)); @@ -1432,6 +1468,7 @@ gtk_button_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { GtkButton *button = GTK_BUTTON (widget); + GtkButtonPrivate *priv = button->priv; GtkAllocation child_allocation; GtkStyle *style; GtkWidget *child; @@ -1455,7 +1492,7 @@ gtk_button_size_allocate (GtkWidget *widget, gtk_widget_set_allocation (widget, allocation); if (gtk_widget_get_realized (widget)) - gdk_window_move_resize (button->event_window, + gdk_window_move_resize (priv->event_window, allocation->x, allocation->y, allocation->width, @@ -1495,7 +1532,7 @@ gtk_button_size_allocate (GtkWidget *widget, child_allocation.height = child_allocation.height - (focus_width + focus_pad) * 2; } - if (button->depressed) + if (priv->depressed) { gint child_displacement_x; gint child_displacement_y; @@ -1525,6 +1562,7 @@ _gtk_button_paint (GtkButton *button, const gchar *main_detail, const gchar *default_detail) { + GtkButtonPrivate *priv = button->priv; GtkWidget *widget; gint x, y; GtkBorder default_border; @@ -1552,7 +1590,7 @@ _gtk_button_paint (GtkButton *button, y = 0; if (gtk_widget_has_default (widget) && - GTK_BUTTON (widget)->relief == GTK_RELIEF_NORMAL) + priv->relief == GTK_RELIEF_NORMAL) { gtk_paint_box (style, cr, GTK_STATE_NORMAL, GTK_SHADOW_IN, @@ -1580,7 +1618,7 @@ _gtk_button_paint (GtkButton *button, height -= 2 * (focus_width + focus_pad); } - if (button->relief != GTK_RELIEF_NONE || button->depressed || + if (priv->relief != GTK_RELIEF_NONE || priv->depressed || gtk_widget_get_state(widget) == GTK_STATE_PRELIGHT) gtk_paint_box (style, cr, state_type, @@ -1614,7 +1652,7 @@ _gtk_button_paint (GtkButton *button, height += 2 * (focus_width + focus_pad); } - if (button->depressed && displace_focus) + if (priv->depressed && displace_focus) { x += child_displacement_x; y += child_displacement_y; @@ -1632,12 +1670,13 @@ gtk_button_draw (GtkWidget *widget, cairo_t *cr) { GtkButton *button = GTK_BUTTON (widget); - + GtkButtonPrivate *priv = button->priv; + _gtk_button_paint (button, cr, gtk_widget_get_allocated_width (widget), gtk_widget_get_allocated_height (widget), gtk_widget_get_state (widget), - button->depressed ? GTK_SHADOW_IN : GTK_SHADOW_OUT, + priv->depressed ? GTK_SHADOW_IN : GTK_SHADOW_OUT, "button", "buttondefault"); GTK_WIDGET_CLASS (gtk_button_parent_class)->draw (widget, cr); @@ -1650,12 +1689,14 @@ gtk_button_button_press (GtkWidget *widget, GdkEventButton *event) { GtkButton *button; + GtkButtonPrivate *priv; if (event->type == GDK_BUTTON_PRESS) { button = GTK_BUTTON (widget); + priv = button->priv; - if (button->focus_on_click && !gtk_widget_has_focus (widget)) + if (priv->focus_on_click && !gtk_widget_has_focus (widget)) gtk_widget_grab_focus (widget); if (event->button == 1) @@ -1685,17 +1726,18 @@ gtk_button_grab_broken (GtkWidget *widget, GdkEventGrabBroken *event) { GtkButton *button = GTK_BUTTON (widget); + GtkButtonPrivate *priv = button->priv; gboolean save_in; /* Simulate a button release without the pointer in the button */ - if (button->button_down) + if (priv->button_down) { - save_in = button->in_button; - button->in_button = FALSE; + save_in = priv->in_button; + priv->in_button = FALSE; gtk_button_released (button); - if (save_in != button->in_button) + if (save_in != priv->in_button) { - button->in_button = save_in; + priv->in_button = save_in; gtk_button_update_state (button); } } @@ -1708,8 +1750,9 @@ gtk_button_key_release (GtkWidget *widget, GdkEventKey *event) { GtkButton *button = GTK_BUTTON (widget); + GtkButtonPrivate *priv = button->priv; - if (button->activate_timeout) + if (priv->activate_timeout) { gtk_button_finish_activate (button, TRUE); return TRUE; @@ -1724,14 +1767,13 @@ static gboolean gtk_button_enter_notify (GtkWidget *widget, GdkEventCrossing *event) { - GtkButton *button; + GtkButton *button = GTK_BUTTON (widget); + GtkButtonPrivate *priv = button->priv; - button = GTK_BUTTON (widget); - - if ((event->window == button->event_window) && + if ((event->window == button->priv->event_window) && (event->detail != GDK_NOTIFY_INFERIOR)) { - button->in_button = TRUE; + priv->in_button = TRUE; gtk_button_enter (button); } @@ -1742,15 +1784,14 @@ static gboolean gtk_button_leave_notify (GtkWidget *widget, GdkEventCrossing *event) { - GtkButton *button; + GtkButton *button = GTK_BUTTON (widget); + GtkButtonPrivate *priv = button->priv; - button = GTK_BUTTON (widget); - - if ((event->window == button->event_window) && + if ((event->window == button->priv->event_window) && (event->detail != GDK_NOTIFY_INFERIOR) && (gtk_widget_get_sensitive (widget))) { - button->in_button = FALSE; + priv->in_button = FALSE; gtk_button_leave (button); } @@ -1760,24 +1801,28 @@ gtk_button_leave_notify (GtkWidget *widget, static void gtk_real_button_pressed (GtkButton *button) { - if (button->activate_timeout) + GtkButtonPrivate *priv = button->priv; + + if (priv->activate_timeout) return; - - button->button_down = TRUE; + + priv->button_down = TRUE; gtk_button_update_state (button); } static void gtk_real_button_released (GtkButton *button) { - if (button->button_down) - { - button->button_down = FALSE; + GtkButtonPrivate *priv = button->priv; - if (button->activate_timeout) + if (priv->button_down) + { + priv->button_down = FALSE; + + if (priv->activate_timeout) return; - - if (button->in_button) + + if (priv->in_button) gtk_button_clicked (button); gtk_button_update_state (button); @@ -1787,7 +1832,7 @@ gtk_real_button_released (GtkButton *button) static void gtk_real_button_clicked (GtkButton *button) { - GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (button); + GtkButtonPrivate *priv = button->priv; if (priv->action) gtk_action_activate (priv->action); @@ -1805,11 +1850,10 @@ static void gtk_real_button_activate (GtkButton *button) { GtkWidget *widget = GTK_WIDGET (button); - GtkButtonPrivate *priv; + GtkButtonPrivate *priv = button->priv; GdkDevice *device; guint32 time; - priv = GTK_BUTTON_GET_PRIVATE (button); device = gtk_get_current_event_device (); if (device && device->source != GDK_SOURCE_KEYBOARD) @@ -1817,11 +1861,11 @@ gtk_real_button_activate (GtkButton *button) g_return_if_fail (device && device->source == GDK_SOURCE_KEYBOARD); - if (gtk_widget_get_realized (widget) && !button->activate_timeout) + if (gtk_widget_get_realized (widget) && !priv->activate_timeout) { time = gtk_get_current_event_time (); - if (gdk_device_grab (device, button->event_window, + if (gdk_device_grab (device, priv->event_window, GDK_OWNERSHIP_WINDOW, TRUE, GDK_KEY_PRESS | GDK_KEY_RELEASE, NULL, time) == GDK_GRAB_SUCCESS) @@ -1831,10 +1875,10 @@ gtk_real_button_activate (GtkButton *button) priv->grab_time = time; } - button->activate_timeout = gdk_threads_add_timeout (ACTIVATE_TIMEOUT, + priv->activate_timeout = gdk_threads_add_timeout (ACTIVATE_TIMEOUT, button_activate_timeout, button); - button->button_down = TRUE; + priv->button_down = TRUE; gtk_button_update_state (button); gtk_widget_queue_draw (GTK_WIDGET (button)); } @@ -1845,12 +1889,10 @@ gtk_button_finish_activate (GtkButton *button, gboolean do_it) { GtkWidget *widget = GTK_WIDGET (button); - GtkButtonPrivate *priv; - - priv = GTK_BUTTON_GET_PRIVATE (button); + GtkButtonPrivate *priv = button->priv; - g_source_remove (button->activate_timeout); - button->activate_timeout = 0; + g_source_remove (priv->activate_timeout); + priv->activate_timeout = 0; if (priv->grab_keyboard) { @@ -1859,7 +1901,7 @@ gtk_button_finish_activate (GtkButton *button, priv->grab_keyboard = NULL; } - button->button_down = FALSE; + priv->button_down = FALSE; gtk_button_update_state (button); gtk_widget_queue_draw (GTK_WIDGET (button)); @@ -1964,14 +2006,17 @@ void gtk_button_set_label (GtkButton *button, const gchar *label) { + GtkButtonPrivate *priv; gchar *new_label; - + g_return_if_fail (GTK_IS_BUTTON (button)); + priv = button->priv; + new_label = g_strdup (label); - g_free (button->label_text); - button->label_text = new_label; - + g_free (priv->label_text); + priv->label_text = new_label; + gtk_button_construct_child (button); g_object_notify (G_OBJECT (button), "label"); @@ -1994,8 +2039,8 @@ G_CONST_RETURN gchar * gtk_button_get_label (GtkButton *button) { g_return_val_if_fail (GTK_IS_BUTTON (button), NULL); - - return button->label_text; + + return button->priv->label_text; } /** @@ -2010,14 +2055,18 @@ void gtk_button_set_use_underline (GtkButton *button, gboolean use_underline) { + GtkButtonPrivate *priv; + g_return_if_fail (GTK_IS_BUTTON (button)); + priv = button->priv; + use_underline = use_underline != FALSE; - if (use_underline != button->use_underline) + if (use_underline != priv->use_underline) { - button->use_underline = use_underline; - + priv->use_underline = use_underline; + gtk_button_construct_child (button); g_object_notify (G_OBJECT (button), "use-underline"); @@ -2038,8 +2087,8 @@ gboolean gtk_button_get_use_underline (GtkButton *button) { g_return_val_if_fail (GTK_IS_BUTTON (button), FALSE); - - return button->use_underline; + + return button->priv->use_underline; } /** @@ -2054,14 +2103,18 @@ void gtk_button_set_use_stock (GtkButton *button, gboolean use_stock) { + GtkButtonPrivate *priv; + g_return_if_fail (GTK_IS_BUTTON (button)); + priv = button->priv; + use_stock = use_stock != FALSE; - if (use_stock != button->use_stock) + if (use_stock != priv->use_stock) { - button->use_stock = use_stock; - + priv->use_stock = use_stock; + gtk_button_construct_child (button); g_object_notify (G_OBJECT (button), "use-stock"); @@ -2082,8 +2135,8 @@ gboolean gtk_button_get_use_stock (GtkButton *button) { g_return_val_if_fail (GTK_IS_BUTTON (button), FALSE); - - return button->use_stock; + + return button->priv->use_stock; } /** @@ -2102,13 +2155,17 @@ void gtk_button_set_focus_on_click (GtkButton *button, gboolean focus_on_click) { + GtkButtonPrivate *priv; + g_return_if_fail (GTK_IS_BUTTON (button)); - + + priv = button->priv; + focus_on_click = focus_on_click != FALSE; - if (button->focus_on_click != focus_on_click) + if (priv->focus_on_click != focus_on_click) { - button->focus_on_click = focus_on_click; + priv->focus_on_click = focus_on_click; g_object_notify (G_OBJECT (button), "focus-on-click"); } @@ -2131,7 +2188,7 @@ gtk_button_get_focus_on_click (GtkButton *button) { g_return_val_if_fail (GTK_IS_BUTTON (button), FALSE); - return button->focus_on_click; + return button->priv->focus_on_click; } /** @@ -2156,7 +2213,7 @@ gtk_button_set_alignment (GtkButton *button, g_return_if_fail (GTK_IS_BUTTON (button)); - priv = GTK_BUTTON_GET_PRIVATE (button); + priv = button->priv; priv->xalign = xalign; priv->yalign = yalign; @@ -2189,7 +2246,7 @@ gtk_button_get_alignment (GtkButton *button, g_return_if_fail (GTK_IS_BUTTON (button)); - priv = GTK_BUTTON_GET_PRIVATE (button); + priv = button->priv; if (xalign) *xalign = priv->xalign; @@ -2212,12 +2269,13 @@ _gtk_button_set_depressed (GtkButton *button, gboolean depressed) { GtkWidget *widget = GTK_WIDGET (button); + GtkButtonPrivate *priv = button->priv; depressed = depressed != FALSE; - if (depressed != button->depressed) + if (depressed != priv->depressed) { - button->depressed = depressed; + priv->depressed = depressed; gtk_widget_queue_resize (widget); } } @@ -2225,15 +2283,16 @@ _gtk_button_set_depressed (GtkButton *button, static void gtk_button_update_state (GtkButton *button) { - gboolean depressed; + GtkButtonPrivate *priv = button->priv; GtkStateType new_state; + gboolean depressed; - if (button->activate_timeout) - depressed = button->depress_on_activate; + if (priv->activate_timeout) + depressed = priv->depress_on_activate; else - depressed = button->in_button && button->button_down; + depressed = priv->in_button && priv->button_down; - if (button->in_button && (!button->button_down || !depressed)) + if (priv->in_button && (!priv->button_down || !depressed)) new_state = GTK_STATE_PRELIGHT; else new_state = depressed ? GTK_STATE_ACTIVE : GTK_STATE_NORMAL; @@ -2245,7 +2304,7 @@ gtk_button_update_state (GtkButton *button) static void show_image_change_notify (GtkButton *button) { - GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (button); + GtkButtonPrivate *priv = button->priv; if (priv->image) { @@ -2286,6 +2345,7 @@ gtk_button_screen_changed (GtkWidget *widget, GdkScreen *previous_screen) { GtkButton *button; + GtkButtonPrivate *priv; GtkSettings *settings; gulong show_image_connection; @@ -2293,12 +2353,13 @@ gtk_button_screen_changed (GtkWidget *widget, return; button = GTK_BUTTON (widget); + priv = button->priv; /* If the button is being pressed while the screen changes the release might never occur, so we reset the state. */ - if (button->button_down) + if (priv->button_down) { - button->button_down = FALSE; + priv->button_down = FALSE; gtk_button_update_state (button); } @@ -2322,10 +2383,11 @@ gtk_button_state_changed (GtkWidget *widget, GtkStateType previous_state) { GtkButton *button = GTK_BUTTON (widget); + GtkButtonPrivate *priv = button->priv; if (!gtk_widget_is_sensitive (widget)) { - button->in_button = FALSE; + priv->in_button = FALSE; gtk_real_button_released (button); } } @@ -2335,22 +2397,22 @@ gtk_button_grab_notify (GtkWidget *widget, gboolean was_grabbed) { GtkButton *button = GTK_BUTTON (widget); - GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (button); + GtkButtonPrivate *priv = button->priv; gboolean save_in; - if (button->activate_timeout && + if (priv->activate_timeout && priv->grab_keyboard && gtk_widget_device_is_shadowed (widget, priv->grab_keyboard)) gtk_button_finish_activate (button, FALSE); if (!was_grabbed) { - save_in = button->in_button; - button->in_button = FALSE; + save_in = priv->in_button; + priv->in_button = FALSE; gtk_real_button_released (button); - if (save_in != button->in_button) + if (save_in != priv->in_button) { - button->in_button = save_in; + priv->in_button = save_in; gtk_button_update_state (button); } } @@ -2378,7 +2440,7 @@ gtk_button_set_image (GtkButton *button, g_return_if_fail (GTK_IS_BUTTON (button)); g_return_if_fail (image == NULL || GTK_IS_WIDGET (image)); - priv = GTK_BUTTON_GET_PRIVATE (button); + priv = button->priv; if (priv->image) { @@ -2410,13 +2472,9 @@ gtk_button_set_image (GtkButton *button, GtkWidget * gtk_button_get_image (GtkButton *button) { - GtkButtonPrivate *priv; - g_return_val_if_fail (GTK_IS_BUTTON (button), NULL); - - priv = GTK_BUTTON_GET_PRIVATE (button); - return priv->image; + return button->priv->image; } /** @@ -2433,13 +2491,12 @@ void gtk_button_set_image_position (GtkButton *button, GtkPositionType position) { - GtkButtonPrivate *priv; g_return_if_fail (GTK_IS_BUTTON (button)); g_return_if_fail (position >= GTK_POS_LEFT && position <= GTK_POS_BOTTOM); - priv = GTK_BUTTON_GET_PRIVATE (button); + priv = button->priv; if (priv->image_position != position) { @@ -2465,13 +2522,9 @@ gtk_button_set_image_position (GtkButton *button, GtkPositionType gtk_button_get_image_position (GtkButton *button) { - GtkButtonPrivate *priv; - g_return_val_if_fail (GTK_IS_BUTTON (button), GTK_POS_LEFT); - - priv = GTK_BUTTON_GET_PRIVATE (button); - return priv->image_position; + return button->priv->image_position; } @@ -2491,5 +2544,5 @@ gtk_button_get_event_window (GtkButton *button) { g_return_val_if_fail (GTK_IS_BUTTON (button), NULL); - return button->event_window; + return button->priv->event_window; } diff --git a/gtk/gtkbutton.h b/gtk/gtkbutton.h index dabb64b800..0bab7e6ae3 100644 --- a/gtk/gtkbutton.h +++ b/gtk/gtkbutton.h @@ -45,28 +45,16 @@ G_BEGIN_DECLS #define GTK_IS_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_BUTTON)) #define GTK_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_BUTTON, GtkButtonClass)) -typedef struct _GtkButton GtkButton; -typedef struct _GtkButtonClass GtkButtonClass; +typedef struct _GtkButton GtkButton; +typedef struct _GtkButtonPrivate GtkButtonPrivate; +typedef struct _GtkButtonClass GtkButtonClass; struct _GtkButton { + /*< private >*/ GtkBin bin; - GdkWindow *GSEAL (event_window); - - gchar *GSEAL (label_text); - - guint GSEAL (activate_timeout); - - guint GSEAL (constructed) : 1; - guint GSEAL (in_button) : 1; - guint GSEAL (button_down) : 1; - guint GSEAL (relief) : 2; - guint GSEAL (use_underline) : 1; - guint GSEAL (use_stock) : 1; - guint GSEAL (depressed) : 1; - guint GSEAL (depress_on_activate) : 1; - guint GSEAL (focus_on_click) : 1; + GtkButtonPrivate *priv; }; struct _GtkButtonClass