diff options
author | Thomas Thurman <thomas thurman org uk> | 2006-02-11 05:06:08 +0000 |
---|---|---|
committer | Elijah Newren <newren@src.gnome.org> | 2006-02-11 05:06:08 +0000 |
commit | 7aebefad3cd8e08bba7d498d316679054b4ad2c3 (patch) | |
tree | 12a8e0c96213bfee5b3e924a9148ae72e6b595b8 | |
parent | 4b6a87acb543168fa764ff8f4d5591a58cc3145a (diff) | |
download | metacity-7aebefad3cd8e08bba7d498d316679054b4ad2c3.tar.gz |
Avoid a memory leak when checking which workspace(s) a window is on. Fixes
2006-02-10 Thomas Thurman <thomas thurman org uk>
Avoid a memory leak when checking which workspace(s) a window is
on. Fixes #322059.
* src/workspace.h (struct MetaWorkspace):
* src/workspace.c (meta_workspace_new, meta_workspace_free):
added list_containing_self member to MetaWorkspace
* src/window.c (meta_window_get_workspaces): use
window->workspace->list_containing_self instead of allocating (and
leaking) such a list on the fly.
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | src/window.c | 2 | ||||
-rw-r--r-- | src/workspace.c | 2 | ||||
-rw-r--r-- | src/workspace.h | 2 |
4 files changed, 18 insertions, 1 deletions
@@ -1,3 +1,16 @@ +2006-02-10 Thomas Thurman <thomas thurman org uk> + + Avoid a memory leak when checking which workspace(s) a window is + on. Fixes #322059. + + * src/workspace.h (struct MetaWorkspace): + * src/workspace.c (meta_workspace_new, meta_workspace_free): + added list_containing_self member to MetaWorkspace + + * src/window.c (meta_window_get_workspaces): use + window->workspace->list_containing_self instead of allocating (and + leaking) such a list on the fly. + 2006-02-09 Thomas Thurman <thomas thurman org uk> * src/testboxes.c (test_regions_okay, test_clamping_to_region): diff --git a/src/window.c b/src/window.c index 46a6e7c5..82422fc4 100644 --- a/src/window.c +++ b/src/window.c @@ -5677,7 +5677,7 @@ meta_window_get_workspaces (MetaWindow *window) if (window->on_all_workspaces) return window->screen->workspaces; else - return g_list_prepend (NULL, window->workspace); + return window->workspace->list_containing_self; } static void diff --git a/src/workspace.c b/src/workspace.c index ce22c1fd..217df4e6 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -68,6 +68,7 @@ meta_workspace_new (MetaScreen *screen) workspace->xinerama_region = NULL; workspace->screen_edges = NULL; workspace->xinerama_edges = NULL; + workspace->list_containing_self = g_list_prepend (NULL, workspace); workspace->all_struts = NULL; @@ -114,6 +115,7 @@ meta_workspace_free (MetaWorkspace *workspace) g_list_free (workspace->mru_list); g_slist_free (workspace->all_struts); + g_list_free (workspace->list_containing_self); for (i = 0; i < screen->n_xinerama_infos; i++) meta_rectangle_free_list_and_elements (workspace->xinerama_region[i]); diff --git a/src/workspace.h b/src/workspace.h index 3c3e8d81..73f71010 100644 --- a/src/workspace.h +++ b/src/workspace.h @@ -43,6 +43,8 @@ struct _MetaWorkspace GList *windows; GList *mru_list; + GList *list_containing_self; + MetaRectangle work_area_screen; MetaRectangle *work_area_xinerama; GList *screen_region; |