From e4304ef4830a450b9fbaaa0bfd65c7cd7effb21d Mon Sep 17 00:00:00 2001 From: jules Date: Thu, 26 Jul 2007 10:54:47 +0000 Subject: [PATCH] --- .../application/juce_Application.cpp | 34 +++++++------------ .../application/juce_Application.h | 10 ++++-- .../keyboard/juce_KeyPressMappingSet.cpp | 27 ++++++++------- .../keyboard/juce_KeyPressMappingSet.h | 22 ++++++------ src/juce_core/threads/juce_Thread.cpp | 19 ++++++++--- 5 files changed, 58 insertions(+), 54 deletions(-) diff --git a/src/juce_appframework/application/juce_Application.cpp b/src/juce_appframework/application/juce_Application.cpp index f297853c45..d065b224f2 100644 --- a/src/juce_appframework/application/juce_Application.cpp +++ b/src/juce_appframework/application/juce_Application.cpp @@ -68,12 +68,12 @@ JUCEApplication::~JUCEApplication() { } -JUCEApplication* JUCEApplication::getInstance() +JUCEApplication* JUCEApplication::getInstance() throw() { return appInstance; } -bool JUCEApplication::isInitialising() const +bool JUCEApplication::isInitialising() const throw() { return stillInitialising; } @@ -155,20 +155,6 @@ bool JUCEApplication::perform (const InvocationInfo& info) } //============================================================================== -// used as a listener object later on.. -class NewAppListener : public ActionListener -{ -public: - void actionListenerCallback (const String& message) - { - if (message.startsWith (appInstance->getApplicationName() + T("/"))) - { - appInstance->anotherInstanceStarted (message.fromFirstOccurrenceOf (T("/"), - false, false)); - } - } -}; - int JUCEApplication::main (String& commandLine, JUCEApplication* const app) { jassert (appInstance == 0); @@ -185,8 +171,7 @@ int JUCEApplication::main (String& commandLine, JUCEApplication* const app) if (! appLock->enter(0)) { - MessageManager::broadcastMessage (app->getApplicationName() - + T("/") + commandLine); + MessageManager::broadcastMessage (app->getApplicationName() + "/" + commandLine); delete appInstance; appInstance = 0; @@ -207,16 +192,14 @@ int JUCEApplication::main (String& commandLine, JUCEApplication* const app) commandLine = String::empty; // register for broadcast new app messages - NewAppListener* const newAppListener = new NewAppListener(); - - MessageManager::getInstance()->registerBroadcastListener (newAppListener); + MessageManager::getInstance()->registerBroadcastListener (app); app->stillInitialising = false; // now loop until a quit message is received.. useForce = MessageManager::getInstance()->runDispatchLoop(); - delete newAppListener; + MessageManager::getInstance()->deregisterBroadcastListener (app); if (appLock != 0) { @@ -297,6 +280,13 @@ int JUCEApplication::main (int argc, char* argv[], return JUCEApplication::main (cmd, newApp); } +void JUCEApplication::actionListenerCallback (const String& message) +{ + if (message.startsWith (getApplicationName() + "/")) + { + anotherInstanceStarted (message.fromFirstOccurrenceOf (T("/"), false, false)); + } +} //============================================================================== static bool juceInitialisedGUI = false; diff --git a/src/juce_appframework/application/juce_Application.h b/src/juce_appframework/application/juce_Application.h index 1bd0017d8b..0a0adf2b2b 100644 --- a/src/juce_appframework/application/juce_Application.h +++ b/src/juce_appframework/application/juce_Application.h @@ -33,6 +33,7 @@ #define __JUCE_APPLICATION_JUCEHEADER__ #include "juce_ApplicationCommandTarget.h" +#include "../events/juce_ActionListener.h" //============================================================================== @@ -103,7 +104,8 @@ @see MessageManager, DeletedAtShutdown */ -class JUCE_API JUCEApplication : public ApplicationCommandTarget +class JUCE_API JUCEApplication : public ApplicationCommandTarget, + private ActionListener { protected: //============================================================================== @@ -126,7 +128,7 @@ public: //============================================================================== /** Returns the global instance of the application object being run. */ - static JUCEApplication* getInstance(); + static JUCEApplication* getInstance() throw(); //============================================================================== /** Called when the application starts. @@ -154,7 +156,7 @@ public: This is handy for things like splash screens to know when the app's up-and-running properly. */ - bool isInitialising() const; + bool isInitialising() const throw(); /* Called to allow the application to clear up before exiting. @@ -269,6 +271,8 @@ public: void getAllCommands (Array & commands); /** @internal */ bool perform (const InvocationInfo& info); + /** @internal */ + void actionListenerCallback (const String& message); private: //============================================================================== diff --git a/src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.cpp b/src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.cpp index fb44bf6e6e..bdfa394477 100644 --- a/src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.cpp +++ b/src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.cpp @@ -39,7 +39,7 @@ BEGIN_JUCE_NAMESPACE //============================================================================== -KeyPressMappingSet::KeyPressMappingSet (ApplicationCommandManager* const commandManager_) +KeyPressMappingSet::KeyPressMappingSet (ApplicationCommandManager* const commandManager_) throw() : commandManager (commandManager_) { // A manager is needed to get the descriptions of commands, and will be called when @@ -49,7 +49,7 @@ KeyPressMappingSet::KeyPressMappingSet (ApplicationCommandManager* const command Desktop::getInstance().addFocusChangeListener (this); } -KeyPressMappingSet::KeyPressMappingSet (const KeyPressMappingSet& other) +KeyPressMappingSet::KeyPressMappingSet (const KeyPressMappingSet& other) throw() : commandManager (other.commandManager) { Desktop::getInstance().addFocusChangeListener (this); @@ -72,7 +72,7 @@ const Array KeyPressMappingSet::getKeyPressesAssignedToCommand (const void KeyPressMappingSet::addKeyPress (const CommandID commandID, const KeyPress& newKeyPress, - int insertIndex) + int insertIndex) throw() { if (findCommandForKeyPress (newKeyPress) != commandID) { @@ -107,7 +107,7 @@ void KeyPressMappingSet::addKeyPress (const CommandID commandID, } } -void KeyPressMappingSet::resetToDefaultMappings() +void KeyPressMappingSet::resetToDefaultMappings() throw() { mappings.clear(); @@ -125,7 +125,7 @@ void KeyPressMappingSet::resetToDefaultMappings() sendChangeMessage (this); } -void KeyPressMappingSet::resetToDefaultMapping (const CommandID commandID) +void KeyPressMappingSet::resetToDefaultMapping (const CommandID commandID) throw() { clearAllKeyPresses (commandID); @@ -138,15 +138,16 @@ void KeyPressMappingSet::resetToDefaultMapping (const CommandID commandID) } } -void KeyPressMappingSet::clearAllKeyPresses() +void KeyPressMappingSet::clearAllKeyPresses() throw() { if (mappings.size() > 0) + { sendChangeMessage (this); - - mappings.clear(); + mappings.clear(); + } } -void KeyPressMappingSet::clearAllKeyPresses (const CommandID commandID) +void KeyPressMappingSet::clearAllKeyPresses (const CommandID commandID) throw() { for (int i = mappings.size(); --i >= 0;) { @@ -158,7 +159,7 @@ void KeyPressMappingSet::clearAllKeyPresses (const CommandID commandID) } } -void KeyPressMappingSet::removeKeyPress (const KeyPress& keypress) +void KeyPressMappingSet::removeKeyPress (const KeyPress& keypress) throw() { if (keypress.isValid()) { @@ -179,7 +180,7 @@ void KeyPressMappingSet::removeKeyPress (const KeyPress& keypress) } void KeyPressMappingSet::removeKeyPress (const CommandID commandID, - const int keyPressIndex) + const int keyPressIndex) throw() { for (int i = mappings.size(); --i >= 0;) { @@ -193,7 +194,7 @@ void KeyPressMappingSet::removeKeyPress (const CommandID commandID, } //============================================================================== -CommandID KeyPressMappingSet::findCommandForKeyPress (const KeyPress& keyPress) const +CommandID KeyPressMappingSet::findCommandForKeyPress (const KeyPress& keyPress) const throw() { for (int i = 0; i < mappings.size(); ++i) if (mappings.getUnchecked(i)->keypresses.contains (keyPress)) @@ -203,7 +204,7 @@ CommandID KeyPressMappingSet::findCommandForKeyPress (const KeyPress& keyPress) } bool KeyPressMappingSet::containsMapping (const CommandID commandID, - const KeyPress& keyPress) const + const KeyPress& keyPress) const throw() { for (int i = mappings.size(); --i >= 0;) if (mappings.getUnchecked(i)->commandID == commandID) diff --git a/src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.h b/src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.h index ffa8a8e16b..f80ea3e8df 100644 --- a/src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.h +++ b/src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.h @@ -113,10 +113,10 @@ public: @see ApplicationCommandManager */ - KeyPressMappingSet (ApplicationCommandManager* const commandManager); + KeyPressMappingSet (ApplicationCommandManager* const commandManager) throw(); /** Creates an copy of a KeyPressMappingSet. */ - KeyPressMappingSet (const KeyPressMappingSet& other); + KeyPressMappingSet (const KeyPressMappingSet& other) throw(); /** Destructor. */ ~KeyPressMappingSet(); @@ -146,25 +146,25 @@ public: */ void addKeyPress (const CommandID commandID, const KeyPress& newKeyPress, - int insertIndex = -1); + int insertIndex = -1) throw(); /** Reset all mappings to the defaults, as dictated by the ApplicationCommandManager. @see resetToDefaultMapping */ - void resetToDefaultMappings(); + void resetToDefaultMappings() throw(); /** Resets all key-mappings to the defaults for a particular command. @see resetToDefaultMappings */ - void resetToDefaultMapping (const CommandID commandID); + void resetToDefaultMapping (const CommandID commandID) throw(); /** Removes all keypresses that are assigned to any commands. */ - void clearAllKeyPresses(); + void clearAllKeyPresses() throw(); /** Removes all keypresses that are assigned to a particular command. */ - void clearAllKeyPresses (const CommandID commandID); + void clearAllKeyPresses (const CommandID commandID) throw(); /** Removes one of the keypresses that are assigned to a command. @@ -172,22 +172,22 @@ public: which the keyPressIndex refers. */ void removeKeyPress (const CommandID commandID, - const int keyPressIndex); + const int keyPressIndex) throw(); /** Removes a keypress from any command that it may be assigned to. */ - void removeKeyPress (const KeyPress& keypress); + void removeKeyPress (const KeyPress& keypress) throw(); /** Returns true if the given command is linked to this key. */ bool containsMapping (const CommandID commandID, - const KeyPress& keyPress) const; + const KeyPress& keyPress) const throw(); //============================================================================== /** Looks for a command that corresponds to a keypress. @returns the UID of the command or 0 if none was found */ - CommandID findCommandForKeyPress (const KeyPress& keyPress) const; + CommandID findCommandForKeyPress (const KeyPress& keyPress) const throw(); //============================================================================== /** Tries to recreate the mappings from a previously stored state. diff --git a/src/juce_core/threads/juce_Thread.cpp b/src/juce_core/threads/juce_Thread.cpp index b6ddd67adc..b746f114ab 100644 --- a/src/juce_core/threads/juce_Thread.cpp +++ b/src/juce_core/threads/juce_Thread.cpp @@ -259,16 +259,25 @@ Thread* Thread::getCurrentThread() throw() return result; } -void Thread::stopAllThreads (const int timeoutInMillisecs) throw() +void Thread::stopAllThreads (const int timeOutMilliseconds) throw() { - while (getNumRunningThreads() > 0) + runningThreadsLock.enter(); + + for (int i = runningThreads.size(); --i >= 0;) + ((Thread*) runningThreads.getUnchecked(i))->signalThreadShouldExit(); + + runningThreadsLock.exit(); + + for (;;) { runningThreadsLock.enter(); - Thread* const r = (Thread*) runningThreads[0]; + Thread* const t = (Thread*) runningThreads[0]; runningThreadsLock.exit(); - if (r != 0) - r->stopThread (timeoutInMillisecs); + if (t == 0) + break; + + t->stopThread (timeOutMilliseconds); } }