The command to resize a floating window now checks the minimum and maximum size.
This commit is contained in:
parent
d2b533328d
commit
f41fa1baa1
|
@ -99,6 +99,14 @@ void floating_drag_window(Con *con, const xcb_button_press_event_t *event);
|
||||||
*/
|
*/
|
||||||
void floating_resize_window(Con *con, const bool proportional, const xcb_button_press_event_t *event);
|
void floating_resize_window(Con *con, const bool proportional, const xcb_button_press_event_t *event);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the windows is created or resized
|
||||||
|
* This function resize the windows if is size if higher or lower to the
|
||||||
|
* limits.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void floating_checkSize(Con *floating_con);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/**
|
/**
|
||||||
* Changes focus in the given direction for floating clients.
|
* Changes focus in the given direction for floating clients.
|
||||||
|
|
|
@ -575,6 +575,7 @@ void cmd_move_con_to_workspace_number(I3_CMD, char *which) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cmd_resize_floating(I3_CMD, char *way, char *direction, Con *floating_con, int px) {
|
static void cmd_resize_floating(I3_CMD, char *way, char *direction, Con *floating_con, int px) {
|
||||||
|
|
||||||
LOG("floating resize\n");
|
LOG("floating resize\n");
|
||||||
if (strcmp(direction, "up") == 0) {
|
if (strcmp(direction, "up") == 0) {
|
||||||
floating_con->rect.y -= px;
|
floating_con->rect.y -= px;
|
||||||
|
@ -587,6 +588,8 @@ static void cmd_resize_floating(I3_CMD, char *way, char *direction, Con *floatin
|
||||||
} else {
|
} else {
|
||||||
floating_con->rect.width += px;
|
floating_con->rect.width += px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
floating_checkSize(floating_con);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool cmd_resize_tiling_direction(I3_CMD, Con *current, char *way, char *direction, int ppt) {
|
static bool cmd_resize_tiling_direction(I3_CMD, Con *current, char *way, char *direction, int ppt) {
|
||||||
|
|
|
@ -28,6 +28,46 @@ static Rect total_outputs_dimensions(void) {
|
||||||
return outputs_dimensions;
|
return outputs_dimensions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void floating_checkSize(Con *floating_con) {
|
||||||
|
|
||||||
|
/* Define reasonable minimal and maximal sizes for floating windows */
|
||||||
|
const int floating_sane_min_height = 50;
|
||||||
|
const int floating_sane_min_width = 75;
|
||||||
|
Rect floating_sane_max_dimensions;
|
||||||
|
|
||||||
|
/* Unless user requests otherwise (-1), ensure width/height do not exceed
|
||||||
|
* configured maxima or, if unconfigured, limit to combined width of all
|
||||||
|
* outputs */
|
||||||
|
if (config.floating_minimum_height != -1) {
|
||||||
|
if (config.floating_minimum_height == 0)
|
||||||
|
floating_con->rect.height = max(floating_con->rect.height, floating_sane_min_height);
|
||||||
|
else
|
||||||
|
floating_con->rect.height = max(floating_con->rect.height, config.floating_minimum_height);
|
||||||
|
}
|
||||||
|
if (config.floating_minimum_width != -1) {
|
||||||
|
if (config.floating_minimum_width == 0)
|
||||||
|
floating_con->rect.width = max(floating_con->rect.width, floating_sane_min_width);
|
||||||
|
else
|
||||||
|
floating_con->rect.width = max(floating_con->rect.width, config.floating_minimum_width);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Unless user requests otherwise (-1), raise the width/height to
|
||||||
|
* reasonable minimum dimensions */
|
||||||
|
floating_sane_max_dimensions = total_outputs_dimensions();
|
||||||
|
if (config.floating_maximum_height != -1) {
|
||||||
|
if (config.floating_maximum_height == 0)
|
||||||
|
floating_con->rect.height = min(floating_con->rect.height, floating_sane_max_dimensions.height);
|
||||||
|
else
|
||||||
|
floating_con->rect.height = min(floating_con->rect.height, config.floating_maximum_height);
|
||||||
|
}
|
||||||
|
if (config.floating_maximum_width != -1) {
|
||||||
|
if (config.floating_maximum_width == 0)
|
||||||
|
floating_con->rect.width = min(floating_con->rect.width, floating_sane_max_dimensions.width);
|
||||||
|
else
|
||||||
|
floating_con->rect.width = min(floating_con->rect.width, config.floating_maximum_width);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void floating_enable(Con *con, bool automatic) {
|
void floating_enable(Con *con, bool automatic) {
|
||||||
bool set_focus = (con == focused);
|
bool set_focus = (con == focused);
|
||||||
|
|
||||||
|
@ -138,43 +178,7 @@ void floating_enable(Con *con, bool automatic) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Define reasonable minimal and maximal sizes for floating windows */
|
floating_checkSize(nc);
|
||||||
const int floating_sane_min_height = 50;
|
|
||||||
const int floating_sane_min_width = 75;
|
|
||||||
|
|
||||||
Rect floating_sane_max_dimensions;
|
|
||||||
floating_sane_max_dimensions = total_outputs_dimensions();
|
|
||||||
|
|
||||||
/* Unless user requests otherwise (-1), ensure width/height do not exceed
|
|
||||||
* configured maxima or, if unconfigured, limit to combined width of all
|
|
||||||
* outputs */
|
|
||||||
if (config.floating_maximum_height != -1) {
|
|
||||||
if (config.floating_maximum_height == 0)
|
|
||||||
nc->rect.height = min(nc->rect.height, floating_sane_max_dimensions.height);
|
|
||||||
else
|
|
||||||
nc->rect.height = min(nc->rect.height, config.floating_maximum_height);
|
|
||||||
}
|
|
||||||
if (config.floating_maximum_width != -1) {
|
|
||||||
if (config.floating_maximum_width == 0)
|
|
||||||
nc->rect.width = min(nc->rect.width, floating_sane_max_dimensions.width);
|
|
||||||
else
|
|
||||||
nc->rect.width = min(nc->rect.width, config.floating_maximum_width);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Unless user requests otherwise (-1), raise the width/height to
|
|
||||||
* reasonable minimum dimensions */
|
|
||||||
if (config.floating_minimum_height != -1) {
|
|
||||||
if (config.floating_minimum_height == 0)
|
|
||||||
nc->rect.height = max(nc->rect.height, floating_sane_min_height);
|
|
||||||
else
|
|
||||||
nc->rect.height = max(nc->rect.height, config.floating_minimum_height);
|
|
||||||
}
|
|
||||||
if (config.floating_minimum_width != -1) {
|
|
||||||
if (config.floating_minimum_width == 0)
|
|
||||||
nc->rect.width = max(nc->rect.width, floating_sane_min_width);
|
|
||||||
else
|
|
||||||
nc->rect.width = max(nc->rect.width, config.floating_minimum_width);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 3: attach the child to the new parent container. We need to do this
|
/* 3: attach the child to the new parent container. We need to do this
|
||||||
* because con_border_style_rect() needs to access con->parent. */
|
* because con_border_style_rect() needs to access con->parent. */
|
||||||
|
|
|
@ -128,4 +128,52 @@ is($rect->{height}, 2048, 'height = 2048');
|
||||||
|
|
||||||
exit_gracefully($pid);
|
exit_gracefully($pid);
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# 5: check floating_minimum_size with cmd_resize
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
$config = <<EOT;
|
||||||
|
# i3 config file (v4)
|
||||||
|
font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
|
||||||
|
|
||||||
|
# Test with different dimensions than the i3 default.
|
||||||
|
floating_minimum_size 60 x 50
|
||||||
|
EOT
|
||||||
|
|
||||||
|
$pid = launch_with_config($config);
|
||||||
|
|
||||||
|
$window = open_floating_window(rect => [ 0, 0, 100, 100 ]);
|
||||||
|
cmd 'border none';
|
||||||
|
cmd 'resize shrink height 80px or 80ppt';
|
||||||
|
cmd 'resize shrink width 80px or 80ppt';
|
||||||
|
$rect = $window->rect;
|
||||||
|
is($rect->{width}, 60, 'width = 60');
|
||||||
|
is($rect->{height}, 50, 'height = 50');
|
||||||
|
|
||||||
|
exit_gracefully($pid);
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# 6: check floating_maximum_size with cmd_resize
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
$config = <<EOT;
|
||||||
|
# i3 config file (v4)
|
||||||
|
font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
|
||||||
|
|
||||||
|
# Test with different dimensions than the i3 default.
|
||||||
|
floating_maximum_size 100 x 100
|
||||||
|
EOT
|
||||||
|
|
||||||
|
$pid = launch_with_config($config);
|
||||||
|
|
||||||
|
$window = open_floating_window(rect => [ 200, 200, 50, 50 ]);
|
||||||
|
cmd 'border none';
|
||||||
|
cmd 'resize grow height 100px or 100ppt';
|
||||||
|
cmd 'resize grow width 100px or 100ppt';
|
||||||
|
$rect = $window->rect;
|
||||||
|
is($rect->{width}, 100, 'width = 100');
|
||||||
|
is($rect->{height}, 100, 'height = 100');
|
||||||
|
|
||||||
|
exit_gracefully($pid);
|
||||||
|
|
||||||
done_testing;
|
done_testing;
|
||||||
|
|
Loading…
Reference in New Issue