From ea4cd882853973755ad7bad704f822d3b5b4857d Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Mon, 3 Oct 2005 19:06:17 +0000 Subject: [PATCH] =?UTF-8?q?Patch=20from=20Bj=C3=B6rn=20Lindqvist=20fix=20t?= =?UTF-8?q?he=20workspace=20switcher=20tabpopup=20to=20display?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2005-10-03 Elijah Newren Patch from Björn Lindqvist fix the workspace switcher tabpopup to display the right windows and to fix the pick-a-new-window-to-focus algorithm in order to not select windows that aren't showing. Fixes #170475. * src/tabpopup.c (meta_convert_meta_to_wnck, meta_select_workspace_expose_event): factor out conversion code from meta_select_workspace_expose_event() into the new meta_convert_meta_to_wnck() function * src/tabpopup.c (meta_select_workspace_expose_event): * src/workspace.c (focus_ancestor_or_mru_window): replace the buggy window->minimized logic with !meta_window_showing_on_its_workspace (window) --- ChangeLog | 17 +++++++++++++++ src/tabpopup.c | 57 +++++++++++++++++++++++++++++++------------------ src/workspace.c | 2 +- 3 files changed, 54 insertions(+), 22 deletions(-) diff --git a/ChangeLog b/ChangeLog index c3ae57eae..046e9199b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2005-10-03 Elijah Newren + + Patch from Björn Lindqvist fix the workspace switcher tabpopup to + display the right windows and to fix the + pick-a-new-window-to-focus algorithm in order to not select + windows that aren't showing. Fixes #170475. + + * src/tabpopup.c (meta_convert_meta_to_wnck, + meta_select_workspace_expose_event): factor out conversion code + from meta_select_workspace_expose_event() into the new + meta_convert_meta_to_wnck() function + + * src/tabpopup.c (meta_select_workspace_expose_event): + * src/workspace.c (focus_ancestor_or_mru_window): + replace the buggy window->minimized logic with + !meta_window_showing_on_its_workspace (window) + 2005-10-03 Elijah Newren Patch from Björn Lindqvist to have ancestors come along with the diff --git a/src/tabpopup.c b/src/tabpopup.c index d3936b1f4..80ad9724f 100644 --- a/src/tabpopup.c +++ b/src/tabpopup.c @@ -808,6 +808,40 @@ meta_select_workspace_class_init (MetaSelectWorkspaceClass *klass) widget_class->expose_event = meta_select_workspace_expose_event; } +/** + * meta_convert_meta_to_wnck() converts a MetaWindow to a + * WnckWindowDisplayInfo window that is used to build a thumbnail of a + * workspace. + **/ +static WnckWindowDisplayInfo +meta_convert_meta_to_wnck (MetaWindow *window, MetaScreen *screen) +{ + WnckWindowDisplayInfo wnck_window; + wnck_window.icon = window->icon; + wnck_window.mini_icon = window->mini_icon; + + wnck_window.is_active = FALSE; + if (window == window->display->expected_focus_window) + wnck_window.is_active = TRUE; + + if (window->frame) + { + wnck_window.x = window->frame->rect.x; + wnck_window.y = window->frame->rect.y; + wnck_window.width = window->frame->rect.width; + wnck_window.height = window->frame->rect.height; + } + else + { + wnck_window.x = window->rect.x; + wnck_window.y = window->rect.y; + wnck_window.width = window->rect.width; + wnck_window.height = window->rect.height; + } + return wnck_window; +} + + static gboolean meta_select_workspace_expose_event (GtkWidget *widget, GdkEventExpose *event) @@ -836,7 +870,7 @@ meta_select_workspace_expose_event (GtkWidget *widget, workspace != workspace->screen->active_workspace; if (window->skip_pager || - window->minimized || + !meta_window_showing_on_its_workspace (window) || window->unmaps_pending || ignoreable_sticky) { @@ -844,26 +878,7 @@ meta_select_workspace_expose_event (GtkWidget *widget, } else { - windows[i].icon = window->icon; - windows[i].mini_icon = window->mini_icon; - windows[i].is_active = - (window == window->display->expected_focus_window); - - if (window->frame) - { - windows[i].x = window->frame->rect.x; - windows[i].y = window->frame->rect.y; - windows[i].width = window->frame->rect.width; - windows[i].height = window->frame->rect.height; - } - else - { - windows[i].x = window->rect.x; - windows[i].y = window->rect.y; - windows[i].width = window->rect.width; - windows[i].height = window->rect.height; - } - + windows[i] = meta_convert_meta_to_wnck (window, workspace->screen); i++; } tmp = tmp->next; diff --git a/src/workspace.c b/src/workspace.c index c880363db..6c1583666 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -910,7 +910,7 @@ focus_ancestor_or_mru_window (MetaWorkspace *workspace, MetaWindow* tmp_window; tmp_window = ((MetaWindow*) tmp->data); if (tmp_window != not_this_one && - !tmp_window->minimized && + meta_window_showing_on_its_workspace (tmp_window) && tmp_window->type != META_WINDOW_DOCK && tmp_window->type != META_WINDOW_DESKTOP) {