Save screen_last_desktop to the root prop _OB_LAST_DESKTOP.
authorMikael Magnusson <mikachu@comhem.se>
Wed, 27 Feb 2008 15:53:43 +0000 (16:53 +0100)
committerMikael Magnusson <mikachu@comhem.se>
Sat, 8 Mar 2008 16:24:54 +0000 (17:24 +0100)
obt/prop.c
obt/prop.h
openbox/screen.c

index 01b81accf6c56e49706d9514347796fbdedb750c..ca5c19d4378a715fa19d632e8458df02868a9eb0 100644 (file)
@@ -189,6 +189,7 @@ void obt_prop_startup(void)
     CREATE_(OB_CONFIG_FILE);
     CREATE_(OB_WM_ACTION_UNDECORATE);
     CREATE_(OB_WM_STATE_UNDECORATED);
+    CREATE_(OB_LAST_DESKTOP);
     CREATE_(OB_CONTROL);
 }
 
index f6c42c1057422b2d4df9d76874d56013a6129f35..1107ac8bf67290a23dc2e0844003ea065456c7eb 100644 (file)
@@ -210,6 +210,7 @@ typedef enum {
     OBT_PROP_OPENBOX_PID, /* this is depreecated in favour of ob_control */
     OBT_PROP_OB_THEME,
     OBT_PROP_OB_CONFIG_FILE,
+    OBT_PROP_OB_LAST_DESKTOP,
     OBT_PROP_OB_CONTROL,
 
     OBT_PROP_NUM_ATOMS
index 99912da7236385d83934e9f6359f6f8ca2a1e0ef..6c4d71b8f84bdc9cf9f4ea2fe310115426def603 100644 (file)
@@ -424,7 +424,11 @@ void screen_startup(gboolean reconfig)
     else
         screen_set_desktop(MIN(config_screen_firstdesk,
                                screen_num_desktops) - 1, FALSE);
-    screen_last_desktop = screen_desktop;
+    OBT_PROP_GET32(obt_root(ob_screen), OB_LAST_DESKTOP, CARDINAL, &screen_last_desktop);
+    if (screen_last_desktop < 0 || screen_last_desktop >= screen_num_desktops) {
+        screen_last_desktop = screen_desktop;
+        OBT_PROP_SET32(obt_root(ob_screen), OB_LAST_DESKTOP, CARDINAL, screen_last_desktop);
+    }
 
     /* don't start in showing-desktop mode */
     screen_showing_desktop = FALSE;
@@ -589,6 +593,7 @@ static void screen_fallback_focus(void)
 static gboolean last_desktop_func(gpointer data)
 {
     screen_desktop_timeout = TRUE;
+    OBT_PROP_SET32(obt_root(ob_screen), OB_LAST_DESKTOP, CARDINAL, screen_last_desktop);
     return FALSE;
 }