mirror of
https://github.com/vale981/bspwm
synced 2025-03-05 09:51:38 -05:00
A few messages
This commit is contained in:
parent
09a5b43006
commit
48a07d40d9
7 changed files with 94 additions and 21 deletions
3
bspwm.c
3
bspwm.c
|
@ -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);
|
||||
|
||||
|
|
4
bspwm.h
4
bspwm.h
|
@ -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);
|
||||
|
|
70
messages.c
70
messages.c
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
27
tree.c
|
@ -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
6
tree.h
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue