void SDL_MouseQuit(void) { SDL_Cursor *cursor, *next; SDL_Mouse *mouse = SDL_GetMouse(); if (mouse->CaptureMouse) { SDL_CaptureMouse(SDL_FALSE); } SDL_SetRelativeMouseMode(SDL_FALSE); SDL_ShowCursor(1); cursor = mouse->cursors; while (cursor) { next = cursor->next; SDL_FreeCursor(cursor); cursor = next; } if (mouse->def_cursor && mouse->FreeCursor) { mouse->FreeCursor(mouse->def_cursor); } if (mouse->clickstate) { SDL_free(mouse->clickstate); } SDL_zerop(mouse); SDL_DelHintCallback(SDL_HINT_MOUSE_NORMAL_SPEED_SCALE, SDL_MouseNormalSpeedScaleChanged, mouse); SDL_DelHintCallback(SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE, SDL_MouseRelativeSpeedScaleChanged, mouse); }
void SDL_IBus_Quit(void) { SDL_DBusContext *dbus; if (input_ctx_path) { SDL_free(input_ctx_path); input_ctx_path = NULL; } if (ibus_addr_file) { SDL_free(ibus_addr_file); ibus_addr_file = NULL; } dbus = SDL_DBus_GetContext(); if (dbus && ibus_conn) { dbus->connection_close(ibus_conn); dbus->connection_unref(ibus_conn); } if (inotify_fd > 0 && inotify_wd > 0) { inotify_rm_watch(inotify_fd, inotify_wd); inotify_wd = -1; } SDL_DelHintCallback(SDL_HINT_IME_INTERNAL_EDITING, &IBus_SetCapabilities, NULL); SDL_memset(&ibus_cursor_rect, 0, sizeof(ibus_cursor_rect)); }
void SDL_JoystickQuit(void) { /* Make sure we're not getting called in the middle of updating joysticks */ SDL_assert(!SDL_updating_joystick); SDL_LockJoysticks(); /* Stop the event polling */ while (SDL_joysticks) { SDL_joysticks->ref_count = 1; SDL_JoystickClose(SDL_joysticks); } /* Quit the joystick setup */ SDL_SYS_JoystickQuit(); SDL_UnlockJoysticks(); #if !SDL_EVENTS_DISABLED SDL_QuitSubSystem(SDL_INIT_EVENTS); #endif SDL_DelHintCallback(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, SDL_JoystickAllowBackgroundEventsChanged, NULL); if (SDL_joystick_lock) { SDL_DestroyMutex(SDL_joystick_lock); SDL_joystick_lock = NULL; } SDL_GameControllerQuitMappings(); }
void SDL_AddHintCallback(const char *name, SDL_HintCallback callback, void *userdata) { SDL_Hint *hint; SDL_HintWatch *entry; const char *value; if (!name || !*name) { SDL_InvalidParamError("name"); return; } if (!callback) { SDL_InvalidParamError("callback"); return; } SDL_DelHintCallback(name, callback, userdata); entry = (SDL_HintWatch *)SDL_malloc(sizeof(*entry)); if (!entry) { SDL_OutOfMemory(); return; } entry->callback = callback; entry->userdata = userdata; for (hint = SDL_hints; hint; hint = hint->next) { if (SDL_strcmp(name, hint->name) == 0) { break; } } if (!hint) { /* Need to add a hint entry for this watcher */ hint = (SDL_Hint *)SDL_malloc(sizeof(*hint)); if (!hint) { SDL_OutOfMemory(); SDL_free(entry); return; } hint->name = SDL_strdup(name); hint->value = NULL; hint->priority = SDL_HINT_DEFAULT; hint->callbacks = NULL; hint->next = SDL_hints; SDL_hints = hint; } /* Add it to the callbacks for this hint */ entry->next = hint->callbacks; hint->callbacks = entry; /* Now call it with the current value */ value = SDL_GetHint(name); callback(userdata, name, value, value); }
void SDL_TicksQuit(void) { SDL_DelHintCallback(SDL_HINT_TIMER_RESOLUTION, SDL_TimerResolutionChanged, NULL); SDL_SetSystemTimerResolution(0); /* always release our timer resolution request. */ start = 0; ticks_started = SDL_FALSE; }
void SDL_TicksQuit(void) { #ifndef USE_GETTICKCOUNT if (!hires_timer_available) { #ifndef __WINRT__ SDL_DelHintCallback(SDL_HINT_TIMER_RESOLUTION, SDL_TimerResolutionChanged, NULL); timeSetPeriod(0); #endif /* __WINRT__ */ } #endif /* USE_GETTICKCOUNT */ ticks_started = SDL_FALSE; }
void Android_QuitTouch(void) { SDL_DelHintCallback(SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH, SeparateEventsHintWatcher, NULL); separate_mouse_and_touch = SDL_FALSE; }
static void QtExtendedSurface_Unsubscribe(struct qt_extended_surface *surface, const char *name) { SDL_DelHintCallback(name, QtExtendedSurface_OnHintChanged, surface); }