]> git.sur5r.net Git - i3/i3/commitdiff
Merge pull request #2875 from botovq/next
authorIngo Bürk <admin@airblader.de>
Mon, 4 Sep 2017 16:43:42 +0000 (18:43 +0200)
committerGitHub <noreply@github.com>
Mon, 4 Sep 2017 16:43:42 +0000 (18:43 +0200)
Avoid use of uninitialized in init_dpi_end

13 files changed:
I3_VERSION
Makefile.am
RELEASE-NOTES-4.13 [deleted file]
RELEASE-NOTES-4.14 [new file with mode: 0644]
configure.ac
debian/changelog
docs/testsuite
i3-nagbar/main.c
man/i3-nagbar.man
src/handlers.c
src/main.c
src/regex.c
testcases/t/269-focus-stack-above.t

index d4cfa42ae4df38b6478e1666c72fb451bd333ea7..af1432e3d06e5aaf78f98be22c9fab9f2329855e 100644 (file)
@@ -1 +1 @@
-4.13-non-git
+4.14-non-git
index 0da9873298170119fcaa3a55eeda20af861ee68f..3ea300e5a71f0b1efa752e95aed59455d68ebef9 100644 (file)
@@ -100,7 +100,7 @@ EXTRA_DIST = \
        I3_VERSION \
        LICENSE \
        PACKAGE-MAINTAINER \
-       RELEASE-NOTES-4.13 \
+       RELEASE-NOTES-4.14 \
        generate-command-parser.pl \
        parser-specs/commands.spec \
        parser-specs/config.spec \
diff --git a/RELEASE-NOTES-4.13 b/RELEASE-NOTES-4.13
deleted file mode 100644 (file)
index 0e85456..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-
- ┌────────────────────────────┐
- │ Release notes for i3 v4.13 │
- └────────────────────────────┘
-
-This is i3 v4.13. This version is considered stable. All users of i3 are
-strongly encouraged to upgrade.
-
-For users, there are two changes to be aware of:
-
-1. The X server DPI is read from the Xft.dpi X resource (if available).
-   Previously, i3 used to directly look at the X server’s DPI (based on screen
-   resolution and physical size). Looking at Xft.dpi is more consistent with
-   other software, more likely to be correct (because it’s user-specified and
-   not read from possibly broken hardware information) and allows users to
-   override the value.
-
-2. It is now possible to set config file variables from X resources using the
-   “set_from_resource” directive. This allows users to have a single source of
-   truth for e.g. theming X11 applications (specify “*color0: #121212” and have
-   it apply to URxvt and your i3 config).
-
-For packagers, there are three changes that likely require action:
-
-1. cairo/pango are now required dependencies, as announced in the i3 v4.12
-   release notes.
-
-2. The aforementioned “set_from_resource” feature requires the new dependency
-   libxcb-util-xrm.
-
-3. i3 now uses the GNU build system (autotools). Please see
-   https://github.com/i3/i3/commit/4a52a7e9fb6fb2e1f0256b2e086cfa313f411cd8 for
-   a lot more details about the rationale and what this means for your package.
-   Bottomline, things should get simpler for you, though :).
-
- ┌────────────────────────────┐
- │ Changes in i3 v4.13        │
- └────────────────────────────┘
-
-  • build: wire up version handling for non-release tarballs (as opposed to git
-    checkouts)
-  • build: switch to the GNU build system
-  • i3bar: disable pango markup for plain-text input
-  • man/i3-msg: point out default ipc message type
-  • config: introduce support for specifying variables from X resources
-  • config: ensure variables match on longest-length, eliminating problems
-    where one variable was a prefix of another
-  • config: do not count '\' in comment lines as line continuation
-  • ipc: introduce a new GET_BINDING_MODES command
-  • ipc: implement new window::mark event
-  • ipc: add “output” to IPC events referencing a container
-  • make fullscreen windows open on the output which is indicated by their
-    geometry (fixes LibreOffice Impress multi-monitor presentations)
-  • focus newly managed windows only if they don’t use the globally active
-    input mode (fixes issues with RubyMine)
-  • remove title indentation in nested containers (rationale was unclear,
-    nobody spoke up when we asked about the feature on i3-discuss)
-  • use the last known timestamp when calling xcb_set_input_focus (might fix
-    rare race conditions in focus handling)
-  • introduce the “smart” option for hide_edge_borders, which will hide borders
-    when there is precisely one window on the workspace
-  • handle _MOTIF_WM_HINTS changes (_MOTIF_WM_HINTS were previously only
-    considered when managing a new window)
-  • don’t change border style if BS_NORMAL is requested in _MOTIF_WM_HINTS
-  • only add numlock fallback for keybindings where necessary (allows users to
-    correctly bind keys on the numpad)
-  • do not match docks in config and command criteria
-  • get DPI from the Xft.dpi resource instead of directly looking at the screen
-    resolution/size
-  • handle _NET_ACTIVE_WINDOW for scratchpad windows (for pagers)
-  • set _NET_WM_DESKTOP to sticky for scratchpad windows
-  • add new criteria “tiling” and “floating”
-  • implement special output name “current” for commands
-  • handle ResizeRequests for tray clients (fixes VLC tray icon)
-
- ┌────────────────────────────┐
- │ Bugfixes                   │
- └────────────────────────────┘
-
-  • i3bar: fix crash when the I3SOCK environment variable is present
-  • i3-dmenu-desktop: do not die on failed open
-  • i3-input: properly position in non-standard cases (fixes an issue where
-    i3-input would launch off-screen)
-  • i3-save-tree: rename “mark” to “marks” to reflect our recent change to
-    allow multiple marks
-  • mouse bindings: only grab the mouse buttons that need to be grabbed
-  • no_focus: correctly count the number of windows (makes no_focus work with
-    tabbed/stacked workspace layouts).
-  • properly close disabled outputs restored during a restart (this fixes state
-    handling when RandR changes happen during i3 restarts)
-  • don’t trigger bindings on window border clicks unless --border was
-    specified for the binding
-  • traverse numbered workspaces in correct order
-  • fix transition from named to numbered workspaces in “workspace next|prev”
-  • avoid setting urgency hint on content containers and above (fixes crashes)
-  • don’t trigger unrelated key bindings for --release bindings
-  • fix colormap handling for containers (fixes taking screenshots using xwd)
-  • check output crossing on ENTER_NOTIFY to dockarea (fixes pointer jumping)
-  • fix a use-after-free bug (fixes “floating enable” on single split windows)
-
- ┌────────────────────────────┐
- │ Thanks!                    │
- └────────────────────────────┘
-
-Thanks for testing, bugfixes, discussions and everything I forgot go out to:
-
-  Benedikt Heine, Cedric Buissart, Chih-Chyuan Hwang, Denton Liu, eplanet, Eric
-  Engeström, EvilPudding, Ferdinand Bachmann, Hong, Ingo Bürk, Jakob Schnell,
-  Jakub Wilk, johannes karoff, Johannes Lange, joshrosso, Julien Lequertier,
-  Kacper Kowalik, Kenneth Lyons, Kyle Kneitinger, madroach, Michael Vetter,
-  Nathan Schulte, Øsse, Peder Stray, Tony Crisci, Trevor Merrifield, wentasah,
-  yshui, Zamarin Arthur
-
--- Michael Stapelberg, 2016-11-08
diff --git a/RELEASE-NOTES-4.14 b/RELEASE-NOTES-4.14
new file mode 100644 (file)
index 0000000..2ab058f
--- /dev/null
@@ -0,0 +1,94 @@
+
+ ┌────────────────────────────┐
+ │ Release notes for i3 v4.14 │
+ └────────────────────────────┘
+
+This is i3 v4.14. This version is considered stable. All users of i3 are
+strongly encouraged to upgrade.
+
+Aside from many bug and documentation fixes, the “swap” command is a notable
+addition of this release. As is almost tradition at this point, keybinding
+handling has seen some fixes as well. A noticeable change for users with such
+monitors is i3’s support for RandR 1.5, which transparently supports the TILE
+property of first-gen 4K monitors and current 5K or 8K monitors.
+
+ ┌────────────────────────────┐
+ │ Changes in i3 v4.14        │
+ └────────────────────────────┘
+
+  • build: link libiconv explicitly for systems which need it
+  • build: move AnyEvent-I3 into the i3 repository
+  • docs/hacking-howto: add compilation instructions
+  • docs/ipc: add missing cases to the workspace event
+  • docs/ipc: document the “primary” field of the OUTPUTS reply
+  • docs/ipc: replace Go IPC library with a maintained one
+  • docs/ipc: add link to the ocaml-i3ipc library
+  • docs/ipc: fix invalid trailing commas in JSON examples
+  • docs/layout-saving: add section about troubleshooting window titles
+  • docs/testsuite: update for the move to autotools
+  • docs/userguide: clarify the move command syntax
+  • docs/userguide: correct “Esc” to “Escape”
+  • docs/userguide: clarify focus_follows_mouse behavior
+  • docs/userguide: expand on combining “workspace number” with a name
+  • docs/userguide: mention the magic v4 config marker
+  • man/i3.man: correct configuration lookup order
+  • i3bar, i3-config-wizard, i3-nagbar: use the Xft.dpi setting (see 4.13 notes)
+  • i3bar: restart bar status command on reload if it changed
+  • i3bar: treat left/right scrolling like up/down scrolling
+  • i3bar: accept “primary” in the “output” configuration directive
+  • i3-input: do not set input focus, grabbing the keyboard suffices
+  • i3-msg: return an exit code when missing the -t argument
+  • i3-sensible-editor: correct “mc-edit” to “mcedit”
+  • i3-sensible-terminal: add lilyterm, tilix, terminix, konsole
+  • respect SYSCONFDIR when looking for the default xdg directory
+  • use RandR 1.5 to query screens, supporting the TILE property commonly used
+    by multi-stream transport (MST) monitors, such as first-gen 4K monitors, or
+    current 5K and 8K monitors
+  • respect minimum size hints for floating windows
+  • support the _NET_MOVERESIZE_WINDOW client message (for e.g. wmctrl)
+  • validate binding modes are not defined more than once
+  • only react to the last ExposeEvent in a series of events
+  • add the shutdown IPC event (upon “restart” or “exit”)
+  • treat left/right scrolling like up/down scrolling (on window titles)
+  • make the “layout toggle” command optionally take a sequence of layouts
+  • introduce --exclude-titlebar flag for mouse bindings
+  • introduce the “swap” command
+  • support the primary output in the “focus” and “move” commands
+  • compare keybinding modifiers for equality, not subset
+  • introduce the GET_CONFIG ipc request (i3-msg -t get_config)
+  • start i3-nagbar when encountering invalid set statements
+  • focus windows upon ConfigureWindow requests with stack-mode=Above
+
+ ┌────────────────────────────┐
+ │ Bugfixes                   │
+ └────────────────────────────┘
+
+  • i3bar: correct the color codes used for statusline errors
+  • i3bar: avoid freeze after VisibilityNotify
+  • i3-dmenu-desktop: fix quoted command names
+  • i3-dmenu-desktop: avoid adding items multiple times
+  • fix various X11 resource leaks, memory leaks and memory errors
+  • fix IPC success reply for the workspace command
+  • report errors during logfile creation
+  • fix the signal handler being blank
+  • display marks and the title even if the title is empty (for title_format)
+  • fix changing workspace layout from stacked/tabbed for empty workspaces
+  • add numlock fallback to “bindcode” where necessary
+  • fix a crash on restart when using marks
+  • fix renaming workspaces when the new name starts with “to”
+  • respect dont_warp flag when moving containers
+
+ ┌────────────────────────────┐
+ │ Thanks!                    │
+ └────────────────────────────┘
+
+Thanks for testing, bugfixes, discussions and everything I forgot go out to:
+
+  akash akya, Armaël Guéneau, Baptiste Daroussin, Chih-Chyuan Hwang, cresh,
+  David Jimenez Sequero, Franz König, fred777, Ingo Bürk, Jakub Wilk,
+  Jens-Wolfhard Schicke-Uffmann, Johannes Lange, lasers, lebenlechzer,
+  loungecube, Maarten Dirkse, Manuel Mendez, Max Fisher, Mihai Coman, Nathan
+  Schulte, s3rb31, Sebastian Larsson, Stefan Hagen, Tobias Hänel, Tony Crisci,
+  Trevor Merrifield, Zbyněk Moravec
+
+-- Michael Stapelberg, 2017-09-04
index f2bf26f80e7c7cff73ead84be91744fcc8deb858..7d274e36b209e4fe7dc677c2f6707a075f30d595 100644 (file)
@@ -2,7 +2,7 @@
 # Run autoreconf -fi to generate a configure script from this file.
 
 AC_PREREQ([2.69])
-AC_INIT([i3], [4.13], [https://github.com/i3/i3/issues])
+AC_INIT([i3], [4.14], [https://github.com/i3/i3/issues])
 # For AX_EXTEND_SRCDIR
 AX_ENABLE_BUILDDIR
 AM_INIT_AUTOMAKE([foreign subdir-objects -Wall no-dist-gzip dist-bzip2])
index 2efd65e8637ab322e1d4e5661be5bc2c0283e598..bed38f8e0593779be621d895d8a36c734a0e18d9 100644 (file)
@@ -1,8 +1,14 @@
-i3-wm (4.13.1-1) unstable; urgency=medium
+i3-wm (4.14.1-1) unstable; urgency=medium
 
   * UNRELEASED
 
- -- Michael Stapelberg <stapelberg@debian.org>  Tue, 08 Nov 2016 21:31:13 +0100
+ -- Michael Stapelberg <stapelberg@debian.org>  Mon, 04 Sep 2017 08:17:05 +0200
+
+i3-wm (4.14-1) unstable; urgency=medium
+
+  * New upstream release.
+
+ -- Michael Stapelberg <stapelberg@debian.org>  Mon, 04 Sep 2017 07:53:16 +0200
 
 i3-wm (4.13-1) unstable; urgency=medium
 
index db98da13c54fc54d4400ba279314b06fffa4b825..795be0424fa477cf50d1e97b484881f37058d3c9 100644 (file)
@@ -82,6 +82,8 @@ The tests additionally require +Xephyr(1)+ to run a nested X server. Install
 $ cd ~/i3/testcases
 $ sudo apt-get install cpanminus
 $ sudo cpanm .
+$ cd ~/i3/AnyEvent-I3
+$ sudo cpanm .
 --------------------------------------------------------------------------------
 
 If you don’t want to use cpanminus for some reason, the same works with cpan:
@@ -90,6 +92,8 @@ If you don’t want to use cpanminus for some reason, the same works with cpan:
 --------------------------------------------------------------------------------
 $ cd ~/i3/testcases
 $ sudo cpan .
+$ cd ~/i3/AnyEvent-I3
+$ sudo cpan .
 --------------------------------------------------------------------------------
 
 In case you don’t have root permissions, you can also install into your home
@@ -112,7 +116,7 @@ the tests without an X session with Xvfb, such as with +xvfb-run
 ./complete-run+. This will also speed up the tests significantly especially on
 machines without a powerful video card.
 
-.Example invocation of complete-run.pl+
+.Example invocation of +complete-run.pl+
 ---------------------------------------
 $ cd ~/i3
 
@@ -171,11 +175,11 @@ $ ./complete-run.pl --parallel=1 --keep-xserver-output
 This will show the output of Xephyr, which is the X server implementation we
 use for testing.
 
-===== make command: make check
+===== make command: +make check+
 Make check runs the i3 testsuite.
 You can still use ./testcases/complete-run.pl to get the interactive progress output.
 
-.Example invocation of make check+
+.Example invocation of +make check+
 ---------------------------------------
 $ cd ~/i3
 
index 6ec4294f0078adff6b348ee373cac913b4319a44..7d38f73140d741c635aa0de25bd0e5809d94df75 100644 (file)
@@ -50,7 +50,6 @@ static char *argv0 = NULL;
 typedef struct {
     i3String *label;
     char *action;
-    bool exec_in_terminal;
     int16_t x;
     uint16_t width;
 } button_t;
@@ -124,7 +123,35 @@ static void start_application(const char *command) {
     wait(0);
 }
 
-static void execute_in_terminal(const char *command) {
+static button_t *get_button_at(int16_t x, int16_t y) {
+    for (int c = 0; c < buttoncnt; c++)
+        if (x >= (buttons[c].x) && x <= (buttons[c].x + buttons[c].width))
+            return &buttons[c];
+
+    return NULL;
+}
+
+static void handle_button_press(xcb_connection_t *conn, xcb_button_press_event_t *event) {
+    printf("button pressed on x = %d, y = %d\n",
+           event->event_x, event->event_y);
+    /* TODO: set a flag for the button, re-render */
+}
+
+/*
+ * Called when the user releases the mouse button. Checks whether the
+ * coordinates are over a button and executes the appropriate action.
+ *
+ */
+static void handle_button_release(xcb_connection_t *conn, xcb_button_release_event_t *event) {
+    printf("button released on x = %d, y = %d\n",
+           event->event_x, event->event_y);
+    /* If the user hits the close button, we exit(0) */
+    if (event->event_x >= btn_close.x && event->event_x < btn_close.x + btn_close.width)
+        exit(0);
+    button_t *button = get_button_at(event->event_x, event->event_y);
+    if (!button)
+        return;
+
     /* We need to create a custom script containing our actual command
      * since not every terminal emulator which is contained in
      * i3-sensible-terminal supports -e with multiple arguments (and not
@@ -145,7 +172,7 @@ static void execute_in_terminal(const char *command) {
         warn("Could not fdopen() temporary script to store the nagbar command");
         return;
     }
-    fprintf(script, "#!/bin/sh\nrm %s\n%s", script_path, command);
+    fprintf(script, "#!/bin/sh\nrm %s\n%s", script_path, button->action);
     /* Also closes fd */
     fclose(script);
 
@@ -167,43 +194,6 @@ static void execute_in_terminal(const char *command) {
     free(terminal_cmd);
     free(script_path);
     free(exe_path);
-}
-
-static button_t *get_button_at(int16_t x, int16_t y) {
-    for (int c = 0; c < buttoncnt; c++)
-        if (x >= (buttons[c].x) && x <= (buttons[c].x + buttons[c].width))
-            return &buttons[c];
-
-    return NULL;
-}
-
-static void handle_button_press(xcb_connection_t *conn, xcb_button_press_event_t *event) {
-    printf("button pressed on x = %d, y = %d\n",
-           event->event_x, event->event_y);
-    /* TODO: set a flag for the button, re-render */
-}
-
-/*
- * Called when the user releases the mouse button. Checks whether the
- * coordinates are over a button and executes the appropriate action.
- *
- */
-static void handle_button_release(xcb_connection_t *conn, xcb_button_release_event_t *event) {
-    printf("button released on x = %d, y = %d\n",
-           event->event_x, event->event_y);
-    /* If the user hits the close button, we exit(0) */
-    if (event->event_x >= btn_close.x && event->event_x < btn_close.x + btn_close.width)
-        exit(0);
-    button_t *button = get_button_at(event->event_x, event->event_y);
-    if (!button) {
-        return;
-    }
-
-    if (button->exec_in_terminal) {
-        execute_in_terminal(button->action);
-    } else {
-        start_application(button->action);
-    }
 
     /* TODO: unset flag, re-render */
 }
@@ -368,13 +358,12 @@ int main(int argc, char *argv[]) {
         {"version", no_argument, 0, 'v'},
         {"font", required_argument, 0, 'f'},
         {"button", required_argument, 0, 'b'},
-        {"button-sh", required_argument, 0, 'B'},
         {"help", no_argument, 0, 'h'},
         {"message", required_argument, 0, 'm'},
         {"type", required_argument, 0, 't'},
         {0, 0, 0, 0}};
 
-    char *options_string = "B:b:f:m:t:vh";
+    char *options_string = "b:f:m:t:vh";
 
     prompt = i3string_from_utf8("Please do not run this program.");
 
@@ -396,26 +385,15 @@ int main(int argc, char *argv[]) {
                 break;
             case 'h':
                 printf("i3-nagbar " I3_VERSION "\n");
-                printf("i3-nagbar [-m <message>] [-b <button> <terminal-action>] "
-                       "[-B <button> <shell-action> [-t warning|error] [-f <font>] [-v]\n");
+                printf("i3-nagbar [-m <message>] [-b <button> <action>] [-t warning|error] [-f <font>] [-v]\n");
                 return 0;
-            /* falls through */
-            case 'B':
             case 'b':
                 buttons = srealloc(buttons, sizeof(button_t) * (buttoncnt + 1));
                 buttons[buttoncnt].label = i3string_from_utf8(optarg);
                 buttons[buttoncnt].action = argv[optind];
-                if (o == 'b') {
-                    buttons[buttoncnt].exec_in_terminal = true;
-                    printf("button with label *%s* and terminal action *%s*\n",
-                           i3string_as_utf8(buttons[buttoncnt].label),
-                           buttons[buttoncnt].action);
-                } else {
-                    buttons[buttoncnt].exec_in_terminal = false;
-                    printf("button with label *%s* and shell action *%s*\n",
-                           i3string_as_utf8(buttons[buttoncnt].label),
-                           buttons[buttoncnt].action);
-                }
+                printf("button with label *%s* and action *%s*\n",
+                       i3string_as_utf8(buttons[buttoncnt].label),
+                       buttons[buttoncnt].action);
                 buttoncnt++;
                 printf("now %d buttons\n", buttoncnt);
                 if (optind < argc)
index 7dd3a238130e66ea09719d37aaa2365cfc4980f1..77fdd80b504ed5dd24c0f345ea1eefb2abfd086b 100644 (file)
@@ -9,7 +9,7 @@ i3-nagbar - displays an error bar on top of your screen
 
 == SYNOPSIS
 
-i3-nagbar [-m <message>] [-b <button> <terminal-action>] [-B <button> <shell-action>] [-t warning|error] [-f <font>] [-v]
+i3-nagbar [-m <message>] [-b <button> <action>] [-t warning|error] [-f <font>] [-v]
 
 == OPTIONS
 
@@ -29,13 +29,9 @@ Display 'message' as text on the left of the i3-nagbar.
 *-f, --font* 'font'::
 Select font that is being used.
 
-*-b, --button* 'button' 'terminal-action'::
-Adds a button labelled 'button' to the bar. When pressed, the command given
-in 'terminal-action' is executed inside a terminal emulator, via i3-sensible-terminal(1).
-Multiple buttons can be defined.
-
-*-B, --button-sh* 'button' 'shell-action'::
-Same as *--button*, except that the command given in 'shell-action' is executed directly by the shell.
+*-b, --button* 'button' 'action'::
+Create a button with text 'button'. The 'action' are the shell commands that
+will be executed by this button. Multiple buttons can be defined.
 
 == DESCRIPTION
 
@@ -53,7 +49,7 @@ i3-nagbar -m 'You have an error in your i3 config file!' \
 
 == SEE ALSO
 
-i3(1), i3-sensible-terminal(1)
+i3(1)
 
 == AUTHOR
 
index 7d83f54131a7c5b61deb7435e30aa4f2d855d024..c273e1161285df78230f7c8c3551d61ea74c6505 100644 (file)
@@ -406,21 +406,45 @@ static void handle_configure_request(xcb_configure_request_event_t *event) {
 
     if (event->value_mask & XCB_CONFIG_WINDOW_STACK_MODE) {
         DLOG("window 0x%08x wants to be stacked %d\n", event->window, event->stack_mode);
-        if (event->stack_mode == XCB_STACK_MODE_ABOVE) {
-            /* Emacs and IntelliJ Idea “request focus” by stacking their window
+
+        /* Emacs and IntelliJ Idea “request focus” by stacking their window
              * above all others. */
-            if (!fullscreen && con_is_leaf(con)) {
-                if (strcmp(con_get_workspace(con)->name, "__i3_scratch") == 0) {
-                    DLOG("This is a scratchpad container, ignoring ConfigureRequest\n");
-                    return;
-                }
+        if (event->stack_mode != XCB_STACK_MODE_ABOVE) {
+            DLOG("stack_mode != XCB_STACK_MODE_ABOVE, ignoring ConfigureRequest\n");
+            goto out;
+        }
 
-                con_focus(con);
-                tree_render();
-            }
+        if (fullscreen || !con_is_leaf(con)) {
+            DLOG("fullscreen or not a leaf, ignoring ConfigureRequest\n");
+            goto out;
+        }
+
+        Con *ws = con_get_workspace(con);
+        if (ws == NULL) {
+            DLOG("Window is not being managed, ignoring ConfigureRequest\n");
+            goto out;
+        }
+
+        if (strcmp(ws->name, "__i3_scratch") == 0) {
+            DLOG("This is a scratchpad container, ignoring ConfigureRequest\n");
+            goto out;
+        }
+
+        if (config.focus_on_window_activation == FOWA_FOCUS || (config.focus_on_window_activation == FOWA_SMART && workspace_is_visible(ws))) {
+            DLOG("Focusing con = %p\n", con);
+            workspace_show(ws);
+            con_focus(con);
+            tree_render();
+        } else if (config.focus_on_window_activation == FOWA_URGENT || (config.focus_on_window_activation == FOWA_SMART && !workspace_is_visible(ws))) {
+            DLOG("Marking con = %p urgent\n", con);
+            con_set_urgency(con, true);
+            tree_render();
+        } else {
+            DLOG("Ignoring request for con = %p.\n", con);
         }
     }
 
+out:
     fake_absolute_configure_notify(con);
 }
 
index 43efb3c2669f81a81d8b198a4eb398cc5122a1e1..212654466954649c47628b53ecb0dbc5cca5b524 100644 (file)
 #include <libgen.h>
 #include "shmlog.h"
 
+#ifdef I3_ASAN_ENABLED
+#include <sanitizer/lsan_interface.h>
+#endif
+
 #include "sd-daemon.h"
 
 /* The original value of RLIMIT_CORE when i3 was started. We need to restore
@@ -551,6 +555,9 @@ int main(int argc, char *argv[]) {
     xcb_generic_error_t *error = xcb_request_check(conn, cookie);
     if (error != NULL) {
         ELOG("Another window manager seems to be running (X error %d)\n", error->error_code);
+#ifdef I3_ASAN_ENABLED
+        __lsan_do_leak_check();
+#endif
         return 1;
     }
 
index 296b91dd10cf24b03966779c522a5627f3250036..8f039157f6f7547d57e66733aa4bffdb23f72345 100644 (file)
@@ -38,6 +38,7 @@ struct regex *regex_new(const char *pattern) {
         }
         ELOG("PCRE regular expression compilation failed at %d: %s\n",
              offset, error);
+        regex_free(re);
         return NULL;
     }
     re->extra = pcre_study(re->regex, 0, &error);
index e17852601fd11c3ed133a9e0ee5127de1b65eff9..a902d968d4dfa37a7b2e09c73cc405221b49207b 100644 (file)
@@ -36,4 +36,20 @@ sync_with_i3;
 is($x->input_focus, $left_window->id, 'left window has focus');
 isnt(get_focused($ws), $old_focus, 'right window is no longer focused');
 
+################################################################################
+# Verify the ConfigureWindow request is only applied when on the active
+# workspace.
+################################################################################
+
+$ws = fresh_workspace;
+my $new_window = open_window;
+
+is($x->input_focus, $new_window->id, 'new window has focus');
+$x->configure_window($left_window->id, CONFIG_WINDOW_STACK_MODE, (STACK_MODE_ABOVE));
+$x->flush;
+
+sync_with_i3;
+
+is($x->input_focus, $new_window->id, 'new window still has focus');
+
 done_testing;