[seahorse] common: SeahorseViewable tracks which Window is per object
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [seahorse] common: SeahorseViewable tracks which Window is per object
- Date: Wed, 26 Jun 2013 10:19:14 +0000 (UTC)
commit 245d4a9aa3acba9ffb7a160a13269b91d86dd933
Author: Stef Walter <stefw gnome org>
Date: Thu Jun 20 10:20:56 2013 +0200
common: SeahorseViewable tracks which Window is per object
Don't rely on SeahorseObjectWidget for this, since we'd rather
not use SeahorseWidget and SeahorseObjectWidget in new code.
common/viewable.vala | 27 ++++++++++++++++++++++++++-
gkr/seahorse-gkr-dialogs.h | 4 ++--
gkr/seahorse-gkr-item-properties.c | 6 ++++--
gkr/seahorse-gkr-item.c | 11 +++++------
gkr/seahorse-gkr-keyring-properties.c | 5 +++--
gkr/seahorse-gkr-keyring.c | 12 ++++++------
libseahorse/seahorse-catalog.c | 4 +---
libseahorse/seahorse-search-provider.c | 2 +-
pgp/seahorse-pgp-dialogs.h | 2 +-
pgp/seahorse-pgp-key-properties.c | 8 ++++++--
pgp/seahorse-pgp-key.c | 10 +++++-----
pkcs11/seahorse-certificate.c | 11 ++++++-----
pkcs11/seahorse-pkcs11-properties.c | 28 ++--------------------------
pkcs11/seahorse-pkcs11-properties.h | 2 +-
pkcs11/seahorse-private-key.c | 9 +++++----
src/seahorse-sidebar.c | 3 +--
ssh/seahorse-ssh-dialogs.h | 2 +-
ssh/seahorse-ssh-key-properties.c | 5 +++--
ssh/seahorse-ssh-key.c | 10 +++++-----
19 files changed, 84 insertions(+), 77 deletions(-)
---
diff --git a/common/viewable.vala b/common/viewable.vala
index 29c345b..1bb79e2 100644
--- a/common/viewable.vala
+++ b/common/viewable.vala
@@ -26,11 +26,36 @@ namespace Seahorse
{
public interface Viewable : GLib.Object {
- public abstract void show_viewer(Gtk.Window? parent);
+ public abstract Gtk.Window? create_viewer(Gtk.Window? parent);
public static bool can_view(GLib.Object object) {
return object is Viewable;
}
+
+ public static bool view(GLib.Object object,
+ Gtk.Window? parent) {
+ if (!Viewable.can_view(object))
+ return false;
+
+ Gtk.Window? window = null;
+
+ window = object.get_data("viewable-window");
+ if (window == null) {
+ var viewable = (Viewable)object;
+ window = viewable.create_viewer(parent);
+ if (window == null)
+ return false;
+
+ object.set_data("viewable-window", window);
+ window.destroy.connect(() => {
+ object.set_data_full("viewable-window", null, null);
+ });
+ }
+
+ window.present();
+ window.show();
+ return true;
+ }
}
}
diff --git a/gkr/seahorse-gkr-dialogs.h b/gkr/seahorse-gkr-dialogs.h
index fa565f0..98cc0fa 100644
--- a/gkr/seahorse-gkr-dialogs.h
+++ b/gkr/seahorse-gkr-dialogs.h
@@ -34,8 +34,8 @@ void seahorse_gkr_add_item_show (GtkWindow *parent);
void seahorse_gkr_add_keyring_show (GtkWindow *parent);
-void seahorse_gkr_item_properties_show (SeahorseGkrItem *git, GtkWindow *parent);
+GtkWindow * seahorse_gkr_item_properties_show (SeahorseGkrItem *git, GtkWindow *parent);
-void seahorse_gkr_keyring_properties_show (SeahorseGkrKeyring *gkr, GtkWindow *parent);
+GtkWindow * seahorse_gkr_keyring_properties_show (SeahorseGkrKeyring *gkr, GtkWindow *parent);
#endif /* __SEAHORSE_GKR_DIALOGS__ */
diff --git a/gkr/seahorse-gkr-item-properties.c b/gkr/seahorse-gkr-item-properties.c
index 9ee8f95..e1f40c6 100644
--- a/gkr/seahorse-gkr-item-properties.c
+++ b/gkr/seahorse-gkr-item-properties.c
@@ -536,7 +536,7 @@ properties_response (GtkDialog *dialog, int response, SeahorseWidget *swidget)
seahorse_widget_destroy (swidget);
}
-void
+GtkWindow *
seahorse_gkr_item_properties_show (SeahorseGkrItem *git, GtkWindow *parent)
{
GObject *object = G_OBJECT (git);
@@ -547,7 +547,7 @@ seahorse_gkr_item_properties_show (SeahorseGkrItem *git, GtkWindow *parent)
/* This happens if the window is already open */
if (swidget == NULL)
- return;
+ return NULL;
seahorse_gkr_item_refresh (git);
@@ -562,4 +562,6 @@ seahorse_gkr_item_properties_show (SeahorseGkrItem *git, GtkWindow *parent)
setup_main (swidget);
setup_details (swidget);
+
+ return g_object_ref (seahorse_widget_get_toplevel (swidget));
}
diff --git a/gkr/seahorse-gkr-item.c b/gkr/seahorse-gkr-item.c
index 3c6d798..37d4759 100644
--- a/gkr/seahorse-gkr-item.c
+++ b/gkr/seahorse-gkr-item.c
@@ -766,18 +766,17 @@ seahorse_gkr_item_deletable_iface (SeahorseDeletableIface *iface)
iface->get_deletable = seahorse_gkr_item_get_deletable;
}
-static void
-seahorse_gkr_item_show_viewer (SeahorseViewable *viewable,
- GtkWindow *parent)
+static GtkWindow *
+seahorse_gkr_item_create_viewer (SeahorseViewable *viewable,
+ GtkWindow *parent)
{
- seahorse_gkr_item_properties_show (SEAHORSE_GKR_ITEM (viewable),
- parent);
+ return seahorse_gkr_item_properties_show (SEAHORSE_GKR_ITEM (viewable), parent);
}
static void
seahorse_gkr_item_viewable_iface (SeahorseViewableIface *iface)
{
- iface->show_viewer = seahorse_gkr_item_show_viewer;
+ iface->create_viewer = seahorse_gkr_item_create_viewer;
}
SeahorseGkrItem *
diff --git a/gkr/seahorse-gkr-keyring-properties.c b/gkr/seahorse-gkr-keyring-properties.c
index d290e51..876ca28 100644
--- a/gkr/seahorse-gkr-keyring-properties.c
+++ b/gkr/seahorse-gkr-keyring-properties.c
@@ -93,7 +93,7 @@ on_keyring_properties_response (GtkDialog *dialog,
seahorse_widget_destroy (swidget);
}
-void
+GtkWindow *
seahorse_gkr_keyring_properties_show (SeahorseGkrKeyring *gkr, GtkWindow *parent)
{
GObject *object = G_OBJECT (gkr);
@@ -103,6 +103,7 @@ seahorse_gkr_keyring_properties_show (SeahorseGkrKeyring *gkr, GtkWindow *parent
/* This happens if the window is already open */
if (swidget == NULL)
- return;
+ return NULL;
setup_main (swidget);
+ return g_object_ref (seahorse_widget_get_toplevel (swidget));
}
diff --git a/gkr/seahorse-gkr-keyring.c b/gkr/seahorse-gkr-keyring.c
index 005617c..e7313b0 100644
--- a/gkr/seahorse-gkr-keyring.c
+++ b/gkr/seahorse-gkr-keyring.c
@@ -504,18 +504,18 @@ seahorse_keyring_lockable_iface (SeahorseLockableIface *iface)
iface->unlock_finish = seahorse_gkr_keyring_unlock_finish;
}
-static void
-seahorse_gkr_keyring_show_viewer (SeahorseViewable *viewable,
- GtkWindow *parent)
+static GtkWindow *
+seahorse_gkr_keyring_create_viewer (SeahorseViewable *viewable,
+ GtkWindow *parent)
{
- seahorse_gkr_keyring_properties_show (SEAHORSE_GKR_KEYRING (viewable),
- parent);
+ return seahorse_gkr_keyring_properties_show (SEAHORSE_GKR_KEYRING (viewable),
+ parent);
}
static void
seahorse_keyring_viewable_iface (SeahorseViewableIface *iface)
{
- iface->show_viewer = seahorse_gkr_keyring_show_viewer;
+ iface->create_viewer = seahorse_gkr_keyring_create_viewer;
}
gboolean
diff --git a/libseahorse/seahorse-catalog.c b/libseahorse/seahorse-catalog.c
index 403f402..e1ec564 100644
--- a/libseahorse/seahorse-catalog.c
+++ b/libseahorse/seahorse-catalog.c
@@ -584,9 +584,7 @@ void
seahorse_catalog_show_properties (SeahorseCatalog *self,
GObject* obj)
{
- if (seahorse_viewable_can_view (obj))
- seahorse_viewable_show_viewer (SEAHORSE_VIEWABLE (obj),
- seahorse_catalog_get_window (self));
+ seahorse_viewable_view (obj, seahorse_catalog_get_window (self));
}
GtkWindow *
diff --git a/libseahorse/seahorse-search-provider.c b/libseahorse/seahorse-search-provider.c
index d435383..95cbe18 100644
--- a/libseahorse/seahorse-search-provider.c
+++ b/libseahorse/seahorse-search-provider.c
@@ -286,7 +286,7 @@ handle_activate_result (SeahorseShellSearchProvider2 *skeleton,
window = GTK_WINDOW (seahorse_widget_get_widget (key_manager, key_manager->name));
gtk_window_present_with_time (window, timestamp);
- seahorse_viewable_show_viewer (SEAHORSE_VIEWABLE (object), window);
+ seahorse_viewable_view (object, window);
seahorse_shell_search_provider2_complete_activate_result (skeleton,
invocation);
diff --git a/pgp/seahorse-pgp-dialogs.h b/pgp/seahorse-pgp-dialogs.h
index 498c5c7..33e38e7 100644
--- a/pgp/seahorse-pgp-dialogs.h
+++ b/pgp/seahorse-pgp-dialogs.h
@@ -33,7 +33,7 @@
SeahorsePgpKey* seahorse_signer_get (GtkWindow *parent);
-void seahorse_pgp_key_properties_show (SeahorsePgpKey *pkey,
+GtkWindow * seahorse_pgp_key_properties_show (SeahorsePgpKey *pkey,
GtkWindow *parent);
#endif /* __SEAHORSE_PGP_DIALOGS_H__ */
diff --git a/pgp/seahorse-pgp-key-properties.c b/pgp/seahorse-pgp-key-properties.c
index 8c28486..f8764f7 100644
--- a/pgp/seahorse-pgp-key-properties.c
+++ b/pgp/seahorse-pgp-key-properties.c
@@ -1959,7 +1959,7 @@ setup_private_properties (SeahorsePgpKey *pkey, GtkWindow *parent)
return swidget;
}
-void
+GtkWindow *
seahorse_pgp_key_properties_show (SeahorsePgpKey *pkey, GtkWindow *parent)
{
SeahorseWidget *swidget;
@@ -1974,6 +1974,10 @@ seahorse_pgp_key_properties_show (SeahorsePgpKey *pkey, GtkWindow *parent)
swidget = setup_public_properties (pkey, parent);
else
swidget = setup_private_properties (pkey, parent);
- if (swidget)
+ if (swidget) {
seahorse_widget_show (swidget);
+ return g_object_ref (seahorse_widget_get_toplevel (swidget));
+ }
+
+ return NULL;
}
diff --git a/pgp/seahorse-pgp-key.c b/pgp/seahorse-pgp-key.c
index 0f3478e..1060148 100644
--- a/pgp/seahorse-pgp-key.c
+++ b/pgp/seahorse-pgp-key.c
@@ -482,17 +482,17 @@ seahorse_pgp_key_class_init (SeahorsePgpKeyClass *klass)
"", G_PARAM_READABLE));
}
-static void
-seahorse_pgp_key_show_viewer (SeahorseViewable *viewable,
- GtkWindow *parent)
+static GtkWindow *
+seahorse_pgp_key_create_viewer (SeahorseViewable *viewable,
+ GtkWindow *parent)
{
- seahorse_pgp_key_properties_show (SEAHORSE_PGP_KEY (viewable), parent);
+ return seahorse_pgp_key_properties_show (SEAHORSE_PGP_KEY (viewable), parent);
}
static void
seahorse_pgp_key_viewable_iface (SeahorseViewableIface *iface)
{
- iface->show_viewer = seahorse_pgp_key_show_viewer;
+ iface->create_viewer = seahorse_pgp_key_create_viewer;
}
gchar*
diff --git a/pkcs11/seahorse-certificate.c b/pkcs11/seahorse-certificate.c
index 722d831..99abec5 100644
--- a/pkcs11/seahorse-certificate.c
+++ b/pkcs11/seahorse-certificate.c
@@ -412,18 +412,19 @@ seahorse_certificate_deletable_iface (SeahorseDeletableIface *iface)
iface->get_deletable = seahorse_certificate_get_deletable;
}
-static void
-seahorse_certificate_show_viewer (SeahorseViewable *viewable,
- GtkWindow *parent)
+static GtkWindow *
+seahorse_certificate_create_viewer (SeahorseViewable *viewable,
+ GtkWindow *parent)
{
- GtkWindow *viewer = seahorse_pkcs11_properties_show (G_OBJECT (viewable), parent);
+ GtkWindow *viewer = seahorse_pkcs11_properties_new (G_OBJECT (viewable), parent);
gtk_widget_show (GTK_WIDGET (viewer));
+ return viewer;
}
static void
seahorse_certificate_viewable_iface (SeahorseViewableIface *iface)
{
- iface->show_viewer = seahorse_certificate_show_viewer;
+ iface->create_viewer = seahorse_certificate_create_viewer;
}
GIcon *
diff --git a/pkcs11/seahorse-pkcs11-properties.c b/pkcs11/seahorse-pkcs11-properties.c
index f5c6811..e60b539 100644
--- a/pkcs11/seahorse-pkcs11-properties.c
+++ b/pkcs11/seahorse-pkcs11-properties.c
@@ -73,8 +73,6 @@ enum {
PROP_OBJECT
};
-static GQuark QUARK_WINDOW = 0;
-
G_DEFINE_TYPE (SeahorsePkcs11Properties, seahorse_pkcs11_properties, GTK_TYPE_WINDOW);
static void
@@ -338,7 +336,6 @@ seahorse_pkcs11_properties_constructed (GObject *obj)
gtk_ui_manager_ensure_update (self->ui_manager);
g_return_if_fail (self->object != NULL);
- g_object_set_qdata (self->object, QUARK_WINDOW, self);
g_signal_connect_object (self->object, "notify::label", G_CALLBACK (on_object_label_changed),
self, G_CONNECT_AFTER);
@@ -422,12 +419,6 @@ seahorse_pkcs11_properties_finalize (GObject *obj)
g_clear_object (&self->request_key);
g_object_unref (self->actions);
g_object_unref (self->ui_manager);
-
- if (self->object) {
- if (g_object_get_qdata (self->object, QUARK_WINDOW) == self)
- g_object_set_qdata (self->object, QUARK_WINDOW, NULL);
- }
-
g_clear_object (&self->object);
G_OBJECT_CLASS (seahorse_pkcs11_properties_parent_class)->finalize (obj);
@@ -449,8 +440,6 @@ seahorse_pkcs11_properties_class_init (SeahorsePkcs11PropertiesClass *klass)
g_object_class_install_property (gobject_class, PROP_OBJECT,
g_param_spec_object ("object", "Object", "Certificate or key to display", G_TYPE_OBJECT,
G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- QUARK_WINDOW = g_quark_from_static_string ("seahorse-pkcs11-properties-window");
}
/* -----------------------------------------------------------------------------
@@ -458,22 +447,9 @@ seahorse_pkcs11_properties_class_init (SeahorsePkcs11PropertiesClass *klass)
*/
GtkWindow *
-seahorse_pkcs11_properties_show (GObject *object,
- GtkWindow *parent)
+seahorse_pkcs11_properties_new (GObject *object,
+ GtkWindow *parent)
{
- GObject *previous;
- GtkWindow *window;
-
- /* Try to show an already present window */
- previous = g_object_get_qdata (object, QUARK_WINDOW);
- if (GTK_IS_WINDOW (previous)) {
- window = GTK_WINDOW (previous);
- if (gtk_widget_get_visible (GTK_WIDGET (window))) {
- gtk_window_present (window);
- return window;
- }
- }
-
return g_object_new (SEAHORSE_TYPE_PKCS11_PROPERTIES,
"object", object,
"transient-for", parent,
diff --git a/pkcs11/seahorse-pkcs11-properties.h b/pkcs11/seahorse-pkcs11-properties.h
index da93b39..a2a2d8c 100644
--- a/pkcs11/seahorse-pkcs11-properties.h
+++ b/pkcs11/seahorse-pkcs11-properties.h
@@ -36,7 +36,7 @@ typedef struct _SeahorsePkcs11Properties SeahorsePkcs11Properties;
GType seahorse_pkcs11_properties_get_type (void);
-GtkWindow * seahorse_pkcs11_properties_show (GObject *object,
+GtkWindow * seahorse_pkcs11_properties_new (GObject *object,
GtkWindow *parent);
GObject * seahorse_pkcs11_properties_get_object (SeahorsePkcs11Properties *self);
diff --git a/pkcs11/seahorse-private-key.c b/pkcs11/seahorse-private-key.c
index 7f1735b..becfcbd 100644
--- a/pkcs11/seahorse-private-key.c
+++ b/pkcs11/seahorse-private-key.c
@@ -337,18 +337,19 @@ seahorse_private_key_exportable_iface (SeahorseExportableIface *iface)
iface->get_exportable = seahorse_private_key_get_exportable;
}
-static void
-seahorse_private_key_show_viewer (SeahorseViewable *viewable,
+static GtkWindow *
+seahorse_private_key_create_viewer (SeahorseViewable *viewable,
GtkWindow *parent)
{
- GtkWindow *viewer = seahorse_pkcs11_properties_show (G_OBJECT (viewable), parent);
+ GtkWindow *viewer = seahorse_pkcs11_properties_new (G_OBJECT (viewable), parent);
gtk_widget_show (GTK_WIDGET (viewer));
+ return viewer;
}
static void
seahorse_private_key_viewable_iface (SeahorseViewableIface *iface)
{
- iface->show_viewer = seahorse_private_key_show_viewer;
+ iface->create_viewer = seahorse_private_key_create_viewer;
}
SeahorseCertificate *
diff --git a/src/seahorse-sidebar.c b/src/seahorse-sidebar.c
index a2bbcb5..b7fcb78 100644
--- a/src/seahorse-sidebar.c
+++ b/src/seahorse-sidebar.c
@@ -904,9 +904,8 @@ static void
on_place_properties (GtkMenuItem *item,
gpointer user_data)
{
- SeahorseViewable *viewable = SEAHORSE_VIEWABLE (user_data);
GtkWidget *window = gtk_widget_get_toplevel (GTK_WIDGET (item));
- seahorse_viewable_show_viewer (viewable, GTK_WINDOW (window));
+ seahorse_viewable_view (user_data, GTK_WINDOW (window));
}
static void
diff --git a/ssh/seahorse-ssh-dialogs.h b/ssh/seahorse-ssh-dialogs.h
index e315813..8fcd02a 100644
--- a/ssh/seahorse-ssh-dialogs.h
+++ b/ssh/seahorse-ssh-dialogs.h
@@ -9,7 +9,7 @@
void seahorse_ssh_upload_prompt (GList *keys,
GtkWindow *parent);
-void seahorse_ssh_key_properties_show (SeahorseSSHKey *skey,
+GtkWindow * seahorse_ssh_key_properties_show (SeahorseSSHKey *skey,
GtkWindow *parent);
void seahorse_ssh_generate_show (SeahorseSSHSource *sksrc,
diff --git a/ssh/seahorse-ssh-key-properties.c b/ssh/seahorse-ssh-key-properties.c
index 2dfecc5..329cd57 100644
--- a/ssh/seahorse-ssh-key-properties.c
+++ b/ssh/seahorse-ssh-key-properties.c
@@ -334,7 +334,7 @@ properties_response (GtkDialog *dialog, int response, SeahorseWidget *swidget)
seahorse_widget_destroy (swidget);
}
-void
+GtkWindow *
seahorse_ssh_key_properties_show (SeahorseSSHKey *skey,
GtkWindow *parent)
{
@@ -346,7 +346,7 @@ seahorse_ssh_key_properties_show (SeahorseSSHKey *skey,
/* This happens if the window is already open */
if (swidget == NULL)
- return;
+ return NULL;
/*
* The signals don't need to keep getting connected. Everytime a key changes the
@@ -371,4 +371,5 @@ seahorse_ssh_key_properties_show (SeahorseSSHKey *skey,
seahorse_bind_objects (NULL, skey, (SeahorseTransfer)key_notify, swidget);
seahorse_widget_show (swidget);
+ return g_object_ref (seahorse_widget_get_toplevel (swidget));
}
diff --git a/ssh/seahorse-ssh-key.c b/ssh/seahorse-ssh-key.c
index e32c2e3..81bbd97 100644
--- a/ssh/seahorse-ssh-key.c
+++ b/ssh/seahorse-ssh-key.c
@@ -350,17 +350,17 @@ seahorse_ssh_key_deletable_iface (SeahorseDeletableIface *iface)
iface->get_deletable = seahorse_ssh_key_get_deletable;
}
-static void
-seahorse_ssh_key_show_viewer (SeahorseViewable *viewable,
- GtkWindow *parent)
+static GtkWindow *
+seahorse_ssh_key_create_viewer (SeahorseViewable *viewable,
+ GtkWindow *parent)
{
- seahorse_ssh_key_properties_show (SEAHORSE_SSH_KEY (viewable), parent);
+ return seahorse_ssh_key_properties_show (SEAHORSE_SSH_KEY (viewable), parent);
}
static void
seahorse_ssh_key_viewable_iface (SeahorseViewableIface *iface)
{
- iface->show_viewer = seahorse_ssh_key_show_viewer;
+ iface->create_viewer = seahorse_ssh_key_create_viewer;
}
SeahorseSSHKey*
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]