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
This commit is contained in:
Thomas Thurman 2008-09-01 03:10:31 +00:00 committed by Thomas James Alexander Thurman
parent 2095cce3ab
commit 8bd3cdff14
2 changed files with 33 additions and 3 deletions

View File

@ -1,3 +1,8 @@
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> 2008-09-01 Thomas Thurman <tthurman@gnome.org>
Add new move_to_center keybinding, requested by Khanh-Dang Nguyen Add new move_to_center keybinding, requested by Khanh-Dang Nguyen

View File

@ -35,6 +35,9 @@ static void set_active_space_hint (MetaScreen *screen);
static void focus_ancestor_or_mru_window (MetaWorkspace *workspace, static void focus_ancestor_or_mru_window (MetaWorkspace *workspace,
MetaWindow *not_this_one, MetaWindow *not_this_one,
guint32 timestamp); guint32 timestamp);
static void free_this (gpointer candidate,
gpointer dummy);
static void workspace_free_struts (MetaWorkspace *workspace);
static void static void
maybe_add_to_list (MetaScreen *screen, MetaWindow *window, gpointer data) maybe_add_to_list (MetaScreen *screen, MetaWindow *window, gpointer data)
@ -79,6 +82,29 @@ meta_workspace_new (MetaScreen *screen)
return workspace; 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 void
meta_workspace_free (MetaWorkspace *workspace) meta_workspace_free (MetaWorkspace *workspace)
{ {
@ -127,7 +153,7 @@ meta_workspace_free (MetaWorkspace *workspace)
if (!workspace->work_areas_invalid) if (!workspace->work_areas_invalid)
{ {
g_slist_free (workspace->all_struts); workspace_free_struts (workspace);
for (i = 0; i < screen->n_xinerama_infos; i++) for (i = 0; i < screen->n_xinerama_infos; i++)
meta_rectangle_free_list_and_elements (workspace->xinerama_region[i]); meta_rectangle_free_list_and_elements (workspace->xinerama_region[i]);
g_free (workspace->xinerama_region); g_free (workspace->xinerama_region);
@ -457,8 +483,7 @@ meta_workspace_invalidate_work_area (MetaWorkspace *workspace)
g_free (workspace->work_area_xinerama); g_free (workspace->work_area_xinerama);
workspace->work_area_xinerama = NULL; workspace->work_area_xinerama = NULL;
g_slist_free (workspace->all_struts); workspace_free_struts (workspace);
workspace->all_struts = NULL;
for (i = 0; i < workspace->screen->n_xinerama_infos; i++) for (i = 0; i < workspace->screen->n_xinerama_infos; i++)
meta_rectangle_free_list_and_elements (workspace->xinerama_region[i]); meta_rectangle_free_list_and_elements (workspace->xinerama_region[i]);