@@ -160,7 +160,6 @@ BEGIN_JUCE_NAMESPACE | |||||
#if JUCE_LINUX | #if JUCE_LINUX | ||||
extern Display* display; | extern Display* display; | ||||
extern bool juce_postMessageToSystemQueue (void* message); | |||||
#endif | #endif | ||||
END_JUCE_NAMESPACE | END_JUCE_NAMESPACE | ||||
@@ -17293,6 +17293,7 @@ bool JUCEApplication::initialiseApp (String& commandLine) | |||||
if (! appLock->enter(0)) | if (! appLock->enter(0)) | ||||
{ | { | ||||
appLock = 0; | |||||
MessageManager::broadcastMessage (getApplicationName() + "/" + commandLineParameters); | MessageManager::broadcastMessage (getApplicationName() + "/" + commandLineParameters); | ||||
delete appInstance; | delete appInstance; | ||||
@@ -37732,7 +37733,7 @@ BEGIN_JUCE_NAMESPACE | |||||
// platform-specific functions.. | // platform-specific functions.. | ||||
bool juce_dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages); | bool juce_dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages); | ||||
bool juce_postMessageToSystemQueue (void* message); | |||||
bool juce_postMessageToSystemQueue (Message* message); | |||||
MessageManager* MessageManager::instance = 0; | MessageManager* MessageManager::instance = 0; | ||||
@@ -37789,26 +37790,26 @@ void MessageManager::postCallbackMessage (Message* const message) | |||||
} | } | ||||
// not for public use.. | // not for public use.. | ||||
void MessageManager::deliverMessage (void* const message) | |||||
void MessageManager::deliverMessage (Message* const message) | |||||
{ | { | ||||
const ScopedPointer <Message> m (static_cast <Message*> (message)); | |||||
MessageListener* const recipient = m->messageRecipient; | |||||
const ScopedPointer <Message> messageDeleter (message); | |||||
MessageListener* const recipient = message->messageRecipient; | |||||
JUCE_TRY | JUCE_TRY | ||||
{ | { | ||||
if (messageListeners.contains (recipient)) | if (messageListeners.contains (recipient)) | ||||
{ | { | ||||
recipient->handleMessage (*m); | |||||
recipient->handleMessage (*message); | |||||
} | } | ||||
else if (recipient == 0) | else if (recipient == 0) | ||||
{ | { | ||||
if (m->intParameter1 == quitMessageId) | |||||
if (message->intParameter1 == quitMessageId) | |||||
{ | { | ||||
quitMessageReceived = true; | quitMessageReceived = true; | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
CallbackMessage* const cm = dynamic_cast <CallbackMessage*> (static_cast <Message*> (m)); | |||||
CallbackMessage* const cm = dynamic_cast <CallbackMessage*> (message); | |||||
if (cm != 0) | if (cm != 0) | ||||
cm->messageCallback(); | cm->messageCallback(); | ||||
@@ -77611,7 +77612,8 @@ ResizableWindow::~ResizableWindow() | |||||
{ | { | ||||
resizableCorner = 0; | resizableCorner = 0; | ||||
resizableBorder = 0; | resizableBorder = 0; | ||||
contentComponent = 0; | |||||
deleteAndZero (contentComponent); // (avoid using a scoped pointer for this, so that it survives | |||||
// external deletion of the content comp) | |||||
// have you been adding your own components directly to this window..? tut tut tut. | // have you been adding your own components directly to this window..? tut tut tut. | ||||
// Read the instructions for using a ResizableWindow! | // Read the instructions for using a ResizableWindow! | ||||
@@ -77636,9 +77638,9 @@ void ResizableWindow::setContentComponent (Component* const newContentComponent, | |||||
if (newContentComponent != static_cast <Component*> (contentComponent)) | if (newContentComponent != static_cast <Component*> (contentComponent)) | ||||
{ | { | ||||
if (! deleteOldOne) | |||||
removeChildComponent (contentComponent.release()); | |||||
if (deleteOldOne) | |||||
delete static_cast <Component*> (contentComponent); // (avoid using a scoped pointer for this, so that it survives | |||||
// external deletion of the content comp) | |||||
contentComponent = newContentComponent; | contentComponent = newContentComponent; | ||||
Component::addAndMakeVisible (contentComponent); | Component::addAndMakeVisible (contentComponent); | ||||
@@ -238585,7 +238587,7 @@ static LRESULT CALLBACK juce_MessageWndProc (HWND h, | |||||
// here in case there are windows modal dialog boxes doing their own | // here in case there are windows modal dialog boxes doing their own | ||||
// dispatch loop and not calling our version | // dispatch loop and not calling our version | ||||
MessageManager::getInstance()->deliverMessage ((void*) lParam); | |||||
MessageManager::getInstance()->deliverMessage ((Message*) lParam); | |||||
return 0; | return 0; | ||||
} | } | ||||
else if (message == broadcastId) | else if (message == broadcastId) | ||||
@@ -238673,7 +238675,7 @@ bool juce_dispatchNextMessageOnSystemQueue (const bool returnIfNoPendingMessages | |||||
{ | { | ||||
if (m.message == specialId && m.hwnd == juce_messageWindowHandle) | if (m.message == specialId && m.hwnd == juce_messageWindowHandle) | ||||
{ | { | ||||
MessageManager::getInstance()->deliverMessage ((void*) m.lParam); | |||||
MessageManager::getInstance()->deliverMessage ((Message*) (void*) m.lParam); | |||||
} | } | ||||
else if (m.message == WM_QUIT) | else if (m.message == WM_QUIT) | ||||
{ | { | ||||
@@ -238701,7 +238703,7 @@ bool juce_dispatchNextMessageOnSystemQueue (const bool returnIfNoPendingMessages | |||||
return true; | return true; | ||||
} | } | ||||
bool juce_postMessageToSystemQueue (void* message) | |||||
bool juce_postMessageToSystemQueue (Message* message) | |||||
{ | { | ||||
return PostMessage (juce_messageWindowHandle, specialId, 0, (LPARAM) message) != 0; | return PostMessage (juce_messageWindowHandle, specialId, 0, (LPARAM) message) != 0; | ||||
} | } | ||||
@@ -254754,9 +254756,7 @@ private: | |||||
(void) numBytes; | (void) numBytes; | ||||
} | } | ||||
Message* m = queue[0]; | |||||
queue.remove (0, false /* deleteObject */); | |||||
return m; | |||||
return queue.removeAndReturn (0); | |||||
} | } | ||||
bool dispatchNextInternalMessage() | bool dispatchNextInternalMessage() | ||||
@@ -254922,12 +254922,12 @@ void MessageManager::doPlatformSpecificShutdown() | |||||
} | } | ||||
} | } | ||||
bool juce_postMessageToSystemQueue (void* message) | |||||
bool juce_postMessageToSystemQueue (Message* message) | |||||
{ | { | ||||
if (LinuxErrorHandling::errorOccurred) | if (LinuxErrorHandling::errorOccurred) | ||||
return false; | return false; | ||||
InternalMessageQueue::getInstanceWithoutCreating()->postMessage ((Message*) message); | |||||
InternalMessageQueue::getInstanceWithoutCreating()->postMessage (message); | |||||
return true; | return true; | ||||
} | } | ||||
@@ -265979,7 +265979,7 @@ bool MessageManager::runDispatchLoopUntil (int millisecondsToRunFor) | |||||
static CFRunLoopRef runLoop = 0; | static CFRunLoopRef runLoop = 0; | ||||
static CFRunLoopSourceRef runLoopSource = 0; | static CFRunLoopSourceRef runLoopSource = 0; | ||||
static Array <void*, CriticalSection>* pendingMessages = 0; | |||||
static OwnedArray <Message, CriticalSection>* pendingMessages = 0; | |||||
static JuceCustomMessageHandler* juceCustomMessageHandler = 0; | static JuceCustomMessageHandler* juceCustomMessageHandler = 0; | ||||
static void runLoopSourceCallback (void*) | static void runLoopSourceCallback (void*) | ||||
@@ -265990,7 +265990,7 @@ static void runLoopSourceCallback (void*) | |||||
do | do | ||||
{ | { | ||||
void* const nextMessage = pendingMessages->remove (0); | |||||
Message* const nextMessage = pendingMessages->removeAndReturn (0); | |||||
if (nextMessage == 0) | if (nextMessage == 0) | ||||
return; | return; | ||||
@@ -266007,7 +266007,7 @@ static void runLoopSourceCallback (void*) | |||||
void MessageManager::doPlatformSpecificInitialisation() | void MessageManager::doPlatformSpecificInitialisation() | ||||
{ | { | ||||
pendingMessages = new Array <void*, CriticalSection>(); | |||||
pendingMessages = new OwnedArray <Message, CriticalSection>(); | |||||
runLoop = CFRunLoopGetCurrent(); | runLoop = CFRunLoopGetCurrent(); | ||||
CFRunLoopSourceContext sourceContext; | CFRunLoopSourceContext sourceContext; | ||||
@@ -266025,14 +266025,7 @@ void MessageManager::doPlatformSpecificShutdown() | |||||
CFRunLoopSourceInvalidate (runLoopSource); | CFRunLoopSourceInvalidate (runLoopSource); | ||||
CFRelease (runLoopSource); | CFRelease (runLoopSource); | ||||
runLoopSource = 0; | runLoopSource = 0; | ||||
if (pendingMessages != 0) | |||||
{ | |||||
while (pendingMessages->size() > 0) | |||||
delete ((Message*) pendingMessages->remove(0)); | |||||
deleteAndZero (pendingMessages); | |||||
} | |||||
deleteAndZero (pendingMessages); | |||||
if (juceCustomMessageHandler != 0) | if (juceCustomMessageHandler != 0) | ||||
{ | { | ||||
@@ -266042,7 +266035,7 @@ void MessageManager::doPlatformSpecificShutdown() | |||||
} | } | ||||
} | } | ||||
bool juce_postMessageToSystemQueue (void* message) | |||||
bool juce_postMessageToSystemQueue (Message* message) | |||||
{ | { | ||||
if (pendingMessages != 0) | if (pendingMessages != 0) | ||||
{ | { | ||||
@@ -274114,9 +274107,6 @@ public: | |||||
CFRunLoopRemoveSource (runLoop, runLoopSource, kCFRunLoopCommonModes); | CFRunLoopRemoveSource (runLoop, runLoopSource, kCFRunLoopCommonModes); | ||||
CFRunLoopSourceInvalidate (runLoopSource); | CFRunLoopSourceInvalidate (runLoopSource); | ||||
CFRelease (runLoopSource); | CFRelease (runLoopSource); | ||||
while (messages.size() > 0) | |||||
delete static_cast <Message*> (messages.remove(0)); | |||||
} | } | ||||
virtual NSApplicationTerminateReply shouldTerminate() | virtual NSApplicationTerminateReply shouldTerminate() | ||||
@@ -274183,7 +274173,7 @@ public: | |||||
delete this; | delete this; | ||||
} | } | ||||
void postMessage (void* m) | |||||
void postMessage (Message* const m) | |||||
{ | { | ||||
messages.add (m); | messages.add (m); | ||||
CFRunLoopSourceSignal (runLoopSource); | CFRunLoopSourceSignal (runLoopSource); | ||||
@@ -274193,7 +274183,7 @@ public: | |||||
private: | private: | ||||
CFRunLoopRef runLoop; | CFRunLoopRef runLoop; | ||||
CFRunLoopSourceRef runLoopSource; | CFRunLoopSourceRef runLoopSource; | ||||
Array <void*, CriticalSection> messages; | |||||
OwnedArray <Message, CriticalSection> messages; | |||||
void runLoopCallback() | void runLoopCallback() | ||||
{ | { | ||||
@@ -274201,7 +274191,7 @@ private: | |||||
do | do | ||||
{ | { | ||||
void* const nextMessage = messages.remove (0); | |||||
Message* const nextMessage = messages.removeAndReturn (0); | |||||
if (nextMessage == 0) | if (nextMessage == 0) | ||||
return; | return; | ||||
@@ -274519,7 +274509,7 @@ void MessageManager::doPlatformSpecificShutdown() | |||||
} | } | ||||
} | } | ||||
bool juce_postMessageToSystemQueue (void* message) | |||||
bool juce_postMessageToSystemQueue (Message* message) | |||||
{ | { | ||||
juceAppDelegate->redirector->postMessage (message); | juceAppDelegate->redirector->postMessage (message); | ||||
return true; | return true; | ||||
@@ -64,7 +64,7 @@ | |||||
*/ | */ | ||||
#define JUCE_MAJOR_VERSION 1 | #define JUCE_MAJOR_VERSION 1 | ||||
#define JUCE_MINOR_VERSION 52 | #define JUCE_MINOR_VERSION 52 | ||||
#define JUCE_BUILDNUMBER 23 | |||||
#define JUCE_BUILDNUMBER 24 | |||||
/** Current Juce version number. | /** Current Juce version number. | ||||
@@ -6993,6 +6993,38 @@ public: | |||||
} | } | ||||
} | } | ||||
/** Removes and returns an object from the array without deleting it. | |||||
This will remove the object at a given index and return it, moving back all | |||||
the subsequent objects to close the gap. If the index passed in is out-of-range, | |||||
nothing will happen. | |||||
@param indexToRemove the index of the element to remove | |||||
@see remove, removeObject, removeRange | |||||
*/ | |||||
ObjectClass* removeAndReturn (const int indexToRemove) | |||||
{ | |||||
ObjectClass* removedItem = 0; | |||||
const ScopedLockType lock (getLock()); | |||||
if (((unsigned int) indexToRemove) < (unsigned int) numUsed) | |||||
{ | |||||
ObjectClass** const e = data.elements + indexToRemove; | |||||
removedItem = *e; | |||||
--numUsed; | |||||
const int numToShift = numUsed - indexToRemove; | |||||
if (numToShift > 0) | |||||
memmove (e, e + 1, numToShift * sizeof (ObjectClass*)); | |||||
if ((numUsed << 1) < data.numAllocated) | |||||
minimiseStorageOverheads(); | |||||
} | |||||
return removedItem; | |||||
} | |||||
/** Removes a specified object from the array. | /** Removes a specified object from the array. | ||||
If the item isn't found, no action is taken. | If the item isn't found, no action is taken. | ||||
@@ -7079,14 +7111,9 @@ public: | |||||
const ScopedLockType lock (getLock()); | const ScopedLockType lock (getLock()); | ||||
if (howManyToRemove >= numUsed) | if (howManyToRemove >= numUsed) | ||||
{ | |||||
clear (deleteObjects); | clear (deleteObjects); | ||||
} | |||||
else | else | ||||
{ | |||||
while (--howManyToRemove >= 0) | |||||
remove (numUsed - 1, deleteObjects); | |||||
} | |||||
removeRange (numUsed - howManyToRemove, howManyToRemove, deleteObjects); | |||||
} | } | ||||
/** Swaps a pair of objects in the array. | /** Swaps a pair of objects in the array. | ||||
@@ -42183,7 +42210,7 @@ public: | |||||
void deregisterBroadcastListener (ActionListener* listener) throw(); | void deregisterBroadcastListener (ActionListener* listener) throw(); | ||||
/** @internal */ | /** @internal */ | ||||
void deliverMessage (void*); | |||||
void deliverMessage (Message*); | |||||
/** @internal */ | /** @internal */ | ||||
void deliverBroadcastMessage (const String&); | void deliverBroadcastMessage (const String&); | ||||
/** @internal */ | /** @internal */ | ||||
@@ -49874,7 +49901,7 @@ protected: | |||||
ScopedPointer <ResizableBorderComponent> resizableBorder; | ScopedPointer <ResizableBorderComponent> resizableBorder; | ||||
private: | private: | ||||
ScopedPointer <Component> contentComponent; | |||||
Component::SafePointer <Component> contentComponent; | |||||
bool resizeToFitContent, fullscreen; | bool resizeToFitContent, fullscreen; | ||||
ComponentDragger dragger; | ComponentDragger dragger; | ||||
Rectangle<int> lastNonFullScreenPos; | Rectangle<int> lastNonFullScreenPos; | ||||
@@ -502,6 +502,38 @@ public: | |||||
} | } | ||||
} | } | ||||
/** Removes and returns an object from the array without deleting it. | |||||
This will remove the object at a given index and return it, moving back all | |||||
the subsequent objects to close the gap. If the index passed in is out-of-range, | |||||
nothing will happen. | |||||
@param indexToRemove the index of the element to remove | |||||
@see remove, removeObject, removeRange | |||||
*/ | |||||
ObjectClass* removeAndReturn (const int indexToRemove) | |||||
{ | |||||
ObjectClass* removedItem = 0; | |||||
const ScopedLockType lock (getLock()); | |||||
if (((unsigned int) indexToRemove) < (unsigned int) numUsed) | |||||
{ | |||||
ObjectClass** const e = data.elements + indexToRemove; | |||||
removedItem = *e; | |||||
--numUsed; | |||||
const int numToShift = numUsed - indexToRemove; | |||||
if (numToShift > 0) | |||||
memmove (e, e + 1, numToShift * sizeof (ObjectClass*)); | |||||
if ((numUsed << 1) < data.numAllocated) | |||||
minimiseStorageOverheads(); | |||||
} | |||||
return removedItem; | |||||
} | |||||
/** Removes a specified object from the array. | /** Removes a specified object from the array. | ||||
If the item isn't found, no action is taken. | If the item isn't found, no action is taken. | ||||
@@ -588,14 +620,9 @@ public: | |||||
const ScopedLockType lock (getLock()); | const ScopedLockType lock (getLock()); | ||||
if (howManyToRemove >= numUsed) | if (howManyToRemove >= numUsed) | ||||
{ | |||||
clear (deleteObjects); | clear (deleteObjects); | ||||
} | |||||
else | else | ||||
{ | |||||
while (--howManyToRemove >= 0) | |||||
remove (numUsed - 1, deleteObjects); | |||||
} | |||||
removeRange (numUsed - howManyToRemove, howManyToRemove, deleteObjects); | |||||
} | } | ||||
/** Swaps a pair of objects in the array. | /** Swaps a pair of objects in the array. | ||||
@@ -33,7 +33,7 @@ | |||||
*/ | */ | ||||
#define JUCE_MAJOR_VERSION 1 | #define JUCE_MAJOR_VERSION 1 | ||||
#define JUCE_MINOR_VERSION 52 | #define JUCE_MINOR_VERSION 52 | ||||
#define JUCE_BUILDNUMBER 23 | |||||
#define JUCE_BUILDNUMBER 24 | |||||
/** Current Juce version number. | /** Current Juce version number. | ||||
@@ -39,7 +39,7 @@ BEGIN_JUCE_NAMESPACE | |||||
//============================================================================== | //============================================================================== | ||||
// platform-specific functions.. | // platform-specific functions.. | ||||
bool juce_dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages); | bool juce_dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages); | ||||
bool juce_postMessageToSystemQueue (void* message); | |||||
bool juce_postMessageToSystemQueue (Message* message); | |||||
//============================================================================== | //============================================================================== | ||||
MessageManager* MessageManager::instance = 0; | MessageManager* MessageManager::instance = 0; | ||||
@@ -99,26 +99,26 @@ void MessageManager::postCallbackMessage (Message* const message) | |||||
//============================================================================== | //============================================================================== | ||||
// not for public use.. | // not for public use.. | ||||
void MessageManager::deliverMessage (void* const message) | |||||
void MessageManager::deliverMessage (Message* const message) | |||||
{ | { | ||||
const ScopedPointer <Message> m (static_cast <Message*> (message)); | |||||
MessageListener* const recipient = m->messageRecipient; | |||||
const ScopedPointer <Message> messageDeleter (message); | |||||
MessageListener* const recipient = message->messageRecipient; | |||||
JUCE_TRY | JUCE_TRY | ||||
{ | { | ||||
if (messageListeners.contains (recipient)) | if (messageListeners.contains (recipient)) | ||||
{ | { | ||||
recipient->handleMessage (*m); | |||||
recipient->handleMessage (*message); | |||||
} | } | ||||
else if (recipient == 0) | else if (recipient == 0) | ||||
{ | { | ||||
if (m->intParameter1 == quitMessageId) | |||||
if (message->intParameter1 == quitMessageId) | |||||
{ | { | ||||
quitMessageReceived = true; | quitMessageReceived = true; | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
CallbackMessage* const cm = dynamic_cast <CallbackMessage*> (static_cast <Message*> (m)); | |||||
CallbackMessage* const cm = dynamic_cast <CallbackMessage*> (message); | |||||
if (cm != 0) | if (cm != 0) | ||||
cm->messageCallback(); | cm->messageCallback(); | ||||
@@ -156,7 +156,7 @@ public: | |||||
//============================================================================== | //============================================================================== | ||||
/** @internal */ | /** @internal */ | ||||
void deliverMessage (void*); | |||||
void deliverMessage (Message*); | |||||
/** @internal */ | /** @internal */ | ||||
void deliverBroadcastMessage (const String&); | void deliverBroadcastMessage (const String&); | ||||
/** @internal */ | /** @internal */ | ||||
@@ -78,7 +78,8 @@ ResizableWindow::~ResizableWindow() | |||||
{ | { | ||||
resizableCorner = 0; | resizableCorner = 0; | ||||
resizableBorder = 0; | resizableBorder = 0; | ||||
contentComponent = 0; | |||||
deleteAndZero (contentComponent); // (avoid using a scoped pointer for this, so that it survives | |||||
// external deletion of the content comp) | |||||
// have you been adding your own components directly to this window..? tut tut tut. | // have you been adding your own components directly to this window..? tut tut tut. | ||||
// Read the instructions for using a ResizableWindow! | // Read the instructions for using a ResizableWindow! | ||||
@@ -104,9 +105,9 @@ void ResizableWindow::setContentComponent (Component* const newContentComponent, | |||||
if (newContentComponent != static_cast <Component*> (contentComponent)) | if (newContentComponent != static_cast <Component*> (contentComponent)) | ||||
{ | { | ||||
if (! deleteOldOne) | |||||
removeChildComponent (contentComponent.release()); | |||||
if (deleteOldOne) | |||||
delete static_cast <Component*> (contentComponent); // (avoid using a scoped pointer for this, so that it survives | |||||
// external deletion of the content comp) | |||||
contentComponent = newContentComponent; | contentComponent = newContentComponent; | ||||
Component::addAndMakeVisible (contentComponent); | Component::addAndMakeVisible (contentComponent); | ||||
@@ -342,7 +342,7 @@ protected: | |||||
ScopedPointer <ResizableBorderComponent> resizableBorder; | ScopedPointer <ResizableBorderComponent> resizableBorder; | ||||
private: | private: | ||||
ScopedPointer <Component> contentComponent; | |||||
Component::SafePointer <Component> contentComponent; | |||||
bool resizeToFitContent, fullscreen; | bool resizeToFitContent, fullscreen; | ||||
ComponentDragger dragger; | ComponentDragger dragger; | ||||
Rectangle<int> lastNonFullScreenPos; | Rectangle<int> lastNonFullScreenPos; | ||||
@@ -207,9 +207,7 @@ private: | |||||
(void) numBytes; | (void) numBytes; | ||||
} | } | ||||
Message* m = queue[0]; | |||||
queue.remove (0, false /* deleteObject */); | |||||
return m; | |||||
return queue.removeAndReturn (0); | |||||
} | } | ||||
bool dispatchNextInternalMessage() | bool dispatchNextInternalMessage() | ||||
@@ -380,12 +378,12 @@ void MessageManager::doPlatformSpecificShutdown() | |||||
} | } | ||||
} | } | ||||
bool juce_postMessageToSystemQueue (void* message) | |||||
bool juce_postMessageToSystemQueue (Message* message) | |||||
{ | { | ||||
if (LinuxErrorHandling::errorOccurred) | if (LinuxErrorHandling::errorOccurred) | ||||
return false; | return false; | ||||
InternalMessageQueue::getInstanceWithoutCreating()->postMessage ((Message*) message); | |||||
InternalMessageQueue::getInstanceWithoutCreating()->postMessage (message); | |||||
return true; | return true; | ||||
} | } | ||||
@@ -108,7 +108,7 @@ bool MessageManager::runDispatchLoopUntil (int millisecondsToRunFor) | |||||
//============================================================================== | //============================================================================== | ||||
static CFRunLoopRef runLoop = 0; | static CFRunLoopRef runLoop = 0; | ||||
static CFRunLoopSourceRef runLoopSource = 0; | static CFRunLoopSourceRef runLoopSource = 0; | ||||
static Array <void*, CriticalSection>* pendingMessages = 0; | |||||
static OwnedArray <Message, CriticalSection>* pendingMessages = 0; | |||||
static JuceCustomMessageHandler* juceCustomMessageHandler = 0; | static JuceCustomMessageHandler* juceCustomMessageHandler = 0; | ||||
static void runLoopSourceCallback (void*) | static void runLoopSourceCallback (void*) | ||||
@@ -119,7 +119,7 @@ static void runLoopSourceCallback (void*) | |||||
do | do | ||||
{ | { | ||||
void* const nextMessage = pendingMessages->remove (0); | |||||
Message* const nextMessage = pendingMessages->removeAndReturn (0); | |||||
if (nextMessage == 0) | if (nextMessage == 0) | ||||
return; | return; | ||||
@@ -136,7 +136,7 @@ static void runLoopSourceCallback (void*) | |||||
void MessageManager::doPlatformSpecificInitialisation() | void MessageManager::doPlatformSpecificInitialisation() | ||||
{ | { | ||||
pendingMessages = new Array <void*, CriticalSection>(); | |||||
pendingMessages = new OwnedArray <Message, CriticalSection>(); | |||||
runLoop = CFRunLoopGetCurrent(); | runLoop = CFRunLoopGetCurrent(); | ||||
CFRunLoopSourceContext sourceContext; | CFRunLoopSourceContext sourceContext; | ||||
@@ -154,14 +154,7 @@ void MessageManager::doPlatformSpecificShutdown() | |||||
CFRunLoopSourceInvalidate (runLoopSource); | CFRunLoopSourceInvalidate (runLoopSource); | ||||
CFRelease (runLoopSource); | CFRelease (runLoopSource); | ||||
runLoopSource = 0; | runLoopSource = 0; | ||||
if (pendingMessages != 0) | |||||
{ | |||||
while (pendingMessages->size() > 0) | |||||
delete ((Message*) pendingMessages->remove(0)); | |||||
deleteAndZero (pendingMessages); | |||||
} | |||||
deleteAndZero (pendingMessages); | |||||
if (juceCustomMessageHandler != 0) | if (juceCustomMessageHandler != 0) | ||||
{ | { | ||||
@@ -171,7 +164,7 @@ void MessageManager::doPlatformSpecificShutdown() | |||||
} | } | ||||
} | } | ||||
bool juce_postMessageToSystemQueue (void* message) | |||||
bool juce_postMessageToSystemQueue (Message* message) | |||||
{ | { | ||||
if (pendingMessages != 0) | if (pendingMessages != 0) | ||||
{ | { | ||||
@@ -60,9 +60,6 @@ public: | |||||
CFRunLoopRemoveSource (runLoop, runLoopSource, kCFRunLoopCommonModes); | CFRunLoopRemoveSource (runLoop, runLoopSource, kCFRunLoopCommonModes); | ||||
CFRunLoopSourceInvalidate (runLoopSource); | CFRunLoopSourceInvalidate (runLoopSource); | ||||
CFRelease (runLoopSource); | CFRelease (runLoopSource); | ||||
while (messages.size() > 0) | |||||
delete static_cast <Message*> (messages.remove(0)); | |||||
} | } | ||||
virtual NSApplicationTerminateReply shouldTerminate() | virtual NSApplicationTerminateReply shouldTerminate() | ||||
@@ -129,7 +126,7 @@ public: | |||||
delete this; | delete this; | ||||
} | } | ||||
void postMessage (void* m) | |||||
void postMessage (Message* const m) | |||||
{ | { | ||||
messages.add (m); | messages.add (m); | ||||
CFRunLoopSourceSignal (runLoopSource); | CFRunLoopSourceSignal (runLoopSource); | ||||
@@ -139,7 +136,7 @@ public: | |||||
private: | private: | ||||
CFRunLoopRef runLoop; | CFRunLoopRef runLoop; | ||||
CFRunLoopSourceRef runLoopSource; | CFRunLoopSourceRef runLoopSource; | ||||
Array <void*, CriticalSection> messages; | |||||
OwnedArray <Message, CriticalSection> messages; | |||||
void runLoopCallback() | void runLoopCallback() | ||||
{ | { | ||||
@@ -147,7 +144,7 @@ private: | |||||
do | do | ||||
{ | { | ||||
void* const nextMessage = messages.remove (0); | |||||
Message* const nextMessage = messages.removeAndReturn (0); | |||||
if (nextMessage == 0) | if (nextMessage == 0) | ||||
return; | return; | ||||
@@ -467,7 +464,7 @@ void MessageManager::doPlatformSpecificShutdown() | |||||
} | } | ||||
} | } | ||||
bool juce_postMessageToSystemQueue (void* message) | |||||
bool juce_postMessageToSystemQueue (Message* message) | |||||
{ | { | ||||
juceAppDelegate->redirector->postMessage (message); | juceAppDelegate->redirector->postMessage (message); | ||||
return true; | return true; | ||||
@@ -65,7 +65,7 @@ static LRESULT CALLBACK juce_MessageWndProc (HWND h, | |||||
// here in case there are windows modal dialog boxes doing their own | // here in case there are windows modal dialog boxes doing their own | ||||
// dispatch loop and not calling our version | // dispatch loop and not calling our version | ||||
MessageManager::getInstance()->deliverMessage ((void*) lParam); | |||||
MessageManager::getInstance()->deliverMessage ((Message*) lParam); | |||||
return 0; | return 0; | ||||
} | } | ||||
else if (message == broadcastId) | else if (message == broadcastId) | ||||
@@ -153,7 +153,7 @@ bool juce_dispatchNextMessageOnSystemQueue (const bool returnIfNoPendingMessages | |||||
{ | { | ||||
if (m.message == specialId && m.hwnd == juce_messageWindowHandle) | if (m.message == specialId && m.hwnd == juce_messageWindowHandle) | ||||
{ | { | ||||
MessageManager::getInstance()->deliverMessage ((void*) m.lParam); | |||||
MessageManager::getInstance()->deliverMessage ((Message*) (void*) m.lParam); | |||||
} | } | ||||
else if (m.message == WM_QUIT) | else if (m.message == WM_QUIT) | ||||
{ | { | ||||
@@ -182,7 +182,7 @@ bool juce_dispatchNextMessageOnSystemQueue (const bool returnIfNoPendingMessages | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
bool juce_postMessageToSystemQueue (void* message) | |||||
bool juce_postMessageToSystemQueue (Message* message) | |||||
{ | { | ||||
return PostMessage (juce_messageWindowHandle, specialId, 0, (LPARAM) message) != 0; | return PostMessage (juce_messageWindowHandle, specialId, 0, (LPARAM) message) != 0; | ||||
} | } | ||||