@@ -5,9 +5,44 @@ import { AtelierAPI } from "../api";
55import { config } from "../extension" ;
66import { WorkspaceNode } from "./models/workspaceNode" ;
77
8+ // The vscode-objectscript.explorer.open command is not listed in settings.json as a contribution because it only gets invoked
9+ // from the user's click on an item in the ObjectScriptExplorerProvider tree.
10+ // It serves as a proxy for the vscode.open command, detecting two opens of the same item in quick succession
11+ // and treating the second of these as a non-preview open.
12+ export function registerExplorerOpen ( explorerProvider : ObjectScriptExplorerProvider ) : vscode . Disposable {
13+ return vscode . commands . registerCommand ( "vscode-objectscript.explorer.open" , async function ( uri : vscode . Uri ) {
14+ let usePreview = < boolean > vscode . workspace . getConfiguration ( "workbench.editor" ) . get ( "enablePreview" ) ;
15+
16+ if ( usePreview ) {
17+ usePreview = ! wasDoubleClick ( uri , explorerProvider ) ;
18+ }
19+
20+ await vscode . commands . executeCommand ( "vscode.open" , uri , { preview : usePreview } ) ;
21+ } ) ;
22+ }
23+
24+ // Return true if previously called with the same arguments within the past 0.5 seconds
25+ function wasDoubleClick ( uri : vscode . Uri , explorerProvider : ObjectScriptExplorerProvider ) : boolean {
26+ let result = false ;
27+ if ( explorerProvider . lastOpened ) {
28+ const isTheSameUri = explorerProvider . lastOpened . uri === uri ;
29+ const dateDiff = < number > ( < any > new Date ( ) - < any > explorerProvider . lastOpened . date ) ;
30+ result = isTheSameUri && dateDiff < 500 ;
31+ }
32+
33+ explorerProvider . lastOpened = {
34+ uri : uri ,
35+ date : new Date ( ) ,
36+ } ;
37+ return result ;
38+ }
839export class ObjectScriptExplorerProvider implements vscode . TreeDataProvider < NodeBase > {
940 public onDidChange ?: vscode . Event < vscode . Uri > ;
1041 public onDidChangeTreeData : vscode . Event < NodeBase > ;
42+
43+ // Use for detecting doubleclick
44+ public lastOpened : { uri : vscode . Uri ; date : Date } ;
45+
1146 private _onDidChangeTreeData : vscode . EventEmitter < NodeBase > ;
1247 private _showExtra4Workspace : { [ key : string ] : string [ ] } [ ] = [ ] ;
1348
0 commit comments