[mutter] Reorganize tab popup code a bit more cleanly.
- From: Dan Winship <danw src gnome org>
- To: svn-commits-list gnome org
- Subject: [mutter] Reorganize tab popup code a bit more cleanly.
- Date: Mon, 4 May 2009 10:26:38 -0400 (EDT)
commit cbf4be04fc09570e78131bd32b9d534976f58c3f
Author: Dan Winship <danw gnome org>
Date: Mon Apr 27 10:01:30 2009 -0400
Reorganize tab popup code a bit more cleanly.
Rather than trying to reverse-engineer what kind of tab/workspace
popup to create from within meta_display_begin_grab_op(), just create
the popup directly from do_choose_window()/handle_workspace_switch()
after completing the grab, since they already know which kind they
want.
Also add meta_screen_destroy_tab_popup()/_destroy_workspace_popup()
rather than having meta_display_end_grab_op() poke into MetaScreen's
internals itself.
http://bugzilla.gnome.org/show_bug.cgi?id=580917
---
src/core/display.c | 51 +++-----------------------------------------
src/core/keybindings.c | 5 ++++
src/core/screen-private.h | 4 ++-
src/core/screen.c | 20 +++++++++++++++++
4 files changed, 32 insertions(+), 48 deletions(-)
diff --git a/src/core/display.c b/src/core/display.c
index d627b5c..da4a274 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -3512,48 +3512,6 @@ meta_display_begin_grab_op (MetaDisplay *display,
meta_stack_get_positions (screen->stack);
}
- /* Do this last, after everything is set up. */
- switch (op)
- {
- case META_GRAB_OP_KEYBOARD_TABBING_NORMAL:
- meta_screen_ensure_tab_popup (screen,
- META_TAB_LIST_NORMAL,
- META_TAB_SHOW_ICON);
- break;
- case META_GRAB_OP_KEYBOARD_ESCAPING_NORMAL:
- meta_screen_ensure_tab_popup (screen,
- META_TAB_LIST_NORMAL,
- META_TAB_SHOW_INSTANTLY);
- break;
-
- case META_GRAB_OP_KEYBOARD_TABBING_DOCK:
- meta_screen_ensure_tab_popup (screen,
- META_TAB_LIST_DOCKS,
- META_TAB_SHOW_ICON);
- break;
- case META_GRAB_OP_KEYBOARD_ESCAPING_DOCK:
- meta_screen_ensure_tab_popup (screen,
- META_TAB_LIST_DOCKS,
- META_TAB_SHOW_INSTANTLY);
- break;
- case META_GRAB_OP_KEYBOARD_TABBING_GROUP:
- meta_screen_ensure_tab_popup (screen,
- META_TAB_LIST_GROUP,
- META_TAB_SHOW_ICON);
- break;
- case META_GRAB_OP_KEYBOARD_ESCAPING_GROUP:
- meta_screen_ensure_tab_popup (screen,
- META_TAB_LIST_GROUP,
- META_TAB_SHOW_INSTANTLY);
-
- case META_GRAB_OP_KEYBOARD_WORKSPACE_SWITCHING:
- meta_screen_ensure_workspace_popup (screen);
- break;
-
- default:
- break;
- }
-
if (display->grab_window)
{
meta_window_refresh_resize_popup (display->grab_window);
@@ -3593,11 +3551,10 @@ meta_display_end_grab_op (MetaDisplay *display,
if (GRAB_OP_IS_WINDOW_SWITCH (display->grab_op) ||
display->grab_op == META_GRAB_OP_KEYBOARD_WORKSPACE_SWITCHING)
{
- if (display->grab_screen->tab_popup)
- {
- meta_ui_tab_popup_free (display->grab_screen->tab_popup);
- display->grab_screen->tab_popup = NULL;
- }
+ if (GRAB_OP_IS_WINDOW_SWITCH (display->grab_op))
+ meta_screen_destroy_tab_popup (display->grab_screen);
+ else
+ meta_screen_destroy_workspace_popup (display->grab_screen);
/* If the ungrab here causes an EnterNotify, ignore it for
* sloppy focus
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 21c913c..423cd09 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -3074,6 +3074,10 @@ do_choose_window (MetaDisplay *display,
return;
}
+ meta_screen_ensure_tab_popup (screen, type,
+ show_popup ? META_TAB_SHOW_ICON :
+ META_TAB_SHOW_INSTANTLY);
+
meta_ui_tab_popup_select (screen->tab_popup,
(MetaTabEntryKey) initial_selection->xwindow);
@@ -3455,6 +3459,7 @@ handle_workspace_switch (MetaDisplay *display,
if (grabbed_before_release && !meta_prefs_get_no_tab_popup ())
{
+ meta_screen_ensure_workspace_popup (screen);
meta_ui_tab_popup_select (screen->tab_popup, (MetaTabEntryKey) next);
/* only after selecting proper space */
diff --git a/src/core/screen-private.h b/src/core/screen-private.h
index 30aeaa2..51a9d6a 100644
--- a/src/core/screen-private.h
+++ b/src/core/screen-private.h
@@ -167,7 +167,9 @@ void meta_screen_update_cursor (MetaScreen *scree
void meta_screen_ensure_tab_popup (MetaScreen *screen,
MetaTabList list_type,
MetaTabShowType show_type);
-void meta_screen_ensure_workspace_popup (MetaScreen *screen);
+void meta_screen_destroy_tab_popup (MetaScreen *screen);
+void meta_screen_ensure_workspace_popup (MetaScreen *screen);
+void meta_screen_destroy_workspace_popup (MetaScreen *screen);
MetaWindow* meta_screen_get_mouse_window (MetaScreen *screen,
MetaWindow *not_this_one);
diff --git a/src/core/screen.c b/src/core/screen.c
index e0a3374..b8aa289 100644
--- a/src/core/screen.c
+++ b/src/core/screen.c
@@ -1534,6 +1534,16 @@ meta_screen_ensure_tab_popup (MetaScreen *screen,
}
void
+meta_screen_destroy_tab_popup (MetaScreen *screen)
+{
+ if (screen->tab_popup)
+ {
+ meta_ui_tab_popup_free (screen->tab_popup);
+ screen->tab_popup = NULL;
+ }
+}
+
+void
meta_screen_ensure_workspace_popup (MetaScreen *screen)
{
MetaTabEntry *entries;
@@ -1601,6 +1611,16 @@ meta_screen_ensure_workspace_popup (MetaScreen *screen)
/* don't show tab popup, since proper space isn't selected yet */
}
+void
+meta_screen_destroy_workspace_popup (MetaScreen *screen)
+{
+ if (screen->tab_popup)
+ {
+ meta_ui_tab_popup_free (screen->tab_popup);
+ screen->tab_popup = NULL;
+ }
+}
+
MetaWindow*
meta_screen_get_mouse_window (MetaScreen *screen,
MetaWindow *not_this_one)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]