Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(893)

Unified Diff: ui/views/widget/native_widget_mac.mm

Issue 1747803003: MacViews: Implement Tab Dragging (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Extract DragsWindowUsingCocoaMoveLoop test, cleanup code. Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/views/widget/native_widget_mac.mm
diff --git a/ui/views/widget/native_widget_mac.mm b/ui/views/widget/native_widget_mac.mm
index f307abddba85e17fd28e663327522fdd9d25a34b..b235ca50321acb408f2fb2a6c5abf501401c2388 100644
--- a/ui/views/widget/native_widget_mac.mm
+++ b/ui/views/widget/native_widget_mac.mm
@@ -37,6 +37,16 @@
@end
+extern "C" {
+
+typedef int32_t CGSWindow;
+typedef int32_t CGSConnection;
+CGSConnection _CGSDefaultConnection();
+OSStatus CGSGetWindowBounds(
+ CGSConnection connection, CGSWindow window, CGRect* bounds);
+
+}
+
namespace views {
namespace {
@@ -60,6 +70,20 @@ NSInteger StyleMaskForParams(const Widget::InitParams& params) {
return NSBorderlessWindowMask;
}
+// -[NSWindow frame] doesn't update during a window drag. This is not what
+// toolkit-views expects, so ask the window server directly.
+NSRect FrameIncludingDrag(NSWindow* window) {
+ CGRect bounds = NSZeroRect;
+ CGSGetWindowBounds(_CGSDefaultConnection(), [window windowNumber], &bounds);
+ NSRect rect = ScreenRectToNSRect(gfx::Rect(bounds));
+
+ // If no mouse buttons are down, there is no drag. So it should match the
+ // window frame.
+ //DCHECK([NSEvent pressedMouseButtons] == 0 ||
tapted 2016/03/10 11:51:19 This DCHECK would actually fail, which surprised m
themblsha 2016/03/10 17:18:58 Done.
+ // NSEqualRects(rect, [window frame]));
+ return rect;
+}
+
} // namespace
////////////////////////////////////////////////////////////////////////////////
@@ -201,8 +225,8 @@ void NativeWidgetMac::ViewRemoved(View* view) {
// TODO(tapted): Something for drag and drop might be needed here in future.
// See http://crbug.com/464581. A NOTIMPLEMENTED() here makes a lot of spam,
// so only emit it when a drag and drop could be likely.
- if (IsMouseButtonDown())
- NOTIMPLEMENTED();
+ // if (IsMouseButtonDown())
tapted 2016/03/10 11:51:19 nit: uncomment (sorry for the log spam - drag and
themblsha 2016/03/10 17:18:58 Done.
+ // NOTIMPLEMENTED();
}
void NativeWidgetMac::SetNativeWindowProperty(const char* name, void* value) {
@@ -296,7 +320,7 @@ gfx::Rect NativeWidgetMac::GetWindowBoundsInScreen() const {
gfx::Rect NativeWidgetMac::GetClientAreaBoundsInScreen() const {
NSWindow* window = GetNativeWindow();
return gfx::ScreenRectFromNSRect(
- [window contentRectForFrameRect:[window frame]]);
+ [window contentRectForFrameRect:FrameIncludingDrag(window)]);
}
gfx::Rect NativeWidgetMac::GetRestoredBounds() const {
@@ -548,12 +572,15 @@ Widget::MoveLoopResult NativeWidgetMac::RunMoveLoop(
const gfx::Vector2d& drag_offset,
Widget::MoveLoopSource source,
Widget::MoveLoopEscapeBehavior escape_behavior) {
- NOTIMPLEMENTED();
- return Widget::MOVE_LOOP_CANCELED;
+ if (!bridge_)
+ return Widget::MOVE_LOOP_CANCELED;
+
+ return bridge_->RunMoveLoop(drag_offset);
}
void NativeWidgetMac::EndMoveLoop() {
- NOTIMPLEMENTED();
+ if (bridge_)
+ bridge_->EndMoveLoop();
}
void NativeWidgetMac::SetVisibilityChangedAnimationsEnabled(bool value) {
« ui/views/cocoa/bridged_native_widget.mm ('K') | « ui/views/cocoa/views_nswindow_delegate.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698