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

Side by Side Diff: chrome/browser/ui/panels/panel_browser_view.cc

Issue 10106008: Change Panel titlebars to activate the panel on click (rather than minimize). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: GTK changes Created 8 years, 8 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/panels/panel_browser_view.h" 5 #include "chrome/browser/ui/panels/panel_browser_view.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "chrome/browser/native_window_notification_source.h" 9 #include "chrome/browser/native_window_notification_source.h"
10 #include "chrome/browser/ui/panels/display_settings_provider.h" 10 #include "chrome/browser/ui/panels/display_settings_provider.h"
(...skipping 10 matching lines...) Expand all
21 #include "ui/base/l10n/l10n_util.h" 21 #include "ui/base/l10n/l10n_util.h"
22 #include "ui/views/controls/label.h" 22 #include "ui/views/controls/label.h"
23 #include "ui/views/widget/widget.h" 23 #include "ui/views/widget/widget.h"
24 24
25 #if defined(OS_WIN) && !defined(USE_AURA) 25 #if defined(OS_WIN) && !defined(USE_AURA)
26 #include "base/win/win_util.h" // for IsCtrlPressed() 26 #include "base/win/win_util.h" // for IsCtrlPressed()
27 #endif 27 #endif
28 28
29 using content::WebContents; 29 using content::WebContents;
30 30
31 namespace {
32 // The threshold to differentiate the short click and long click.
33 const int kShortClickThresholdMs = 200;
34
35 // Delay before click-to-minimize is allowed after the attention has been
36 // cleared.
37 const int kSuspendMinimizeOnClickIntervalMs = 500;
38 }
39
40 NativePanel* Panel::CreateNativePanel(Browser* browser, Panel* panel, 31 NativePanel* Panel::CreateNativePanel(Browser* browser, Panel* panel,
41 const gfx::Rect& bounds) { 32 const gfx::Rect& bounds) {
42 PanelBrowserView* view = new PanelBrowserView(browser, panel, bounds); 33 PanelBrowserView* view = new PanelBrowserView(browser, panel, bounds);
43 (new BrowserFrame(view))->InitBrowserFrame(); 34 (new BrowserFrame(view))->InitBrowserFrame();
44 return view; 35 return view;
45 } 36 }
46 37
47 PanelBrowserView::PanelBrowserView(Browser* browser, Panel* panel, 38 PanelBrowserView::PanelBrowserView(Browser* browser, Panel* panel,
48 const gfx::Rect& bounds) 39 const gfx::Rect& bounds)
49 : BrowserView(browser), 40 : BrowserView(browser),
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 GetFrameView()->GetWidget()->GetNativeView() == ::GetForegroundWindow(); 171 GetFrameView()->GetWidget()->GetNativeView() == ::GetForegroundWindow();
181 #else 172 #else
182 NOTIMPLEMENTED(); 173 NOTIMPLEMENTED();
183 bool focused = active; 174 bool focused = active;
184 #endif 175 #endif
185 176
186 if (focused_ == focused) 177 if (focused_ == focused)
187 return; 178 return;
188 focused_ = focused; 179 focused_ = focused;
189 180
190 if (focused_) { 181 // Do not clear draw attention if user cannot see contents of panel.
191 // Expand the panel if needed. Do NOT expand a TITLE_ONLY panel 182 if (focused_ && is_drawing_attention_ && !panel_->IsMinimized())
192 // otherwise it will be impossible to drag a title without 183 panel_->FlashFrame(false);
193 // expanding it.
194 if (panel_->expansion_state() == Panel::MINIMIZED)
195 panel_->SetExpansionState(Panel::EXPANDED);
196
197 if (is_drawing_attention_) {
198 panel_->FlashFrame(false);
199
200 // Restore the panel from title-only mode here. Could not do this in the
201 // code above.
202 if (panel_->expansion_state() == Panel::TITLE_ONLY)
203 panel_->SetExpansionState(Panel::EXPANDED);
204
205 // This function is called per one of the following user interactions:
206 // 1) clicking on the title-bar
207 // 2) clicking on the client area
208 // 3) switching to the panel via keyboard
209 // For case 1, we do not want the expanded panel to be minimized since the
210 // user clicks on it to mean to clear the attention.
211 attention_cleared_time_ = base::TimeTicks::Now();
212 }
213 }
214 184
215 content::NotificationService::current()->Notify( 185 content::NotificationService::current()->Notify(
216 chrome::NOTIFICATION_PANEL_CHANGED_ACTIVE_STATUS, 186 chrome::NOTIFICATION_PANEL_CHANGED_ACTIVE_STATUS,
217 content::Source<Panel>(panel()), 187 content::Source<Panel>(panel()),
218 content::NotificationService::NoDetails()); 188 content::NotificationService::NoDetails());
219 } 189 }
220 190
221 bool PanelBrowserView::AcceleratorPressed( 191 bool PanelBrowserView::AcceleratorPressed(
222 const ui::Accelerator& accelerator) { 192 const ui::Accelerator& accelerator) {
223 if (mouse_pressed_ && accelerator.key_code() == ui::VKEY_ESCAPE) { 193 if (mouse_pressed_ && accelerator.key_code() == ui::VKEY_ESCAPE) {
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 } 493 }
524 494
525 return EndDragging(false); 495 return EndDragging(false);
526 } 496 }
527 497
528 // If the panel drag was cancelled before the mouse is released, do not treat 498 // If the panel drag was cancelled before the mouse is released, do not treat
529 // this as a click. 499 // this as a click.
530 if (mouse_dragging_state_ != NO_DRAGGING) 500 if (mouse_dragging_state_ != NO_DRAGGING)
531 return true; 501 return true;
532 502
533 // Ignore long clicks. Treated as a canceled click to be consistent with Mac. 503 panel::ClickModifier click_modifier = panel::NO_MODIFIER;
534 if (base::TimeTicks::Now() - mouse_pressed_time_ >
535 base::TimeDelta::FromMilliseconds(kShortClickThresholdMs))
536 return true;
537
538 #if defined(OS_WIN) && !defined(USE_AURA) 504 #if defined(OS_WIN) && !defined(USE_AURA)
539 if (base::win::IsCtrlPressed()) { 505 if (base::win::IsCtrlPressed()) {
jianli 2012/04/18 22:18:47 nit: {} is not needed.
540 panel_->OnTitlebarClicked(panel::APPLY_TO_ALL); 506 click_modifier = panel::APPLY_TO_ALL;
jianli 2012/04/18 22:18:47 Since we're not longer supporting click-to-minimiz
541 return true;
542 } 507 }
543 #else 508 #else
544 NOTIMPLEMENTED(); // Proceed without modifier. 509 // Proceed without modifier.
545 #endif 510 #endif
546 511
547 // TODO(jennb): Move remaining titlebar click handling out of here. 512 panel_->OnTitlebarClicked(click_modifier);
548 // (http://crbug.com/118431)
549 PanelStrip* panel_strip = panel_->panel_strip();
550 if (!panel_strip)
551 return true;
552
553 // Do not minimize the panel when we just clear the attention state. This is
554 // a hack to prevent the panel from being minimized when the user clicks on
555 // the title-bar to clear the attention.
556 if (panel_strip->type() == PanelStrip::DOCKED &&
557 panel_->expansion_state() == Panel::EXPANDED &&
558 base::TimeTicks::Now() - attention_cleared_time_ <
559 base::TimeDelta::FromMilliseconds(kSuspendMinimizeOnClickIntervalMs)) {
560 return true;
561 }
562
563 if (panel_strip->type() == PanelStrip::DOCKED &&
564 panel_->expansion_state() == Panel::EXPANDED)
565 panel_->SetExpansionState(Panel::MINIMIZED);
566 else
567 panel_->Activate();
568
569 return true; 513 return true;
570 } 514 }
571 515
572 bool PanelBrowserView::OnTitlebarMouseCaptureLost() { 516 bool PanelBrowserView::OnTitlebarMouseCaptureLost() {
573 if (mouse_dragging_state_ == DRAGGING_STARTED) 517 if (mouse_dragging_state_ == DRAGGING_STARTED)
574 return EndDragging(true); 518 return EndDragging(true);
575 return true; 519 return true;
576 } 520 }
577 521
578 bool PanelBrowserView::EndDragging(bool cancelled) { 522 bool PanelBrowserView::EndDragging(bool cancelled) {
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 return expected_color == frame_view->title_label_->enabled_color(); 686 return expected_color == frame_view->title_label_->enabled_color();
743 } 687 }
744 688
745 bool NativePanelTestingWin::IsWindowSizeKnown() const { 689 bool NativePanelTestingWin::IsWindowSizeKnown() const {
746 return true; 690 return true;
747 } 691 }
748 692
749 bool NativePanelTestingWin::IsAnimatingBounds() const { 693 bool NativePanelTestingWin::IsAnimatingBounds() const {
750 return panel_browser_view_->IsAnimatingBounds(); 694 return panel_browser_view_->IsAnimatingBounds();
751 } 695 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698