Index: src/core/constraints.c
===================================================================
--- src/core/constraints.c	(revision 3925)
+++ src/core/constraints.c	(working copy)
@@ -506,10 +506,11 @@
   if (window->placed || did_placement)
     {
       if (window->maximize_horizontally_after_placement ||
-          window->maximize_vertically_after_placement)
+          window->maximize_vertically_after_placement   ||
+          window->fullscreen_after_placement)
         {
-          /* define a sane saved_rect so that the user can unmaximize to
-           * something reasonable.
+          /* define a sane saved_rect so that the user can unmaximize or
+           * make unfullscreen to something reasonable.
            */
           if (info->current.width >= info->work_area_xinerama.width)
             {
@@ -536,6 +537,13 @@
           if (window->frame && !window->fullscreen)
             meta_frame_calc_geometry (window->frame, info->fgeom);
 
+          if (window->fullscreen_after_placement)
+            {
+              window->saved_rect = info->current;
+              window->fullscreen = TRUE;
+              window->fullscreen_after_placement = FALSE;
+            }
+
           window->maximize_horizontally_after_placement = FALSE;
           window->maximize_vertically_after_placement = FALSE;
         }
Index: src/core/window.c
===================================================================
--- src/core/window.c	(revision 3925)
+++ src/core/window.c	(working copy)
@@ -460,7 +460,7 @@
   window->maximize_horizontally_after_placement = FALSE;
   window->maximize_vertically_after_placement = FALSE;
   window->minimize_after_placement = FALSE;
-  window->fullscreen = FALSE;
+  window->fullscreen_after_placement = FALSE;
   window->require_fully_onscreen = TRUE;
   window->require_on_single_xinerama = TRUE;
   window->require_titlebar_visible = TRUE;
Index: src/core/window-props.c
===================================================================
--- src/core/window-props.c	(revision 3925)
+++ src/core/window-props.c	(working copy)
@@ -545,6 +545,7 @@
   window->shaded = FALSE;
   window->maximized_horizontally = FALSE;
   window->maximized_vertically = FALSE;
+  window->fullscreen = FALSE;
   window->wm_state_modal = FALSE;
   window->wm_state_skip_taskbar = FALSE;
   window->wm_state_skip_pager = FALSE;
@@ -573,7 +574,7 @@
       else if (value->v.atom_list.atoms[i] == window->display->atom__NET_WM_STATE_SKIP_PAGER)
         window->wm_state_skip_pager = TRUE;
       else if (value->v.atom_list.atoms[i] == window->display->atom__NET_WM_STATE_FULLSCREEN)
-        window->fullscreen = TRUE;
+        window->fullscreen_after_placement = TRUE;
       else if (value->v.atom_list.atoms[i] == window->display->atom__NET_WM_STATE_ABOVE)
         window->wm_state_above = TRUE;
       else if (value->v.atom_list.atoms[i] == window->display->atom__NET_WM_STATE_BELOW)
Index: src/core/window-private.h
===================================================================
--- src/core/window-private.h	(revision 3925)
+++ src/core/window-private.h	(working copy)
@@ -143,6 +143,9 @@
 
   /* Whether we're fullscreen */
   guint fullscreen : 1;
+
+  /* Whether we have to fullscreen after placement */
+  guint fullscreen_after_placement : 1;
   
   /* Whether we're trying to constrain the window to be fully onscreen */
   guint require_fully_onscreen : 1;
