sdl2-compat: Match SDL2 return values for SDL_GetShapedWindowMode()

From 72acec07a4d5f1a2c3e1815856065c5fd7338309 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Tue, 25 Mar 2025 10:47:12 -0700
Subject: [PATCH] Match SDL2 return values for SDL_GetShapedWindowMode()

Fixes https://github.com/libsdl-org/sdl2-compat/issues/416
---
 src/sdl2_compat.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/sdl2_compat.c b/src/sdl2_compat.c
index f50a4d6..b2d3c20 100644
--- a/src/sdl2_compat.c
+++ b/src/sdl2_compat.c
@@ -5509,13 +5509,25 @@ SDL_SetWindowShape(SDL_Window *window, SDL2_Surface *shape, SDL_WindowShapeMode
 SDL_DECLSPEC int SDLCALL
 SDL_GetShapedWindowMode(SDL_Window *window, SDL_WindowShapeMode *shape_mode)
 {
-    SDL_WindowShapeMode *property = (SDL_WindowShapeMode *)SDL3_GetPointerProperty(SDL3_GetWindowProperties(window), PROP_WINDOW_SHAPE_MODE_POINTER, NULL);
-    if (!property) {
+    SDL_WindowShapeMode *property;
+
+    if (!SDL_IsShapedWindow(window)) {
         return SDL_NONSHAPEABLE_WINDOW;
     }
 
+    property = (SDL_WindowShapeMode *)SDL3_GetPointerProperty(SDL3_GetWindowProperties(window), PROP_WINDOW_SHAPE_MODE_POINTER, NULL);
+    if (!shape_mode && !property) {
+        return SDL_WINDOW_LACKS_SHAPE;
+    }
     if (shape_mode) {
-        SDL3_copyp(shape_mode, property);
+        if (property) {
+            SDL3_copyp(shape_mode, property);
+        } else {
+            /* Default parameters */
+            SDL_zerop(shape_mode);
+            shape_mode->mode = ShapeModeDefault;
+            shape_mode->parameters.binarizationCutoff = 1;
+        }
     }
     return 0;
 }