diff options
author | Christian Persch <chpe@cvs.gnome.org> | 2005-12-11 22:40:15 +0800 |
---|---|---|
committer | Christian Persch <chpe@src.gnome.org> | 2005-12-11 22:40:15 +0800 |
commit | fbe31b361697275f1cf071d02ade300cf54e61a7 (patch) | |
tree | 9493efe263f5b9b16dbeb235db549b008e5f8ca9 /src | |
parent | aabe93c2482f2371648e1e191d774ca127149ffa (diff) | |
download | gsoc2013-epiphany-fbe31b361697275f1cf071d02ade300cf54e61a7.tar gsoc2013-epiphany-fbe31b361697275f1cf071d02ade300cf54e61a7.tar.gz gsoc2013-epiphany-fbe31b361697275f1cf071d02ade300cf54e61a7.tar.bz2 gsoc2013-epiphany-fbe31b361697275f1cf071d02ade300cf54e61a7.tar.lz gsoc2013-epiphany-fbe31b361697275f1cf071d02ade300cf54e61a7.tar.xz gsoc2013-epiphany-fbe31b361697275f1cf071d02ade300cf54e61a7.tar.zst gsoc2013-epiphany-fbe31b361697275f1cf071d02ade300cf54e61a7.zip |
A embed/ephy-certificate-manager.c: A embed/ephy-certificate-manager.h: A
2005-12-11 Christian Persch <chpe@cvs.gnome.org>
* configure.ac:
* data/glade/Makefile.am:
* data/glade/certs-manager.glade:
* data/ui/epiphany-ui.xml:
* embed/Makefile.am:
A embed/ephy-certificate-manager.c:
A embed/ephy-certificate-manager.h:
A embed/ephy-x509-cert.c:
A embed/ephy-x509-cert.h:
* embed/mozilla/Makefile.am:
* embed/mozilla/mozilla-embed-single.cpp:
A embed/mozilla/mozilla-x509-cert.cpp:
A embed/mozilla/mozilla-x509-cert.h:
* src/Makefile.am:
A src/ephy-certificate-manager.c:
A src/ephy-certificate-manager.h:
* src/ephy-window.c:
* src/window-commands.c:
* src/window-commands.h:
Add certificate manager. Patch by Robert Marcano and Crispin
Flowerday. Fixes bug #119090.
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 8 | ||||
-rw-r--r-- | src/ephy-certificate-manager.c | 517 | ||||
-rw-r--r-- | src/ephy-certificate-manager.h | 59 | ||||
-rw-r--r-- | src/ephy-window.c | 15 | ||||
-rw-r--r-- | src/window-commands.c | 17 | ||||
-rw-r--r-- | src/window-commands.h | 3 |
6 files changed, 619 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index a4d36a42b..2d43a5f08 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -105,6 +105,14 @@ libephymain_la_SOURCES = \ $(INST_H_FILES) \ $(NOINST_H_FILES) +if ENABLE_CERTIFICATE_MANAGER +NOINST_H_FILES += \ + ephy-certificate-manager.h + +libephymain_la_SOURCES += \ + ephy-certificate-manager.c +endif + libephymain_la_CPPFLAGS = \ -I$(top_builddir)/lib \ -I$(top_builddir)/lib/egg \ diff --git a/src/ephy-certificate-manager.c b/src/ephy-certificate-manager.c new file mode 100644 index 000000000..48721b3b2 --- /dev/null +++ b/src/ephy-certificate-manager.c @@ -0,0 +1,517 @@ +/* + * Copyright (C) 2003 Robert Marcano + * Copyright (C) 2005 Crispin Flowerday + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id$ + */ + +#include "config.h" + +#include "ephy-certificate-manager.h" +#include "ephy-shell.h" +#include "ephy-embed-shell.h" +#include "ephy-gui.h" +#include "ephy-x509-cert.h" +#include "ephy-certificate-manager.h" +#include "ephy-embed-single.h" +#include "ephy-file-helpers.h" +#include "ephy-file-chooser.h" + +#include <gtk/gtkdialog.h> +#include <gtk/gtkbutton.h> +#include <gtk/gtkcellrenderertext.h> +#include <gtk/gtktreeview.h> +#include <gtk/gtktreeselection.h> +#include <gtk/gtkliststore.h> + +#include <glib/gi18n.h> +#include <glib.h> + +/* Glade callbacks */ +void +certs_manager_dialog_response_cb (GtkDialog *dialog, + gint response_id, + CertsManagerDialog *cm_dialog); +void +certs_manager_dialog_remove_button_clicked_cb (GtkButton *button, + CertsManagerDialog *dialog); +static void +tree_view_selection_changed_cb (GtkTreeSelection *selection, + CertsManagerDialog *dialog); + +static GObjectClass *parent_class = NULL; + +#define EPHY_CERTIFICATE_MANAGER_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_CERTS_MANAGER_DIALOG, CertsManagerDialogPrivate)) + +struct _CertsManagerDialogPrivate +{ + EphyCertificateManager *certs_manager; +}; + +enum +{ + RESPONSE_IMPORT = 1 +}; + +enum +{ + PROP_WINDOW, + PERSONAL_TREE_VIEW, + PERSONAL_REMOVE_BUTTON, + PERSONAL_VIEW_BUTTON, + PERSONAL_EXPORT_BUTTON, + SERVER_TREE_VIEW, + SERVER_REMOVE_BUTTON, + SERVER_VIEW_BUTTON, + SERVER_PROPS_BUTTON, + CA_TREE_VIEW, + CA_REMOVE_BUTTON, + CA_VIEW_BUTTON, + CA_PROPS_BUTTON +}; + +static const +EphyDialogProperty properties [] = +{ + { "certs_manager_dialog", NULL, PT_NORMAL, 0 }, + { "personal_treeview", NULL, PT_NORMAL, 0 }, + { "personal_remove_button", NULL, PT_NORMAL, 0 }, + { "personal_view_button", NULL, PT_NORMAL, 0 }, + { "personal_export_button", NULL, PT_NORMAL, 0 }, + { "server_treeview", NULL, PT_NORMAL, 0 }, + { "server_remove_button", NULL, PT_NORMAL, 0 }, + { "server_view_button", NULL, PT_NORMAL, 0 }, + { "server_props_button", NULL, PT_NORMAL, 0 }, + { "ca_treeview", NULL, PT_NORMAL, 0 }, + { "ca_remove_button", NULL, PT_NORMAL, 0 }, + { "ca_view_button", NULL, PT_NORMAL, 0 }, + { "ca_props_button", NULL, PT_NORMAL, 0 }, + + { NULL } +}; + +enum +{ + COL_NAME, + COL_CERT, + N_COLUMNS +}; + +static void +init_tree_view (CertsManagerDialog *dialog, GtkTreeView *tree_view) +{ + GtkCellRenderer *renderer; + GtkTreeSelection *selection; + GtkTreeViewColumn * column; + + renderer = gtk_cell_renderer_text_new (); + gtk_tree_view_set_headers_visible (tree_view, TRUE); + gtk_tree_view_insert_column_with_attributes (tree_view, + -1, + _("Name"), + renderer, + "text", COL_NAME, + NULL); + column = gtk_tree_view_get_column (tree_view, COL_NAME); + gtk_tree_view_column_set_sort_column_id (column, COL_NAME); + selection = gtk_tree_view_get_selection (tree_view); + g_signal_connect (selection, + "changed", + G_CALLBACK (tree_view_selection_changed_cb), + dialog); + + +} + + +static void +append_cert (EphyX509Cert* cert, GtkListStore *list_store) +{ + GtkTreeIter iter; + const char *title; + + title = ephy_x509_cert_get_title (cert); + gtk_list_store_append (list_store, &iter); + gtk_list_store_set (list_store, &iter, + COL_NAME, title, + COL_CERT, cert, + -1); +} + +static void +fill_tree_view_from_list (GtkTreeView *tree_view, + GList *list) +{ + GtkListStore *list_store; + + list_store = gtk_list_store_new (N_COLUMNS, + G_TYPE_STRING, + G_TYPE_OBJECT); + g_list_foreach (list, (GFunc)append_cert, list_store); + gtk_tree_view_set_model(tree_view, GTK_TREE_MODEL (list_store)); +} + +static void +set_buttons_sensitive (CertsManagerDialog *dialog, + gint button1, + gint button2, + gint button3, + gboolean value) +{ + GtkWidget *widget; + + widget = ephy_dialog_get_control (EPHY_DIALOG (dialog), properties[button1].id); + gtk_widget_set_sensitive (widget, value); + + widget = ephy_dialog_get_control (EPHY_DIALOG (dialog), properties[button2].id); + gtk_widget_set_sensitive (widget, value); + + widget = ephy_dialog_get_control (EPHY_DIALOG (dialog), properties[button3].id); + gtk_widget_set_sensitive (widget, value); +} + + +static void +chooser_response_cb (EphyFileChooser *chooser, + int response, + CertsManagerDialog *dialog) +{ + CertsManagerDialogPrivate *priv = dialog->priv; + if (response == GTK_RESPONSE_ACCEPT) + { + char *file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser)); + + ephy_certificate_manager_import (priv->certs_manager, file); + + g_free (file); + } + + gtk_widget_destroy (GTK_WIDGET (chooser)); +} + +static void +import (GtkDialog *dialog, CertsManagerDialog *cm_dialog) +{ + EphyFileChooser *chooser; + + chooser = ephy_file_chooser_new (_("Import Certificate"), + GTK_WIDGET (dialog), + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, + EPHY_FILE_FILTER_ALL); + + g_signal_connect (chooser, "response", G_CALLBACK (chooser_response_cb), cm_dialog); + + gtk_widget_show (GTK_WIDGET (chooser)); +} + +void +certs_manager_dialog_response_cb (GtkDialog *widget, + int response, + CertsManagerDialog *dialog) +{ + if (response == GTK_RESPONSE_HELP) + { + /* TODO open help */ + return; + } + else if (response == RESPONSE_IMPORT) + { + import (widget, dialog); + return; + } + + g_object_unref (dialog); +} + +void +certs_manager_dialog_remove_button_clicked_cb (GtkButton *button, + CertsManagerDialog *dialog) +{ + CertsManagerDialogPrivate *priv = dialog->priv; + GtkTreeView *tree_view = NULL; + GtkTreeModel *model; + GtkTreeSelection *tree_selection; + EphyDialog *ephy_dialog; + GtkButton *personal_button; + GtkButton *server_button; + GtkButton *ca_button; + GList *selected_list, *remove_list = NULL, *l, *r; + GtkTreeIter iter; + GtkTreePath *path; + + ephy_dialog = EPHY_DIALOG (dialog); + personal_button = GTK_BUTTON (ephy_dialog_get_control + (ephy_dialog, + properties[PERSONAL_REMOVE_BUTTON].id)); + server_button = GTK_BUTTON (ephy_dialog_get_control + (ephy_dialog, + properties[SERVER_REMOVE_BUTTON].id)); + ca_button = GTK_BUTTON (ephy_dialog_get_control + (ephy_dialog, + properties[CA_REMOVE_BUTTON].id)); + if (button == personal_button) + tree_view = GTK_TREE_VIEW (ephy_dialog_get_control + (ephy_dialog, + properties[PERSONAL_TREE_VIEW].id)); + else if (button == server_button) + tree_view = GTK_TREE_VIEW (ephy_dialog_get_control + (ephy_dialog, + properties[SERVER_TREE_VIEW].id)); + else if (button == ca_button) + tree_view = GTK_TREE_VIEW (ephy_dialog_get_control + (ephy_dialog, + properties[CA_TREE_VIEW].id)); + g_assert (tree_view != NULL); + tree_selection = gtk_tree_view_get_selection (tree_view); + selected_list = gtk_tree_selection_get_selected_rows (tree_selection, &model); + + for (l = selected_list; l != NULL; l = l->next) + { + remove_list = g_list_prepend (remove_list, + gtk_tree_row_reference_new (model, + (GtkTreePath *)l->data)); + } + for (r = remove_list; r != NULL; r = r->next) + { + EphyX509Cert *cert; + GValue val = {0, }; + path = gtk_tree_row_reference_get_path ((GtkTreeRowReference *)r->data); + + gtk_tree_model_get_iter (model, &iter, path); + gtk_tree_model_get_value (model, &iter, COL_CERT, &val); + cert = EPHY_X509_CERT (g_value_dup_object (&val)); + g_value_unset (&val); + + // TODO check return value and notify if an error ocurred + ephy_certificate_manager_remove_certificate (priv->certs_manager, + cert); + g_object_unref (cert); + + gtk_list_store_remove (GTK_LIST_STORE (model), + &iter); + + gtk_tree_row_reference_free ((GtkTreeRowReference *)r->data); + gtk_tree_path_free (path); + } + g_list_free (selected_list); + g_list_free (remove_list); +} + +static void +tree_view_selection_changed_cb (GtkTreeSelection *selection, + CertsManagerDialog *dialog) +{ + gint count; + EphyDialog *ephy_dialog; + GtkTreeView *tree_view; + GtkTreeView *personal_tree_view; + GtkTreeView *server_tree_view; + GtkTreeView *ca_tree_view; + gboolean has_selection; + + ephy_dialog = EPHY_DIALOG (dialog); + tree_view = gtk_tree_selection_get_tree_view (selection); + personal_tree_view = GTK_TREE_VIEW (ephy_dialog_get_control + (ephy_dialog, + properties[PERSONAL_TREE_VIEW].id)); + server_tree_view = GTK_TREE_VIEW (ephy_dialog_get_control + (ephy_dialog, + properties[SERVER_TREE_VIEW].id)); + ca_tree_view = GTK_TREE_VIEW (ephy_dialog_get_control + (ephy_dialog, + properties[CA_TREE_VIEW].id)); + count = gtk_tree_selection_count_selected_rows (selection); + has_selection = count == 0 ? FALSE : TRUE; + if (tree_view == personal_tree_view) + set_buttons_sensitive (dialog, + PERSONAL_REMOVE_BUTTON, + PERSONAL_VIEW_BUTTON, + PERSONAL_EXPORT_BUTTON, + has_selection); + else if (tree_view == server_tree_view) + set_buttons_sensitive (dialog, + SERVER_REMOVE_BUTTON, + SERVER_VIEW_BUTTON, + SERVER_PROPS_BUTTON, + has_selection); + else if (tree_view == ca_tree_view) + set_buttons_sensitive (dialog, + CA_REMOVE_BUTTON, + CA_VIEW_BUTTON, + CA_PROPS_BUTTON, + has_selection); +} + + +static void +certs_manager_dialog_init (CertsManagerDialog *dialog) +{ + CertsManagerDialogPrivate *priv; + EphyEmbedShell *shell; + GtkWidget *window; + GtkTreeView *personal_treeview; + GtkTreeView *server_treeview; + GtkTreeView *ca_treeview; + GList *personalCerts; + GList *serverCerts; + GList *caCerts; + GtkWidget *button; + + priv = dialog->priv = EPHY_CERTIFICATE_MANAGER_GET_PRIVATE (dialog); + + shell = ephy_embed_shell_get_default (); + g_object_ref (shell); + + priv->certs_manager = EPHY_CERTIFICATE_MANAGER (ephy_embed_shell_get_embed_single (shell)); + + ephy_dialog_construct (EPHY_DIALOG (dialog), + properties, + ephy_file ("certs-manager.glade"), + "certs_manager_dialog", + NULL); + + window = ephy_dialog_get_control (EPHY_DIALOG (dialog), properties[PROP_WINDOW].id); + g_signal_connect (window, "response", + G_CALLBACK (certs_manager_dialog_response_cb), dialog); + + button = ephy_dialog_get_control (EPHY_DIALOG (dialog), properties[PERSONAL_REMOVE_BUTTON].id); + g_signal_connect (button, "clicked", + G_CALLBACK (certs_manager_dialog_remove_button_clicked_cb), dialog); + button = ephy_dialog_get_control (EPHY_DIALOG (dialog), properties[CA_REMOVE_BUTTON].id); + g_signal_connect (button, "clicked", + G_CALLBACK (certs_manager_dialog_remove_button_clicked_cb), dialog); + button = ephy_dialog_get_control (EPHY_DIALOG (dialog), properties[SERVER_REMOVE_BUTTON].id); + g_signal_connect (button, "clicked", + G_CALLBACK (certs_manager_dialog_remove_button_clicked_cb), dialog); + + /* disabling buttons until a certificate is selected */ + set_buttons_sensitive (dialog, + PERSONAL_REMOVE_BUTTON, + PERSONAL_VIEW_BUTTON, + PERSONAL_EXPORT_BUTTON, + FALSE); + set_buttons_sensitive (dialog, + SERVER_REMOVE_BUTTON, + SERVER_VIEW_BUTTON, + SERVER_PROPS_BUTTON, + FALSE); + set_buttons_sensitive (dialog, + CA_REMOVE_BUTTON, + CA_VIEW_BUTTON, + CA_PROPS_BUTTON, + FALSE); + + /* filling personal treeview */ + personalCerts = ephy_certificate_manager_get_certificates (priv->certs_manager, + PERSONAL_CERTIFICATE); + + personal_treeview = GTK_TREE_VIEW (ephy_dialog_get_control + (EPHY_DIALOG(dialog), + properties[PERSONAL_TREE_VIEW].id)); + init_tree_view (dialog, personal_treeview); + fill_tree_view_from_list (personal_treeview, personalCerts); + /* filling server treeview */ + serverCerts = ephy_certificate_manager_get_certificates (priv->certs_manager, + SERVER_CERTIFICATE); + server_treeview = GTK_TREE_VIEW (ephy_dialog_get_control + (EPHY_DIALOG(dialog), + properties[SERVER_TREE_VIEW].id)); + init_tree_view (dialog, server_treeview); + fill_tree_view_from_list (server_treeview, serverCerts); + /* filling ca treeview */ + caCerts = ephy_certificate_manager_get_certificates (priv->certs_manager, + CA_CERTIFICATE); + ca_treeview = GTK_TREE_VIEW (ephy_dialog_get_control + (EPHY_DIALOG(dialog), + properties[CA_TREE_VIEW].id)); + init_tree_view (dialog, ca_treeview); + fill_tree_view_from_list (ca_treeview, caCerts); + + g_list_foreach (personalCerts, (GFunc)g_object_unref, NULL); + g_list_free (personalCerts); + + g_list_foreach (serverCerts, (GFunc)g_object_unref, NULL); + g_list_free (serverCerts); + + g_list_foreach (caCerts, (GFunc)g_object_unref, NULL); + g_list_free (caCerts); +} + +static void +certs_manager_dialog_finalize (GObject *object) +{ + //CertsManagerDialog *dialog = EPHY_CERTS_MANAGER_DIALOG (object); + //CertsManagerDialogPrivate *priv = dialog->priv; + EphyEmbedShell *shell; + + /* TODO free certs in the treeviews */ + + G_OBJECT_CLASS (parent_class)->finalize (object); + + shell = ephy_embed_shell_get_default (); + g_object_unref (shell); +} + +static void +certs_manager_dialog_class_init (CertsManagerDialogClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + object_class->finalize = certs_manager_dialog_finalize; + + g_type_class_add_private (object_class, sizeof (CertsManagerDialogPrivate)); +} + +/* public functions */ + +GType +certs_manager_dialog_get_type (void) +{ + static GType certs_manager_dialog_type = 0; + + if (certs_manager_dialog_type == 0) + { + static const GTypeInfo our_info = + { + sizeof (CertsManagerDialogClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) certs_manager_dialog_class_init, + NULL, + NULL, /* class_data */ + sizeof (CertsManagerDialog), + 0, /* n_preallocs */ + (GInstanceInitFunc) certs_manager_dialog_init + }; + + certs_manager_dialog_type = g_type_register_static (EPHY_TYPE_DIALOG, + "CertsManagerDialog", + &our_info, 0); + } + + return certs_manager_dialog_type; + +} + +EphyDialog * +certs_manager_dialog_new (void) +{ + return g_object_new (EPHY_TYPE_CERTS_MANAGER_DIALOG, NULL); +} diff --git a/src/ephy-certificate-manager.h b/src/ephy-certificate-manager.h new file mode 100644 index 000000000..507dbfdef --- /dev/null +++ b/src/ephy-certificate-manager.h @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2003 Robert Marcano + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id$ + */ + +#ifndef CERTS_MANAGER_DIALOG_H +#define CERTS_MANAGER_DIALOG_H + +#include <glib.h> +#include "ephy-dialog.h" + +G_BEGIN_DECLS + +#define EPHY_TYPE_CERTS_MANAGER_DIALOG (certs_manager_dialog_get_type ()) +#define EPHY_CERTS_MANAGER_DIALOG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EPHY_TYPE_CERTS_MANAGER_DIALOG, CertsManagerDialog)) +#define EPHY_CERTS_MANAGER_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EPHY_TYPE_CERTS_MANAGER_DIALOG, CertsManagerDialogClass)) +#define EPHY_IS_CERTS_MANAGER_DIALOG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EPHY_TYPE_CERTS_MANAGER_DIALOG)) +#define EPHY_IS_CERTS_MANAGER_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EPHY_TYPE_CERTS_MANAGER_DIALOG)) +#define EPHY_CERTS_MANAGER_DIALOG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EPHY_TYPE_CERTS_MANAGER_DIALOG, CertsManagerDialogClass)) + +typedef struct _CertsManagerDialogClass CertsManagerDialogClass; +typedef struct _CertsManagerDialog CertsManagerDialog; +typedef struct _CertsManagerDialogPrivate CertsManagerDialogPrivate; + +struct _CertsManagerDialogClass +{ + EphyDialogClass parent_class; +}; + +struct _CertsManagerDialog +{ + EphyDialog parent; + + /*< private >*/ + CertsManagerDialogPrivate *priv; +}; + +GType certs_manager_dialog_get_type (void); + +EphyDialog *certs_manager_dialog_new (void); + +G_END_DECLS + +#endif diff --git a/src/ephy-window.c b/src/ephy-window.c index 87cb491f8..0a6b64e1b 100644 --- a/src/ephy-window.c +++ b/src/ephy-window.c @@ -185,6 +185,11 @@ static const GtkActionEntry ephy_menu_entries [] = { { "EditPersonalData", NULL, N_("P_ersonal Data"), NULL, N_("View and remove cookies and passwords"), G_CALLBACK (window_cmd_edit_personal_data) }, +#ifdef ENABLE_CERTIFICATE_MANAGER + { "EditCertificates", NULL, N_("Cert_ificates"), NULL, + N_("Manage Certificates"), + G_CALLBACK (window_cmd_edit_certificates) }, +#endif { "EditToolbar", NULL, N_("T_oolbars"), NULL, N_("Customize toolbars"), G_CALLBACK (window_cmd_edit_toolbar) }, @@ -3085,6 +3090,16 @@ ephy_window_constructor (GType type, g_warning ("Could not merge epiphany-ui.xml: %s", error->message); g_error_free (error); } +#if ENABLE_CERTIFICATE_MANAGER +{ + guint ui_id; + ui_id = gtk_ui_manager_new_merge_id (priv->manager); + gtk_ui_manager_add_ui (priv->manager, ui_id, + "/menubar/EditMenu/EditPersonalDataMenu", + "EditCertificates", "EditCertificates", + GTK_UI_MANAGER_MENUITEM, FALSE); +} +#endif /* Initialize the menus */ priv->tabs_menu = ephy_tabs_menu_new (window); diff --git a/src/window-commands.c b/src/window-commands.c index 68d0dc710..e3fc9d3d6 100644 --- a/src/window-commands.c +++ b/src/window-commands.c @@ -670,6 +670,23 @@ window_cmd_edit_personal_data (GtkAction *action, } } +#ifdef ENABLE_CERTIFICATE_MANAGER + +#include "ephy-certificate-manager.h" + +void +window_cmd_edit_certificates (GtkAction *action, + EphyWindow *window) +{ + EphyDialog *dialog; + + dialog = certs_manager_dialog_new (); + + ephy_dialog_show (dialog); +} + +#endif /* ENABLE_CERTIFICATE_MANAGER */ + void window_cmd_edit_prefs (GtkAction *action, EphyWindow *window) diff --git a/src/window-commands.h b/src/window-commands.h index 8043bda59..fa8607808 100644 --- a/src/window-commands.h +++ b/src/window-commands.h @@ -124,6 +124,9 @@ void window_cmd_go_history (GtkAction *action, void window_cmd_edit_personal_data (GtkAction *action, EphyWindow *window); +void window_cmd_edit_certificates (GtkAction *action, + EphyWindow *window); + void window_cmd_edit_prefs (GtkAction *action, EphyWindow *window); |