diff options
author | Thomas Thurman <tthurman@gnome.org> | 2008-09-01 03:10:31 +0000 |
---|---|---|
committer | Thomas James Alexander Thurman <tthurman@src.gnome.org> | 2008-09-01 03:10:31 +0000 |
commit | 8bd3cdff14e08b5f231b874705a19149788f4b5e (patch) | |
tree | d50b1ae6a6f451a9ada0b407f70db29d532bee64 /src | |
parent | 2095cce3ab47c70672e953ceda7633cab264227c (diff) | |
download | metacity-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
Diffstat (limited to 'src')
-rw-r--r-- | src/core/workspace.c | 31 |
1 files changed, 28 insertions, 3 deletions
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]); |