[gcr] gcr: Display an appropriate title in gcr-viewer



commit 185dcba1f2b6bf8922871c8efc8980d5938c56d9
Author: Stef Walter <stefw collabora co uk>
Date:   Tue Jan 10 20:14:58 2012 +0100

    gcr: Display an appropriate title in gcr-viewer
    
     * And add display-name property to GcrViewerWidget

 docs/reference/gcr/gcr-sections.txt |    2 +
 docs/reference/gcr/gcr.interfaces   |    4 +-
 gcr/gcr-viewer-widget.c             |   97 ++++++++++++++++++++++++++++++++--
 gcr/gcr-viewer-widget.h             |    5 ++
 gcr/gcr-viewer-window.c             |    2 +
 gcr/gcr.symbols                     |    2 +
 6 files changed, 104 insertions(+), 8 deletions(-)
---
diff --git a/docs/reference/gcr/gcr-sections.txt b/docs/reference/gcr/gcr-sections.txt
index f9b3e02..a71516a 100644
--- a/docs/reference/gcr/gcr-sections.txt
+++ b/docs/reference/gcr/gcr-sections.txt
@@ -608,6 +608,8 @@ gcr_viewer_widget_load_file
 gcr_viewer_widget_get_parser
 gcr_viewer_widget_show_error
 gcr_viewer_widget_clear_error
+gcr_viewer_widget_get_display_name
+gcr_viewer_widget_set_display_name
 <SUBSECTION Standard>
 gcr_viewer_widget_get_type
 GCR_TYPE_VIEWER_WIDGET
diff --git a/docs/reference/gcr/gcr.interfaces b/docs/reference/gcr/gcr.interfaces
index 15d9427..194a3dc 100644
--- a/docs/reference/gcr/gcr.interfaces
+++ b/docs/reference/gcr/gcr.interfaces
@@ -39,5 +39,5 @@ GtkBoxAccessible AtkComponent
 GtkAction GtkBuildable
 GckSession GInitable GAsyncInitable
 GdkPixbuf GIcon
-GApplication GActionGroup
-GtkApplication GActionGroup
+GApplication GActionGroup GActionMap
+GtkApplication GActionGroup GActionMap
diff --git a/gcr/gcr-viewer-widget.c b/gcr/gcr-viewer-widget.c
index d8204e0..b5512a8 100644
--- a/gcr/gcr-viewer-widget.c
+++ b/gcr/gcr-viewer-widget.c
@@ -50,7 +50,8 @@
 
 enum {
 	PROP_0,
-	PROP_PARSER
+	PROP_PARSER,
+	PROP_DISPLAY_NAME
 };
 
 /**
@@ -101,6 +102,7 @@ struct _GcrViewerWidgetPrivate {
 	GList *unlocks;
 	gboolean loading;
 	gchar *display_name;
+	gboolean display_name_explicit;
 };
 
 enum {
@@ -274,6 +276,27 @@ gcr_viewer_widget_get_property (GObject *obj,
 	case PROP_PARSER:
 		g_value_set_object (value, gcr_viewer_widget_get_parser (self));
 		break;
+	case PROP_DISPLAY_NAME:
+		g_value_set_string (value, gcr_viewer_widget_get_display_name (self));
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
+		break;
+	}
+}
+
+static void
+gcr_viewer_widget_set_property (GObject *obj,
+                                guint prop_id,
+                                const GValue *value,
+                                GParamSpec *pspec)
+{
+	GcrViewerWidget *self = GCR_VIEWER_WIDGET (obj);
+
+	switch (prop_id) {
+	case PROP_DISPLAY_NAME:
+		gcr_viewer_widget_set_display_name (self, g_value_get_string (value));
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
 		break;
@@ -326,6 +349,7 @@ gcr_viewer_widget_class_init (GcrViewerWidgetClass *klass)
 	gobject_class->dispose = gcr_viewer_widget_dispose;
 	gobject_class->finalize = gcr_viewer_widget_finalize;
 	gobject_class->get_property = gcr_viewer_widget_get_property;
+	gobject_class->set_property = gcr_viewer_widget_set_property;
 
 	g_type_class_add_private (klass, sizeof (GcrViewerWidgetPrivate));
 
@@ -339,6 +363,19 @@ gcr_viewer_widget_class_init (GcrViewerWidgetClass *klass)
 	                                GCR_TYPE_PARSER, G_PARAM_READABLE));
 
 	/**
+	 * GcrViewerWidget:display-name:
+	 *
+	 * Display name for data being displayed. This is automatically
+	 * calculated from a loaded file, or can be explicitly set.
+	 *
+	 * Used as a hint when displaying a title for the data, but may be
+	 * overridden by the parsed data.
+	 */
+	g_object_class_install_property (gobject_class, PROP_DISPLAY_NAME,
+	            g_param_spec_string ("display-name", "Display name", "Display name",
+	                                 NULL, G_PARAM_READWRITE));
+
+	/**
 	 * GcrViewerWidget::added:
 	 * @self: the viewer widget
 	 * @renderer: (type Gcr.Renderer): the renderer that was added
@@ -386,12 +423,14 @@ update_display_name (GcrViewerWidget *self,
 {
 	gchar *basename;
 
-	basename = g_file_get_basename (file);
-
-	g_free (self->pv->display_name);
-	self->pv->display_name = g_filename_display_name (basename);
+	if (!self->pv->display_name_explicit) {
+		basename = g_file_get_basename (file);
+		g_free (self->pv->display_name);
+		self->pv->display_name = g_filename_display_name (basename);
+		g_free (basename);
 
-	g_free (basename);
+		g_object_notify (G_OBJECT (self), "display-name");
+	}
 }
 
 static void
@@ -574,3 +613,49 @@ gcr_viewer_widget_clear_error (GcrViewerWidget *self)
 	g_return_if_fail (GCR_IS_VIEWER_WIDGET (self));
 	gtk_widget_hide (GTK_WIDGET (self->pv->message_bar));
 }
+
+/**
+ * gcr_viewer_widget_get_display_name:
+ * @self: a viewer widget
+ *
+ * Get the display name for data being displayed. This is automatically
+ * calculated from a loaded file, or can be explicitly set.
+ *
+ * Used as a hint when displaying a title for the data, but may be
+ * overridden by the parsed data.
+ *
+ * Returns: the display name
+ */
+const gchar *
+gcr_viewer_widget_get_display_name (GcrViewerWidget *self)
+{
+	g_return_val_if_fail (GCR_IS_VIEWER_WIDGET (self), NULL);
+
+	if (!self->pv->display_name_explicit && !self->pv->display_name)
+		self->pv->display_name = g_strdup (_("Certificate Viewer"));
+
+	return self->pv->display_name;
+}
+
+/**
+ * gcr_viewer_widget_set_display_name:
+ * @self: a viewer widget
+ * @display_name: the display name
+ *
+ * Set the display name for data being displayed. Once explicitly
+ * set it will no longer be calculated automatically by loading data.
+ *
+ * Used as a hint when displaying a title for the data, but may be
+ * overridden by the parsed data.
+ */
+void
+gcr_viewer_widget_set_display_name (GcrViewerWidget *self,
+                                    const gchar *display_name)
+{
+	g_return_if_fail (GCR_IS_VIEWER_WIDGET (self));
+
+	g_free (self->pv->display_name);
+	self->pv->display_name = g_strdup (display_name);
+	self->pv->display_name_explicit = TRUE;
+	g_object_notify (G_OBJECT (self), "display-name");
+}
diff --git a/gcr/gcr-viewer-widget.h b/gcr/gcr-viewer-widget.h
index e52afec..1d213f4 100644
--- a/gcr/gcr-viewer-widget.h
+++ b/gcr/gcr-viewer-widget.h
@@ -53,4 +53,9 @@ void               gcr_viewer_widget_show_error       (GcrViewerWidget *self,
 
 void               gcr_viewer_widget_clear_error      (GcrViewerWidget *self);
 
+const gchar *      gcr_viewer_widget_get_display_name (GcrViewerWidget *self);
+
+void               gcr_viewer_widget_set_display_name (GcrViewerWidget *self,
+                                                       const gchar *display_name);
+
 #endif /* GCR_VIEWER_WIDGET_H */
diff --git a/gcr/gcr-viewer-window.c b/gcr/gcr-viewer-window.c
index 8bf816c..d539ad6 100644
--- a/gcr/gcr-viewer-window.c
+++ b/gcr/gcr-viewer-window.c
@@ -129,6 +129,8 @@ gcr_viewer_window_constructed (GObject *obj)
 	gtk_container_add (GTK_CONTAINER (align), bbox);
 
 	self->pv->viewer = gcr_viewer_widget_new ();
+	g_object_bind_property (self->pv->viewer, "display-name",
+	                        self, "title", G_BINDING_SYNC_CREATE);
 	g_signal_connect_object (self->pv->viewer, "added",
 	                         G_CALLBACK (on_viewer_renderer_added),
 	                         self, 0);
diff --git a/gcr/gcr.symbols b/gcr/gcr.symbols
index 07128d0..4017eb2 100644
--- a/gcr/gcr.symbols
+++ b/gcr/gcr.symbols
@@ -103,9 +103,11 @@ gcr_viewer_window_load
 gcr_viewer_window_new
 gcr_viewer_widget_clear_error
 gcr_viewer_widget_get_parser
+gcr_viewer_widget_get_display_name
 gcr_viewer_widget_get_type
 gcr_viewer_widget_load_data
 gcr_viewer_widget_load_file
 gcr_viewer_widget_new
 gcr_viewer_widget_show_error
+gcr_viewer_widget_set_display_name
 SECMEM_pool_data_v1_0



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]