]> git.sur5r.net Git - i3/i3/blobdiff - src/window.c
Merge branch 'fix-dump-log-errmsg'
[i3/i3] / src / window.c
index 30957a4b81678e3f629d12acb6303b17812fa8f2..e9e61f16c01aa57c64ac0a28ea425bd81afb028a 100644 (file)
@@ -2,7 +2,7 @@
  * vim:ts=4:sw=4:expandtab
  *
  * i3 - an improved dynamic tiling window manager
- * © 2009-2011 Michael Stapelberg and contributors (see also: LICENSE)
+ * © 2009-2012 Michael Stapelberg and contributors (see also: LICENSE)
  *
  * window.c: Updates window attributes (X11 hints/properties).
  *
@@ -68,8 +68,8 @@ void window_update_name(i3Window *win, xcb_get_property_reply_t *prop, bool befo
         return;
     }
     /* Convert it to UCS-2 here for not having to convert it later every time we want to pass it to X */
-    int len;
-    char *ucs2_name = convert_utf8_to_ucs2(new_name, &len);
+    size_t len;
+    xcb_char2b_t *ucs2_name = convert_utf8_to_ucs2(new_name, &len);
     if (ucs2_name == NULL) {
         LOG("Could not convert _NET_WM_NAME to UCS-2, ignoring new hint\n");
         FREE(new_name);
@@ -79,7 +79,7 @@ void window_update_name(i3Window *win, xcb_get_property_reply_t *prop, bool befo
     FREE(win->name_x);
     FREE(win->name_json);
     win->name_json = new_name;
-    win->name_x = ucs2_name;
+    win->name_x = (char*)ucs2_name;
     win->name_len = len;
     win->name_x_changed = true;
     LOG("_NET_WM_NAME changed to \"%s\"\n", win->name_json);
@@ -251,3 +251,28 @@ void window_update_role(i3Window *win, xcb_get_property_reply_t *prop, bool befo
 
     free(prop);
 }
+
+/*
+ * Updates the WM_HINTS (we only care about the input focus handling part).
+ *
+ */
+void window_update_hints(i3Window *win, xcb_get_property_reply_t *prop) {
+    if (prop == NULL || xcb_get_property_value_length(prop) == 0) {
+        DLOG("WM_HINTS not set.\n");
+        FREE(prop);
+        return;
+    }
+
+    xcb_icccm_wm_hints_t hints;
+
+    if (!xcb_icccm_get_wm_hints_from_reply(&hints, prop)) {
+        DLOG("Could not get WM_HINTS\n");
+        free(prop);
+        return;
+    }
+
+    win->doesnt_accept_focus = !hints.input;
+    LOG("WM_HINTS.input changed to \"%d\"\n", hints.input);
+
+    free(prop);
+}