From 18b63e9b5f79a1e5d0aa7b3dde17d4183383aac8 Mon Sep 17 00:00:00 2001 From: "Alex R.M. Turner" Date: Sat, 2 Feb 2008 04:05:16 +0000 Subject: [PATCH] Have the list also pull windows that are in other workspaces that have the 2008-02-01 Alex R.M. Turner * src/core/display.c (meta_get_tab_entry_list): Have the list also pull windows that are in other workspaces that have the wm_state_needs_attention flag set * src/core/window.c (meta_window_set_demands_attention): Make windows that are on other workspaces that demand attention that aren't obscured count as being obscured Bug #333548. svn path=/trunk/; revision=3533 --- ChangeLog | 19 +++++++++++++---- src/core/display.c | 23 +++++++++++++++++++++ src/core/window.c | 51 +++++++++++++++++++++++----------------------- 3 files changed, 64 insertions(+), 29 deletions(-) diff --git a/ChangeLog b/ChangeLog index c0d811543..cb5df3e0d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,20 @@ +2008-02-01 Alex R.M. Turner + + * src/core/display.c (meta_get_tab_entry_list): Have the list also pull + windows that are in other workspaces that have the + wm_state_needs_attention flag set + * src/core/window.c (meta_window_set_demands_attention): Make windows that + are on other workspaces that demand attention that aren't obscured + count as being obscured + Bug #333548. + 2008-01-28 Christian Persch - * src/core/display.c: (convert_property): - * src/core/screen.c: (meta_screen_calc_workspace_layout): - * src/core/xprops.c: (meta_prop_get_values): - Use G_STRFUNC instead of the deprecated G_GNUC_FUNCTION. Bug #512561. + * src/core/display.c (convert_property): + * src/core/screen.c (meta_screen_calc_workspace_layout): + * src/core/xprops.c (meta_prop_get_values): + Use G_STRFUNC instead of the deprecated G_GNUC_FUNCTION. + Bug #512561. 2008-01-21 Thomas Thurman diff --git a/src/core/display.c b/src/core/display.c index ac9c6c64a..b70abf5eb 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -4596,6 +4596,29 @@ meta_display_get_tab_list (MetaDisplay *display, } tab_list = g_list_reverse (tab_list); + + { + GSList *tmp; + MetaWindow *l_window; + + tmp = meta_display_list_windows (display); + + /* Go through all windows */ + while (tmp != NULL) + { + l_window=tmp->data; + + /* Check to see if it demands attention */ + if (l_window->wm_state_demands_attention && + l_window->workspace!=workspace) + { + /* if it does, add it to the popup */ + tab_list = g_list_prepend (tab_list, l_window); + } + + tmp = tmp->next; + } /* End while tmp!=NULL */ + } return tab_list; } diff --git a/src/core/window.c b/src/core/window.c index bcedd84e3..31c483acb 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -8056,37 +8056,38 @@ meta_window_set_demands_attention (MetaWindow *window) MetaWindow *other_window; gboolean obscured = FALSE; - /* Does the window have any other window on this workspace - * overlapping it? - */ - - meta_window_get_outer_rect (window, &candidate_rect); - - /* The stack is sorted with the top windows first. */ - - while (stack != NULL && stack->data != window) + MetaWorkspace *workspace = window->screen->active_workspace; + if (workspace!=window->workspace) { - other_window = stack->data; - stack = stack->next; - - if (other_window->on_all_workspaces || - window->on_all_workspaces || - other_window->workspace == window->workspace) - { - meta_window_get_outer_rect (other_window, &other_rect); + /* windows on other workspaces are necessarily obscured */ + obscured = TRUE; + } + else + { + meta_window_get_outer_rect (window, &candidate_rect); - if (meta_rectangle_overlap (&candidate_rect, &other_rect)) + /* The stack is sorted with the top windows first. */ + + while (stack != NULL && stack->data != window) + { + other_window = stack->data; + stack = stack->next; + + if (other_window->on_all_workspaces || + window->on_all_workspaces || + other_window->workspace == window->workspace) { - obscured = TRUE; - break; + meta_window_get_outer_rect (other_window, &other_rect); + + if (meta_rectangle_overlap (&candidate_rect, &other_rect)) + { + obscured = TRUE; + break; + } } } - } - - /* If the window's in full view, there's no point setting the flag. */ + /* If the window's in full view, there's no point setting the flag. */ - if (!obscured) - { meta_topic (META_DEBUG_WINDOW_OPS, "Not marking %s as needing attention because it's in full view\n", window->desc);