mirror of
https://github.com/vale981/bspwm
synced 2025-03-05 09:51:38 -05:00
Simplify get_color
This commit is contained in:
parent
ac4fcaad23
commit
7e3569f0fa
7 changed files with 79 additions and 82 deletions
2
bspwm.c
2
bspwm.c
|
@ -61,7 +61,6 @@ void setup(int default_screen)
|
|||
xcb_atom_t net_atoms[] = {ewmh._NET_SUPPORTED, ewmh._NET_WM_STATE_FULLSCREEN, ewmh._NET_WM_STATE, ewmh._NET_ACTIVE_WINDOW};
|
||||
|
||||
xcb_ewmh_set_supported(&ewmh, default_screen, LENGTH(net_atoms), net_atoms);
|
||||
xcb_ewmh_set_wm_name(&ewmh, screen->root, LENGTH(WM_NAME), WM_NAME);
|
||||
|
||||
desk = make_desktop(DESK_NAME);
|
||||
last_desk = NULL;
|
||||
|
@ -119,6 +118,7 @@ int main(void)
|
|||
|
||||
load_settings();
|
||||
run_autostart();
|
||||
ewmh_update_wm_name();
|
||||
update_root_dimensions();
|
||||
|
||||
xcb_flush(dpy);
|
||||
|
|
8
ewmh.c
8
ewmh.c
|
@ -1,6 +1,8 @@
|
|||
#include <string.h>
|
||||
#include <xcb/xcb_ewmh.h>
|
||||
#include "types.h"
|
||||
#include "bspwm.h"
|
||||
#include "settings.h"
|
||||
#include "ewmh.h"
|
||||
|
||||
void ewmh_init(void)
|
||||
|
@ -9,3 +11,9 @@ void ewmh_init(void)
|
|||
ewmh_cookies = xcb_ewmh_init_atoms(dpy, &ewmh);
|
||||
xcb_ewmh_init_atoms_replies(&ewmh, ewmh_cookies, NULL);
|
||||
}
|
||||
|
||||
void ewmh_update_wm_name(void)
|
||||
{
|
||||
if (wm_name != NULL)
|
||||
xcb_ewmh_set_wm_name(&ewmh, screen->root, strlen(wm_name), wm_name);
|
||||
}
|
||||
|
|
1
ewmh.h
1
ewmh.h
|
@ -6,5 +6,6 @@
|
|||
xcb_ewmh_connection_t ewmh;
|
||||
|
||||
void ewmh_init(void);
|
||||
void ewmh_update_wm_name(void);
|
||||
|
||||
#endif
|
||||
|
|
105
messages.c
105
messages.c
|
@ -20,24 +20,26 @@ void process_message(char *msg, char *rsp)
|
|||
if (strcmp(cmd, "get") == 0) {
|
||||
char *name = strtok(NULL, TOKEN_SEP);
|
||||
get_setting(name, rsp);
|
||||
return;
|
||||
} else if (strcmp(cmd, "set") == 0) {
|
||||
char *name = strtok(NULL, TOKEN_SEP);
|
||||
char *value = strtok(NULL, TOKEN_SEP);
|
||||
set_setting(name, value);
|
||||
return;
|
||||
} else if (strcmp(cmd, "dump") == 0) {
|
||||
dump_tree(desk, desk->root, rsp, 0);
|
||||
return;
|
||||
} else if (strcmp(cmd, "list") == 0) {
|
||||
list_desktops(rsp);
|
||||
return;
|
||||
} else if (strcmp(cmd, "close") == 0) {
|
||||
remove_node(desk, desk->focus);
|
||||
apply_layout(desk, desk->root, root_rect);
|
||||
} else if (strcmp(cmd, "rotate") == 0) {
|
||||
char *deg = strtok(NULL, TOKEN_SEP);
|
||||
if (deg != NULL) {
|
||||
rotate_t r;
|
||||
if (parse_rotate(deg, &r)) {
|
||||
rotate_tree(desk->root, r);
|
||||
apply_layout(desk, desk->root, root_rect);
|
||||
}
|
||||
}
|
||||
} else if (strcmp(cmd, "layout") == 0) {
|
||||
|
@ -46,7 +48,6 @@ void process_message(char *msg, char *rsp)
|
|||
layout_t l;
|
||||
if (parse_layout(lyt, &l)) {
|
||||
desk->layout = l;
|
||||
apply_layout(desk, desk->root, root_rect);
|
||||
}
|
||||
}
|
||||
} else if (strcmp(cmd, "insert") == 0) {
|
||||
|
@ -55,7 +56,6 @@ void process_message(char *msg, char *rsp)
|
|||
node_t *n = make_node();
|
||||
n->client = c;
|
||||
insert_node(desk, n);
|
||||
apply_layout(desk, desk->root, root_rect);
|
||||
} else if (strcmp(cmd, "ratio") == 0) {
|
||||
char *value = strtok(NULL, TOKEN_SEP);
|
||||
if (value != NULL && desk->focus != NULL)
|
||||
|
@ -70,6 +70,7 @@ void process_message(char *msg, char *rsp)
|
|||
/* draw_triple_border(desk->focus, active_border_color_pxl); */
|
||||
}
|
||||
}
|
||||
return;
|
||||
} else if (strcmp(cmd, "push") == 0 || strcmp(cmd, "pull") == 0) {
|
||||
char *dir = strtok(NULL, TOKEN_SEP);
|
||||
if (dir != NULL) {
|
||||
|
@ -77,7 +78,6 @@ void process_message(char *msg, char *rsp)
|
|||
direction_t d;
|
||||
if (parse_fence_move(cmd, &m) && parse_direction(dir, &d)) {
|
||||
move_fence(desk->focus, d, m);
|
||||
apply_layout(desk, desk->root, root_rect);
|
||||
}
|
||||
}
|
||||
} else if (strcmp(cmd, "send_to") == 0) {
|
||||
|
@ -85,7 +85,6 @@ void process_message(char *msg, char *rsp)
|
|||
if (name != NULL) {
|
||||
desktop_t *d = find_desktop(name);
|
||||
transfer_node(desk, d, desk->focus);
|
||||
apply_layout(desk, desk->root, root_rect);
|
||||
}
|
||||
} else if (strcmp(cmd, "use") == 0) {
|
||||
char *name = strtok(NULL, TOKEN_SEP);
|
||||
|
@ -104,6 +103,7 @@ void process_message(char *msg, char *rsp)
|
|||
cycle_leaf(desk, desk->focus, d, k);
|
||||
}
|
||||
}
|
||||
return;
|
||||
} else if (strcmp(cmd, "alternate") == 0) {
|
||||
alternate_desktop();
|
||||
} else if (strcmp(cmd, "add") == 0) {
|
||||
|
@ -111,6 +111,7 @@ void process_message(char *msg, char *rsp)
|
|||
if (name != NULL) {
|
||||
add_desktop(name);
|
||||
}
|
||||
return;
|
||||
} else if (strcmp(cmd, "focus") == 0) {
|
||||
char *dir = strtok(NULL, TOKEN_SEP);
|
||||
if (dir != NULL) {
|
||||
|
@ -120,54 +121,16 @@ void process_message(char *msg, char *rsp)
|
|||
focus_node(desk, n);
|
||||
}
|
||||
}
|
||||
return;
|
||||
} else if (strcmp(cmd, "quit") == 0) {
|
||||
quit();
|
||||
return;
|
||||
} else {
|
||||
sprintf(rsp, "unknown command: %s\n", cmd);
|
||||
}
|
||||
}
|
||||
|
||||
void get_setting(char *name, char* rsp)
|
||||
{
|
||||
if (name == NULL)
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcmp(name, "inner_border_width") == 0)
|
||||
sprintf(rsp, "%u\n", inner_border_width);
|
||||
else if (strcmp(name, "main_border_width") == 0)
|
||||
sprintf(rsp, "%u\n", main_border_width);
|
||||
else if (strcmp(name, "outer_border_width") == 0)
|
||||
sprintf(rsp, "%u\n", outer_border_width);
|
||||
else if (strcmp(name, "border_width") == 0)
|
||||
sprintf(rsp, "%u\n", border_width);
|
||||
else if (strcmp(name, "window_gap") == 0)
|
||||
sprintf(rsp, "%i\n", window_gap);
|
||||
else if (strcmp(name, "left_padding") == 0)
|
||||
sprintf(rsp, "%i\n", left_padding);
|
||||
else if (strcmp(name, "right_padding") == 0)
|
||||
sprintf(rsp, "%i\n", right_padding);
|
||||
else if (strcmp(name, "top_padding") == 0)
|
||||
sprintf(rsp, "%i\n", top_padding);
|
||||
else if (strcmp(name, "bottom_padding") == 0)
|
||||
sprintf(rsp, "%i\n", bottom_padding);
|
||||
else if (strcmp(name, "normal_border_color") == 0)
|
||||
sprintf(rsp, "%s (0x%06X)\n", normal_border_color, normal_border_color_pxl);
|
||||
else if (strcmp(name, "active_border_color") == 0)
|
||||
sprintf(rsp, "%s (0x%06X)\n", active_border_color, active_border_color_pxl);
|
||||
else if (strcmp(name, "inner_border_color") == 0)
|
||||
sprintf(rsp, "%s (0x%06X)\n", inner_border_color, inner_border_color_pxl);
|
||||
else if (strcmp(name, "outer_border_color") == 0)
|
||||
sprintf(rsp, "%s (0x%06X)\n", outer_border_color, outer_border_color_pxl);
|
||||
else if (strcmp(name, "presel_border_color") == 0)
|
||||
sprintf(rsp, "%s (0x%06X)\n", presel_border_color, presel_border_color_pxl);
|
||||
else if (strcmp(name, "locked_border_color") == 0)
|
||||
sprintf(rsp, "%s (0x%06X)\n", locked_border_color, locked_border_color_pxl);
|
||||
else if (strcmp(name, "wm_name") == 0)
|
||||
sprintf(rsp, "%s\n", wm_name);
|
||||
else if (strcmp(name, "adaptive_window_border") == 0)
|
||||
sprintf(rsp, "%s\n", BOOLSTR(adaptive_window_border));
|
||||
else if (strcmp(name, "adaptive_window_gap") == 0)
|
||||
sprintf(rsp, "%s\n", BOOLSTR(adaptive_window_gap));
|
||||
apply_layout(desk, desk->root, root_rect);
|
||||
}
|
||||
|
||||
void set_setting(char *name, char *value)
|
||||
|
@ -220,10 +183,6 @@ void set_setting(char *name, char *value)
|
|||
bool b;
|
||||
if (parse_bool(value, &b))
|
||||
adaptive_window_border = b;
|
||||
} else if (strcmp(name, "adaptive_window_gap") == 0) {
|
||||
bool b;
|
||||
if (parse_bool(value, &b))
|
||||
adaptive_window_gap = b;
|
||||
} else if (strcmp(name, "wm_name") == 0) {
|
||||
strcpy(wm_name, value);
|
||||
return;
|
||||
|
@ -232,6 +191,48 @@ void set_setting(char *name, char *value)
|
|||
apply_layout(desk, desk->root, root_rect);
|
||||
}
|
||||
|
||||
void get_setting(char *name, char* rsp)
|
||||
{
|
||||
if (name == NULL)
|
||||
return;
|
||||
|
||||
if (strcmp(name, "inner_border_width") == 0)
|
||||
sprintf(rsp, "%u\n", inner_border_width);
|
||||
else if (strcmp(name, "main_border_width") == 0)
|
||||
sprintf(rsp, "%u\n", main_border_width);
|
||||
else if (strcmp(name, "outer_border_width") == 0)
|
||||
sprintf(rsp, "%u\n", outer_border_width);
|
||||
else if (strcmp(name, "border_width") == 0)
|
||||
sprintf(rsp, "%u\n", border_width);
|
||||
else if (strcmp(name, "window_gap") == 0)
|
||||
sprintf(rsp, "%i\n", window_gap);
|
||||
else if (strcmp(name, "left_padding") == 0)
|
||||
sprintf(rsp, "%i\n", left_padding);
|
||||
else if (strcmp(name, "right_padding") == 0)
|
||||
sprintf(rsp, "%i\n", right_padding);
|
||||
else if (strcmp(name, "top_padding") == 0)
|
||||
sprintf(rsp, "%i\n", top_padding);
|
||||
else if (strcmp(name, "bottom_padding") == 0)
|
||||
sprintf(rsp, "%i\n", bottom_padding);
|
||||
else if (strcmp(name, "normal_border_color") == 0)
|
||||
sprintf(rsp, "%s (0x%06X)\n", normal_border_color, normal_border_color_pxl);
|
||||
else if (strcmp(name, "active_border_color") == 0)
|
||||
sprintf(rsp, "%s (0x%06X)\n", active_border_color, active_border_color_pxl);
|
||||
else if (strcmp(name, "inner_border_color") == 0)
|
||||
sprintf(rsp, "%s (0x%06X)\n", inner_border_color, inner_border_color_pxl);
|
||||
else if (strcmp(name, "outer_border_color") == 0)
|
||||
sprintf(rsp, "%s (0x%06X)\n", outer_border_color, outer_border_color_pxl);
|
||||
else if (strcmp(name, "presel_border_color") == 0)
|
||||
sprintf(rsp, "%s (0x%06X)\n", presel_border_color, presel_border_color_pxl);
|
||||
else if (strcmp(name, "locked_border_color") == 0)
|
||||
sprintf(rsp, "%s (0x%06X)\n", locked_border_color, locked_border_color_pxl);
|
||||
else if (strcmp(name, "wm_name") == 0)
|
||||
sprintf(rsp, "%s\n", wm_name);
|
||||
else if (strcmp(name, "adaptive_window_border") == 0)
|
||||
sprintf(rsp, "%s\n", BOOLSTR(adaptive_window_border));
|
||||
}
|
||||
|
||||
|
||||
bool parse_bool(char *value, bool *b)
|
||||
{
|
||||
if (strcmp(value, "true") == 0) {
|
||||
|
|
|
@ -73,7 +73,6 @@ void apply_settings(lua_State *L)
|
|||
string_expr(L, wm_name, "wm_name", WM_NAME);
|
||||
|
||||
adaptive_window_border = bool_expr(L, "adaptive_window_border", ADAPTIVE_WINDOW_BORDER);
|
||||
adaptive_window_gap = bool_expr(L, "adaptive_window_gap", ADAPTIVE_WINDOW_GAP);
|
||||
|
||||
inner_border_width = int_expr(L, "inner_border_width", INNER_BORDER_WIDTH);
|
||||
main_border_width = int_expr(L, "main_border_width", MAIN_BORDER_WIDTH);
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
#define LEFT_PADDING 0
|
||||
#define RIGHT_PADDING 0
|
||||
|
||||
#define ADAPTIVE_WINDOW_GAP true
|
||||
#define ADAPTIVE_WINDOW_BORDER true
|
||||
|
||||
#define NORMAL_BORDER_COLOR "slategray"
|
||||
|
@ -63,7 +62,6 @@ int left_padding;
|
|||
int right_padding;
|
||||
|
||||
bool adaptive_window_border;
|
||||
bool adaptive_window_gap;
|
||||
|
||||
void load_settings(void);
|
||||
void run_autostart(void);
|
||||
|
|
42
utils.c
42
utils.c
|
@ -59,42 +59,32 @@ bool is_managed(xcb_window_t w)
|
|||
return (l.desktop != NULL && l.node != NULL);
|
||||
}
|
||||
|
||||
uint32_t color_pixel(char *hex)
|
||||
{
|
||||
char strgroups[3][3] = {{hex[1], hex[2], '\0'}, {hex[3], hex[4], '\0'}, {hex[5], hex[6], '\0'}};
|
||||
uint16_t rgb16[3] = {(strtol(strgroups[0], NULL, 16)), (strtol(strgroups[1], NULL, 16)), (strtol(strgroups[2], NULL, 16))};
|
||||
return (rgb16[0] << 16) + (rgb16[1] << 8) + rgb16[2];
|
||||
}
|
||||
|
||||
uint32_t get_color(char *col)
|
||||
{
|
||||
xcb_colormap_t map = screen->default_colormap;
|
||||
xcb_alloc_color_reply_t *rpl;
|
||||
xcb_alloc_named_color_reply_t *rpln;
|
||||
uint32_t rgb, pxl;
|
||||
uint16_t r, g, b;
|
||||
uint32_t pxl = 0;
|
||||
|
||||
if (col[0] == '#') {
|
||||
rgb = color_pixel(col);
|
||||
r = rgb >> 16;
|
||||
g = rgb >> 8 & 0xFF;
|
||||
b = rgb & 0xFF;
|
||||
rpl = xcb_alloc_color_reply(dpy, xcb_alloc_color(dpy, map, r * 257, g * 257, b * 257), NULL);
|
||||
if (rpl != NULL) {
|
||||
pxl = rpl->pixel;
|
||||
free(rpl);
|
||||
unsigned int red, green, blue;
|
||||
if (sscanf(col + 1, "%02x%02x%02x", &red, &green, &blue) == 3) {
|
||||
/* 2**16 - 1 == 0xffff and 0x101 * 0xij == 0xijij */
|
||||
red *= 0x101;
|
||||
green *= 0x101;
|
||||
blue *= 0x101;
|
||||
xcb_alloc_color_reply_t *reply = xcb_alloc_color_reply(dpy, xcb_alloc_color(dpy, map, red, green, blue), NULL);
|
||||
if (reply != NULL) {
|
||||
pxl = reply->pixel;
|
||||
free(reply);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
rpln = xcb_alloc_named_color_reply(dpy, xcb_alloc_named_color(dpy, map, strlen(col), col), NULL);
|
||||
if (rpln != NULL) {
|
||||
pxl = rpln->pixel;
|
||||
free(rpln);
|
||||
xcb_alloc_named_color_reply_t *reply = xcb_alloc_named_color_reply(dpy, xcb_alloc_named_color(dpy, map, strlen(col), col), NULL);
|
||||
if (reply != NULL) {
|
||||
pxl = reply->pixel;
|
||||
free(reply);
|
||||
}
|
||||
}
|
||||
|
||||
/* if (!rpl) */
|
||||
/* die("error: cannot allocate color '%s'\n", col); */
|
||||
|
||||
return pxl;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue