From 3ef20174f30933f4333e0229a106f40a57dac6ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Sun, 25 Jul 2021 18:11:29 +0200 Subject: [PATCH] Fix issues with the controls disappearing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- res/css/views/voip/_CallView.scss | 1 - src/components/views/voip/CallView.tsx | 59 +++++++++++--------------- 2 files changed, 24 insertions(+), 36 deletions(-) diff --git a/res/css/views/voip/_CallView.scss b/res/css/views/voip/_CallView.scss index 2bb5b8ec3f..104e2993d8 100644 --- a/res/css/views/voip/_CallView.scss +++ b/res/css/views/voip/_CallView.scss @@ -313,7 +313,6 @@ limitations under the License. display: flex; justify-content: center; bottom: 5px; - width: 100%; opacity: 1; transition: opacity 0.5s; z-index: 200; // To be above _all_ feeds diff --git a/src/components/views/voip/CallView.tsx b/src/components/views/voip/CallView.tsx index 80db71d31f..14025ce3f0 100644 --- a/src/components/views/voip/CallView.tsx +++ b/src/components/views/voip/CallView.tsx @@ -67,6 +67,7 @@ interface IState { screensharing: boolean; callState: CallState; controlsVisible: boolean; + hoveringControls: boolean; showMoreMenu: boolean; showDialpad: boolean; primaryFeed: CallFeed; @@ -128,6 +129,7 @@ export default class CallView extends React.Component { screensharing: this.props.call.isScreensharing(), callState: this.props.call.state, controlsVisible: true, + hoveringControls: false, showMoreMenu: false, showDialpad: false, primaryFeed: primary, @@ -244,6 +246,7 @@ export default class CallView extends React.Component { }; private onControlsHideTimer = () => { + if (this.state.hoveringControls || this.state.showDialpad || this.state.showMoreMenu) return; this.controlsHideTimer = null; this.setState({ controlsVisible: false, @@ -293,24 +296,10 @@ export default class CallView extends React.Component { private onDialpadClick = (): void => { if (!this.state.showDialpad) { - if (this.controlsHideTimer) { - clearTimeout(this.controlsHideTimer); - this.controlsHideTimer = null; - } - - this.setState({ - showDialpad: true, - controlsVisible: true, - }); + this.setState({ showDialpad: true }); + this.showControls(); } else { - if (this.controlsHideTimer !== null) { - clearTimeout(this.controlsHideTimer); - } - this.controlsHideTimer = window.setTimeout(this.onControlsHideTimer, CONTROLS_HIDE_DELAY); - - this.setState({ - showDialpad: false, - }); + this.setState({ showDialpad: false }); } }; @@ -345,29 +334,16 @@ export default class CallView extends React.Component { }; private onMoreClick = (): void => { - if (this.controlsHideTimer) { - clearTimeout(this.controlsHideTimer); - this.controlsHideTimer = null; - } - - this.setState({ - showMoreMenu: true, - controlsVisible: true, - }); + this.setState({ showMoreMenu: true }); + this.showControls(); }; private closeDialpad = (): void => { - this.setState({ - showDialpad: false, - }); - this.controlsHideTimer = window.setTimeout(this.onControlsHideTimer, CONTROLS_HIDE_DELAY); + this.setState({ showDialpad: false }); }; private closeContextMenu = (): void => { - this.setState({ - showMoreMenu: false, - }); - this.controlsHideTimer = window.setTimeout(this.onControlsHideTimer, CONTROLS_HIDE_DELAY); + this.setState({ showMoreMenu: false }); }; // we register global shortcuts here, they *must not conflict* with local shortcuts elsewhere or both will fire @@ -403,6 +379,15 @@ export default class CallView extends React.Component { } }; + private onCallControlsMouseEnter = (): void => { + this.setState({ hoveringControls: true }); + this.showControls(); + }; + + private onCallControlsMouseLeave = (): void => { + this.setState({ hoveringControls: false }); + }; + private onRoomAvatarClick = (): void => { const userFacingRoomId = CallHandler.sharedInstance().roomIdForCall(this.props.call); dis.dispatch({ @@ -561,7 +546,11 @@ export default class CallView extends React.Component { } return ( -
+
{ dialpadButton }