Fix issues with the controls disappearing

Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
pull/21833/head
Šimon Brandner 2021-07-25 18:11:29 +02:00
parent 1754602613
commit 3ef20174f3
No known key found for this signature in database
GPG Key ID: 55C211A1226CB17D
2 changed files with 24 additions and 36 deletions

View File

@ -313,7 +313,6 @@ limitations under the License.
display: flex; display: flex;
justify-content: center; justify-content: center;
bottom: 5px; bottom: 5px;
width: 100%;
opacity: 1; opacity: 1;
transition: opacity 0.5s; transition: opacity 0.5s;
z-index: 200; // To be above _all_ feeds z-index: 200; // To be above _all_ feeds

View File

@ -67,6 +67,7 @@ interface IState {
screensharing: boolean; screensharing: boolean;
callState: CallState; callState: CallState;
controlsVisible: boolean; controlsVisible: boolean;
hoveringControls: boolean;
showMoreMenu: boolean; showMoreMenu: boolean;
showDialpad: boolean; showDialpad: boolean;
primaryFeed: CallFeed; primaryFeed: CallFeed;
@ -128,6 +129,7 @@ export default class CallView extends React.Component<IProps, IState> {
screensharing: this.props.call.isScreensharing(), screensharing: this.props.call.isScreensharing(),
callState: this.props.call.state, callState: this.props.call.state,
controlsVisible: true, controlsVisible: true,
hoveringControls: false,
showMoreMenu: false, showMoreMenu: false,
showDialpad: false, showDialpad: false,
primaryFeed: primary, primaryFeed: primary,
@ -244,6 +246,7 @@ export default class CallView extends React.Component<IProps, IState> {
}; };
private onControlsHideTimer = () => { private onControlsHideTimer = () => {
if (this.state.hoveringControls || this.state.showDialpad || this.state.showMoreMenu) return;
this.controlsHideTimer = null; this.controlsHideTimer = null;
this.setState({ this.setState({
controlsVisible: false, controlsVisible: false,
@ -293,24 +296,10 @@ export default class CallView extends React.Component<IProps, IState> {
private onDialpadClick = (): void => { private onDialpadClick = (): void => {
if (!this.state.showDialpad) { if (!this.state.showDialpad) {
if (this.controlsHideTimer) { this.setState({ showDialpad: true });
clearTimeout(this.controlsHideTimer); this.showControls();
this.controlsHideTimer = null;
}
this.setState({
showDialpad: true,
controlsVisible: true,
});
} else { } else {
if (this.controlsHideTimer !== null) { this.setState({ showDialpad: false });
clearTimeout(this.controlsHideTimer);
}
this.controlsHideTimer = window.setTimeout(this.onControlsHideTimer, CONTROLS_HIDE_DELAY);
this.setState({
showDialpad: false,
});
} }
}; };
@ -345,29 +334,16 @@ export default class CallView extends React.Component<IProps, IState> {
}; };
private onMoreClick = (): void => { private onMoreClick = (): void => {
if (this.controlsHideTimer) { this.setState({ showMoreMenu: true });
clearTimeout(this.controlsHideTimer); this.showControls();
this.controlsHideTimer = null;
}
this.setState({
showMoreMenu: true,
controlsVisible: true,
});
}; };
private closeDialpad = (): void => { private closeDialpad = (): void => {
this.setState({ this.setState({ showDialpad: false });
showDialpad: false,
});
this.controlsHideTimer = window.setTimeout(this.onControlsHideTimer, CONTROLS_HIDE_DELAY);
}; };
private closeContextMenu = (): void => { private closeContextMenu = (): void => {
this.setState({ this.setState({ showMoreMenu: false });
showMoreMenu: false,
});
this.controlsHideTimer = window.setTimeout(this.onControlsHideTimer, CONTROLS_HIDE_DELAY);
}; };
// we register global shortcuts here, they *must not conflict* with local shortcuts elsewhere or both will fire // 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<IProps, IState> {
} }
}; };
private onCallControlsMouseEnter = (): void => {
this.setState({ hoveringControls: true });
this.showControls();
};
private onCallControlsMouseLeave = (): void => {
this.setState({ hoveringControls: false });
};
private onRoomAvatarClick = (): void => { private onRoomAvatarClick = (): void => {
const userFacingRoomId = CallHandler.sharedInstance().roomIdForCall(this.props.call); const userFacingRoomId = CallHandler.sharedInstance().roomIdForCall(this.props.call);
dis.dispatch({ dis.dispatch({
@ -561,7 +546,11 @@ export default class CallView extends React.Component<IProps, IState> {
} }
return ( return (
<div className={callControlsClasses}> <div
className={callControlsClasses}
onMouseEnter={this.onCallControlsMouseEnter}
onMouseLeave={this.onCallControlsMouseLeave}
>
{ dialpadButton } { dialpadButton }
<AccessibleButton <AccessibleButton
className={micClasses} className={micClasses}