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

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

Issue 8341098: Mac: Added a delay before panels go to minimized state from title-only state. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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/panels/panel_manager.h" 5 #include "chrome/browser/ui/panels/panel_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 14 matching lines...) Expand all
25 // area. 25 // area.
26 const double kPanelMaxWidthFactor = 1.0; 26 const double kPanelMaxWidthFactor = 1.0;
27 const double kPanelMaxHeightFactor = 0.5; 27 const double kPanelMaxHeightFactor = 0.5;
28 28
29 // Occasionally some system, like Windows, might not bring up or down the bottom 29 // Occasionally some system, like Windows, might not bring up or down the bottom
30 // bar when the mouse enters or leaves the bottom screen area. This is the 30 // bar when the mouse enters or leaves the bottom screen area. This is the
31 // maximum time we will wait for the bottom bar visibility change notification. 31 // maximum time we will wait for the bottom bar visibility change notification.
32 // After the time expires, we bring up/down the titlebars as planned. 32 // After the time expires, we bring up/down the titlebars as planned.
33 const int kMaxMillisecondsWaitForBottomBarVisibilityChange = 1000; 33 const int kMaxMillisecondsWaitForBottomBarVisibilityChange = 1000;
34 34
35 // See usage below.
36 #if defined (OS_MACOSX)
jianli 2011/10/28 01:04:11 Extra empty space.
Dmitry Titov 2011/10/28 20:58:23 Done.
37 const int kMillisecondsBeforeCollapsingFromTitleonlyState = 3000;
38 #else
39 const int kMillisecondsBeforeCollapsingFromTitleonlyState = 0;
40 #endif
41
35 // Single instance of PanelManager. 42 // Single instance of PanelManager.
36 scoped_refptr<PanelManager> panel_manager_instance; 43 scoped_refptr<PanelManager> panel_manager_instance;
37 } // namespace 44 } // namespace
38 45
39 // static 46 // static
47 int PanelManager::sLastTaskIndex = 0;
48
49 // static
40 PanelManager* PanelManager::GetInstance() { 50 PanelManager* PanelManager::GetInstance() {
41 if (!panel_manager_instance.get()) 51 if (!panel_manager_instance.get())
42 panel_manager_instance = new PanelManager(); 52 panel_manager_instance = new PanelManager();
43 return panel_manager_instance.get(); 53 return panel_manager_instance.get();
44 } 54 }
45 55
46 PanelManager::PanelManager() 56 PanelManager::PanelManager()
47 : minimized_panel_count_(0), 57 : minimized_panel_count_(0),
48 are_titlebars_up_(false), 58 are_titlebars_up_(false),
49 dragging_panel_index_(kInvalidPanelIndex), 59 dragging_panel_index_(kInvalidPanelIndex),
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 delayed_titlebar_action_ = bring_up ? BRING_UP : BRING_DOWN; 414 delayed_titlebar_action_ = bring_up ? BRING_UP : BRING_DOWN;
405 415
406 // Occasionally some system, like Windows, might not bring up or down the 416 // Occasionally some system, like Windows, might not bring up or down the
407 // bottom bar when the mouse enters or leaves the bottom screen area. 417 // bottom bar when the mouse enters or leaves the bottom screen area.
408 // Thus, we schedule a delayed task to do the work if we do not receive 418 // Thus, we schedule a delayed task to do the work if we do not receive
409 // the bottom bar visibility change notification within a certain period 419 // the bottom bar visibility change notification within a certain period
410 // of time. 420 // of time.
411 MessageLoop::current()->PostDelayedTask( 421 MessageLoop::current()->PostDelayedTask(
412 FROM_HERE, 422 FROM_HERE,
413 method_factory_.NewRunnableMethod( 423 method_factory_.NewRunnableMethod(
414 &PanelManager::DelayedBringUpOrDownTitlebarsCheck), 424 &PanelManager::DelayedBringUpOrDownTitlebarsCheck,
425 ++sLastTaskIndex),
jianli 2011/10/28 01:04:11 Where do we reset sLastTaskIndex? What if increasi
Dmitry Titov 2011/10/28 20:58:23 If we post a task every time user moves the mouse
415 kMaxMillisecondsWaitForBottomBarVisibilityChange); 426 kMaxMillisecondsWaitForBottomBarVisibilityChange);
416 427
417 return; 428 return;
418 } 429 }
419 } 430 }
420 431
432 // On some OSes, the interaction with native Taskbars/Docks may be improved
433 // if the panels are not go back to minimized state too fast. For example,
jianli 2011/10/28 01:04:11 are not => do not
Dmitry Titov 2011/10/28 20:58:23 Done.
434 // it makes it possible to hit the titlebar on OSX if Dock has Magnifying
435 // enabled - the panels stay up for a while after Dock magnification effect
436 // stops covering the panels.
437 if (!bring_up) {
438 delayed_titlebar_action_ = BRING_DOWN;
439 MessageLoop::current()->PostDelayedTask(
jianli 2011/10/28 01:04:11 This seems to be similar to the above PostDelayed
Dmitry Titov 2011/10/28 20:58:23 Done.
440 FROM_HERE,
441 method_factory_.NewRunnableMethod(
442 &PanelManager::DelayedBringUpOrDownTitlebarsCheck,
443 ++sLastTaskIndex),
444 kMillisecondsBeforeCollapsingFromTitleonlyState);
445 return;
446 }
447
448
421 DoBringUpOrDownTitlebars(bring_up); 449 DoBringUpOrDownTitlebars(bring_up);
422 } 450 }
423 451
424 void PanelManager::DelayedBringUpOrDownTitlebarsCheck() { 452 void PanelManager::DelayedBringUpOrDownTitlebarsCheck(int taskIndex) {
jianli 2011/10/28 01:04:11 taskIndex => task_index
Dmitry Titov 2011/10/28 20:58:23 Done.
453 // task was already processed or cancelled - bail out.
jianli 2011/10/28 01:04:11 task needs to be capitalized.
Dmitry Titov 2011/10/28 20:58:23 Done.
425 if (delayed_titlebar_action_ == NO_ACTION) 454 if (delayed_titlebar_action_ == NO_ACTION)
426 return; 455 return;
427 456
457 // In case we posted multiple tasks because user was moving mouse back and
458 // forth, ignore all but the last one.
459 if (taskIndex < sLastTaskIndex)
460 return;
461 DCHECK(taskIndex == sLastTaskIndex);
462
463 // We are going to process the task one way or another after this point.
464 delayed_titlebar_action_ = NO_ACTION;
465
466 // Check if the action is still needed based on mouse position. In case the
467 // mouse moved and does not call for the titlebars change, cancel.
468 if (are_titlebars_up_ != (delayed_titlebar_action_ == BRING_UP))
469 return;
470
428 DoBringUpOrDownTitlebars(delayed_titlebar_action_ == BRING_UP); 471 DoBringUpOrDownTitlebars(delayed_titlebar_action_ == BRING_UP);
429 delayed_titlebar_action_ = NO_ACTION;
430 } 472 }
431 473
432 void PanelManager::DoBringUpOrDownTitlebars(bool bring_up) { 474 void PanelManager::DoBringUpOrDownTitlebars(bool bring_up) {
433 for (Panels::const_iterator iter = panels_.begin(); 475 for (Panels::const_iterator iter = panels_.begin();
434 iter != panels_.end(); ++iter) { 476 iter != panels_.end(); ++iter) {
435 Panel* panel = *iter; 477 Panel* panel = *iter;
436 478
437 // Skip any panel that is drawing the attention. 479 // Skip any panel that is drawing the attention.
438 if (panel->IsDrawingAttention()) 480 if (panel->IsDrawingAttention())
439 continue; 481 continue;
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 // Start from the bottom to avoid reshuffling. 594 // Start from the bottom to avoid reshuffling.
553 for (Panels::reverse_iterator iter = panels_copy.rbegin(); 595 for (Panels::reverse_iterator iter = panels_copy.rbegin();
554 iter != panels_copy.rend(); ++iter) 596 iter != panels_copy.rend(); ++iter)
555 (*iter)->Close(); 597 (*iter)->Close();
556 } 598 }
557 599
558 bool PanelManager::is_dragging_panel() const { 600 bool PanelManager::is_dragging_panel() const {
559 return dragging_panel_index_ != kInvalidPanelIndex; 601 return dragging_panel_index_ != kInvalidPanelIndex;
560 } 602 }
561 603
OLDNEW
« chrome/browser/ui/panels/panel_manager.h ('K') | « chrome/browser/ui/panels/panel_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698