[gcr] gcr: Display an appropriate title in gcr-viewer
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gcr] gcr: Display an appropriate title in gcr-viewer
- Date: Tue, 10 Jan 2012 19:15:24 +0000 (UTC)
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]