Fix flickering

Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
This commit is contained in:
Šimon Brandner 2020-12-17 19:50:59 +01:00
parent dcb30b72b0
commit e70dee08d0

View file

@ -187,6 +187,7 @@ export interface IState {
rejecting?: boolean; rejecting?: boolean;
rejectError?: Error; rejectError?: Error;
hasPinnedWidgets?: boolean; hasPinnedWidgets?: boolean;
dragCounter: number;
} }
export default class RoomView extends React.Component<IProps, IState> { export default class RoomView extends React.Component<IProps, IState> {
@ -237,6 +238,7 @@ export default class RoomView extends React.Component<IProps, IState> {
canReply: false, canReply: false,
useIRCLayout: SettingsStore.getValue("useIRCLayout"), useIRCLayout: SettingsStore.getValue("useIRCLayout"),
matrixClientIsReady: this.context && this.context.isInitialSyncComplete(), matrixClientIsReady: this.context && this.context.isInitialSyncComplete(),
dragCounter: 0,
}; };
this.dispatcherRef = dis.register(this.onAction); this.dispatcherRef = dis.register(this.onAction);
@ -525,8 +527,8 @@ export default class RoomView extends React.Component<IProps, IState> {
if (!roomView.ondrop) { if (!roomView.ondrop) {
roomView.addEventListener('drop', this.onDrop); roomView.addEventListener('drop', this.onDrop);
roomView.addEventListener('dragover', this.onDragOver); roomView.addEventListener('dragover', this.onDragOver);
roomView.addEventListener('dragleave', this.onDragLeaveOrEnd); roomView.addEventListener('dragenter', this.onDragEnter);
roomView.addEventListener('dragend', this.onDragLeaveOrEnd); roomView.addEventListener('dragleave', this.onDragLeave);
} }
} }
@ -1108,6 +1110,31 @@ export default class RoomView extends React.Component<IProps, IState> {
this.updateTopUnreadMessagesBar(); this.updateTopUnreadMessagesBar();
}; };
private onDragEnter = ev => {
ev.stopPropagation();
ev.preventDefault();
this.setState({
dragCounter: this.state.dragCounter + 1,
draggingFile: true,
});
};
private onDragLeave = ev => {
ev.stopPropagation();
ev.preventDefault();
this.setState({
dragCounter: this.state.dragCounter - 1,
});
if (this.state.dragCounter == 0) {
this.setState({
draggingFile: false,
});
}
};
private onDragOver = ev => { private onDragOver = ev => {
ev.stopPropagation(); ev.stopPropagation();
ev.preventDefault(); ev.preventDefault();
@ -1115,7 +1142,6 @@ export default class RoomView extends React.Component<IProps, IState> {
ev.dataTransfer.dropEffect = 'none'; ev.dataTransfer.dropEffect = 'none';
if (ev.dataTransfer.types.includes("Files") || ev.dataTransfer.types.includes("application/x-moz-file")) { if (ev.dataTransfer.types.includes("Files") || ev.dataTransfer.types.includes("application/x-moz-file")) {
this.setState({ draggingFile: true });
ev.dataTransfer.dropEffect = 'copy'; ev.dataTransfer.dropEffect = 'copy';
} }
}; };
@ -1126,14 +1152,12 @@ export default class RoomView extends React.Component<IProps, IState> {
ContentMessages.sharedInstance().sendContentListToRoom( ContentMessages.sharedInstance().sendContentListToRoom(
ev.dataTransfer.files, this.state.room.roomId, this.context, ev.dataTransfer.files, this.state.room.roomId, this.context,
); );
this.setState({ draggingFile: false });
dis.fire(Action.FocusComposer); dis.fire(Action.FocusComposer);
};
private onDragLeaveOrEnd = ev => { this.setState({
ev.stopPropagation(); draggingFile: false,
ev.preventDefault(); dragCounter: this.state.dragCounter - 1,
this.setState({ draggingFile: false }); });
}; };
private injectSticker(url, info, text) { private injectSticker(url, info, text) {