Some minor fixes for the native client
This commit is contained in:
parent
4dc176cc1f
commit
5b83bd9b51
8 changed files with 36 additions and 32 deletions
|
@ -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) {
|
||||
|
|
|
@ -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() : {})
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
cursor: pointer;
|
||||
padding-left: 2px;
|
||||
margin-right: 5px;
|
||||
padding-right: 5px;
|
||||
|
||||
.server_type {
|
||||
flex-grow: 0;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue