diff -u orig/libwnck-2.27.5/libwnck/tasklist.c libwnck-2.27.5/libwnck/tasklist.c
--- orig/libwnck-2.27.5/libwnck/tasklist.c	2009-04-19 19:40:32.000000000 +0200
+++ libwnck-2.27.5/libwnck/tasklist.c	2009-08-26 21:28:18.000000000 +0200
@@ -234,6 +234,8 @@
   GdkPixmap *background;
 
   guint drag_start_time;
+
+  WnckTasklistStyle task_style_type;
 };
 
 static GType wnck_task_get_type (void);
@@ -712,6 +714,8 @@
   tasklist->priv->icon_loader_data = NULL;
   tasklist->priv->free_icon_loader_data = NULL;
 
+  tasklist->priv->task_style_type = WNCK_TASKLIST_STYLE_ICON_TEXT;
+
 #ifdef HAVE_STARTUP_NOTIFICATION
   tasklist->priv->sn_context = NULL;
   tasklist->priv->startup_sequence_timeout = 0;
@@ -972,6 +976,32 @@
 }
 
 /**
+ * wnck_tasklist_set_style:
+ * @tasklist: a #WnckTasklist.
+ * @style: a task style
+ *
+ * Sets the relief type of the buttons in @tasklist to @relief. The main use of
+ * this function is proper integration of #WnckTasklist in panels with
+ * non-system backgrounds.
+ *
+ * Since: 2.30
+ */
+void
+wnck_tasklist_set_style (WnckTasklist *tasklist, WnckTasklistStyle style)
+{
+  g_return_if_fail (WNCK_IS_TASKLIST (tasklist));
+
+  if (style == tasklist->priv->task_style_type)
+    return;
+
+  tasklist->priv->task_style_type = style;
+
+  /* Forces update of buttons instead of looping thru the buttons and 
+   * set the correct style */
+  wnck_tasklist_update_lists (tasklist);
+}
+
+/**
  * wnck_tasklist_set_switch_workspace_on_unminimize:
  * @tasklist: a #WnckTasklist.
  * @switch_workspace_on_unminimize: whether to activate the #WnckWorkspace a
@@ -1022,7 +1052,6 @@
   
   tasklist->priv->include_all_workspaces = include_all_workspaces;
   wnck_tasklist_update_lists (tasklist);
-  gtk_widget_queue_resize (GTK_WIDGET (tasklist));
 }
 
 /**
@@ -1258,7 +1287,7 @@
 }
 
 static int
-wnck_tasklist_get_button_size (GtkWidget *widget)
+wnck_tasklist_get_button_size (GtkWidget *widget, WnckTasklist *tasklist)
 {
   PangoContext *context;
   PangoFontMetrics *metrics;
@@ -1268,16 +1297,35 @@
 
   gtk_widget_ensure_style (widget);
 
-  context = gtk_widget_get_pango_context (widget);
-  metrics = pango_context_get_metrics (context, widget->style->font_desc,
-                                       pango_context_get_language (context));
-  char_width = pango_font_metrics_get_approximate_char_width (metrics);
-  pango_font_metrics_unref (metrics);
-  text_width = PANGO_PIXELS (TASKLIST_TEXT_MAX_WIDTH * char_width);
+  switch (tasklist->priv->task_style_type)
+    {
+      case WNCK_TASKLIST_STYLE_ICON_TEXT:
+        context = gtk_widget_get_pango_context (widget);
+        metrics = pango_context_get_metrics (context, widget->style->font_desc,
+                                             pango_context_get_language (context));
+        char_width = pango_font_metrics_get_approximate_char_width (metrics);
+        pango_font_metrics_unref (metrics);
+        text_width = PANGO_PIXELS (TASKLIST_TEXT_MAX_WIDTH * char_width);
 
-  width = text_width + 2 * TASKLIST_BUTTON_PADDING
-	  + MINI_ICON_SIZE + 2 * TASKLIST_BUTTON_PADDING;
+        width = text_width + 2 * TASKLIST_BUTTON_PADDING
+	        + MINI_ICON_SIZE + 2 * TASKLIST_BUTTON_PADDING;
+        break;
+      case WNCK_TASKLIST_STYLE_TEXT:
+        context = gtk_widget_get_pango_context (widget);
+        metrics = pango_context_get_metrics (context, widget->style->font_desc,
+                                             pango_context_get_language (context));
+        char_width = pango_font_metrics_get_approximate_char_width (metrics);
+        pango_font_metrics_unref (metrics);
+        text_width = PANGO_PIXELS (TASKLIST_TEXT_MAX_WIDTH * char_width);
 
+        width = text_width + 2 * TASKLIST_BUTTON_PADDING
+	        + 2 * TASKLIST_BUTTON_PADDING;
+        break;
+      case WNCK_TASKLIST_STYLE_ICON:
+        width = 2 * TASKLIST_BUTTON_PADDING
+	        + MINI_ICON_SIZE + 2 * TASKLIST_BUTTON_PADDING;
+        break;
+    }
   return width;
 }
 
@@ -1334,7 +1382,7 @@
    * wouldn't work since our call to gtk_widget_size_request() does not take
    * into account the hidden widgets.
    */
-  tasklist->priv->max_button_width = wnck_tasklist_get_button_size (widget);
+  tasklist->priv->max_button_width = wnck_tasklist_get_button_size (widget, tasklist);
   tasklist->priv->max_button_height = max_height;
 
   fake_allocation.width = GTK_WIDGET (tasklist)->allocation.width;
@@ -1470,23 +1518,48 @@
                           gpointer       data)
 {
   WnckTask *task = WNCK_TASK (data);
-  int       min_image_width;
+  WnckTasklist *tasklist;
+  int min_image_width;
+
+  tasklist = task->tasklist;  
 
   min_image_width = MINI_ICON_SIZE +
                     2 * widget->style->xthickness +
                     2 * TASKLIST_BUTTON_PADDING;
 
-  if ((allocation->width < min_image_width + 2 * TASKLIST_BUTTON_PADDING) &&
-      (allocation->width >= min_image_width)) {
-    gtk_widget_show (task->image);
-    gtk_widget_hide (task->label);
-  } else if (allocation->width < min_image_width) {
-    gtk_widget_hide (task->image);
-    gtk_widget_show (task->label);
-  } else {
-    gtk_widget_show (task->image);
-    gtk_widget_show (task->label);
-  }
+  /* Update icons and text on buttons */
+  switch (tasklist->priv->task_style_type)
+    {
+      case WNCK_TASKLIST_STYLE_ICON_TEXT:
+        if ((allocation->width < min_image_width + 2 * TASKLIST_BUTTON_PADDING) &&
+            (allocation->width >= min_image_width)) {
+          gtk_widget_show (task->image);
+          gtk_widget_hide (task->label);
+        } else if (allocation->width < min_image_width) {
+          gtk_widget_hide (task->image);
+          gtk_widget_show (task->label);
+        } else {
+          gtk_widget_show (task->image);
+          gtk_widget_show (task->label);
+        }
+        break;
+      case WNCK_TASKLIST_STYLE_TEXT:
+          gtk_widget_hide (task->image);
+          gtk_widget_show (task->label);
+        break;
+      case WNCK_TASKLIST_STYLE_ICON:
+          /* If the size is to small even for an image, hide them both otherwise things 
+           * will look really strange, sorry but I don't think we could do better unless
+           * we add scrollbars */
+          if (allocation->width < min_image_width) {
+            gtk_widget_hide (task->image);
+            gtk_widget_hide (task->label);
+          } else {
+            gtk_widget_show (task->image);
+            gtk_widget_hide (task->label);
+          }
+        break;
+    }
 }
 
 static void
@@ -1670,9 +1743,6 @@
   g_list_free (tasklist->priv->windows);
   g_list_free (ungrouped_class_groups);
   tasklist->priv->windows = windows_sorted;
- 
-  GTK_WIDGET_CLASS (wnck_tasklist_parent_class)->size_allocate (widget,
-                                                                allocation);
 }
 
 static void
@@ -2503,7 +2573,6 @@
 					WnckTasklist  *tasklist)
 {
   wnck_tasklist_update_lists (tasklist);
-  gtk_widget_queue_resize (GTK_WIDGET (tasklist));
 }
 
 static void
@@ -2539,10 +2608,7 @@
     }
 
   if (need_update)
-    {
-      wnck_tasklist_update_lists (tasklist);
-      gtk_widget_queue_resize (GTK_WIDGET (tasklist));
-    }
+    wnck_tasklist_update_lists (tasklist);
 }
 
 static gboolean
@@ -2642,7 +2708,6 @@
   wnck_tasklist_connect_window (tasklist, win);
 
   wnck_tasklist_update_lists (tasklist);
-  gtk_widget_queue_resize (GTK_WIDGET (tasklist));
 }
 
 static void
@@ -2651,7 +2716,6 @@
 			      WnckTasklist *tasklist)
 {
   wnck_tasklist_update_lists (tasklist);
-  gtk_widget_queue_resize (GTK_WIDGET (tasklist));
 }
 
 static void
@@ -2659,7 +2723,6 @@
                                  WnckTasklist *tasklist)
 {
   wnck_tasklist_update_lists (tasklist);
-  gtk_widget_queue_resize (GTK_WIDGET (tasklist));
 }
 
 static void
@@ -3388,7 +3451,6 @@
   if (changed_mask & WNCK_WINDOW_STATE_SKIP_TASKLIST)
     {
       wnck_tasklist_update_lists  (tasklist);
-      gtk_widget_queue_resize (GTK_WIDGET (tasklist));
       return;
     }
   
@@ -3404,7 +3466,6 @@
 	    !wnck_window_is_in_viewport (window, active_workspace))))
         {
           wnck_tasklist_update_lists (tasklist);
-          gtk_widget_queue_resize (GTK_WIDGET (tasklist));
         }
     }
     
diff -u orig/libwnck-2.27.5/libwnck/tasklist.h libwnck-2.27.5/libwnck/tasklist.h
--- orig/libwnck-2.27.5/libwnck/tasklist.h	2009-04-19 19:40:32.000000000 +0200
+++ libwnck-2.27.5/libwnck/tasklist.h	2009-08-26 21:35:16.000000000 +0200
@@ -83,6 +83,21 @@
   WNCK_TASKLIST_ALWAYS_GROUP
 } WnckTasklistGroupingType;
 
+/**
+ * WnckTasklistStyle:
+ * @WNCK_TASKLIST_STYLE_ICON_TEXT: show both icon and title of the #WnckWindow
+ * @WNCK_TASKLIST_STYLE_ICON: only shows the icon of the #WnckWindow
+ * @WNCK_TASKLIST_STYLE_TEXT: show only the title of the #WnckWindow
+ *
+ * Type defining the style of the #WnckWindow in the #WnckTasklist 
+ */
+typedef enum
+{
+  WNCK_TASKLIST_STYLE_ICON_TEXT,
+  WNCK_TASKLIST_STYLE_ICON,
+  WNCK_TASKLIST_STYLE_TEXT
+} WnckTasklistStyle;
+
 GType wnck_tasklist_get_type (void) G_GNUC_CONST;
 
 GtkWidget *wnck_tasklist_new (WnckScreen *screen);
@@ -99,6 +114,8 @@
 					       gboolean      include_all_workspaces);
 void wnck_tasklist_set_button_relief (WnckTasklist *tasklist,
                                       GtkReliefStyle relief);
+void wnck_tasklist_set_style (WnckTasklist *tasklist, 
+                              WnckTasklistStyle style);
 #ifndef WNCK_DISABLE_DEPRECATED
 void wnck_tasklist_set_minimum_width (WnckTasklist *tasklist, gint size);
 gint wnck_tasklist_get_minimum_width (WnckTasklist *tasklist);
