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

Unified Diff: chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_hover_state.mm

Issue 7465090: [Mac] Replace the custom bookmark menus with native NSMenus. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_hover_state.mm
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_hover_state.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_hover_state.mm
deleted file mode 100644
index abd3f88c567a920568f8530288fa7aa2275f7d10..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_hover_state.mm
+++ /dev/null
@@ -1,173 +0,0 @@
-// Copyright (c) 2010 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.
-
-#import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_hover_state.h"
-#import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h"
-
-@interface BookmarkBarFolderHoverState(Private)
-- (void)setHoverState:(HoverState)state;
-- (void)closeBookmarkFolderOnHoverButton:(BookmarkButton*)button;
-- (void)openBookmarkFolderOnHoverButton:(BookmarkButton*)button;
-@end
-
-@implementation BookmarkBarFolderHoverState
-
-- (id)init {
- if ((self = [super init])) {
- hoverState_ = kHoverStateClosed;
- }
- return self;
-}
-
-- (NSDragOperation)draggingEnteredButton:(BookmarkButton*)button {
- if ([button isFolder]) {
- if (hoverButton_ == button) {
- // CASE A: hoverButton_ == button implies we've dragged over
- // the same folder so no need to open or close anything new.
- } else if (hoverButton_ &&
- hoverButton_ != button) {
- // CASE B: we have a hoverButton_ but it is different from the new button.
- // This implies we've dragged over a new folder, so we'll close the old
- // and open the new.
- // Note that we only schedule the open or close if we have no other tasks
- // currently pending.
-
- if (hoverState_ == kHoverStateOpen) {
- // Close the old.
- [self scheduleCloseBookmarkFolderOnHoverButton];
- } else if (hoverState_ == kHoverStateClosed) {
- // Open the new.
- [self scheduleOpenBookmarkFolderOnHoverButton:button];
- }
- } else if (!hoverButton_) {
- // CASE C: we don't have a current hoverButton_ but we have dragged onto
- // a new folder so we open the new one.
- [self scheduleOpenBookmarkFolderOnHoverButton:button];
- }
- } else if (!button) {
- if (hoverButton_) {
- // CASE D: We have a hoverButton_ but we've moved onto an area that
- // requires no hover. We close the hoverButton_ in this case. This
- // means cancelling if the open is pending (i.e. |kHoverStateOpening|)
- // or closing if we don't alrealy have once in progress.
-
- // Intiate close only if we have not already done so.
- if (hoverState_ == kHoverStateOpening) {
- // Cancel the pending open.
- [self cancelPendingOpenBookmarkFolderOnHoverButton];
- } else if (hoverState_ != kHoverStateClosing) {
- // Schedule the close.
- [self scheduleCloseBookmarkFolderOnHoverButton];
- }
- } else {
- // CASE E: We have neither a hoverButton_ nor a new button that requires
- // a hover. In this case we do nothing.
- }
- }
-
- return NSDragOperationMove;
-}
-
-- (void)draggingExited {
- if (hoverButton_) {
- if (hoverState_ == kHoverStateOpening) {
- [self cancelPendingOpenBookmarkFolderOnHoverButton];
- } else if (hoverState_ == kHoverStateClosing) {
- [self cancelPendingCloseBookmarkFolderOnHoverButton];
- }
- }
-}
-
-// Schedule close of hover button. Transition to kHoverStateClosing state.
-- (void)scheduleCloseBookmarkFolderOnHoverButton {
- DCHECK(hoverButton_);
- [self setHoverState:kHoverStateClosing];
- [self performSelector:@selector(closeBookmarkFolderOnHoverButton:)
- withObject:hoverButton_
- afterDelay:bookmarks::kDragHoverCloseDelay
- inModes:[NSArray arrayWithObject:NSRunLoopCommonModes]];
-}
-
-// Cancel pending hover close. Transition to kHoverStateOpen state.
-- (void)cancelPendingCloseBookmarkFolderOnHoverButton {
- [self setHoverState:kHoverStateOpen];
- [NSObject
- cancelPreviousPerformRequestsWithTarget:self
- selector:@selector(closeBookmarkFolderOnHoverButton:)
- object:hoverButton_];
-}
-
-// Schedule open of hover button. Transition to kHoverStateOpening state.
-- (void)scheduleOpenBookmarkFolderOnHoverButton:(BookmarkButton*)button {
- DCHECK(button);
- hoverButton_.reset([button retain]);
- [self setHoverState:kHoverStateOpening];
- [self performSelector:@selector(openBookmarkFolderOnHoverButton:)
- withObject:hoverButton_
- afterDelay:bookmarks::kDragHoverOpenDelay
- inModes:[NSArray arrayWithObject:NSRunLoopCommonModes]];
-}
-
-// Cancel pending hover open. Transition to kHoverStateClosed state.
-- (void)cancelPendingOpenBookmarkFolderOnHoverButton {
- [self setHoverState:kHoverStateClosed];
- [NSObject
- cancelPreviousPerformRequestsWithTarget:self
- selector:@selector(openBookmarkFolderOnHoverButton:)
- object:hoverButton_];
- hoverButton_.reset();
-}
-
-// Hover button accessor. For testing only.
-- (BookmarkButton*)hoverButton {
- return hoverButton_;
-}
-
-// Hover state accessor. For testing only.
-- (HoverState)hoverState {
- return hoverState_;
-}
-
-// This method encodes the rules of our |hoverButton_| state machine. Only
-// specific state transitions are allowable (encoded in the DCHECK).
-// Note that there is no state for simultaneously opening and closing. A
-// pending open must complete before scheduling a close, and vice versa. And
-// it is not possible to make a transition directly from open to closed, and
-// vice versa.
-- (void)setHoverState:(HoverState)state {
- DCHECK(
- (hoverState_ == kHoverStateClosed && state == kHoverStateOpening) ||
- (hoverState_ == kHoverStateOpening && state == kHoverStateClosed) ||
- (hoverState_ == kHoverStateOpening && state == kHoverStateOpen) ||
- (hoverState_ == kHoverStateOpen && state == kHoverStateClosing) ||
- (hoverState_ == kHoverStateClosing && state == kHoverStateOpen) ||
- (hoverState_ == kHoverStateClosing && state == kHoverStateClosed)
- ) << "bad transition: old = " << hoverState_ << " new = " << state;
-
- hoverState_ = state;
-}
-
-// Called after a delay to close a previously hover-opened folder.
-// Note: this method is not meant to be invoked directly, only through
-// a delayed call to |scheduleCloseBookmarkFolderOnHoverButton:|.
-- (void)closeBookmarkFolderOnHoverButton:(BookmarkButton*)button {
- [NSObject
- cancelPreviousPerformRequestsWithTarget:self
- selector:@selector(closeBookmarkFolderOnHoverButton:)
- object:hoverButton_];
- [self setHoverState:kHoverStateClosed];
- [[button target] closeBookmarkFolder:button];
- hoverButton_.reset();
-}
-
-// Called after a delay to open a new hover folder.
-// Note: this method is not meant to be invoked directly, only through
-// a delayed call to |scheduleOpenBookmarkFolderOnHoverButton:|.
-- (void)openBookmarkFolderOnHoverButton:(BookmarkButton*)button {
- [self setHoverState:kHoverStateOpen];
- [[button target] performSelector:@selector(openBookmarkFolderFromButton:)
- withObject:button];
-}
-
-@end

Powered by Google App Engine
This is Rietveld 408576698