mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-09 23:34:20 +00:00
This commit is contained in:
parent
f475ec19cd
commit
16719685c7
16 changed files with 87 additions and 66 deletions
|
|
@ -240,7 +240,7 @@ bool WaitableEvent::wait (const int timeOutMillisecs) const throw()
|
|||
bool ok = true;
|
||||
pthread_mutex_lock (&es->mutex);
|
||||
|
||||
if (!es->triggered)
|
||||
if (! es->triggered)
|
||||
{
|
||||
if (timeOutMillisecs < 0)
|
||||
{
|
||||
|
|
@ -252,28 +252,31 @@ bool WaitableEvent::wait (const int timeOutMillisecs) const throw()
|
|||
struct timeval t;
|
||||
int timeout = 0;
|
||||
|
||||
gettimeofday(&t,NULL);
|
||||
gettimeofday (&t, 0);
|
||||
|
||||
time.tv_sec = t.tv_sec + (timeOutMillisecs / 1000);
|
||||
time.tv_nsec = (t.tv_usec + ((timeOutMillisecs % 1000)*1000)) * 1000;
|
||||
while( time.tv_nsec >= 1000000000 )
|
||||
time.tv_nsec = (t.tv_usec + ((timeOutMillisecs % 1000) * 1000)) * 1000;
|
||||
|
||||
while (time.tv_nsec >= 1000000000)
|
||||
{
|
||||
time.tv_nsec -= 1000000000;
|
||||
time.tv_sec++;
|
||||
}
|
||||
|
||||
while( !timeout )
|
||||
while (! timeout)
|
||||
{
|
||||
timeout = pthread_cond_timedwait (&es->condition, &es->mutex, &time);
|
||||
if( !timeout )
|
||||
|
||||
if (! timeout)
|
||||
// Success
|
||||
break;
|
||||
|
||||
if( timeout == EINTR )
|
||||
if (timeout == EINTR)
|
||||
// Go round again
|
||||
timeout = 0;
|
||||
}
|
||||
}
|
||||
|
||||
ok = es->triggered;
|
||||
}
|
||||
|
||||
|
|
@ -377,7 +380,7 @@ void* Process::getProcedureEntryPoint (void* libraryHandle, const String& proced
|
|||
|
||||
|
||||
//==============================================================================
|
||||
InterProcessLock::InterProcessLock (const String& name_)
|
||||
InterProcessLock::InterProcessLock (const String& name_) throw()
|
||||
: internal (0),
|
||||
name (name_),
|
||||
reentrancyLevel (0)
|
||||
|
|
@ -389,7 +392,7 @@ InterProcessLock::InterProcessLock (const String& name_)
|
|||
internal = (void*) open (temp.getFullPathName().toUTF8(), 'a');
|
||||
}
|
||||
|
||||
InterProcessLock::~InterProcessLock()
|
||||
InterProcessLock::~InterProcessLock() throw()
|
||||
{
|
||||
while (reentrancyLevel > 0)
|
||||
this->exit();
|
||||
|
|
@ -401,7 +404,7 @@ InterProcessLock::~InterProcessLock()
|
|||
#endif
|
||||
}
|
||||
|
||||
bool InterProcessLock::enter (int timeOutMillisecs)
|
||||
bool InterProcessLock::enter (const int timeOutMillisecs) throw()
|
||||
{
|
||||
if (internal == 0)
|
||||
return false;
|
||||
|
|
@ -441,7 +444,7 @@ bool InterProcessLock::enter (int timeOutMillisecs)
|
|||
return false;
|
||||
}
|
||||
|
||||
void InterProcessLock::exit()
|
||||
void InterProcessLock::exit() throw()
|
||||
{
|
||||
if (reentrancyLevel > 0 && internal != 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ bool WaitableEvent::wait (const int timeOutMillisecs) const throw()
|
|||
bool ok = true;
|
||||
pthread_mutex_lock (&es->mutex);
|
||||
|
||||
if (!es->triggered)
|
||||
if (! es->triggered)
|
||||
{
|
||||
if (timeOutMillisecs < 0)
|
||||
{
|
||||
|
|
@ -289,7 +289,7 @@ void* Process::getProcedureEntryPoint (void* h, const String& procedureName)
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
InterProcessLock::InterProcessLock (const String& name_)
|
||||
InterProcessLock::InterProcessLock (const String& name_) throw()
|
||||
: internal (0),
|
||||
name (name_),
|
||||
reentrancyLevel (0)
|
||||
|
|
@ -301,7 +301,7 @@ InterProcessLock::InterProcessLock (const String& name_)
|
|||
internal = (void*) open (temp.getFullPathName().toUTF8(), O_NONBLOCK | O_RDONLY);
|
||||
}
|
||||
|
||||
InterProcessLock::~InterProcessLock()
|
||||
InterProcessLock::~InterProcessLock() throw()
|
||||
{
|
||||
while (reentrancyLevel > 0)
|
||||
this->exit();
|
||||
|
|
@ -309,7 +309,7 @@ InterProcessLock::~InterProcessLock()
|
|||
close ((int) internal);
|
||||
}
|
||||
|
||||
bool InterProcessLock::enter (int timeOutMillisecs)
|
||||
bool InterProcessLock::enter (const int timeOutMillisecs) throw()
|
||||
{
|
||||
if (internal == 0)
|
||||
return false;
|
||||
|
|
@ -349,7 +349,7 @@ bool InterProcessLock::enter (int timeOutMillisecs)
|
|||
return false;
|
||||
}
|
||||
|
||||
void InterProcessLock::exit()
|
||||
void InterProcessLock::exit() throw()
|
||||
{
|
||||
if (reentrancyLevel > 0 && internal != 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2226,8 +2226,15 @@ void Desktop::getMousePosition (int& x, int& y) throw()
|
|||
|
||||
void Desktop::setMousePosition (int x, int y) throw()
|
||||
{
|
||||
// this rubbish needs to be done around the warp call, to avoid causing a
|
||||
// bizarre glitch..
|
||||
CGAssociateMouseAndMouseCursorPosition (false);
|
||||
CGSetLocalEventsSuppressionInterval (0);
|
||||
|
||||
CGPoint pos = { x, y };
|
||||
CGWarpMouseCursorPosition (pos);
|
||||
CGWarpMouseCursorPosition (pos);
|
||||
|
||||
CGAssociateMouseAndMouseCursorPosition (true);
|
||||
}
|
||||
|
||||
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() throw()
|
||||
|
|
|
|||
|
|
@ -208,7 +208,7 @@ static const String getDSErrorMessage (HRESULT hr)
|
|||
break;
|
||||
|
||||
default:
|
||||
return T("Unknown error: ") + String ((int) hr);
|
||||
return "Unknown error: " + String ((int) hr);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
|
|||
|
|
@ -192,6 +192,8 @@ public:
|
|||
|
||||
lock.exit();
|
||||
|
||||
//xxx needs to figure out if blocks are broken up or not
|
||||
|
||||
if (len == 0)
|
||||
{
|
||||
wait (500);
|
||||
|
|
|
|||
|
|
@ -91,8 +91,8 @@ void CriticalSection::exit() const throw()
|
|||
|
||||
//==============================================================================
|
||||
WaitableEvent::WaitableEvent() throw()
|
||||
: internal (CreateEvent (0, FALSE, FALSE, 0))
|
||||
{
|
||||
internal = CreateEvent (0, FALSE, FALSE, 0);
|
||||
}
|
||||
|
||||
WaitableEvent::~WaitableEvent() throw()
|
||||
|
|
@ -341,19 +341,19 @@ void* Process::getProcedureEntryPoint (void* h, const String& name)
|
|||
|
||||
|
||||
//==============================================================================
|
||||
InterProcessLock::InterProcessLock (const String& name_)
|
||||
InterProcessLock::InterProcessLock (const String& name_) throw()
|
||||
: internal (0),
|
||||
name (name_),
|
||||
reentrancyLevel (0)
|
||||
{
|
||||
}
|
||||
|
||||
InterProcessLock::~InterProcessLock()
|
||||
InterProcessLock::~InterProcessLock() throw()
|
||||
{
|
||||
exit();
|
||||
}
|
||||
|
||||
bool InterProcessLock::enter (int timeOutMillisecs)
|
||||
bool InterProcessLock::enter (const int timeOutMillisecs) throw()
|
||||
{
|
||||
if (reentrancyLevel++ == 0)
|
||||
{
|
||||
|
|
@ -375,7 +375,7 @@ bool InterProcessLock::enter (int timeOutMillisecs)
|
|||
return (internal != 0);
|
||||
}
|
||||
|
||||
void InterProcessLock::exit()
|
||||
void InterProcessLock::exit() throw()
|
||||
{
|
||||
if (--reentrancyLevel == 0 && internal != 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -420,6 +420,7 @@ long improbableWindowNumber = 0xf965aa01; // also referenced by messaging.cpp
|
|||
|
||||
//==============================================================================
|
||||
static int currentModifiers = 0;
|
||||
static int modifiersAtLastCallback = 0;
|
||||
|
||||
static void updateKeyModifiers() throw()
|
||||
{
|
||||
|
|
@ -1549,6 +1550,15 @@ private:
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
void sendModifierKeyChangeIfNeeded()
|
||||
{
|
||||
if (modifiersAtLastCallback != currentModifiers)
|
||||
{
|
||||
modifiersAtLastCallback = currentModifiers;
|
||||
handleModifierKeysChange();
|
||||
}
|
||||
}
|
||||
|
||||
bool doKeyUp (const WPARAM key)
|
||||
{
|
||||
updateKeyModifiers();
|
||||
|
|
@ -1570,7 +1580,7 @@ private:
|
|||
case VK_LMENU:
|
||||
case VK_RCONTROL:
|
||||
case VK_RMENU:
|
||||
handleModifierKeysChange();
|
||||
sendModifierKeyChangeIfNeeded();
|
||||
}
|
||||
|
||||
return handleKeyUpOrDown();
|
||||
|
|
@ -1598,7 +1608,7 @@ private:
|
|||
case VK_NUMLOCK:
|
||||
case VK_SCROLL:
|
||||
case VK_APPS:
|
||||
handleModifierKeysChange();
|
||||
sendModifierKeyChangeIfNeeded();
|
||||
break;
|
||||
|
||||
case VK_LEFT:
|
||||
|
|
@ -1976,11 +1986,13 @@ private:
|
|||
juce_repeatLastProcessPriority();
|
||||
|
||||
juce_CheckCurrentlyFocusedTopLevelWindow();
|
||||
modifiersAtLastCallback = -1;
|
||||
return 0;
|
||||
|
||||
case WM_ACTIVATE:
|
||||
if (LOWORD (wParam) == WA_ACTIVE || LOWORD (wParam) == WA_CLICKACTIVE)
|
||||
{
|
||||
modifiersAtLastCallback = -1;
|
||||
updateKeyModifiers();
|
||||
|
||||
if (isMinimised())
|
||||
|
|
|
|||
|
|
@ -244,6 +244,10 @@ public:
|
|||
{
|
||||
PopupMenu::dismissAllActiveMenus();
|
||||
|
||||
Component* const modalComponent = Component::getCurrentlyModalComponent();
|
||||
if (modalComponent != 0)
|
||||
modalComponent->exitModalState (0);
|
||||
|
||||
filter->editorBeingDeleted (editorComp);
|
||||
deleteAndZero (editorComp);
|
||||
deleteAndZero (wrapper);
|
||||
|
|
|
|||
|
|
@ -901,15 +901,19 @@ public:
|
|||
const MessageManagerLock mml;
|
||||
#endif
|
||||
|
||||
Component* modalComponent = Component::getCurrentlyModalComponent();
|
||||
if (modalComponent != 0)
|
||||
modalComponent->exitModalState (0);
|
||||
|
||||
if (editorComp != 0)
|
||||
{
|
||||
Component* const modalComponent = Component::getCurrentlyModalComponent();
|
||||
if (modalComponent != 0)
|
||||
modalComponent->exitModalState (0);
|
||||
|
||||
filter->editorBeingDeleted (editorComp->getEditorComp());
|
||||
|
||||
deleteAndZero (editorComp);
|
||||
|
||||
// there's some kind of component currently modal, but the host
|
||||
// is trying to delete our plugin. You should try to avoid this happening..
|
||||
jassert (Component::getCurrentlyModalComponent() == 0);
|
||||
}
|
||||
|
||||
#if JUCE_MAC || JUCE_LINUX
|
||||
|
|
@ -917,10 +921,6 @@ public:
|
|||
#endif
|
||||
|
||||
recursionCheck = false;
|
||||
|
||||
// there's some kind of component currently modal, but the host
|
||||
// is trying to delete our plugin. You should try to avoid this happening..
|
||||
jassert (Component::getCurrentlyModalComponent() == 0);
|
||||
}
|
||||
|
||||
VstIntPtr dispatcher (VstInt32 opCode, VstInt32 index, VstIntPtr value, void* ptr, float opt)
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@ int JUCEApplication::main (String& commandLine, JUCEApplication* const app)
|
|||
|
||||
if (! app->moreThanOneInstanceAllowed())
|
||||
{
|
||||
appLock = new InterProcessLock (T("juceAppLock_") + app->getApplicationName());
|
||||
appLock = new InterProcessLock ("juceAppLock_" + app->getApplicationName());
|
||||
|
||||
if (! appLock->enter(0))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@
|
|||
@endcode
|
||||
*/
|
||||
class JUCE_API SplashScreen : public Component,
|
||||
private Timer,
|
||||
public Timer,
|
||||
private DeletedAtShutdown
|
||||
{
|
||||
public:
|
||||
|
|
@ -132,8 +132,8 @@ public:
|
|||
const bool useDropShadow);
|
||||
|
||||
//==============================================================================
|
||||
/** @internal */
|
||||
void paint (Graphics& g);
|
||||
|
||||
/** @internal */
|
||||
void timerCallback();
|
||||
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ BEGIN_JUCE_NAMESPACE
|
|||
//==============================================================================
|
||||
const String SystemStats::getJUCEVersion() throw()
|
||||
{
|
||||
return T("JUCE v") + String (JUCE_MAJOR_VERSION) + "." + String (JUCE_MINOR_VERSION);
|
||||
return "JUCE v" + String (JUCE_MAJOR_VERSION) + "." + String (JUCE_MINOR_VERSION);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -417,7 +417,7 @@ bool URL::launchInDefaultBrowser() const
|
|||
String u (toString (true));
|
||||
|
||||
if (u.contains (T("@")) && ! u.contains (T(":")))
|
||||
u = T("mailto:") + u;
|
||||
u = "mailto:" + u;
|
||||
|
||||
return juce_launchFile (u, String::empty);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ BEGIN_JUCE_NAMESPACE
|
|||
#endif
|
||||
|
||||
//==============================================================================
|
||||
static const tchar* const emptyCharString = T("\0\0\0\0JUCE");
|
||||
static const char* const emptyCharString = "\0\0\0\0JUCE";
|
||||
static const int safeEmptyStringRefCount = 0x3fffffff;
|
||||
String::InternalRefCountedStringHolder String::emptyString = { safeEmptyStringRefCount, 0, { 0 } };
|
||||
|
||||
|
|
@ -72,6 +72,15 @@ void String::createInternal (const int numChars) throw()
|
|||
text->text[0] = 0;
|
||||
}
|
||||
|
||||
void String::createInternal (const tchar* const t, const tchar* const textEnd) throw()
|
||||
{
|
||||
jassert (*(textEnd - 1) == 0); // must have a null terminator
|
||||
|
||||
const int numChars = (int) (textEnd - t);
|
||||
createInternal (numChars - 1);
|
||||
memcpy (text->text, t, numChars * sizeof (tchar));
|
||||
}
|
||||
|
||||
void String::appendInternal (const tchar* const newText,
|
||||
const int numExtraChars) throw()
|
||||
{
|
||||
|
|
@ -322,55 +331,40 @@ String::String (const int number) throw()
|
|||
{
|
||||
tchar buffer [16];
|
||||
tchar* const end = buffer + 16;
|
||||
const tchar* const t = intToCharString (end, number);
|
||||
|
||||
const int numChars = (int) (end - t);
|
||||
createInternal (numChars - 1);
|
||||
memcpy (text->text, t, numChars * sizeof (tchar));
|
||||
createInternal (intToCharString (end, number), end);
|
||||
}
|
||||
|
||||
String::String (const unsigned int number) throw()
|
||||
{
|
||||
tchar buffer [16];
|
||||
tchar* const end = buffer + 16;
|
||||
const tchar* const t = uintToCharString (end, number);
|
||||
|
||||
const int numChars = (int) (end - t);
|
||||
createInternal (numChars - 1);
|
||||
memcpy (text->text, t, numChars * sizeof (tchar));
|
||||
createInternal (uintToCharString (end, number), end);
|
||||
}
|
||||
|
||||
String::String (const short number) throw()
|
||||
{
|
||||
tchar buffer [16];
|
||||
tchar* const end = buffer + 16;
|
||||
const tchar* const t = intToCharString (end, (int) number);
|
||||
|
||||
const int numChars = (int) (end - t);
|
||||
createInternal (numChars - 1);
|
||||
memcpy (text->text, t, numChars * sizeof (tchar));
|
||||
createInternal (intToCharString (end, (int) number), end);
|
||||
}
|
||||
|
||||
String::String (const unsigned short number) throw()
|
||||
{
|
||||
tchar buffer [16];
|
||||
tchar* const end = buffer + 16;
|
||||
const tchar* const t = uintToCharString (end, (unsigned int) number);
|
||||
|
||||
const int numChars = (int) (end - t);
|
||||
createInternal (numChars - 1);
|
||||
memcpy (text->text, t, numChars * sizeof (tchar));
|
||||
createInternal (uintToCharString (end, (unsigned int) number), end);
|
||||
}
|
||||
|
||||
String::String (const int64 number) throw()
|
||||
{
|
||||
tchar buffer [32];
|
||||
tchar* const end = buffer + 32;
|
||||
const tchar* const t = int64ToCharString (end, number);
|
||||
|
||||
const int numChars = (int) (end - t);
|
||||
createInternal (numChars - 1);
|
||||
memcpy (text->text, t, numChars * sizeof (tchar));
|
||||
createInternal (int64ToCharString (end, number), end);
|
||||
}
|
||||
|
||||
String::String (const uint64 number) throw()
|
||||
|
|
@ -389,9 +383,7 @@ String::String (const uint64 number) throw()
|
|||
|
||||
} while (v > 0);
|
||||
|
||||
const int numChars = (int) (end - t);
|
||||
createInternal (numChars - 1);
|
||||
memcpy (text->text, t, numChars * sizeof (tchar));
|
||||
createInternal (t, end);
|
||||
}
|
||||
|
||||
// a double-to-string routine that actually uses the number of dec. places you asked for
|
||||
|
|
|
|||
|
|
@ -1043,6 +1043,7 @@ private:
|
|||
|
||||
void deleteInternal() throw();
|
||||
void createInternal (const int numChars) throw();
|
||||
void createInternal (const tchar* const text, const tchar* const textEnd) throw();
|
||||
void appendInternal (const tchar* const text, const int numExtraChars) throw();
|
||||
void doubleToStringWithDecPlaces (double n, int numDecPlaces) throw();
|
||||
void dupeInternalIfMultiplyReferenced() throw();
|
||||
|
|
|
|||
|
|
@ -49,13 +49,13 @@ public:
|
|||
|
||||
@param name a name that processes will use to identify this lock object
|
||||
*/
|
||||
InterProcessLock (const String& name);
|
||||
InterProcessLock (const String& name) throw();
|
||||
|
||||
/** Destructor.
|
||||
|
||||
This will also release the lock if it's currently held by this process.
|
||||
*/
|
||||
~InterProcessLock();
|
||||
~InterProcessLock() throw();
|
||||
|
||||
//==============================================================================
|
||||
/** Attempts to lock the critical section.
|
||||
|
|
@ -67,11 +67,11 @@ public:
|
|||
@returns true if the lock could be gained within the timeout period, or
|
||||
false if the timeout expired.
|
||||
*/
|
||||
bool enter (int timeOutMillisecs = -1);
|
||||
bool enter (int timeOutMillisecs = -1) throw();
|
||||
|
||||
/** Releases the lock if it's currently held by this process.
|
||||
*/
|
||||
void exit();
|
||||
void exit() throw();
|
||||
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue