A few messages

This commit is contained in:
Bastien Dejean 2012-09-11 16:29:43 +02:00
parent 09a5b43006
commit 48a07d40d9
7 changed files with 94 additions and 21 deletions

View file

@ -69,11 +69,8 @@ void setup(int default_screen)
screen_width = screen->width_in_pixels;
screen_height = screen->height_in_pixels;
/* char *WM_ATOM_NAME[] = { "WM_PROTOCOLS", "WM_DELETE_WINDOW" }; */
xcb_atom_t net_atoms[] = {ewmh._NET_SUPPORTED, ewmh._NET_WM_STATE_FULLSCREEN, ewmh._NET_WM_STATE, ewmh._NET_ACTIVE_WINDOW};
/* xcb_change_property(dpy, XCB_PROP_MODE_REPLACE, screen->root, netatoms[NET_SUPPORTED], XCB_ATOM_ATOM, 32, NET_COUNT, netatoms); */
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);

View file

@ -15,9 +15,7 @@ desktop_t *desk_tail;
rule_t *rule_head;
bool running;
enum { WM_PROTOCOLS, WM_DELETE_WINDOW, WM_COUNT };
xcb_atom_t wmatoms[WM_COUNT];
/* enum { WM_PROTOCOLS, WM_DELETE_WINDOW, WM_COUNT }; */
int register_events(void);
xcb_screen_t *screen_of_display(xcb_connection_t *, int);

View file

@ -8,6 +8,7 @@
#include "types.h"
#include "bspwm.h"
#include "utils.h"
#include "tree.h"
void process_message(char *msg, char *rsp)
{
@ -23,9 +24,38 @@ void process_message(char *msg, char *rsp)
char *name = strtok(NULL, TOKEN_SEP);
char *value = strtok(NULL, TOKEN_SEP);
set_setting(name, value);
} else if (strcmp(cmd, "dump") == 0) {
dump_tree(desk->root, rsp, 0);
} else if (strcmp(cmd, "layout") == 0) {
char *lyt = strtok(NULL, TOKEN_SEP);
if (lyt != NULL) {
desk->layout = parse_layout(lyt);
apply_layout(desk, desk->root);
}
} else if (strcmp(cmd, "split_ratio") == 0) {
char *value = strtok(NULL, TOKEN_SEP);
split_ratio_cmd(value);
} else if (strcmp(cmd, "presel") == 0) {
char *dir = strtok(NULL, TOKEN_SEP);
if (dir != NULL) {
split_mode = MODE_MANUAL;
split_dir = parse_direction(dir);
draw_triple_border(desk->focus, active_border_color_pxl);
}
} else if (strcmp(cmd, "push") == 0 || strcmp(cmd, "pull")) {
char *dir = strtok(NULL, TOKEN_SEP);
if (dir != NULL) {
fence_move_t m = parse_fence_move(cmd);
direction_t d = parse_direction(dir);
move_fence(desk->focus, d, m);
}
} else if (strcmp(cmd, "move") == 0) {
char *dir = strtok(NULL, TOKEN_SEP);
if (dir != NULL) {
direction_t d = parse_direction(dir);
node_t *n = find_neighbor(desk->focus, d);
focus_node(desk, n);
}
} else if (strcmp(cmd, "quit") == 0) {
quit();
}
@ -92,12 +122,16 @@ void set_setting(char *name, char *value)
sscanf(value, "%i", &window_gap);
} else if (strcmp(name, "left_padding") == 0) {
sscanf(value, "%i", &left_padding);
update_root_dimensions();
} else if (strcmp(name, "right_padding") == 0) {
sscanf(value, "%i", &right_padding);
update_root_dimensions();
} else if (strcmp(name, "top_padding") == 0) {
sscanf(value, "%i", &top_padding);
update_root_dimensions();
} else if (strcmp(name, "bottom_padding") == 0) {
sscanf(value, "%i", &bottom_padding);
update_root_dimensions();
} else if (strcmp(name, "normal_border_color") == 0) {
strncpy(normal_border_color, value, sizeof(normal_border_color));
normal_border_color_pxl = get_color(normal_border_color);
@ -116,20 +150,22 @@ void set_setting(char *name, char *value)
} else if (strcmp(name, "locked_border_color") == 0) {
strncpy(locked_border_color, value, sizeof(locked_border_color));
locked_border_color_pxl = get_color(locked_border_color);
} else if (strcmp(name, "wm_name") == 0) {
strncpy(wm_name, value, sizeof(wm_name));
} else if (strcmp(name, "adaptive_window_border") == 0) {
if (is_bool(value))
adaptive_window_border = parse_bool(value);
} else if (strcmp(name, "adaptive_window_gap") == 0) {
if (is_bool(value))
adaptive_window_gap = parse_bool(value);
} else if (strcmp(name, "wm_name") == 0) {
strncpy(wm_name, value, sizeof(wm_name));
return;
}
apply_layout(desk, desk->root);
}
void split_ratio_cmd(char *value)
{
if (desk == NULL || desk->focus == NULL || value == NULL)
if (value == NULL || desk == NULL || desk->focus == NULL)
return;
sscanf(value, "%lf", &desk->focus->split_ratio);
@ -151,3 +187,31 @@ bool parse_bool(char *value)
return false;
return true;
}
layout_t parse_layout(char *lyt) {
if (strcmp(lyt, "monocle") == 0)
return LAYOUT_MONOCLE;
else if (strcmp(lyt, "tiled") == 0)
return LAYOUT_TILED;
return LAYOUT_TILED;
}
direction_t parse_direction(char *dir) {
if (strcmp(dir, "up") == 0)
return DIR_UP;
else if (strcmp(dir, "down") == 0)
return DIR_DOWN;
else if (strcmp(dir, "left") == 0)
return DIR_LEFT;
else if (strcmp(dir, "right") == 0)
return DIR_RIGHT;
return DIR_LEFT;
}
fence_move_t parse_fence_move(char *mov) {
if (strcmp(mov, "push") == 0)
return MOVE_PUSH;
else if (strcmp(mov, "pull") == 0)
return MOVE_PULL;
return MOVE_PUSH;
}

View file

@ -4,6 +4,7 @@
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
#include "types.h"
void process_message(char*, char*);
void get_setting(char*, char*);
@ -11,5 +12,8 @@ void set_setting(char*, char*);
void split_ratio_cmd(char *);
bool is_bool(char *);
bool parse_bool(char *);
layout_t parse_layout(char *);
direction_t parse_direction(char *);
fence_move_t parse_fence_move(char *);
#endif

View file

@ -51,6 +51,7 @@ void run_autostart(void)
execl(path, path, NULL);
PUTS("error: could not load autostart file\n");
exit(EXIT_SUCCESS);
}
void apply_settings(lua_State *L)

27
tree.c
View file

@ -186,7 +186,7 @@ void update_root_dimensions(void)
void apply_layout(desktop_t *d, node_t *n)
{
if (n == NULL)
if (d == NULL || n == NULL)
return;
if (is_leaf(n) && !n->client->floating && !n->client->fullscreen) {
uint32_t values[4];
@ -311,7 +311,7 @@ void focus_node(desktop_t *d, node_t *n)
xcb_set_input_focus(dpy, XCB_INPUT_FOCUS_POINTER_ROOT, n->client->window, XCB_CURRENT_TIME);
}
void remove_node(desktop_t *d, node_t *n)
void unlink_node(desktop_t *d, node_t *n)
{
if (d == NULL || n == NULL)
return;
@ -341,18 +341,29 @@ void remove_node(desktop_t *d, node_t *n)
free(p);
}
/* free(n->client); */
/* free(n); */
}
void remove_node(desktop_t *d, node_t *n)
{
unlink_node(d, n);
free(n->client);
free(n);
}
void transfer_node(desktop_t *ds, desktop_t *dd, node_t *n)
{
if (ds == NULL || dd == NULL || n == NULL)
return;
remove_node(ds, n);
unlink_node(ds, n);
insert_node(dd, n);
}
void select_desktop(desktop_t *d)
{
if (d == NULL)
return;
}
void update_vacant_state(node_t *n)
{
if (n == NULL)
@ -361,9 +372,3 @@ void update_vacant_state(node_t *n)
n->vacant = (n->first_child->vacant && n->second_child->vacant);
update_vacant_state(n->parent);
}
void select_desktop(desktop_t *d)
{
if (d == NULL)
return;
}

6
tree.h
View file

@ -14,13 +14,17 @@ node_t *next_leaf(node_t *);
node_t *prev_leaf(node_t *);
node_t *find_fence(node_t *, direction_t);
node_t *find_neighbor(node_t *, direction_t);
void insert_node(desktop_t *, node_t *);
void move_fence(node_t *, direction_t, fence_move_t);
void rotate_tree(node_t *, rotate_t);
void update_root_dimensions(void);
void apply_layout(desktop_t *, node_t *);
void insert_node(desktop_t *, node_t *);
void dump_tree(node_t *, char *, int);
void focus_node(desktop_t *, node_t *);
void unlink_node(desktop_t *, node_t *);
void remove_node(desktop_t *, node_t *);
void transfer_node(desktop_t *, desktop_t *, node_t *);
void select_desktop(desktop_t *);
void update_vacant_state(node_t *);
#endif