From dccb5e7be233ef7db62d4a95a824cb84a4c1ffe3 Mon Sep 17 00:00:00 2001 From: Bastien Dejean Date: Sat, 1 Aug 2015 14:37:15 +0200 Subject: [PATCH] Add a few subscriber events --- desktop.c | 7 ++++++- messages.c | 33 ++++++++++++++++++++++++++++----- monitor.c | 1 + subscribe.h | 33 ++++++++++++++++++++++----------- tree.c | 2 ++ window.c | 4 ++-- 6 files changed, 61 insertions(+), 19 deletions(-) diff --git a/desktop.c b/desktop.c index fe5dbad..888ba8d 100644 --- a/desktop.c +++ b/desktop.c @@ -42,6 +42,7 @@ void focus_desktop(monitor_t *m, desktop_t *d) return; PRINTF("focus desktop %s\n", d->name); + put_status(SBSC_MASK_DESKTOP_FOCUS, "desktop_focus %s %s\n", m->name, d->name); show_desktop(d); hide_desktop(mon->desk); @@ -72,6 +73,7 @@ desktop_t *closest_desktop(monitor_t *m, desktop_t *d, cycle_dir_t dir, desktop_ void change_layout(monitor_t *m, desktop_t *d, layout_t l) { + put_status(SBSC_MASK_DESKTOP_LAYOUT, "desktop_layout %s %s %s\n", m->name, d->name, l==LAYOUT_TILED?"tiled":"monocle"); d->layout = l; arrange(m, d); if (d == m->desk) @@ -83,6 +85,8 @@ void transfer_desktop(monitor_t *ms, monitor_t *md, desktop_t *d) if (ms == md) return; + put_status(SBSC_MASK_DESKTOP_TRANSFER, "desktop_transfer %s %s %s\n", ms->name, d->name, md->name); + desktop_t *dd = ms->desk; unlink_desktop(ms, d); insert_desktop(md, d); @@ -148,7 +152,7 @@ void insert_desktop(monitor_t *m, desktop_t *d) void add_desktop(monitor_t *m, desktop_t *d) { PRINTF("add desktop %s\n", d->name); - put_status(SBSC_MASK_DESKTOP_ADD, "desktop_add %s\n", d->name); + put_status(SBSC_MASK_DESKTOP_ADD, "desktop_add %s %s\n", m->name, d->name); insert_desktop(m, d); num_desktops++; @@ -218,6 +222,7 @@ void swap_desktops(monitor_t *m1, desktop_t *d1, monitor_t *m2, desktop_t *d2) return; PRINTF("swap desktops %s %s\n", d1->name, d2->name); + put_status(SBSC_MASK_DESKTOP_SWAP, "desktop_swap %s %s %s %s\n", m1->name, d1->name, m2->name, d2->name); bool d1_focused = (m1->desk == d1); bool d2_focused = (m2->desk == d2); diff --git a/messages.c b/messages.c index 3e4aee2..02d809b 100644 --- a/messages.c +++ b/messages.c @@ -433,7 +433,7 @@ int cmd_desktop(char **args, int num) num--, args++; if (num < 1) return MSG_SYNTAX; - put_status(SBSC_MASK_DESKTOP_RENAME, "desktop_rename %s %s\n", trg.desktop->name, *args); + put_status(SBSC_MASK_DESKTOP_RENAME, "desktop_rename %s %s %s\n", trg.monitor->name, trg.desktop->name, *args); snprintf(trg.desktop->name, sizeof(trg.desktop->name), "%s", *args); ewmh_update_desktop_names(); put_status(SBSC_MASK_REPORT); @@ -554,6 +554,7 @@ int cmd_monitor(char **args, int num) return MSG_SYNTAX; desktop_t *d = trg.monitor->desk_head; while (num > 0 && d != NULL) { + put_status(SBSC_MASK_DESKTOP_RENAME, "desktop_rename %s %s %s\n", trg.monitor->name, d->name, *args); snprintf(d->name, sizeof(d->name), "%s", *args); initialize_desktop(d); arrange(trg.monitor, d); @@ -1162,22 +1163,44 @@ bool parse_subscriber_mask(char *s, subscriber_mask_t *mask) *mask = SBSC_MASK_WINDOW_MANAGE; } else if (streq("window_unmanage", s)) { *mask = SBSC_MASK_WINDOW_UNMANAGE; - } else if (streq("window_urgent", s)) { - *mask = SBSC_MASK_WINDOW_URGENT; - } else if (streq("window_fullscreen", s)) { - *mask = SBSC_MASK_WINDOW_FULLSCREEN; + } else if (streq("window_swap", s)) { + *mask = SBSC_MASK_WINDOW_SWAP; + } else if (streq("window_transfer", s)) { + *mask = SBSC_MASK_WINDOW_TRANSFER; + } else if (streq("window_focus", s)) { + *mask = SBSC_MASK_WINDOW_FOCUS; + } else if (streq("window_resize", s)) { + *mask = SBSC_MASK_WINDOW_RESIZE; + } else if (streq("window_move", s)) { + *mask = SBSC_MASK_WINDOW_MOVE; + } else if (streq("window_state", s)) { + *mask = SBSC_MASK_WINDOW_STATE; } else if (streq("desktop_add", s)) { *mask = SBSC_MASK_DESKTOP_ADD; } else if (streq("desktop_rename", s)) { *mask = SBSC_MASK_DESKTOP_RENAME; } else if (streq("desktop_remove", s)) { *mask = SBSC_MASK_DESKTOP_REMOVE; + } else if (streq("desktop_swap", s)) { + *mask = SBSC_MASK_DESKTOP_SWAP; + } else if (streq("desktop_transfer", s)) { + *mask = SBSC_MASK_DESKTOP_TRANSFER; + } else if (streq("desktop_focus", s)) { + *mask = SBSC_MASK_DESKTOP_FOCUS; + } else if (streq("desktop_layout", s)) { + *mask = SBSC_MASK_DESKTOP_LAYOUT; + } else if (streq("desktop_state", s)) { + *mask = SBSC_MASK_DESKTOP_STATE; } else if (streq("monitor_add", s)) { *mask = SBSC_MASK_MONITOR_ADD; } else if (streq("monitor_rename", s)) { *mask = SBSC_MASK_MONITOR_RENAME; } else if (streq("monitor_remove", s)) { *mask = SBSC_MASK_MONITOR_REMOVE; + } else if (streq("monitor_focus", s)) { + *mask = SBSC_MASK_MONITOR_FOCUS; + } else if (streq("monitor_resize", s)) { + *mask = SBSC_MASK_MONITOR_RESIZE; } else if (streq("report", s)) { *mask = SBSC_MASK_REPORT; } else { diff --git a/monitor.c b/monitor.c index a23d2d6..8f2edd8 100644 --- a/monitor.c +++ b/monitor.c @@ -132,6 +132,7 @@ void focus_monitor(monitor_t *m) return; PRINTF("focus monitor %s\n", m->name); + put_status(SBSC_MASK_MONITOR_FOCUS, "monitor_focus %s\n", m->name); mon = m; diff --git a/subscribe.h b/subscribe.h index afdb9cf..505e357 100644 --- a/subscribe.h +++ b/subscribe.h @@ -30,17 +30,28 @@ typedef enum { SBSC_MASK_MONITOR_ADD = 1 << 1, SBSC_MASK_MONITOR_RENAME = 1 << 2, SBSC_MASK_MONITOR_REMOVE = 1 << 3, - SBSC_MASK_DESKTOP_ADD = 1 << 4, - SBSC_MASK_DESKTOP_RENAME = 1 << 5, - SBSC_MASK_DESKTOP_REMOVE = 1 << 6, - SBSC_MASK_WINDOW_MANAGE = 1 << 7, - SBSC_MASK_WINDOW_UNMANAGE = 1 << 8, - SBSC_MASK_WINDOW_URGENT = 1 << 9, - SBSC_MASK_WINDOW_FULLSCREEN = 1 << 10, - SBSC_MASK_MONITOR = (1 << 4) - (1 << 1), - SBSC_MASK_DESKTOP = (1 << 7) - (1 << 4), - SBSC_MASK_WINDOW = (1 << 11) - (1 << 7), - SBSC_MASK_ALL = (1 << 11) - 1 + SBSC_MASK_MONITOR_FOCUS = 1 << 4, + SBSC_MASK_MONITOR_RESIZE = 1 << 5, + SBSC_MASK_DESKTOP_ADD = 1 << 6, + SBSC_MASK_DESKTOP_RENAME = 1 << 7, + SBSC_MASK_DESKTOP_REMOVE = 1 << 8, + SBSC_MASK_DESKTOP_SWAP = 1 << 9, + SBSC_MASK_DESKTOP_TRANSFER = 1 << 10, + SBSC_MASK_DESKTOP_FOCUS = 1 << 11, + SBSC_MASK_DESKTOP_LAYOUT = 1 << 12, + SBSC_MASK_DESKTOP_STATE = 1 << 13, + SBSC_MASK_WINDOW_MANAGE = 1 << 14, + SBSC_MASK_WINDOW_UNMANAGE = 1 << 15, + SBSC_MASK_WINDOW_SWAP = 1 << 16, + SBSC_MASK_WINDOW_TRANSFER = 1 << 17, + SBSC_MASK_WINDOW_FOCUS = 1 << 18, + SBSC_MASK_WINDOW_RESIZE = 1 << 19, + SBSC_MASK_WINDOW_MOVE = 1 << 20, + SBSC_MASK_WINDOW_STATE = 1 << 21, + SBSC_MASK_MONITOR = (1 << 6) - (1 << 1), + SBSC_MASK_DESKTOP = (1 << 14) - (1 << 6), + SBSC_MASK_WINDOW = (1 << 22) - (1 << 14), + SBSC_MASK_ALL = (1 << 22) - 1 } subscriber_mask_t; subscriber_list_t *make_subscriber_list(FILE *stream, int field); diff --git a/tree.c b/tree.c index 206dcf1..c409a5b 100644 --- a/tree.c +++ b/tree.c @@ -351,6 +351,7 @@ void focus_node(monitor_t *m, desktop_t *d, node_t *n) } PRINTF("focus node %X\n", n->client->window); + put_status(SBSC_MASK_WINDOW_FOCUS, "window_focus 0x%X\n", n->client->window); history_add(m, d, n); set_input_focus(n); @@ -1059,6 +1060,7 @@ bool transfer_node(monitor_t *ms, desktop_t *ds, node_t *ns, monitor_t *md, desk return false; PRINTF("transfer node %X\n", ns->client->window); + put_status(SBSC_MASK_WINDOW_TRANSFER, "window_transfer %s %s 0x%X %s %s 0x%X\n", ms->name, ds->name, ns->client->window, md->name, dd->name, nd!=NULL?nd->client->window:0); bool focused = (ns == mon->desk->focus); bool active = (ns == ds->focus); diff --git a/window.c b/window.c index abba3ff..2190b50 100644 --- a/window.c +++ b/window.c @@ -386,7 +386,7 @@ void set_fullscreen(node_t *n, bool value) client_t *c = n->client; PRINTF("fullscreen %X: %s\n", c->window, BOOLSTR(value)); - put_status(SBSC_MASK_WINDOW_FULLSCREEN, "window_fullscreen %s 0x%X\n", ONOFFSTR(value), c->window); + put_status(SBSC_MASK_WINDOW_STATE, "window_state fullscreen %s 0x%X\n", ONOFFSTR(value), c->window); c->fullscreen = value; if (value) @@ -487,7 +487,7 @@ void set_urgency(monitor_t *m, desktop_t *d, node_t *n, bool value) n->client->urgent = value; window_draw_border(n, d->focus == n, m == mon); - put_status(SBSC_MASK_WINDOW_URGENT, "window_urgent %s 0x%X\n", ONOFFSTR(value), n->client->window); + put_status(SBSC_MASK_WINDOW_STATE, "window_state urgent %s 0x%X\n", ONOFFSTR(value), n->client->window); put_status(SBSC_MASK_REPORT); }