diff --git a/modules/juce_core/native/juce_win32_Files.cpp b/modules/juce_core/native/juce_win32_Files.cpp index f3d1fd6ddf..2052961e47 100644 --- a/modules/juce_core/native/juce_win32_Files.cpp +++ b/modules/juce_core/native/juce_win32_Files.cpp @@ -42,9 +42,13 @@ namespace WindowsFileHelpers return (int64) ((reinterpret_cast (ft)->QuadPart - literal64bit (116444736000000000)) / 10000); } - void timeToFileTime (const int64 time, FILETIME* const ft) + FILETIME* timeToFileTime (const int64 time, FILETIME* const ft) noexcept { + if (time <= 0) + return nullptr; + reinterpret_cast (ft)->QuadPart = (ULONGLONG) (time * 10000 + literal64bit (116444736000000000)); + return ft; } String getDriveFromPath (String path) @@ -89,6 +93,14 @@ namespace WindowsFileHelpers return File::nonexistent; } + File getModuleFileName (HINSTANCE moduleHandle) + { + WCHAR dest [MAX_PATH + 256]; + dest[0] = 0; + GetModuleFileName (moduleHandle, dest, (DWORD) numElementsInArray (dest)); + return File (String (dest)); + } + Result getResultForLastError() { TCHAR messageBuffer [256] = { 0 }; @@ -367,8 +379,8 @@ void File::getFileTimesInternal (int64& modificationTime, int64& accessTime, int if (GetFileAttributesEx (fullPath.toWideCharPointer(), GetFileExInfoStandard, &attributes)) { modificationTime = fileTimeToTime (&attributes.ftLastWriteTime); - creationTime = fileTimeToTime (&attributes.ftCreationTime); - accessTime = fileTimeToTime (&attributes.ftLastAccessTime); + creationTime = fileTimeToTime (&attributes.ftCreationTime); + accessTime = fileTimeToTime (&attributes.ftLastAccessTime); } else { @@ -387,14 +399,11 @@ bool File::setFileTimesInternal (int64 modificationTime, int64 accessTime, int64 if (h != INVALID_HANDLE_VALUE) { FILETIME m, a, c; - timeToFileTime (modificationTime, &m); - timeToFileTime (accessTime, &a); - timeToFileTime (creationTime, &c); ok = SetFileTime (h, - creationTime > 0 ? &c : 0, - accessTime > 0 ? &a : 0, - modificationTime > 0 ? &m : 0) != 0; + timeToFileTime (creationTime, &c), + timeToFileTime (accessTime, &a), + timeToFileTime (modificationTime, &m)) != 0; CloseHandle (h); } @@ -517,22 +526,10 @@ File JUCE_CALLTYPE File::getSpecialLocation (const SpecialLocationType type) case invokedExecutableFile: case currentExecutableFile: case currentApplicationFile: - { - HINSTANCE moduleHandle = (HINSTANCE) Process::getCurrentModuleInstanceHandle(); - - WCHAR dest [MAX_PATH + 256]; - dest[0] = 0; - GetModuleFileName (moduleHandle, dest, (DWORD) numElementsInArray (dest)); - return File (String (dest)); - } + return WindowsFileHelpers::getModuleFileName ((HINSTANCE) Process::getCurrentModuleInstanceHandle()); case hostApplicationPath: - { - WCHAR dest [MAX_PATH + 256]; - dest[0] = 0; - GetModuleFileName (0, dest, (DWORD) numElementsInArray (dest)); - return File (String (dest)); - } + return WindowsFileHelpers::getModuleFileName (0); default: jassertfalse; // unknown type? diff --git a/modules/juce_events/messages/juce_MessageManager.h b/modules/juce_events/messages/juce_MessageManager.h index 2caaa5dbbb..b66e8bd6b6 100644 --- a/modules/juce_events/messages/juce_MessageManager.h +++ b/modules/juce_events/messages/juce_MessageManager.h @@ -122,10 +122,10 @@ public: */ void setCurrentThreadAsMessageThread(); - /** Returns the ID of the current message thread, as set by setCurrentMessageThread(). + /** Returns the ID of the current message thread, as set by setCurrentThreadAsMessageThread(). (Best to ignore this method unless you really know what you're doing..) - @see setCurrentMessageThread + @see setCurrentThreadAsMessageThread */ Thread::ThreadID getCurrentMessageThread() const noexcept { return messageThreadId; } diff --git a/modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp b/modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp index a001cfc760..066632df2f 100644 --- a/modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp +++ b/modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp @@ -207,14 +207,16 @@ void TabbedButtonBar::addTab (const String& tabName, if (! isPositiveAndBelow (insertIndex, tabs.size())) insertIndex = tabs.size(); + TabInfo* const currentTab = tabs [currentTabIndex]; + TabInfo* newTab = new TabInfo(); newTab->name = tabName; newTab->colour = tabBackgroundColour; newTab->component = createTabButton (tabName, insertIndex); - jassert (newTab->component != nullptr); tabs.insert (insertIndex, newTab); + currentTabIndex = tabs.indexOf (currentTab); addAndMakeVisible (newTab->component, insertIndex); resized(); @@ -238,22 +240,20 @@ void TabbedButtonBar::setTabName (const int tabIndex, const String& newName) void TabbedButtonBar::removeTab (const int tabIndex) { - if (tabs [tabIndex] != nullptr) - { - const int oldTabIndex = currentTabIndex; - if (currentTabIndex == tabIndex) - currentTabIndex = -1; + if (tabIndex == currentTabIndex) + setCurrentTabIndex (-1); - tabs.remove (tabIndex); - resized(); - - setCurrentTabIndex (jlimit (0, jmax (0, tabs.size() - 1), oldTabIndex)); - } + TabInfo* const currentTab = tabs [currentTabIndex]; + tabs.remove (tabIndex); + currentTabIndex = tabs.indexOf (currentTab); + resized(); } void TabbedButtonBar::moveTab (const int currentIndex, const int newIndex) { + TabInfo* const currentTab = tabs [currentTabIndex]; tabs.move (currentIndex, newIndex); + currentTabIndex = tabs.indexOf (currentTab); resized(); }