From 369daca6146c0e97db0308adb9c64c10ad1cb096 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 2 Jul 2013 12:30:41 -0400 Subject: GalView: Store the title string internally. This replaces the get_title() and set_title() class methods, since it's silly to defer to subclasses to track a simple string property. --- e-util/gal-view-etable.c | 30 +++--------------------------- e-util/gal-view-etable.h | 4 +--- e-util/gal-view-instance.c | 2 +- e-util/gal-view.c | 40 +++++++++++++++++++++++++++------------- e-util/gal-view.h | 3 --- 5 files changed, 32 insertions(+), 47 deletions(-) (limited to 'e-util') diff --git a/e-util/gal-view-etable.c b/e-util/gal-view-etable.c index 53782eefca..747c169d0c 100644 --- a/e-util/gal-view-etable.c +++ b/e-util/gal-view-etable.c @@ -60,20 +60,6 @@ gal_view_etable_save (GalView *view, e_table_state_save_to_file (GAL_VIEW_ETABLE (view)->state, filename); } -static const gchar * -gal_view_etable_get_title (GalView *view) -{ - return GAL_VIEW_ETABLE (view)->title; -} - -static void -gal_view_etable_set_title (GalView *view, - const gchar *title) -{ - g_free (GAL_VIEW_ETABLE (view)->title); - GAL_VIEW_ETABLE (view)->title = g_strdup (title); -} - static const gchar * gal_view_etable_get_type_code (GalView *view) { @@ -92,7 +78,6 @@ gal_view_etable_clone (GalView *view) gve = GAL_VIEW_ETABLE (view); GAL_VIEW_ETABLE (clone)->spec = g_object_ref (gve->spec); GAL_VIEW_ETABLE (clone)->state = e_table_state_duplicate (gve->state); - GAL_VIEW_ETABLE (clone)->title = g_strdup (gve->title); return clone; } @@ -104,9 +89,6 @@ gal_view_etable_dispose (GObject *object) gal_view_etable_detach (view); - g_free (view->title); - view->title = NULL; - g_clear_object (&view->spec); g_clear_object (&view->state); @@ -126,8 +108,6 @@ gal_view_etable_class_init (GalViewEtableClass *class) gal_view_class = GAL_VIEW_CLASS (class); gal_view_class->load = gal_view_etable_load; gal_view_class->save = gal_view_etable_save; - gal_view_class->get_title = gal_view_etable_get_title; - gal_view_class->set_title = gal_view_etable_set_title; gal_view_class->get_type_code = gal_view_etable_get_type_code; gal_view_class->clone = gal_view_etable_clone; } @@ -155,16 +135,15 @@ gal_view_etable_new (ETableSpecification *spec, g_return_val_if_fail (E_IS_TABLE_SPECIFICATION (spec), NULL); - view = g_object_new (GAL_TYPE_VIEW_ETABLE, NULL); + view = g_object_new (GAL_TYPE_VIEW_ETABLE, "title", title, NULL); - return gal_view_etable_construct (view, spec, title); + return gal_view_etable_construct (view, spec); } /** * gal_view_etable_construct * @view: The view to construct. * @spec: The ETableSpecification that this view will be based upon. - * @title: The name of the new view. * * constructs the GalViewEtable. To be used by subclasses and * language bindings. @@ -173,8 +152,7 @@ gal_view_etable_new (ETableSpecification *spec, */ GalView * gal_view_etable_construct (GalViewEtable *view, - ETableSpecification *spec, - const gchar *title) + ETableSpecification *spec) { g_return_val_if_fail (GAL_IS_VIEW_ETABLE (view), NULL); g_return_val_if_fail (E_IS_TABLE_SPECIFICATION (spec), NULL); @@ -184,8 +162,6 @@ gal_view_etable_construct (GalViewEtable *view, g_clear_object (&view->state); view->state = e_table_state_duplicate (spec->state); - view->title = g_strdup (title); - return GAL_VIEW (view); } diff --git a/e-util/gal-view-etable.h b/e-util/gal-view-etable.h index e304ec00f0..b0e93a2ec3 100644 --- a/e-util/gal-view-etable.h +++ b/e-util/gal-view-etable.h @@ -59,7 +59,6 @@ struct _GalViewEtable { ETableSpecification *spec; ETableState *state; - gchar *title; ETable *table; guint table_state_changed_id; @@ -76,8 +75,7 @@ GType gal_view_etable_get_type (void); GalView * gal_view_etable_new (ETableSpecification *spec, const gchar *title); GalView * gal_view_etable_construct (GalViewEtable *view, - ETableSpecification *spec, - const gchar *title); + ETableSpecification *spec); void gal_view_etable_set_state (GalViewEtable *view, ETableState *state); void gal_view_etable_attach_table (GalViewEtable *view, diff --git a/e-util/gal-view-instance.c b/e-util/gal-view-instance.c index ad66773756..32f8a5fd26 100644 --- a/e-util/gal-view-instance.c +++ b/e-util/gal-view-instance.c @@ -141,7 +141,7 @@ connect_view (GalViewInstance *instance, { if (instance->current_view) disconnect_view (instance); - instance->current_view = view; + instance->current_view = g_object_ref (view); instance->current_title = g_strdup (gal_view_get_title (view)); instance->current_type = g_strdup (gal_view_get_type_code (view)); diff --git a/e-util/gal-view.c b/e-util/gal-view.c index 4fd777182f..7b3743af72 100644 --- a/e-util/gal-view.c +++ b/e-util/gal-view.c @@ -23,7 +23,7 @@ ((obj), GAL_TYPE_VIEW, GalViewPrivate)) struct _GalViewPrivate { - gint placeholder; + gchar *title; }; enum { @@ -81,6 +81,19 @@ view_get_property (GObject *object, G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } +static void +view_finalize (GObject *object) +{ + GalViewPrivate *priv; + + priv = GAL_VIEW_GET_PRIVATE (object); + + g_free (priv->title); + + /* Chain up to parent's finalize() method. */ + G_OBJECT_CLASS (gal_view_parent_class)->finalize (object); +} + static void view_load (GalView *view, const gchar *filename) @@ -96,7 +109,13 @@ view_save (GalView *view, static GalView * view_clone (GalView *view) { - return g_object_new (G_OBJECT_TYPE (view), NULL); + const gchar *title; + + title = gal_view_get_title (view); + + return g_object_new ( + G_OBJECT_TYPE (view), + "title", title, NULL); } static void @@ -109,6 +128,7 @@ gal_view_class_init (GalViewClass *class) object_class = G_OBJECT_CLASS (class); object_class->set_property = view_set_property; object_class->get_property = view_get_property; + object_class->finalize = view_finalize; class->load = view_load; class->save = view_save; @@ -201,14 +221,9 @@ gal_view_save (GalView *view, const gchar * gal_view_get_title (GalView *view) { - GalViewClass *class; - g_return_val_if_fail (GAL_IS_VIEW (view), NULL); - class = GAL_VIEW_GET_CLASS (view); - g_return_val_if_fail (class->get_title != NULL, NULL); - - return class->get_title (view); + return view->priv->title; } /** @@ -220,14 +235,13 @@ void gal_view_set_title (GalView *view, const gchar *title) { - GalViewClass *class; - g_return_if_fail (GAL_IS_VIEW (view)); - class = GAL_VIEW_GET_CLASS (view); - g_return_if_fail (class->set_title != NULL); + if (g_strcmp0 (title, view->priv->title) == 0) + return; - class->set_title (view, title); + g_free (view->priv->title); + view->priv->title = g_strdup (title); g_object_notify (G_OBJECT (view), "title"); } diff --git a/e-util/gal-view.h b/e-util/gal-view.h index 18de6d1ad5..94f89b989e 100644 --- a/e-util/gal-view.h +++ b/e-util/gal-view.h @@ -63,9 +63,6 @@ struct _GalViewClass { const gchar *filename); void (*save) (GalView *view, const gchar *filename); - const gchar * (*get_title) (GalView *view); - void (*set_title) (GalView *view, - const gchar *title); const gchar * (*get_type_code) (GalView *view); GalView * (*clone) (GalView *view); -- cgit v1.2.3