Index: screen.c
===================================================================
RCS file: /cvs/gnome/metacity/src/screen.c,v
retrieving revision 1.133
diff -u -p -r1.133 screen.c
--- screen.c	20 Dec 2004 02:46:42 -0000	1.133
+++ screen.c	14 Jan 2005 20:07:39 -0000
@@ -1163,6 +1163,7 @@ meta_screen_ensure_tab_popup (MetaScreen
       entries[i].title = window->title;
       entries[i].icon = window->icon;
       entries[i].blank = FALSE;
+      entries[i].minimized = window->minimized;
       
       if (!window->minimized || !meta_window_get_icon_geometry (window, &r))
         meta_window_get_outer_rect (window, &r);
@@ -1255,6 +1256,7 @@ meta_screen_ensure_workspace_popup (Meta
           entries[i].title = meta_workspace_get_name (workspace);
           entries[i].icon = NULL;
           entries[i].blank = FALSE;
+          entries[i].minimized = FALSE;
           
           g_assert (entries[i].title != NULL);
         }
@@ -1264,6 +1266,7 @@ meta_screen_ensure_workspace_popup (Meta
           entries[i].title = NULL;
           entries[i].icon = NULL;
           entries[i].blank = TRUE;
+          entries[i].minimized = FALSE;
         }
 
       ++i;
Index: tabpopup.c
===================================================================
RCS file: /cvs/gnome/metacity/src/tabpopup.c,v
retrieving revision 1.28
diff -u -p -r1.28 tabpopup.c
--- tabpopup.c	11 Jan 2005 19:54:14 -0000	1.28
+++ tabpopup.c	14 Jan 2005 20:07:39 -0000
@@ -40,7 +40,7 @@ struct _TabEntry
 {
   MetaTabEntryKey  key;
   char            *title;
-  GdkPixbuf       *icon;
+  GdkPixbuf       *icon, *dimmed_icon;
   GtkWidget       *widget;
   GdkRectangle     rect;
   GdkRectangle     inner_rect;
@@ -115,6 +115,39 @@ utf8_strndup (const char *src,
   return g_strndup (src, s - src);
 }
 
+static GdkPixbuf*
+dimm_icon (GdkPixbuf *pixbuf)
+{
+  int x, y, pixel_stride, row_stride;
+  guchar *row, *pixels;
+  int w, h;
+  GdkPixbuf *dimmed_pixbuf;
+
+  dimmed_pixbuf = gdk_pixbuf_copy (pixbuf);
+
+  w = gdk_pixbuf_get_width (dimmed_pixbuf);
+  h = gdk_pixbuf_get_height (dimmed_pixbuf);
+
+  g_assert (gdk_pixbuf_get_has_alpha (dimmed_pixbuf));
+
+  pixel_stride = 4;
+
+  row = gdk_pixbuf_get_pixels (dimmed_pixbuf);
+  row_stride = gdk_pixbuf_get_rowstride (dimmed_pixbuf);
+
+  for (y = 0; y < h; y++) 
+    {
+      pixels = row;			
+      for (x = 0; x < w; x++) 
+        {
+          pixels[3] /= 2;				
+          pixels += pixel_stride;
+        }			
+      row += row_stride;
+    }
+  return dimmed_pixbuf;
+}
+
 MetaTabPopup*
 meta_ui_tab_popup_new (const MetaTabEntry *entries,
                        int                 screen_number,
@@ -180,15 +213,31 @@ meta_ui_tab_popup_new (const MetaTabEntr
 
       te = g_new (TabEntry, 1);
       te->key = entries[i].key;
-      te->title =
-	entries[i].title 
-	? utf8_strndup (entries[i].title, max_chars_per_title)
-	: NULL;
+      te->title = NULL;
+      if (entries[i].title)
+        {
+          if (entries[i].minimized)
+            {
+              gchar *tmp;
+              tmp = g_strdup_printf ("[%s]", entries[i].title);
+              te->title = utf8_strndup (tmp, max_chars_per_title);
+              g_free (tmp);
+            }
+          else 
+            {
+              te->title = utf8_strndup (entries[i].title, max_chars_per_title);
+            }
+        }
       te->widget = NULL;
       te->icon = entries[i].icon;
       te->blank = entries[i].blank;
+      te->dimmed_icon = NULL;
       if (te->icon)
-        g_object_ref (G_OBJECT (te->icon));
+        {
+          g_object_ref (G_OBJECT (te->icon));
+          if (entries[i].minimized)
+            te->dimmed_icon = dimm_icon (entries[i].icon);
+        }
 
       if (outline)
         {
@@ -265,7 +314,14 @@ meta_ui_tab_popup_new (const MetaTabEntr
             }
           else if (outline)
             {
-              image = selectable_image_new (te->icon);
+              if (te->dimmed_icon)
+                {
+                  image = selectable_image_new (te->dimmed_icon);
+                }
+              else 
+                {
+                  image = selectable_image_new (te->icon);
+                }
 
               gtk_misc_set_padding (GTK_MISC (image),
                                     INSIDE_SELECT_RECT + OUTSIDE_SELECT_RECT + 1,
@@ -323,6 +379,8 @@ free_entry (gpointer data, gpointer user
   g_free (te->title);
   if (te->icon)
     g_object_unref (G_OBJECT (te->icon));
+  if (te->dimmed_icon)
+    g_object_unref (G_OBJECT (te->dimmed_icon));
 
   g_free (te);
 }
Index: tabpopup.h
===================================================================
RCS file: /cvs/gnome/metacity/src/tabpopup.h,v
retrieving revision 1.4
diff -u -p -r1.4 tabpopup.h
--- tabpopup.h	5 Jan 2003 18:36:01 -0000	1.4
+++ tabpopup.h	14 Jan 2005 20:07:39 -0000
@@ -40,6 +40,7 @@ struct _MetaTabEntry
   int              x, y, width, height;
   int              inner_x, inner_y, inner_width, inner_height;
   guint            blank : 1;
+  guint            minimized;
 };
 
 MetaTabPopup*   meta_ui_tab_popup_new          (const MetaTabEntry *entries,
