]> git.lizzy.rs Git - bspwm.git/blobdiff - events.c
New setting: `split_ratio`
[bspwm.git] / events.c
index a126524ea16d76b6088a40c3aa768372b5829308..e3f9968cde830ebfba61f22cbafc31daaca06267 100644 (file)
--- a/events.c
+++ b/events.c
@@ -181,17 +181,9 @@ void property_notify(xcb_generic_event_t *evt)
         return;
 
     window_location_t loc;
-    if (locate_window(e->window, &loc)) {
-        if (xcb_icccm_get_wm_hints_reply(dpy, xcb_icccm_get_wm_hints(dpy, e->window), &hints, NULL) == 1) {
-            uint32_t urgent = xcb_icccm_wm_hints_get_urgency(&hints);
-            if (urgent != 0 && loc.node != mon->desk->focus) {
-                loc.node->client->urgent = urgent;
-                put_status();
-                if (loc.monitor->desk == loc.desktop)
-                    arrange(loc.monitor, loc.desktop);
-            }
-        }
-    }
+    if (locate_window(e->window, &loc)
+            && xcb_icccm_get_wm_hints_reply(dpy, xcb_icccm_get_wm_hints(dpy, e->window), &hints, NULL) == 1)
+        set_urgency(loc.monitor, loc.desktop, loc.node, xcb_icccm_wm_hints_get_urgency(&hints));
 }
 
 void client_message(xcb_generic_event_t *evt)
@@ -262,6 +254,13 @@ void handle_state(monitor_t *m, desktop_t *d, node_t *n, xcb_atom_t state, unsig
             toggle_fullscreen(m, n->client);
             arrange(m, d);
         }
+    } else if (state == ewmh->_NET_WM_STATE_DEMANDS_ATTENTION) {
+        if (action == XCB_EWMH_WM_STATE_ADD)
+            set_urgency(m, d, n, true);
+        else if (action == XCB_EWMH_WM_STATE_REMOVE)
+            set_urgency(m, d, n, false);
+        else if (action == XCB_EWMH_WM_STATE_TOGGLE)
+            set_urgency(m, d, n, !n->client->urgent);
     }
 }
 
@@ -421,31 +420,31 @@ void track_pointer(int root_x, int root_y)
             if (frozen_pointer->is_tiled) {
                 xcb_window_t pwin = XCB_NONE;
                 query_pointer(&pwin, NULL);
-                if (pwin != XCB_NONE) {
-                    window_location_t loc;
-                    bool is_managed = locate_window(pwin, &loc);
-                    if (is_managed && is_tiled(loc.node->client) && loc.monitor == m) {
-                        swap_nodes(d, n, loc.desktop, loc.node);
-                        arrange(m, d);
-                    } else {
-                        if (is_managed && !is_tiled(loc.node->client) && loc.monitor == m) {
+                if (pwin == win)
+                    return;
+                window_location_t loc;
+                bool is_managed = (pwin == XCB_NONE ? false : locate_window(pwin, &loc));
+                if (is_managed && is_tiled(loc.node->client) && loc.monitor == m) {
+                    swap_nodes(d, n, loc.desktop, loc.node);
+                    arrange(m, d);
+                } else {
+                    if (is_managed && loc.monitor == m) {
+                        return;
+                    } else if (!is_managed) {
+                        xcb_point_t pt = (xcb_point_t) {root_x, root_y};
+                        monitor_t *pmon = monitor_from_point(pt);
+                        if (pmon == NULL || pmon == m) {
                             return;
-                        } else if (!is_managed) {
-                            xcb_point_t pt = (xcb_point_t) {root_x, root_y};
-                            monitor_t *pmon = monitor_from_point(pt);
-                            if (pmon == NULL || pmon == m) {
-                                return;
-                            } else {
-                                loc.monitor = pmon;
-                                loc.desktop = pmon->desk;
-                            }
+                        } else {
+                            loc.monitor = pmon;
+                            loc.desktop = pmon->desk;
                         }
-                        transfer_node(m, d, loc.monitor, loc.desktop, n);
-                        arrange(m, d);
-                        arrange(loc.monitor, loc.desktop);
-                        frozen_pointer->monitor = loc.monitor;
-                        frozen_pointer->desktop = loc.desktop;
                     }
+                    transfer_node(m, d, loc.monitor, loc.desktop, n);
+                    arrange(m, d);
+                    arrange(loc.monitor, loc.desktop);
+                    frozen_pointer->monitor = loc.monitor;
+                    frozen_pointer->desktop = loc.desktop;
                 }
             } else {
                 x = rect.x + delta_x;