diff options
Diffstat (limited to 'sway/handlers.c')
-rw-r--r-- | sway/handlers.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/sway/handlers.c b/sway/handlers.c index 28fa9564..267a8f3a 100644 --- a/sway/handlers.c +++ b/sway/handlers.c @@ -19,6 +19,7 @@ #include "input_state.h" #include "resize.h" #include "extensions.h" +#include "criteria.h" // Event should be sent to client #define EVENT_PASSTHROUGH false @@ -172,6 +173,21 @@ static bool handle_view_created(wlc_handle handle) { set_focused_container(newview); swayc_t *output = swayc_parent_by_type(newview, C_OUTPUT); arrange_windows(output, -1, -1); + // check if it matches for_window in config and execute if so + list_t *criteria = criteria_for(newview); + for (int i = 0; i < criteria->length; i++) { + struct criteria *crit = criteria->items[i]; + sway_log(L_DEBUG, "for_window '%s' matches new view %p, cmd: '%s'", + crit->crit_raw, newview, crit->cmdlist); + struct cmd_results *res = handle_command(crit->cmdlist); + if (res->status != CMD_SUCCESS) { + sway_log(L_ERROR, "Command '%s' failed: %s", res->input, res->error); + } + free_cmd_results(res); + // view must be focused for commands to affect it, so always + // refocus in-between command lists + set_focused_container(newview); + } } return true; } |