From 76104edeca3b8ba37d4a24903fa1e0193dad56c2 Mon Sep 17 00:00:00 2001 From: Aaron Raimist Date: Tue, 24 Mar 2020 21:35:17 -0500 Subject: [PATCH 1/2] Mark room as read when escape is pressed Signed-off-by: Aaron Raimist --- src/components/structures/RoomView.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 5fd5f42f78..9405a26ab2 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -560,6 +560,12 @@ export default createReactClass({ handled = true; } break; + + case Key.ESCAPE: + this._messagePanel.forgetReadMarker(); + this.jumpToLiveTimeline(); + handled = true; + break; } if (handled) { From 69382ff8e59bc01f9ce10daaedf240a02e20fc8b Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 14 Apr 2020 15:24:41 +0100 Subject: [PATCH 2/2] Fix handler to use react bubbling rather than a native global onKeyDown Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/RoomView.js | 32 +++++++++++++++++++++------ 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 9405a26ab2..6454136164 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -422,7 +422,7 @@ export default createReactClass({ } this.onResize(); - document.addEventListener("keydown", this.onKeyDown); + document.addEventListener("keydown", this.onNativeKeyDown); }, shouldComponentUpdate: function(nextProps, nextState) { @@ -500,7 +500,7 @@ export default createReactClass({ this.props.resizeNotifier.removeListener("middlePanelResized", this.onResize); } - document.removeEventListener("keydown", this.onKeyDown); + document.removeEventListener("keydown", this.onNativeKeyDown); // Remove RoomStore listener if (this._roomStoreToken) { @@ -542,7 +542,8 @@ export default createReactClass({ } }, - onKeyDown: function(ev) { + // we register global shortcuts here, they *must not conflict* with local shortcuts elsewhere or both will fire + onNativeKeyDown: function(ev) { let handled = false; const ctrlCmdOnly = isOnlyCtrlOrCmdKeyEvent(ev); @@ -560,11 +561,24 @@ export default createReactClass({ handled = true; } break; + } + if (handled) { + ev.stopPropagation(); + ev.preventDefault(); + } + }, + + onReactKeyDown: function(ev) { + let handled = false; + + switch (ev.key) { case Key.ESCAPE: - this._messagePanel.forgetReadMarker(); - this.jumpToLiveTimeline(); - handled = true; + if (!ev.altKey && !ev.ctrlKey && !ev.shiftKey && !ev.metaKey) { + this._messagePanel.forgetReadMarker(); + this.jumpToLiveTimeline(); + handled = true; + } break; } @@ -2030,9 +2044,13 @@ export default createReactClass({ mx_RoomView_timeline_rr_enabled: this.state.showReadReceipts, }); + const mainClasses = classNames("mx_RoomView", { + mx_RoomView_inCall: inCall, + }); + return ( -
+