Fixes #811.
#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) {
#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);
}
}
-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;
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);
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);
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));