diff options
author | Elijah Newren <newren@gmail.com> | 2005-11-04 17:25:42 +0000 |
---|---|---|
committer | Elijah Newren <newren@src.gnome.org> | 2005-11-04 17:25:42 +0000 |
commit | ab85662839bc288e8736dbac616da1a30880ac7f (patch) | |
tree | 260d18b057b820409df62aad0ff18b2fdf4f1c6d | |
parent | 50ac0d05888f034b54b19932e627d567e5384c17 (diff) | |
download | metacity-ab85662839bc288e8736dbac616da1a30880ac7f.tar.gz |
Cache screen and xinerama edges for edge resistance/snapping at the same
2005-11-04 Elijah Newren <newren@gmail.com>
Cache screen and xinerama edges for edge resistance/snapping at
the same time the workarea and on-screen/on-xinerama areas are
computed.
* src/workspace.[ch] (struct MetaWorkspace, meta_workspace_new,
meta_workspace_free, meta_workspace_invalidate_work_area,
ensure_work_areas_validated):
add new screen_edges and xinerama_edges data fields to the
workspace
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | src/workspace.c | 25 | ||||
-rw-r--r-- | src/workspace.h | 2 |
3 files changed, 39 insertions, 0 deletions
@@ -1,3 +1,15 @@ +2005-11-04 Elijah Newren <newren@gmail.com> + + Cache screen and xinerama edges for edge resistance/snapping at + the same time the workarea and on-screen/on-xinerama areas are + computed. + + * src/workspace.[ch] (struct MetaWorkspace, meta_workspace_new, + meta_workspace_free, meta_workspace_invalidate_work_area, + ensure_work_areas_validated): + add new screen_edges and xinerama_edges data fields to the + workspace + 2005-11-03 Elijah Newren <newren@gmail.com> Add routines to find all the edges between adjacent xineramas, diff --git a/src/workspace.c b/src/workspace.c index 6a9c40d4..73d606f7 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -65,6 +65,8 @@ meta_workspace_new (MetaScreen *screen) workspace->screen_region = NULL; workspace->xinerama_region = NULL; + workspace->screen_edges = NULL; + workspace->xinerama_edges = NULL; workspace->all_struts = NULL; @@ -116,6 +118,8 @@ meta_workspace_free (MetaWorkspace *workspace) meta_rectangle_free_list_and_elements (workspace->xinerama_region[i]); g_free (workspace->xinerama_region); meta_rectangle_free_list_and_elements (workspace->screen_region); + meta_rectangle_free_list_and_elements (workspace->screen_edges); + meta_rectangle_free_list_and_elements (workspace->xinerama_edges); g_free (workspace); @@ -455,8 +459,12 @@ meta_workspace_invalidate_work_area (MetaWorkspace *workspace) meta_rectangle_free_list_and_elements (workspace->xinerama_region[i]); g_free (workspace->xinerama_region); meta_rectangle_free_list_and_elements (workspace->screen_region); + meta_rectangle_free_list_and_elements (workspace->screen_edges); + meta_rectangle_free_list_and_elements (workspace->xinerama_edges); workspace->xinerama_region = NULL; workspace->screen_region = NULL; + workspace->screen_edges = NULL; + workspace->xinerama_edges = NULL; workspace->work_areas_invalid = TRUE; @@ -498,6 +506,8 @@ ensure_work_areas_validated (MetaWorkspace *workspace) g_assert (workspace->all_struts == NULL); g_assert (workspace->xinerama_region == NULL); g_assert (workspace->screen_region == NULL); + g_assert (workspace->screen_edges == NULL); + g_assert (workspace->xinerama_edges == NULL); windows = meta_workspace_list_windows (workspace); @@ -707,6 +717,21 @@ ensure_work_areas_validated (MetaWorkspace *workspace) workspace->screen_region = g_list_prepend (NULL, nonempty_region); } + /* Now cache the screen and xinerama edges for edge resistance and snapping */ + g_assert (workspace->screen_edges == NULL); + g_assert (workspace->xinerama_edges == NULL); + workspace->screen_edges = + meta_rectangle_find_onscreen_edges (&workspace->screen->rect, + workspace->all_struts); + tmp = NULL; + for (i = 0; i < workspace->screen->n_xinerama_infos; i++) + tmp = g_list_prepend (tmp, &workspace->screen->xinerama_infos[i].rect); + workspace->xinerama_edges = + meta_rectangle_find_nonintersected_xinerama_edges (tmp, + workspace->all_struts); + g_list_free (tmp); + + /* We're all done, YAAY! Record that everything has been validated. */ workspace->work_areas_invalid = FALSE; diff --git a/src/workspace.h b/src/workspace.h index 8dc38ad6..b07f31b3 100644 --- a/src/workspace.h +++ b/src/workspace.h @@ -46,6 +46,8 @@ struct _MetaWorkspace MetaRectangle *work_area_xinerama; GList *screen_region; GList **xinerama_region; + GList *screen_edges; + GList *xinerama_edges; GSList *all_struts; guint work_areas_invalid : 1; |