[gnome-shell] focus-manager: Make groups "refcounted"
- From: Florian MÃllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] focus-manager: Make groups "refcounted"
- Date: Fri, 14 Sep 2012 22:18:40 +0000 (UTC)
commit 94c1d5a18c60e8ef0827b98fee3084ce7eb671f3
Author: Florian MÃllner <fmuellner gnome org>
Date: Fri Sep 14 17:55:42 2012 +0200
focus-manager: Make groups "refcounted"
Rather than unconditionally removing a focus root in remove_group(),
decrement a counter that add_group() increments, and only actually
remove a focus root when the counter drops to 0.
https://bugzilla.gnome.org/show_bug.cgi?id=682243
src/st/st-focus-manager.c | 15 +++++++++++++--
1 files changed, 13 insertions(+), 2 deletions(-)
---
diff --git a/src/st/st-focus-manager.c b/src/st/st-focus-manager.c
index 85acf29..e12ec46 100644
--- a/src/st/st-focus-manager.c
+++ b/src/st/st-focus-manager.c
@@ -180,10 +180,13 @@ void
st_focus_manager_add_group (StFocusManager *manager,
StWidget *root)
{
+ gpointer count_p = g_hash_table_lookup (manager->priv->groups, root);
+ int count = count_p ? GPOINTER_TO_INT (count_p) : 0;
+
g_signal_connect (root, "destroy",
G_CALLBACK (remove_destroyed_group),
manager);
- g_hash_table_insert (manager->priv->groups, root, GINT_TO_POINTER (1));
+ g_hash_table_insert (manager->priv->groups, root, GINT_TO_POINTER (++count));
}
/**
@@ -197,7 +200,15 @@ void
st_focus_manager_remove_group (StFocusManager *manager,
StWidget *root)
{
- g_hash_table_remove (manager->priv->groups, root);
+ gpointer count_p = g_hash_table_lookup (manager->priv->groups, root);
+ int count = count_p ? GPOINTER_TO_INT (count_p) : 0;
+
+ if (count == 0)
+ return;
+ if (count == 1)
+ g_hash_table_remove (manager->priv->groups, root);
+ else
+ g_hash_table_insert (manager->priv->groups, root, GINT_TO_POINTER(--count));
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]