X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=3b9f66ff35a66cce6d06dbfcf4db8e50be855ce1;hb=c230443c6596039f426542f5a286120891a745c5;hp=90f8b27c76cbd13c29c74c07e78ab79cf9bfd8e9;hpb=e1b4b9eb17b3ea145dbdce28dbf278437e349be1;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index 90f8b27c..3b9f66ff 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -31,6 +31,7 @@ #include "event.h" #include "focus.h" #include "popup.h" +#include "hooks.h" #include "render/render.h" #include "gettext.h" #include "obt/display.h" @@ -55,20 +56,20 @@ static gboolean replace_wm(void); static void screen_tell_ksplash(void); static void screen_fallback_focus(void); -guint screen_num_desktops; -guint screen_num_monitors; -guint screen_desktop; -guint screen_last_desktop; -gboolean screen_showing_desktop; +guint screen_num_desktops; +guint screen_num_monitors; +guint screen_desktop; +guint screen_last_desktop; +gboolean screen_showing_desktop; ObDesktopLayout screen_desktop_layout; -gchar **screen_desktop_names; -Window screen_support_win; -Time screen_desktop_user_time = CurrentTime; +gchar **screen_desktop_names; +Window screen_support_win; +Time screen_desktop_user_time = CurrentTime; static Size screen_physical_size; static guint screen_old_desktop; static gboolean screen_desktop_timeout = TRUE; -/*! An array of desktops, holding array of areas per monitor */ +/*! An array of desktops, holding an array of areas per monitor */ static Rect *monitor_area = NULL; /*! An array of desktops, holding an array of struts */ static GSList *struts_top = NULL; @@ -330,7 +331,7 @@ static void screen_tell_ksplash(void) e.xclient.display = obt_display; e.xclient.window = obt_root(ob_screen); e.xclient.message_type = - XInternAtom(obt_display, "_KDE_SPLASH_PROGRESS", False ); + XInternAtom(obt_display, "_KDE_SPLASH_PROGRESS", False); e.xclient.format = 8; strcpy(e.xclient.data.b, "wm started"); XSendEvent(obt_display, obt_root(ob_screen), @@ -394,6 +395,10 @@ void screen_startup(gboolean reconfig) NET_NUMBER_OF_DESKTOPS, CARDINAL, &d)) { if (d != config_desktops_num) { + /* TRANSLATORS: If you need to specify a different order of the + arguments, you can use %1$d for the first one and %2$d for the + second one. For example, + "The current session has %2$d desktops, but Openbox is configured for %1$d ..." */ g_warning(_("Openbox is configured for %d desktops, but the current session has %d. Overriding the Openbox configuration."), config_desktops_num, d); } @@ -476,7 +481,7 @@ void screen_resize(void) OBT_PROP_SETA32(obt_root(ob_screen), NET_DESKTOP_GEOMETRY, CARDINAL, geometry, 2); - if (ob_state() == OB_STATE_STARTING) + if (ob_state() != OB_STATE_RUNNING) return; screen_update_areas(); @@ -525,12 +530,13 @@ void screen_set_num_desktops(guint num) stacking_raise(CLIENT_AS_WINDOW(c)); } } + g_list_free(stacking_copy); /* change our struts/area to match (after moving windows) */ screen_update_areas(); /* may be some unnamed desktops that we need to fill in with names - (after updating the areas so the popup can resize) */ + (after updating the areas so the popup can resize) */ screen_update_desktop_names(); /* change our desktop if we're on one that no longer exists! */ @@ -670,6 +676,9 @@ void screen_set_desktop(guint num, gboolean dofocus) ob_debug("Moving to desktop %d", num+1); + if (ob_state() == OB_STATE_RUNNING) + screen_show_desktop_popup(screen_desktop); + /* ignore enter events caused by the move */ ignore_start = event_start_ignore_all_enters(); @@ -701,8 +710,7 @@ void screen_set_desktop(guint num, gboolean dofocus) if (event_curtime != CurrentTime) screen_desktop_user_time = event_curtime; - if (ob_state() == OB_STATE_RUNNING) - screen_show_desktop_popup(screen_desktop); + hooks_queue(OB_HOOK_SCREEN_DESK_CHANGE, NULL); } void screen_add_desktop(gboolean current) @@ -780,6 +788,7 @@ void screen_remove_desktop(gboolean current) } } } + g_list_free(stacking_copy); /* fallback focus like we're changing desktops */ if (screen_desktop < screen_num_desktops - 1) {