diff --git a/docs/README-migration.md b/docs/README-migration.md index 61c8aadf3..4c34f365e 100644 --- a/docs/README-migration.md +++ b/docs/README-migration.md @@ -386,6 +386,8 @@ functionality to your app and aid migration. That is located in the SDL_AddHintCallback() now returns a standard int result instead of void, returning 0 if the function succeeds or a negative error code if there was an error. +Calling SDL_GetHint() with the name of the hint being changed from within a hint callback will now return the new value rather than the old value. The old value is still passed as a parameter to the hint callback. + The following hints have been removed: * SDL_HINT_VIDEO_HIGHDPI_DISABLED - high DPI support is always enabled * SDL_HINT_IDLE_TIMER_DISABLED - use SDL_DisableScreenSaver instead diff --git a/src/SDL_hints.c b/src/SDL_hints.c index e813a6f97..9ee0bc31c 100644 --- a/src/SDL_hints.c +++ b/src/SDL_hints.c @@ -65,14 +65,18 @@ SDL_bool SDL_SetHintWithPriority(const char *name, const char *value, SDL_HintPr } if (hint->value != value && (value == NULL || !hint->value || SDL_strcmp(hint->value, value) != 0)) { + char *old_value = hint->value; + + hint->value = value ? SDL_strdup(value) : NULL; for (entry = hint->callbacks; entry;) { /* Save the next entry in case this one is deleted */ SDL_HintWatch *next = entry->next; - entry->callback(entry->userdata, name, hint->value, value); + entry->callback(entry->userdata, name, old_value, value); entry = next; } - SDL_free(hint->value); - hint->value = value ? SDL_strdup(value) : NULL; + if (old_value) { + SDL_free(old_value); + } } hint->priority = priority; return SDL_TRUE;