# HG changeset patch # User Stefan Vogel # Date 1281088713 -7200 # Node ID c967aa65e09a5c867cf9220b357c2c43b6d17699 # Parent 11e3305c4a0c760b2c29f75b6a44f241ab201dfb Move multiple app support and delayed DLL stuff to StandaloneStartup Load Patches after all DLLs have been loaded. diff -r 11e3305c4a0c -r c967aa65e09a StandaloneStartup.st --- a/StandaloneStartup.st Thu Aug 05 17:40:40 2010 +0200 +++ b/StandaloneStartup.st Fri Aug 06 11:58:33 2010 +0200 @@ -163,24 +163,10 @@ self subclassResponsibility ! -checkForAndExitIfAnotherApplicationInstanceIsRunning - "if another instance of this application is running, - send it an openFile command for my file-argument, and exit. - (i.e. to let the already running application open up another window)." - - |shouldExit| +shouldReuseRunningApplication + "answer true, if an already running application instance should be re-used" - self isAnotherApplicationInstanceRunning ifTrue:[ - shouldExit := self processStartupOfASecondInstance. - shouldExit ifTrue:[ - self releaseApplicationMutex. - Smalltalk isStandAloneApp ifTrue:[ - Smalltalk exit. - ] - ]. - ]. - - "Modified: / 03-08-2010 / 17:27:25 / cg" + ^ false ! ! !StandaloneStartup class methodsFor:'multiple applications support-helpers'! @@ -216,6 +202,26 @@ ^ applicationEntry ! +checkForAndExitIfAnotherApplicationInstanceIsRunning + "if another instance of this application is running, + send it an openFile command for my file-argument, and exit. + (i.e. to let the already running application open up another window)." + + |shouldExit| + + self isAnotherApplicationInstanceRunning ifTrue:[ + shouldExit := self processStartupOfASecondInstance. + shouldExit ifTrue:[ + self releaseApplicationMutex. + Smalltalk isStandAloneApp ifTrue:[ + Smalltalk exit. + ] + ]. + ]. + + "Modified: / 03-08-2010 / 17:27:25 / cg" +! + confirmOpenNewApplicationInstance ^ Dialog confirm: ('Continue opening a new instance of %1 or exit?' bindWith:self applicationName) @@ -287,7 +293,7 @@ |currentIDStringFromRegistry currentIDFromRegistry fileArg commands aWindowId setForegroundWindowSucceeded| - commands := Smalltalk commandLineArguments. + commands := CommandLineArguments. currentIDStringFromRegistry := self getCurrentIDFromRegistry. @@ -455,6 +461,49 @@ "Modified: / 19-09-2006 / 16:30:58 / cg" ! +loadRemainingClassLibraries + "To speedup startup, we did not load all dll's (only a subset of non-GUI dll's is present). + Now, load all skipped libs (the ones marked with '*') from modules.stx." + + |modulesFile dllDirectory dlls| + + OperatingSystem isMSWINDOWSlike ifFalse:[^ self ]. + + self verboseInfo:'loadRemainingClassLibraries'. + modulesFile := self stxModulesFilename. + dllDirectory := modulesFile directory. + + dlls := OrderedCollection new. + + modulesFile readingLinesDo:[:eachModulesLine| + |basename dllFile| + + basename := eachModulesLine withoutSeparators. + + (basename notEmpty and:[basename first == $*]) ifTrue:[ + basename := (basename copyFrom:2) withoutSeparators, '.dll'. + dllFile := dllDirectory construct:basename. + + dllFile exists ifTrue:[ +"/ self verboseInfo:('loading: ', basename). + Smalltalk showSplashMessage:('loading ', basename). + dlls add:dllFile. + ] ifFalse:[ + self verboseInfo:( '**** cannot resolve: ', basename). + ]. + ]. + ]. + + dlls notEmpty ifTrue:[ + ObjectFileLoader loadObjectFiles:dlls. + Display notNil ifTrue:[ + "New view classes may have been loaded - have to update their styles" + self verboseInfo:'update style caches of loaded dlls'. + SimpleView updateAllStyleCaches. + ]. + ]. +! + setupSmalltalkFromArguments:argv "handle common command line arguments: --help ............... print usage and exit @@ -601,12 +650,33 @@ Verbose == true ifTrue:[ex suspendedContext fullPrintAllLevels:10]. ex reject. ] do:[ + |idx| + self verboseInfo:('starting...'). CommandLineArguments := (self additionalArgumentsFromRegistry) , Smalltalk commandLineArguments. - self verboseInfo:('starting...'). self verboseInfo:('args: ', CommandLineArguments asStringCollection asString). + "--noRemote - do not reuse an existing application instance, + but run in a separate process" + idx := CommandLineArguments indexOfAny:#('--noRemote'). + idx == 0 ifTrue:[ + self shouldReuseRunningApplication ifTrue:[ + "Multiple Application support: + if another expecco is running, ask it to open another window for me. + If that is the case, the following function will not return, but instead exit." + self checkForAndExitIfAnotherApplicationInstanceIsRunning. + ]. + ] ifFalse:[ + CommandLineArguments removeAtIndex:idx. + Verbose := true. + ]. + + "/ Arrive here, if no other application is running. + "/ to speedup startup, we did not load all dll's (only a subset of non-GUI dll's is present). + "/ now, load all skipped libs from modules.stx. + self loadRemainingClassLibraries. + Smalltalk isStandAloneApp ifTrue:[ self loadPatches. self verboseInfo:('setup Smalltalk'). @@ -622,6 +692,20 @@ Smalltalk startStartBlockProcess ! +stxModulesFilename + "answer the Filename of modules.stx" + + |file| + + file := 'modules.stx' asFilename. + file exists ifTrue:[^ file]. + + file := OperatingSystem pathOfSTXExecutable asFilename directory construct:'modules.stx'. + file exists ifTrue:[^ file]. + + self error:'cannot find: modules.stx'. +! + usage Stderr nextPutLine:'usage:'. Stderr nextPutLine:' ',self applicationName,' [options...]'. @@ -629,6 +713,9 @@ Stderr nextPutLine:' --help .................. output this message'. Stderr nextPutLine:' --verbose ............... verbose startup'. Stderr nextPutLine:' --noBanner .............. no splash screen'. + self shouldReuseRunningApplication ifTrue:[ + Stderr nextPutLine:' --noRemote .............. start as an own application process and do not reuse a running instance'. + ]. self allowScriptingOption ifTrue:[ Stderr nextPutLine:' --scripting portNr ...... enable scripting via port (or stdin/stdOut, if 0)'. ]. @@ -711,11 +798,11 @@ !StandaloneStartup class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/libbasic/StandaloneStartup.st,v 1.48 2010-08-05 13:16:45 stefan Exp $' + ^ '$Header: /cvs/stx/stx/libbasic/StandaloneStartup.st,v 1.49 2010-08-06 09:58:33 stefan Exp $' ! version_CVS - ^ '$Header: /cvs/stx/stx/libbasic/StandaloneStartup.st,v 1.48 2010-08-05 13:16:45 stefan Exp $' + ^ '$Header: /cvs/stx/stx/libbasic/StandaloneStartup.st,v 1.49 2010-08-06 09:58:33 stefan Exp $' ! ! StandaloneStartup initialize!