Index: scripts/launcher.py
===================================================================
--- scripts/launcher.py	(revision 52)
+++ scripts/launcher.py	(working copy)
@@ -48,7 +48,8 @@
             glxinfo_output = glxinfo.communicate()[0]
             glxinfo.wait()
 
-            use_tfp = "GL_ARB_texture_non_power_of_two" in glxinfo_output
+            use_tfp = ("GL_ARB_texture_non_power_of_two" in glxinfo_output or
+                       "GL_ARB_texture_rectangle" in glxinfo_output)
 
         # Now launch metacity-clutter with our plugin
         env=dict(os.environ)
Index: src/shell-global.c
===================================================================
--- src/shell-global.c	(revision 52)
+++ src/shell-global.c	(working copy)
@@ -12,6 +12,7 @@
   PROP_0,
 
   PROP_OVERLAY_GROUP,
+  PROP_SCREEN,
   PROP_SCREEN_WIDTH,
   PROP_SCREEN_HEIGHT,
   PROP_STAGE,
@@ -57,6 +58,9 @@
     case PROP_OVERLAY_GROUP:
       g_value_set_object (value, mutter_plugin_get_overlay_group (global->plugin));
       break;
+    case PROP_SCREEN:
+      g_value_set_object (value, mutter_plugin_get_screen (global->plugin));
+      break;
     case PROP_SCREEN_WIDTH:
       {
         int width, height;
@@ -124,6 +128,13 @@
                                                         CLUTTER_TYPE_ACTOR,
                                                         G_PARAM_READABLE));
   g_object_class_install_property (gobject_class,
+                                   PROP_SCREEN,
+                                   g_param_spec_object ("screen",
+                                                        "Screen",
+                                                        "Metacity screen object for the shell",
+                                                        META_TYPE_SCREEN,
+                                                        G_PARAM_READABLE));
+  g_object_class_install_property (gobject_class,
                                    PROP_SCREEN_WIDTH,
                                    g_param_spec_int ("screen-width",
                                                      "Screen Width",
Index: js/ui/panel.js
===================================================================
--- js/ui/panel.js	(revision 52)
+++ js/ui/panel.js	(working copy)
@@ -2,11 +2,12 @@
 
 const Mainloop = imports.mainloop;
 
+const Clutter = imports.gi.Clutter;
+const Meta = imports.gi.Meta;
 const Shell = imports.gi.Shell;
-const Clutter = imports.gi.Clutter;
 const Tidy = imports.gi.Tidy;
+
 const Button = imports.ui.button;
-
 const Main = imports.ui.main;
 
 const PANEL_HEIGHT = 32;
@@ -86,12 +87,43 @@
 		return true;
             });
 
+	this._setStruts();
+	let me = this;
+	global.screen.connect('notify::n-workspaces',
+	    function() {
+		me._setStruts();
+	    });
+
 	global.stage.add_actor(this._group);
 
 	this._updateClock();
 	this._startClock();
     },
 
+    // Struts determine the area along each side of the screen that is reserved
+    // and not available to applications
+    _setStruts: function() {
+	let global = Shell.global_get();
+
+	let struts = [
+            new Meta.Strut({
+		rect: {
+		    x: 0,
+		    y: 0,
+		    width: global.screen_width,
+		    height: PANEL_HEIGHT
+		},
+		side: Meta.Direction.TOP
+	    })
+	];
+
+	let screen = global.screen;
+	for (let i = 0; i < screen.n_workspaces; i++) {
+	    let workspace = screen.get_workspace_by_index(i);
+	    workspace.set_builtin_struts(struts);
+	}
+    },
+
     _startClock: function() {
 	let me = this;
         // TODO: this makes the clock updated every 60 seconds, but not necessarily on the minute, so it is inaccurate
