gnome-session r4843 - in branches/dbus_based: . gnome-session
- From: mccann svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-session r4843 - in branches/dbus_based: . gnome-session
- Date: Fri, 25 Jul 2008 02:46:24 +0000 (UTC)
Author: mccann
Date: Fri Jul 25 02:46:24 2008
New Revision: 4843
URL: http://svn.gnome.org/viewvc/gnome-session?rev=4843&view=rev
Log:
2008-07-24 William Jon McCann <jmccann redhat com>
* gnome-session/gsm-client-store.c (gsm_client_store_remove),
(foreach_remove_wrapper), (gsm_client_store_foreach_remove),
(_remove_all), (gsm_client_store_clear):
* gnome-session/gsm-inhibitor-store.c (gsm_inhibitor_store_remove):
Make sure client-removed signals are emitted.
Modified:
branches/dbus_based/ChangeLog
branches/dbus_based/gnome-session/gsm-client-store.c
branches/dbus_based/gnome-session/gsm-inhibitor-store.c
Modified: branches/dbus_based/gnome-session/gsm-client-store.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-client-store.c (original)
+++ branches/dbus_based/gnome-session/gsm-client-store.c Fri Jul 25 02:46:24 2008
@@ -77,35 +77,32 @@
return g_hash_table_size (store->priv->clients);
}
-void
-gsm_client_store_clear (GsmClientStore *store)
-{
- g_return_if_fail (store != NULL);
- g_debug ("GsmClientStore: Clearing client store");
- g_hash_table_remove_all (store->priv->clients);
-}
-
-static gboolean
-remove_client (char *id,
- GsmClient *client,
- GsmClient *client_to_remove)
-{
- if (client == client_to_remove) {
- return TRUE;
- }
- return FALSE;
-}
-
gboolean
gsm_client_store_remove (GsmClientStore *store,
GsmClient *client)
{
+ GsmClient *found;
+ gboolean removed;
+ const char *id;
+
g_return_val_if_fail (store != NULL, FALSE);
- gsm_client_store_foreach_remove (store,
- (GsmClientStoreFunc)remove_client,
- client);
- return FALSE;
+ id = gsm_client_get_id (client);
+ if (id == NULL) {
+ return FALSE;
+ }
+
+ found = g_hash_table_lookup (store->priv->clients, id);
+ if (found == NULL) {
+ return FALSE;
+ }
+
+ g_signal_emit (store, signals [CLIENT_REMOVED], 0, id);
+
+ removed = g_hash_table_remove (store->priv->clients, id);
+ g_assert (removed);
+
+ return TRUE;
}
void
@@ -152,23 +149,71 @@
return client;
}
+
+typedef struct
+{
+ GsmClientStoreFunc func;
+ gpointer user_data;
+ GsmClientStore *store;
+} WrapperData;
+
+static gboolean
+foreach_remove_wrapper (const char *id,
+ GsmClient *client,
+ WrapperData *data)
+{
+ gboolean res;
+
+ res = (data->func) (id, client, data->user_data);
+ if (res) {
+ g_signal_emit (data->store, signals [CLIENT_REMOVED], 0, gsm_client_get_id (client));
+ }
+
+ return res;
+}
+
guint
gsm_client_store_foreach_remove (GsmClientStore *store,
GsmClientStoreFunc func,
gpointer user_data)
{
- guint ret;
+ guint ret;
+ WrapperData data;
g_return_val_if_fail (store != NULL, 0);
g_return_val_if_fail (func != NULL, 0);
+ data.store = store;
+ data.user_data = user_data;
+ data.func = func;
+
ret = g_hash_table_foreach_remove (store->priv->clients,
- (GHRFunc)func,
- user_data);
+ (GHRFunc)foreach_remove_wrapper,
+ &data);
return ret;
}
+static gboolean
+_remove_all (guint *cookie,
+ GsmClient *client,
+ gpointer data)
+{
+ return TRUE;
+}
+
+void
+gsm_client_store_clear (GsmClientStore *store)
+{
+ g_return_if_fail (store != NULL);
+
+ g_debug ("GsmClientStore: Clearing client store");
+
+ gsm_client_store_foreach_remove (store,
+ _remove_all,
+ NULL);
+}
+
gboolean
gsm_client_store_add (GsmClientStore *store,
GsmClient *client)
Modified: branches/dbus_based/gnome-session/gsm-inhibitor-store.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-inhibitor-store.c (original)
+++ branches/dbus_based/gnome-session/gsm-inhibitor-store.c Fri Jul 25 02:46:24 2008
@@ -98,7 +98,7 @@
GUINT_TO_POINTER (cookie));
g_assert (removed);
- return FALSE;
+ return TRUE;
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]