diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java index 8d09be59674013aada7b3c74b1c7d5b10000840d..1853cd95c394cf98164918f823c40ab01d57bffa 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java @@ -306,7 +306,7 @@ public class DataSourceRegistry implements DBPDataSourceRegistry this.dataSources.add(descriptor); } this.saveDataSources(); - this.fireDataSourceEvent(DBPEvent.Action.OBJECT_ADD, descriptor); + notifyDataSourceListeners(new DBPEvent(DBPEvent.Action.OBJECT_ADD, descriptor, true)); } public void removeDataSource(DBPDataSourceContainer dataSource) diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/navigator/database/DatabaseNavigatorTree.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/navigator/database/DatabaseNavigatorTree.java index 388579971dc0db6fa4a7cea192a8a85c63ce18ad..c06e3caa7471bd414c21c43f7b387cdc83a340a4 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/navigator/database/DatabaseNavigatorTree.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/navigator/database/DatabaseNavigatorTree.java @@ -177,8 +177,9 @@ public class DatabaseNavigatorTree extends Composite implements INavigatorListen { switch (event.getAction()) { case ADD: - case REMOVE: - final DBNNode parentNode = event.getNode().getParentNode(); + case REMOVE: { + final DBNNode node = event.getNode(); + final DBNNode parentNode = node.getParentNode(); if (parentNode != null) { DBeaverUI.syncExec(new Runnable() { @Override @@ -186,12 +187,17 @@ public class DatabaseNavigatorTree extends Composite implements INavigatorListen if (!treeViewer.getControl().isDisposed()) { if (!parentNode.isDisposed()) { treeViewer.refresh(getViewerObject(parentNode)); + if (event.getNodeChange() == DBNEvent.NodeChange.SELECT) { + treeViewer.reveal(node); + treeViewer.setSelection(new StructuredSelection(node)); + } } } } }); } break; + } case UPDATE: DBeaverUI.syncExec(new Runnable() { @Override diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNEvent.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNEvent.java index c52116c6e8afb1e27c300ec6f29c29e599f46646..bb3c5ce8aabe1dad8caab30ab418e5a7619c081a 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNEvent.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNEvent.java @@ -35,6 +35,7 @@ public class DBNEvent { LOAD, UNLOAD, REFRESH, + SELECT, STRUCT_REFRESH, LOCK, UNLOCK, diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProjectDatabases.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProjectDatabases.java index 4f493f4b91b7ab675f590e3c832ebd901c39a557..c5df462ff5c78ee1eec0222b9d7a75333cc5ed9c 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProjectDatabases.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProjectDatabases.java @@ -51,7 +51,7 @@ public class DBNProjectDatabases extends DBNNode implements DBNContainer, DBPEve List projectDataSources = this.dataSourceRegistry.getDataSources(); for (DBPDataSourceContainer ds : projectDataSources) { - addDataSource(ds, false); + addDataSource(ds, false, false); } } @@ -205,13 +205,17 @@ public class DBNProjectDatabases extends DBNNode implements DBNContainer, DBPEve return null; } - private DBNDataSource addDataSource(DBPDataSourceContainer descriptor, boolean reflect) + private DBNDataSource addDataSource(DBPDataSourceContainer descriptor, boolean reflect, boolean reveal) { DBNDataSource newNode = new DBNDataSource(this, descriptor); dataSources.add(newNode); children = null; if (reflect) { - getModel().fireNodeEvent(new DBNEvent(this, DBNEvent.Action.ADD, newNode)); + getModel().fireNodeEvent(new DBNEvent( + this, + DBNEvent.Action.ADD, + reveal ? DBNEvent.NodeChange.SELECT : DBNEvent.NodeChange.REFRESH, + newNode)); } return newNode; } @@ -240,7 +244,7 @@ public class DBNProjectDatabases extends DBNNode implements DBNContainer, DBPEve switch (event.getAction()) { case OBJECT_ADD: if (event.getObject() instanceof DBPDataSourceContainer) { - addDataSource((DBPDataSourceContainer) event.getObject(), true); + addDataSource((DBPDataSourceContainer) event.getObject(), true, event.getEnabled() != null && event.getEnabled()); } else if (model.getNodeByObject(event.getObject()) == null) { DBNDatabaseNode parentNode = model.getParentNode(event.getObject()); boolean parentFound = (parentNode != null);