summaryrefslogtreecommitdiffstats
path: root/platform
diff options
context:
space:
mode:
Diffstat (limited to 'platform')
-rw-r--r--platform/android/export/export_plugin.cpp13
-rw-r--r--platform/android/java/app/build.gradle68
-rw-r--r--platform/android/java/app/config.gradle16
-rw-r--r--platform/android/java/build.gradle232
-rw-r--r--platform/ios/export/export_plugin.cpp2
-rw-r--r--platform/linuxbsd/wayland/wayland_thread.cpp38
-rw-r--r--platform/macos/joypad_macos.mm5
-rw-r--r--platform/macos/os_macos.h1
-rw-r--r--platform/macos/os_macos.mm12
-rw-r--r--platform/windows/display_server_windows.cpp16
-rw-r--r--platform/windows/os_windows.cpp30
11 files changed, 158 insertions, 275 deletions
diff --git a/platform/android/export/export_plugin.cpp b/platform/android/export/export_plugin.cpp
index 5169b9417f..689360aef6 100644
--- a/platform/android/export/export_plugin.cpp
+++ b/platform/android/export/export_plugin.cpp
@@ -3270,18 +3270,17 @@ Error EditorExportPlatformAndroid::export_project_helper(const Ref<EditorExportP
}
List<String> copy_args;
- String copy_command;
- if (export_format == EXPORT_FORMAT_AAB) {
- copy_command = vformat("copyAndRename%sAab", build_type);
- } else if (export_format == EXPORT_FORMAT_APK) {
- copy_command = vformat("copyAndRename%sApk", build_type);
- }
-
+ String copy_command = "copyAndRenameBinary";
copy_args.push_back(copy_command);
copy_args.push_back("-p"); // argument to specify the start directory.
copy_args.push_back(build_path); // start directory.
+ copy_args.push_back("-Pexport_build_type=" + build_type.to_lower());
+
+ String export_format_arg = export_format == EXPORT_FORMAT_AAB ? "aab" : "apk";
+ copy_args.push_back("-Pexport_format=" + export_format_arg);
+
String export_filename = p_path.get_file();
String export_path = p_path.get_base_dir();
if (export_path.is_relative_path()) {
diff --git a/platform/android/java/app/build.gradle b/platform/android/java/app/build.gradle
index 01d5d9ef92..05b4f379b3 100644
--- a/platform/android/java/app/build.gradle
+++ b/platform/android/java/app/build.gradle
@@ -211,70 +211,24 @@ android {
}
}
-task copyAndRenameDebugApk(type: Copy) {
+task copyAndRenameBinary(type: Copy) {
// The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
// and directories. Otherwise this check may cause permissions access failures on Windows
// machines.
doNotTrackState("No need for up-to-date checks for the copy-and-rename operation")
- from "$buildDir/outputs/apk/debug/android_debug.apk"
- into getExportPath()
- rename "android_debug.apk", getExportFilename()
-}
+ String exportPath = getExportPath()
+ String exportFilename = getExportFilename()
+ String exportBuildType = getExportBuildType()
+ String exportFormat = getExportFormat()
-task copyAndRenameDevApk(type: Copy) {
- // The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
- // and directories. Otherwise this check may cause permissions access failures on Windows
- // machines.
- doNotTrackState("No need for up-to-date checks for the copy-and-rename operation")
-
- from "$buildDir/outputs/apk/dev/android_dev.apk"
- into getExportPath()
- rename "android_dev.apk", getExportFilename()
-}
-
-task copyAndRenameReleaseApk(type: Copy) {
- // The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
- // and directories. Otherwise this check may cause permissions access failures on Windows
- // machines.
- doNotTrackState("No need for up-to-date checks for the copy-and-rename operation")
-
- from "$buildDir/outputs/apk/release/android_release.apk"
- into getExportPath()
- rename "android_release.apk", getExportFilename()
-}
-
-task copyAndRenameDebugAab(type: Copy) {
- // The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
- // and directories. Otherwise this check may cause permissions access failures on Windows
- // machines.
- doNotTrackState("No need for up-to-date checks for the copy-and-rename operation")
-
- from "$buildDir/outputs/bundle/debug/build-debug.aab"
- into getExportPath()
- rename "build-debug.aab", getExportFilename()
-}
-
-task copyAndRenameDevAab(type: Copy) {
- // The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
- // and directories. Otherwise this check may cause permissions access failures on Windows
- // machines.
- doNotTrackState("No need for up-to-date checks for the copy-and-rename operation")
-
- from "$buildDir/outputs/bundle/dev/build-dev.aab"
- into getExportPath()
- rename "build-dev.aab", getExportFilename()
-}
-
-task copyAndRenameReleaseAab(type: Copy) {
- // The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
- // and directories. Otherwise this check may cause permissions access failures on Windows
- // machines.
- doNotTrackState("No need for up-to-date checks for the copy-and-rename operation")
+ boolean isAab = exportFormat == "aab"
+ String sourceFilepath = isAab ? "$buildDir/outputs/bundle/$exportBuildType/build-${exportBuildType}.aab" : "$buildDir/outputs/apk/$exportBuildType/android_${exportBuildType}.apk"
+ String sourceFilename = isAab ? "build-${exportBuildType}.aab" : "android_${exportBuildType}.apk"
- from "$buildDir/outputs/bundle/release/build-release.aab"
- into getExportPath()
- rename "build-release.aab", getExportFilename()
+ from sourceFilepath
+ into exportPath
+ rename sourceFilename, exportFilename
}
/**
diff --git a/platform/android/java/app/config.gradle b/platform/android/java/app/config.gradle
index eb9ad9de05..611a9c4a40 100644
--- a/platform/android/java/app/config.gradle
+++ b/platform/android/java/app/config.gradle
@@ -224,6 +224,22 @@ ext.getExportFilename = {
return exportFilename
}
+ext.getExportBuildType = {
+ String exportBuildType = project.hasProperty("export_build_type") ? project.property("export_build_type") : ""
+ if (exportBuildType == null || exportBuildType.isEmpty()) {
+ exportBuildType = "debug"
+ }
+ return exportBuildType
+}
+
+ext.getExportFormat = {
+ String exportFormat = project.hasProperty("export_format") ? project.property("export_format") : ""
+ if (exportFormat == null || exportFormat.isEmpty()) {
+ exportFormat = "apk"
+ }
+ return exportFormat
+}
+
/**
* Parse the project properties for the 'plugins_maven_repos' property and return the list
* of maven repos.
diff --git a/platform/android/java/build.gradle b/platform/android/java/build.gradle
index f5555289fd..771bda6948 100644
--- a/platform/android/java/build.gradle
+++ b/platform/android/java/build.gradle
@@ -35,116 +35,17 @@ ext {
// `./gradlew generateGodotTemplates` build command instead after running the `scons` command(s).
// The {selectedAbis} values must be from the {supportedAbis} values.
selectedAbis = ["arm64"]
-}
-def rootDir = "../../.."
-def binDir = "$rootDir/bin/"
-def androidEditorBuildsDir = "$binDir/android_editor_builds/"
+ rootDir = "../../.."
+ binDir = "$rootDir/bin/"
+ androidEditorBuildsDir = "$binDir/android_editor_builds/"
+}
def getSconsTaskName(String flavor, String buildType, String abi) {
return "compileGodotNativeLibs" + flavor.capitalize() + buildType.capitalize() + abi.capitalize()
}
/**
- * Copy the generated 'android_debug.apk' binary template into the Godot bin directory.
- * Depends on the app build task to ensure the binary is generated prior to copying.
- */
-task copyDebugBinaryToBin(type: Copy) {
- dependsOn ':app:assembleDebug'
- from('app/build/outputs/apk/debug')
- into(binDir)
- include('android_debug.apk')
-}
-
-/**
- * Copy the generated 'android_dev.apk' binary template into the Godot bin directory.
- * Depends on the app build task to ensure the binary is generated prior to copying.
- */
-task copyDevBinaryToBin(type: Copy) {
- dependsOn ':app:assembleDev'
- from('app/build/outputs/apk/dev')
- into(binDir)
- include('android_dev.apk')
-}
-
-/**
- * Copy the generated 'android_release.apk' binary template into the Godot bin directory.
- * Depends on the app build task to ensure the binary is generated prior to copying.
- */
-task copyReleaseBinaryToBin(type: Copy) {
- dependsOn ':app:assembleRelease'
- from('app/build/outputs/apk/release')
- into(binDir)
- include('android_release.apk')
-}
-
-/**
- * Copy the Godot android library archive debug file into the app module debug libs directory.
- * Depends on the library build task to ensure the AAR file is generated prior to copying.
- */
-task copyDebugAARToAppModule(type: Copy) {
- dependsOn ':lib:assembleTemplateDebug'
- from('lib/build/outputs/aar')
- into('app/libs/debug')
- include('godot-lib.template_debug.aar')
-}
-
-/**
- * Copy the Godot android library archive debug file into the root bin directory.
- * Depends on the library build task to ensure the AAR file is generated prior to copying.
- */
-task copyDebugAARToBin(type: Copy) {
- dependsOn ':lib:assembleTemplateDebug'
- from('lib/build/outputs/aar')
- into(binDir)
- include('godot-lib.template_debug.aar')
-}
-
-/**
- * Copy the Godot android library archive dev file into the app module dev libs directory.
- * Depends on the library build task to ensure the AAR file is generated prior to copying.
- */
-task copyDevAARToAppModule(type: Copy) {
- dependsOn ':lib:assembleTemplateDev'
- from('lib/build/outputs/aar')
- into('app/libs/dev')
- include('godot-lib.template_debug.dev.aar')
-}
-
-/**
- * Copy the Godot android library archive dev file into the root bin directory.
- * Depends on the library build task to ensure the AAR file is generated prior to copying.
- */
-task copyDevAARToBin(type: Copy) {
- dependsOn ':lib:assembleTemplateDev'
- from('lib/build/outputs/aar')
- into(binDir)
- include('godot-lib.template_debug.dev.aar')
-}
-
-/**
- * Copy the Godot android library archive release file into the app module release libs directory.
- * Depends on the library build task to ensure the AAR file is generated prior to copying.
- */
-task copyReleaseAARToAppModule(type: Copy) {
- dependsOn ':lib:assembleTemplateRelease'
- from('lib/build/outputs/aar')
- into('app/libs/release')
- include('godot-lib.template_release.aar')
-}
-
-/**
- * Copy the Godot android library archive release file into the root bin directory.
- * Depends on the library build task to ensure the AAR file is generated prior to copying.
- */
-task copyReleaseAARToBin(type: Copy) {
- dependsOn ':lib:assembleTemplateRelease'
- from('lib/build/outputs/aar')
- into(binDir)
- include('godot-lib.template_release.aar')
-}
-
-/**
* Generate Godot gradle build template by zipping the source files from the app directory, as well
* as the AAR files generated by 'copyDebugAAR', 'copyDevAAR' and 'copyReleaseAAR'.
* The zip file also includes some gradle tools to enable gradle builds from the Godot Editor.
@@ -197,7 +98,7 @@ def generateBuildTasks(String flavor = "template") {
throw new GradleException("Invalid build flavor: $flavor")
}
- def tasks = []
+ def buildTasks = []
// Only build the apks and aar files for which we have native shared libraries unless we intend
// to run the scons build tasks.
@@ -206,72 +107,93 @@ def generateBuildTasks(String flavor = "template") {
String libsDir = isTemplate ? "lib/libs/" : "lib/libs/tools/"
for (String target : supportedFlavorsBuildTypes[flavor]) {
File targetLibs = new File(libsDir + target)
+
+ String targetSuffix = target
+ if (target == "dev") {
+ targetSuffix = "debug.dev"
+ }
+
if (!excludeSconsBuildTasks || (targetLibs != null
&& targetLibs.isDirectory()
&& targetLibs.listFiles() != null
&& targetLibs.listFiles().length > 0)) {
+
String capitalizedTarget = target.capitalize()
if (isTemplate) {
- // Copy the generated aar library files to the build directory.
- tasks += "copy${capitalizedTarget}AARToAppModule"
- // Copy the generated aar library files to the bin directory.
- tasks += "copy${capitalizedTarget}AARToBin"
- // Copy the prebuilt binary templates to the bin directory.
- tasks += "copy${capitalizedTarget}BinaryToBin"
+ // Copy the Godot android library archive file into the app module libs directory.
+ // Depends on the library build task to ensure the AAR file is generated prior to copying.
+ String copyAARTaskName = "copy${capitalizedTarget}AARToAppModule"
+ if (tasks.findByName(copyAARTaskName) != null) {
+ buildTasks += tasks.getByName(copyAARTaskName)
+ } else {
+ buildTasks += tasks.create(name: copyAARTaskName, type: Copy) {
+ dependsOn ":lib:assembleTemplate${capitalizedTarget}"
+ from('lib/build/outputs/aar')
+ include("godot-lib.template_${targetSuffix}.aar")
+ into("app/libs/${target}")
+ }
+ }
+
+ // Copy the Godot android library archive file into the root bin directory.
+ // Depends on the library build task to ensure the AAR file is generated prior to copying.
+ String copyAARToBinTaskName = "copy${capitalizedTarget}AARToBin"
+ if (tasks.findByName(copyAARToBinTaskName) != null) {
+ buildTasks += tasks.getByName(copyAARToBinTaskName)
+ } else {
+ buildTasks += tasks.create(name: copyAARToBinTaskName, type: Copy) {
+ dependsOn ":lib:assembleTemplate${capitalizedTarget}"
+ from('lib/build/outputs/aar')
+ include("godot-lib.template_${targetSuffix}.aar")
+ into(binDir)
+ }
+ }
+
+ // Copy the generated binary template into the Godot bin directory.
+ // Depends on the app build task to ensure the binary is generated prior to copying.
+ String copyBinaryTaskName = "copy${capitalizedTarget}BinaryToBin"
+ if (tasks.findByName(copyBinaryTaskName) != null) {
+ buildTasks += tasks.getByName(copyBinaryTaskName)
+ } else {
+ buildTasks += tasks.create(name: copyBinaryTaskName, type: Copy) {
+ dependsOn ":app:assemble${capitalizedTarget}"
+ from("app/build/outputs/apk/${target}")
+ into(binDir)
+ include("android_${target}.apk")
+ }
+ }
} else {
// Copy the generated editor apk to the bin directory.
- tasks += "copyEditor${capitalizedTarget}ApkToBin"
+ String copyEditorApkTaskName = "copyEditor${capitalizedTarget}ApkToBin"
+ if (tasks.findByName(copyEditorApkTaskName) != null) {
+ buildTasks += tasks.getByName(copyEditorApkTaskName)
+ } else {
+ buildTasks += tasks.create(name: copyEditorApkTaskName, type: Copy) {
+ dependsOn ":editor:assemble${capitalizedTarget}"
+ from("editor/build/outputs/apk/${target}")
+ into(androidEditorBuildsDir)
+ include("android_editor-${target}*.apk")
+ }
+ }
+
// Copy the generated editor aab to the bin directory.
- tasks += "copyEditor${capitalizedTarget}AabToBin"
+ String copyEditorAabTaskName = "copyEditor${capitalizedTarget}AabToBin"
+ if (tasks.findByName(copyEditorAabTaskName) != null) {
+ buildTasks += tasks.getByName(copyEditorAabTaskName)
+ } else {
+ buildTasks += tasks.create(name: copyEditorAabTaskName, type: Copy) {
+ dependsOn ":editor:bundle${capitalizedTarget}"
+ from("editor/build/outputs/bundle/${target}")
+ into(androidEditorBuildsDir)
+ include("android_editor-${target}*.aab")
+ }
+ }
}
} else {
logger.lifecycle("No native shared libs for target $target. Skipping build.")
}
}
- return tasks
-}
-
-task copyEditorReleaseApkToBin(type: Copy) {
- dependsOn ':editor:assembleRelease'
- from('editor/build/outputs/apk/release')
- into(androidEditorBuildsDir)
- include('android_editor-release*.apk')
-}
-
-task copyEditorReleaseAabToBin(type: Copy) {
- dependsOn ':editor:bundleRelease'
- from('editor/build/outputs/bundle/release')
- into(androidEditorBuildsDir)
- include('android_editor-release*.aab')
-}
-
-task copyEditorDebugApkToBin(type: Copy) {
- dependsOn ':editor:assembleDebug'
- from('editor/build/outputs/apk/debug')
- into(androidEditorBuildsDir)
- include('android_editor-debug.apk')
-}
-
-task copyEditorDebugAabToBin(type: Copy) {
- dependsOn ':editor:bundleDebug'
- from('editor/build/outputs/bundle/debug')
- into(androidEditorBuildsDir)
- include('android_editor-debug.aab')
-}
-
-task copyEditorDevApkToBin(type: Copy) {
- dependsOn ':editor:assembleDev'
- from('editor/build/outputs/apk/dev')
- into(androidEditorBuildsDir)
- include('android_editor-dev.apk')
-}
-
-task copyEditorDevAabToBin(type: Copy) {
- dependsOn ':editor:bundleDev'
- from('editor/build/outputs/bundle/dev')
- into(androidEditorBuildsDir)
- include('android_editor-dev.aab')
+ return buildTasks
}
/**
diff --git a/platform/ios/export/export_plugin.cpp b/platform/ios/export/export_plugin.cpp
index 5b65c8b485..580e3ba789 100644
--- a/platform/ios/export/export_plugin.cpp
+++ b/platform/ios/export/export_plugin.cpp
@@ -1628,7 +1628,7 @@ Error EditorExportPlatformIOS::_copy_asset(const Ref<EditorExportPreset> &p_pres
asset_path = asset_path.path_join(framework_name);
destination_dir = p_out_dir.path_join(asset_path);
- destination = destination_dir.path_join(file_name);
+ destination = destination_dir;
// Convert to framework and copy.
Error err = _convert_to_framework(p_asset, destination, p_preset->get("application/bundle_identifier"));
diff --git a/platform/linuxbsd/wayland/wayland_thread.cpp b/platform/linuxbsd/wayland/wayland_thread.cpp
index dea8bae438..975d384bad 100644
--- a/platform/linuxbsd/wayland/wayland_thread.cpp
+++ b/platform/linuxbsd/wayland/wayland_thread.cpp
@@ -1263,23 +1263,25 @@ void WaylandThread::_wl_seat_on_capabilities(void *data, struct wl_seat *wl_seat
// Pointer handling.
if (capabilities & WL_SEAT_CAPABILITY_POINTER) {
- ss->cursor_surface = wl_compositor_create_surface(ss->registry->wl_compositor);
- wl_surface_commit(ss->cursor_surface);
+ if (!ss->wl_pointer) {
+ ss->cursor_surface = wl_compositor_create_surface(ss->registry->wl_compositor);
+ wl_surface_commit(ss->cursor_surface);
- ss->wl_pointer = wl_seat_get_pointer(wl_seat);
- wl_pointer_add_listener(ss->wl_pointer, &wl_pointer_listener, ss);
+ ss->wl_pointer = wl_seat_get_pointer(wl_seat);
+ wl_pointer_add_listener(ss->wl_pointer, &wl_pointer_listener, ss);
- if (ss->registry->wp_relative_pointer_manager) {
- ss->wp_relative_pointer = zwp_relative_pointer_manager_v1_get_relative_pointer(ss->registry->wp_relative_pointer_manager, ss->wl_pointer);
- zwp_relative_pointer_v1_add_listener(ss->wp_relative_pointer, &wp_relative_pointer_listener, ss);
- }
+ if (ss->registry->wp_relative_pointer_manager) {
+ ss->wp_relative_pointer = zwp_relative_pointer_manager_v1_get_relative_pointer(ss->registry->wp_relative_pointer_manager, ss->wl_pointer);
+ zwp_relative_pointer_v1_add_listener(ss->wp_relative_pointer, &wp_relative_pointer_listener, ss);
+ }
- if (ss->registry->wp_pointer_gestures) {
- ss->wp_pointer_gesture_pinch = zwp_pointer_gestures_v1_get_pinch_gesture(ss->registry->wp_pointer_gestures, ss->wl_pointer);
- zwp_pointer_gesture_pinch_v1_add_listener(ss->wp_pointer_gesture_pinch, &wp_pointer_gesture_pinch_listener, ss);
- }
+ if (ss->registry->wp_pointer_gestures) {
+ ss->wp_pointer_gesture_pinch = zwp_pointer_gestures_v1_get_pinch_gesture(ss->registry->wp_pointer_gestures, ss->wl_pointer);
+ zwp_pointer_gesture_pinch_v1_add_listener(ss->wp_pointer_gesture_pinch, &wp_pointer_gesture_pinch_listener, ss);
+ }
- // TODO: Constrain new pointers if the global mouse mode is constrained.
+ // TODO: Constrain new pointers if the global mouse mode is constrained.
+ }
} else {
if (ss->cursor_frame_callback) {
// Just in case. I got bitten by weird race-like conditions already.
@@ -1317,11 +1319,13 @@ void WaylandThread::_wl_seat_on_capabilities(void *data, struct wl_seat *wl_seat
// Keyboard handling.
if (capabilities & WL_SEAT_CAPABILITY_KEYBOARD) {
- ss->xkb_context = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
- ERR_FAIL_NULL(ss->xkb_context);
+ if (!ss->wl_keyboard) {
+ ss->xkb_context = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
+ ERR_FAIL_NULL(ss->xkb_context);
- ss->wl_keyboard = wl_seat_get_keyboard(wl_seat);
- wl_keyboard_add_listener(ss->wl_keyboard, &wl_keyboard_listener, ss);
+ ss->wl_keyboard = wl_seat_get_keyboard(wl_seat);
+ wl_keyboard_add_listener(ss->wl_keyboard, &wl_keyboard_listener, ss);
+ }
} else {
if (ss->xkb_context) {
xkb_context_unref(ss->xkb_context);
diff --git a/platform/macos/joypad_macos.mm b/platform/macos/joypad_macos.mm
index 8cd5cdd9f2..beb32d9129 100644
--- a/platform/macos/joypad_macos.mm
+++ b/platform/macos/joypad_macos.mm
@@ -228,7 +228,7 @@ void JoypadMacOS::joypad_vibration_stop(Joypad *p_joypad, uint64_t p_timestamp)
@property(assign, nonatomic) BOOL isObserving;
@property(assign, nonatomic) BOOL isProcessing;
@property(strong, nonatomic) NSMutableDictionary<NSNumber *, Joypad *> *connectedJoypads;
-@property(strong, nonatomic) NSMutableArray<Joypad *> *joypadsQueue;
+@property(strong, nonatomic) NSMutableArray<GCController *> *joypadsQueue;
@end
@@ -364,8 +364,7 @@ void JoypadMacOS::joypad_vibration_stop(Joypad *p_joypad, uint64_t p_timestamp)
if ([[self getAllKeysForController:controller] count] > 0) {
print_verbose("Controller is already registered.");
} else if (!self.isProcessing) {
- Joypad *joypad = [[Joypad alloc] init:controller];
- [self.joypadsQueue addObject:joypad];
+ [self.joypadsQueue addObject:controller];
} else {
[self addMacOSJoypad:controller];
}
diff --git a/platform/macos/os_macos.h b/platform/macos/os_macos.h
index df3a4009a3..303fc112bf 100644
--- a/platform/macos/os_macos.h
+++ b/platform/macos/os_macos.h
@@ -109,7 +109,6 @@ public:
virtual String get_executable_path() const override;
virtual Error create_process(const String &p_path, const List<String> &p_arguments, ProcessID *r_child_id = nullptr, bool p_open_console = false) override;
virtual Error create_instance(const List<String> &p_arguments, ProcessID *r_child_id = nullptr) override;
- virtual Error kill(const ProcessID &p_pid) override;
virtual bool is_process_running(const ProcessID &p_pid) const override;
virtual String get_unique_id() const override;
diff --git a/platform/macos/os_macos.mm b/platform/macos/os_macos.mm
index 495246344b..3a82514766 100644
--- a/platform/macos/os_macos.mm
+++ b/platform/macos/os_macos.mm
@@ -675,18 +675,6 @@ bool OS_MacOS::is_process_running(const ProcessID &p_pid) const {
return ![app isTerminated];
}
-Error OS_MacOS::kill(const ProcessID &p_pid) {
- NSRunningApplication *app = [NSRunningApplication runningApplicationWithProcessIdentifier:(pid_t)p_pid];
- if (!app) {
- return OS_Unix::kill(p_pid);
- }
- bool terminated = [app terminate];
- if (!terminated) {
- terminated = [app forceTerminate];
- }
- return terminated ? OK : ERR_INVALID_PARAMETER;
-}
-
String OS_MacOS::get_unique_id() const {
static String serial_number;
diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp
index 7e368b4c1e..88ab9a4af0 100644
--- a/platform/windows/display_server_windows.cpp
+++ b/platform/windows/display_server_windows.cpp
@@ -5391,13 +5391,15 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode,
{
WindowData *wd_transient_parent = nullptr;
HWND owner_hwnd = nullptr;
- if (p_transient_parent != INVALID_WINDOW_ID && !windows.has(p_transient_parent)) {
- ERR_PRINT("Condition \"!windows.has(p_transient_parent)\" is true.");
- p_transient_parent = INVALID_WINDOW_ID;
- } else {
- wd_transient_parent = &windows[p_transient_parent];
- if (p_exclusive) {
- owner_hwnd = wd_transient_parent->hWnd;
+ if (p_transient_parent != INVALID_WINDOW_ID) {
+ if (!windows.has(p_transient_parent)) {
+ ERR_PRINT("Condition \"!windows.has(p_transient_parent)\" is true.");
+ p_transient_parent = INVALID_WINDOW_ID;
+ } else {
+ wd_transient_parent = &windows[p_transient_parent];
+ if (p_exclusive) {
+ owner_hwnd = wd_transient_parent->hWnd;
+ }
}
}
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index 9025f53f42..40b265785f 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -379,6 +379,8 @@ Error OS_Windows::open_dynamic_library(const String &p_path, void *&p_library_ha
//this code exists so gdextension can load .dll files from within the executable path
path = get_executable_path().get_base_dir().path_join(p_path.get_file());
}
+ // Path to load from may be different from original if we make copies.
+ String load_path = path;
ERR_FAIL_COND_V(!FileAccess::exists(path), ERR_FILE_NOT_FOUND);
@@ -387,25 +389,22 @@ Error OS_Windows::open_dynamic_library(const String &p_path, void *&p_library_ha
if (p_data != nullptr && p_data->generate_temp_files) {
// Copy the file to the same directory as the original with a prefix in the name.
// This is so relative path to dependencies are satisfied.
- String copy_path = path.get_base_dir().path_join("~" + path.get_file());
+ load_path = path.get_base_dir().path_join("~" + path.get_file());
// If there's a left-over copy (possibly from a crash) then delete it first.
- if (FileAccess::exists(copy_path)) {
- DirAccess::remove_absolute(copy_path);
+ if (FileAccess::exists(load_path)) {
+ DirAccess::remove_absolute(load_path);
}
- Error copy_err = DirAccess::copy_absolute(path, copy_path);
+ Error copy_err = DirAccess::copy_absolute(path, load_path);
if (copy_err) {
ERR_PRINT("Error copying library: " + path);
return ERR_CANT_CREATE;
}
- FileAccess::set_hidden_attribute(copy_path, true);
+ FileAccess::set_hidden_attribute(load_path, true);
- // Save the copied path so it can be deleted later.
- path = copy_path;
-
- Error pdb_err = WindowsUtils::copy_and_rename_pdb(path);
+ Error pdb_err = WindowsUtils::copy_and_rename_pdb(load_path);
if (pdb_err != OK && pdb_err != ERR_SKIP) {
WARN_PRINT(vformat("Failed to rename the PDB file. The original PDB file for '%s' will be loaded.", path));
}
@@ -421,21 +420,21 @@ Error OS_Windows::open_dynamic_library(const String &p_path, void *&p_library_ha
DLL_DIRECTORY_COOKIE cookie = nullptr;
if (p_data != nullptr && p_data->also_set_library_path && has_dll_directory_api) {
- cookie = add_dll_directory((LPCWSTR)(path.get_base_dir().utf16().get_data()));
+ cookie = add_dll_directory((LPCWSTR)(load_path.get_base_dir().utf16().get_data()));
}
- p_library_handle = (void *)LoadLibraryExW((LPCWSTR)(path.utf16().get_data()), nullptr, (p_data != nullptr && p_data->also_set_library_path && has_dll_directory_api) ? LOAD_LIBRARY_SEARCH_DEFAULT_DIRS : 0);
+ p_library_handle = (void *)LoadLibraryExW((LPCWSTR)(load_path.utf16().get_data()), nullptr, (p_data != nullptr && p_data->also_set_library_path && has_dll_directory_api) ? LOAD_LIBRARY_SEARCH_DEFAULT_DIRS : 0);
if (!p_library_handle) {
if (p_data != nullptr && p_data->generate_temp_files) {
- DirAccess::remove_absolute(path);
+ DirAccess::remove_absolute(load_path);
}
#ifdef DEBUG_ENABLED
DWORD err_code = GetLastError();
- HashSet<String> checekd_libs;
+ HashSet<String> checked_libs;
HashSet<String> missing_libs;
- debug_dynamic_library_check_dependencies(path, path, checekd_libs, missing_libs);
+ debug_dynamic_library_check_dependencies(load_path, load_path, checked_libs, missing_libs);
if (!missing_libs.is_empty()) {
String missing;
for (const String &E : missing_libs) {
@@ -464,7 +463,8 @@ Error OS_Windows::open_dynamic_library(const String &p_path, void *&p_library_ha
}
if (p_data != nullptr && p_data->generate_temp_files) {
- temp_libraries[p_library_handle] = path;
+ // Save the copied path so it can be deleted later.
+ temp_libraries[p_library_handle] = load_path;
}
return OK;