#include <float.h>
#include <stdarg.h>
-#ifdef I3_ASAN_ENABLED
-#include <sanitizer/lsan_interface.h>
-#endif
-
#include "shmlog.h"
// Macros to make the YAJL API a bit easier to use.
ysuccess(true);
}
-/**
+/*
* Implementation of 'move [window|container] [to] workspace back_and_forth'.
*
*/
} else {
floating_con->rect.width += px;
}
- floating_check_size(floating_con);
+ floating_check_size(floating_con, orientation == VERT);
/* Did we actually resize anything or did the size constraints prevent us?
* If we could not resize, exit now to not move the window. */
if (ppt != 0.0) {
new_current_percent = current->percent + ppt;
} else {
- new_current_percent = px_resize_to_percent(current, px);
- ppt = new_current_percent - current->percent;
+ /* Convert px change to change in percentages */
+ ppt = (double)px / (double)con_rect_size_in_orientation(current->parent);
+ new_current_percent = current->percent + ppt;
}
subtract_percent = ppt / (children - 1);
if (ppt < 0.0 && new_current_percent < percent_for_1px(current)) {
const double ppt = (double)resize_ppt / 100.0;
if (!cmd_resize_tiling_width_height(current_match, cmd_output,
current->con, direction,
- resize_px, ppt))
+ resize_px, ppt)) {
+ yerror("Cannot resize.");
return;
+ }
} else {
if (!cmd_resize_tiling_direction(current_match, cmd_output,
current->con, direction,
- resize_px, resize_ppt))
+ resize_px, resize_ppt)) {
+ yerror("Cannot resize.");
return;
+ }
}
}
}
void cmd_resize_set(I3_CMD, long cwidth, const char *mode_width, long cheight, const char *mode_height) {
DLOG("resizing to %ld %s x %ld %s\n", cwidth, mode_width, cheight, mode_height);
if (cwidth < 0 || cheight < 0) {
- ELOG("Resize failed: dimensions cannot be negative (was %ld %s x %ld %s)\n", cwidth, mode_width, cheight, mode_height);
+ yerror("Dimensions cannot be negative.");
return;
}
char *buf = NULL;
ssize_t len;
if ((len = slurp(path, &buf)) < 0) {
+ yerror("Could not slurp \"%s\".", path);
/* slurp already logged an error. */
goto out;
}
// is not executed yet and will be batched with append_layout’s
// needs_tree_render after the parser finished. We should check if that is
// necessary at all.
- render_con(croot, false);
+ render_con(croot);
restore_open_placeholder_windows(parent);
}
Output *current_output = get_output_for_con(ws);
- if (current_output == NULL) {
- yerror("Cannot get current output. This is a bug in i3.");
- return;
- }
-
Output *target_output = get_output_from_string(current_output, name);
if (!target_output) {
yerror("Could not get output from string \"%s\"", name);
return;
}
- bool success = workspace_move_to_output(ws, target_output);
- if (!success) {
- yerror("Failed to move workspace to output.");
- return;
- }
+ workspace_move_to_output(ws, target_output);
}
cmd_output->needs_tree_render = true;
layout_t layout;
if (!layout_from_name(layout_str, &layout)) {
- ELOG("Unknown layout \"%s\", this is a mismatch between code and parser spec.\n", layout_str);
+ yerror("Unknown layout \"%s\", this is a mismatch between code and parser spec.", layout_str);
return;
}
*/
void cmd_exit(I3_CMD) {
LOG("Exiting due to user command.\n");
-#ifdef I3_ASAN_ENABLED
- __lsan_do_leak_check();
-#endif
- ipc_shutdown(SHUTDOWN_REASON_EXIT);
- unlink(config.ipc_socket_path);
- xcb_disconnect(conn);
exit(0);
/* unreached */
LOG("reloading\n");
kill_nagbar(&config_error_nagbar_pid, false);
kill_nagbar(&command_error_nagbar_pid, false);
- load_configuration(conn, NULL, true);
+ load_configuration(NULL, true);
x_set_i3_atoms();
/* Send an IPC event just in case the ws names have changed */
ipc_send_workspace_event("reload", NULL, NULL);
*
*/
void cmd_focus_output(I3_CMD, const char *name) {
- owindow *current;
-
- DLOG("name = %s\n", name);
-
HANDLE_EMPTY_MATCH;
- /* get the output */
- Output *current_output = NULL;
- Output *output;
-
- TAILQ_FOREACH(current, &owindows, owindows)
- current_output = get_output_for_con(current->con);
- assert(current_output != NULL);
+ if (TAILQ_EMPTY(&owindows)) {
+ ysuccess(true);
+ return;
+ }
- output = get_output_from_string(current_output, name);
+ Output *current_output = get_output_for_con(TAILQ_FIRST(&owindows)->con);
+ Output *output = get_output_from_string(current_output, name);
if (!output) {
- yerror("No such output found.");
+ yerror("Output %s not found.", name);
return;
}
workspace_show(ws);
cmd_output->needs_tree_render = true;
- // XXX: default reply for now, make this a better reply
ysuccess(true);
}
* Implementation of 'bar mode dock|hide|invisible|toggle [<bar_id>]'
*
*/
-bool cmd_bar_mode(const char *bar_mode, const char *bar_id) {
+static bool cmd_bar_mode(const char *bar_mode, const char *bar_id) {
int mode = M_DOCK;
bool toggle = false;
if (strcmp(bar_mode, "dock") == 0)
* Implementation of 'bar hidden_state hide|show|toggle [<bar_id>]'
*
*/
-bool cmd_bar_hidden_state(const char *bar_hidden_state, const char *bar_id) {
+static bool cmd_bar_hidden_state(const char *bar_hidden_state, const char *bar_id) {
int hidden_state = S_SHOW;
bool toggle = false;
if (strcmp(bar_hidden_state, "hide") == 0)