Bugfix: fix crash when using multiple for_window statements that move windows (Thanks Antonio)
fixes #1257
This commit is contained in:
parent
a76a81f80b
commit
0552fd5666
|
@ -480,6 +480,10 @@ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cooki
|
||||||
* workspace isn’t enough either — it needs the rect. */
|
* workspace isn’t enough either — it needs the rect. */
|
||||||
ws->rect = ws->parent->rect;
|
ws->rect = ws->parent->rect;
|
||||||
render_con(ws, true);
|
render_con(ws, true);
|
||||||
|
/* Disable setting focus, otherwise we’d move focus to an invisible
|
||||||
|
* workspace, which we generally prevent (e.g. in
|
||||||
|
* con_move_to_workspace). */
|
||||||
|
set_focus = false;
|
||||||
}
|
}
|
||||||
render_con(croot, false);
|
render_con(croot, false);
|
||||||
|
|
||||||
|
@ -488,8 +492,10 @@ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cooki
|
||||||
|
|
||||||
/* Defer setting focus after the 'new' event has been sent to ensure the
|
/* Defer setting focus after the 'new' event has been sent to ensure the
|
||||||
* proper window event sequence. */
|
* proper window event sequence. */
|
||||||
if (set_focus)
|
if (set_focus) {
|
||||||
|
DLOG("Now setting focus.\n");
|
||||||
con_focus(nc);
|
con_focus(nc);
|
||||||
|
}
|
||||||
|
|
||||||
tree_render();
|
tree_render();
|
||||||
|
|
||||||
|
|
|
@ -42,4 +42,34 @@ does_i3_live;
|
||||||
|
|
||||||
exit_gracefully($pid);
|
exit_gracefully($pid);
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Related bug: multiple for_window assignments caused a crash
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
$config = <<EOT;
|
||||||
|
# i3 config file (v4)
|
||||||
|
font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
|
||||||
|
|
||||||
|
for_window [instance=__i3-test-window1] move workspace 3
|
||||||
|
for_window [instance=__i3-test-window2] move workspace 2
|
||||||
|
EOT
|
||||||
|
|
||||||
|
$pid = launch_with_config($config);
|
||||||
|
|
||||||
|
my $window1 = open_window(
|
||||||
|
wm_class => '__i3-test-window1',
|
||||||
|
dont_map => 1,
|
||||||
|
);
|
||||||
|
$window1->map;
|
||||||
|
|
||||||
|
my $window2 = open_window(
|
||||||
|
wm_class => '__i3-test-window2',
|
||||||
|
dont_map => 1,
|
||||||
|
);
|
||||||
|
$window2->map;
|
||||||
|
|
||||||
|
does_i3_live;
|
||||||
|
|
||||||
|
exit_gracefully($pid);
|
||||||
|
|
||||||
done_testing;
|
done_testing;
|
||||||
|
|
Loading…
Reference in New Issue