| @@ -160,7 +160,6 @@ BEGIN_JUCE_NAMESPACE | |||
| #if JUCE_LINUX | |||
| extern Display* display; | |||
| extern bool juce_postMessageToSystemQueue (void* message); | |||
| #endif | |||
| END_JUCE_NAMESPACE | |||
| @@ -17293,6 +17293,7 @@ bool JUCEApplication::initialiseApp (String& commandLine) | |||
| if (! appLock->enter(0)) | |||
| { | |||
| appLock = 0; | |||
| MessageManager::broadcastMessage (getApplicationName() + "/" + commandLineParameters); | |||
| delete appInstance; | |||
| @@ -37732,7 +37733,7 @@ BEGIN_JUCE_NAMESPACE | |||
| // platform-specific functions.. | |||
| bool juce_dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages); | |||
| bool juce_postMessageToSystemQueue (void* message); | |||
| bool juce_postMessageToSystemQueue (Message* message); | |||
| MessageManager* MessageManager::instance = 0; | |||
| @@ -37789,26 +37790,26 @@ void MessageManager::postCallbackMessage (Message* const message) | |||
| } | |||
| // 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 | |||
| { | |||
| if (messageListeners.contains (recipient)) | |||
| { | |||
| recipient->handleMessage (*m); | |||
| recipient->handleMessage (*message); | |||
| } | |||
| else if (recipient == 0) | |||
| { | |||
| if (m->intParameter1 == quitMessageId) | |||
| if (message->intParameter1 == quitMessageId) | |||
| { | |||
| quitMessageReceived = true; | |||
| } | |||
| else | |||
| { | |||
| CallbackMessage* const cm = dynamic_cast <CallbackMessage*> (static_cast <Message*> (m)); | |||
| CallbackMessage* const cm = dynamic_cast <CallbackMessage*> (message); | |||
| if (cm != 0) | |||
| cm->messageCallback(); | |||
| @@ -77611,7 +77612,8 @@ ResizableWindow::~ResizableWindow() | |||
| { | |||
| resizableCorner = 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. | |||
| // Read the instructions for using a ResizableWindow! | |||
| @@ -77636,9 +77638,9 @@ void ResizableWindow::setContentComponent (Component* const newContentComponent, | |||
| 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; | |||
| 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 | |||
| // dispatch loop and not calling our version | |||
| MessageManager::getInstance()->deliverMessage ((void*) lParam); | |||
| MessageManager::getInstance()->deliverMessage ((Message*) lParam); | |||
| return 0; | |||
| } | |||
| else if (message == broadcastId) | |||
| @@ -238673,7 +238675,7 @@ bool juce_dispatchNextMessageOnSystemQueue (const bool returnIfNoPendingMessages | |||
| { | |||
| 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) | |||
| { | |||
| @@ -238701,7 +238703,7 @@ bool juce_dispatchNextMessageOnSystemQueue (const bool returnIfNoPendingMessages | |||
| return true; | |||
| } | |||
| bool juce_postMessageToSystemQueue (void* message) | |||
| bool juce_postMessageToSystemQueue (Message* message) | |||
| { | |||
| return PostMessage (juce_messageWindowHandle, specialId, 0, (LPARAM) message) != 0; | |||
| } | |||
| @@ -254754,9 +254756,7 @@ private: | |||
| (void) numBytes; | |||
| } | |||
| Message* m = queue[0]; | |||
| queue.remove (0, false /* deleteObject */); | |||
| return m; | |||
| return queue.removeAndReturn (0); | |||
| } | |||
| bool dispatchNextInternalMessage() | |||
| @@ -254922,12 +254922,12 @@ void MessageManager::doPlatformSpecificShutdown() | |||
| } | |||
| } | |||
| bool juce_postMessageToSystemQueue (void* message) | |||
| bool juce_postMessageToSystemQueue (Message* message) | |||
| { | |||
| if (LinuxErrorHandling::errorOccurred) | |||
| return false; | |||
| InternalMessageQueue::getInstanceWithoutCreating()->postMessage ((Message*) message); | |||
| InternalMessageQueue::getInstanceWithoutCreating()->postMessage (message); | |||
| return true; | |||
| } | |||
| @@ -265979,7 +265979,7 @@ bool MessageManager::runDispatchLoopUntil (int millisecondsToRunFor) | |||
| static CFRunLoopRef runLoop = 0; | |||
| static CFRunLoopSourceRef runLoopSource = 0; | |||
| static Array <void*, CriticalSection>* pendingMessages = 0; | |||
| static OwnedArray <Message, CriticalSection>* pendingMessages = 0; | |||
| static JuceCustomMessageHandler* juceCustomMessageHandler = 0; | |||
| static void runLoopSourceCallback (void*) | |||
| @@ -265990,7 +265990,7 @@ static void runLoopSourceCallback (void*) | |||
| do | |||
| { | |||
| void* const nextMessage = pendingMessages->remove (0); | |||
| Message* const nextMessage = pendingMessages->removeAndReturn (0); | |||
| if (nextMessage == 0) | |||
| return; | |||
| @@ -266007,7 +266007,7 @@ static void runLoopSourceCallback (void*) | |||
| void MessageManager::doPlatformSpecificInitialisation() | |||
| { | |||
| pendingMessages = new Array <void*, CriticalSection>(); | |||
| pendingMessages = new OwnedArray <Message, CriticalSection>(); | |||
| runLoop = CFRunLoopGetCurrent(); | |||
| CFRunLoopSourceContext sourceContext; | |||
| @@ -266025,14 +266025,7 @@ void MessageManager::doPlatformSpecificShutdown() | |||
| CFRunLoopSourceInvalidate (runLoopSource); | |||
| CFRelease (runLoopSource); | |||
| runLoopSource = 0; | |||
| if (pendingMessages != 0) | |||
| { | |||
| while (pendingMessages->size() > 0) | |||
| delete ((Message*) pendingMessages->remove(0)); | |||
| deleteAndZero (pendingMessages); | |||
| } | |||
| deleteAndZero (pendingMessages); | |||
| if (juceCustomMessageHandler != 0) | |||
| { | |||
| @@ -266042,7 +266035,7 @@ void MessageManager::doPlatformSpecificShutdown() | |||
| } | |||
| } | |||
| bool juce_postMessageToSystemQueue (void* message) | |||
| bool juce_postMessageToSystemQueue (Message* message) | |||
| { | |||
| if (pendingMessages != 0) | |||
| { | |||
| @@ -274114,9 +274107,6 @@ public: | |||
| CFRunLoopRemoveSource (runLoop, runLoopSource, kCFRunLoopCommonModes); | |||
| CFRunLoopSourceInvalidate (runLoopSource); | |||
| CFRelease (runLoopSource); | |||
| while (messages.size() > 0) | |||
| delete static_cast <Message*> (messages.remove(0)); | |||
| } | |||
| virtual NSApplicationTerminateReply shouldTerminate() | |||
| @@ -274183,7 +274173,7 @@ public: | |||
| delete this; | |||
| } | |||
| void postMessage (void* m) | |||
| void postMessage (Message* const m) | |||
| { | |||
| messages.add (m); | |||
| CFRunLoopSourceSignal (runLoopSource); | |||
| @@ -274193,7 +274183,7 @@ public: | |||
| private: | |||
| CFRunLoopRef runLoop; | |||
| CFRunLoopSourceRef runLoopSource; | |||
| Array <void*, CriticalSection> messages; | |||
| OwnedArray <Message, CriticalSection> messages; | |||
| void runLoopCallback() | |||
| { | |||
| @@ -274201,7 +274191,7 @@ private: | |||
| do | |||
| { | |||
| void* const nextMessage = messages.remove (0); | |||
| Message* const nextMessage = messages.removeAndReturn (0); | |||
| if (nextMessage == 0) | |||
| return; | |||
| @@ -274519,7 +274509,7 @@ void MessageManager::doPlatformSpecificShutdown() | |||
| } | |||
| } | |||
| bool juce_postMessageToSystemQueue (void* message) | |||
| bool juce_postMessageToSystemQueue (Message* message) | |||
| { | |||
| juceAppDelegate->redirector->postMessage (message); | |||
| return true; | |||
| @@ -64,7 +64,7 @@ | |||
| */ | |||
| #define JUCE_MAJOR_VERSION 1 | |||
| #define JUCE_MINOR_VERSION 52 | |||
| #define JUCE_BUILDNUMBER 23 | |||
| #define JUCE_BUILDNUMBER 24 | |||
| /** 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. | |||
| If the item isn't found, no action is taken. | |||
| @@ -7079,14 +7111,9 @@ public: | |||
| const ScopedLockType lock (getLock()); | |||
| if (howManyToRemove >= numUsed) | |||
| { | |||
| clear (deleteObjects); | |||
| } | |||
| else | |||
| { | |||
| while (--howManyToRemove >= 0) | |||
| remove (numUsed - 1, deleteObjects); | |||
| } | |||
| removeRange (numUsed - howManyToRemove, howManyToRemove, deleteObjects); | |||
| } | |||
| /** Swaps a pair of objects in the array. | |||
| @@ -42183,7 +42210,7 @@ public: | |||
| void deregisterBroadcastListener (ActionListener* listener) throw(); | |||
| /** @internal */ | |||
| void deliverMessage (void*); | |||
| void deliverMessage (Message*); | |||
| /** @internal */ | |||
| void deliverBroadcastMessage (const String&); | |||
| /** @internal */ | |||
| @@ -49874,7 +49901,7 @@ protected: | |||
| ScopedPointer <ResizableBorderComponent> resizableBorder; | |||
| private: | |||
| ScopedPointer <Component> contentComponent; | |||
| Component::SafePointer <Component> contentComponent; | |||
| bool resizeToFitContent, fullscreen; | |||
| ComponentDragger dragger; | |||
| 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. | |||
| If the item isn't found, no action is taken. | |||
| @@ -588,14 +620,9 @@ public: | |||
| const ScopedLockType lock (getLock()); | |||
| if (howManyToRemove >= numUsed) | |||
| { | |||
| clear (deleteObjects); | |||
| } | |||
| else | |||
| { | |||
| while (--howManyToRemove >= 0) | |||
| remove (numUsed - 1, deleteObjects); | |||
| } | |||
| removeRange (numUsed - howManyToRemove, howManyToRemove, deleteObjects); | |||
| } | |||
| /** Swaps a pair of objects in the array. | |||
| @@ -33,7 +33,7 @@ | |||
| */ | |||
| #define JUCE_MAJOR_VERSION 1 | |||
| #define JUCE_MINOR_VERSION 52 | |||
| #define JUCE_BUILDNUMBER 23 | |||
| #define JUCE_BUILDNUMBER 24 | |||
| /** Current Juce version number. | |||
| @@ -39,7 +39,7 @@ BEGIN_JUCE_NAMESPACE | |||
| //============================================================================== | |||
| // platform-specific functions.. | |||
| bool juce_dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages); | |||
| bool juce_postMessageToSystemQueue (void* message); | |||
| bool juce_postMessageToSystemQueue (Message* message); | |||
| //============================================================================== | |||
| MessageManager* MessageManager::instance = 0; | |||
| @@ -99,26 +99,26 @@ void MessageManager::postCallbackMessage (Message* const message) | |||
| //============================================================================== | |||
| // 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 | |||
| { | |||
| if (messageListeners.contains (recipient)) | |||
| { | |||
| recipient->handleMessage (*m); | |||
| recipient->handleMessage (*message); | |||
| } | |||
| else if (recipient == 0) | |||
| { | |||
| if (m->intParameter1 == quitMessageId) | |||
| if (message->intParameter1 == quitMessageId) | |||
| { | |||
| quitMessageReceived = true; | |||
| } | |||
| else | |||
| { | |||
| CallbackMessage* const cm = dynamic_cast <CallbackMessage*> (static_cast <Message*> (m)); | |||
| CallbackMessage* const cm = dynamic_cast <CallbackMessage*> (message); | |||
| if (cm != 0) | |||
| cm->messageCallback(); | |||
| @@ -156,7 +156,7 @@ public: | |||
| //============================================================================== | |||
| /** @internal */ | |||
| void deliverMessage (void*); | |||
| void deliverMessage (Message*); | |||
| /** @internal */ | |||
| void deliverBroadcastMessage (const String&); | |||
| /** @internal */ | |||
| @@ -78,7 +78,8 @@ ResizableWindow::~ResizableWindow() | |||
| { | |||
| resizableCorner = 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. | |||
| // Read the instructions for using a ResizableWindow! | |||
| @@ -104,9 +105,9 @@ void ResizableWindow::setContentComponent (Component* const newContentComponent, | |||
| 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; | |||
| Component::addAndMakeVisible (contentComponent); | |||
| @@ -342,7 +342,7 @@ protected: | |||
| ScopedPointer <ResizableBorderComponent> resizableBorder; | |||
| private: | |||
| ScopedPointer <Component> contentComponent; | |||
| Component::SafePointer <Component> contentComponent; | |||
| bool resizeToFitContent, fullscreen; | |||
| ComponentDragger dragger; | |||
| Rectangle<int> lastNonFullScreenPos; | |||
| @@ -207,9 +207,7 @@ private: | |||
| (void) numBytes; | |||
| } | |||
| Message* m = queue[0]; | |||
| queue.remove (0, false /* deleteObject */); | |||
| return m; | |||
| return queue.removeAndReturn (0); | |||
| } | |||
| bool dispatchNextInternalMessage() | |||
| @@ -380,12 +378,12 @@ void MessageManager::doPlatformSpecificShutdown() | |||
| } | |||
| } | |||
| bool juce_postMessageToSystemQueue (void* message) | |||
| bool juce_postMessageToSystemQueue (Message* message) | |||
| { | |||
| if (LinuxErrorHandling::errorOccurred) | |||
| return false; | |||
| InternalMessageQueue::getInstanceWithoutCreating()->postMessage ((Message*) message); | |||
| InternalMessageQueue::getInstanceWithoutCreating()->postMessage (message); | |||
| return true; | |||
| } | |||
| @@ -108,7 +108,7 @@ bool MessageManager::runDispatchLoopUntil (int millisecondsToRunFor) | |||
| //============================================================================== | |||
| static CFRunLoopRef runLoop = 0; | |||
| static CFRunLoopSourceRef runLoopSource = 0; | |||
| static Array <void*, CriticalSection>* pendingMessages = 0; | |||
| static OwnedArray <Message, CriticalSection>* pendingMessages = 0; | |||
| static JuceCustomMessageHandler* juceCustomMessageHandler = 0; | |||
| static void runLoopSourceCallback (void*) | |||
| @@ -119,7 +119,7 @@ static void runLoopSourceCallback (void*) | |||
| do | |||
| { | |||
| void* const nextMessage = pendingMessages->remove (0); | |||
| Message* const nextMessage = pendingMessages->removeAndReturn (0); | |||
| if (nextMessage == 0) | |||
| return; | |||
| @@ -136,7 +136,7 @@ static void runLoopSourceCallback (void*) | |||
| void MessageManager::doPlatformSpecificInitialisation() | |||
| { | |||
| pendingMessages = new Array <void*, CriticalSection>(); | |||
| pendingMessages = new OwnedArray <Message, CriticalSection>(); | |||
| runLoop = CFRunLoopGetCurrent(); | |||
| CFRunLoopSourceContext sourceContext; | |||
| @@ -154,14 +154,7 @@ void MessageManager::doPlatformSpecificShutdown() | |||
| CFRunLoopSourceInvalidate (runLoopSource); | |||
| CFRelease (runLoopSource); | |||
| runLoopSource = 0; | |||
| if (pendingMessages != 0) | |||
| { | |||
| while (pendingMessages->size() > 0) | |||
| delete ((Message*) pendingMessages->remove(0)); | |||
| deleteAndZero (pendingMessages); | |||
| } | |||
| deleteAndZero (pendingMessages); | |||
| if (juceCustomMessageHandler != 0) | |||
| { | |||
| @@ -171,7 +164,7 @@ void MessageManager::doPlatformSpecificShutdown() | |||
| } | |||
| } | |||
| bool juce_postMessageToSystemQueue (void* message) | |||
| bool juce_postMessageToSystemQueue (Message* message) | |||
| { | |||
| if (pendingMessages != 0) | |||
| { | |||
| @@ -60,9 +60,6 @@ public: | |||
| CFRunLoopRemoveSource (runLoop, runLoopSource, kCFRunLoopCommonModes); | |||
| CFRunLoopSourceInvalidate (runLoopSource); | |||
| CFRelease (runLoopSource); | |||
| while (messages.size() > 0) | |||
| delete static_cast <Message*> (messages.remove(0)); | |||
| } | |||
| virtual NSApplicationTerminateReply shouldTerminate() | |||
| @@ -129,7 +126,7 @@ public: | |||
| delete this; | |||
| } | |||
| void postMessage (void* m) | |||
| void postMessage (Message* const m) | |||
| { | |||
| messages.add (m); | |||
| CFRunLoopSourceSignal (runLoopSource); | |||
| @@ -139,7 +136,7 @@ public: | |||
| private: | |||
| CFRunLoopRef runLoop; | |||
| CFRunLoopSourceRef runLoopSource; | |||
| Array <void*, CriticalSection> messages; | |||
| OwnedArray <Message, CriticalSection> messages; | |||
| void runLoopCallback() | |||
| { | |||
| @@ -147,7 +144,7 @@ private: | |||
| do | |||
| { | |||
| void* const nextMessage = messages.remove (0); | |||
| Message* const nextMessage = messages.removeAndReturn (0); | |||
| if (nextMessage == 0) | |||
| return; | |||
| @@ -467,7 +464,7 @@ void MessageManager::doPlatformSpecificShutdown() | |||
| } | |||
| } | |||
| bool juce_postMessageToSystemQueue (void* message) | |||
| bool juce_postMessageToSystemQueue (Message* message) | |||
| { | |||
| juceAppDelegate->redirector->postMessage (message); | |||
| 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 | |||
| // dispatch loop and not calling our version | |||
| MessageManager::getInstance()->deliverMessage ((void*) lParam); | |||
| MessageManager::getInstance()->deliverMessage ((Message*) lParam); | |||
| return 0; | |||
| } | |||
| else if (message == broadcastId) | |||
| @@ -153,7 +153,7 @@ bool juce_dispatchNextMessageOnSystemQueue (const bool returnIfNoPendingMessages | |||
| { | |||
| 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) | |||
| { | |||
| @@ -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; | |||
| } | |||