Browse Source

Merge pull request #32518 from nekomatata/fix-revert-cursor

Properly revert cursor when using set_custom_mouse_cursor with null
Rémi Verschelde 5 years ago
parent
commit
9a115ccaf3

+ 2 - 0
platform/javascript/os_javascript.cpp

@@ -574,6 +574,8 @@ void OS_JavaScript::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_s
 		}, cursors[p_shape].utf8().get_data());
 		}, cursors[p_shape].utf8().get_data());
 		/* clang-format on */
 		/* clang-format on */
 		cursors[p_shape] = "";
 		cursors[p_shape] = "";
+
+		cursors_cache.erase(p_shape);
 	}
 	}
 
 
 	set_cursor_shape(cursor_shape);
 	set_cursor_shape(cursor_shape);

+ 6 - 1
platform/osx/os_osx.mm

@@ -1973,11 +1973,16 @@ void OS_OSX::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, c
 		[nsimage release];
 		[nsimage release];
 	} else {
 	} else {
 		// Reset to default system cursor
 		// Reset to default system cursor
-		cursors[p_shape] = NULL;
+		if (cursors[p_shape] != NULL) {
+			[cursors[p_shape] release];
+			cursors[p_shape] = NULL;
+		}
 
 
 		CursorShape c = cursor_shape;
 		CursorShape c = cursor_shape;
 		cursor_shape = CURSOR_MAX;
 		cursor_shape = CURSOR_MAX;
 		set_cursor_shape(c);
 		set_cursor_shape(c);
+
+		cursors_cache.erase(p_shape);
 	}
 	}
 }
 }
 
 

+ 6 - 1
platform/windows/os_windows.cpp

@@ -2485,11 +2485,16 @@ void OS_Windows::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shap
 		DeleteObject(bitmap);
 		DeleteObject(bitmap);
 	} else {
 	} else {
 		// Reset to default system cursor
 		// Reset to default system cursor
-		cursors[p_shape] = NULL;
+		if (cursors[p_shape]) {
+			DestroyIcon(cursors[p_shape]);
+			cursors[p_shape] = NULL;
+		}
 
 
 		CursorShape c = cursor_shape;
 		CursorShape c = cursor_shape;
 		cursor_shape = CURSOR_MAX;
 		cursor_shape = CURSOR_MAX;
 		set_cursor_shape(c);
 		set_cursor_shape(c);
+
+		cursors_cache.erase(p_shape);
 	}
 	}
 }
 }
 
 

+ 2 - 0
platform/x11/os_x11.cpp

@@ -2996,6 +2996,8 @@ void OS_X11::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, c
 		CursorShape c = current_cursor;
 		CursorShape c = current_cursor;
 		current_cursor = CURSOR_MAX;
 		current_cursor = CURSOR_MAX;
 		set_cursor_shape(c);
 		set_cursor_shape(c);
+
+		cursors_cache.erase(p_shape);
 	}
 	}
 }
 }