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

Side by Side Diff: chrome/browser/ui/views/bubble/bubble.cc

Issue 7294024: Sound volume and bightness bubbles doesn't grab focus anymore. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge branch 'trunk' of http://git.chromium.org/git/chromium into 16867 Created 9 years, 5 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
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 "chrome/browser/ui/views/bubble/bubble.h" 5 #include "chrome/browser/ui/views/bubble/bubble.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "chrome/browser/ui/views/bubble/border_contents.h" 9 #include "chrome/browser/ui/views/bubble/border_contents.h"
10 #include "content/common/notification_service.h" 10 #include "content/common/notification_service.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 48
49 // static 49 // static
50 Bubble* Bubble::Show(views::Widget* parent, 50 Bubble* Bubble::Show(views::Widget* parent,
51 const gfx::Rect& position_relative_to, 51 const gfx::Rect& position_relative_to,
52 BubbleBorder::ArrowLocation arrow_location, 52 BubbleBorder::ArrowLocation arrow_location,
53 views::View* contents, 53 views::View* contents,
54 BubbleDelegate* delegate) { 54 BubbleDelegate* delegate) {
55 Bubble* bubble = new Bubble; 55 Bubble* bubble = new Bubble;
56 bubble->InitBubble(parent, position_relative_to, arrow_location, 56 bubble->InitBubble(parent, position_relative_to, arrow_location,
57 contents, delegate); 57 contents, delegate);
58
59 // Register the Escape accelerator for closing.
60 bubble->RegisterEscapeAccelerator();
61
58 return bubble; 62 return bubble;
59 } 63 }
60 64
61 #if defined(OS_CHROMEOS) 65 #if defined(OS_CHROMEOS)
62 // static 66 // static
63 Bubble* Bubble::ShowFocusless( 67 Bubble* Bubble::ShowFocusless(
64 views::Widget* parent, 68 views::Widget* parent,
65 const gfx::Rect& position_relative_to, 69 const gfx::Rect& position_relative_to,
66 BubbleBorder::ArrowLocation arrow_location, 70 BubbleBorder::ArrowLocation arrow_location,
67 views::View* contents, 71 views::View* contents,
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 delegate_(NULL), 136 delegate_(NULL),
133 show_status_(kOpen), 137 show_status_(kOpen),
134 fade_away_on_close_(false), 138 fade_away_on_close_(false),
135 #if defined(TOOLKIT_USES_GTK) 139 #if defined(TOOLKIT_USES_GTK)
136 type_(views::Widget::InitParams::TYPE_WINDOW_FRAMELESS), 140 type_(views::Widget::InitParams::TYPE_WINDOW_FRAMELESS),
137 #endif 141 #endif
138 #if defined(OS_CHROMEOS) 142 #if defined(OS_CHROMEOS)
139 show_while_screen_is_locked_(false), 143 show_while_screen_is_locked_(false),
140 #endif 144 #endif
141 arrow_location_(BubbleBorder::NONE), 145 arrow_location_(BubbleBorder::NONE),
142 contents_(NULL) { 146 contents_(NULL),
147 accelerator_registered_(false) {
143 } 148 }
144 149
145 #if defined(OS_CHROMEOS) 150 #if defined(OS_CHROMEOS)
146 Bubble::Bubble(views::Widget::InitParams::Type type, 151 Bubble::Bubble(views::Widget::InitParams::Type type,
147 bool show_while_screen_is_locked) 152 bool show_while_screen_is_locked)
148 : views::NativeWidgetGtk(new views::Widget), 153 : views::NativeWidgetGtk(new views::Widget),
149 border_contents_(NULL), 154 border_contents_(NULL),
150 delegate_(NULL), 155 delegate_(NULL),
151 show_status_(kOpen), 156 show_status_(kOpen),
152 fade_away_on_close_(false), 157 fade_away_on_close_(false),
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 contents_view->AddChildViewAt(border_contents_, 0); 265 contents_view->AddChildViewAt(border_contents_, 0);
261 266
262 // |contents_view| has no layout manager, so we have to explicitly position 267 // |contents_view| has no layout manager, so we have to explicitly position
263 // its children. 268 // its children.
264 border_contents_->SetBoundsRect( 269 border_contents_->SetBoundsRect(
265 gfx::Rect(gfx::Point(), window_bounds.size())); 270 gfx::Rect(gfx::Point(), window_bounds.size()));
266 contents->SetBoundsRect(contents_bounds); 271 contents->SetBoundsRect(contents_bounds);
267 #endif 272 #endif
268 GetWidget()->SetBounds(window_bounds); 273 GetWidget()->SetBounds(window_bounds);
269 274
270 // Register the Escape accelerator for closing.
271 GetWidget()->GetFocusManager()->RegisterAccelerator(
272 views::Accelerator(ui::VKEY_ESCAPE, false, false, false), this);
273
274 // Done creating the bubble. 275 // Done creating the bubble.
275 NotificationService::current()->Notify(NotificationType::INFO_BUBBLE_CREATED, 276 NotificationService::current()->Notify(NotificationType::INFO_BUBBLE_CREATED,
276 Source<Bubble>(this), 277 Source<Bubble>(this),
277 NotificationService::NoDetails()); 278 NotificationService::NoDetails());
278 279
279 // Show the window. 280 // Show the window.
280 #if defined(OS_WIN) 281 #if defined(OS_WIN)
281 border_->ShowWindow(SW_SHOW); 282 border_->ShowWindow(SW_SHOW);
282 ShowWindow(SW_SHOW); 283 ShowWindow(SW_SHOW);
283 if (fade_in) 284 if (fade_in)
284 FadeIn(); 285 FadeIn();
285 #elif defined(TOOLKIT_USES_GTK) 286 #elif defined(TOOLKIT_USES_GTK)
286 GetWidget()->Show(); 287 GetWidget()->Show();
287 #endif 288 #endif
288 } 289 }
289 290
291 void Bubble::RegisterEscapeAccelerator() {
292 GetWidget()->GetFocusManager()->RegisterAccelerator(
293 views::Accelerator(ui::VKEY_ESCAPE, false, false, false), this);
294 accelerator_registered_ = true;
295 }
296
297 void Bubble::UnregisterEscapeAccelerator() {
298 DCHECK(accelerator_registered_);
299 GetWidget()->GetFocusManager()->UnregisterAccelerator(
300 views::Accelerator(ui::VKEY_ESCAPE, false, false, false), this);
301 accelerator_registered_ = false;
302 }
303
290 BorderContents* Bubble::CreateBorderContents() { 304 BorderContents* Bubble::CreateBorderContents() {
291 return new BorderContents(); 305 return new BorderContents();
292 } 306 }
293 307
294 void Bubble::SizeToContents() { 308 void Bubble::SizeToContents() {
295 gfx::Rect window_bounds; 309 gfx::Rect window_bounds;
296 310
297 #if defined(OS_WIN) 311 #if defined(OS_WIN)
298 // Initialize and position the border window. 312 // Initialize and position the border window.
299 window_bounds = border_->SizeAndGetBounds(position_relative_to_, 313 window_bounds = border_->SizeAndGetBounds(position_relative_to_,
(...skipping 27 matching lines...) Expand all
327 void Bubble::IsActiveChanged() { 341 void Bubble::IsActiveChanged() {
328 if (!GetWidget()->IsActive()) 342 if (!GetWidget()->IsActive())
329 GetWidget()->Close(); 343 GetWidget()->Close();
330 } 344 }
331 #endif 345 #endif
332 346
333 void Bubble::DoClose(bool closed_by_escape) { 347 void Bubble::DoClose(bool closed_by_escape) {
334 if (show_status_ == kClosed) 348 if (show_status_ == kClosed)
335 return; 349 return;
336 350
337 GetWidget()->GetFocusManager()->UnregisterAccelerator( 351 if (accelerator_registered_)
338 views::Accelerator(ui::VKEY_ESCAPE, false, false, false), this); 352 UnregisterEscapeAccelerator();
339 if (delegate_) 353 if (delegate_)
340 delegate_->BubbleClosing(this, closed_by_escape); 354 delegate_->BubbleClosing(this, closed_by_escape);
341 show_status_ = kClosed; 355 show_status_ = kClosed;
342 #if defined(OS_WIN) 356 #if defined(OS_WIN)
343 border_->Close(); 357 border_->Close();
344 #endif 358 #endif
345 #if defined(OS_WIN) 359 #if defined(OS_WIN)
346 NativeWidgetWin::Close(); 360 NativeWidgetWin::Close();
347 #elif defined(TOOLKIT_USES_GTK) 361 #elif defined(TOOLKIT_USES_GTK)
348 NativeWidgetGtk::Close(); 362 NativeWidgetGtk::Close();
(...skipping 30 matching lines...) Expand all
379 animation_->Hide(); 393 animation_->Hide();
380 } 394 }
381 395
382 bool Bubble::AcceleratorPressed(const views::Accelerator& accelerator) { 396 bool Bubble::AcceleratorPressed(const views::Accelerator& accelerator) {
383 if (!delegate_ || delegate_->CloseOnEscape()) { 397 if (!delegate_ || delegate_->CloseOnEscape()) {
384 DoClose(true); 398 DoClose(true);
385 return true; 399 return true;
386 } 400 }
387 return false; 401 return false;
388 } 402 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698