diff --git a/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.h b/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.h index f696766be2..1a760d4c86 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.h +++ b/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.h @@ -42,6 +42,7 @@ protected: public: //============================================================================== virtual bool isRoot() const { return false; } + virtual bool acceptsFileDrop (const StringArray& files) const = 0; virtual bool acceptsDragItems (const OwnedArray & selectedNodes) = 0; diff --git a/modules/juce_core/native/juce_android_SystemStats.cpp b/modules/juce_core/native/juce_android_SystemStats.cpp index 605faac972..ae68b47537 100644 --- a/modules/juce_core/native/juce_android_SystemStats.cpp +++ b/modules/juce_core/native/juce_android_SystemStats.cpp @@ -26,8 +26,7 @@ ============================================================================== */ -JNIClassBase::JNIClassBase (const char* classPath_) - : classPath (classPath_), classRef (0) +JNIClassBase::JNIClassBase (const char* cp) : classPath (cp), classRef (0) { getClasses().add (this); } @@ -129,8 +128,7 @@ AndroidSystem::AndroidSystem() : screenWidth (0), screenHeight (0), dpi (160) { } -void AndroidSystem::initialise (JNIEnv* env, jobject activity_, - jstring appFile_, jstring appDataDir_) +void AndroidSystem::initialise (JNIEnv* env, jobject act, jstring file, jstring dataDir) { screenWidth = screenHeight = 0; dpi = 160; @@ -141,9 +139,9 @@ void AndroidSystem::initialise (JNIEnv* env, jobject activity_, systemInitialised = true; #endif - activity = GlobalRef (activity_); - appFile = juceString (env, appFile_); - appDataDir = juceString (env, appDataDir_); + activity = GlobalRef (act); + appFile = juceString (env, file); + appDataDir = juceString (env, dataDir); } void AndroidSystem::shutdown (JNIEnv* env) @@ -162,14 +160,12 @@ AndroidSystem android; //============================================================================== namespace AndroidStatsHelpers { - //============================================================================== #define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD) \ STATICMETHOD (getProperty, "getProperty", "(Ljava/lang/String;)Ljava/lang/String;") DECLARE_JNI_CLASS (SystemClass, "java/lang/System"); #undef JNI_CLASS_MEMBERS - //============================================================================== String getSystemProperty (const String& name) { return juceString (LocalRef ((jstring) getEnv()->CallStaticObjectMethod (SystemClass, @@ -177,7 +173,6 @@ namespace AndroidStatsHelpers javaString (name).get()))); } - //============================================================================== String getLocaleValue (bool isRegion) { return juceString (LocalRef ((jstring) getEnv()->CallStaticObjectMethod (JuceAppActivity, @@ -236,16 +231,13 @@ int SystemStats::getPageSize() //============================================================================== String SystemStats::getLogonName() { - const char* user = getenv ("USER"); + if (const char* user = getenv ("USER")) + return CharPointer_UTF8 (user); - if (user == 0) - { - struct passwd* const pw = getpwuid (getuid()); - if (pw != 0) - user = pw->pw_name; - } + if (struct passwd* const pw = getpwuid (getuid())) + return CharPointer_UTF8 (pw->pw_name); - return CharPointer_UTF8 (user); + return String::empty; } String SystemStats::getFullUserName() diff --git a/modules/juce_core/native/juce_linux_Files.cpp b/modules/juce_core/native/juce_linux_Files.cpp index 63682460f2..4667e9ab78 100644 --- a/modules/juce_core/native/juce_linux_Files.cpp +++ b/modules/juce_core/native/juce_linux_Files.cpp @@ -165,13 +165,13 @@ File File::getSpecialLocation (const SpecialLocationType type) { case userHomeDirectory: { - const char* homeDir = getenv ("HOME"); + if (const char* homeDir = getenv ("HOME")) + return File (CharPointer_UTF8 (homeDir)); - if (homeDir == nullptr) - if (struct passwd* const pw = getpwuid (getuid())) - homeDir = pw->pw_dir; + if (struct passwd* const pw = getpwuid (getuid())) + return File (CharPointer_UTF8 (pw->pw_dir)); - return File (CharPointer_UTF8 (homeDir)); + return File::nonexistent; } case userDocumentsDirectory: return resolveXDGFolder ("XDG_DOCUMENTS_DIR", "~"); @@ -247,10 +247,9 @@ bool File::moveToTrash() const class DirectoryIterator::NativeIterator::Pimpl { public: - Pimpl (const File& directory, const String& wildCard_) + Pimpl (const File& directory, const String& wc) : parentDir (File::addTrailingSeparator (directory.getFullPathName())), - wildCard (wildCard_), - dir (opendir (directory.getFullPathName().toUTF8())) + wildCard (wc), dir (opendir (directory.getFullPathName().toUTF8())) { } diff --git a/modules/juce_core/native/juce_linux_SystemStats.cpp b/modules/juce_core/native/juce_linux_SystemStats.cpp index 0c13ff188e..1062b6593f 100644 --- a/modules/juce_core/native/juce_linux_SystemStats.cpp +++ b/modules/juce_core/native/juce_linux_SystemStats.cpp @@ -96,13 +96,13 @@ int SystemStats::getPageSize() //============================================================================== String SystemStats::getLogonName() { - const char* user = getenv ("USER"); + if (const char* user = getenv ("USER")) + return CharPointer_UTF8 (user); - if (user == nullptr) - if (passwd* const pw = getpwuid (getuid())) - user = pw->pw_name; + if (struct passwd* const pw = getpwuid (getuid())) + return CharPointer_UTF8 (pw->pw_name); - return CharPointer_UTF8 (user); + return String::empty; } String SystemStats::getFullUserName() diff --git a/modules/juce_core/text/juce_String.cpp b/modules/juce_core/text/juce_String.cpp index 4678b80f76..26febf7652 100644 --- a/modules/juce_core/text/juce_String.cpp +++ b/modules/juce_core/text/juce_String.cpp @@ -645,21 +645,6 @@ String& String::operator+= (const wchar_t* const t) String& String::operator+= (const char* const t) { - /* If you get an assertion here, then you're trying to create a string from 8-bit data - that contains values greater than 127. These can NOT be correctly converted to unicode - because there's no way for the String class to know what encoding was used to - create them. The source data could be UTF-8, ASCII or one of many local code-pages. - - To get around this problem, you must be more explicit when you pass an ambiguous 8-bit - string to the String class - so for example if your source data is actually UTF-8, - you'd call String (CharPointer_UTF8 ("my utf8 string..")), and it would be able to - correctly convert the multi-byte characters to unicode. It's *highly* recommended that - you use UTF-8 with escape characters in your source code to represent extended characters, - because there's no other way to represent these strings in a way that isn't dependent on - the compiler, source code editor and platform. - */ - jassert (t == nullptr || CharPointer_ASCII::isValidString (t, std::numeric_limits::max())); - appendCharPointer (CharPointer_UTF8 (t)); // (using UTF8 here triggers a faster code-path than ascii) return *this; } @@ -2093,9 +2078,30 @@ String String::fromUTF8 (const char* const buffer, int bufferSizeBytes) StringRef::StringRef (const String::CharPointerType::CharType* stringLiteral) noexcept : text (stringLiteral) { jassert (stringLiteral != nullptr); // This must be a valid string literal, not a null pointer!! + + #if JUCE_NATIVE_WCHAR_IS_UTF8 + /* If you get an assertion here, then you're trying to create a string from 8-bit data + that contains values greater than 127. These can NOT be correctly converted to unicode + because there's no way for the String class to know what encoding was used to + create them. The source data could be UTF-8, ASCII or one of many local code-pages. + + To get around this problem, you must be more explicit when you pass an ambiguous 8-bit + string to the String class - so for example if your source data is actually UTF-8, + you'd call String (CharPointer_UTF8 ("my utf8 string..")), and it would be able to + correctly convert the multi-byte characters to unicode. It's *highly* recommended that + you use UTF-8 with escape characters in your source code to represent extended characters, + because there's no other way to represent these strings in a way that isn't dependent on + the compiler, source code editor and platform. + */ + jassert (CharPointer_ASCII::isValidString (stringLiteral, std::numeric_limits::max())); + #endif +} + +StringRef::StringRef (String::CharPointerType stringLiteral) noexcept : text (stringLiteral) +{ + jassert (stringLiteral.getAddress() != nullptr); // This must be a valid string literal, not a null pointer!! } -StringRef::StringRef (String::CharPointerType stringLiteral) noexcept : text (stringLiteral) {} StringRef::StringRef (const String& string) noexcept : text (string.getCharPointer()) {} //==============================================================================