diff options
author | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-05 18:14:08 +0000 |
---|---|---|
committer | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-05 18:14:08 +0000 |
commit | a05cfeea397e7be36e621cf60e218b1ac71d2054 (patch) | |
tree | cf3acc8498bd877f25cdb463d7f3c44115bf5ebe /chrome/browser/cocoa/delayedmenu_button.mm | |
parent | 032f30f4cf00b1adaf9d8a5033175d065b6e1798 (diff) | |
download | chromium_src-a05cfeea397e7be36e621cf60e218b1ac71d2054.zip chromium_src-a05cfeea397e7be36e621cf60e218b1ac71d2054.tar.gz chromium_src-a05cfeea397e7be36e621cf60e218b1ac71d2054.tar.bz2 |
Reverting 22478.
TBR=jar
Review URL: http://codereview.chromium.org/160660
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22499 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa/delayedmenu_button.mm')
-rw-r--r-- | chrome/browser/cocoa/delayedmenu_button.mm | 124 |
1 files changed, 0 insertions, 124 deletions
diff --git a/chrome/browser/cocoa/delayedmenu_button.mm b/chrome/browser/cocoa/delayedmenu_button.mm deleted file mode 100644 index 1470d1a..0000000 --- a/chrome/browser/cocoa/delayedmenu_button.mm +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (c) 2009 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/cocoa/delayedmenu_button.h" - -#include "base/logging.h" -#include "base/scoped_nsobject.h" -#import "chrome/browser/cocoa/clickhold_button_cell.h" - -@interface DelayedMenuButton (Private) - -- (void)resetToDefaults; -- (void)menuAction:(id)sender; - -@end // @interface DelayedMenuButton (Private) - -@implementation DelayedMenuButton - -// Overrides: - -+ (Class)cellClass { - return [ClickHoldButtonCell class]; -} - -- (id)init { - if ((self = [super init])) - [self resetToDefaults]; - return self; -} - -- (id)initWithCoder:(NSCoder*)decoder { - if ((self = [super initWithCoder:decoder])) - [self resetToDefaults]; - return self; -} - -- (id)initWithFrame:(NSRect)frameRect { - if ((self = [super initWithFrame:frameRect])) - [self resetToDefaults]; - return self; -} - -- (void)awakeFromNib { - [self resetToDefaults]; -} - -// Accessors and mutators: - -@synthesize menu = menu_; - -// Don't synthesize for menuEnabled_; its mutator must do other things. -- (void)setMenuEnabled:(BOOL)enabled { - menuEnabled_ = enabled; - [[self cell] setEnableClickHold:menuEnabled_]; -} - -- (BOOL)menuEnabled { - return menuEnabled_; -} - -@end // @implementation DelayedMenuButton - -@implementation DelayedMenuButton (Private) - -- (void)resetToDefaults { - id cell = [self cell]; - DCHECK([cell isKindOfClass:[ClickHoldButtonCell class]]); - [self setEnabled:NO]; // Make the controller put in a menu and - // enable it explicitly. This also takes - // care of |[cell setEnableClickHold:]|. - [cell setClickHoldTimeout:0.25]; // Random guess at Cocoa-ish value. - [cell setTrackOnlyInRect:NO]; - [cell setActivateOnDrag:YES]; - [cell setClickHoldAction:@selector(menuAction:)]; - [cell setClickHoldTarget:self]; -} - -- (void)menuAction:(id)sender { - // We shouldn't get here unless the menu is enabled. - DCHECK(menuEnabled_); - - // If we don't have a menu (in which case the person using this control is - // being bad), just wait for a mouse up. - if (!menu_) { - LOG(WARNING) << "No menu available."; - [NSApp nextEventMatchingMask:NSLeftMouseUpMask - untilDate:[NSDate distantFuture] - inMode:NSEventTrackingRunLoopMode - dequeue:YES]; - return; - } - - // FIXME(viettrungluu@gmail.com): Don't ask me. I don't know what's going on. - // But it yields unquestionably right results (even when the menu has to flip - // upwards because you've stupidly dragged the top of the window to the bottom - // of the screen) -- this demonstrates that the y-coordinate (in our - // superview's coordinates) is right. The x-coordinate (in our coordinates) is - // right since the menu appears horizontally in the right place (more or - // less). The |- 2.0| factor is an inexplicable fudge to make it approximately - // line up. If someone figures out what's going on, please fix this. - NSRect frame = [self frame]; - frame.origin.x = [self convertPoint:frame.origin - fromView:[self superview]].x - 2.0; - - // Make our pop-up button cell and set things up. This is, as of 10.5, the - // official Apple-recommended hack. Later, perhaps |-[NSMenu - // popUpMenuPositioningItem:atLocation:inView:]| may be a better option. - // However, using a pulldown has the benefit that Cocoa automatically places - // the menu correctly even when we're at the edge of the screen (including - // "dragging upwards" when the button is close to the bottom of the screen). - scoped_nsobject<NSPopUpButtonCell> popUpCell( - [[NSPopUpButtonCell alloc] initTextCell:@"" - pullsDown:YES]); - DCHECK(popUpCell.get()); - [popUpCell setMenu:menu_]; - [popUpCell selectItem:nil]; - [popUpCell attachPopUpWithFrame:frame - inView:self]; - [popUpCell performClickWithFrame:frame - inView:self]; -} - -@end // @implementation DelayedMenuButton (Private) |