Sfoglia il codice sorgente

Screen: Add screen_prev_sel function to go to the last used screen. (Feature #30 requested by Erus)

Martin Duquesnoy 14 anni fa
parent
commit
7a714c03a9
3 ha cambiato i file con 26 aggiunte e 0 eliminazioni
  1. 1 0
      src/config.c
  2. 23 0
      src/screen.c
  3. 2 0
      src/wmfs.h

+ 1 - 0
src/config.c

@@ -70,6 +70,7 @@ func_name_list_t tmp_func_list[] =
      {"screen_select",           uicb_screen_select },
      {"screen_next",             uicb_screen_next },
      {"screen_prev",             uicb_screen_prev },
+     {"screen_prev_sel",         uicb_screen_prev_sel},
      {"reload",                  uicb_reload },
      {"launcher",                uicb_launcher },
      {"set_layout",              uicb_set_layout },

+ 23 - 0
src/screen.c

@@ -123,10 +123,13 @@ screen_set_sel(int screen)
      if(screen < 0 || screen > screen_count() - 1)
           screen = 0;
 
+     prevselscreen = selscreen;
+
      client_focus(NULL);
      XWarpPointer(dpy, None, ROOT, 0, 0, 0, 0,
                   sgeo[screen].x + sgeo[screen].width / 2,
                   sgeo[screen].y + sgeo[screen].height / 2);
+
      selscreen = screen;
 
      return;
@@ -138,6 +141,8 @@ screen_set_sel(int screen)
 int
 screen_get_sel(void)
 {
+     int os = selscreen;
+
      selscreen = 0;
 
 #ifdef HAVE_XINERAMA
@@ -157,6 +162,9 @@ screen_get_sel(void)
      XChangeProperty(dpy, ROOT, net_atom[wmfs_current_screen], XA_CARDINAL, 32,
                      PropModeReplace, (uchar*)&selscreen, 1);
 
+     if(os != selscreen)
+          prevselscreen = os;
+
      return selscreen;
 }
 
@@ -251,3 +259,18 @@ uicb_screen_prev(uicb_t cmd)
 
      return;
 }
+
+/** Uicb: screen prev sel
+  * \param cmd uicb_t type unused
+  */
+void
+uicb_screen_prev_sel(uicb_t cmd)
+{
+     screen_get_sel();
+
+     screen_set_sel(prevselscreen);
+
+     return;
+}
+
+

+ 2 - 0
src/wmfs.h

@@ -282,6 +282,7 @@ void screen_init_geo(void);
 void uicb_screen_select(uicb_t);
 void uicb_screen_next(uicb_t);
 void uicb_screen_prev(uicb_t);
+void uicb_screen_prev_sel(uicb_t);
 
 /* status.c */
 int statustext_rectangle(StatusRec *r, char *str);
@@ -360,6 +361,7 @@ void uicb_reload(uicb_t);
 Display *dpy;
 GC gc, gc_stipple;
 int selscreen;
+int prevselscreen;
 Conf conf;
 Key *keys;
 Bool exiting, estatus;