/** callbacks */
void(*on_remove_child)(Con *);
+ /** not a scratchpad window, auto centered scratchpad window, or
+ * user positioned scratchpad window. */
enum {
SCRATCHPAD_NONE = 0,
SCRATCHPAD_FRESH = 1,
} else if (strcmp(direction, "left") == 0) {
floating_con->rect.x -= (floating_con->rect.width - old_rect.width);
}
+
+ /* If this is a scratchpad window, don't auto center it from now on. */
+ if (floating_con->scratchpad_state == SCRATCHPAD_FRESH)
+ floating_con->scratchpad_state = SCRATCHPAD_CHANGED;
}
static bool cmd_resize_tiling_direction(I3_CMD, Con *current, char *way, char *direction, int ppt) {
/* Drag the window */
drag_pointer(con, event, XCB_NONE, BORDER_TOP /* irrelevant */, XCURSOR_CURSOR_MOVE, drag_window_callback, event);
+
+ /* 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;
+
tree_render();
}
struct resize_window_callback_params params = { corner, proportional, event };
drag_pointer(con, event, XCB_NONE, BORDER_TOP /* irrelevant */, cursor, resize_window_callback, ¶ms);
+
+ /* 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;
}
/*
con->rect = newrect;
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;
+
tree_render();
}
((output->rect.width / 2.0) - (con->rect.width / 2.0));
con->rect.y = output->rect.y +
((output->rect.height / 2.0) - (con->rect.height / 2.0));
- con->scratchpad_state = SCRATCHPAD_CHANGED;
}
/* Activate active workspace if window is from another workspace to ensure
################################################################################
# 3: Verify that 'scratchpad toggle' sends a window to the __i3_scratch
# workspace and sets the scratchpad flag to SCRATCHPAD_FRESH. The window’s size
-# and position will be changed (once!) on the next 'scratchpad show' and the
-# flag will be changed to SCRATCHPAD_CHANGED.
+# and position will be changed on the next 'scratchpad show'.
################################################################################
my ($nodes, $focus) = get_ws_content($tmp);
@scratch_nodes = @{$__i3_scratch->{floating_nodes}};
is(scalar @scratch_nodes, 1, '__i3_scratch contains our window');
-is($scratch_nodes[0]->{scratchpad_state}, 'changed', 'scratchpad_state changed');
+################################################################################
+# 6: Resizing the window should disable auto centering on scratchpad show
+################################################################################
+
+cmd 'scratchpad show';
+
+$ws = get_ws($tmp);
+is($ws->{floating_nodes}->[0]->{scratchpad_state}, 'fresh',
+ 'scratchpad_state fresh');
+
+cmd 'resize grow width 10 px';
+cmd 'scratchpad show';
+cmd 'scratchpad show';
+
+$ws = get_ws($tmp);
+$scratchrect = $ws->{floating_nodes}->[0]->{rect};
+$outputrect = $output->{rect};
+
+is($ws->{floating_nodes}->[0]->{scratchpad_state}, 'changed',
+ 'scratchpad_state changed');
+is($scratchrect->{width}, $outputrect->{width} * 0.5 + 10, 'scratch width is 50% + 10px');
+
+cmd 'resize shrink width 10 px';
+cmd 'scratchpad show';
################################################################################
-# 6: Verify that repeated 'scratchpad show' cycle through the stack, that is,
+# 7: Verify that repeated 'scratchpad show' cycle through the stack, that is,
# toggling a visible window should insert it at the bottom of the stack of the
# __i3_scratch workspace.
################################################################################