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

Side by Side Diff: views/desktop/desktop_window_manager.cc

Issue 7740039: Don't activate POPUP window (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: " Created 9 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « views/desktop/desktop_window_manager.h ('k') | views/desktop/desktop_window_root_view.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "views/desktop/desktop_window_manager.h" 5 #include "views/desktop/desktop_window_manager.h"
6 6
7 #include "views/events/event.h" 7 #include "views/events/event.h"
8 #include "views/widget/widget.h" 8 #include "views/widget/widget.h"
9 #include "ui/gfx/point.h" 9 #include "ui/gfx/point.h"
10 #include "ui/gfx/rect.h" 10 #include "ui/gfx/rect.h"
11 #include "views/widget/widget.h" 11 #include "views/widget/widget.h"
12 #include "views/widget/native_widget_private.h" 12 #include "views/widget/native_widget_private.h"
13 #include "views/widget/native_widget_view.h"
13 #include "views/widget/native_widget_views.h" 14 #include "views/widget/native_widget_views.h"
14 #include "views/widget/widget_delegate.h" 15 #include "views/widget/widget_delegate.h"
15 #if defined(OS_LINUX) 16 #if defined(OS_LINUX)
16 #include "views/window/hit_test.h" 17 #include "views/window/hit_test.h"
17 #endif 18 #endif
18 #include "views/window/non_client_view.h" 19 #include "views/window/non_client_view.h"
19 20
20 namespace { 21 namespace {
21 22
22 class MoveWindowController : public views::desktop::WindowController { 23 class MoveWindowController : public views::desktop::WindowController {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 } 86 }
86 87
87 WindowController::~WindowController() { 88 WindowController::~WindowController() {
88 } 89 }
89 90
90 //////////////////////////////////////////////////////////////////////////////// 91 ////////////////////////////////////////////////////////////////////////////////
91 // DesktopWindowManager, public: 92 // DesktopWindowManager, public:
92 93
93 DesktopWindowManager::DesktopWindowManager(Widget* desktop) 94 DesktopWindowManager::DesktopWindowManager(Widget* desktop)
94 : desktop_(desktop), 95 : desktop_(desktop),
95 mouse_capture_(NULL) { 96 mouse_capture_(NULL),
97 active_widget_(NULL) {
96 } 98 }
97 99
98 DesktopWindowManager::~DesktopWindowManager() { 100 DesktopWindowManager::~DesktopWindowManager() {
99 } 101 }
100 102
101 //////////////////////////////////////////////////////////////////////////////// 103 ////////////////////////////////////////////////////////////////////////////////
102 // DesktopWindowManager, WindowManager implementation: 104 // DesktopWindowManager, WindowManager implementation:
103 105
104 void DesktopWindowManager::StartMoveDrag( 106 void DesktopWindowManager::StartMoveDrag(
105 views::Widget* widget, 107 views::Widget* widget,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 DCHECK(HasMouseCapture()); 149 DCHECK(HasMouseCapture());
148 ReleaseMouseCapture(); 150 ReleaseMouseCapture();
149 mouse_capture_ = NULL; 151 mouse_capture_ = NULL;
150 return true; 152 return true;
151 } 153 }
152 154
153 bool DesktopWindowManager::HasMouseCapture(const views::Widget* widget) const { 155 bool DesktopWindowManager::HasMouseCapture(const views::Widget* widget) const {
154 return widget && mouse_capture_ == widget; 156 return widget && mouse_capture_ == widget;
155 } 157 }
156 158
159 bool DesktopWindowManager::HandleKeyEvent(
160 views::Widget* widget, const views::KeyEvent& event) {
161 return active_widget_ ?
162 static_cast<NativeWidgetViews*>(active_widget_->native_widget_private())
163 ->OnKeyEvent(event) : false;
164 }
165
157 bool DesktopWindowManager::HandleMouseEvent( 166 bool DesktopWindowManager::HandleMouseEvent(
158 views::Widget* widget, const views::MouseEvent& event) { 167 views::Widget* widget, const views::MouseEvent& event) {
168 if (event.type() == ui::ET_MOUSE_PRESSED) {
169 View* target =
170 widget->GetRootView()->GetEventHandlerForPoint(event.location());
171
172 if (target->GetClassName() == internal::NativeWidgetView::kViewClassName) {
173 internal::NativeWidgetView* native_widget_view =
174 static_cast<internal::NativeWidgetView*>(target);
175 views::Widget* target_widget = native_widget_view->GetAssociatedWidget();
176 if (target_widget->CanActivate())
177 Activate(target_widget);
178 }
179 } else if (event.type() == ui::ET_MOUSEWHEEL && active_widget_) {
180 return active_widget_->OnMouseEvent(event);
181 }
159 182
160 if (window_controller_.get()) { 183 if (window_controller_.get()) {
161 if (!window_controller_->OnMouseEvent(event)) { 184 if (!window_controller_->OnMouseEvent(event)) {
162 ReleaseMouseCapture(); 185 ReleaseMouseCapture();
163 window_controller_.reset(); 186 window_controller_.reset();
164 } 187 }
165 return true; 188 return true;
166 } 189 }
167 190
168 if (mouse_capture_) { 191 if (mouse_capture_) {
169 views::MouseEvent translated(event, widget->GetRootView(), 192 views::MouseEvent translated(event, widget->GetRootView(),
170 mouse_capture_->GetRootView()); 193 mouse_capture_->GetRootView());
171 mouse_capture_->OnMouseEvent(translated); 194 mouse_capture_->OnMouseEvent(translated);
172 return true; 195 return true;
173 } 196 }
174 return false; 197 return false;
175 } 198 }
176 199
200 void DesktopWindowManager::Register(Widget* widget) {
201 DCHECK(!widget->HasObserver(this));
202 widget->AddObserver(this);
203 }
204
177 //////////////////////////////////////////////////////////////////////////////// 205 ////////////////////////////////////////////////////////////////////////////////
178 // DesktopWindowManager, private: 206 // DesktopWindowManager, private:
179 207
208 void DesktopWindowManager::OnWidgetClosing(Widget* widget) {
209 if (active_widget_ && active_widget_ == widget)
210 active_widget_ = NULL;
211 }
212
213 void DesktopWindowManager::OnWidgetVisibilityChanged(Widget* widget,
214 bool visible) {
215 }
216
217 void DesktopWindowManager::OnWidgetActivationChanged(Widget* widget,
218 bool active) {
219 if (active) {
220 if (active_widget_)
221 active_widget_->Deactivate();
222 active_widget_ = widget;
223 } else if (widget == active_widget_) {
224 active_widget_ = NULL;
225 }
226 }
227
180 void DesktopWindowManager::SetMouseCapture() { 228 void DesktopWindowManager::SetMouseCapture() {
181 return desktop_->native_widget_private()->SetMouseCapture(); 229 return desktop_->native_widget_private()->SetMouseCapture();
182 } 230 }
183 231
184 void DesktopWindowManager::ReleaseMouseCapture() { 232 void DesktopWindowManager::ReleaseMouseCapture() {
185 return desktop_->native_widget_private()->ReleaseMouseCapture(); 233 return desktop_->native_widget_private()->ReleaseMouseCapture();
186 } 234 }
187 235
188 bool DesktopWindowManager::HasMouseCapture() const { 236 bool DesktopWindowManager::HasMouseCapture() const {
189 return desktop_->native_widget_private()->HasMouseCapture(); 237 return desktop_->native_widget_private()->HasMouseCapture();
190 } 238 }
191 239
240 void DesktopWindowManager::Activate(Widget* widget) {
241 if (widget && widget->IsActive())
242 return;
243
244 if (widget) {
245 if (!widget->HasObserver(this))
246 widget->AddObserver(this);
sadrul 2011/08/26 18:41:05 Perhaps just 'DCHECK(widget->HasObserver(this));'
247 widget->Activate();
248 }
249 }
250
192 } // namespace desktop 251 } // namespace desktop
193 } // namespace views 252 } // namespace views
OLDNEW
« no previous file with comments | « views/desktop/desktop_window_manager.h ('k') | views/desktop/desktop_window_root_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698