summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMathieu OTHACEHE <m.othacehe@gmail.com>2016-11-29 20:00:49 +0100
committerJérémie Courrèges-Anglas <jca@wxcvbn.org>2016-12-01 21:30:28 +0100
commit8e1316eba8d734b2f167a5a39fa93f7ecffa9c6a (patch)
tree2b030d8083d20fa8c7f11360269df7dc7392958e /src
parent55a5ed452a7e1b6c581164e2dad15d528198eb40 (diff)
downloadratpoison-8e1316eba8d734b2f167a5a39fa93f7ecffa9c6a.zip
Assign a number to each screen using a numset
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.
Diffstat (limited to 'src')
-rw-r--r--src/data.h6
-rw-r--r--src/screen.c21
2 files changed, 26 insertions, 1 deletions
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);
}