diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/keybindings.c | 6 | ||||
-rw-r--r-- | src/window.c | 38 | ||||
-rw-r--r-- | src/window.h | 3 |
3 files changed, 36 insertions, 11 deletions
diff --git a/src/keybindings.c b/src/keybindings.c index 5e4e15a..b1aac40 100644 --- a/src/keybindings.c +++ b/src/keybindings.c @@ -707,9 +707,9 @@ process_tab_grab (MetaDisplay *display, meta_verbose ("Ending grab early so we can focus the target window\n"); meta_display_end_grab_op (display, event->xkey.time); - meta_verbose ("Focusing target window\n"); - meta_window_raise (target_window); - meta_window_focus (target_window, event->xkey.time); + meta_verbose ("Activating target window\n"); + + meta_window_activate (target_window, event->xkey.time); return TRUE; /* we already ended the grab */ } diff --git a/src/window.c b/src/window.c index 2bf6367..42e8c66 100644 --- a/src/window.c +++ b/src/window.c @@ -116,6 +116,7 @@ static char* get_utf8_property (MetaDisplay *display, Atom atom); void meta_window_unqueue_calc_showing (MetaWindow *window); +void meta_window_flush_calc_showing (MetaWindow *window); static void meta_window_apply_session_info (MetaWindow *window, const MetaWindowSessionInfo *info); @@ -957,6 +958,16 @@ meta_window_unqueue_calc_showing (MetaWindow *window) } void +meta_window_flush_calc_showing (MetaWindow *window) +{ + if (window->calc_showing_queued) + { + meta_window_unqueue_calc_showing (window); + meta_window_calc_showing (window); + } +} + +void meta_window_queue_calc_showing (MetaWindow *window) { if (window->unmanaging) @@ -1196,6 +1207,22 @@ meta_window_unshade (MetaWindow *window) } } +void +meta_window_activate (MetaWindow *window, + guint32 timestamp) +{ + /* Get window on current workspace */ + if (!meta_window_visible_on_workspace (window, + window->screen->active_workspace)) + meta_window_change_workspace (window, + window->screen->active_workspace); + + if (window->minimized) + meta_window_unminimize (window); + + meta_window_raise (window); + meta_window_focus (window, timestamp); +} /* returns values suitable for meta_window_move */ static void @@ -1914,6 +1941,8 @@ meta_window_focus (MetaWindow *window, window->display->grab_window->desc, window->desc); return; } + + meta_window_flush_calc_showing (window); /* For output-only or shaded windows, focus the frame. * This seems to result in the client window getting key events @@ -2486,14 +2515,7 @@ meta_window_client_message (MetaWindow *window, { meta_verbose ("_NET_ACTIVE_WINDOW request for window '%s'", window->desc); - /* Get window on current workspace */ - if (!meta_window_visible_on_workspace (window, - window->screen->active_workspace)) - meta_window_change_workspace (window, - window->screen->active_workspace); - - meta_window_raise (window); - meta_window_focus (window, CurrentTime); /* FIXME CurrentTime */ + meta_window_activate (window, CurrentTime); return TRUE; } diff --git a/src/window.h b/src/window.h index f3118d8..dd89edd 100644 --- a/src/window.h +++ b/src/window.h @@ -242,6 +242,9 @@ void meta_window_change_workspace (MetaWindow *window, void meta_window_stick (MetaWindow *window); void meta_window_unstick (MetaWindow *window); +void meta_window_activate (MetaWindow *window, + guint32 current_time); + /* args to move are window pos, not frame pos */ void meta_window_move (MetaWindow *window, gboolean user_op, |