diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2011-04-13 22:31:31 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2012-06-03 11:00:40 +0800 |
commit | f78795f4dff8b225d78385c5e23e1cd44ee946ad (patch) | |
tree | a35151efbda32b3fbc0b352b86dd1c7089d84240 /composer/e-composer-header.c | |
parent | 68c35c4bedc4cd36cf2396121921f2e781b631fb (diff) | |
download | gsoc2013-evolution-f78795f4dff8b225d78385c5e23e1cd44ee946ad.tar gsoc2013-evolution-f78795f4dff8b225d78385c5e23e1cd44ee946ad.tar.gz gsoc2013-evolution-f78795f4dff8b225d78385c5e23e1cd44ee946ad.tar.bz2 gsoc2013-evolution-f78795f4dff8b225d78385c5e23e1cd44ee946ad.tar.lz gsoc2013-evolution-f78795f4dff8b225d78385c5e23e1cd44ee946ad.tar.xz gsoc2013-evolution-f78795f4dff8b225d78385c5e23e1cd44ee946ad.tar.zst gsoc2013-evolution-f78795f4dff8b225d78385c5e23e1cd44ee946ad.zip |
Adapt composer to the new ESource API.
Diffstat (limited to 'composer/e-composer-header.c')
-rw-r--r-- | composer/e-composer-header.c | 175 |
1 files changed, 107 insertions, 68 deletions
diff --git a/composer/e-composer-header.c b/composer/e-composer-header.c index c92b069113..5ef5e41d15 100644 --- a/composer/e-composer-header.c +++ b/composer/e-composer-header.c @@ -36,12 +36,8 @@ struct _EComposerHeaderPrivate { gchar *label; gboolean button; - GtkWidget *action_label; - GtkWidget *add_icon; - GtkWidget *remove_icon; - GtkWidget *show_label; - GtkWidget *hide_label; + ESourceRegistry *registry; guint sensitive : 1; guint visible : 1; @@ -55,6 +51,7 @@ enum { PROP_0, PROP_BUTTON, PROP_LABEL, + PROP_REGISTRY, PROP_SENSITIVE, PROP_VISIBLE }; @@ -80,48 +77,14 @@ composer_header_button_clicked_cb (GtkButton *button, g_signal_emit (header, signal_ids[CLICKED], 0); } -static GObject * -composer_header_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_properties) +static void +composer_header_set_registry (EComposerHeader *header, + ESourceRegistry *registry) { - GObject *object; - GtkWidget *widget; - EComposerHeader *header; - GtkWidget *label; - - /* Chain up to parent's constructor() method. */ - object = G_OBJECT_CLASS ( - e_composer_header_parent_class)->constructor ( - type, n_construct_properties, construct_properties); - - header = E_COMPOSER_HEADER (object); - - if (header->priv->button) { - widget = gtk_button_new_with_mnemonic (header->priv->label); - gtk_widget_set_can_focus (widget, FALSE); - g_signal_connect ( - widget, "clicked", - G_CALLBACK (composer_header_button_clicked_cb), - header); - label = gtk_bin_get_child (GTK_BIN (widget)); - } else { - widget = gtk_label_new_with_mnemonic (header->priv->label); - gtk_label_set_mnemonic_widget ( - GTK_LABEL (widget), header->input_widget); - label = widget; - } - - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - - header->priv->action_label = NULL; - - header->title_widget = g_object_ref_sink (widget); - - g_free (header->priv->label); - header->priv->label = NULL; + g_return_if_fail (E_IS_SOURCE_REGISTRY (registry)); + g_return_if_fail (header->priv->registry == NULL); - return object; + header->priv->registry = g_object_ref (registry); } static void @@ -143,6 +106,12 @@ composer_header_set_property (GObject *object, priv->label = g_value_dup_string (value); return; + case PROP_REGISTRY: + composer_header_set_registry ( + E_COMPOSER_HEADER (object), + g_value_get_object (value)); + return; + case PROP_SENSITIVE: e_composer_header_set_sensitive ( E_COMPOSER_HEADER (object), @@ -175,8 +144,12 @@ composer_header_get_property (GObject *object, return; case PROP_LABEL: /* construct only */ - g_value_take_string ( - value, e_composer_header_get_label ( + g_value_set_string (value, priv->label); + return; + + case PROP_REGISTRY: + g_value_set_object ( + value, e_composer_header_get_registry ( E_COMPOSER_HEADER (object))); return; @@ -211,11 +184,75 @@ composer_header_dispose (GObject *object) header->input_widget = NULL; } + if (header->priv->registry != NULL) { + g_object_unref (header->priv->registry); + header->priv->registry = NULL; + } + /* Chain up to parent's dispose() method. */ G_OBJECT_CLASS (e_composer_header_parent_class)->dispose (object); } static void +composer_header_finalize (GObject *object) +{ + EComposerHeaderPrivate *priv; + + priv = E_COMPOSER_HEADER_GET_PRIVATE (object); + + g_free (priv->label); + + /* Chain up to parent's finalize() method. */ + G_OBJECT_CLASS (e_composer_header_parent_class)->finalize (object); +} + +static void +composer_header_constructed (GObject *object) +{ + EComposerHeader *header; + GtkWidget *widget; + GtkWidget *label; + + header = E_COMPOSER_HEADER (object); + + if (header->input_widget == NULL) { + g_critical ( + "EComposerHeader's input_widget " + "must be set before chaining up"); + return; + } + + if (header->priv->button) { + widget = gtk_button_new_with_mnemonic (header->priv->label); + gtk_widget_set_can_focus (widget, FALSE); + g_signal_connect ( + widget, "clicked", + G_CALLBACK (composer_header_button_clicked_cb), + header); + label = gtk_bin_get_child (GTK_BIN (widget)); + } else { + widget = gtk_label_new_with_mnemonic (header->priv->label); + gtk_label_set_mnemonic_widget ( + GTK_LABEL (widget), header->input_widget); + label = widget; + } + + gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); + + header->title_widget = g_object_ref_sink (widget); + + g_object_bind_property ( + header, "visible", + header->title_widget, "visible", + G_BINDING_SYNC_CREATE); + + g_object_bind_property ( + header, "visible", + header->input_widget, "visible", + G_BINDING_SYNC_CREATE); +} + +static void e_composer_header_class_init (EComposerHeaderClass *class) { GObjectClass *object_class; @@ -223,10 +260,11 @@ e_composer_header_class_init (EComposerHeaderClass *class) g_type_class_add_private (class, sizeof (EComposerHeaderPrivate)); object_class = G_OBJECT_CLASS (class); - object_class->constructor = composer_header_constructor; object_class->set_property = composer_header_set_property; object_class->get_property = composer_header_get_property; object_class->dispose = composer_header_dispose; + object_class->finalize = composer_header_finalize; + object_class->constructed = composer_header_constructed; g_object_class_install_property ( object_class, @@ -254,6 +292,18 @@ e_composer_header_class_init (EComposerHeaderClass *class) g_object_class_install_property ( object_class, + PROP_REGISTRY, + g_param_spec_object ( + "registry", + NULL, + NULL, + E_TYPE_SOURCE_REGISTRY, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property ( + object_class, PROP_SENSITIVE, g_param_spec_boolean ( "sensitive", @@ -299,17 +349,20 @@ e_composer_header_init (EComposerHeader *header) header->priv = E_COMPOSER_HEADER_GET_PRIVATE (header); } -gchar * +const gchar * e_composer_header_get_label (EComposerHeader *header) { - gchar *label; - g_return_val_if_fail (E_IS_COMPOSER_HEADER (header), NULL); - /* GtkButton and GtkLabel both have a "label" property. */ - g_object_get (header->title_widget, "label", &label, NULL); + return header->priv->label; +} - return label; +ESourceRegistry * +e_composer_header_get_registry (EComposerHeader *header) +{ + g_return_val_if_fail (E_IS_COMPOSER_HEADER (header), NULL); + + return header->priv->registry; } gboolean @@ -347,20 +400,6 @@ e_composer_header_set_visible (EComposerHeader *header, header->priv->visible = visible; - if (header->priv->action_label) { - if (!visible) { - gtk_widget_show (header->priv->add_icon); - gtk_widget_show (header->priv->show_label); - gtk_widget_hide (header->priv->remove_icon); - gtk_widget_hide (header->priv->hide_label); - } else { - gtk_widget_hide (header->priv->add_icon); - gtk_widget_hide (header->priv->show_label); - gtk_widget_show (header->priv->remove_icon); - gtk_widget_show (header->priv->hide_label); - } - } - g_object_notify (G_OBJECT (header), "visible"); } |