summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Thurman <tthurman@gnome.org>2008-09-01 03:10:31 +0000
committerThomas James Alexander Thurman <tthurman@src.gnome.org>2008-09-01 03:10:31 +0000
commit8bd3cdff14e08b5f231b874705a19149788f4b5e (patch)
treed50b1ae6a6f451a9ada0b407f70db29d532bee64
parent2095cce3ab47c70672e953ceda7633cab264227c (diff)
downloadmetacity-8bd3cdff14e08b5f231b874705a19149788f4b5e.tar.gz
When a workspace's list of struts is freed, free the struts too. Closes
2008-09-01 Thomas Thurman <tthurman@gnome.org> * src/core/workspace.c: When a workspace's list of struts is freed, free the struts too. Closes #549952, and #468075. svn path=/trunk/; revision=3840
-rw-r--r--ChangeLog5
-rw-r--r--src/core/workspace.c31
2 files changed, 33 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index d173678f..3467d48e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2008-09-01 Thomas Thurman <tthurman@gnome.org>
+ * src/core/workspace.c: When a workspace's list of struts
+ is freed, free the struts too. Closes #549952, and #468075.
+
+2008-09-01 Thomas Thurman <tthurman@gnome.org>
+
Add new move_to_center keybinding, requested by Khanh-Dang Nguyen
Thu Lam; closes #549979.
diff --git a/src/core/workspace.c b/src/core/workspace.c
index 13731d57..ddb2541f 100644
--- a/src/core/workspace.c
+++ b/src/core/workspace.c
@@ -35,6 +35,9 @@ static void set_active_space_hint (MetaScreen *screen);
static void focus_ancestor_or_mru_window (MetaWorkspace *workspace,
MetaWindow *not_this_one,
guint32 timestamp);
+static void free_this (gpointer candidate,
+ gpointer dummy);
+static void workspace_free_struts (MetaWorkspace *workspace);
static void
maybe_add_to_list (MetaScreen *screen, MetaWindow *window, gpointer data)
@@ -79,6 +82,29 @@ meta_workspace_new (MetaScreen *screen)
return workspace;
}
+/** Foreach function for workspace_free_struts() */
+static void
+free_this (gpointer candidate, gpointer dummy)
+{
+ g_free (candidate);
+}
+
+/**
+ * Frees the struts list of a workspace.
+ *
+ * \param workspace The workspace.
+ */
+static void
+workspace_free_struts (MetaWorkspace *workspace)
+{
+ if (workspace->all_struts == NULL)
+ return;
+
+ g_slist_foreach (workspace->all_struts, free_this, NULL);
+ g_slist_free (workspace->all_struts);
+ workspace->all_struts = NULL;
+}
+
void
meta_workspace_free (MetaWorkspace *workspace)
{
@@ -127,7 +153,7 @@ meta_workspace_free (MetaWorkspace *workspace)
if (!workspace->work_areas_invalid)
{
- g_slist_free (workspace->all_struts);
+ workspace_free_struts (workspace);
for (i = 0; i < screen->n_xinerama_infos; i++)
meta_rectangle_free_list_and_elements (workspace->xinerama_region[i]);
g_free (workspace->xinerama_region);
@@ -457,8 +483,7 @@ meta_workspace_invalidate_work_area (MetaWorkspace *workspace)
g_free (workspace->work_area_xinerama);
workspace->work_area_xinerama = NULL;
- g_slist_free (workspace->all_struts);
- workspace->all_struts = NULL;
+ workspace_free_struts (workspace);
for (i = 0; i < workspace->screen->n_xinerama_infos; i++)
meta_rectangle_free_list_and_elements (workspace->xinerama_region[i]);