Skip to content
This repository has been archived by the owner on Apr 18, 2023. It is now read-only.

Commit

Permalink
Merge remote-tracking branch 'vanilla/next' into gaps-next
Browse files Browse the repository at this point in the history
  • Loading branch information
Airblader committed Apr 11, 2020
2 parents a087d6b + 62279ab commit b530a07
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 42 deletions.
52 changes: 24 additions & 28 deletions src/click.c
Expand Up @@ -160,26 +160,20 @@ static void route_click(Con *con, xcb_button_press_event_t *event, const bool mo
if (con->parent->type == CT_DOCKAREA)
goto done;

const bool is_left_or_right_click = (event->detail == XCB_BUTTON_CLICK_LEFT ||
event->detail == XCB_BUTTON_CLICK_RIGHT);

/* if the user has bound an action to this click, it should override the
* default behavior. */
if (dest == CLICK_DECORATION || dest == CLICK_INSIDE || dest == CLICK_BORDER) {
Binding *bind = get_binding_from_xcb_event((xcb_generic_event_t *)event);

if (bind != NULL && ((dest == CLICK_DECORATION && !bind->exclude_titlebar) ||
(dest == CLICK_INSIDE && bind->whole_window) ||
(dest == CLICK_BORDER && bind->border))) {
CommandResult *result = run_binding(bind, con);

/* ASYNC_POINTER eats the event */
xcb_allow_events(conn, XCB_ALLOW_ASYNC_POINTER, event->time);
xcb_flush(conn);
Binding *bind = get_binding_from_xcb_event((xcb_generic_event_t *)event);
if (bind && ((dest == CLICK_DECORATION && !bind->exclude_titlebar) ||
(dest == CLICK_INSIDE && bind->whole_window) ||
(dest == CLICK_BORDER && bind->border))) {
CommandResult *result = run_binding(bind, con);

/* ASYNC_POINTER eats the event */
xcb_allow_events(conn, XCB_ALLOW_ASYNC_POINTER, event->time);
xcb_flush(conn);

command_result_free(result);
return;
}
command_result_free(result);
return;
}

/* There is no default behavior for button release events so we are done. */
Expand Down Expand Up @@ -207,14 +201,16 @@ static void route_click(Con *con, xcb_button_press_event_t *event, const bool mo
const bool proportional = (event->state & XCB_KEY_BUT_MASK_SHIFT) == XCB_KEY_BUT_MASK_SHIFT;
const bool in_stacked = (con->parent->layout == L_STACKED || con->parent->layout == L_TABBED);
const bool was_focused = focused == con;
const bool is_left_click = (event->detail == XCB_BUTTON_CLICK_LEFT);
const bool is_right_click = (event->detail == XCB_BUTTON_CLICK_RIGHT);
const bool is_left_or_right_click = (is_left_click || is_right_click);
const bool is_scroll = (event->detail == XCB_BUTTON_SCROLL_UP ||
event->detail == XCB_BUTTON_SCROLL_DOWN ||
event->detail == XCB_BUTTON_SCROLL_LEFT ||
event->detail == XCB_BUTTON_SCROLL_RIGHT);

/* 1: see if the user scrolled on the decoration of a stacked/tabbed con */
if (in_stacked &&
dest == CLICK_DECORATION &&
(event->detail == XCB_BUTTON_SCROLL_UP ||
event->detail == XCB_BUTTON_SCROLL_DOWN ||
event->detail == XCB_BUTTON_SCROLL_LEFT ||
event->detail == XCB_BUTTON_SCROLL_RIGHT)) {
if (in_stacked && dest == CLICK_DECORATION && is_scroll) {
DLOG("Scrolling on a window decoration\n");
/* Use the focused child of the tabbed / stacked container, not the
* container the user scrolled on. */
Expand All @@ -235,15 +231,15 @@ static void route_click(Con *con, xcb_button_press_event_t *event, const bool mo
Con *fs = con_get_fullscreen_covering_ws(ws);
if (floatingcon != NULL && fs != con) {
/* 4: floating_modifier plus left mouse button drags */
if (mod_pressed && event->detail == XCB_BUTTON_CLICK_LEFT) {
if (mod_pressed && is_left_click) {
floating_drag_window(floatingcon, event, false);
return;
}

/* 5: resize (floating) if this was a (left or right) click on the
* left/right/bottom border, or a right click on the decoration.
* also try resizing (tiling) if possible */
if (mod_pressed && event->detail == XCB_BUTTON_CLICK_RIGHT) {
if (mod_pressed && is_right_click) {
DLOG("floating resize due to floatingmodifier\n");
floating_resize_window(floatingcon, proportional, event);
return;
Expand All @@ -257,7 +253,7 @@ static void route_click(Con *con, xcb_button_press_event_t *event, const bool mo
goto done;
}

if (dest == CLICK_DECORATION && event->detail == XCB_BUTTON_CLICK_RIGHT) {
if (dest == CLICK_DECORATION && is_right_click) {
DLOG("floating resize due to decoration right click\n");
floating_resize_window(floatingcon, proportional, event);
return;
Expand All @@ -271,7 +267,7 @@ static void route_click(Con *con, xcb_button_press_event_t *event, const bool mo

/* 6: dragging, if this was a click on a decoration (which did not lead
* to a resize) */
if (dest == CLICK_DECORATION && event->detail == XCB_BUTTON_CLICK_LEFT) {
if (dest == CLICK_DECORATION && is_left_click) {
floating_drag_window(floatingcon, event, !was_focused);
return;
}
Expand All @@ -280,7 +276,7 @@ static void route_click(Con *con, xcb_button_press_event_t *event, const bool mo
}

/* 7: floating modifier pressed, initiate a resize */
if (dest == CLICK_INSIDE && mod_pressed && event->detail == XCB_BUTTON_CLICK_RIGHT) {
if (dest == CLICK_INSIDE && mod_pressed && is_right_click) {
floating_mod_on_tiled_client(con, event);
/* Avoid propagating events to clients, since the user expects
* $mod + click to be handled by i3. */
Expand Down
4 changes: 2 additions & 2 deletions src/commands.c
Expand Up @@ -766,7 +766,7 @@ void cmd_border(I3_CMD, const char *border_style_str, long border_width) {
*/
void cmd_nop(I3_CMD, const char *comment) {
LOG("-------------------------------------------------\n");
LOG(" NOP: %s\n", comment);
LOG(" NOP: %.4000s\n", comment);
LOG("-------------------------------------------------\n");
ysuccess(true);
}
Expand Down Expand Up @@ -1526,7 +1526,7 @@ void cmd_move_direction(I3_CMD, const char *direction_str, long move_px) {
break;
}

floating_reposition(current->con->parent, newrect);
cmd_output->needs_tree_render = floating_reposition(current->con->parent, newrect);
} else {
tree_move(current->con, direction);
cmd_output->needs_tree_render = true;
Expand Down
2 changes: 1 addition & 1 deletion src/commands_parser.c
Expand Up @@ -263,7 +263,7 @@ char *parse_string(const char **walk, bool as_word) {
* Free the returned CommandResult with command_result_free().
*/
CommandResult *parse_command(const char *input, yajl_gen gen, ipc_client *client) {
DLOG("COMMAND: *%s*\n", input);
DLOG("COMMAND: *%.4000s*\n", input);
state = INITIAL;
CommandResult *result = scalloc(1, sizeof(CommandResult));

Expand Down
17 changes: 10 additions & 7 deletions src/floating.c
Expand Up @@ -514,9 +514,15 @@ bool floating_maybe_reassign_ws(Con *con) {
Con *content = output_get_content(output->con);
Con *ws = TAILQ_FIRST(&(content->focus_head));
DLOG("Moving con %p / %s to workspace %p / %s\n", con, con->name, ws, ws->name);
Con *needs_focus = con_descend_focused(con);
if (!con_inside_focused(needs_focus)) {
needs_focus = NULL;
}
con_move_to_workspace(con, ws, false, true, false);
workspace_show(ws);
con_activate(con_descend_focused(con));
if (needs_focus) {
workspace_show(ws);
con_activate(needs_focus);
}
return true;
}

Expand Down Expand Up @@ -745,16 +751,13 @@ bool floating_reposition(Con *con, Rect newrect) {

con->rect = newrect;

bool reassigned = floating_maybe_reassign_ws(con);
floating_maybe_reassign_ws(con);

/* If this is a scratchpad window, don't auto center it from now on. */
if (con->scratchpad_state == SCRATCHPAD_FRESH)
con->scratchpad_state = SCRATCHPAD_CHANGED;

/* Workspace change will already result in a tree_render. */
if (!reassigned) {
tree_render();
}
tree_render();
return true;
}

Expand Down
5 changes: 2 additions & 3 deletions src/ipc.c
Expand Up @@ -217,15 +217,14 @@ void ipc_shutdown(shutdown_reason_t reason, int exempt_fd) {
}

/*
* Executes the command and returns whether it could be successfully parsed
* or not (at the moment, always returns true).
* Executes the given command.
*
*/
IPC_HANDLER(run_command) {
/* To get a properly terminated buffer, we copy
* message_size bytes out of the buffer */
char *command = sstrndup((const char *)message, message_size);
LOG("IPC: received: *%s*\n", command);
LOG("IPC: received: *%.4000s*\n", command);
yajl_gen gen = yajl_gen_alloc(NULL);

CommandResult *result = parse_command(command, gen, client);
Expand Down
2 changes: 1 addition & 1 deletion src/window.c
Expand Up @@ -288,7 +288,7 @@ bool window_update_normal_hints(i3Window *win, xcb_get_property_reply_t *reply,
ASSIGN_IF_CHANGED(win->max_width, max_width);
ASSIGN_IF_CHANGED(win->max_height, max_height);
} else {
DLOG("Clearing maximum size \n");
DLOG("Clearing maximum size\n");

ASSIGN_IF_CHANGED(win->max_width, 0);
ASSIGN_IF_CHANGED(win->max_height, 0);
Expand Down

0 comments on commit b530a07

Please sign in to comment.