Merge remote-tracking branch 'vanilla/next' into gaps-next
Ingo Bürk
4 years ago
25 | 25 | * Use the `next` branch for developing and sending your pull request. |
26 | 26 | * Use `clang-format` to format your code. |
27 | 27 | * Run the [testsuite](https://i3wm.org/docs/testsuite.html) |
28 | * If your changes should be reported on the next release's changelog, also | |
29 | update the [RELEASE-notes-next](../RELEASE-notes-next) file in the root | |
30 | folder. Example of changes that should be reported are bug fixes present in | |
31 | the latest stable version of i3 and new enhancements. Example of changes that | |
32 | should not be reported are minor code improvements, documentation, regression | |
33 | and fixes for bugs that were introduced in the `next` branch. | |
28 | 34 | |
29 | 35 | ## Finding something to do |
30 | 36 |
48 | 48 | |
49 | 49 | If you would like to help debugging the issue, please try to reduce the config such that it is as close to the default config as possible while still reproducing the issue. This can help us bisect the root cause. |
50 | 50 | --> |
51 | <pre> | |
51 | <details><summary>Config file</summary><pre> | |
52 | 52 | </pre> |
53 | </details> | |
53 | 54 | |
54 | 55 | <!-- |
55 | 56 | Providing a logfile can help us trace the root cause of an issue much quicker. You can learn how to generate the logfile here: |
0 | ||
1 | ┌──────────────────────────────┐ | |
2 | │ Release notes for i3 v4.18.1 │ | |
3 | └──────────────────────────────┘ | |
4 | ||
5 | This is i3 v4.18.1. This version is considered stable. All users of i3 are | |
6 | strongly encouraged to upgrade. | |
7 | ||
8 | This is a bugfix release for v4.18. | |
9 | ||
10 | ┌────────────────────────────┐ | |
11 | │ Bugfixes │ | |
12 | └────────────────────────────┘ | |
13 | ||
14 | • Move parent nodes in scratchpad correctly | |
15 | • i3bar: Call cont_child() more liberally | |
16 | • Fix load_layout crash when floating node doesn't have CT_FLOATING_CON parent | |
17 | • Fix SEGFAULT when i3bar receives invalid input | |
18 | • Revert "floating_reposition: avoid extra tree_render" | |
19 | • Call tree_render if floating move changes workspace | |
20 | • Update EWMH properties on workspace move | |
21 | • cmd_focus_sibling: Fix crash on workspace level | |
22 | ||
23 | ┌────────────────────────────┐ | |
24 | │ Thanks! │ | |
25 | └────────────────────────────┘ | |
26 | ||
27 | Thanks for testing, bugfixes, discussions and everything I forgot go out to: | |
28 | ||
29 | Heman Gandhi, Orestis Floros | |
30 | ||
31 | -- Michael Stapelberg, 2020-04-22 |
0 | ||
1 | ┌──────────────────────────────┐ | |
2 | │ Release notes for i3 v4.19 │ | |
3 | └──────────────────────────────┘ | |
4 | ||
5 | This is i3 v4.19. This version is considered stable. All users of i3 are | |
6 | strongly encouraged to upgrade. | |
7 | ||
8 | ┌────────────────────────────┐ | |
9 | │ Changes in i3 v4.19 │ | |
10 | └────────────────────────────┘ | |
11 | ||
12 | • configure: respect --program-suffix | |
13 | • use exec to avoid leaving useless shell process | |
14 | • ipc: always include the marks property (even if empty) | |
15 | • introduce “tiling_from” and ”floating_from” criteria | |
16 | • make dock client order deterministic (sorted by class/instance) as a | |
17 | side effect, i3bars without an explicit bar-id will be sorted according | |
18 | to their definition order in the config file | |
19 | ||
20 | ┌────────────────────────────┐ | |
21 | │ Bugfixes │ | |
22 | └────────────────────────────┘ | |
23 | ||
24 | • ensure client windows have a size of at least 1px after resize | |
25 | • correctly handle overlapping decorations | |
26 | • limit workspace numbers within 0..INT32_MAX | |
27 | • fix a bug with tiling resize inside floating container | |
28 | • i3-nagbar: Use _PATH_BSHELL to ensure using a bourne shell | |
29 | • do not propagate $mod+right click to fullscreen clients | |
30 | • do not try to resize fullscreen and non-fullscreen windows | |
31 | • do not focus floating windows changing workspace with ConfigureNotify | |
32 | • i3-dmenu-desktop: Support symlinks in search path | |
33 | • build: correctly provide auxiliary functions when needed |
346 | 346 | */ |
347 | 347 | uint32_t get_colorpixel(const char *hex) __attribute__((const)); |
348 | 348 | |
349 | #ifndef HAVE_strndup | |
349 | #ifndef HAVE_STRNDUP | |
350 | 350 | /** |
351 | 351 | * Taken from FreeBSD |
352 | 352 | * Returns a pointer to a new string which is a duplicate of the |
531 | 531 | */ |
532 | 532 | char *get_config_path(const char *override_configpath, bool use_system_paths); |
533 | 533 | |
534 | #ifndef HAVE_mkdirp | |
534 | #ifndef HAVE_MKDIRP | |
535 | 535 | /** |
536 | 536 | * Emulates mkdir -p (creates any missing folders) |
537 | 537 | * |
542 | 542 | /** Helper structure for usage in format_placeholders(). */ |
543 | 543 | typedef struct placeholder_t { |
544 | 544 | /* The placeholder to be replaced, e.g., "%title". */ |
545 | char *name; | |
545 | const char *name; | |
546 | 546 | /* The value this placeholder should be replaced with. */ |
547 | char *value; | |
547 | const char *value; | |
548 | 548 | } placeholder_t; |
549 | 549 | |
550 | 550 | /** |
11 | 11 | #include <string.h> |
12 | 12 | #include <sys/stat.h> |
13 | 13 | |
14 | #ifndef HAVE_mkdirp | |
14 | #ifndef HAVE_MKDIRP | |
15 | 15 | /* |
16 | 16 | * Emulates mkdir -p (creates any missing folders) |
17 | 17 | * |
8 | 8 | |
9 | 9 | #include <string.h> |
10 | 10 | |
11 | #ifndef HAVE_strndup | |
11 | #ifndef HAVE_STRNDUP | |
12 | 12 | /* |
13 | 13 | * Taken from FreeBSD |
14 | 14 | * Returns a pointer to a new string which is a duplicate of the |
2371 | 2371 | char *formatted_str = format_placeholders(con->title_format, &placeholders[0], num); |
2372 | 2372 | i3String *formatted = i3string_from_utf8(formatted_str); |
2373 | 2373 | i3string_set_markup(formatted, pango_markup); |
2374 | FREE(formatted_str); | |
2375 | ||
2376 | for (size_t i = 0; i < num; i++) { | |
2377 | FREE(placeholders[i].value); | |
2378 | } | |
2374 | ||
2375 | free(formatted_str); | |
2376 | free(title); | |
2377 | free(class); | |
2378 | free(instance); | |
2379 | 2379 | |
2380 | 2380 | return formatted; |
2381 | 2381 | } |
454 | 454 | /* Since the tab width may be something like 31,6 px per tab, we |
455 | 455 | * let the last tab have all the extra space (0,6 * children). */ |
456 | 456 | if (i == (p->children - 1)) { |
457 | child->deco_rect.width += (child->rect.width - (child->deco_rect.x + child->deco_rect.width)); | |
457 | child->deco_rect.width = child->rect.width - child->deco_rect.x; | |
458 | 458 | } |
459 | 459 | |
460 | 460 | if (p->children > 1 || (child->border_style != BS_PIXEL && child->border_style != BS_NONE)) { |
591 | 591 | } |
592 | 592 | } |
593 | 593 | |
594 | /* if this is a borderless/1pixel window, we don’t need to render the | |
595 | * decoration. */ | |
596 | if (p->border_style != BS_NORMAL) | |
597 | goto copy_pixmaps; | |
598 | ||
599 | 594 | /* If the parent hasn't been set up yet, skip the decoration rendering |
600 | 595 | * for now. */ |
601 | 596 | if (parent->frame_buffer.id == XCB_NONE) |
608 | 603 | draw_util_clear_surface(&(con->parent->frame_buffer), COLOR_TRANSPARENT); |
609 | 604 | FREE(con->parent->deco_render_params); |
610 | 605 | } |
606 | ||
607 | /* if this is a borderless/1pixel window, we don’t need to render the | |
608 | * decoration. */ | |
609 | if (p->border_style != BS_NORMAL) | |
610 | goto copy_pixmaps; | |
611 | 611 | |
612 | 612 | /* 4: paint the bar */ |
613 | 613 | draw_util_rectangle(&(parent->frame_buffer), p->color->background, |