void view_destroy(struct view *view);
enum view_axis view_axis_parse(const char *direction);
-enum view_edge view_edge_parse(const char *direction);
+enum view_edge view_edge_parse(const char *direction, bool tiled, bool any);
enum view_placement_policy view_placement_parse(const char *policy);
/* xdg.c */
case ACTION_TYPE_GROW_TO_EDGE:
case ACTION_TYPE_SHRINK_TO_EDGE:
if (!strcmp(argument, "direction")) {
- enum view_edge edge = view_edge_parse(content);
- bool allow_center = action->type == ACTION_TYPE_TOGGLE_SNAP_TO_EDGE
- || action->type == ACTION_TYPE_SNAP_TO_EDGE;
- if ((edge == VIEW_EDGE_CENTER && !allow_center)
- || edge == VIEW_EDGE_INVALID || edge == VIEW_EDGE_ALL) {
+ bool tiled = (action->type == ACTION_TYPE_TOGGLE_SNAP_TO_EDGE
+ || action->type == ACTION_TYPE_SNAP_TO_EDGE);
+ enum view_edge edge = view_edge_parse(content, tiled, /*any*/ false);
+ if (edge == VIEW_EDGE_INVALID) {
wlr_log(WLR_ERROR, "Invalid argument for action %s: '%s' (%s)",
action_names[action->type], argument, content);
} else {
goto cleanup;
}
if (!strcmp(argument, "direction")) {
- enum view_edge edge = view_edge_parse(content);
- if (edge == VIEW_EDGE_CENTER || edge == VIEW_EDGE_ALL) {
+ enum view_edge edge = view_edge_parse(content,
+ /*tiled*/ false, /*any*/ false);
+ if (edge == VIEW_EDGE_INVALID) {
wlr_log(WLR_ERROR, "Invalid argument for action %s: '%s' (%s)",
action_names[action->type], argument, content);
} else {
} else if (!strcasecmp(key, "omnipresent")) {
query->omnipresent = parse_three_state(content);
} else if (!strcasecmp(key, "tiled")) {
- query->tiled = view_edge_parse(content);
+ query->tiled = view_edge_parse(content,
+ /*tiled*/ true, /*any*/ true);
} else if (!strcasecmp(key, "tiled_region")) {
xstrdup_replace(query->tiled_region, content);
} else if (!strcasecmp(key, "desktop")) {
}
enum view_edge
-view_edge_parse(const char *direction)
+view_edge_parse(const char *direction, bool tiled, bool any)
{
if (!direction) {
return VIEW_EDGE_INVALID;
return VIEW_EDGE_RIGHT;
} else if (!strcasecmp(direction, "down")) {
return VIEW_EDGE_DOWN;
- } else if (!strcasecmp(direction, "center")) {
- return VIEW_EDGE_CENTER;
- } else if (!strcasecmp(direction, "any")) {
- return VIEW_EDGE_ALL;
- } else {
- return VIEW_EDGE_INVALID;
}
+
+ if (any) {
+ if (!strcasecmp(direction, "any")) {
+ return VIEW_EDGE_ALL;
+ }
+ }
+
+ if (tiled) {
+ if (!strcasecmp(direction, "center")) {
+ return VIEW_EDGE_CENTER;
+ }
+ }
+
+ return VIEW_EDGE_INVALID;
}
enum view_placement_policy