summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authormsw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-19 21:17:55 +0000
committermsw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-19 21:17:55 +0000
commite0183858d46edf4565534ef3274ae136a43136e6 (patch)
tree481b97e9931e3b975e4f42feb4e65ff1d1cd6768 /ui
parent38b50d99a2b010eea3628c520a85b3075830672f (diff)
downloadchromium_src-e0183858d46edf4565534ef3274ae136a43136e6.zip
chromium_src-e0183858d46edf4565534ef3274ae136a43136e6.tar.gz
chromium_src-e0183858d46edf4565534ef3274ae136a43136e6.tar.bz2
Reland Propagate OnNativeWidgetMove to delegate/observers, etc.
Continuation of reverted CL http://codereview.chromium.org/10021029 The original CL was reverted due to a naming conflict between: WidgetDelegate::OnWidgetMove and Widget::Observer::OnWidgetMove. I renamed the new Observer method to OnWidgetMoved. Original description: Propagate OnNativeWidgetMove to delegate/observers, etc. NativeWidget[Aura|Win] calls new Widget::OnNativeWidgetMove. Widgets alert delegates and new Widget::Observer::OnWidgetMove. TabDragController2: consume new observer method, simplify. Nix BrowserWindowMoveObserver; use Widget::Observer instead. Replace move_loop_browser_view_ with move_loop_widget. Replace GetAttachedBrowserView with GetAttachedBrowserWidget. BubbleDelegateView: consume new observer method. Make bubbles move with their anchor_view's Widgets. SchedulePaint on BubbleFrameView when mirroring its arrow. BUG=105151, 116336 TEST=Bubbles can move with the browser window (inspecting extension popups, etc.); no Ash / --enable-tab-browser-dragging regressions. Review URL: http://codereview.chromium.org/10025039 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@133057 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r--ui/views/bubble/bubble_delegate.cc36
-rw-r--r--ui/views/bubble/bubble_delegate.h2
-rw-r--r--ui/views/bubble/bubble_frame_view.cc7
-rw-r--r--ui/views/widget/native_widget_aura.cc2
-rw-r--r--ui/views/widget/native_widget_delegate.h3
-rw-r--r--ui/views/widget/native_widget_win.cc6
-rw-r--r--ui/views/widget/widget.cc5
-rw-r--r--ui/views/widget/widget.h2
8 files changed, 45 insertions, 18 deletions
diff --git a/ui/views/bubble/bubble_delegate.cc b/ui/views/bubble/bubble_delegate.cc
index 3942c92..1fd3d4f 100644
--- a/ui/views/bubble/bubble_delegate.cc
+++ b/ui/views/bubble/bubble_delegate.cc
@@ -171,19 +171,30 @@ NonClientFrameView* BubbleDelegateView::CreateNonClientFrameView(
return new BubbleFrameView(arrow_location(), color(), margin());
}
+void BubbleDelegateView::OnWidgetClosing(Widget* widget) {
+ if (anchor_view() && anchor_view()->GetWidget() == widget)
+ anchor_view_ = NULL;
+}
+
void BubbleDelegateView::OnWidgetVisibilityChanged(Widget* widget,
bool visible) {
- if (widget == GetWidget()) {
- if (visible) {
- if (border_widget_)
- border_widget_->Show();
- GetFocusManager()->SetFocusedView(GetInitiallyFocusedView());
- Widget* anchor_widget = anchor_view() ? anchor_view()->GetWidget() : NULL;
- if (anchor_widget && anchor_widget->GetTopLevelWidget())
- anchor_widget->GetTopLevelWidget()->DisableInactiveRendering();
- } else if (border_widget_) {
+ if (widget != GetWidget())
+ return;
+
+ Widget* anchor_widget = anchor_view() ? anchor_view()->GetWidget() : NULL;
+ if (visible) {
+ if (border_widget_)
+ border_widget_->Show();
+ if (anchor_widget)
+ anchor_widget->AddObserver(this);
+ GetFocusManager()->SetFocusedView(GetInitiallyFocusedView());
+ if (anchor_widget && anchor_widget->GetTopLevelWidget())
+ anchor_widget->GetTopLevelWidget()->DisableInactiveRendering();
+ } else {
+ if (border_widget_)
border_widget_->Hide();
- }
+ if (anchor_widget)
+ anchor_widget->RemoveObserver(this);
}
}
@@ -193,6 +204,11 @@ void BubbleDelegateView::OnWidgetActivationChanged(Widget* widget,
GetWidget()->Close();
}
+void BubbleDelegateView::OnWidgetMoved(Widget* widget) {
+ if (anchor_view() && anchor_view()->GetWidget() == widget)
+ SizeToContents();
+}
+
gfx::Rect BubbleDelegateView::GetAnchorRect() {
return anchor_view() ? anchor_view()->GetScreenBounds() : gfx::Rect();
}
diff --git a/ui/views/bubble/bubble_delegate.h b/ui/views/bubble/bubble_delegate.h
index 75f6c16..145faf8 100644
--- a/ui/views/bubble/bubble_delegate.h
+++ b/ui/views/bubble/bubble_delegate.h
@@ -47,8 +47,10 @@ class VIEWS_EXPORT BubbleDelegateView : public WidgetDelegateView,
views::Widget* widget) OVERRIDE;
// Widget::Observer overrides:
+ virtual void OnWidgetClosing(Widget* widget) OVERRIDE;
virtual void OnWidgetVisibilityChanged(Widget* widget, bool visible) OVERRIDE;
virtual void OnWidgetActivationChanged(Widget* widget, bool active) OVERRIDE;
+ virtual void OnWidgetMoved(Widget* widget) OVERRIDE;
bool close_on_esc() const { return close_on_esc_; }
void set_close_on_esc(bool close_on_esc) { close_on_esc_ = close_on_esc; }
diff --git a/ui/views/bubble/bubble_frame_view.cc b/ui/views/bubble/bubble_frame_view.cc
index ab2ae24..176c010 100644
--- a/ui/views/bubble/bubble_frame_view.cc
+++ b/ui/views/bubble/bubble_frame_view.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -117,9 +117,10 @@ void BubbleFrameView::MirrorArrowIfOffScreen(
bubble_border_->GetBounds(anchor_rect, client_size);
// Restore the original arrow if mirroring doesn't show more of the bubble.
if (GetOffScreenLength(monitor_rect, mirror_bounds, vertical) >=
- GetOffScreenLength(monitor_rect, window_bounds, vertical)) {
+ GetOffScreenLength(monitor_rect, window_bounds, vertical))
bubble_border_->set_arrow_location(arrow);
- }
+ else
+ SchedulePaint();
}
}
diff --git a/ui/views/widget/native_widget_aura.cc b/ui/views/widget/native_widget_aura.cc
index 9de1e78..1f8e15e 100644
--- a/ui/views/widget/native_widget_aura.cc
+++ b/ui/views/widget/native_widget_aura.cc
@@ -738,7 +738,7 @@ gfx::Size NativeWidgetAura::GetMinimumSize() const {
void NativeWidgetAura::OnBoundsChanged(const gfx::Rect& old_bounds,
const gfx::Rect& new_bounds) {
if (old_bounds.origin() != new_bounds.origin())
- GetWidget()->widget_delegate()->OnWidgetMove();
+ delegate_->OnNativeWidgetMove();
if (old_bounds.size() != new_bounds.size()) {
#if defined(ENABLE_DIP)
delegate_->OnNativeWidgetSizeChanged(
diff --git a/ui/views/widget/native_widget_delegate.h b/ui/views/widget/native_widget_delegate.h
index 4fac0b0..41e38e7 100644
--- a/ui/views/widget/native_widget_delegate.h
+++ b/ui/views/widget/native_widget_delegate.h
@@ -72,6 +72,9 @@ class VIEWS_EXPORT NativeWidgetDelegate {
// Returns the largest size the window can be resized to by the user.
virtual gfx::Size GetMaximumSize() = 0;
+ // Called when the NativeWidget changed position.
+ virtual void OnNativeWidgetMove() = 0;
+
// Called when the NativeWidget changed size to |new_size|.
virtual void OnNativeWidgetSizeChanged(const gfx::Size& new_size) = 0;
diff --git a/ui/views/widget/native_widget_win.cc b/ui/views/widget/native_widget_win.cc
index 513b7fb9..ede049e 100644
--- a/ui/views/widget/native_widget_win.cc
+++ b/ui/views/widget/native_widget_win.cc
@@ -1613,14 +1613,12 @@ LRESULT NativeWidgetWin::OnMouseRange(UINT message,
}
void NativeWidgetWin::OnMove(const CPoint& point) {
- // TODO(beng): move to Widget.
- GetWidget()->widget_delegate()->OnWidgetMove();
+ delegate_->OnNativeWidgetMove();
SetMsgHandled(FALSE);
}
void NativeWidgetWin::OnMoving(UINT param, const LPRECT new_bounds) {
- // TODO(beng): move to Widget.
- GetWidget()->widget_delegate()->OnWidgetMove();
+ delegate_->OnNativeWidgetMove();
}
LRESULT NativeWidgetWin::OnNCActivate(BOOL active) {
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc
index bc0c75a..3f780b7 100644
--- a/ui/views/widget/widget.cc
+++ b/ui/views/widget/widget.cc
@@ -959,6 +959,11 @@ gfx::Size Widget::GetMaximumSize() {
return non_client_view_ ? non_client_view_->GetMaximumSize() : gfx::Size();
}
+void Widget::OnNativeWidgetMove() {
+ widget_delegate_->OnWidgetMove();
+ FOR_EACH_OBSERVER(Observer, observers_, OnWidgetMoved(this));
+}
+
void Widget::OnNativeWidgetSizeChanged(const gfx::Size& new_size) {
root_view_->SetSize(new_size);
diff --git a/ui/views/widget/widget.h b/ui/views/widget/widget.h
index 8f1baca5..c2f4eb4 100644
--- a/ui/views/widget/widget.h
+++ b/ui/views/widget/widget.h
@@ -98,6 +98,7 @@ class VIEWS_EXPORT Widget : public internal::NativeWidgetDelegate,
virtual void OnWidgetClosing(Widget* widget) {}
virtual void OnWidgetVisibilityChanged(Widget* widget, bool visible) {}
virtual void OnWidgetActivationChanged(Widget* widget, bool active) {}
+ virtual void OnWidgetMoved(Widget* widget) {}
};
typedef std::set<Widget*> Widgets;
@@ -620,6 +621,7 @@ class VIEWS_EXPORT Widget : public internal::NativeWidgetDelegate,
virtual void OnNativeWidgetDestroyed() OVERRIDE;
virtual gfx::Size GetMinimumSize() OVERRIDE;
virtual gfx::Size GetMaximumSize() OVERRIDE;
+ virtual void OnNativeWidgetMove() OVERRIDE;
virtual void OnNativeWidgetSizeChanged(const gfx::Size& new_size) OVERRIDE;
virtual void OnNativeWidgetBeginUserBoundsChange() OVERRIDE;
virtual void OnNativeWidgetEndUserBoundsChange() OVERRIDE;