[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
- [RP] [PATCH v2 0/6] Improve xrandr support, Mathieu OTHACEHE, 2016/11/29
- [RP] [PATCH 1/6] Assign a number to each screen using a numset,
Mathieu OTHACEHE <=
- [RP] [PATCH 2/6] Fix fdump and sselect, Mathieu OTHACEHE, 2016/11/29
- [RP] [PATCH 5/6] Add height dimension to screen sorting, Mathieu OTHACEHE, 2016/11/29
- [RP] [PATCH 4/6] Fix sfrestore, Mathieu OTHACEHE, 2016/11/29
- [RP] [PATCH 3/6] Fix sfdump, Mathieu OTHACEHE, 2016/11/29
- [RP] [PATCH 6/6] Kill gcc uninitialized warning, Mathieu OTHACEHE, 2016/11/29