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 _______________________________________________ Ratpoison-devel mailing list Ratpoison-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/ratpoison-devel