]> git.lizzy.rs Git - bspwm.git/commitdiff
Set the input focus before unmapping windows
authorBastien Dejean <nihilhill@gmail.com>
Mon, 3 Aug 2020 11:37:54 +0000 (13:37 +0200)
committerBastien Dejean <nihilhill@gmail.com>
Mon, 3 Aug 2020 11:37:54 +0000 (13:37 +0200)
Fixes #811.

src/desktop.c
src/desktop.h
src/monitor.c
src/monitor.h
src/tree.c

index f8571226d020c82377c7a32ad92859e4571099ae..aba3729f7246784740f34496fcca425281aae2ff 100644 (file)
 #include "subscribe.h"
 #include "settings.h"
 
-void focus_desktop(monitor_t *m, desktop_t *d)
-{
-       bool changed = (m != mon || m->desk != d);
-
-       focus_monitor(m);
-
-       if (m->desk != d) {
-               show_desktop(d);
-               hide_desktop(m->desk);
-               m->desk = d;
-       }
-
-       if (changed) {
-               ewmh_update_current_desktop();
-               put_status(SBSC_MASK_DESKTOP_FOCUS, "desktop_focus 0x%08X 0x%08X\n", m->id, d->id);
-       }
-}
-
 bool activate_desktop(monitor_t *m, desktop_t *d)
 {
        if (d != NULL && m == mon) {
index 132a4824bbe07b6c27536d5aeae834d43d971973..33fa595060895bce7b4b32cb92a6789dfc2db8db 100644 (file)
@@ -27,7 +27,6 @@
 
 #define DEFAULT_DESK_NAME    "Desktop"
 
-void focus_desktop(monitor_t *m, desktop_t *d);
 bool activate_desktop(monitor_t *m, desktop_t *d);
 bool find_closest_desktop(coordinates_t *ref, coordinates_t *dst, cycle_dir_t dir, desktop_select_t *sel);
 bool find_any_desktop(coordinates_t *ref, coordinates_t *dst, desktop_select_t *sel);
index 38805828e48a2e292786d118307af177075d3589..4b248bc2843cf565a79593c73d65da570a876005 100644 (file)
@@ -196,21 +196,6 @@ void adapt_geometry(xcb_rectangle_t *rs, xcb_rectangle_t *rd, node_t *n)
        }
 }
 
-void focus_monitor(monitor_t *m)
-{
-       if (mon == m) {
-               return;
-       }
-
-       mon = m;
-
-       if (pointer_follows_monitor) {
-               center_pointer(m->rectangle);
-       }
-
-       put_status(SBSC_MASK_MONITOR_FOCUS, "monitor_focus 0x%08X\n", m->id);
-}
-
 void add_monitor(monitor_t *m)
 {
        xcb_rectangle_t r = m->rectangle;
index 33b64e5c2355a078adac0c1a8bb592ac40530c28..90aaeb4b701fd01d68abefea3a60bfe1667fef0a 100644 (file)
@@ -35,7 +35,6 @@ monitor_t *find_monitor(uint32_t id);
 monitor_t *get_monitor_by_randr_id(xcb_randr_output_t id);
 void embrace_client(monitor_t *m, client_t *c);
 void adapt_geometry(xcb_rectangle_t *rs, xcb_rectangle_t *rd, node_t *n);
-void focus_monitor(monitor_t *m);
 void add_monitor(monitor_t *m);
 void unlink_monitor(monitor_t *m);
 void remove_monitor(monitor_t *m);
index 7ef784c4e6f5029ef7738b6096ba8bd8da854ccd..7481ccae7c660d3499a15ef21e31c62d98b3a847 100644 (file)
@@ -609,9 +609,36 @@ bool focus_node(monitor_t *m, desktop_t *d, node_t *n)
 
        draw_border(n, true, true);
 
-       focus_desktop(m, d);
+       bool desk_changed = (m != mon || m->desk != d);
+       bool has_input_focus = false;
+
+       if (mon != m) {
+               mon = m;
+
+               if (pointer_follows_monitor) {
+                       center_pointer(m->rectangle);
+               }
+
+               put_status(SBSC_MASK_MONITOR_FOCUS, "monitor_focus 0x%08X\n", m->id);
+       }
+
+       if (m->desk != d) {
+               show_desktop(d);
+               set_input_focus(n);
+               has_input_focus = true;
+               hide_desktop(m->desk);
+               m->desk = d;
+       }
+
+       if (desk_changed) {
+               ewmh_update_current_desktop();
+               put_status(SBSC_MASK_DESKTOP_FOCUS, "desktop_focus 0x%08X 0x%08X\n", m->id, d->id);
+       }
 
        d->focus = n;
+       if (!has_input_focus) {
+               set_input_focus(n);
+       }
        ewmh_update_active_window();
        history_add(m, d, n, true);
 
@@ -627,7 +654,6 @@ bool focus_node(monitor_t *m, desktop_t *d, node_t *n)
        put_status(SBSC_MASK_NODE_FOCUS, "node_focus 0x%08X 0x%08X 0x%08X\n", m->id, d->id, n->id);
 
        stack(d, n, true);
-       set_input_focus(n);
 
        if (pointer_follows_focus) {
                center_pointer(get_rectangle(m, d, n));