mirror of
https://github.com/vale981/bspwm
synced 2025-03-04 17:31:39 -05:00
New message: remove_desktop
This commit is contained in:
parent
e01130f5d1
commit
d9ffb7050f
10 changed files with 47 additions and 7 deletions
|
@ -159,6 +159,8 @@ The following messages are handled:
|
|||
|
||||
- `rename CURRENT_NAME NEW_NAME` — Rename the desktop named `CURRENT_NAME` to `NEW_NAME`.
|
||||
|
||||
- `remove_desktop DESKTOP_NAME ...` — Remove the given desktops.
|
||||
|
||||
- `cycle_monitor next|prev` — Select the next or previous monitor.
|
||||
|
||||
- `cycle_desktop next|prev [--skip-free|--skip-occupied]` — Select the next or previous desktop.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
_bspc()
|
||||
{
|
||||
local messages='get set list list_desktops list_monitors list_windows list_rules list_history presel cancel ratio pad focus shift swap push pull cycle nearest biggest circulate grab_pointer track_pointer ungrab_pointer toggle_fullscreen toggle_floating toggle_locked toggle_visibility close kill send_to drop_to send_to_monitor drop_to_monitor use use_monitor alternate alternate_desktop alternate_monitor add add_in rename_monitor rename cycle_monitor cycle_desktop layout cycle_layout rotate flip balance rule remove_rule put_status adopt_orphans restore_layout restore_history quit'
|
||||
local messages='get set list list_desktops list_monitors list_windows list_rules list_history presel cancel ratio pad focus shift swap push pull cycle nearest biggest circulate grab_pointer track_pointer ungrab_pointer toggle_fullscreen toggle_floating toggle_locked toggle_visibility close kill send_to drop_to send_to_monitor drop_to_monitor use use_monitor alternate alternate_desktop alternate_monitor add add_in rename_monitor rename remove_desktop cycle_monitor cycle_desktop layout cycle_layout rotate flip balance rule remove_rule put_status adopt_orphans restore_layout restore_history quit'
|
||||
|
||||
local settings='focused_border_color active_border_color normal_border_color presel_border_color focused_locked_border_color active_locked_border_color normal_locked_border_color urgent_border_color border_width window_gap split_ratio top_padding right_padding bottom_padding left_padding wm_name borderless_monocle gapless_monocle focus_follows_pointer adaptative_raise apply_shadow_property auto_alternate focus_by_distance'
|
||||
|
||||
|
|
3
bspwm.1
3
bspwm.1
|
@ -222,6 +222,9 @@ Rename the monitor named CURRENT_NAME to NEW_NAME.
|
|||
.BI rename " CURRENT_NAME NEW_NAME"
|
||||
Rename the desktop named CURRENT_NAME to NEW_NAME.
|
||||
.TP
|
||||
.BI remove_desktop " DESKTOP_NAME ..."
|
||||
Remove the given desktops.
|
||||
.TP
|
||||
.BI cycle_monitor " next|prev"
|
||||
Select the next or previous monitor.
|
||||
.TP
|
||||
|
|
11
messages.c
11
messages.c
|
@ -424,6 +424,17 @@ void process_message(char *msg, char *rsp)
|
|||
for (char *name = strtok(NULL, TOK_SEP); name != NULL; name = strtok(NULL, TOK_SEP))
|
||||
add_desktop(mon, make_desktop(name));
|
||||
return;
|
||||
} else if (strcmp(cmd, "remove_desktop") == 0) {
|
||||
for (char *name = strtok(NULL, TOK_SEP); name != NULL; name = strtok(NULL, TOK_SEP)) {
|
||||
desktop_location_t loc;
|
||||
if (locate_desktop(name, &loc)) {
|
||||
if (loc.desktop->root == NULL && loc.monitor->desk_head != loc.monitor->desk_tail)
|
||||
remove_desktop(loc.monitor, loc.desktop);
|
||||
}
|
||||
}
|
||||
desktop_show(mon->desk);
|
||||
update_current();
|
||||
return;
|
||||
} else if (strcmp(cmd, "focus") == 0) {
|
||||
if (mon->desk->focus == NULL || mon->desk->focus->client->fullscreen)
|
||||
return;
|
||||
|
|
11
rules.c
11
rules.c
|
@ -40,6 +40,17 @@ void remove_rule_by_uid(unsigned int uid)
|
|||
remove_rule(find_rule(uid));
|
||||
}
|
||||
|
||||
void prune_rules(desktop_t *d)
|
||||
{
|
||||
rule_t *r = rule_head;
|
||||
while (r != NULL) {
|
||||
rule_t *next = r->next;
|
||||
if (r->effect.desktop == d)
|
||||
remove_rule(r);
|
||||
r = next;
|
||||
}
|
||||
}
|
||||
|
||||
rule_t *find_rule(unsigned int uid)
|
||||
{
|
||||
for (rule_t *r = rule_head; r != NULL; r = r->next)
|
||||
|
|
1
rules.h
1
rules.h
|
@ -4,6 +4,7 @@
|
|||
void add_rule(rule_t *);
|
||||
void remove_rule(rule_t *);
|
||||
void remove_rule_by_uid(unsigned int);
|
||||
void prune_rules(desktop_t *);
|
||||
rule_t *find_rule(unsigned int);
|
||||
bool is_match(rule_t *, xcb_window_t);
|
||||
void handle_rules(xcb_window_t, monitor_t **, desktop_t **, bool *, bool *, bool *, bool *, bool *, bool *);
|
||||
|
|
7
tree.c
7
tree.c
|
@ -779,11 +779,8 @@ void select_desktop(monitor_t *m, desktop_t *d)
|
|||
PRINTF("select desktop %s\n", d->name);
|
||||
|
||||
if (visible) {
|
||||
for (node_t *n = first_extrema(d->root); n != NULL; n = next_leaf(n, d->root))
|
||||
window_show(n->client->window);
|
||||
|
||||
for (node_t *n = first_extrema(mon->desk->root); n != NULL; n = next_leaf(n, mon->desk->root))
|
||||
window_hide(n->client->window);
|
||||
desktop_show(d);
|
||||
desktop_hide(mon->desk);
|
||||
}
|
||||
|
||||
mon->last_desk = mon->desk;
|
||||
|
|
3
types.c
3
types.c
|
@ -4,6 +4,7 @@
|
|||
#include <xcb/xcb_event.h>
|
||||
#include "bspwm.h"
|
||||
#include "window.h"
|
||||
#include "rules.h"
|
||||
#include "ewmh.h"
|
||||
#include "settings.h"
|
||||
#include "types.h"
|
||||
|
@ -173,13 +174,13 @@ void unlink_desktop(monitor_t *m, desktop_t *d)
|
|||
m->last_desk = NULL;
|
||||
if (m->desk == d)
|
||||
m->desk = (m->last_desk == NULL ? m->desk_head : m->last_desk);
|
||||
d->next = d->prev = NULL;
|
||||
}
|
||||
|
||||
void remove_desktop(monitor_t *m, desktop_t *d)
|
||||
{
|
||||
PRINTF("remove desktop %s\n", d->name);
|
||||
|
||||
prune_rules(d);
|
||||
unlink_desktop(m, d);
|
||||
empty_desktop(d);
|
||||
free(d);
|
||||
|
|
12
window.c
12
window.c
|
@ -557,6 +557,18 @@ void toggle_visibility(void)
|
|||
update_current();
|
||||
}
|
||||
|
||||
void desktop_show(desktop_t *d)
|
||||
{
|
||||
for (node_t *n = first_extrema(d->root); n != NULL; n = next_leaf(n, d->root))
|
||||
window_show(n->client->window);
|
||||
}
|
||||
|
||||
void desktop_hide(desktop_t *d)
|
||||
{
|
||||
for (node_t *n = first_extrema(d->root); n != NULL; n = next_leaf(n, d->root))
|
||||
window_hide(n->client->window);
|
||||
}
|
||||
|
||||
void enable_motion_recorder(void)
|
||||
{
|
||||
window_raise(motion_recorder);
|
||||
|
|
2
window.h
2
window.h
|
@ -42,6 +42,8 @@ void window_set_visibility(xcb_window_t, bool);
|
|||
void window_hide(xcb_window_t);
|
||||
void window_show(xcb_window_t);
|
||||
void toggle_visibility(void);
|
||||
void desktop_show(desktop_t *);
|
||||
void desktop_hide(desktop_t *);
|
||||
void enable_motion_recorder(void);
|
||||
void disable_motion_recorder(void);
|
||||
void clear_input_focus(void);
|
||||
|
|
Loading…
Add table
Reference in a new issue