aboutsummaryrefslogtreecommitdiffstats
path: root/src/pdm-dialog.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pdm-dialog.c')
-rwxr-xr-xsrc/pdm-dialog.c669
1 files changed, 669 insertions, 0 deletions
diff --git a/src/pdm-dialog.c b/src/pdm-dialog.c
new file mode 100755
index 000000000..5e077972a
--- /dev/null
+++ b/src/pdm-dialog.c
@@ -0,0 +1,669 @@
+/*
+ * Copyright (C) 2002 Jorn Baayen
+ *
+ * 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.
+ */
+
+#include "pdm-dialog.h"
+#include "ephy-shell.h"
+#include "ephy-embed-shell.h"
+#include "ephy-gui.h"
+#include "ephy-ellipsizing-label.h"
+
+#include <gtk/gtktreeview.h>
+#include <gtk/gtkliststore.h>
+#include <gtk/gtkcellrenderertext.h>
+#include <bonobo/bonobo-i18n.h>
+
+typedef struct PdmActionInfo PdmActionInfo;
+
+typedef void (* PDM_add) (PdmActionInfo *info, gpointer data);
+typedef void (* PDM_remove) (PdmActionInfo *info, GList *data);
+typedef void (* PDM_free) (PdmActionInfo *info, GList *data);
+
+static void pdm_dialog_class_init (PdmDialogClass *klass);
+static void pdm_dialog_init (PdmDialog *dialog);
+static void pdm_dialog_finalize (GObject *object);
+
+/* Glade callbacks */
+void
+pdm_dialog_close_button_clicked_cb (GtkWidget *button,
+ PdmDialog *dialog);
+void
+pdm_dialog_cookies_properties_button_clicked_cb (GtkWidget *button,
+ PdmDialog *dialog);
+void
+pdm_dialog_cookies_treeview_selection_changed_cb (GtkTreeSelection *selection,
+ PdmDialog *dialog);
+void
+pdm_dialog_passwords_treeview_selection_changed_cb (GtkTreeSelection *selection,
+ PdmDialog *dialog);
+
+static GObjectClass *parent_class = NULL;
+
+struct PdmActionInfo
+{
+ PDM_add add;
+ PDM_remove remove;
+ PDM_free free;
+ GtkWidget *treeview;
+ GList *list;
+ int remove_id;
+ int data_col;
+ PdmDialog *dialog;
+};
+
+struct PdmDialogPrivate
+{
+ GtkTreeModel *model;
+ PdmActionInfo *cookies;
+ PdmActionInfo *passwords;
+};
+
+enum
+{
+ PROP_COOKIES_TREEVIEW,
+ PROP_COOKIES_REMOVE,
+ PROP_PASSWORDS_TREEVIEW,
+ PROP_PASSWORDS_REMOVE,
+ PROP_DIALOG,
+ PROP_COOKIES_PROPERTIES
+};
+
+enum
+{
+ COL_COOKIES_HOST,
+ COL_COOKIES_NAME,
+ COL_COOKIES_DATA
+};
+
+enum
+{
+ COL_PASSWORDS_HOST,
+ COL_PASSWORDS_USER,
+ COL_PASSWORDS_DATA
+};
+
+static const
+EphyDialogProperty properties [] =
+{
+ { PROP_COOKIES_TREEVIEW, "cookies_treeview", NULL, PT_NORMAL, NULL },
+ { PROP_COOKIES_REMOVE, "cookies_remove_button", NULL, PT_NORMAL, NULL },
+ { PROP_PASSWORDS_TREEVIEW, "passwords_treeview", NULL, PT_NORMAL, NULL },
+ { PROP_PASSWORDS_REMOVE, "passwords_remove_button", NULL, PT_NORMAL, NULL },
+ { PROP_DIALOG, "pdm_dialog", NULL, PT_NORMAL, NULL },
+ { PROP_COOKIES_PROPERTIES, "cookies_properties_button", NULL, PT_NORMAL, NULL },
+
+ { -1, NULL, NULL }
+};
+
+GType
+pdm_dialog_get_type (void)
+{
+ static GType pdm_dialog_type = 0;
+
+ if (pdm_dialog_type == 0)
+ {
+ static const GTypeInfo our_info =
+ {
+ sizeof (PdmDialogClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) pdm_dialog_class_init,
+ NULL,
+ NULL, /* class_data */
+ sizeof (PdmDialog),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) pdm_dialog_init
+ };
+
+ pdm_dialog_type = g_type_register_static (EPHY_DIALOG_TYPE,
+ "PdmDialog",
+ &our_info, 0);
+ }
+
+ return pdm_dialog_type;
+
+}
+
+static void
+pdm_dialog_class_init (PdmDialogClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ object_class->finalize = pdm_dialog_finalize;
+}
+
+static void
+cookies_treeview_selection_changed_cb (GtkTreeSelection *selection,
+ PdmDialog *dialog)
+{
+ GtkWidget *widget;
+ GList *l;
+ EphyDialog *d = EPHY_DIALOG(dialog);
+ gboolean has_selection;
+ GtkTreeModel *model;
+
+ l = gtk_tree_selection_get_selected_rows
+ (selection, &model);
+
+ has_selection = l != NULL;
+
+ widget = ephy_dialog_get_control (d, PROP_COOKIES_PROPERTIES);
+ gtk_widget_set_sensitive (widget, has_selection);
+
+ g_list_foreach (l, (GFunc)gtk_tree_path_free, NULL);
+ g_list_free (l);
+}
+
+static void
+action_treeview_selection_changed_cb (GtkTreeSelection *selection,
+ PdmActionInfo *action)
+{
+ GtkWidget *widget;
+ GList *l;
+ EphyDialog *d = EPHY_DIALOG(action->dialog);
+ gboolean has_selection;
+ GtkTreeModel *model;
+
+ l = gtk_tree_selection_get_selected_rows
+ (selection, &model);
+
+ has_selection = l != NULL;
+
+ widget = ephy_dialog_get_control (d, action->remove_id);
+ gtk_widget_set_sensitive (widget, has_selection);
+
+ g_list_foreach (l, (GFunc)gtk_tree_path_free, NULL);
+ g_list_free (l);
+}
+
+static GtkWidget *
+setup_passwords_treeview (PdmDialog *dialog)
+{
+
+ GtkTreeView *treeview;
+ GtkListStore *liststore;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
+
+ treeview = GTK_TREE_VIEW(ephy_dialog_get_control
+ (EPHY_DIALOG(dialog),
+ PROP_PASSWORDS_TREEVIEW));
+
+ /* set tree model */
+ liststore = gtk_list_store_new (3,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_POINTER);
+ gtk_tree_view_set_model (treeview, GTK_TREE_MODEL(liststore));
+ gtk_tree_view_set_headers_visible (treeview, TRUE);
+ selection = gtk_tree_view_get_selection (treeview);
+ gtk_tree_selection_set_mode (selection,
+ GTK_SELECTION_MULTIPLE);
+
+ renderer = gtk_cell_renderer_text_new ();
+
+ gtk_tree_view_insert_column_with_attributes (treeview,
+ COL_PASSWORDS_HOST,
+ _("Host"),
+ renderer,
+ "text", COL_PASSWORDS_HOST,
+ NULL);
+ column = gtk_tree_view_get_column (treeview, COL_PASSWORDS_HOST);
+ gtk_tree_view_column_set_resizable (column, TRUE);
+ gtk_tree_view_column_set_reorderable (column, TRUE);
+ gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_column_set_sort_column_id (column, COL_PASSWORDS_HOST);
+
+ gtk_tree_view_insert_column_with_attributes (treeview,
+ COL_PASSWORDS_USER,
+ _("User Name"),
+ renderer,
+ "text", COL_PASSWORDS_USER,
+ NULL);
+ column = gtk_tree_view_get_column (treeview, COL_PASSWORDS_USER);
+ gtk_tree_view_column_set_resizable (column, TRUE);
+ gtk_tree_view_column_set_reorderable (column, TRUE);
+ gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_column_set_sort_column_id (column, COL_PASSWORDS_USER);
+
+ return GTK_WIDGET (treeview);
+}
+
+static GtkWidget *
+setup_cookies_treeview (PdmDialog *dialog)
+{
+ GtkTreeView *treeview;
+ GtkListStore *liststore;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
+
+ treeview = GTK_TREE_VIEW (ephy_dialog_get_control
+ (EPHY_DIALOG(dialog),
+ PROP_COOKIES_TREEVIEW));
+
+ /* set tree model */
+ liststore = gtk_list_store_new (3,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_POINTER);
+ gtk_tree_view_set_model (treeview, GTK_TREE_MODEL(liststore));
+ gtk_tree_view_set_headers_visible (treeview, TRUE);
+ selection = gtk_tree_view_get_selection (treeview);
+ gtk_tree_selection_set_mode (selection,
+ GTK_SELECTION_MULTIPLE);
+
+ g_signal_connect (selection, "changed",
+ G_CALLBACK(cookies_treeview_selection_changed_cb),
+ dialog);
+
+ renderer = gtk_cell_renderer_text_new ();
+
+ gtk_tree_view_insert_column_with_attributes (treeview,
+ COL_COOKIES_HOST,
+ _("Domain"),
+ renderer,
+ "text", COL_COOKIES_HOST,
+ NULL);
+ column = gtk_tree_view_get_column (treeview, COL_COOKIES_HOST);
+ gtk_tree_view_column_set_resizable (column, TRUE);
+ gtk_tree_view_column_set_reorderable (column, TRUE);
+ gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_column_set_sort_column_id (column, COL_COOKIES_HOST);
+
+ gtk_tree_view_insert_column_with_attributes (treeview,
+ COL_COOKIES_NAME,
+ _("Name"),
+ renderer,
+ "text", COL_COOKIES_NAME,
+ NULL);
+ column = gtk_tree_view_get_column (treeview, COL_COOKIES_NAME);
+ gtk_tree_view_column_set_resizable (column, TRUE);
+ gtk_tree_view_column_set_reorderable (column, TRUE);
+ gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_column_set_sort_column_id (column, COL_COOKIES_NAME);
+
+ return GTK_WIDGET(treeview);
+}
+
+static void
+pdm_dialog_remove_button_clicked_cb (GtkWidget *button,
+ PdmActionInfo *action)
+{
+ GList *l, *r = NULL;
+ GList *remove_list = NULL;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+
+ selection = gtk_tree_view_get_selection
+ (GTK_TREE_VIEW(action->treeview));
+ l = gtk_tree_selection_get_selected_rows
+ (selection, &model);
+ for (;l != NULL; l = l->next)
+ {
+ r = g_list_append (r, gtk_tree_row_reference_new
+ (model, (GtkTreePath *)l->data));
+ }
+
+ for (; r != NULL; r = r->next)
+ {
+ GtkTreeIter iter;
+ gpointer data;
+ GtkTreePath *path;
+ 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, action->data_col, &val);
+ data = g_value_get_pointer (&val);
+
+ gtk_list_store_remove (GTK_LIST_STORE(model),
+ &iter);
+
+ action->list = g_list_remove (action->list, data);
+ remove_list = g_list_append (remove_list, data);
+
+ gtk_tree_row_reference_free ((GtkTreeRowReference *)r->data);
+ }
+
+ if (remove_list)
+ {
+ action->remove (action, remove_list);
+ action->free (action, remove_list);
+ }
+
+ l = g_list_first (l);
+ g_list_foreach (l, (GFunc)gtk_tree_path_free, NULL);
+ g_list_free (l);
+ g_list_free (r);
+}
+
+static void
+setup_action (PdmActionInfo *action)
+{
+ GList *l;
+ GtkWidget *widget;
+ GtkTreeSelection *selection;
+
+ for (l = action->list; l != NULL; l = l->next)
+ {
+ action->add (action, l->data);
+ }
+
+ widget = ephy_dialog_get_control (EPHY_DIALOG(action->dialog),
+ action->remove_id);
+ g_signal_connect (widget, "clicked",
+ G_CALLBACK(pdm_dialog_remove_button_clicked_cb),
+ action);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(action->treeview));
+ g_signal_connect (selection, "changed",
+ G_CALLBACK(action_treeview_selection_changed_cb),
+ action);
+}
+
+static void
+pdm_dialog_cookie_add (PdmActionInfo *info,
+ gpointer cookie)
+{
+ GtkListStore *store;
+ GtkTreeIter iter;
+ CookieInfo *cinfo = (CookieInfo *)cookie;
+
+ store = GTK_LIST_STORE(gtk_tree_view_get_model
+ (GTK_TREE_VIEW(info->treeview)));
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store,
+ &iter,
+ COL_COOKIES_HOST, cinfo->base.domain,
+ COL_COOKIES_NAME, cinfo->name,
+ COL_COOKIES_DATA, cinfo,
+ -1);
+}
+
+static void
+pdm_dialog_password_add (PdmActionInfo *info,
+ gpointer password)
+{
+ GtkListStore *store;
+ GtkTreeIter iter;
+ PasswordInfo *pinfo = (PasswordInfo *)password;
+
+ store = GTK_LIST_STORE(gtk_tree_view_get_model
+ (GTK_TREE_VIEW(info->treeview)));
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store,
+ &iter,
+ COL_PASSWORDS_HOST, pinfo->host,
+ COL_PASSWORDS_USER, pinfo->username,
+ COL_PASSWORDS_DATA, pinfo,
+ -1);
+}
+
+static void
+pdm_dialog_cookie_remove (PdmActionInfo *info,
+ GList *data)
+{
+ EphyEmbedShell *shell;
+ shell = ephy_shell_get_embed_shell (ephy_shell);
+ ephy_embed_shell_remove_cookies (shell, data);
+}
+
+static void
+pdm_dialog_password_remove (PdmActionInfo *info,
+ GList *data)
+{
+ EphyEmbedShell *shell;
+ shell = ephy_shell_get_embed_shell (ephy_shell);
+ ephy_embed_shell_remove_passwords (shell, data, PASSWORD_PASSWORD);
+}
+
+static void
+pdm_dialog_cookies_free (PdmActionInfo *info,
+ GList *data)
+{
+ EphyEmbedShell *shell;
+ GList *l;
+
+ shell = ephy_shell_get_embed_shell (ephy_shell);
+ l = data ? data : info->list;
+ ephy_embed_shell_free_cookies (shell, l);
+}
+
+static void
+pdm_dialog_passwords_free (PdmActionInfo *info,
+ GList *data)
+{
+ EphyEmbedShell *shell;
+ GList *l;
+
+ shell = ephy_shell_get_embed_shell (ephy_shell);
+ l = data ? data : info->list;
+ ephy_embed_shell_free_passwords (shell, l);
+}
+
+static void
+pdm_dialog_init (PdmDialog *dialog)
+{
+ EphyEmbedShell *shell;
+ PdmActionInfo *cookies;
+ PdmActionInfo *passwords;
+ GtkWidget *cookies_tv;
+ GtkWidget *passwords_tv;
+
+ shell = ephy_shell_get_embed_shell (ephy_shell);
+
+ dialog->priv = g_new0 (PdmDialogPrivate, 1);
+ dialog->priv->cookies = NULL;
+ dialog->priv->passwords = NULL;
+
+ ephy_dialog_construct (EPHY_DIALOG(dialog),
+ properties,
+ "epiphany.glade",
+ "pdm_dialog");
+
+ cookies_tv = setup_cookies_treeview (dialog);
+ passwords_tv = setup_passwords_treeview (dialog);
+
+ cookies = g_new0 (PdmActionInfo, 1);
+ ephy_embed_shell_list_cookies (shell, &cookies->list);
+ cookies->dialog = dialog;
+ cookies->remove_id = PROP_COOKIES_REMOVE;
+ cookies->add = pdm_dialog_cookie_add;
+ cookies->remove = pdm_dialog_cookie_remove;
+ cookies->free = pdm_dialog_cookies_free;
+ cookies->treeview = cookies_tv;
+ cookies->data_col = COL_COOKIES_DATA;
+ setup_action (cookies);
+
+ passwords = g_new0 (PdmActionInfo, 1);
+ ephy_embed_shell_list_passwords (shell, PASSWORD_PASSWORD,
+ &passwords->list);
+ passwords->dialog = dialog;
+ passwords->remove_id = PROP_PASSWORDS_REMOVE;
+ passwords->add = pdm_dialog_password_add;
+ passwords->remove = pdm_dialog_password_remove;
+ passwords->free = pdm_dialog_passwords_free;
+ passwords->treeview = passwords_tv;
+ passwords->data_col = COL_PASSWORDS_DATA;
+ setup_action (passwords);
+
+ dialog->priv->cookies = cookies;
+ dialog->priv->passwords = passwords;
+}
+
+static void
+pdm_dialog_finalize (GObject *object)
+{
+ PdmDialog *dialog;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (IS_PDM_DIALOG (object));
+
+ dialog = PDM_DIALOG (object);
+
+ g_return_if_fail (dialog->priv != NULL);
+
+ pdm_dialog_passwords_free (dialog->priv->passwords, NULL);
+ pdm_dialog_cookies_free (dialog->priv->cookies, NULL);
+
+ g_free (dialog->priv);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+EphyDialog *
+pdm_dialog_new (GtkWidget *window)
+{
+ PdmDialog *dialog;
+
+ dialog = PDM_DIALOG (g_object_new (PDM_DIALOG_TYPE,
+ "ParentWindow", window,
+ NULL));
+
+ return EPHY_DIALOG(dialog);
+}
+
+static void
+show_cookies_properties (PdmDialog *dialog,
+ CookieInfo *info)
+{
+ GtkWidget *gdialog;
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *parent;
+ GtkWidget *dialog_vbox;
+
+ parent = ephy_dialog_get_control (EPHY_DIALOG(dialog),
+ PROP_DIALOG);
+
+ gdialog = gtk_dialog_new_with_buttons
+ (_("Cookie properties"),
+ GTK_WINDOW(parent),
+ GTK_DIALOG_MODAL,
+ GTK_STOCK_CLOSE, 0, NULL);
+ gtk_dialog_set_has_separator (GTK_DIALOG(gdialog), FALSE);
+ gtk_container_set_border_width (GTK_CONTAINER(gdialog), 6);
+
+ table = gtk_table_new (2, 4, FALSE);
+ gtk_container_set_border_width (GTK_CONTAINER(table), 6);
+ gtk_table_set_row_spacings (GTK_TABLE(table), 10);
+ gtk_table_set_col_spacings (GTK_TABLE(table), 10);
+ gtk_widget_show (table);
+
+ label = gtk_label_new (_("<b>Value</b>"));
+ gtk_label_set_use_markup (GTK_LABEL(label), TRUE);
+ gtk_misc_set_alignment (GTK_MISC(label), 0, 0);
+ gtk_widget_show (label);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,
+ GTK_FILL, GTK_FILL, 0, 0);
+
+ label = ephy_ellipsizing_label_new (info->value);
+ gtk_misc_set_alignment (GTK_MISC(label), 0, 0);
+ gtk_widget_show (label);
+ gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 0, 1);
+
+ label = gtk_label_new (_("<b>Path</b>"));
+ gtk_label_set_use_markup (GTK_LABEL(label), TRUE);
+ gtk_misc_set_alignment (GTK_MISC(label), 0, 0);
+ gtk_widget_show (label);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2,
+ GTK_FILL, GTK_FILL, 0, 0);
+
+ label = gtk_label_new (info->path);
+ gtk_misc_set_alignment (GTK_MISC(label), 0, 0);
+ gtk_widget_show (label);
+ gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 1, 2);
+
+ label = gtk_label_new (_("<b>Secure</b>"));
+ gtk_label_set_use_markup (GTK_LABEL(label), TRUE);
+ gtk_misc_set_alignment (GTK_MISC(label), 0, 0);
+ gtk_widget_show (label);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3,
+ GTK_FILL, GTK_FILL, 0, 0);
+
+ label = gtk_label_new (info->secure);
+ gtk_misc_set_alignment (GTK_MISC(label), 0, 0);
+ gtk_widget_show (label);
+ gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 2, 3);
+
+ label = gtk_label_new (_("<b>Expire</b>"));
+ gtk_label_set_use_markup (GTK_LABEL(label), TRUE);
+ gtk_misc_set_alignment (GTK_MISC(label), 0, 0);
+ gtk_widget_show (label);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4,
+ GTK_FILL, GTK_FILL, 0, 0);
+
+ label = gtk_label_new (info->expire);
+ gtk_misc_set_alignment (GTK_MISC(label), 0, 0.5);
+ gtk_widget_show (label);
+ gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 3, 4);
+
+ dialog_vbox = GTK_DIALOG(gdialog)->vbox;
+ gtk_box_pack_start (GTK_BOX(dialog_vbox),
+ table,
+ FALSE, FALSE, 0);
+
+ gtk_dialog_run (GTK_DIALOG(gdialog));
+
+ gtk_widget_destroy (gdialog);
+}
+
+void
+pdm_dialog_cookies_properties_button_clicked_cb (GtkWidget *button,
+ PdmDialog *dialog)
+{
+ GtkTreeModel *model;
+ GValue val = {0, };
+ GtkTreeIter iter;
+ GtkTreePath *path;
+ CookieInfo *info;
+ GList *l;
+ GtkWidget *treeview = dialog->priv->cookies->treeview;
+ GtkTreeSelection *selection;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
+ l = gtk_tree_selection_get_selected_rows
+ (selection, &model);
+
+ path = (GtkTreePath *)l->data;
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_model_get_value
+ (model, &iter, COL_COOKIES_DATA, &val);
+ info = (CookieInfo *)g_value_get_pointer (&val);
+
+ show_cookies_properties (dialog, info);
+
+ g_list_foreach (l, (GFunc)gtk_tree_path_free, NULL);
+ g_list_free (l);
+}
+
+void
+pdm_dialog_close_button_clicked_cb (GtkWidget *button,
+ PdmDialog *dialog)
+{
+ g_object_unref (dialog);
+}