X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=4b91a6dd23f9812700adfe2152a55e4b968c34e1;hb=1c637efcbb26211f0274687beb8f462d5db36cd5;hp=a3589108300ca8940a0f428e6d3228f903dd2d4f;hpb=aeac3b735bf4caf7c014c58c1271b2cbe5aedd80;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index a3589108..4b91a6dd 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -36,6 +36,7 @@ #include "obrender/render.h" #include "gettext.h" #include "obt/display.h" +#include "obt/xqueue.h" #include "obt/prop.h" #include "obt/mainloop.h" @@ -116,7 +117,7 @@ static gboolean replace_wm(void) current_wm_sn_owner = None; } - timestamp = event_get_server_time(); + timestamp = event_time(); XSetSelectionOwner(obt_display, wm_sn_atom, screen_support_win, timestamp); @@ -129,14 +130,16 @@ static gboolean replace_wm(void) /* Wait for old window manager to go away */ if (current_wm_sn_owner) { - XEvent event; gulong wait = 0; const gulong timeout = G_USEC_PER_SEC * 15; /* wait for 15s max */ + ObtXQueueWindowType wt; + + wt.window = current_wm_sn_owner; + wt.type = DestroyNotify; while (wait < timeout) { - if (XCheckWindowEvent(obt_display, current_wm_sn_owner, - StructureNotifyMask, &event) && - event.type == DestroyNotify) + /* Checks the local queue and incoming events for this event */ + if (xqueue_exists_local(xqueue_match_window_type, &wt)) break; g_usleep(G_USEC_PER_SEC / 10); wait += G_USEC_PER_SEC / 10; @@ -731,8 +734,8 @@ void screen_set_desktop(guint num, gboolean dofocus) event_end_ignore_all_enters(ignore_start); - if (event_curtime != CurrentTime) - screen_desktop_user_time = event_curtime; + if (event_source_time() != CurrentTime) + screen_desktop_user_time = event_source_time(); } void screen_add_desktop(gboolean current) @@ -939,7 +942,7 @@ static gboolean hide_desktop_popup_func(gpointer data) void screen_show_desktop_popup(guint d, gboolean perm) { - Rect const *a; + const Rect *a; /* 0 means don't show the popup */ if (!config_desktop_popup_time) return; @@ -1371,7 +1374,14 @@ void screen_update_areas(void) { guint i; gulong *dims; - GList *it; + GList *it, *onscreen; + + /* collect the clients that are on screen */ + onscreen = NULL; + for (it = client_list; it; it = g_list_next(it)) { + if (client_monitor(it->data) != screen_num_monitors) + onscreen = g_list_prepend(onscreen, it->data); + } g_free(monitor_area); get_xinerama_screens(&monitor_area, &screen_num_monitors); @@ -1445,8 +1455,10 @@ void screen_update_areas(void) dims, 4 * screen_num_desktops); /* the area has changed, adjust all the windows if they need it */ - for (it = client_list; it; it = g_list_next(it)) + for (it = onscreen; it; it = g_list_next(it)) { + client_move_onscreen(it->data, FALSE); client_reconfigure(it->data, FALSE); + } g_free(dims); } @@ -1617,14 +1629,14 @@ Rect* screen_area(guint desktop, guint head, Rect *search) return a; } -guint screen_find_monitor(Rect *search) +guint screen_find_monitor(const Rect *search) { guint i; guint most = screen_num_monitors; guint mostv = 0; for (i = 0; i < screen_num_monitors; ++i) { - Rect const *area = screen_physical_area_monitor(i); + const Rect *area = screen_physical_area_monitor(i); if (RECT_INTERSECTS_RECT(*area, *search)) { Rect r; guint v; @@ -1641,12 +1653,12 @@ guint screen_find_monitor(Rect *search) return most; } -Rect const* screen_physical_area_all_monitors(void) +const Rect* screen_physical_area_all_monitors(void) { return screen_physical_area_monitor(screen_num_monitors); } -Rect const* screen_physical_area_monitor(guint head) +const Rect* screen_physical_area_monitor(guint head) { g_assert(head <= screen_num_monitors); @@ -1670,7 +1682,7 @@ guint screen_monitor_active(void) return screen_monitor_pointer(); } -Rect const* screen_physical_area_active(void) +const Rect* screen_physical_area_active(void) { return screen_physical_area_monitor(screen_monitor_active()); } @@ -1691,7 +1703,7 @@ guint screen_monitor_primary(gboolean fixed) return screen_monitor_pointer(); } -Rect const *screen_physical_area_primary(gboolean fixed) +const Rect* screen_physical_area_primary(gboolean fixed) { return screen_physical_area_monitor(screen_monitor_primary(fixed)); }