Some minor fixes for the native client

This commit is contained in:
WolverinDEV 2020-04-21 17:11:06 +02:00
parent 4dc176cc1f
commit 5b83bd9b51
8 changed files with 36 additions and 32 deletions

View file

@ -660,6 +660,8 @@ export class ConnectionHandler {
this.startConnection(server_address.host + ":" + server_address.port, profile, false, Object.assign(this.reconnect_properties(profile), {auto_reconnect_attempt: true}));
}, 5000);
}
this.serverConnection.updateConnectionState(ConnectionState.UNCONNECTED); /* Fix for the native client... */
}
cancel_reconnect(log_event: boolean) {

View file

@ -536,7 +536,7 @@ export class ChannelEntry extends ChannelTreeEntry<ChannelEvents> {
invalidPermission: !channelCreate,
callback: () => this.channelTree.spawnCreateChannel()
},
contextmenu.Entry.CLOSE(() => trigger_close ? on_close() : {})
contextmenu.Entry.CLOSE(() => trigger_close && on_close ? on_close() : {})
);
}

View file

@ -244,9 +244,9 @@ export class ChannelEntryView extends TreeEntry<ChannelEntryViewProperties, {}>
const collapsed_indicator = this.props.channel.child_channel_head || this.props.channel.clients(false).length > 0;
return <div className={this.classList(viewStyle.treeEntry, channelStyle.channelEntry, this.props.channel.isSelected() && viewStyle.selected)}
style={{ paddingLeft: this.props.depth * 16 + 2, top: this.props.offset }}
onMouseUp={e => this.onMouseUp(e as any)}
onMouseUp={e => this.onMouseUp(e)}
onDoubleClick={() => this.onDoubleClick()}
onContextMenu={e => this.onContextMenu(e as any)}
onContextMenu={e => this.onContextMenu(e)}
>
<UnreadMarker entry={this.props.channel} />
{collapsed_indicator && <ChannelCollapsedIndicator key={"collapsed-indicator"} onToggle={() => this.onCollapsedToggle()} collapsed={this.props.channel.collapsed} />}
@ -260,7 +260,7 @@ export class ChannelEntryView extends TreeEntry<ChannelEntryViewProperties, {}>
this.props.channel.collapsed = !this.props.channel.collapsed;
}
private onMouseUp(event: MouseEvent) {
private onMouseUp(event: React.MouseEvent) {
if(event.button !== 0) return; /* only left mouse clicks */
const channel = this.props.channel;
@ -279,7 +279,7 @@ export class ChannelEntryView extends TreeEntry<ChannelEntryViewProperties, {}>
channel.joinChannel();
}
private onContextMenu(event: MouseEvent) {
private onContextMenu(event: React.MouseEvent) {
if(settings.static(Settings.KEY_DISABLE_CONTEXT_MENU))
return;

View file

@ -322,7 +322,7 @@ class ClientNameEdit extends ReactComponentBase<ClientNameEditProps, {}> {
ref={this.ref_div}
dangerouslySetInnerHTML={{__html: DOMPurify.sanitize(this.props.initialName)}}
onBlur={e => this.onBlur()}
onKeyPress={e => this.onKeyPress(e as any)}
onKeyPress={e => this.onKeyPress(e)}
/>
}
@ -330,7 +330,7 @@ class ClientNameEdit extends ReactComponentBase<ClientNameEditProps, {}> {
this.props.editFinished(this.ref_div.current.textContent);
}
private onKeyPress(event: KeyboardEvent) {
private onKeyPress(event: React.KeyboardEvent) {
if(event.key === "Enter") {
event.preventDefault();
this.onBlur();
@ -364,8 +364,8 @@ export class ClientEntry extends TreeEntry<ClientEntryProperties, ClientEntrySta
<div className={this.classList(clientStyle.clientEntry, viewStyle.treeEntry, this.props.client.isSelected() && viewStyle.selected)}
style={{ paddingLeft: (this.props.depth * 16 + 2) + "px", top: this.props.offset }}
onDoubleClick={() => this.onDoubleClick()}
onMouseUp={e => this.onMouseUp(e as any)}
onContextMenu={e => this.onContextMenu(e as any)}
onMouseUp={e => this.onMouseUp(e)}
onContextMenu={e => this.onContextMenu(e)}
>
<UnreadMarker entry={this.props.client} />
<ClientSpeakIcon client={this.props.client} />
@ -403,7 +403,7 @@ export class ClientEntry extends TreeEntry<ClientEntryProperties, ClientEntrySta
this.setState({ rename: false });
}
private onMouseUp(event: MouseEvent) {
private onMouseUp(event: React.MouseEvent) {
if(event.button !== 0) return; /* only left mouse clicks */
const tree = this.props.client.channelTree;
if(tree.isClientMoveActive()) return;
@ -411,7 +411,7 @@ export class ClientEntry extends TreeEntry<ClientEntryProperties, ClientEntrySta
tree.events.fire("action_select_entries", { entries: [this.props.client], mode: "auto" });
}
private onContextMenu(event: MouseEvent) {
private onContextMenu(event: React.MouseEvent) {
if(settings.static(Settings.KEY_DISABLE_CONTEXT_MENU))
return;

View file

@ -7,7 +7,7 @@
cursor: pointer;
padding-left: 2px;
margin-right: 5px;
padding-right: 5px;
.server_type {
flex-grow: 0;

View file

@ -77,8 +77,8 @@ export class ServerEntry extends TreeEntry<ServerEntryProperties, ServerEntrySta
return <div className={this.classList(serverStyle.serverEntry, viewStyle.treeEntry, this.props.server.isSelected() && viewStyle.selected )}
style={{ top: this.props.offset }}
onMouseUp={e => this.onMouseUp(e as any)}
onContextMenu={e => this.onContextMenu(e as any)}
onMouseUp={e => this.onMouseUp(e)}
onContextMenu={e => this.onContextMenu(e)}
>
<UnreadMarker entry={this.props.server} />
<div className={"icon client-server_green " + serverStyle.server_type} />
@ -87,7 +87,7 @@ export class ServerEntry extends TreeEntry<ServerEntryProperties, ServerEntrySta
</div>
}
private onMouseUp(event: MouseEvent) {
private onMouseUp(event: React.MouseEvent) {
if(event.button !== 0) return; /* only left mouse clicks */
if(this.props.server.channelTree.isClientMoveActive()) return;
@ -97,7 +97,7 @@ export class ServerEntry extends TreeEntry<ServerEntryProperties, ServerEntrySta
});
}
private onContextMenu(event: MouseEvent) {
private onContextMenu(event: React.MouseEvent) {
if(settings.static(Settings.KEY_DISABLE_CONTEXT_MENU))
return;

View file

@ -165,7 +165,12 @@ export class ChannelTreeView extends ReactComponentBase<ChannelTreeViewPropertie
}
return (
<div className={viewStyle.channelTreeContainer} onScroll={() => this.onScroll()} ref={this.ref_container} onMouseDown={e => this.onMouseDown(e as any)} onMouseMove={e => this.onMouseMove(e as any)} >
<div
className={viewStyle.channelTreeContainer}
onScroll={() => this.onScroll()}
ref={this.ref_container}
onMouseDown={e => this.onMouseDown(e)}
onMouseMove={e => this.onMouseMove(e)} >
<div className={this.classList(viewStyle.channelTree, this.props.tree.isClientMoveActive() && viewStyle.move)} style={{height: (this.flat_tree.length * ChannelTreeView.EntryHeight) + "px"}}>
{elements}
</div>
@ -181,7 +186,7 @@ export class ChannelTreeView extends ReactComponentBase<ChannelTreeViewPropertie
this.flat_tree.push({
entry: entry,
rendered: <ChannelEntryView key={"channel-" + entry.channelId} channel={entry} offset={this.build_top_offset += ChannelTreeView.EntryHeight} depth={depth} ref={entry.view} />
rendered: <ChannelEntryView key={this.state.tree_version + "-channel-" + entry.channelId} channel={entry} offset={this.build_top_offset += ChannelTreeView.EntryHeight} depth={depth} ref={entry.view} />
});
if(entry.collapsed) return;
@ -191,7 +196,7 @@ export class ChannelTreeView extends ReactComponentBase<ChannelTreeViewPropertie
this.flat_tree.push(...clients.map(e => {
return {
entry: e,
rendered: <ClientEntryView key={"client-" + e.clientId()} client={e} offset={this.build_top_offset += ChannelTreeView.EntryHeight} depth={depth + 1} ref={e.view} />
rendered: <ClientEntryView key={this.state.tree_version + "-client-" + e.clientId()} client={e} offset={this.build_top_offset += ChannelTreeView.EntryHeight} depth={depth + 1} ref={e.view} />
};
}));
for (const channel of entry.children(false))
@ -214,7 +219,7 @@ export class ChannelTreeView extends ReactComponentBase<ChannelTreeViewPropertie
this.build_top_offset = -ChannelTreeView.EntryHeight; /* because of the += */
this.flat_tree = [{
entry: tree.server,
rendered: <ServerEntryView key={"server"} server={tree.server} offset={this.build_top_offset += ChannelTreeView.EntryHeight} ref={tree.server.view} />
rendered: <ServerEntryView key={this.state.tree_version + "-server"} server={tree.server} offset={this.build_top_offset += ChannelTreeView.EntryHeight} ref={tree.server.view} />
}];
for (const channel of tree.rootChannel())
@ -255,7 +260,7 @@ export class ChannelTreeView extends ReactComponentBase<ChannelTreeViewPropertie
});
}
private onMouseDown(e: MouseEvent) {
private onMouseDown(e: React.MouseEvent) {
if(e.button !== 0) return; /* left button only */
this.mouse_move.down = true;
@ -264,7 +269,7 @@ export class ChannelTreeView extends ReactComponentBase<ChannelTreeViewPropertie
this.registerDocumentMouseListener();
}
private onMouseMove(e: MouseEvent) {
private onMouseMove(e: React.MouseEvent) {
if(!this.mouse_move.down || this.mouse_move.fired) return;
if(Math.abs((this.mouse_move.x - e.pageX) * (this.mouse_move.y - e.pageY)) > (this.props.moveThreshold || 9)) {
this.mouse_move.fired = true;
@ -321,6 +326,6 @@ export class ChannelTreeView extends ReactComponentBase<ChannelTreeViewPropertie
return undefined;
const total_offset = container.scrollTop + pageY;
return this.flat_tree[Math.floor(total_offset / ChannelTreeView.EntryHeight)].entry;
return this.flat_tree[Math.floor(total_offset / ChannelTreeView.EntryHeight)]?.entry;
}
}

View file

@ -225,16 +225,13 @@ export class ChannelTree {
if(!settings.static(Settings.KEY_DISABLE_CONTEXT_MENU, false)) {
this._tag_container.on("contextmenu", (event) => {
if(event.isDefaultPrevented()) return;
for(const element of document.elementsFromPoint(event.pageX, event.pageY))
if(element.classList.contains("channelLine") || element.classList.contains("client"))
return;
event.preventDefault();
if(this.selection.is_multi_select())
this.open_multiselect_context_menu(this.selection.selected_entries, event.pageX, event.pageY);
else {
const entry = this.view.current?.getEntryFromPoint(event.pageX, event.pageY);
if(entry) {
if(this.selection.is_multi_select())
this.open_multiselect_context_menu(this.selection.selected_entries, event.pageX, event.pageY);
} else {
this.selection.clear_selection();
this.showContextMenu(event.pageX, event.pageY);
}