metacity r3533 - in trunk: . src/core



Author: tthurman
Date: Sat Feb  2 04:05:16 2008
New Revision: 3533
URL: http://svn.gnome.org/viewvc/metacity?rev=3533&view=rev

Log:
2008-02-01  Alex R.M. Turner  <armtuk gmail com>

        * 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.


Modified:
   trunk/ChangeLog
   trunk/src/core/display.c
   trunk/src/core/window.c

Modified: trunk/src/core/display.c
==============================================================================
--- trunk/src/core/display.c	(original)
+++ trunk/src/core/display.c	Sat Feb  2 04:05:16 2008
@@ -4596,6 +4596,29 @@
   }
 
   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;
 }

Modified: trunk/src/core/window.c
==============================================================================
--- trunk/src/core/window.c	(original)
+++ trunk/src/core/window.c	Sat Feb  2 04:05:16 2008
@@ -8056,37 +8056,38 @@
   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);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]