/**
* Queues a refresh, redrawing the selection on the next opportunity.
+ * @param isNewSelection Whether the selection should be registered as a new
+ * selection on Linux.
*/
- public refresh(fromMouseEvent?: boolean): void {
+ public refresh(isNewSelection?: boolean): void {
// Queue the refresh for the renderer
if (!this._refreshAnimationFrame) {
this._refreshAnimationFrame = window.requestAnimationFrame(() => this._refresh());
// If the platform is Linux and the refresh call comes from a mouse event,
// we need to update the selection for middle click to paste selection.
- if (Browser.isLinux && fromMouseEvent) {
+ if (Browser.isLinux && isNewSelection) {
const selectionText = this.selectionText;
if (selectionText.length) {
this.emit('newselection', this.selectionText);
}
/**
- * Bind to right-click event and allow right-click copy and paste.
- * @param ev The original right click event to be handled
- * @param term The terminal on which to apply the handled paste event
- * @param selectionManager The terminal's selection manager.
+ * Moves the textarea under the mouse cursor and focuses it.
+ * @param ev The original right click event to be handled.
+ * @param textarea The terminal's textarea.
*/
-export function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextAreaElement, selectionManager: ISelectionManager) {
+export function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextAreaElement) {
// Bring textarea at the cursor position
textarea.style.position = 'fixed';
textarea.style.width = '20px';
textarea.style.top = (ev.clientY - 10) + 'px';
textarea.style.zIndex = '1000';
- // Get textarea ready to copy from the context menu
- textarea.value = selectionManager.selectionText;
textarea.focus();
- textarea.select();
// Reset the terminal textarea's styling
setTimeout(function () {
textarea.style.zIndex = null;
}, 4);
}
+
+/**
+ * Bind to right-click event and allow right-click copy and paste.
+ * @param ev The original right click event to be handled.
+ * @param textarea The terminal's textarea.
+ * @param selectionManager The terminal's selection manager.
+ */
+export function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, selectionManager: ISelectionManager) {
+ moveTextAreaUnderMouseCursor(ev, textarea);
+
+ // Get textarea ready to copy from the context menu
+ textarea.value = selectionManager.selectionText;
+ textarea.select();
+}
import { CompositionHelper } from './CompositionHelper';
import { EventEmitter } from './EventEmitter';
import { Viewport } from './Viewport';
-import { moveTextAreaUnderMouseCursor, pasteHandler, copyHandler } from './handlers/Clipboard';
+import { rightClickHandler, moveTextAreaUnderMouseCursor, pasteHandler, copyHandler } from './handlers/Clipboard';
import { CircularList } from './utils/CircularList';
import { C0 } from './EscapeSequences';
import { InputHandler } from './InputHandler';
if (term.browser.isFirefox) {
on(this.element, 'mousedown', event => {
if (ev.button == 2) {
- moveTextAreaUnderMouseCursor(event, this.textarea, this.selectionManager);
+ rightClickHandler(event, this.textarea, this.selectionManager);
}
});
} else {
on(this.element, 'contextmenu', event => {
- moveTextAreaUnderMouseCursor(event, this.textarea, this.selectionManager);
+ rightClickHandler(event, this.textarea, this.selectionManager);
});
}