EHeaderBarButton: Uniform how a GtkAction is added into the header bar button
Use a single function to add an action into the header bar button, to have it added the same way in both cases.
This commit is contained in:
parent
4f73c15c0f
commit
14318b1e00
@ -165,10 +165,10 @@ header_bar_button_set_prefer_item (EHeaderBarButton *self,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
e_headerbar_button_transform_sensitive_cb (GBinding *binding,
|
||||
const GValue *from_value,
|
||||
GValue *to_value,
|
||||
gpointer user_data)
|
||||
header_bar_button_transform_sensitive_cb (GBinding *binding,
|
||||
const GValue *from_value,
|
||||
GValue *to_value,
|
||||
gpointer user_data)
|
||||
{
|
||||
/* The GtkAction::sensitive property does not take into the consideration
|
||||
also the group's sensitivity, thus use the gtk_action_is_sensitive() function. */
|
||||
@ -178,6 +178,43 @@ e_headerbar_button_transform_sensitive_cb (GBinding *binding,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
header_bar_button_add_action (EHeaderBarButton *header_bar_button,
|
||||
const gchar *label,
|
||||
GtkAction *action)
|
||||
{
|
||||
GtkWidget *button;
|
||||
|
||||
if (GTK_IS_TOGGLE_ACTION (action))
|
||||
button = gtk_toggle_button_new_with_label (label);
|
||||
else
|
||||
button = gtk_button_new_with_label (label);
|
||||
|
||||
gtk_widget_show (button);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (header_bar_button), button, FALSE, FALSE, 0);
|
||||
|
||||
if (action) {
|
||||
e_binding_bind_property_full (
|
||||
action, "sensitive",
|
||||
button, "sensitive",
|
||||
G_BINDING_SYNC_CREATE,
|
||||
header_bar_button_transform_sensitive_cb,
|
||||
NULL, NULL, NULL);
|
||||
|
||||
if (GTK_IS_TOGGLE_ACTION (action)) {
|
||||
e_binding_bind_property (
|
||||
action, "active",
|
||||
button, "active",
|
||||
G_BINDING_SYNC_CREATE);
|
||||
}
|
||||
|
||||
header_bar_button_update_button_for_action (GTK_BUTTON (button), action);
|
||||
}
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
static void
|
||||
header_bar_button_set_property (GObject *object,
|
||||
guint property_id,
|
||||
@ -239,37 +276,9 @@ header_bar_button_constructed (GObject *object)
|
||||
/* Chain up to parent's method. */
|
||||
G_OBJECT_CLASS (e_header_bar_button_parent_class)->constructed (object);
|
||||
|
||||
if (GTK_IS_TOGGLE_ACTION (header_bar_button->priv->action)) {
|
||||
header_bar_button->priv->button = gtk_toggle_button_new_with_label (
|
||||
header_bar_button->priv->label);
|
||||
} else {
|
||||
header_bar_button->priv->button = gtk_button_new_with_label (
|
||||
header_bar_button->priv->label);
|
||||
}
|
||||
gtk_widget_show (header_bar_button->priv->button);
|
||||
|
||||
gtk_box_pack_start (
|
||||
GTK_BOX (header_bar_button), header_bar_button->priv->button,
|
||||
FALSE, FALSE, 0);
|
||||
|
||||
if (header_bar_button->priv->action != NULL) {
|
||||
header_bar_button_update_button_for_action (
|
||||
GTK_BUTTON (header_bar_button->priv->button),
|
||||
header_bar_button->priv->action);
|
||||
|
||||
e_binding_bind_property_full (
|
||||
header_bar_button->priv->action, "sensitive",
|
||||
header_bar_button, "sensitive",
|
||||
G_BINDING_SYNC_CREATE,
|
||||
e_headerbar_button_transform_sensitive_cb,
|
||||
NULL, NULL, NULL);
|
||||
|
||||
if (GTK_IS_TOGGLE_ACTION (header_bar_button->priv->action))
|
||||
e_binding_bind_property (
|
||||
header_bar_button->priv->action, "active",
|
||||
header_bar_button->priv->button, "active",
|
||||
G_BINDING_SYNC_CREATE);
|
||||
}
|
||||
header_bar_button->priv->button = header_bar_button_add_action (header_bar_button,
|
||||
header_bar_button->priv->label,
|
||||
header_bar_button->priv->action);
|
||||
|
||||
/* TODO: GTK4 port: do not use linked buttons
|
||||
* https://developer.gnome.org/hig/patterns/containers/header-bars.html#button-grouping */
|
||||
@ -389,30 +398,12 @@ e_header_bar_button_add_action (EHeaderBarButton *header_bar_button,
|
||||
g_return_if_fail (E_IS_HEADER_BAR_BUTTON (header_bar_button));
|
||||
g_return_if_fail (GTK_IS_ACTION (action));
|
||||
|
||||
if (GTK_IS_TOGGLE_ACTION (action))
|
||||
button = gtk_toggle_button_new_with_label (label);
|
||||
else
|
||||
button = gtk_button_new_with_label (label);
|
||||
button = header_bar_button_add_action (header_bar_button, label, action);
|
||||
|
||||
gtk_widget_show (button);
|
||||
gtk_box_pack_start (GTK_BOX (header_bar_button), button, FALSE, FALSE, 0);
|
||||
|
||||
e_binding_bind_property (
|
||||
action, "sensitive",
|
||||
button, "sensitive",
|
||||
G_BINDING_SYNC_CREATE);
|
||||
|
||||
if (GTK_IS_TOGGLE_ACTION (action))
|
||||
e_binding_bind_property (
|
||||
action, "active",
|
||||
button, "active",
|
||||
G_BINDING_SYNC_CREATE);
|
||||
|
||||
g_signal_connect_swapped (
|
||||
g_signal_connect_object (
|
||||
button, "clicked",
|
||||
G_CALLBACK (gtk_action_activate), action);
|
||||
|
||||
header_bar_button_update_button_for_action (GTK_BUTTON (button), action);
|
||||
G_CALLBACK (gtk_action_activate), action,
|
||||
G_CONNECT_SWAPPED);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user