void _gcr_display_view_append_content (GcrDisplayView *self, GcrRenderer *renderer, const gchar *content, const gchar *details) { GcrDisplayItem *item; GtkTextIter iter; gchar *memory = NULL; g_return_if_fail (GCR_IS_DISPLAY_VIEW (self)); g_return_if_fail (content); item = lookup_display_item (self, renderer); g_return_if_fail (item); if (item->details && !item->expanded) return; if (details) content = memory = g_strdup_printf ("%s: %s", content, details); gtk_text_buffer_get_iter_at_mark (self->pv->buffer, &iter, item->ending); gtk_text_buffer_insert_with_tags (self->pv->buffer, &iter, content, -1, self->pv->content_tag, item->extra_tag, NULL); gtk_text_buffer_insert_with_tags (self->pv->buffer, &iter, "\n", 1, item->extra_tag, NULL); g_free (memory); }
void _gcr_display_view_append_fingerprint (GcrDisplayView *self, GcrRenderer *renderer, const guchar *data, gsize n_data, const gchar *name, GChecksumType type) { GChecksum *checksum; guint8 *buffer; gsize n_buffer; gchar *display; g_return_if_fail (GCR_IS_DISPLAY_VIEW (self)); checksum = g_checksum_new (type); g_return_if_fail (checksum); g_checksum_update (checksum, data, n_data); n_buffer = g_checksum_type_get_length (type); g_return_if_fail (n_buffer); buffer = g_malloc0 (n_buffer); g_checksum_get_digest (checksum, buffer, &n_buffer); g_checksum_free (checksum); display = egg_hex_encode_full (buffer, n_buffer, TRUE, ' ', 1); _gcr_display_view_append_value (self, renderer, name, display, TRUE); g_free (display); g_free (buffer); }
void _gcr_display_view_start_details (GcrDisplayView *self, GcrRenderer *renderer) { GtkTextChildAnchor *anchor; GcrDisplayItem *item; GtkTextIter iter; g_return_if_fail (GCR_IS_DISPLAY_VIEW (self)); item = lookup_display_item (self, renderer); g_return_if_fail (item); if (item->details) { g_warning ("A GcrRenderer implementation has called %s twice in one render", G_STRFUNC); return; } item->extra_tag = item->details_tag; item->details = TRUE; gtk_text_buffer_get_iter_at_mark (self->pv->buffer, &iter, item->ending); anchor = gtk_text_buffer_create_child_anchor (self->pv->buffer, &iter); gtk_text_view_add_child_at_anchor (GTK_TEXT_VIEW (self), item->details_widget, anchor); gtk_widget_show_all (item->details_widget); gtk_text_buffer_insert (self->pv->buffer, &iter, "\n", 1); }
void _gcr_display_view_append_value (GcrDisplayView *self, GcrRenderer *renderer, const gchar *field, const gchar *value, gboolean monospace) { GcrDisplayItem *item; PangoRectangle extents; PangoTabArray *tabs; PangoLayout *layout; GtkTextIter iter; gchar *text; g_return_if_fail (GCR_IS_DISPLAY_VIEW (self)); g_return_if_fail (field); item = lookup_display_item (self, renderer); g_return_if_fail (item); if (item->details && !item->expanded) return; text = g_strdup_printf ("%s:", field); if (value == NULL) value = ""; /* Measure the width of the field */ layout = gtk_widget_create_pango_layout (GTK_WIDGET (self), text); pango_layout_get_extents (layout, NULL, &extents); pango_extents_to_pixels (&extents, NULL); g_object_unref (layout); /* Make the tab wide enough to accomodate */ if (extents.width > item->field_width) { item->field_width = extents.width + COLUMN_MARGIN; tabs = pango_tab_array_new (1, TRUE); pango_tab_array_set_tab (tabs, 0, PANGO_TAB_LEFT, item->field_width); g_object_set (item->field_tag, "left-margin", FIELD_MARGIN, "indent", 0 - item->field_width, "tabs", tabs, NULL); pango_tab_array_free (tabs); } gtk_text_buffer_get_iter_at_mark (self->pv->buffer, &iter, item->ending); gtk_text_buffer_insert_with_tags (self->pv->buffer, &iter, text, -1, item->field_tag, item->extra_tag, NULL); gtk_text_buffer_insert_with_tags (self->pv->buffer, &iter, "\t", 1, item->extra_tag, NULL); gtk_text_buffer_insert_with_tags (self->pv->buffer, &iter, value, -1, item->field_tag, monospace ? self->pv->monospace_tag : item->extra_tag, monospace ? item->extra_tag : NULL, NULL); gtk_text_buffer_insert_with_tags (self->pv->buffer, &iter, "\n", 1, item->extra_tag, NULL); g_free (text); }
static GtkTextTagTable* create_tag_table (GcrDisplayView *self) { GtkTextTagTable *tags; gint width, height; g_assert (GCR_IS_DISPLAY_VIEW (self)); tags = gtk_text_tag_table_new (); if (!gtk_icon_size_lookup (GTK_ICON_SIZE_DIALOG, &width, &height)) width = 48; self->pv->title_tag = g_object_new (GTK_TYPE_TEXT_TAG, "name", "title", "scale", PANGO_SCALE_LARGE, "right-margin", (ICON_MARGIN * 2) + width, "pixels-above-lines", 9, "pixels-below-lines", 6, "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (tags, self->pv->title_tag); self->pv->content_tag = g_object_new (GTK_TYPE_TEXT_TAG, "name", "content", "right-margin", (ICON_MARGIN * 2) + width, "left-margin", FIELD_MARGIN, "pixels-below-lines", 3, NULL); gtk_text_tag_table_add (tags, self->pv->content_tag); self->pv->heading_tag = g_object_new (GTK_TYPE_TEXT_TAG, "name", "heading", "pixels-above-lines", 9, "pixels-below-lines", 3, "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (tags, self->pv->heading_tag); self->pv->monospace_tag = g_object_new (GTK_TYPE_TEXT_TAG, "name", "monospace", "family", "monospace", NULL); gtk_text_tag_table_add (tags, self->pv->monospace_tag); return tags; }
void _gcr_display_view_set_stock_image (GcrDisplayView *self, GcrRenderer *renderer, const gchar *stock_id) { GcrDisplayItem *item; g_return_if_fail (GCR_IS_DISPLAY_VIEW (self)); item = lookup_display_item (self, renderer); g_return_if_fail (item); if (item->pixbuf) g_object_unref (item->pixbuf); if (stock_id) #if GTK_CHECK_VERSION (2,91,7) item->pixbuf = gtk_widget_render_icon_pixbuf (GTK_WIDGET (self), stock_id, GTK_ICON_SIZE_DIALOG); #else item->pixbuf = gtk_widget_render_icon (GTK_WIDGET (self), stock_id, GTK_ICON_SIZE_DIALOG, NULL); #endif else
void _gcr_display_view_append_heading (GcrDisplayView *self, GcrRenderer *renderer, const gchar *heading) { GcrDisplayItem *item; GtkTextIter iter; g_return_if_fail (GCR_IS_DISPLAY_VIEW (self)); g_return_if_fail (heading); item = lookup_display_item (self, renderer); g_return_if_fail (item); if (item->details && !item->expanded) return; gtk_text_buffer_get_iter_at_mark (self->pv->buffer, &iter, item->ending); gtk_text_buffer_insert_with_tags (self->pv->buffer, &iter, heading, -1, self->pv->heading_tag, item->extra_tag, NULL); gtk_text_buffer_insert_with_tags (self->pv->buffer, &iter, "\n", 1, item->extra_tag, NULL); }
void _gcr_display_view_clear (GcrDisplayView *self, GcrRenderer *renderer) { GtkTextIter start, iter; GcrDisplayItem *item; g_return_if_fail (GCR_IS_DISPLAY_VIEW (self)); item = lookup_display_item (self, renderer); g_return_if_fail (item); if (gtk_widget_get_parent (item->details_widget)) gtk_container_remove (GTK_CONTAINER (self), item->details_widget); gtk_text_buffer_get_iter_at_mark (self->pv->buffer, &start, item->beginning); gtk_text_buffer_get_iter_at_mark (self->pv->buffer, &iter, item->ending); gtk_text_buffer_delete (self->pv->buffer, &start, &iter); g_return_if_fail (!gtk_text_mark_get_deleted (item->beginning)); g_return_if_fail (!gtk_text_mark_get_deleted (item->ending)); item->extra_tag = NULL; item->field_width = 0; item->details = FALSE; }
static void destroy_display_item (gpointer data) { GcrDisplayItem *item = data; GtkTextTagTable *tags; GcrDisplayView *self; g_assert (item); g_assert (GCR_IS_DISPLAY_VIEW (item->display_view)); self = item->display_view; tags = gtk_text_buffer_get_tag_table (self->pv->buffer); gtk_text_tag_table_remove (tags, item->field_tag); gtk_text_tag_table_remove (tags, item->details_tag); g_object_unref (item->field_tag); g_object_unref (item->details_tag); if (item->pixbuf) g_object_unref (item->pixbuf); item->pixbuf = NULL; g_assert (item->details_widget); g_object_unref (item->details_widget); item->details_widget = NULL; g_return_if_fail (!gtk_text_mark_get_deleted (item->beginning)); gtk_text_buffer_delete_mark (self->pv->buffer, item->beginning); g_object_unref (item->beginning); g_return_if_fail (!gtk_text_mark_get_deleted (item->ending)); gtk_text_buffer_delete_mark (self->pv->buffer, item->ending); g_object_unref (item->ending); g_free (item); }
static void gcr_key_renderer_real_render (GcrRenderer *renderer, GcrViewer *viewer) { GcrKeyRenderer *self; GcrDisplayView *view; const gchar *text = ""; GckAttributes *attrs; gpointer fingerprint; gsize n_fingerprint; gchar *display; gulong klass; gulong key_type; guint size; self = GCR_KEY_RENDERER (renderer); if (GCR_IS_DISPLAY_VIEW (viewer)) { view = GCR_DISPLAY_VIEW (viewer); } else { g_warning ("GcrKeyRenderer only works with internal specific " "GcrViewer returned by gcr_viewer_new()."); return; } _gcr_display_view_begin (view, renderer); attrs = calculate_attrs (self); if (attrs == NULL) { _gcr_display_view_end (view, renderer); return; } if (!gck_attributes_find_ulong (attrs, CKA_CLASS, &klass) || !gck_attributes_find_ulong (attrs, CKA_KEY_TYPE, &key_type)) { g_warning ("private key does not have the CKA_CLASS and CKA_KEY_TYPE attributes"); _gcr_display_view_end (view, renderer); gck_attributes_unref (attrs); return; } _gcr_display_view_set_icon (view, renderer, self->pv->icon); display = calculate_label (self); _gcr_display_view_append_title (view, renderer, display); g_free (display); if (klass == CKO_PRIVATE_KEY) { if (key_type == CKK_RSA) text = _("Private RSA Key"); else if (key_type == CKK_DSA) text = _("Private DSA Key"); else if (key_type == CKK_EC) text = _("Private Elliptic Curve Key"); else text = _("Private Key"); } else if (klass == CKO_PUBLIC_KEY) { if (key_type == CKK_RSA) text = _("Public DSA Key"); else if (key_type == CKK_DSA) text = _("Public DSA Key"); else if (key_type == CKK_EC) text = _("Public Elliptic Curve Key"); else text = _("Public Key"); } _gcr_display_view_append_content (view, renderer, text, NULL); size = _gcr_subject_public_key_attributes_size (attrs); if (size > 0) { display = g_strdup_printf (g_dngettext (GETTEXT_PACKAGE, "%u bit", "%u bits", size), size); _gcr_display_view_append_content (view, renderer, _("Strength"), display); g_free (display); } _gcr_display_view_start_details (view, renderer); if (key_type == CKK_RSA) text = _("RSA"); else if (key_type == CKK_DSA) text = _("DSA"); else if (key_type == CKK_EC) text = _("Elliptic Curve"); else text = _("Unknown"); _gcr_display_view_append_value (view, renderer, _("Algorithm"), text, FALSE); if (size == 0) display = g_strdup (_("Unknown")); else display = g_strdup_printf ("%u", size); _gcr_display_view_append_value (view, renderer, _("Size"), display, FALSE); g_free (display); /* Fingerprints */ _gcr_display_view_append_heading (view, renderer, _("Fingerprints")); fingerprint = calculate_fingerprint (self, attrs, G_CHECKSUM_SHA1, &n_fingerprint); if (fingerprint) { _gcr_display_view_append_hex (view, renderer, _("SHA1"), fingerprint, n_fingerprint); g_free (fingerprint); } fingerprint = calculate_fingerprint (self, attrs, G_CHECKSUM_SHA256, &n_fingerprint); if (fingerprint) { _gcr_display_view_append_hex (view, renderer, _("SHA256"), fingerprint, n_fingerprint); g_free (fingerprint); } _gcr_display_view_end (view, renderer); gck_attributes_unref (attrs); }