On Wed, May 15, 2013 at 09:41:11PM +0200, David Coppa wrote: > > The diff below updates i3 to the latest version (4.5.1). > works for me on my amd64 laptop and on my i386 netbook.
I might be doing something wrong.. but patch-src_x_c and patch-src_config_c don't apply cleanly. applying with "patch -p0 -E < ~/i3.diff" cat'ed .rej files below: @@ -1,80 +1,7 @@ $OpenBSD: patch-src_config_c,v 1.10 2013/01/25 10:34:02 dcoppa Exp $ - -From 2eb4ed95bcd5f039014db51eb56f0ac411401fa5 Mon Sep 17 00:00:00 2001 -From: Michael Stapelberg <[email protected]> -Date: Thu, 24 Jan 2013 13:44:01 +0000 -Subject: Bugfix: fix "overlapping" --release key bindings (Thanks phlux) - ---- src/config.c.orig Wed Dec 12 00:08:17 2012 -+++ src/config.c Fri Jan 25 07:41:46 2013 -@@ -31,7 +31,7 @@ void ungrab_all_keys(xcb_connection_t *conn) { - } - - static void grab_keycode_for_binding(xcb_connection_t *conn, Binding *bind, uint32_t keycode) { -- DLOG("Grabbing %d\n", keycode); -+ DLOG("Grabbing %d with modifiers %d (with mod_mask_lock %d)\n", keycode, bind->mods, bind->mods | XCB_MOD_MASK_LOCK); - /* Grab the key in all combinations */ - #define GRAB_KEY(modifier) \ - do { \ -@@ -65,14 +65,6 @@ Binding *get_binding(uint16_t modifiers, bool key_rele - if (bind->release == B_UPON_KEYRELEASE_IGNORE_MODS) - bind->release = B_UPON_KEYRELEASE; - } -- -- /* Then we transition the KeyRelease bindings into a state where the -- * modifiers no longer matter for the KeyRelease event so that users -- * can release the modifier key before releasing the actual key. */ -- TAILQ_FOREACH(bind, bindings, bindings) { -- if (bind->release == B_UPON_KEYRELEASE && !key_release) -- bind->release = B_UPON_KEYRELEASE_IGNORE_MODS; -- } - } - - TAILQ_FOREACH(bind, bindings, bindings) { -@@ -84,23 +76,33 @@ Binding *get_binding(uint16_t modifiers, bool key_rele - !key_release)) - continue; - -- /* Check if the binding is for a KeyPress or a KeyRelease event */ -- if ((bind->release == B_UPON_KEYPRESS && key_release) || -- (bind->release >= B_UPON_KEYRELEASE && !key_release)) -- continue; -- - /* If a symbol was specified by the user, we need to look in - * the array of translated keycodes for the event???s keycode */ - if (bind->symbol != NULL) { - if (memmem(bind->translated_to, - bind->number_keycodes * sizeof(xcb_keycode_t), -- &keycode, sizeof(xcb_keycode_t)) != NULL) -- break; -+ &keycode, sizeof(xcb_keycode_t)) == NULL) -+ continue; - } else { - /* This case is easier: The user specified a keycode */ -- if (bind->keycode == keycode) -- break; -+ if (bind->keycode != keycode) -+ continue; - } -+ -+ /* If this keybinding is a KeyRelease binding, it matches the key which -+ * the user pressed. We therefore mark it as -+ * B_UPON_KEYRELEASE_IGNORE_MODS for later, so that the user can -+ * release the modifiers before the actual key and the KeyRelease will -+ * still be matched. */ -+ if (bind->release == B_UPON_KEYRELEASE && !key_release) -+ bind->release = B_UPON_KEYRELEASE_IGNORE_MODS; -+ -+ /* Check if the binding is for a KeyPress or a KeyRelease event */ -+ if ((bind->release == B_UPON_KEYPRESS && key_release) || -+ (bind->release >= B_UPON_KEYRELEASE && !key_release)) -+ continue; -+ -+ break; - } - - return (bind == TAILQ_END(bindings) ? NULL : bind); -@@ -254,7 +256,7 @@ static char *get_config_path(const char *override_conf +--- src/config.c.orig Mon Mar 18 22:43:36 2013 ++++ src/config.c Mon May 13 08:27:23 2013 +@@ -256,7 +256,7 @@ static char *get_config_path(const char *override_conf /* 4: check for $XDG_CONFIG_DIRS/i3/config */ if ((xdg_config_dirs = getenv("XDG_CONFIG_DIRS")) == NULL) @@ -1,30 +1,10 @@ $OpenBSD: patch-src_x_c,v 1.11 2012/12/27 19:58:05 dcoppa Exp $ -Bugfix: draw right tab border for split containers -(upstream git commit ae605bdd394bdf83a8015ac626b222fd40e35b04) - OpenBSD lacks POSIX shared memory support (shm_open() and friends) ---- src/x.c.orig Wed Dec 12 00:08:17 2012 -+++ src/x.c Thu Dec 27 15:19:49 2012 -@@ -505,7 +505,7 @@ void x_draw_decoration(Con *con) { - con->deco_rect.width - 2); - free(title); - -- goto copy_pixmaps; -+ goto after_title; - } - - if (win->name == NULL) -@@ -533,6 +533,7 @@ void x_draw_decoration(Con *con) { - con->deco_rect.x + 2 + indent_px, con->deco_rect.y + text_offset_y, - con->deco_rect.width - 2 - indent_px); - -+after_title: - /* Since we don???t clip the text at all, it might in some cases be painted - * on the border pixels on the right side of a window. Therefore, we draw - * the right border again after rendering the text (and the unconnected -@@ -1057,8 +1058,10 @@ void x_set_i3_atoms(void) { +--- src/x.c.orig Mon Mar 18 22:43:36 2013 ++++ src/x.c Mon May 13 08:27:23 2013 +@@ -1064,8 +1064,10 @@ void x_set_i3_atoms(void) { xcb_change_property(conn, XCB_PROP_MODE_REPLACE, root, A_I3_PID, XCB_ATOM_CARDINAL, 32, 1, &pid); xcb_change_property(conn, XCB_PROP_MODE_REPLACE, root, A_I3_CONFIG_PATH, A_UTF8_STRING, 8, strlen(current_configpath), current_configpath);
