Tray: Add drag-end and drop events
authorNishanth Shanmugham <nishanth.gerrard@gmail.com>
Tue, 10 Nov 2015 16:02:50 +0000 (10:02 -0600)
committerNishanth Shanmugham <nishanth.gerrard@gmail.com>
Tue, 10 Nov 2015 16:02:50 +0000 (10:02 -0600)
atom/browser/api/atom_api_tray.cc
atom/browser/api/atom_api_tray.h
atom/browser/ui/tray_icon.cc
atom/browser/ui/tray_icon.h
atom/browser/ui/tray_icon_cocoa.mm
atom/browser/ui/tray_icon_observer.h

index 00b8eda..0c24240 100644 (file)
@@ -74,6 +74,10 @@ void Tray::OnBalloonClosed() {
   Emit("balloon-closed");
 }
 
+void Tray::OnDrop() {
+  Emit("drop");
+}
+
 void Tray::OnDropFiles(const std::vector<std::string>& files) {
   Emit("drop-files", files);
 }
@@ -86,6 +90,10 @@ void Tray::OnDragExited() {
   Emit("drag-leave");
 }
 
+void Tray::OnDragEnded() {
+  Emit("drag-end");
+}
+
 bool Tray::IsDestroyed() const {
   return !tray_icon_;
 }
index b26796b..d8d6dce 100644 (file)
@@ -48,9 +48,11 @@ class Tray : public mate::TrackableObject<Tray>,
   void OnBalloonShow() override;
   void OnBalloonClicked() override;
   void OnBalloonClosed() override;
+  void OnDrop() override;
   void OnDropFiles(const std::vector<std::string>& files) override;
   void OnDragEntered() override;
   void OnDragExited() override;
+  void OnDragEnded() override;
 
   // mate::Wrappable:
   bool IsDestroyed() const override;
index bc69b6e..1696aab 100644 (file)
@@ -55,6 +55,10 @@ void TrayIcon::NotifyRightClicked(const gfx::Rect& bounds, int modifiers) {
                     OnRightClicked(bounds, modifiers));
 }
 
+void TrayIcon::NotifyDrop() {
+  FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnDrop());
+}
+
 void TrayIcon::NotifyDropFiles(const std::vector<std::string>& files) {
   FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnDropFiles(files));
 }
@@ -67,4 +71,8 @@ void TrayIcon::NotifyDragExited() {
   FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnDragExited());
 }
 
+void TrayIcon::NotifyDragEnded() {
+  FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnDragEnded());
+}
+
 }  // namespace atom
index b63d3c4..bc29acd 100644 (file)
@@ -61,9 +61,11 @@ class TrayIcon {
   void NotifyBalloonClosed();
   void NotifyRightClicked(const gfx::Rect& bounds = gfx::Rect(),
                           int modifiers = 0);
+  void NotifyDrop();
   void NotifyDropFiles(const std::vector<std::string>& files);
   void NotifyDragEntered();
   void NotifyDragExited();
+  void NotifyDragEnded();
 
  protected:
   TrayIcon();
index 40505a6..c373e94 100644 (file)
@@ -262,6 +262,15 @@ const CGFloat kVerticalTitleMargin = 2;
   trayIcon_->NotifyDragExited();
 }
 
+- (void)draggingEnded:(id <NSDraggingInfo>)sender {
+  trayIcon_->NotifyDragEnded();
+}
+
+- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender {
+  trayIcon_->NotifyDrop();
+  return YES;
+}
+
 - (BOOL)performDragOperation:(id <NSDraggingInfo>)sender {
   NSPasteboard* pboard = [sender draggingPasteboard];
 
index e9a8bd3..ed421ed 100644 (file)
@@ -22,9 +22,11 @@ class TrayIconObserver {
   virtual void OnBalloonClicked() {}
   virtual void OnBalloonClosed() {}
   virtual void OnRightClicked(const gfx::Rect& bounds, int modifiers) {}
+  virtual void OnDrop() {}
   virtual void OnDropFiles(const std::vector<std::string>& files) {}
   virtual void OnDragEntered() {}
   virtual void OnDragExited() {}
+  virtual void OnDragEnded() {}
 
  protected:
   virtual ~TrayIconObserver() {}