static GcrRenderer* _gcr_display_view_real_get_renderer (GcrViewer *viewer, guint index_) { GcrDisplayView *self = GCR_DISPLAY_VIEW (viewer); g_return_val_if_fail (index_ < self->pv->renderers->len, NULL); return g_ptr_array_index (self->pv->renderers, index_); }
static void _gcr_display_view_dispose (GObject *obj) { GcrDisplayView *self = GCR_DISPLAY_VIEW (obj); GcrRenderer *renderer; GcrDisplayItem *item; while (self->pv->renderers->len) { renderer = g_ptr_array_index (self->pv->renderers, 0); item = g_hash_table_lookup (self->pv->items, renderer); g_return_if_fail (item); g_signal_handler_disconnect (renderer, item->data_changed_id); if (!g_hash_table_remove (self->pv->items, renderer)) g_return_if_reached (); g_ptr_array_remove_index_fast (self->pv->renderers, 0); } if (self->pv->buffer) g_object_unref (self->pv->buffer); self->pv->buffer = NULL; g_assert (g_hash_table_size (self->pv->items) == 0); G_OBJECT_CLASS (_gcr_display_view_parent_class)->dispose (obj); }
static GObject* _gcr_display_view_constructor (GType type, guint n_props, GObjectConstructParam *props) { GObject *obj = G_OBJECT_CLASS (_gcr_display_view_parent_class)->constructor (type, n_props, props); GcrDisplayView *self = NULL; GtkTextView *view = NULL; GtkTextTagTable *tags; g_return_val_if_fail (obj, NULL); self = GCR_DISPLAY_VIEW (obj); view = GTK_TEXT_VIEW (obj); tags = create_tag_table (self); self->pv->buffer = gtk_text_buffer_new (tags); g_object_unref (tags); gtk_text_view_set_buffer (view, self->pv->buffer); gtk_text_view_set_editable (view, FALSE); gtk_text_view_set_left_margin (view, NORMAL_MARGIN); gtk_text_view_set_right_margin (view, NORMAL_MARGIN); gtk_text_view_set_cursor_visible (view, FALSE); return obj; }
static void _gcr_display_get_preferred_width (GtkWidget *widget, gint *minimal_width, gint *natural_width) { GcrDisplayView *self = GCR_DISPLAY_VIEW (widget); ensure_measurements (self); *minimal_width = self->pv->minimal_width; *natural_width = self->pv->natural_width; }
static gboolean _gcr_display_view_expose_event (GtkWidget *widget, GdkEventExpose *event) { GcrDisplayView *self = GCR_DISPLAY_VIEW (widget); gboolean handled = FALSE; cairo_t *cr; /* Have GtkTextView draw the text first. */ if (GTK_WIDGET_CLASS (_gcr_display_view_parent_class)->expose_event) handled = GTK_WIDGET_CLASS (_gcr_display_view_parent_class)->expose_event (widget, event); /* Render the pixbuf if it's available */ if (event->window == gtk_text_view_get_window (GTK_TEXT_VIEW (widget), GTK_TEXT_WINDOW_TEXT)) { cr = gdk_cairo_create (event->window); paint_widget_icons (GCR_DISPLAY_VIEW (self), cr); cairo_destroy (cr); } return handled; }
static void _gcr_display_view_real_add_renderer (GcrViewer *viewer, GcrRenderer *renderer) { GcrDisplayView *self = GCR_DISPLAY_VIEW (viewer); GcrDisplayItem *item; item = create_display_item (self, renderer); g_ptr_array_add (self->pv->renderers, g_object_ref (renderer)); g_hash_table_insert (self->pv->items, renderer, item); gcr_renderer_render (renderer, viewer); item->data_changed_id = g_signal_connect (renderer, "data-changed", G_CALLBACK (on_renderer_data_changed), self); }
static void _gcr_display_view_realize (GtkWidget *widget) { GcrDisplayView *self = GCR_DISPLAY_VIEW (widget); GHashTableIter iter; gpointer value; if (GTK_WIDGET_CLASS (_gcr_display_view_parent_class)->realize) GTK_WIDGET_CLASS (_gcr_display_view_parent_class)->realize (widget); /* Set style on all the items */ g_hash_table_iter_init (&iter, self->pv->items); while (g_hash_table_iter_next (&iter, NULL, &value)) style_display_item (widget, value); }
static gboolean _gcr_display_view_draw (GtkWidget *widget, cairo_t *cr) { GdkWindow *window; gboolean handled; /* Have GtkTextView draw the text first. */ if (GTK_WIDGET_CLASS (_gcr_display_view_parent_class)->draw) handled = GTK_WIDGET_CLASS (_gcr_display_view_parent_class)->draw (widget, cr); window = gtk_text_view_get_window (GTK_TEXT_VIEW (widget), GTK_TEXT_WINDOW_TEXT); if (gtk_cairo_should_draw_window (cr, window)) paint_widget_icons (GCR_DISPLAY_VIEW (widget), cr); return handled; }
static void _gcr_display_view_real_remove_renderer (GcrViewer *viewer, GcrRenderer *renderer) { GcrDisplayView *self = GCR_DISPLAY_VIEW (viewer); GcrDisplayItem *item; item = lookup_display_item (self, renderer); g_return_if_fail (item); /* Unhook the callback */ g_signal_handler_disconnect (renderer, item->data_changed_id); /* Destroys the display item */ g_assert (item->display_view == self); g_hash_table_remove (self->pv->items, renderer); /* Unrefs the renderer */ if (!g_ptr_array_remove (self->pv->renderers, renderer)) g_return_if_reached (); }
static void _gcr_display_view_finalize (GObject *obj) { GcrDisplayView *self = GCR_DISPLAY_VIEW (obj); if (self->pv->buffer) g_object_unref (self->pv->buffer); self->pv->buffer = NULL; g_assert (g_hash_table_size (self->pv->items) == 0); g_hash_table_destroy (self->pv->items); self->pv->items = NULL; g_assert (self->pv->renderers); g_assert (self->pv->renderers->len == 0); g_ptr_array_free (self->pv->renderers, TRUE); self->pv->renderers = NULL; g_assert (self->pv->content_tag); g_object_unref (self->pv->content_tag); self->pv->content_tag = NULL; g_assert (self->pv->heading_tag); g_object_unref (self->pv->heading_tag); self->pv->heading_tag = NULL; g_assert (self->pv->monospace_tag); g_object_unref (self->pv->monospace_tag); self->pv->monospace_tag = NULL; g_assert (self->pv->title_tag); g_object_unref (self->pv->title_tag); self->pv->title_tag = NULL; G_OBJECT_CLASS (_gcr_display_view_parent_class)->finalize (obj); }
static guint _gcr_display_view_real_count_renderers (GcrViewer *viewer) { GcrDisplayView *self = GCR_DISPLAY_VIEW (viewer); return self->pv->renderers->len; }
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); }