return;
}
+ if (strcmp(ctype, "workspace") == 0) {
+ current_match->workspace = regex_new(cvalue);
+ return;
+ }
+
ELOG("Unknown criterion: %s\n", ctype);
}
/* ensure that resize will take place even if pixel increment is smaller than
* height increment or width increment.
* fixes #1011 */
- if (strcmp(direction, "up") == 0 || strcmp(direction, "down") == 0 ||
- strcmp(direction, "height") == 0) {
- if (px < 0)
- px = (-px < focused_con->height_increment) ? -focused_con->height_increment : px;
- else
- px = (px < focused_con->height_increment) ? focused_con->height_increment : px;
- } else if (strcmp(direction, "left") == 0 || strcmp(direction, "right") == 0) {
- if (px < 0)
- px = (-px < focused_con->width_increment) ? -focused_con->width_increment : px;
- else
- px = (px < focused_con->width_increment) ? focused_con->width_increment : px;
+ const i3Window *window = focused_con->window;
+ if (window != NULL) {
+ if (strcmp(direction, "up") == 0 || strcmp(direction, "down") == 0 ||
+ strcmp(direction, "height") == 0) {
+ if (px < 0)
+ px = (-px < window->height_increment) ? -window->height_increment : px;
+ else
+ px = (px < window->height_increment) ? window->height_increment : px;
+ } else if (strcmp(direction, "left") == 0 || strcmp(direction, "right") == 0) {
+ if (px < 0)
+ px = (-px < window->width_increment) ? -window->width_increment : px;
+ else
+ px = (px < window->width_increment) ? window->width_increment : px;
+ }
}
if (strcmp(direction, "up") == 0) {
ysuccess(true);
}
+/*
+ * Implementation of 'resize set <px> [px] <px> [px]'.
+ *
+ */
+void cmd_size(I3_CMD, char *cwidth, char *cheight) {
+ DLOG("resizing to %sx%s px\n", cwidth, cheight);
+ // TODO: We could either handle this in the parser itself as a separate token (and make the stack typed) or we need a better way to convert a string to a number with error checking
+ int x = atoi(cwidth);
+ int y = atoi(cheight);
+ if (x <= 0 || y <= 0) {
+ ELOG("Resize failed: dimensions cannot be negative (was %sx%s)\n", cwidth, cheight);
+ return;
+ }
+
+ HANDLE_EMPTY_MATCH;
+
+ owindow *current;
+ TAILQ_FOREACH(current, &owindows, owindows) {
+ Con *floating_con;
+ if ((floating_con = con_inside_floating(current->con))) {
+ floating_resize(floating_con, x, y);
+ } else {
+ ELOG("Resize failed: %p not a floating container\n", current->con);
+ }
+ }
+
+ cmd_output->needs_tree_render = true;
+ // XXX: default reply for now, make this a better reply
+ ysuccess(true);
+}
+
/*
* Implementation of 'border normal|pixel [<n>]', 'border none|1pixel|toggle'.
*
FREE(con->mark);
con->mark_changed = true;
}
- DLOG("removed all window marks");
+ DLOG("Removed all window marks.\n");
} else {
Con *con = con_by_mark(mark);
if (con != NULL) {
FREE(con->mark);
con->mark_changed = true;
}
- DLOG("removed window mark %s\n", mark);
+ DLOG("Removed window mark \"%s\".\n", mark);
}
cmd_output->needs_tree_render = true;
count);
cmd_output->needs_tree_render = true;
- // XXX: default reply for now, make this a better reply
- ysuccess(true);
+ ysuccess(count > 0);
}
/*
/* If we only display the title without anything else, we can skip the parsing step,
* so we remove the title format altogether. */
- if (strcasecmp(format, "%title") != 0)
+ if (strcasecmp(format, "%title") != 0) {
current->con->window->title_format = sstrdup(format);
+ i3String *formatted_title = window_parse_title_format(current->con->window);
+ ewmh_update_visible_name(current->con->window->id, i3string_as_utf8(formatted_title));
+ I3STRING_FREE(formatted_title);
+ } else {
+ /* We can remove _NET_WM_VISIBLE_NAME since we don't display a custom title. */
+ ewmh_update_visible_name(current->con->window->id, NULL);
+ }
+
/* Make sure the window title is redrawn immediately. */
current->con->window->name_x_changed = true;
}
*/
void cmd_rename_workspace(I3_CMD, char *old_name, char *new_name) {
if (strncasecmp(new_name, "__", strlen("__")) == 0) {
- LOG("Cannot rename workspace to \"%s\": names starting with __ are i3-internal.", new_name);
+ LOG("Cannot rename workspace to \"%s\": names starting with __ are i3-internal.\n", new_name);
ysuccess(false);
return;
}