From 50576e59e3ab46639ce71782759982e2554e0a4c Mon Sep 17 00:00:00 2001 From: Ben Gotow Date: Thu, 29 Oct 2015 21:24:51 -0700 Subject: [PATCH] =?UTF-8?q?feat(contextual-menus):=20Basic=20cut/copy/past?= =?UTF-8?q?e=20for=20all=20inputs=E2=80=94#161?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/flux/stores/message-store.coffee | 2 ++ src/window-event-handler.coffee | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/flux/stores/message-store.coffee b/src/flux/stores/message-store.coffee index 214fc5da3..925278986 100644 --- a/src/flux/stores/message-store.coffee +++ b/src/flux/stores/message-store.coffee @@ -115,6 +115,8 @@ class MessageStore extends NylasStore @_fetchFromCache() _onFocusChanged: (change) => + return unless change.impactsCollection('thread') + # This implements a debounce that fires on the leading and trailing edge. # # If we haven't changed focus in the last 100ms, do it immediately. This means diff --git a/src/window-event-handler.coffee b/src/window-event-handler.coffee index 9c942ee80..58f8a383d 100644 --- a/src/window-event-handler.coffee +++ b/src/window-event-handler.coffee @@ -105,6 +105,8 @@ class WindowEventHandler @subscribe $(document), 'click', 'a', @openLink + @subscribe $(document), 'contextmenu', 'input', @openContextualMenuForInput + # Prevent form submits from changing the current window's URL @subscribe $(document), 'submit', 'form', (e) -> e.preventDefault() @@ -160,6 +162,30 @@ class WindowEventHandler return + openContextualMenuForInput: (event) -> + event.preventDefault() + hasSelectedText = event.target.selectionStart isnt event.target.selectionEnd + + remote = require('remote') + Menu = remote.require('menu') + MenuItem = remote.require('menu-item') + menu = new Menu() + menu.append(new MenuItem({ + label: 'Cut' + enabled: hasSelectedText + click: => document.execCommand('cut') + })) + menu.append(new MenuItem({ + label: 'Copy' + enabled: hasSelectedText + click: => document.execCommand('copy') + })) + menu.append(new MenuItem({ + label: 'Paste', + click: => document.execCommand('paste') + })) + menu.popup(remote.getCurrentWindow()) + eachTabIndexedElement: (callback) -> for element in $('[tabindex]') element = $(element)