X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=76ad1f274803e65f69997a01efd9a14341bc8098;hb=24f6b59fe36e06d06bd1139a99e08cb6e06d6682;hp=9b1a7724ef85ca730bb475d82f8ba829d015bf53;hpb=3c688bc4a75436a457d3ce693eda6bd6b329412f;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index 9b1a7724..76ad1f27 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -717,8 +717,7 @@ void screen_set_desktop(guint num, gboolean dofocus) for (it = g_list_last(stacking_list); it; it = g_list_previous(it)) { if (WINDOW_IS_CLIENT(it->data)) { ObClient *c = it->data; - client_hide(c); - if (c == focus_client) { + if (client_hide(c) && c == focus_client) { /* c was focused and we didn't do fallback clearly so make sure openbox doesnt still consider the window focused. this happens when using NextWindow with allDesktops, since @@ -1312,10 +1311,9 @@ typedef struct { void screen_update_areas(void) { - guint j; + guint i; gulong *dims; GList *it; - GSList *sit; g_free(monitor_area); extensions_xinerama_screens(&monitor_area, &screen_num_monitors); @@ -1330,8 +1328,6 @@ void screen_update_areas(void) config_margins.right_start = RECT_TOP(monitor_area[screen_num_monitors]); config_margins.right_end = RECT_BOTTOM(monitor_area[screen_num_monitors]); - dims = g_new(gulong, 4 * screen_num_desktops); - RESET_STRUT_LIST(struts_left); RESET_STRUT_LIST(struts_top); RESET_STRUT_LIST(struts_right); @@ -1376,48 +1372,14 @@ void screen_update_areas(void) VALIDATE_STRUTS(struts_bottom, bottom, monitor_area[screen_num_monitors].height / 2); - /* set up the work area to be full screen across all monitors */ - for (j = 0; j < screen_num_desktops; ++j) { - dims[j*4 + 0] = - monitor_area[screen_num_monitors].x; - dims[j*4 + 1] = - monitor_area[screen_num_monitors].y; - dims[j*4 + 2] = - monitor_area[screen_num_monitors].width; - dims[j*4 + 3] = - monitor_area[screen_num_monitors].height; - } - - /* calculate the work area from the struts */ - for (j = 0; j < screen_num_desktops; ++j) { - gint l = 0, r = 0, t = 0, b = 0; - - for (sit = struts_left; sit; sit = g_slist_next(sit)) { - ObScreenStrut *s = sit->data; - if (s->desktop == j || s->desktop == DESKTOP_ALL) - l = MAX(l, s->strut->left); - } - for (sit = struts_top; sit; sit = g_slist_next(sit)) { - ObScreenStrut *s = sit->data; - if (s->desktop == j || s->desktop == DESKTOP_ALL) - t = MAX(t, s->strut->top); - } - for (sit = struts_right; sit; sit = g_slist_next(sit)) { - ObScreenStrut *s = sit->data; - if (s->desktop == j || s->desktop == DESKTOP_ALL) - r = MAX(r, s->strut->right); - } - for (sit = struts_bottom; sit; sit = g_slist_next(sit)) { - ObScreenStrut *s = sit->data; - if (s->desktop == j || s->desktop == DESKTOP_ALL) - b = MAX(b, s->strut->bottom); - } - - /* based on these margins, set the work area for the desktop */ - dims[j*4 + 0] += l; - dims[j*4 + 1] += t; - dims[j*4 + 2] -= l + r; - dims[j*4 + 3] -= t + b; + dims = g_new(gulong, 4 * screen_num_desktops); + for (i = 0; i < screen_num_desktops; ++i) { + Rect *area = screen_area(i, SCREEN_AREA_ALL_MONITORS, NULL); + dims[i*4+0] = area->x; + dims[i*4+1] = area->y; + dims[i*4+2] = area->width; + dims[i*4+3] = area->height; + g_free(area); } /* set the legacy workarea hint to the union of all the monitors */