Simplify get_color

This commit is contained in:
Bastien Dejean 2012-09-14 11:30:41 +02:00
parent ac4fcaad23
commit 7e3569f0fa
7 changed files with 79 additions and 82 deletions

View file

@ -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
View file

@ -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
View file

@ -6,5 +6,6 @@
xcb_ewmh_connection_t ewmh;
void ewmh_init(void);
void ewmh_update_wm_name(void);
#endif

View file

@ -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) {

View file

@ -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);

View file

@ -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
View file

@ -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;
}