Codebase list i3-gaps / 67b3f3e
Merge remote-tracking branch 'vanilla/next' into gaps-next Ingo Bürk 3 years ago
27 changed file(s) with 122 addition(s) and 179 deletion(s). Raw diff Collapse all Expand all
99 SpaceBeforeParens: ControlStatements
1010 SortIncludes: false
1111 ForEachMacros: [ TAILQ_FOREACH, TAILQ_FOREACH_REVERSE, SLIST_FOREACH, CIRCLEQ_FOREACH, CIRCLEQ_FOREACH_REVERSE, NODES_FOREACH, NODES_FOREACH_REVERSE, FOREACH_NONINTERNAL]
12 TypenameMacros: [ SLIST_HEAD, SLIST_ENTRY, LIST_HEAD, LIST_ENTRY, SIMPLEQ_HEAD, SIMPLEQ_ENTRY, TAILQ_HEAD, TAILQ_ENTRY, CIRCLEQ_HEAD, CIRCLEQ_ENTRY ]
0 4.18.2-non-git
0 4.18.3-non-git
125125 I3_VERSION \
126126 LICENSE \
127127 PACKAGE-MAINTAINER \
128 RELEASE-NOTES-4.18.2 \
128 RELEASE-NOTES-4.18.3 \
129129 generate-command-parser.pl \
130130 parser-specs/commands.spec \
131131 parser-specs/config.spec \
+0
-28
RELEASE-NOTES-4.18.2 less more
0
1 ┌──────────────────────────────┐
2 │ Release notes for i3 v4.18.2 │
3 └──────────────────────────────┘
4
5 This is i3 v4.18.2. 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 • floating_maybe_reassign_ws: only re-focus if previously focused
15 (fixes a focus issue with KDE notifications)
16 • get_output_by_name: guard output->primary with require_active
17 • i3bar: fix Xorg memory leak
18
19 ┌────────────────────────────┐
20 │ Thanks! │
21 └────────────────────────────┘
22
23 Thanks for testing, bugfixes, discussions and everything I forgot go out to:
24
25 Orestis Floros
26
27 -- Michael Stapelberg, 2020-07-26
0
1 ┌──────────────────────────────┐
2 │ Release notes for i3 v4.18.3 │
3 └──────────────────────────────┘
4
5 This is i3 v4.18.3. 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 • Bugfix: kick tray clients before destroying the bar
15
16 ┌────────────────────────────┐
17 │ Thanks! │
18 └────────────────────────────┘
19
20 Thanks for testing, bugfixes, discussions and everything I forgot go out to:
21
22 Mark Guptill, Orestis Floros
23
24 -- Michael Stapelberg, 2020-10-19
2525 to their definition order in the config file
2626 • update i3bar config when necessary (reduces redraws on bar mode changes)
2727 • mention rofi in default config file
28 • i3-input: add different exit codes for when i3-input fails
2829
2930 ┌────────────────────────────┐
3031 │ Bugfixes │
11 # Run autoreconf -fi to generate a configure script from this file.
22
33 AC_PREREQ([2.69])
4 AC_INIT([i3], [4.18.2], [https://github.com/i3/i3/issues])
4 AC_INIT([i3], [4.18.3], [https://github.com/i3/i3/issues])
55 # For AX_EXTEND_SRCDIR
66 AX_ENABLE_BUILDDIR
77 AM_INIT_AUTOMAKE([foreign -Wall no-dist-gzip dist-bzip2])
0 i3-wm (4.19-1) unstable; urgency=medium
1
2 * New upstream release.
3
4 -- Michael Stapelberg <[email protected]> Mon, 19 Oct 2020 22:48:30 +0200
5
06 i3-wm (4.18.3-1) unstable; urgency=medium
17
28 * New upstream release.
39
4 -- Michael Stapelberg <[email protected]> Sun, 26 Jul 2020 10:24:46 +0200
10 -- Michael Stapelberg <[email protected]> Mon, 19 Oct 2020 22:48:30 +0200
511
612 i3-wm (4.18.2-1) unstable; urgency=medium
713
3030 #define MAX_WIDTH logical_px(500)
3131 #define BORDER logical_px(2)
3232 #define PADDING logical_px(2)
33
34 /* Exit codes for i3-input:
35 * 0 if i3-input exited successfully and the command was run
36 * 1 if the user canceled input
37 * 2 if i3-input fails for any other reason */
38 const int EXIT_OK = 0;
39 const int EXIT_CANCEL = 1;
40 const int EXIT_ERROR = 2;
3341
3442 /* IPC format string. %s will be replaced with what the user entered, then
3543 * the command will be sent to i3 */
185193 /* prefix the command if a prefix was specified on commandline */
186194 printf("command = %s\n", full);
187195
188 ipc_send_message(sockfd, strlen(full), 0, (uint8_t *)full);
196 int ret = ipc_send_message(sockfd, strlen(full), 0, (uint8_t *)full);
189197
190198 free(full);
191199
192 exit(0);
200 exit(ret == 0 ? EXIT_OK : EXIT_ERROR);
193201 }
194202
195203 /*
238246 return 1;
239247 }
240248 if (sym == XK_Escape) {
241 exit(0);
249 exit(EXIT_CANCEL);
242250 }
243251
244252 /* TODO: handle all of these? */
296304 xcb_intern_atom_reply_t *nswc_reply = xcb_intern_atom_reply(conn, nswc_cookie, NULL);
297305 if (nswc_reply == NULL) {
298306 ELOG("Could not intern atom _NET_SUPPORTING_WM_CHECK\n");
299 exit(-1);
307 exit(EXIT_ERROR);
300308 }
301309 A__NET_SUPPORTING_WM_CHECK = nswc_reply->atom;
302310 free(nswc_reply);
391399 break;
392400 case 'v':
393401 printf("i3-input " I3_VERSION);
394 return 0;
402 return EXIT_OK;
395403 case 'p':
396404 /* This option is deprecated, but will still work in i3 v4.1, 4.2 and 4.3 */
397405 fprintf(stderr, "i3-input: WARNING: the -p option is DEPRECATED in favor of the -F (format) option\n");
419427 printf("\n");
420428 printf("Example:\n");
421429 printf(" i3-input -F 'workspace \"%%s\"' -P 'Switch to workspace: '\n");
422 return 0;
430 return EXIT_OK;
423431 }
424432 }
425433 if (!format) {
490498
491499 if (reply->status != XCB_GRAB_STATUS_SUCCESS) {
492500 fprintf(stderr, "Could not grab keyboard, status = %d\n", reply->status);
493 exit(-1);
501 exit(EXIT_ERROR);
494502 }
495503
496504 xcb_flush(conn);
526534 }
527535
528536 draw_util_surface_free(conn, &surface);
529 return 0;
530 }
537 return EXIT_OK;
538 }
7676 char *name;
7777 char *instance;
7878
79 TAILQ_ENTRY(status_block)
80 blocks;
79 TAILQ_ENTRY(status_block) blocks;
8180 };
8281
83 extern TAILQ_HEAD(statusline_head, status_block)
84 statusline_head;
82 extern TAILQ_HEAD(statusline_head, status_block) statusline_head;
8583
8684 #include "child.h"
8785 #include "ipc.h"
2828 char *command;
2929 bool release;
3030
31 TAILQ_ENTRY(binding_t)
32 bindings;
31 TAILQ_ENTRY(binding_t) bindings;
3332 } binding_t;
3433
3534 typedef struct tray_output_t {
3635 char *output;
3736
38 TAILQ_ENTRY(tray_output_t)
39 tray_outputs;
37 TAILQ_ENTRY(tray_output_t) tray_outputs;
4038 } tray_output_t;
4139
4240 typedef struct config_t {
4341 uint32_t modifier;
44
45 TAILQ_HEAD(bindings_head, binding_t)
46 bindings;
47
42 TAILQ_HEAD(bindings_head, binding_t) bindings;
4843 position_t position;
4944 bool verbose;
5045 uint32_t bar_height;
5954 char *command;
6055 char *fontname;
6156 i3String *separator_symbol;
62
63 TAILQ_HEAD(tray_outputs_head, tray_output_t)
64 tray_outputs;
65
57 TAILQ_HEAD(tray_outputs_head, tray_output_t) tray_outputs;
6658 int tray_padding;
6759 int num_outputs;
6860 char **outputs;
7272 struct ws_head* workspaces; /* The workspaces on this output */
7373 struct tc_head* trayclients; /* The tray clients on this output */
7474
75 SLIST_ENTRY(i3_output)
76 slist; /* Pointer for the SLIST-Macro */
75 SLIST_ENTRY(i3_output) slist; /* Pointer for the SLIST-Macro */
7776 };
2020 char *class_class;
2121 char *class_instance;
2222
23 TAILQ_ENTRY(trayclient)
24 tailq; /* Pointer for the TAILQ-Macro */
23 TAILQ_ENTRY(trayclient) tailq; /* Pointer for the TAILQ-Macro */
2524 };
4040 rect rect; /* The rect of the ws (not used (yet)) */
4141 struct i3_output *output; /* The current output of the ws */
4242
43 TAILQ_ENTRY(i3_ws)
44 tailq; /* Pointer for the TAILQ-Macro */
43 TAILQ_ENTRY(i3_ws) tailq; /* Pointer for the TAILQ-Macro */
4544 };
6565 char *value;
6666 char *next_match;
6767
68 SLIST_ENTRY(Variable)
69 variables;
68 SLIST_ENTRY(Variable) variables;
7069 };
7170
7271 /**
8079 bool pango_markup;
8180 struct bindings_head *bindings;
8281
83 SLIST_ENTRY(Mode)
84 modes;
82 SLIST_ENTRY(Mode) modes;
8583 };
8684
8785 /**
280278 /* List of outputs on which the tray is allowed to be shown, in order.
281279 * The special value "none" disables it (per default, it will be shown) and
282280 * the special value "primary" enabled it on the primary output. */
283 TAILQ_HEAD(tray_outputs_head, tray_output_t)
284 tray_outputs;
281 TAILQ_HEAD(tray_outputs_head, tray_output_t) tray_outputs;
285282
286283 /* Padding around the tray icons. */
287284 int tray_padding;
303300 /** Bar modifier (to show bar when in hide mode). */
304301 uint32_t modifier;
305302
306 TAILQ_HEAD(bar_bindings_head, Barbinding)
307 bar_bindings;
303 TAILQ_HEAD(bar_bindings_head, Barbinding) bar_bindings;
308304
309305 /** Bar position (bottom by default). */
310306 enum { P_BOTTOM = 0,
381377 char *binding_mode_text;
382378 } colors;
383379
384 TAILQ_ENTRY(Barconfig)
385 configs;
380 TAILQ_ENTRY(Barconfig) configs;
386381 };
387382
388383 /**
400395 /** If true, the command will be executed after the button is released. */
401396 bool release;
402397
403 TAILQ_ENTRY(Barbinding)
404 bindings;
398 TAILQ_ENTRY(Barbinding) bindings;
405399 };
406400
407401 struct tray_output_t {
408402 char *output;
409403
410 TAILQ_ENTRY(tray_output_t)
411 tray_outputs;
404 TAILQ_ENTRY(tray_output_t) tray_outputs;
412405 };
413406
414407 typedef enum {
224224 char *output;
225225 gaps_t gaps;
226226
227 TAILQ_ENTRY(Workspace_Assignment)
228 ws_assignments;
227 TAILQ_ENTRY(Workspace_Assignment) ws_assignments;
229228 };
230229
231230 struct Ignore_Event {
233232 int response_type;
234233 time_t added;
235234
236 SLIST_ENTRY(Ignore_Event)
237 ignore_events;
235 SLIST_ENTRY(Ignore_Event) ignore_events;
238236 };
239237
240238 /**
253251 * completed) */
254252 time_t delete_at;
255253
256 TAILQ_ENTRY(Startup_Sequence)
257 sequences;
254 TAILQ_ENTRY(Startup_Sequence) sequences;
258255 };
259256
260257 /**
280277 struct Binding_Keycode {
281278 xcb_keycode_t keycode;
282279 i3_event_state_mask_t modifiers;
283
284 TAILQ_ENTRY(Binding_Keycode)
285 keycodes;
280 TAILQ_ENTRY(Binding_Keycode) keycodes;
286281 };
287282
288283 /******************************************************************************
343338 /** Only in use if symbol != NULL. Contains keycodes which generate the
344339 * specified symbol. Useful for unbinding and checking which binding was
345340 * used when a key press event comes in. */
346 TAILQ_HEAD(keycodes_head, Binding_Keycode)
347 keycodes_head;
341 TAILQ_HEAD(keycodes_head, Binding_Keycode) keycodes_head;
348342
349343 /** Command, like in command mode */
350344 char *command;
351345
352 TAILQ_ENTRY(Binding)
353 bindings;
346 TAILQ_ENTRY(Binding) bindings;
354347 };
355348
356349 /**
366359 /** no_startup_id flag for start_application(). Determines whether a
367360 * startup notification context/ID should be created. */
368361 bool no_startup_id;
369
370 TAILQ_ENTRY(Autostart)
371 autostarts;
372
373 TAILQ_ENTRY(Autostart)
374 autostarts_always;
362 TAILQ_ENTRY(Autostart) autostarts;
363 TAILQ_ENTRY(Autostart) autostarts_always;
375364 };
376365
377366 struct output_name {
378367 char *name;
379
380 SLIST_ENTRY(output_name)
381 names;
368 SLIST_ENTRY(output_name) names;
382369 };
383370
384371 /**
405392 /** List of names for the output.
406393 * An output always has at least one name; the first name is
407394 * considered the primary one. */
408 SLIST_HEAD(names_head, output_name)
409 names_head;
395 SLIST_HEAD(names_head, output_name) names_head;
410396
411397 /** Pointer to the Con which represents this output */
412398 Con *con;
414400 /** x, y, width, height */
415401 Rect rect;
416402
417 TAILQ_ENTRY(xoutput)
418 outputs;
403 TAILQ_ENTRY(xoutput) outputs;
419404 };
420405
421406 /**
566551 M_ASSIGN_WS,
567552 M_BELOW } insert_where;
568553
569 TAILQ_ENTRY(Match)
570 matches;
554 TAILQ_ENTRY(Match) matches;
571555
572556 /* Whether this match was generated when restarting i3 inplace.
573557 * Leads to not setting focus when managing a new window, because the old
614598 char *output;
615599 } dest;
616600
617 TAILQ_ENTRY(Assignment)
618 assignments;
601 TAILQ_ENTRY(Assignment) assignments;
619602 };
620603
621604 /** Fullscreen modes. Used by Con.fullscreen_mode. */
626609 struct mark_t {
627610 char *name;
628611
629 TAILQ_ENTRY(mark_t)
630 marks;
612 TAILQ_ENTRY(mark_t) marks;
631613 };
632614
633615 /**
694676 char *sticky_group;
695677
696678 /* user-definable marks to jump to this container later */
697 TAILQ_HEAD(marks_head, mark_t)
698 marks_head;
679 TAILQ_HEAD(marks_head, mark_t) marks_head;
699680 /* cached to decide whether a redraw is needed */
700681 bool mark_changed;
701682
714695 struct deco_render_params *deco_render_params;
715696
716697 /* Only workspace-containers can have floating clients */
717 TAILQ_HEAD(floating_head, Con)
718 floating_head;
719
720 TAILQ_HEAD(nodes_head, Con)
721 nodes_head;
722
723 TAILQ_HEAD(focus_head, Con)
724 focus_head;
725
726 TAILQ_HEAD(swallow_head, Match)
727 swallow_head;
698 TAILQ_HEAD(floating_head, Con) floating_head;
699
700 TAILQ_HEAD(nodes_head, Con) nodes_head;
701 TAILQ_HEAD(focus_head, Con) focus_head;
702
703 TAILQ_HEAD(swallow_head, Match) swallow_head;
728704
729705 fullscreen_mode_t fullscreen_mode;
730706
762738 FLOATING_USER_ON = 3
763739 } floating;
764740
765 TAILQ_ENTRY(Con)
766 nodes;
767
768 TAILQ_ENTRY(Con)
769 focused;
770
771 TAILQ_ENTRY(Con)
772 all_cons;
773
774 TAILQ_ENTRY(Con)
775 floating_windows;
741 TAILQ_ENTRY(Con) nodes;
742 TAILQ_ENTRY(Con) focused;
743 TAILQ_ENTRY(Con) all_cons;
744 TAILQ_ENTRY(Con) floating_windows;
776745
777746 /** callbacks */
778747 void (*on_remove_child)(Con *);
5656 extern char **start_argv;
5757 extern Display *xlibdpy, *xkbdpy;
5858 extern int xkb_current_group;
59 extern TAILQ_HEAD(bindings_head, Binding) * bindings;
59 extern TAILQ_HEAD(bindings_head, Binding) *bindings;
6060 extern const char *current_binding_mode;
6161 extern TAILQ_HEAD(autostarts_head, Autostart) autostarts;
6262 extern TAILQ_HEAD(autostarts_always_head, Autostart) autostarts_always;
3939 uint8_t *buffer;
4040 size_t buffer_size;
4141
42 TAILQ_ENTRY(ipc_client)
43 clients;
42 TAILQ_ENTRY(ipc_client) clients;
4443 } ipc_client;
4544
4645 /*
1414 char hex[8];
1515 uint32_t pixel;
1616
17 SLIST_ENTRY(Colorpixel)
18 colorpixels;
17 SLIST_ENTRY(Colorpixel) colorpixels;
1918 };
2019
21 SLIST_HEAD(colorpixel_head, Colorpixel)
22 colorpixels;
20 SLIST_HEAD(colorpixel_head, Colorpixel) colorpixels;
2321
2422 /*
2523 * Returns the colorpixel to use for the given hex color (think of HTML).
597597 # because configure_file strips the backslash in e.g. \@display,
598598 # resulting in @display, breaking our Perl code:
599599 # https://github.com/mesonbuild/meson/issues/7165
600 sed = find_program('sed')
600 bash = find_program('bash')
601601 replace_dirs = [
602 sed,
603 '-e',
604 's,@abs_top_builddir@,'+meson.current_build_dir()+',g;s,@abs_top_srcdir@,'+meson.current_source_dir()+',g',
605 '@INPUT@',
602 bash, '-c', # Use bash to capture output and mark as executable
603 'sed -e \'s,@abs_top_builddir@,'
604 + meson.current_build_dir()
605 + ',g;s,@abs_top_srcdir@,'
606 + meson.current_source_dir()+',g\''
607 # Only mark files ending in .pl as executables
608 + ' "$0" > "$1" && { [[ "${1##*.}" == pl ]] && chmod +x "$1" || true; }',
609 '@INPUT0@', # $0
610 '@OUTPUT0@', # $1
606611 ]
607612 complete_run = custom_target(
608613 'complete-run',
609614 input: ['testcases/complete-run.pl.in'],
610615 output: ['complete-run.pl'],
611 capture: true,
612616 command: replace_dirs,
613617 # build this target when running e.g. ninja or ninja test.
614618 # This is required for older meson versions (< 0.46.0).
618622 'i3test-pm',
619623 input: ['testcases/lib/i3test.pm.in'],
620624 output: ['i3test.pm'],
621 capture: true,
622625 command: replace_dirs,
623626 # build this target when running e.g. ninja or ninja test.
624627 # This is required for older meson versions (< 0.46.0).
128128 */
129129 typedef struct owindow {
130130 Con *con;
131
132 TAILQ_ENTRY(owindow)
133 owindows;
131 TAILQ_ENTRY(owindow) owindows;
134132 } owindow;
135133
136134 typedef TAILQ_HEAD(owindows_head, owindow) owindows_head;
513513 struct bfs_entry {
514514 Con *con;
515515
516 TAILQ_ENTRY(bfs_entry)
517 entries;
516 TAILQ_ENTRY(bfs_entry) entries;
518517 };
519518
520519 /*
526525
527526 /* TODO: is breadth-first-search really appropriate? (check as soon as
528527 * fullscreen levels and fullscreen for containers is implemented) */
529 TAILQ_HEAD(bfs_head, bfs_entry)
530 bfs_head = TAILQ_HEAD_INITIALIZER(bfs_head);
531
528 TAILQ_HEAD(bfs_head, bfs_entry) bfs_head = TAILQ_HEAD_INITIALIZER(bfs_head);
532529 struct bfs_entry *entry = smalloc(sizeof(struct bfs_entry));
533530 entry->con = con;
534531 TAILQ_INSERT_TAIL(&bfs_head, entry, entries);
2424
2525 char *current_socketpath = NULL;
2626
27 TAILQ_HEAD(ipc_client_head, ipc_client)
28 all_clients = TAILQ_HEAD_INITIALIZER(all_clients);
27 TAILQ_HEAD(ipc_client_head, ipc_client) all_clients = TAILQ_HEAD_INITIALIZER(all_clients);
2928
3029 /*
3130 * Puts the given socket file descriptor into non-blocking mode or dies if
4444 * array. */
4545 struct focus_mapping {
4646 int old_id;
47
48 TAILQ_ENTRY(focus_mapping)
49 focus_mappings;
47 TAILQ_ENTRY(focus_mapping) focus_mappings;
5048 };
5149
5250 static TAILQ_HEAD(focus_mappings_head, focus_mapping) focus_mappings =
2828 /** The drawable surface */
2929 surface_t surface;
3030
31 TAILQ_ENTRY(placeholder_state)
32 state;
31 TAILQ_ENTRY(placeholder_state) state;
3332 } placeholder_state;
3433
3534 static TAILQ_HEAD(state_head, placeholder_state) state_head =
1515 xcb_colormap_t colormap;
1616 Rect dims;
1717 surface_t surface;
18
19 TAILQ_ENTRY(dialog_t)
20 dialogs;
18 TAILQ_ENTRY(dialog_t) dialogs;
2119 } dialog_t;
2220
2321 static TAILQ_HEAD(dialogs_head, dialog_t) dialogs = TAILQ_HEAD_INITIALIZER(dialogs);
6262
6363 char *name;
6464
65 CIRCLEQ_ENTRY(con_state)
66 state;
67
68 CIRCLEQ_ENTRY(con_state)
69 old_state;
70
71 TAILQ_ENTRY(con_state)
72 initial_mapping_order;
65 CIRCLEQ_ENTRY(con_state) state;
66 CIRCLEQ_ENTRY(con_state) old_state;
67 TAILQ_ENTRY(con_state) initial_mapping_order;
7368 } con_state;
7469
75 CIRCLEQ_HEAD(state_head, con_state)
76 state_head =
70 CIRCLEQ_HEAD(state_head, con_state) state_head =
7771 CIRCLEQ_HEAD_INITIALIZER(state_head);
7872
79 CIRCLEQ_HEAD(old_state_head, con_state)
80 old_state_head =
73 CIRCLEQ_HEAD(old_state_head, con_state) old_state_head =
8174 CIRCLEQ_HEAD_INITIALIZER(old_state_head);
8275
83 TAILQ_HEAD(initial_mapping_head, con_state)
84 initial_mapping_head =
76 TAILQ_HEAD(initial_mapping_head, con_state) initial_mapping_head =
8577 TAILQ_HEAD_INITIALIZER(initial_mapping_head);
8678
8779 /*