diff -X /usr/src/metacity/.diffignore -rudp metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/constraints.c metacity-cvs/src/constraints.c
--- metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/constraints.c	2006-10-03 14:19:04.000000000 +0200
+++ metacity-cvs/src/constraints.c	2006-10-03 19:57:55.000000000 +0200
@@ -1373,13 +1373,10 @@ constrain_titlebar_visible (MetaWindow  
     return TRUE;
 
   /* Allow the titlebar beyond the top of the screen only if the user wasn't
-   * clicking on the titlebar to start the move.
-   * FIXME: This is kind of a hack; nearly as ugly as the old infinite edge
-   * resistance.
+   * clicking on the frame to start the move.
    */
   unconstrained_user_action =
-    info->is_user_action &&
-    window->display->grab_anchor_root_y >= window->display->grab_initial_window_pos.y;
+    info->is_user_action && !window->display->grab_frame_action;
 
   /* Exit early if we know the constraint won't apply--note that this constraint
    * is only meant for normal windows (e.g. we don't want docks to be shoved 
diff -X /usr/src/metacity/.diffignore -rudp metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/core.c metacity-cvs/src/core.c
--- metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/core.c	2006-10-03 14:19:04.000000000 +0200
+++ metacity-cvs/src/core.c	2006-10-03 20:02:03.000000000 +0200
@@ -588,6 +588,7 @@ meta_core_begin_grab_op (Display    *xdi
                          Window      frame_xwindow,
                          MetaGrabOp  op,
                          gboolean    pointer_already_grabbed,
+                         gboolean    frame_action,
                          int         event_serial,
                          int         button,
                          gulong      modmask,
@@ -606,6 +607,7 @@ meta_core_begin_grab_op (Display    *xdi
   
   return meta_display_begin_grab_op (display, screen, window,
                                      op, pointer_already_grabbed,
+                                     frame_action,
                                      event_serial,
                                      button, modmask,
                                      timestamp, root_x, root_y);
diff -X /usr/src/metacity/.diffignore -rudp metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/core.h metacity-cvs/src/core.h
--- metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/core.h	2006-10-03 14:19:04.000000000 +0200
+++ metacity-cvs/src/core.h	2006-10-03 20:03:06.000000000 +0200
@@ -142,6 +142,7 @@ gboolean   meta_core_begin_grab_op (Disp
                                     Window      frame_xwindow,
                                     MetaGrabOp  op,
                                     gboolean    pointer_already_grabbed,
+                                    gboolean    frame_action,
                                     int         event_serial,
                                     int         button,
                                     gulong      modmask,
diff -X /usr/src/metacity/.diffignore -rudp metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/display.c metacity-cvs/src/display.c
--- metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/display.c	2006-10-03 14:19:05.000000000 +0200
+++ metacity-cvs/src/display.c	2006-10-03 20:11:34.000000000 +0200
@@ -1738,6 +1738,7 @@ event_callback (XEvent   *event,
                                                 window,
                                                 op,
                                                 TRUE,
+                                                FALSE,
                                                 event->xbutton.serial,
                                                 event->xbutton.button,
                                                 0,
@@ -1795,6 +1796,7 @@ event_callback (XEvent   *event,
                                           window,
                                           META_GRAB_OP_MOVING,
                                           TRUE,
+                                          FALSE,
                                           event->xbutton.serial,
                                           event->xbutton.button,
                                           0,
@@ -3263,6 +3265,7 @@ meta_display_begin_grab_op (MetaDisplay 
                             MetaWindow  *window,
                             MetaGrabOp   op,
                             gboolean     pointer_already_grabbed,
+                            gboolean     frame_action,
                             int          event_serial,
                             int          button,
                             gulong       modmask,
@@ -3380,7 +3383,8 @@ meta_display_begin_grab_op (MetaDisplay 
   display->grab_last_user_action_was_snap = FALSE;
 #endif
   display->grab_was_cancelled = FALSE;
-  
+  display->grab_frame_action = frame_action;
+
   if (display->grab_resize_timeout_id)
     {
       g_source_remove (display->grab_resize_timeout_id);
diff -X /usr/src/metacity/.diffignore -rudp metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/display.h metacity-cvs/src/display.h
--- metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/display.h	2006-10-03 14:19:05.000000000 +0200
+++ metacity-cvs/src/display.h	2006-10-03 20:00:46.000000000 +0200
@@ -264,6 +264,7 @@ struct _MetaDisplay
   guint       grab_have_keyboard : 1;
   guint       grab_wireframe_active : 1;
   guint       grab_was_cancelled : 1;    /* Only used in wireframe mode */
+  guint       grab_frame_action : 1;
   MetaRectangle grab_wireframe_rect;
   MetaRectangle grab_wireframe_last_xor_rect;
   MetaRectangle grab_initial_window_pos;
@@ -446,6 +447,7 @@ gboolean meta_display_begin_grab_op (Met
                                      MetaWindow  *window,
                                      MetaGrabOp   op,
                                      gboolean     pointer_already_grabbed,
+                                     gboolean     frame_action,
                                      int          event_serial,
                                      int          button,
                                      gulong       modmask,
diff -X /usr/src/metacity/.diffignore -rudp metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/frames.c metacity-cvs/src/frames.c
--- metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/frames.c	2006-10-03 14:19:05.000000000 +0200
+++ metacity-cvs/src/frames.c	2006-10-03 20:01:38.000000000 +0200
@@ -1339,6 +1339,7 @@ meta_frames_button_press_event (GtkWidge
                                frame->xwindow,
                                op,
                                TRUE,
+                               TRUE,
                                meta_ui_get_last_event_serial (gdk_display),
                                event->button,
                                0,
@@ -1429,6 +1430,7 @@ meta_frames_button_press_event (GtkWidge
                                  frame->xwindow,
                                  op,
                                  TRUE,
+                                 TRUE,
                                  meta_ui_get_last_event_serial (gdk_display),
                                  event->button,
                                  0,
@@ -1449,6 +1451,7 @@ meta_frames_button_press_event (GtkWidge
                                    frame->xwindow,
                                    META_GRAB_OP_MOVING,
                                    TRUE,
+                                   TRUE,
                                    meta_ui_get_last_event_serial (gdk_display),
                                    event->button,
                                    0,
diff -X /usr/src/metacity/.diffignore -rudp metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/keybindings.c metacity-cvs/src/keybindings.c
--- metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/keybindings.c	2006-10-03 14:19:05.000000000 +0200
+++ metacity-cvs/src/keybindings.c	2006-10-03 19:26:32.000000000 +0200
@@ -3127,6 +3127,7 @@ do_choose_window (MetaDisplay    *displa
                                            tab_op_from_tab_type (type) :
                                            cycle_op_from_tab_type (type),
                                            FALSE,
+                                           FALSE,
                                            event->xkey.serial,
                                            0,
                                            binding->mask,
@@ -3560,6 +3561,7 @@ handle_workspace_switch  (MetaDisplay   
                                   NULL,
                                   META_GRAB_OP_KEYBOARD_WORKSPACE_SWITCHING,
                                   FALSE,
+                                  FALSE,
                                   event->xkey.serial,
                                   0,
                                   grab_mask,
diff -X /usr/src/metacity/.diffignore -rudp metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/window.c metacity-cvs/src/window.c
--- metacity-cvs-shakeloose-04-maxconstraint-02-unimaxmouse-02/src/window.c	2006-10-03 14:19:09.000000000 +0200
+++ metacity-cvs/src/window.c	2006-10-03 19:27:18.000000000 +0200
@@ -4874,7 +4874,9 @@ meta_window_client_message (MetaWindow *
                                           window->screen,
                                           window,
                                           op,
-                                          FALSE, 0 /* event_serial */,
+                                          FALSE,
+                                          FALSE,
+                                          0 /* event_serial */,
                                           button, 0,
                                           timestamp,
                                           x_root,
@@ -8077,6 +8079,7 @@ meta_window_begin_grab_op (MetaWindow *w
                               window,
                               op,
                               FALSE,
+                              FALSE,
                               grab_start_serial /* event_serial */,
                               0 /* button */,
                               0,
