]> git.sur5r.net Git - i3/i3/blobdiff - src/con.c
Ensure that the "border" command uses logical pixels.
[i3/i3] / src / con.c
index 24809efbbf99f696f091ba8b67b9b4983d0a6f52..cd17f9e51e0c035754b3b1580a8b4b276e0c071b 100644 (file)
--- a/src/con.c
+++ b/src/con.c
@@ -608,7 +608,8 @@ void con_mark(Con *con, const char *mark, mark_mode_t mode) {
         DLOG("Removing all existing marks on con = %p.\n", con);
 
         mark_t *current;
-        TAILQ_FOREACH(current, &(con->marks_head), marks) {
+        while (!TAILQ_EMPTY(&(con->marks_head))) {
+            current = TAILQ_FIRST(&(con->marks_head));
             con_unmark(con, current->name);
         }
     }
@@ -1079,6 +1080,7 @@ static bool _con_move_to_con(Con *con, Con *target, bool behind_focused, bool fi
     CALL(parent, on_remove_child);
 
     ipc_send_window_event("move", con);
+    ewmh_update_wm_desktop();
     return true;
 }
 
@@ -1991,6 +1993,7 @@ char *con_get_tree_representation(Con *con) {
                   (TAILQ_FIRST(&(con->nodes_head)) == child ? "" : " "), child_txt);
         free(buf);
         buf = tmp_buf;
+        free(child_txt);
     }
 
     /* 3) close the brackets */
@@ -2000,3 +2003,47 @@ char *con_get_tree_representation(Con *con) {
 
     return complete_buf;
 }
+
+/*
+ * Returns the container's title considering the current title format.
+ *
+ */
+i3String *con_parse_title_format(Con *con) {
+    assert(con->title_format != NULL);
+
+    i3Window *win = con->window;
+
+    /* We need to ensure that we only escape the window title if pango
+     * is used by the current font. */
+    const bool pango_markup = font_is_pango();
+
+    char *title;
+    char *class;
+    char *instance;
+    if (win == NULL) {
+        title = pango_escape_markup(con_get_tree_representation(con));
+        class = sstrdup("i3-frame");
+        instance = sstrdup("i3-frame");
+    } else {
+        title = pango_escape_markup(sstrdup((win->name == NULL) ? "" : i3string_as_utf8(win->name)));
+        class = pango_escape_markup(sstrdup((win->class_class == NULL) ? "" : win->class_class));
+        instance = pango_escape_markup(sstrdup((win->class_instance == NULL) ? "" : win->class_instance));
+    }
+
+    placeholder_t placeholders[] = {
+        {.name = "%title", .value = title},
+        {.name = "%class", .value = class},
+        {.name = "%instance", .value = instance}};
+    const size_t num = sizeof(placeholders) / sizeof(placeholder_t);
+
+    char *formatted_str = format_placeholders(con->title_format, &placeholders[0], num);
+    i3String *formatted = i3string_from_utf8(formatted_str);
+    i3string_set_markup(formatted, pango_markup);
+    FREE(formatted_str);
+
+    for (size_t i = 0; i < num; i++) {
+        FREE(placeholders[i].value);
+    }
+
+    return formatted;
+}