aboutsummaryrefslogtreecommitdiffstats
path: root/embed
diff options
context:
space:
mode:
Diffstat (limited to 'embed')
-rw-r--r--embed/ephy-password-manager.c31
-rw-r--r--embed/ephy-password-manager.h3
-rw-r--r--embed/mozilla/EphySingle.cpp10
3 files changed, 43 insertions, 1 deletions
diff --git a/embed/ephy-password-manager.c b/embed/ephy-password-manager.c
index b1b4a5b02..c0f1e7838 100644
--- a/embed/ephy-password-manager.c
+++ b/embed/ephy-password-manager.c
@@ -106,6 +106,8 @@ ephy_password_info_free (EphyPasswordInfo *info)
/* EphyPasswordManager */
+static void ephy_password_manager_base_init (gpointer g_class);
+
GType
ephy_password_manager_get_type (void)
{
@@ -116,7 +118,7 @@ ephy_password_manager_get_type (void)
static const GTypeInfo our_info =
{
sizeof (EphyPasswordManagerIface),
- NULL,
+ ephy_password_manager_base_init,
NULL,
};
@@ -129,6 +131,33 @@ ephy_password_manager_get_type (void)
return type;
}
+static void
+ephy_password_manager_base_init (gpointer g_class)
+{
+ static gboolean initialised = FALSE;
+
+ if (initialised == FALSE)
+ {
+ /**
+ * EphyPasswordManager::changed
+ * @manager: the #EphyPermissionManager
+ *
+ * The ::passwords-changed signal is emitted when the list of passwords
+ * has changed.
+ */
+ g_signal_new ("passwords-changed",
+ EPHY_TYPE_PASSWORD_MANAGER,
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (EphyPasswordManagerIface, changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+ initialised = TRUE;
+ }
+}
+
/**
* ephy_password_manager_add:
* @manager: the #EphyPasswordManager
diff --git a/embed/ephy-password-manager.h b/embed/ephy-password-manager.h
index 1d0d5c0f4..a9ae67f21 100644
--- a/embed/ephy-password-manager.h
+++ b/embed/ephy-password-manager.h
@@ -50,6 +50,9 @@ struct EphyPasswordManagerIface
{
GTypeInterface base_iface;
+ /* Signals */
+ void (* changed) (EphyPasswordManager *manager);
+
/* Methods */
void (* add) (EphyPasswordManager *manager,
EphyPasswordInfo *info);
diff --git a/embed/mozilla/EphySingle.cpp b/embed/mozilla/EphySingle.cpp
index e8f2d4ee4..bd7f0a718 100644
--- a/embed/mozilla/EphySingle.cpp
+++ b/embed/mozilla/EphySingle.cpp
@@ -60,6 +60,7 @@ EphySingle::Init (EphyEmbedSingle *aOwner)
rv |= mObserverService->AddObserver (this, "cookie-rejected", PR_FALSE);
rv |= mObserverService->AddObserver (this, "perm-changed", PR_FALSE);
rv |= mObserverService->AddObserver (this, "network:offline-status-changed", PR_FALSE);
+ rv |= mObserverService->AddObserver (this, "signonChanged", PR_FALSE);
NS_ENSURE_SUCCESS (rv, NS_ERROR_FAILURE);
mOwner = aOwner;
@@ -79,6 +80,7 @@ EphySingle::Detach ()
mObserverService->RemoveObserver (this, "cookie-changed");
mObserverService->RemoveObserver (this, "cookie-rejected");
mObserverService->RemoveObserver (this, "perm-changed");
+ mObserverService->RemoveObserver (this, "signonChanged");
mObserverService->RemoveObserver (this, "network:offline-status-changed");
}
@@ -215,6 +217,14 @@ NS_IMETHODIMP EphySingle::Observe(nsISupports *aSubject,
rv = NS_ERROR_FAILURE;
}
}
+ else if (strcmp (aTopic, "signonChanged") == 0)
+ {
+ /* aData can be PRUnichar[] "signons", "rejects", "nocaptures" and "nopreviews" */
+ if (aData[0] == 's')
+ {
+ g_signal_emit_by_name (mOwner, "passwords-changed");
+ }
+ }
else if (strcmp (aTopic, "network:offline-status-changed") == 0)
{
/* aData is either (PRUnichar[]) "offline" or "online" */