From f12980833b9463c1e0c1a005d026bdf6d869cad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberts=20Muktup=C4=81vels?= Date: Sat, 16 Jun 2018 20:46:55 +0300 Subject: window: use MetaEdge for struts --- src/core/boxes.c | 16 +++++------ src/core/testboxes.c | 77 ++++++++++++++++++++++++---------------------------- src/core/window.c | 29 ++++++++++++-------- src/core/workspace.c | 4 +-- src/include/boxes.h | 7 ----- src/include/common.h | 11 ++++---- 6 files changed, 68 insertions(+), 76 deletions(-) diff --git a/src/core/boxes.c b/src/core/boxes.c index 89408374..3e75042f 100644 --- a/src/core/boxes.c +++ b/src/core/boxes.c @@ -580,7 +580,7 @@ meta_rectangle_get_minimal_spanning_set_for_region ( for (strut_iter = all_struts; strut_iter; strut_iter = strut_iter->next) { GList *rect_iter; - MetaRectangle *strut_rect = &((MetaStrut*)strut_iter->data)->rect; + MetaRectangle *strut_rect = &((MetaEdge *)strut_iter->data)->rect; tmp_list = ret; ret = NULL; @@ -722,7 +722,7 @@ meta_rectangle_expand_to_avoiding_struts (MetaRectangle *rect, /* Run over all struts */ for (strut_iter = all_struts; strut_iter; strut_iter = strut_iter->next) { - MetaStrut *strut = (MetaStrut*) strut_iter->data; + MetaEdge *strut = (MetaEdge *) strut_iter->data; /* Skip struts that don't overlap */ if (!meta_rectangle_overlap (&strut->rect, rect)) @@ -730,13 +730,13 @@ meta_rectangle_expand_to_avoiding_struts (MetaRectangle *rect, if (direction == META_DIRECTION_HORIZONTAL) { - if (strut->side == META_SIDE_LEFT) + if (strut->side_type == META_SIDE_LEFT) { int offset = BOX_RIGHT(strut->rect) - BOX_LEFT(*rect); rect->x += offset; rect->width -= offset; } - else if (strut->side == META_SIDE_RIGHT) + else if (strut->side_type == META_SIDE_RIGHT) { int offset = BOX_RIGHT (*rect) - BOX_LEFT(strut->rect); rect->width -= offset; @@ -745,13 +745,13 @@ meta_rectangle_expand_to_avoiding_struts (MetaRectangle *rect, } else /* direction == META_DIRECTION_VERTICAL */ { - if (strut->side == META_SIDE_TOP) + if (strut->side_type == META_SIDE_TOP) { int offset = BOX_BOTTOM(strut->rect) - BOX_TOP(*rect); rect->y += offset; rect->height -= offset; } - else if (strut->side == META_SIDE_BOTTOM) + else if (strut->side_type == META_SIDE_BOTTOM) { int offset = BOX_BOTTOM(*rect) - BOX_TOP(strut->rect); rect->height -= offset; @@ -1264,7 +1264,7 @@ get_disjoint_strut_rect_list_in_region (const GSList *old_struts, strut_rects = NULL; while (old_struts) { - MetaRectangle *cur = &((MetaStrut*)old_struts->data)->rect; + MetaRectangle *cur = &((MetaEdge *)old_struts->data)->rect; MetaRectangle *copy = g_new (MetaRectangle, 1); *copy = *cur; if (meta_rectangle_intersect (copy, region, copy)) @@ -1864,7 +1864,7 @@ meta_rectangle_find_nonintersected_monitor_edges ( temp_rects = NULL; for (; all_struts; all_struts = all_struts->next) temp_rects = g_slist_prepend (temp_rects, - &((MetaStrut*)all_struts->data)->rect); + &((MetaEdge *)all_struts->data)->rect); ret = meta_rectangle_remove_intersections_with_boxes_from_edges (ret, temp_rects); g_slist_free (temp_rects); diff --git a/src/core/testboxes.c b/src/core/testboxes.c index 4558c1d2..415b4048 100644 --- a/src/core/testboxes.c +++ b/src/core/testboxes.c @@ -56,19 +56,12 @@ new_meta_rect (int x, int y, int width, int height) return temporary; } -static MetaStrut* -new_meta_strut (int x, int y, int width, int height, int side) -{ - MetaStrut* temporary; - temporary = g_new (MetaStrut, 1); - temporary->rect = meta_rect(x, y, width, height); - temporary->side = side; - - return temporary; -} - static MetaEdge* -new_screen_edge (int x, int y, int width, int height, int side_type) +new_screen_edge (int x, + int y, + int width, + int height, + MetaSide side_type) { MetaEdge* temporary; temporary = g_new (MetaEdge, 1); @@ -83,11 +76,11 @@ new_screen_edge (int x, int y, int width, int height, int side_type) } static MetaEdge * -new_monitor_edge (int x, - int y, - int width, - int height, - int side_type) +new_monitor_edge (int x, + int y, + int width, + int height, + MetaSide side_type) { MetaEdge* temporary; temporary = g_new (MetaEdge, 1); @@ -242,7 +235,7 @@ static GSList* get_strut_list (int which) { GSList *ans; - MetaDirection wc = 0; /* wc == who cares? ;-) */ + MetaSide wc = 0; /* wc == who cares? ;-) */ ans = NULL; @@ -252,32 +245,32 @@ get_strut_list (int which) case 0: break; case 1: - ans = g_slist_prepend (ans, new_meta_strut ( 0, 0, 1600, 20, wc)); - ans = g_slist_prepend (ans, new_meta_strut ( 400, 1160, 1600, 40, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 0, 0, 1600, 20, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 400, 1160, 1600, 40, wc)); break; case 2: - ans = g_slist_prepend (ans, new_meta_strut ( 0, 0, 1600, 20, wc)); - ans = g_slist_prepend (ans, new_meta_strut ( 800, 1100, 400, 100, wc)); - ans = g_slist_prepend (ans, new_meta_strut ( 300, 1150, 150, 50, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 0, 0, 1600, 20, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 800, 1100, 400, 100, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 300, 1150, 150, 50, wc)); break; case 3: - ans = g_slist_prepend (ans, new_meta_strut ( 0, 0, 1600, 20, wc)); - ans = g_slist_prepend (ans, new_meta_strut ( 800, 1100, 400, 100, wc)); - ans = g_slist_prepend (ans, new_meta_strut ( 300, 1150, 80, 50, wc)); - ans = g_slist_prepend (ans, new_meta_strut ( 700, 525, 200, 150, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 0, 0, 1600, 20, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 800, 1100, 400, 100, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 300, 1150, 80, 50, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 700, 525, 200, 150, wc)); break; case 4: - ans = g_slist_prepend (ans, new_meta_strut ( 0, 0, 800, 1200, wc)); - ans = g_slist_prepend (ans, new_meta_strut ( 800, 0, 1600, 20, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 0, 0, 800, 1200, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 800, 0, 1600, 20, wc)); break; case 5: - ans = g_slist_prepend (ans, new_meta_strut ( 800, 0, 1600, 20, wc)); - ans = g_slist_prepend (ans, new_meta_strut ( 0, 0, 800, 1200, wc)); - ans = g_slist_prepend (ans, new_meta_strut ( 800, 10, 800, 1200, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 800, 0, 1600, 20, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 0, 0, 800, 1200, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 800, 10, 800, 1200, wc)); break; case 6: - ans = g_slist_prepend (ans, new_meta_strut ( 0, 0, 1600, 40, wc)); - ans = g_slist_prepend (ans, new_meta_strut ( 0, 0, 1600, 20, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 0, 0, 1600, 40, wc)); + ans = g_slist_prepend (ans, new_screen_edge ( 0, 0, 1600, 20, wc)); break; default: break; @@ -1030,10 +1023,10 @@ test_find_onscreen_edges (void) GList* edges; GList* tmp; - int left = META_DIRECTION_LEFT; - int right = META_DIRECTION_RIGHT; - int top = META_DIRECTION_TOP; - int bottom = META_DIRECTION_BOTTOM; + int left = META_SIDE_LEFT; + int right = META_SIDE_RIGHT; + int top = META_SIDE_TOP; + int bottom = META_SIDE_BOTTOM; /*************************************************/ /* Make sure test region 0 has the correct edges */ @@ -1163,10 +1156,10 @@ test_find_nonintersected_monitor_edges (void) GList* edges; GList* tmp; - int left = META_DIRECTION_LEFT; - int right = META_DIRECTION_RIGHT; - int top = META_DIRECTION_TOP; - int bottom = META_DIRECTION_BOTTOM; + int left = META_SIDE_LEFT; + int right = META_SIDE_RIGHT; + int top = META_SIDE_TOP; + int bottom = META_SIDE_BOTTOM; /*************************************************************************/ /* Make sure test monitor set 0 for with region 0 has the correct edges */ diff --git a/src/core/window.c b/src/core/window.c index cc482026..fb4006b8 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -6389,7 +6389,7 @@ meta_window_update_struts (MetaWindow *window) int i; for (i=0; i<4; i++) { - MetaStrut *temp; + MetaEdge *temp; int thickness, strut_begin, strut_end; thickness = struts[i]; @@ -6398,10 +6398,13 @@ meta_window_update_struts (MetaWindow *window) strut_begin = struts[4+(i*2)]; strut_end = struts[4+(i*2)+1]; - temp = g_new (MetaStrut, 1); - temp->side = 1 << i; /* See MetaSide def. Matches nicely, eh? */ + temp = g_new (MetaEdge, 1); + + temp->side_type = i; + temp->edge_type = META_EDGE_SCREEN; + temp->rect = window->screen->rect; - switch (temp->side) + switch (temp->side_type) { case META_SIDE_RIGHT: temp->rect.x = BOX_RIGHT(temp->rect) - thickness; @@ -6460,17 +6463,20 @@ meta_window_update_struts (MetaWindow *window) int i; for (i=0; i<4; i++) { - MetaStrut *temp; + MetaEdge *temp; int thickness; thickness = struts[i]; if (thickness == 0) continue; - temp = g_new (MetaStrut, 1); - temp->side = 1 << i; + temp = g_new (MetaEdge, 1); + + temp->side_type = i; + temp->edge_type = META_EDGE_SCREEN; + temp->rect = window->screen->rect; - switch (temp->side) + switch (temp->side_type) { case META_SIDE_RIGHT: temp->rect.x = BOX_RIGHT(temp->rect) - thickness; @@ -6510,10 +6516,11 @@ meta_window_update_struts (MetaWindow *window) new_iter = new_struts; while (old_iter && new_iter) { - MetaStrut *old_strut = (MetaStrut*) old_iter->data; - MetaStrut *new_strut = (MetaStrut*) new_iter->data; + MetaEdge *old_strut = (MetaEdge *) old_iter->data; + MetaEdge *new_strut = (MetaEdge *) new_iter->data; - if (old_strut->side != new_strut->side || + if (old_strut->side_type != new_strut->side_type || + old_strut->edge_type != new_strut->edge_type || !meta_rectangle_equal (&old_strut->rect, &new_strut->rect)) break; diff --git a/src/core/workspace.c b/src/core/workspace.c index 166d717f..6c0fc1b8 100644 --- a/src/core/workspace.c +++ b/src/core/workspace.c @@ -624,8 +624,8 @@ ensure_work_areas_validated (MetaWorkspace *workspace) GSList *s_iter; for (s_iter = win->struts; s_iter != NULL; s_iter = s_iter->next) { - MetaStrut *cpy = g_new (MetaStrut, 1); - *cpy = *((MetaStrut *)s_iter->data); + MetaEdge *cpy = g_new (MetaEdge, 1); + *cpy = *((MetaEdge *)s_iter->data); workspace->all_struts = g_slist_prepend (workspace->all_struts, cpy); } diff --git a/src/include/boxes.h b/src/include/boxes.h index ddbc545c..553567f6 100644 --- a/src/include/boxes.h +++ b/src/include/boxes.h @@ -34,13 +34,6 @@ struct _MetaRectangle int height; }; -typedef struct _MetaStrut MetaStrut; -struct _MetaStrut -{ - MetaRectangle rect; - MetaSide side; -}; - #define BOX_LEFT(box) ((box).x) /* Leftmost pixel of rect */ #define BOX_RIGHT(box) ((box).x + (box).width) /* One pixel past right */ #define BOX_TOP(box) ((box).y) /* Topmost pixel of rect */ diff --git a/src/include/common.h b/src/include/common.h index 3af03351..223784d5 100644 --- a/src/include/common.h +++ b/src/include/common.h @@ -183,15 +183,14 @@ typedef enum /* Sometimes we want to talk about sides instead of directions; note * that the values must be as follows or meta_window_update_struts() - * won't work. Using these values also is a safety blanket since - * MetaDirection used to be used as a side. + * won't work. */ typedef enum { - META_SIDE_LEFT = META_DIRECTION_LEFT, - META_SIDE_RIGHT = META_DIRECTION_RIGHT, - META_SIDE_TOP = META_DIRECTION_TOP, - META_SIDE_BOTTOM = META_DIRECTION_BOTTOM + META_SIDE_LEFT = 0, + META_SIDE_RIGHT = 1, + META_SIDE_TOP = 2, + META_SIDE_BOTTOM = 3 } MetaSide; /* should investigate changing these to whatever most apps use */ -- cgit v1.2.1