ratpoison-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RP] [PATCH 1/6] Assign a number to each screen using a numset


From: Mathieu OTHACEHE
Subject: [RP] [PATCH 1/6] Assign a number to each screen using a numset
Date: Tue, 29 Nov 2016 20:00:49 +0100

A number is added to rp_screen to identify every screen.
The screen numbers are affected at ratpoison start, when screens are
sorted.

On screen addition, a new number is requested.
On screen deletion, the screen number is released.
---
 src/data.h   |  6 ++++++
 src/screen.c | 21 ++++++++++++++++++++-
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/src/data.h b/src/data.h
index 1e640e7..8019ec8 100644
--- a/src/data.h
+++ b/src/data.h
@@ -153,6 +153,9 @@ struct rp_group
 struct rp_global_screen
 {
   unsigned long fg_color, bg_color, fw_color, bw_color; /* The pixel color. */
+
+  /* This numset is responsible for giving out numbers for each screen */
+  struct numset *numset;
 };
 
 struct xrandr_info {
@@ -170,6 +173,9 @@ struct rp_screen
   Colormap def_cmap;
   Cursor rat;
 
+  /* Screen number, handled by rp_global_screen numset */
+  int number;
+
   struct xrandr_info xrandr;
 
   /* Here to abstract over the Xrandr vs X screens difference */
diff --git a/src/screen.c b/src/screen.c
index 240b876..e629419 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -218,11 +218,24 @@ screen_sort (void)
 }
 
 static void
+screen_set_numbers (void)
+{
+  rp_screen *cur;
+
+  list_for_each_entry (cur, &rp_screens, node)
+    {
+      cur->number = numset_request (rp_glob_screen.numset);
+    }
+}
+
+static void
 init_global_screen (rp_global_screen *s)
 {
   int screen_num;
 
   screen_num = DefaultScreen (dpy);
+
+  s->numset = numset_new ();
   s->fg_color = BlackPixel (dpy, screen_num);
   s->bg_color = WhitePixel (dpy, screen_num);
   s->fw_color = BlackPixel (dpy, screen_num);
@@ -264,6 +277,7 @@ init_screens (void)
     }
 
   screen_sort ();
+  screen_set_numbers ();
 
   free (rr_outputs);
 }
@@ -474,7 +488,7 @@ screen_dump (rp_screen *screen)
     sbuf_printf(s, "%s ", sbuf_get (screen->xrandr.name));
 
   sbuf_printf_concat (s, "%d %d %d %d %d %d",
-                      (rp_have_xrandr) ? screen->xrandr.output : 
screen->screen_num,
+                      screen->number,
                       screen->left,
                       screen->top,
                       screen->width,
@@ -569,6 +583,8 @@ screen_add (int rr_output)
   screen = xmalloc (sizeof(*screen));
   list_add (&screen->node, &rp_screens);
 
+  screen->number = numset_request (rp_glob_screen.numset);
+
   if (!rp_current_screen)
     rp_current_screen = screen;
 
@@ -602,6 +618,8 @@ screen_del (rp_screen *s)
     hide_window (cur_win);
   }
 
+  numset_release (rp_glob_screen.numset, s->number);
+
   change_windows_screen (s, rp_current_screen);
   screen_free (s);
 
@@ -656,4 +674,5 @@ screen_free_final (void)
   /* Relinquish our hold on the root window. */
   XSelectInput(dpy, RootWindow (dpy, DefaultScreen (dpy)), 0);
 
+  numset_free (rp_glob_screen.numset);
 }
-- 
2.10.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]