]> git.sur5r.net Git - i3/i3/commitdiff
Merge pull request #1895 from Airblader/bug-1883
authorMichael Stapelberg <stapelberg@users.noreply.github.com>
Sun, 6 Sep 2015 11:26:53 +0000 (13:26 +0200)
committerMichael Stapelberg <stapelberg@users.noreply.github.com>
Sun, 6 Sep 2015 11:26:53 +0000 (13:26 +0200)
Support moving dock clients to another output.

libi3/string.c
src/bindings.c
src/con.c
src/window.c

index a7b8c6fc4f1a6be6917106423cb58616500d8b66..7741fde064f0ade5ab81583d802c3e593f7cdcc1 100644 (file)
@@ -194,7 +194,10 @@ void i3string_set_markup(i3String *str, bool is_markup) {
 i3String *i3string_escape_markup(i3String *str) {
 #if PANGO_SUPPORT
     const char *text = i3string_as_utf8(str);
-    return i3string_from_utf8(g_markup_escape_text(text, -1));
+    char *escaped = g_markup_escape_text(text, -1);
+    i3String *result = i3string_from_utf8(escaped);
+    free(escaped);
+    return result;
 #else
     return str;
 #endif
index f9d2cf8d3252639396b46d5b5303f857c0b832ed..32aac05af3d605e5c9c0f6fa4b7442e6db726e23 100644 (file)
@@ -80,13 +80,13 @@ Binding *configure_binding(const char *bindtype, const char *modifiers, const ch
     new_binding->command = sstrdup(command);
     new_binding->event_state_mask = event_state_from_str(modifiers);
     int group_bits_set = 0;
-    if (new_binding->event_state_mask & I3_XKB_GROUP_MASK_1)
+    if ((new_binding->event_state_mask >> 16) & I3_XKB_GROUP_MASK_1)
         group_bits_set++;
-    if (new_binding->event_state_mask & I3_XKB_GROUP_MASK_2)
+    if ((new_binding->event_state_mask >> 16) & I3_XKB_GROUP_MASK_2)
         group_bits_set++;
-    if (new_binding->event_state_mask & I3_XKB_GROUP_MASK_3)
+    if ((new_binding->event_state_mask >> 16) & I3_XKB_GROUP_MASK_3)
         group_bits_set++;
-    if (new_binding->event_state_mask & I3_XKB_GROUP_MASK_4)
+    if ((new_binding->event_state_mask >> 16) & I3_XKB_GROUP_MASK_4)
         group_bits_set++;
     if (group_bits_set > 1)
         ELOG("Keybinding has more than one Group specified, but your X server is always in precisely one group. The keybinding can never trigger.\n");
index b1ddf2acc3340eb4d955dcf15f0bcba336627417..9a5d36c13c4e32bd9aa858f73171ba724b172cd0 100644 (file)
--- a/src/con.c
+++ b/src/con.c
@@ -1245,18 +1245,13 @@ Rect con_border_style_rect(Con *con) {
     int border_style = con_border_style(con);
     if (border_style == BS_NONE)
         return (Rect){0, 0, 0, 0};
-    borders_to_hide = con_adjacent_borders(con) & config.hide_edge_borders;
     if (border_style == BS_NORMAL) {
         result = (Rect){border_width, 0, -(2 * border_width), -(border_width)};
     } else {
         result = (Rect){border_width, border_width, -(2 * border_width), -(2 * border_width)};
     }
 
-    /* Floating windows are never adjacent to any other window, so
-       don’t hide their border(s). This prevents bug #998. */
-    if (con_is_floating(con))
-        return result;
-
+    borders_to_hide = con_adjacent_borders(con) & config.hide_edge_borders;
     if (borders_to_hide & ADJ_LEFT_SCREEN_EDGE) {
         result.x -= border_width;
         result.width += border_width;
@@ -1280,6 +1275,11 @@ Rect con_border_style_rect(Con *con) {
  */
 adjacent_t con_adjacent_borders(Con *con) {
     adjacent_t result = ADJ_NONE;
+    /* Floating windows are never adjacent to any other window, so
+       don’t hide their border(s). This prevents bug #998. */
+    if (con_is_floating(con))
+        return result;
+
     Con *workspace = con_get_workspace(con);
     if (con->rect.x == workspace->rect.x)
         result |= ADJ_LEFT_SCREEN_EDGE;
index 278918c74eb42ecf4b829a4adfb3009a756ce4be..5898333f3d6490f9074f53b50df9511208b29c22 100644 (file)
@@ -359,7 +359,7 @@ i3String *window_parse_title_format(i3Window *win) {
     for (char *walk = format; *walk != '\0'; walk++) {
         if (STARTS_WITH(walk, "%title")) {
             if (escaped_title == NULL)
-                escaped_title = i3string_as_utf8(is_markup ? i3string_escape_markup(win->name) : win->name);
+                escaped_title = win->name == NULL ? "" : i3string_as_utf8(is_markup ? i3string_escape_markup(win->name) : win->name);
 
             buffer_len = buffer_len - strlen("%title") + strlen(escaped_title);
             walk += strlen("%title") - 1;
@@ -396,6 +396,8 @@ i3String *window_parse_title_format(i3Window *win) {
         } else if (STARTS_WITH(walk + 1, "instance")) {
             outwalk += sprintf(outwalk, "%s", escaped_instance);
             walk += strlen("instance");
+        } else {
+            *(outwalk++) = *walk;
         }
     }
     *outwalk = '\0';