X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=3809e05aacac25e128b33020674dc4096051684a;hb=854da68d0f5bed8c85c101fd6895244d60183ff5;hp=8e5daec745979eb358ae7370232d986c046806ee;hpb=8008638ed647dc8f2f3efac476bb6466b456f4ed;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index 8e5daec7..3809e05a 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -1,18 +1,17 @@ #include "debug.h" #include "openbox.h" +#include "mainloop.h" #include "dock.h" #include "xerror.h" #include "prop.h" #include "startup.h" #include "grab.h" -#include "timer.h" #include "config.h" #include "screen.h" #include "client.h" #include "frame.h" #include "focus.h" #include "popup.h" -#include "dispatch.h" #include "extensions.h" #include "render/render.h" @@ -37,6 +36,7 @@ guint screen_num_desktops; guint screen_num_monitors; guint screen_desktop; +guint screen_last_desktop; Size screen_physical_size; gboolean screen_showing_desktop; DesktopLayout screen_desktop_layout; @@ -51,7 +51,6 @@ static Popup *desktop_cycle_popup; #ifdef USE_LIBSN static SnMonitorContext *sn_context; static int sn_busy_cnt; -static ObTimer *sn_timer; static void sn_event_func(SnMonitorEvent *event, void *data); #endif @@ -67,6 +66,7 @@ static gboolean replace_wm() wm_sn = g_strdup_printf("WM_S%d", ob_screen); wm_sn_atom = XInternAtom(ob_display, wm_sn, FALSE); + g_free(wm_sn); current_wm_sn_owner = XGetSelectionOwner(ob_display, wm_sn_atom); if (current_wm_sn_owner) { @@ -179,8 +179,6 @@ gboolean screen_annex() } - ob_debug("Managing screen %d\n", ob_screen); - set_root_cursor(); /* set the OPENBOX_PID hint */ @@ -198,7 +196,7 @@ gboolean screen_annex() window, screen_support_win); /* set the _NET_SUPPORTED_ATOMS hint */ - num_support = 61; + num_support = 50; i = 0; supported = g_new(guint32, num_support); supported[i++] = prop_atoms.net_current_desktop; @@ -251,17 +249,6 @@ gboolean screen_annex() supported[i++] = prop_atoms.net_wm_state_below; supported[i++] = prop_atoms.net_moveresize_window; supported[i++] = prop_atoms.net_wm_moveresize; - supported[i++] = prop_atoms.net_wm_moveresize_size_topleft; - supported[i++] = prop_atoms.net_wm_moveresize_size_top; - supported[i++] = prop_atoms.net_wm_moveresize_size_topright; - supported[i++] = prop_atoms.net_wm_moveresize_size_right; - supported[i++] = prop_atoms.net_wm_moveresize_size_bottomright; - supported[i++] = prop_atoms.net_wm_moveresize_size_bottom; - supported[i++] = prop_atoms.net_wm_moveresize_size_bottomleft; - supported[i++] = prop_atoms.net_wm_moveresize_size_left; - supported[i++] = prop_atoms.net_wm_moveresize_move; - supported[i++] = prop_atoms.net_wm_moveresize_size_keyboard; - supported[i++] = prop_atoms.net_wm_moveresize_move_keyboard; g_assert(i == num_support); /* supported[] = prop_atoms.net_wm_action_stick; @@ -414,8 +401,6 @@ void screen_set_num_desktops(guint num) /* change our struts/area to match (after moving windows) */ screen_update_areas(); - dispatch_ob(Event_Ob_NumDesktops, num, old); - /* change our desktop if we're on one that no longer exists! */ if (screen_desktop >= screen_num_desktops) screen_set_desktop(num - 1); @@ -436,6 +421,8 @@ void screen_set_desktop(guint num) if (old == num) return; + screen_last_desktop = old; + ob_debug("Moving to desktop %d\n", num+1); /* show windows before hiding the rest to lessen the enter/leave events */ @@ -468,8 +455,6 @@ void screen_set_desktop(guint num) #ifdef DEBUG_FOCUS ob_debug("/switch fallback\n"); #endif - - dispatch_ob(Event_Ob_Desktop, num, old); } static void get_row_col(guint d, guint *r, guint *c) @@ -602,7 +587,7 @@ static void popup_cycle(guint d, gboolean show) } guint screen_cycle_desktop(ObDirection dir, gboolean wrap, gboolean linear, - gboolean done, gboolean cancel) + gboolean dialog, gboolean done, gboolean cancel) { static gboolean first = TRUE; static gboolean lin; @@ -612,8 +597,7 @@ guint screen_cycle_desktop(ObDirection dir, gboolean wrap, gboolean linear, if (cancel) { d = origd; goto done_cycle; - } else if (done) { - screen_set_desktop(d); + } else if (done && dialog) { goto done_cycle; } if (first) { @@ -700,8 +684,10 @@ guint screen_cycle_desktop(ObDirection dir, gboolean wrap, gboolean linear, d = translate_row_col(r, c); } - popup_cycle(d, TRUE); - return d; + if (dialog) { + popup_cycle(d, TRUE); + return d; + } done_cycle: first = TRUE; @@ -857,8 +843,6 @@ void screen_show_desktop(gboolean show) show = !!show; /* make it boolean */ PROP_SET32(RootWindow(ob_display, ob_screen), net_showing_desktop, cardinal, show); - - dispatch_ob(Event_Ob_ShowDesktop, show, 0); } void screen_install_colormap(ObClient *client, gboolean install) @@ -1094,13 +1078,13 @@ static void set_root_cursor() } #ifdef USE_LIBSN -static void sn_timeout(ObTimer *t, void *data) +static gboolean sn_timeout(gpointer data) { - timer_stop(sn_timer); - sn_timer = NULL; sn_busy_cnt = 0; set_root_cursor(); + + return FALSE; /* don't repeat */ } static void sn_event_func(SnMonitorEvent *ev, void *data) @@ -1121,26 +1105,20 @@ static void sn_event_func(SnMonitorEvent *ev, void *data) switch (sn_monitor_event_get_type(ev)) { case SN_MONITOR_EVENT_INITIATED: ++sn_busy_cnt; - if (sn_timer) - timer_stop(sn_timer); + ob_main_loop_timeout_remove(ob_main_loop, sn_timeout); /* 30 second timeout for apps to start */ - sn_timer = timer_start(30 * 1000000, sn_timeout, NULL); + ob_main_loop_timeout_add(ob_main_loop, 30 * G_USEC_PER_SEC, + sn_timeout, NULL, NULL); break; case SN_MONITOR_EVENT_CHANGED: break; case SN_MONITOR_EVENT_COMPLETED: if (sn_busy_cnt) --sn_busy_cnt; - if (sn_timer) { - timer_stop(sn_timer); - sn_timer = NULL; - } + ob_main_loop_timeout_remove(ob_main_loop, sn_timeout); break; case SN_MONITOR_EVENT_CANCELED: if (sn_busy_cnt) --sn_busy_cnt; - if (sn_timer) { - timer_stop(sn_timer); - sn_timer = NULL; - } + ob_main_loop_timeout_remove(ob_main_loop, sn_timeout); }; if (sn_busy_cnt != cnt)