summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Thurman <thomas thurman org uk>2006-02-11 05:06:08 +0000
committerElijah Newren <newren@src.gnome.org>2006-02-11 05:06:08 +0000
commit7aebefad3cd8e08bba7d498d316679054b4ad2c3 (patch)
tree12a8e0c96213bfee5b3e924a9148ae72e6b595b8
parent4b6a87acb543168fa764ff8f4d5591a58cc3145a (diff)
downloadmetacity-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--ChangeLog13
-rw-r--r--src/window.c2
-rw-r--r--src/workspace.c2
-rw-r--r--src/workspace.h2
4 files changed, 18 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index d84dd8ff..8061a6a6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;