Merge branch 'feature/modifiers-click-tray' of https://github.com/nishanths/electron into nishanths-feature/modifiers-click-tray
This commit is contained in:
		
				commit
				
					
						edde653d60
					
				
			
		
					 8 changed files with 45 additions and 73 deletions
				
			
		| 
						 | 
					@ -40,12 +40,12 @@ mate::Wrappable* Tray::New(v8::Isolate* isolate, const gfx::Image& image) {
 | 
				
			||||||
  return new Tray(image);
 | 
					  return new Tray(image);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Tray::OnClicked(const gfx::Rect& bounds) {
 | 
					void Tray::OnClicked(const gfx::Rect& bounds, int modifiers) {
 | 
				
			||||||
  Emit("clicked", bounds);
 | 
					  Emit("clicked", bounds, modifiers);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Tray::OnDoubleClicked(const gfx::Rect& bounds) {
 | 
					void Tray::OnDoubleClicked(const gfx::Rect& bounds, int modifiers) {
 | 
				
			||||||
  Emit("double-clicked", bounds);
 | 
					  Emit("double-clicked", bounds, modifiers);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Tray::OnBalloonShow() {
 | 
					void Tray::OnBalloonShow() {
 | 
				
			||||||
| 
						 | 
					@ -60,8 +60,8 @@ void Tray::OnBalloonClosed() {
 | 
				
			||||||
  Emit("balloon-closed");
 | 
					  Emit("balloon-closed");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Tray::OnRightClicked(const gfx::Rect& bounds) {
 | 
					void Tray::OnRightClicked(const gfx::Rect& bounds, int modifiers) {
 | 
				
			||||||
  Emit("right-clicked", bounds);
 | 
					  Emit("right-clicked", bounds, modifiers);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Tray::OnDropFiles(const std::vector<std::string>& files) {
 | 
					void Tray::OnDropFiles(const std::vector<std::string>& files) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,12 +42,12 @@ class Tray : public mate::EventEmitter,
 | 
				
			||||||
  virtual ~Tray();
 | 
					  virtual ~Tray();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // TrayIconObserver:
 | 
					  // TrayIconObserver:
 | 
				
			||||||
  void OnClicked(const gfx::Rect& bounds) override;
 | 
					  void OnClicked(const gfx::Rect& bounds, int modifiers) override;
 | 
				
			||||||
  void OnDoubleClicked(const gfx::Rect& bounds) override;
 | 
					  void OnDoubleClicked(const gfx::Rect& bounds, int modifiers) override;
 | 
				
			||||||
  void OnBalloonShow() override;
 | 
					  void OnBalloonShow() override;
 | 
				
			||||||
  void OnBalloonClicked() override;
 | 
					  void OnBalloonClicked() override;
 | 
				
			||||||
  void OnBalloonClosed() override;
 | 
					  void OnBalloonClosed() override;
 | 
				
			||||||
  void OnRightClicked(const gfx::Rect& bounds) override;
 | 
					  void OnRightClicked(const gfx::Rect& bounds, int modifiers) override;
 | 
				
			||||||
  void OnDropFiles(const std::vector<std::string>& files) override;
 | 
					  void OnDropFiles(const std::vector<std::string>& files) override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // mate::Wrappable:
 | 
					  // mate::Wrappable:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,55 +11,9 @@
 | 
				
			||||||
#include "ui/base/accelerators/platform_accelerator_cocoa.h"
 | 
					#include "ui/base/accelerators/platform_accelerator_cocoa.h"
 | 
				
			||||||
#include "ui/base/l10n/l10n_util_mac.h"
 | 
					#include "ui/base/l10n/l10n_util_mac.h"
 | 
				
			||||||
#include "ui/base/models/simple_menu_model.h"
 | 
					#include "ui/base/models/simple_menu_model.h"
 | 
				
			||||||
 | 
					#include "ui/events/cocoa/cocoa_event_utils.h"
 | 
				
			||||||
#include "ui/gfx/image/image.h"
 | 
					#include "ui/gfx/image/image.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool isLeftButtonEvent(NSEvent* event) {
 | 
					 | 
				
			||||||
  NSEventType type = [event type];
 | 
					 | 
				
			||||||
  return type == NSLeftMouseDown ||
 | 
					 | 
				
			||||||
    type == NSLeftMouseDragged ||
 | 
					 | 
				
			||||||
    type == NSLeftMouseUp;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool isRightButtonEvent(NSEvent* event) {
 | 
					 | 
				
			||||||
  NSEventType type = [event type];
 | 
					 | 
				
			||||||
  return type == NSRightMouseDown ||
 | 
					 | 
				
			||||||
    type == NSRightMouseDragged ||
 | 
					 | 
				
			||||||
    type == NSRightMouseUp;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool isMiddleButtonEvent(NSEvent* event) {
 | 
					 | 
				
			||||||
  if ([event buttonNumber] != 2)
 | 
					 | 
				
			||||||
    return false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  NSEventType type = [event type];
 | 
					 | 
				
			||||||
  return type == NSOtherMouseDown ||
 | 
					 | 
				
			||||||
    type == NSOtherMouseDragged ||
 | 
					 | 
				
			||||||
    type == NSOtherMouseUp;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int EventFlagsFromNSEventWithModifiers(NSEvent* event, NSUInteger modifiers) {
 | 
					 | 
				
			||||||
  int flags = 0;
 | 
					 | 
				
			||||||
  flags |= (modifiers & NSAlphaShiftKeyMask) ? ui::EF_CAPS_LOCK_DOWN : 0;
 | 
					 | 
				
			||||||
  flags |= (modifiers & NSShiftKeyMask) ? ui::EF_SHIFT_DOWN : 0;
 | 
					 | 
				
			||||||
  flags |= (modifiers & NSControlKeyMask) ? ui::EF_CONTROL_DOWN : 0;
 | 
					 | 
				
			||||||
  flags |= (modifiers & NSAlternateKeyMask) ? ui::EF_ALT_DOWN : 0;
 | 
					 | 
				
			||||||
  flags |= (modifiers & NSCommandKeyMask) ? ui::EF_COMMAND_DOWN : 0;
 | 
					 | 
				
			||||||
  flags |= isLeftButtonEvent(event) ? ui::EF_LEFT_MOUSE_BUTTON : 0;
 | 
					 | 
				
			||||||
  flags |= isRightButtonEvent(event) ? ui::EF_RIGHT_MOUSE_BUTTON : 0;
 | 
					 | 
				
			||||||
  flags |= isMiddleButtonEvent(event) ? ui::EF_MIDDLE_MOUSE_BUTTON : 0;
 | 
					 | 
				
			||||||
  return flags;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Retrieves a bitsum of ui::EventFlags from NSEvent.
 | 
					 | 
				
			||||||
int EventFlagsFromNSEvent(NSEvent* event) {
 | 
					 | 
				
			||||||
  NSUInteger modifiers = [event modifierFlags];
 | 
					 | 
				
			||||||
  return EventFlagsFromNSEventWithModifiers(event, modifiers);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}  // namespace
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@interface AtomMenuController (Private)
 | 
					@interface AtomMenuController (Private)
 | 
				
			||||||
- (void)addSeparatorToMenu:(NSMenu*)menu
 | 
					- (void)addSeparatorToMenu:(NSMenu*)menu
 | 
				
			||||||
                   atIndex:(int)index;
 | 
					                   atIndex:(int)index;
 | 
				
			||||||
| 
						 | 
					@ -246,8 +200,9 @@ int EventFlagsFromNSEvent(NSEvent* event) {
 | 
				
			||||||
          [[sender representedObject] pointerValue]);
 | 
					          [[sender representedObject] pointerValue]);
 | 
				
			||||||
  DCHECK(model);
 | 
					  DCHECK(model);
 | 
				
			||||||
  if (model) {
 | 
					  if (model) {
 | 
				
			||||||
    int event_flags = EventFlagsFromNSEvent([NSApp currentEvent]);
 | 
					    NSEvent* event = [NSApp currentEvent];
 | 
				
			||||||
    model->ActivatedAt(modelIndex, event_flags);
 | 
					    model->ActivatedAt(modelIndex,
 | 
				
			||||||
 | 
					                       ui::EventFlagsFromModifiers([event modifierFlags]));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,12 +29,13 @@ void TrayIcon::DisplayBalloon(const gfx::Image& icon,
 | 
				
			||||||
void TrayIcon::PopContextMenu(const gfx::Point& pos) {
 | 
					void TrayIcon::PopContextMenu(const gfx::Point& pos) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TrayIcon::NotifyClicked(const gfx::Rect& bounds) {
 | 
					void TrayIcon::NotifyClicked(const gfx::Rect& bounds, int modifiers) {
 | 
				
			||||||
  FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnClicked(bounds));
 | 
					  FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnClicked(bounds, modifiers));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TrayIcon::NotifyDoubleClicked(const gfx::Rect& bounds) {
 | 
					void TrayIcon::NotifyDoubleClicked(const gfx::Rect& bounds, int modifiers) {
 | 
				
			||||||
  FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnDoubleClicked(bounds));
 | 
					  FOR_EACH_OBSERVER(TrayIconObserver, observers_,
 | 
				
			||||||
 | 
					                    OnDoubleClicked(bounds, modifiers));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TrayIcon::NotifyBalloonShow() {
 | 
					void TrayIcon::NotifyBalloonShow() {
 | 
				
			||||||
| 
						 | 
					@ -49,8 +50,9 @@ void TrayIcon::NotifyBalloonClosed() {
 | 
				
			||||||
  FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnBalloonClosed());
 | 
					  FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnBalloonClosed());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TrayIcon::NotifyRightClicked(const gfx::Rect& bounds) {
 | 
					void TrayIcon::NotifyRightClicked(const gfx::Rect& bounds, int modifiers) {
 | 
				
			||||||
  FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnRightClicked(bounds));
 | 
					  FOR_EACH_OBSERVER(TrayIconObserver, observers_,
 | 
				
			||||||
 | 
					                    OnRightClicked(bounds, modifiers));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TrayIcon::NotfiyDropFiles(const std::vector<std::string>& files) {
 | 
					void TrayIcon::NotfiyDropFiles(const std::vector<std::string>& files) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,12 +54,13 @@ class TrayIcon {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void AddObserver(TrayIconObserver* obs) { observers_.AddObserver(obs); }
 | 
					  void AddObserver(TrayIconObserver* obs) { observers_.AddObserver(obs); }
 | 
				
			||||||
  void RemoveObserver(TrayIconObserver* obs) { observers_.RemoveObserver(obs); }
 | 
					  void RemoveObserver(TrayIconObserver* obs) { observers_.RemoveObserver(obs); }
 | 
				
			||||||
  void NotifyClicked(const gfx::Rect& = gfx::Rect());
 | 
					  void NotifyClicked(const gfx::Rect& = gfx::Rect(), int modifiers = 0);
 | 
				
			||||||
  void NotifyDoubleClicked(const gfx::Rect& = gfx::Rect());
 | 
					  void NotifyDoubleClicked(const gfx::Rect& = gfx::Rect(), int modifiers = 0);
 | 
				
			||||||
  void NotifyBalloonShow();
 | 
					  void NotifyBalloonShow();
 | 
				
			||||||
  void NotifyBalloonClicked();
 | 
					  void NotifyBalloonClicked();
 | 
				
			||||||
  void NotifyBalloonClosed();
 | 
					  void NotifyBalloonClosed();
 | 
				
			||||||
  void NotifyRightClicked(const gfx::Rect& bounds = gfx::Rect());
 | 
					  void NotifyRightClicked(const gfx::Rect& bounds = gfx::Rect(),
 | 
				
			||||||
 | 
					                          int modifiers = 0);
 | 
				
			||||||
  void NotfiyDropFiles(const std::vector<std::string>& files);
 | 
					  void NotfiyDropFiles(const std::vector<std::string>& files);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 protected:
 | 
					 protected:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "atom/browser/ui/cocoa/atom_menu_controller.h"
 | 
					#include "atom/browser/ui/cocoa/atom_menu_controller.h"
 | 
				
			||||||
#include "base/strings/sys_string_conversions.h"
 | 
					#include "base/strings/sys_string_conversions.h"
 | 
				
			||||||
 | 
					#include "ui/events/cocoa/cocoa_event_utils.h"
 | 
				
			||||||
#include "ui/gfx/image/image.h"
 | 
					#include "ui/gfx/image/image.h"
 | 
				
			||||||
#include "ui/gfx/screen.h"
 | 
					#include "ui/gfx/screen.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -147,16 +148,23 @@ const CGFloat kMargin = 3;
 | 
				
			||||||
     return;
 | 
					     return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  inMouseEventSequence_ = NO;
 | 
					  inMouseEventSequence_ = NO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Single click
 | 
				
			||||||
  if (event.clickCount == 1) {
 | 
					  if (event.clickCount == 1) {
 | 
				
			||||||
    if (menuController_) {
 | 
					    if (menuController_) {
 | 
				
			||||||
      [statusItem_ popUpStatusItemMenu:[menuController_ menu]];
 | 
					      [statusItem_ popUpStatusItemMenu:[menuController_ menu]];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    trayIcon_->NotifyClicked([self getBoundsFromEvent:event]);
 | 
					    trayIcon_->NotifyClicked(
 | 
				
			||||||
 | 
					        [self getBoundsFromEvent:event],
 | 
				
			||||||
 | 
					        ui::EventFlagsFromModifiers([event modifierFlags]));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Double click
 | 
				
			||||||
  if (event.clickCount == 2 && !menuController_) {
 | 
					  if (event.clickCount == 2 && !menuController_) {
 | 
				
			||||||
    trayIcon_->NotifyDoubleClicked([self getBoundsFromEvent:event]);
 | 
					    trayIcon_->NotifyDoubleClicked(
 | 
				
			||||||
 | 
					        [self getBoundsFromEvent:event],
 | 
				
			||||||
 | 
					        ui::EventFlagsFromModifiers([event modifierFlags]));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  [self setNeedsDisplay:YES];
 | 
					  [self setNeedsDisplay:YES];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -173,7 +181,9 @@ const CGFloat kMargin = 3;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (void)rightMouseUp:(NSEvent*)event {
 | 
					- (void)rightMouseUp:(NSEvent*)event {
 | 
				
			||||||
  trayIcon_->NotifyRightClicked([self getBoundsFromEvent:event]);
 | 
					  trayIcon_->NotifyRightClicked(
 | 
				
			||||||
 | 
					      [self getBoundsFromEvent:event],
 | 
				
			||||||
 | 
					      ui::EventFlagsFromModifiers([event modifierFlags]));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
 | 
					- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,12 +16,12 @@ namespace atom {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TrayIconObserver {
 | 
					class TrayIconObserver {
 | 
				
			||||||
 public:
 | 
					 public:
 | 
				
			||||||
  virtual void OnClicked(const gfx::Rect& bounds) {}
 | 
					  virtual void OnClicked(const gfx::Rect& bounds, int modifiers) {}
 | 
				
			||||||
  virtual void OnDoubleClicked(const gfx::Rect& bounds) {}
 | 
					  virtual void OnDoubleClicked(const gfx::Rect& bounds, int modifiers) {}
 | 
				
			||||||
  virtual void OnBalloonShow() {}
 | 
					  virtual void OnBalloonShow() {}
 | 
				
			||||||
  virtual void OnBalloonClicked() {}
 | 
					  virtual void OnBalloonClicked() {}
 | 
				
			||||||
  virtual void OnBalloonClosed() {}
 | 
					  virtual void OnBalloonClosed() {}
 | 
				
			||||||
  virtual void OnRightClicked(const gfx::Rect& bounds) {}
 | 
					  virtual void OnRightClicked(const gfx::Rect& bounds, int modifiers) {}
 | 
				
			||||||
  virtual void OnDropFiles(const std::vector<std::string>& files) {}
 | 
					  virtual void OnDropFiles(const std::vector<std::string>& files) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 protected:
 | 
					 protected:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,6 +53,7 @@ Creates a new tray icon associated with the `image`.
 | 
				
			||||||
  * `y` Integer
 | 
					  * `y` Integer
 | 
				
			||||||
  * `width` Integer
 | 
					  * `width` Integer
 | 
				
			||||||
  * `height` Integer
 | 
					  * `height` Integer
 | 
				
			||||||
 | 
					* [`modifiers`][modifiers] Integer - bitsum of keyboard modifiers and mouse keys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Emitted when the tray icon is clicked.
 | 
					Emitted when the tray icon is clicked.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,6 +67,7 @@ __Note:__ The `bounds` payload is only implemented on OS X and Windows 7 or newe
 | 
				
			||||||
  * `y` Integer
 | 
					  * `y` Integer
 | 
				
			||||||
  * `width` Integer
 | 
					  * `width` Integer
 | 
				
			||||||
  * `height` Integer
 | 
					  * `height` Integer
 | 
				
			||||||
 | 
					* [`modifiers`][modifiers] Integer - bitsum of keyboard modifiers and mouse keys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Emitted when the tray icon is right clicked.
 | 
					Emitted when the tray icon is right clicked.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -80,6 +82,7 @@ will be emitted if the tray icon has context menu.
 | 
				
			||||||
  * `y` Integer
 | 
					  * `y` Integer
 | 
				
			||||||
  * `width` Integer
 | 
					  * `width` Integer
 | 
				
			||||||
  * `height` Integer
 | 
					  * `height` Integer
 | 
				
			||||||
 | 
					* [`modifiers`][modifiers] Integer - bitsum of keyboard modifiers and mouse keys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Emitted when the tray icon is double clicked.
 | 
					Emitted when the tray icon is double clicked.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -178,3 +181,4 @@ The `position` is only available on Windows, and it is (0, 0) by default.
 | 
				
			||||||
Sets the context menu for this icon.
 | 
					Sets the context menu for this icon.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[event-emitter]: http://nodejs.org/api/events.html#events_class_events_eventemitter
 | 
					[event-emitter]: http://nodejs.org/api/events.html#events_class_events_eventemitter
 | 
				
			||||||
 | 
					[modifiers]: https://code.google.com/p/chromium/codesearch#chromium/src/ui/events/event_constants.h&l=77
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue