diff --git a/ts3-client/core/src/main/java/com/ts3client/net/TeamspeakConnection.java b/ts3-client/core/src/main/java/com/ts3client/net/TeamspeakConnection.java index e73cc43..9a4d3d4 100644 --- a/ts3-client/core/src/main/java/com/ts3client/net/TeamspeakConnection.java +++ b/ts3-client/core/src/main/java/com/ts3client/net/TeamspeakConnection.java @@ -338,6 +338,8 @@ public final class TeamspeakConnection implements TS3Listener { } catch (Exception e) { ui.onStatus("Limited subscription: " + rootMessage(e)); } + // The name comes with initserver; servergetvariables never reports it. + model.setServerName(client.getServerName()); try { for (Channel ch : client.listChannels()) { model.putChannel(ch.getId(), ch.getName(), ch.getParentChannelId(), ch.getOrder()); diff --git a/ts3-client/swing/src/main/java/com/ts3client/ui/ServerTreePanel.java b/ts3-client/swing/src/main/java/com/ts3client/ui/ServerTreePanel.java index 224501a..8b89d2f 100644 --- a/ts3-client/swing/src/main/java/com/ts3client/ui/ServerTreePanel.java +++ b/ts3-client/swing/src/main/java/com/ts3client/ui/ServerTreePanel.java @@ -14,6 +14,7 @@ import javax.swing.JTree; import javax.swing.JViewport; import javax.swing.SwingUtilities; import javax.swing.TransferHandler; +import javax.swing.plaf.basic.BasicTreeUI; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.DefaultTreeCellRenderer; @@ -97,7 +98,15 @@ public final class ServerTreePanel extends JScrollPane { root.setUserObject("Not connected"); this.tree = new DropIndicatorTree(treeModel); tree.setRootVisible(true); - tree.setShowsRootHandles(true); + // The server node is the only top-level row and always stays open, so it gets + // no expand control. Nesting is tightened too: horizontal space in this view + // is scarce and channel names are long. + tree.setShowsRootHandles(false); + if (tree.getUI() instanceof BasicTreeUI) { + BasicTreeUI ui = (BasicTreeUI) tree.getUI(); + ui.setLeftChildIndent(4); + ui.setRightChildIndent(10); + } tree.setRowHeight(20); tree.setBackground(Theme.TREE_BG); tree.setFont(Theme.UI_FONT); @@ -437,6 +446,13 @@ public final class ServerTreePanel extends JScrollPane { super(model); } + /** Keeps the server row permanently open; collapsing it would hide everything. */ + @Override + public void setExpandedState(TreePath path, boolean state) { + if (!state && path.getPathCount() == 1) return; + super.setExpandedState(path, state); + } + /** * Widens every repaint request to the full visible width. Swing only asks for * the row rectangle, which stops short of the right-aligned icon strip and would diff --git a/ts3j b/ts3j index dce4e68..0e5724b 160000 --- a/ts3j +++ b/ts3j @@ -1 +1 @@ -Subproject commit dce4e681500c85efdf9b9f680da8e31c19bf2d08 +Subproject commit 0e5724b877195afdca34810fa299a00f22db28e6