+ NSWindow* window = get_nswindow ();
+ NSRect windowFrame= [window frame];
+ NSRect new_frame = [au_view frame];
+
+ float dy = last_au_frame.size.height - new_frame.size.height;
+ float dx = last_au_frame.size.width - new_frame.size.width;
+
+ windowFrame.origin.y += dy;
+ windowFrame.origin.x += dx;
+ windowFrame.size.height -= dy;
+ windowFrame.size.width -= dx;
+
+ [[NSNotificationCenter defaultCenter] removeObserver:_notify
+ name:NSViewFrameDidChangeNotification
+ object:au_view];
+
+ NSUInteger old_auto_resize = [au_view autoresizingMask];
+
+ [au_view setAutoresizingMask:NSViewNotSizable];
+ [window setFrame:windowFrame display:1];
+
+ /* Some stupid AU Views change the origin of the original AU View
+ when they are resized (I'm looking at you AUSampler). If the origin
+ has been moved, move it back.
+ */
+
+ if (last_au_frame.origin.x != new_frame.origin.x ||
+ last_au_frame.origin.y != new_frame.origin.y) {
+ new_frame.origin = last_au_frame.origin;
+ [au_view setFrame:new_frame];
+ /* also be sure to redraw the topbox because this can
+ also go wrong.
+ */
+ top_box.queue_draw ();
+ }
+
+ [au_view setAutoresizingMask:old_auto_resize];
+
+ [[NSNotificationCenter defaultCenter] addObserver:_notify
+ selector:@selector(auViewResized:) name:NSViewFrameDidChangeNotification
+ object:au_view];
+
+ last_au_frame = new_frame;