diff --git a/I3_VERSION b/I3_VERSION new file mode 100644 index 000000000..e754b6e0f --- /dev/null +++ b/I3_VERSION @@ -0,0 +1 @@ +4.19.1-non-git diff --git a/RELEASE-NOTES-4.19 b/RELEASE-NOTES-4.19 deleted file mode 100644 index cd5bf2c65..000000000 --- a/RELEASE-NOTES-4.19 +++ /dev/null @@ -1,81 +0,0 @@ - - ┌──────────────────────────────┐ - │ Release notes for i3 v4.19 │ - └──────────────────────────────┘ - -This is i3 v4.19. This version is considered stable. All users of i3 are -strongly encouraged to upgrade. - -In this release, we switched from the autotools build system to the meson build -system (https://mesonbuild.com/). Check https://github.com/i3/i3/issues/4086 for -details. If this causes problems for you, you can revert the commit which -removed autotools from the tree: we tried our best to keep both build systems -working. Please reach out to us in that case! - - ┌────────────────────────────┐ - │ Changes in i3 v4.19 │ - └────────────────────────────┘ - - • userguide: explain button6 and button7 (scroll wheel right/left) - • ipc: always include the marks property (even if empty) - • ipc: introduce GET_BINDING_STATE command - • ipc: clarify workspace name field semantics - • ipc: document parse_error COMMAND reply field - • i3bar: launch using exec to avoid leaving useless shell process - • i3bar: make dock client order deterministic (sorted by class/instance) as a - side effect, i3bars without an explicit bar-id will be sorted according - to their definition order in the config file - • i3bar: update config when necessary (reduces redraws on bar mode changes) - • i3bar: add coordinates relative to the current output in i3bar click events - • i3bar: add “nonprimary” output option - • i3bar: set WM_CLASS instance to bar id - • i3-input: add different exit codes for when i3-input fails - • i3-dmenu-desktop: Support symlinks in search path - • pod2html: render without stylesheet by default - • introduce “tiling_from” and ”floating_from” criteria - • mention rofi in default config file - • allow ppt values in move direction and move position commands - • allow matching on empty properties like class, title, etc. - - ┌────────────────────────────┐ - │ Bugfixes │ - └────────────────────────────┘ - - • i3-nagbar: Use _PATH_BSHELL to ensure using a bourne shell - • i3bar: fix Xorg memory leak - • i3bar: fix hang when pausing/resuming bar program - • i3bar: fix crash on invalid JSON input - • i3bar: kick tray clients before destroying the bar - • ensure client windows have a size of at least 1px after resize - • correctly handle overlapping decorations - • limit workspace numbers within 0..INT32_MAX - • fix a bug with tiling resize inside floating container - • correctly handle mouse resize in fullscreen containers by - not propagating $mod+right click to fullscreen clients - • do not try to resize fullscreen and non-fullscreen windows - • do not focus floating windows changing workspace with ConfigureNotify - • set _NET_DESKTOP_VIEWPORT after randr changes - • fix a bug with i3-nagbar not starting after it has already started once - • fix conflict when moving parent of fullscreen window to workspace - • fix named workspace assignments on output changes - • fix named workspace assignment precedence on workspace renames - • fix windows getting swallowed more than once - • erase i3 --moreversion progress line before overwriting - • fix test case 180-fd-leaks when running on Fedora - • fix crash in `focus next sibling` - • fix moving tiling windows out of the scratchpad - • floating_maybe_reassign_ws: only re-focus if previously focused - (fixes a focus issue with KDE notifications) - • fix crash on invalid JSON input in stored layouts - • fix monitor change during/with i3 restart by moving - content for non-existing output containers - -Thanks for testing, bugfixes, discussions and everything I forgot go out to: - - 6144, acheronfail, Albert Safin, Alessandro Vinciguerra, Andrey Burov, - Francesc Hervada-Sala, Heman Gandhi, Ian Fan, Ingo Bürk, izzel, Jason, Jason - Nader, Jorg Heymans, Joseph, Konstantin Kharlamov, Lukas Kern, Mark Guptill, - Martin T. H. Sandsmark, Matthew Martin, Maxim Schuwalow, Mike Sharov, Orestis - Floros, Vasily Fomin, Wilhelm Schuster, xzfc, zero77 - --- Michael Stapelberg, 2020-11-15 diff --git a/RELEASE-NOTES-4.19.1 b/RELEASE-NOTES-4.19.1 new file mode 100644 index 000000000..72e479c78 --- /dev/null +++ b/RELEASE-NOTES-4.19.1 @@ -0,0 +1,27 @@ + + ┌──────────────────────────────┐ + │ Release notes for i3 v4.19.1 │ + └──────────────────────────────┘ + +This is i3 v4.19. This version is considered stable. All users of i3 are +strongly encouraged to upgrade. + +This is a bugfix release for v4.19 + + ┌────────────────────────────┐ + │ Bugfixes │ + └────────────────────────────┘ + + • fix workspaces not moving to assigned output after output becomes available + • fix duplicate bindcode after i3-config-wizard + • fix commented-out rofi call in default i3 config + + ┌────────────────────────────┐ + │ Thanks! │ + └────────────────────────────┘ + +Thanks for testing, bugfixes, discussions and everything I forgot go out to: + + Anaël Beutot, Imran Virani, Orestis Floros + +-- Michael Stapelberg, 2021-02-01 diff --git a/etc/config b/etc/config index 19cb8c484..ce22fd3d1 100644 --- a/etc/config +++ b/etc/config @@ -54,7 +54,7 @@ bindsym Mod1+Shift+q kill # start dmenu (a program launcher) bindsym Mod1+d exec --no-startup-id dmenu_run # A more modern dmenu replacement is rofi: -# bindsym Mod1+d exec rofi -modi drun,run -show drun +# bindsym Mod1+d exec "rofi -modi drun,run -show drun" # There also is i3-dmenu-desktop which only displays applications shipping a # .desktop file. It is a wrapper around dmenu, so you need that installed. # bindsym Mod1+d exec --no-startup-id i3-dmenu-desktop diff --git a/etc/config.keycodes b/etc/config.keycodes index aa79901bf..f76d5a714 100644 --- a/etc/config.keycodes +++ b/etc/config.keycodes @@ -48,10 +48,10 @@ bindcode $mod+Shift+24 kill # start dmenu (a program launcher) bindcode $mod+40 exec --no-startup-id dmenu_run # A more modern dmenu replacement is rofi: -# bindcode $mod+40 exec rofi -modi drun,run -show drun +# bindcode $mod+40 exec "rofi -modi drun,run -show drun" # There also is i3-dmenu-desktop which only displays applications shipping a # .desktop file. It is a wrapper around dmenu, so you need that installed. -bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop +# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop # change focus bindcode $mod+44 focus left diff --git a/meson.build b/meson.build index 11541e211..b052efa45 100644 --- a/meson.build +++ b/meson.build @@ -6,7 +6,7 @@ project( 'i3', 'c', - version: '4.19', + version: '4.19.1', default_options: [ 'c_std=c11', 'warning_level=1', # enable all warnings (-Wall) @@ -63,7 +63,7 @@ config_h = declare_dependency( sources: vcs_tag( input: config_h_in, output: 'config.h', - fallback: meson.project_version() + ' (2020-11-15)', + fallback: meson.project_version() + ' (2021-02-01)', ) ) diff --git a/src/randr.c b/src/randr.c index 8e000ca62..b4d1d0941 100644 --- a/src/randr.c +++ b/src/randr.c @@ -439,28 +439,31 @@ void init_ws_for_output(Output *output) { Con *previous_focus = con_get_workspace(focused); /* Iterate over all workspaces and check if any of them should be assigned - * to this output. */ - Con *output_con; - TAILQ_FOREACH (output_con, &(croot->nodes_head), nodes) { - if (con_is_internal(output_con)) { + * to this output. + * Note: in order to do that we iterate over all_cons and not using another + * list that would be updated during iteration by the + * workspace_move_to_output function. */ + Con *workspace; + TAILQ_FOREACH (workspace, &all_cons, all_cons) { + if (workspace->type != CT_WORKSPACE || con_is_internal(workspace)) { continue; } - Con *workspace; - TAILQ_FOREACH (workspace, &(output_get_content(output_con)->nodes_head), nodes) { - Con *workspace_out = get_assigned_output(workspace->name, workspace->num); - if (output->con != workspace_out) { - continue; - } + Con *workspace_out = get_assigned_output(workspace->name, workspace->num); - DLOG("Moving workspace \"%s\" from output \"%s\" to \"%s\" due to assignment\n", - workspace->name, workspace_out->name, output_primary_name(output)); - /* Need to copy output's rect since content is not yet rendered. We - * can't call render_con here because render_output only proceeds - * if a workspace exists. */ - content->rect = output->con->rect; - workspace_move_to_output(workspace, output); + if (output->con != workspace_out) { + continue; } + + DLOG("Moving workspace \"%s\" from output \"%s\" to \"%s\" due to assignment\n", + workspace->name, output_primary_name(get_output_for_con(workspace)), + output_primary_name(output)); + + /* Need to copy output's rect since content is not yet rendered. We + * can't call render_con here because render_output only proceeds + * if a workspace exists. */ + content->rect = output->con->rect; + workspace_move_to_output(workspace, output); } /* Temporarily set the focused container, might not be initialized yet. */