Got questions, comments, patches, etc.?
Contact Jason Woofenden
gitweb
/
spectrwm.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
fedd800
)
Add get_screen_count function that handles the result of xcb_get_setup.
author
Reginald Kennedy
<rk@rejii.com>
Wed, 19 Dec 2012 04:47:45 +0000
(12:47 +0800)
committer
Reginald Kennedy
<rk@rejii.com>
Thu, 20 Dec 2012 03:56:51 +0000
(11:56 +0800)
spectrwm.c
patch
|
blob
|
history
diff --git
a/spectrwm.c
b/spectrwm.c
index
059c2ac
..
a47f3b0
100644
(file)
--- a/
spectrwm.c
+++ b/
spectrwm.c
@@
-932,6
+932,7
@@
struct ws_win *get_pointer_win(xcb_window_t);
struct ws_win *get_region_focus(struct swm_region *);
int get_region_index(struct swm_region *);
xcb_screen_t *get_screen(int);
struct ws_win *get_region_focus(struct swm_region *);
int get_region_index(struct swm_region *);
xcb_screen_t *get_screen(int);
+int get_screen_count(void);
#ifdef SWM_DEBUG
char *get_stack_mode_name(uint8_t);
#endif
#ifdef SWM_DEBUG
char *get_stack_mode_name(uint8_t);
#endif
@@
-965,7
+966,7
@@
void maprequest(xcb_map_request_event_t *);
void motionnotify(xcb_motion_notify_event_t *);
void move(struct ws_win *, union arg *);
void move_step(struct swm_region *, union arg *);
void motionnotify(xcb_motion_notify_event_t *);
void move(struct ws_win *, union arg *);
void move_step(struct swm_region *, union arg *);
-uint32_t name_to_pixel(const char *);
+uint32_t name_to_pixel(int, const char *);
void name_workspace(struct swm_region *, union arg *);
void new_region(struct swm_screen *, int, int, int, int);
int parsekeys(char *, unsigned int, unsigned int *, KeySym *);
void name_workspace(struct swm_region *, union arg *);
void new_region(struct swm_screen *, int, int, int, int);
int parsekeys(char *, unsigned int, unsigned int *, KeySym *);
@@
-1187,6
+1188,19
@@
get_screen(int screen)
}
int
}
int
+get_screen_count(void)
+{
+ const xcb_setup_t *r;
+
+ if ((r = xcb_get_setup(conn)) == NULL) {
+ DNPRINTF(SWM_D_MISC, "get_screen_count: xcb_get_setup\n");
+ check_conn();
+ }
+
+ return xcb_setup_roots_length(r);
+}
+
+int
get_region_index(struct swm_region *r)
{
struct swm_region *rr;
get_region_index(struct swm_region *r)
{
struct swm_region *rr;
@@
-1280,7
+1294,7
@@
setup_ewmh(void)
for (i = 0; i < LENGTH(ewmh); i++)
ewmh[i].atom = get_atom_from_string(ewmh[i].name);
for (i = 0; i < LENGTH(ewmh); i++)
ewmh[i].atom = get_atom_from_string(ewmh[i].name);
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++) {
/* Support check window will be created by workaround(). */
for (i = 0; i < num_screens; i++) {
/* Support check window will be created by workaround(). */
@@
-1304,7
+1318,7
@@
teardown_ewmh(void)
sup_check = get_atom_from_string("_NET_SUPPORTING_WM_CHECK");
sup_list = get_atom_from_string("_NET_SUPPORTED");
sup_check = get_atom_from_string("_NET_SUPPORTING_WM_CHECK");
sup_list = get_atom_from_string("_NET_SUPPORTED");
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++) {
/* Get the support check window and destroy it */
for (i = 0; i < num_screens; i++) {
/* Get the support check window and destroy it */
@@
-1653,7
+1667,7
@@
find_pid(pid_t pid)
}
uint32_t
}
uint32_t
-name_to_pixel(const char *colorname)
+name_to_pixel(int sidx, const char *colorname)
{
uint32_t result = 0;
char cname[32] = "#";
{
uint32_t result = 0;
char cname[32] = "#";
@@
-1663,7
+1677,7
@@
name_to_pixel(const char *colorname)
xcb_alloc_named_color_reply_t *nr;
uint16_t rr, gg, bb;
xcb_alloc_named_color_reply_t *nr;
uint16_t rr, gg, bb;
- screen = xcb_setup_roots_iterator(xcb_get_setup(conn)).data;
+ screen = get_screen(sidx);
cmap = screen->default_colormap;
/* color is in format rgb://rr/gg/bb */
cmap = screen->default_colormap;
/* color is in format rgb://rr/gg/bb */
@@
-1705,15
+1719,15
@@
setscreencolor(char *val, int i, int c)
{
int num_screens;
{
int num_screens;
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
if (i > 0 && i <= num_screens) {
if (i > 0 && i <= num_screens) {
- screens[i - 1].c[c].pixel = name_to_pixel(val);
+ screens[i - 1].c[c].pixel = name_to_pixel(i - 1, val);
free(screens[i - 1].c[c].name);
if ((screens[i - 1].c[c].name = strdup(val)) == NULL)
err(1, "strdup");
} else if (i == -1) {
for (i = 0; i < num_screens; i++) {
free(screens[i - 1].c[c].name);
if ((screens[i - 1].c[c].name = strdup(val)) == NULL)
err(1, "strdup");
} else if (i == -1) {
for (i = 0; i < num_screens; i++) {
- screens[i].c[c].pixel = name_to_pixel(val);
+ screens[i].c[c].pixel = name_to_pixel(0, val);
free(screens[i].c[c].name);
if ((screens[i].c[c].name = strdup(val)) == NULL)
err(1, "strdup");
free(screens[i].c[c].name);
if ((screens[i].c[c].name = strdup(val)) == NULL)
err(1, "strdup");
@@
-1756,7
+1770,7
@@
custom_region(char *val)
int sidx, num_screens;
xcb_screen_t *screen;
int sidx, num_screens;
xcb_screen_t *screen;
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
if (sscanf(val, "screen[%d]:%ux%u+%u+%u", &sidx, &w, &h, &x, &y) != 5)
errx(1, "invalid custom region, "
"should be 'screen[<n>]:<n>x<n>+<n>+<n>");
if (sscanf(val, "screen[%d]:%ux%u+%u+%u", &sidx, &w, &h, &x, &y) != 5)
errx(1, "invalid custom region, "
"should be 'screen[<n>]:<n>x<n>+<n>+<n>");
@@
-1984,7
+1998,7
@@
bar_urgent(char *s, size_t sz)
for (i = 0; i < workspace_limit; i++)
urgent[i] = 0;
for (i = 0; i < workspace_limit; i++)
urgent[i] = 0;
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++)
for (j = 0; j < workspace_limit; j++)
TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry) {
for (i = 0; i < num_screens; i++)
for (j = 0; j < workspace_limit; j++)
TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry) {
@@
-2234,7
+2248,7
@@
bar_draw(void)
/* expand the format by first passing it through strftime(3) */
bar_fmt_expand(fmtexp, sizeof fmtexp);
/* expand the format by first passing it through strftime(3) */
bar_fmt_expand(fmtexp, sizeof fmtexp);
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++) {
TAILQ_FOREACH(r, &screens[i].rl, entry) {
if (r->bar == NULL)
for (i = 0; i < num_screens; i++) {
TAILQ_FOREACH(r, &screens[i].rl, entry) {
if (r->bar == NULL)
@@
-2338,7
+2352,7
@@
bar_toggle(struct swm_region *r, union arg *args)
}
/* update bars as necessary */
}
/* update bars as necessary */
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++)
TAILQ_FOREACH(tmpr, &screens[i].rl, entry)
if (tmpr->bar) {
for (i = 0; i < num_screens; i++)
TAILQ_FOREACH(tmpr, &screens[i].rl, entry)
if (tmpr->bar) {
@@
-2823,7
+2837,7
@@
unmap_all(void)
struct ws_win *win;
int i, j, num_screens;
struct ws_win *win;
int i, j, num_screens;
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++)
for (j = 0; j < workspace_limit; j++)
TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry)
for (i = 0; i < num_screens; i++)
for (j = 0; j < workspace_limit; j++)
TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry)
@@
-2918,7
+2932,7
@@
root_to_region(xcb_window_t root, int check)
DNPRINTF(SWM_D_MISC, "root_to_region: window: 0x%x\n", root);
DNPRINTF(SWM_D_MISC, "root_to_region: window: 0x%x\n", root);
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++)
if (screens[i].root == root)
break;
for (i = 0; i < num_screens; i++)
if (screens[i].root == root)
break;
@@
-2970,7
+2984,7
@@
find_unmanaged_window(xcb_window_t id)
struct ws_win *win;
int i, j, num_screens;
struct ws_win *win;
int i, j, num_screens;
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++)
for (j = 0; j < workspace_limit; j++)
TAILQ_FOREACH(win, &screens[i].ws[j].unmanagedlist,
for (i = 0; i < num_screens; i++)
for (j = 0; j < workspace_limit; j++)
TAILQ_FOREACH(win, &screens[i].ws[j].unmanagedlist,
@@
-2987,7
+3001,7
@@
find_window(xcb_window_t id)
int i, j, num_screens;
xcb_query_tree_reply_t *r;
int i, j, num_screens;
xcb_query_tree_reply_t *r;
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++)
for (j = 0; j < workspace_limit; j++)
TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry)
for (i = 0; i < num_screens; i++)
for (j = 0; j < workspace_limit; j++)
TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry)
@@
-3082,7
+3096,7
@@
kill_refs(struct ws_win *win)
if (win == NULL)
return;
if (win == NULL)
return;
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++)
TAILQ_FOREACH(r, &screens[i].rl, entry)
for (x = 0; x < workspace_limit; x++) {
for (i = 0; i < num_screens; i++)
TAILQ_FOREACH(r, &screens[i].rl, entry)
for (x = 0; x < workspace_limit; x++) {
@@
-3105,7
+3119,7
@@
validate_win(struct ws_win *testwin)
if (testwin == NULL)
return (0);
if (testwin == NULL)
return (0);
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++)
TAILQ_FOREACH(r, &screens[i].rl, entry)
for (x = 0; x < workspace_limit; x++) {
for (i = 0; i < num_screens; i++)
TAILQ_FOREACH(r, &screens[i].rl, entry)
for (x = 0; x < workspace_limit; x++) {
@@
-3125,7
+3139,7
@@
validate_ws(struct workspace *testws)
int i, x, num_screens;
/* validate all ws */
int i, x, num_screens;
/* validate all ws */
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++)
TAILQ_FOREACH(r, &screens[i].rl, entry)
for (x = 0; x < workspace_limit; x++) {
for (i = 0; i < num_screens; i++)
TAILQ_FOREACH(r, &screens[i].rl, entry)
for (x = 0; x < workspace_limit; x++) {
@@
-3545,7
+3559,7
@@
focusrg(struct swm_region *r, union arg *args)
int ridx = args->id, i, num_screens;
struct swm_region *rr = NULL;
int ridx = args->id, i, num_screens;
struct swm_region *rr = NULL;
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
/* do nothing if we don't have more than one screen */
if (!(num_screens > 1 || outputs > 1))
return;
/* do nothing if we don't have more than one screen */
if (!(num_screens > 1 || outputs > 1))
return;
@@
-3569,7
+3583,7
@@
cyclerg(struct swm_region *r, union arg *args)
struct swm_region *rr = NULL;
int i, num_screens;
struct swm_region *rr = NULL;
int i, num_screens;
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
/* do nothing if we don't have more than one screen */
if (!(num_screens > 1 || outputs > 1))
return;
/* do nothing if we don't have more than one screen */
if (!(num_screens > 1 || outputs > 1))
return;
@@
-3972,7
+3986,7
@@
stack(void) {
DNPRINTF(SWM_D_STACK, "stack: begin\n");
DNPRINTF(SWM_D_STACK, "stack: begin\n");
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++) {
#ifdef SWM_DEBUG
j = 0;
for (i = 0; i < num_screens; i++) {
#ifdef SWM_DEBUG
j = 0;
@@
-4547,7
+4561,7
@@
send_to_rg(struct swm_region *r, union arg *args)
struct swm_region *rr = NULL;
union arg a;
struct swm_region *rr = NULL;
union arg a;
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
/* do nothing if we don't have more than one screen */
if (!(num_screens > 1 || outputs > 1))
return;
/* do nothing if we don't have more than one screen */
if (!(num_screens > 1 || outputs > 1))
return;
@@
-6528,7
+6542,7
@@
grabkeys(void)
modifiers[2] = XCB_MOD_MASK_LOCK;
modifiers[3] = numlockmask | XCB_MOD_MASK_LOCK;
modifiers[2] = XCB_MOD_MASK_LOCK;
modifiers[3] = numlockmask | XCB_MOD_MASK_LOCK;
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (k = 0; k < num_screens; k++) {
if (TAILQ_EMPTY(&screens[k].rl))
continue;
for (k = 0; k < num_screens; k++) {
if (TAILQ_EMPTY(&screens[k].rl))
continue;
@@
-6814,7
+6828,7
@@
setconfvalue(char *selector, char *value, int flags)
errx(1, "setconfvalue: bar_enabled_ws: invalid "
"workspace %d.", ws_id + 1);
errx(1, "setconfvalue: bar_enabled_ws: invalid "
"workspace %d.", ws_id + 1);
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++) {
ws = (struct workspace *)&screens[i].ws;
ws[ws_id].bar_enabled = atoi(value);
for (i = 0; i < num_screens; i++) {
ws = (struct workspace *)&screens[i].ws;
ws[ws_id].bar_enabled = atoi(value);
@@
-7145,7
+7159,7
@@
setlayout(char *selector, char *value, int flags)
"<master_grow>:<master_add>:<stack_inc>:<always_raise>:"
"<type>'");
"<master_grow>:<master_add>:<stack_inc>:<always_raise>:"
"<type>'");
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++) {
ws = (struct workspace *)&screens[i].ws;
ws[ws_id].cur_layout = &layouts[st];
for (i = 0; i < num_screens; i++) {
ws = (struct workspace *)&screens[i].ws;
ws[ws_id].cur_layout = &layouts[st];
@@
-7793,7
+7807,7
@@
expose(xcb_expose_event_t *e)
DNPRINTF(SWM_D_EVENT, "expose: window: 0x%x\n", e->window);
DNPRINTF(SWM_D_EVENT, "expose: window: 0x%x\n", e->window);
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++)
TAILQ_FOREACH(r, &screens[i].rl, entry)
if (e->window == WINID(r->bar))
for (i = 0; i < num_screens; i++)
TAILQ_FOREACH(r, &screens[i].rl, entry)
if (e->window == WINID(r->bar))
@@
-8401,7
+8415,7
@@
motionnotify(xcb_motion_notify_event_t *e)
last_event_time = e->time;
last_event_time = e->time;
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++)
if (screens[i].root == e->root)
break;
for (i = 0; i < num_screens; i++)
if (screens[i].root == e->root)
break;
@@
-8693,7
+8707,7
@@
enable_wm(void)
xcb_generic_error_t *error;
/* this causes an error if some other window manager is running */
xcb_generic_error_t *error;
/* this causes an error if some other window manager is running */
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++) {
if ((sc = get_screen(i)) == NULL)
errx(1, "ERROR: can't get screen %d.", i);
for (i = 0; i < num_screens; i++) {
if ((sc = get_screen(i)) == NULL)
errx(1, "ERROR: can't get screen %d.", i);
@@
-8825,7
+8839,7
@@
scan_xrandr(int i)
if ((screen = get_screen(i)) == NULL)
errx(1, "ERROR: can't get screen %d.", i);
if ((screen = get_screen(i)) == NULL)
errx(1, "ERROR: can't get screen %d.", i);
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
if (i >= num_screens)
errx(1, "scan_xrandr: invalid screen");
if (i >= num_screens)
errx(1, "scan_xrandr: invalid screen");
@@
-8906,7
+8920,7
@@
screenchange(xcb_randr_screen_change_notify_event_t *e)
DNPRINTF(SWM_D_EVENT, "screenchange: root: 0x%x\n", e->root);
DNPRINTF(SWM_D_EVENT, "screenchange: root: 0x%x\n", e->root);
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
/* silly event doesn't include the screen index */
for (i = 0; i < num_screens; i++)
if (screens[i].root == e->root)
/* silly event doesn't include the screen index */
for (i = 0; i < num_screens; i++)
if (screens[i].root == e->root)
@@
-8957,7
+8971,7
@@
grab_windows(void)
xcb_get_property_cookie_t pc;
DNPRINTF(SWM_D_INIT, "grab_windows: begin\n");
xcb_get_property_cookie_t pc;
DNPRINTF(SWM_D_INIT, "grab_windows: begin\n");
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++) {
qtc = xcb_query_tree(conn, screens[i].root);
qtr = xcb_query_tree_reply(conn, qtc, NULL);
for (i = 0; i < num_screens; i++) {
qtc = xcb_query_tree(conn, screens[i].root);
qtr = xcb_query_tree_reply(conn, qtc, NULL);
@@
-9055,7
+9069,7
@@
setup_screens(void)
xcb_randr_query_version_cookie_t c;
xcb_randr_query_version_reply_t *r;
xcb_randr_query_version_cookie_t c;
xcb_randr_query_version_reply_t *r;
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
if ((screens = calloc(num_screens,
sizeof(struct swm_screen))) == NULL)
err(1, "setup_screens: calloc: failed to allocate memory for "
if ((screens = calloc(num_screens,
sizeof(struct swm_screen))) == NULL)
err(1, "setup_screens: calloc: failed to allocate memory for "
@@
-9174,7
+9188,7
@@
workaround(void)
/* work around sun jdk bugs, code from wmname */
netwmcheck = get_atom_from_string("_NET_SUPPORTING_WM_CHECK");
/* work around sun jdk bugs, code from wmname */
netwmcheck = get_atom_from_string("_NET_SUPPORTING_WM_CHECK");
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++) {
root = screens[i].root;
for (i = 0; i < num_screens; i++) {
root = screens[i].root;
@@
-9209,7
+9223,7
@@
shutdown_cleanup(void)
teardown_ewmh();
teardown_ewmh();
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; ++i) {
if (screens[i].bar_gc != 0)
xcb_free_gc(conn, screens[i].bar_gc);
for (i = 0; i < num_screens; ++i) {
if (screens[i].bar_gc != 0)
xcb_free_gc(conn, screens[i].bar_gc);
@@
-9428,7
+9442,7
@@
noconfig:
setenv("SWM_STARTED", "YES", 1);
/* setup all bars */
setenv("SWM_STARTED", "YES", 1);
/* setup all bars */
- num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ num_screens = get_screen_count();
for (i = 0; i < num_screens; i++)
TAILQ_FOREACH(r, &screens[i].rl, entry)
bar_setup(r);
for (i = 0; i < num_screens; i++)
TAILQ_FOREACH(r, &screens[i].rl, entry)
bar_setup(r);