|
cd2bdaef
|
2020-05-06T11:19:52
|
|
ControllerList: add PDP Faceoff Deluxe Audio Switch Controller and HORI Real Arcade Pro V Switch Edition
|
|
0e5b48d2
|
2020-05-06T11:19:47
|
|
ControllerList: add NACON Revolution Unlimited (and it's dongle) and NACON Daija fight stick.
|
|
b3a34c94
|
2020-05-06T03:18:25
|
|
hid: Add Microsoft Precision Mouse to the joystick blacklist.
Same deal as the Razer keyboards, it hangs the enumeration.
|
|
85d97410
|
2020-05-06T03:13:44
|
|
hid: Cleanup Windows joystick blacklist code, to make additions easier.
|
|
b0a20a15
|
2020-05-05T12:48:55
|
|
stdlib: Fixed compiler warnings about int vs size_t.
|
|
0eb6512b
|
2020-05-04T13:19:26
|
|
Fixed bug 5121 - Use SDL_calloc instead of calloc in Wayland_CreateWindow
meyraud705
'SDL_Windows::driverdata' of a Wayland window is allocated by calloc in 'Wayland_CreateWindow' but freed by SDL_free in 'Wayland_DestroyWindow'.
|
|
65ad4534
|
2020-05-04T13:17:43
|
|
Improvement for bug 3446 - The haptic API does not allow to select the direction axes
meyraud705
I see how the documentation is confusing. I think that the choice of the axis is an implementation detail. The documentation should state the goal of this value, so I propose this wording:
"Use this value to play an effect on the steering wheel axis. This provides
better compatibility across platforms and devices as SDL will guess the
correct axis."
Value could even be renamed 'SDL_HAPTIC_STEERING_AXIS'.
For Linux, sending an effect on the X axis with a Logitech wheel works. Others brands don't have driver for Linux as far as I know.
|
|
11723411
|
2020-05-04T10:16:10
|
|
Added support for the Razer Kishi
|
|
8601996f
|
2020-05-03T22:13:48
|
|
hints: Allow specifying audio device metadata.
This is only supported on PulseAudio. You can set a description when opening
your audio device that will show up in pauvcontrol, which lets you set
per-stream volume levels.
Fixes Bugzilla #4801.
|
|
11fef299
|
2020-05-03T20:56:18
|
|
hints: Fixed a doxygen comment.
|
|
8b60d39c
|
2020-05-02T14:43:17
|
|
Fixed bug 5112 - CMake won't compile in VS2019
dark_sylinc
Trying to build SDL with VS2019 using CMake will encounter a linking error
More specifically:
1>SDL_string.obj : error LNK2019: unresolved external symbol memset referenced in function SDL_vsnprintf_REAL
|
|
05a60c2e
|
2020-04-29T15:32:08
|
|
Fixed showrev.sh when using the Bourne shell
|
|
beab15b0
|
2020-04-27T19:12:02
|
|
Added additional logging to track down why the NVIDIA controller doesn't send the back button
|
|
b0b12e46
|
2020-04-27T13:31:10
|
|
Fixed running on older versions of iOS
|
|
7ac82710
|
2020-04-24T02:06:53
|
|
cmake: various Haiku settings were accidentally under "if(SDL_VIDEO)"
|
|
01fd8130
|
2020-04-23T11:13:02
|
|
Fixed compiler warning
|
|
c6b24b4b
|
2020-04-23T11:07:07
|
|
Added support for the following controllers:
* 8BitDo N30 Pro 2
* 8BitDo SN30 Gamepad
* 8BitDo SN30 Pro+
* 8BitDo Zero 2
* SZMY-POWER PC Gamepad
* ThrustMaster eSwap PRO Controller
* ZEROPLUS P4 Wired Gamepad
In additional, all 8BitDo controllers use SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS to have the correct mapping based on user preferences.
|
|
4727f794
|
2020-04-23T10:13:17
|
|
Don't use the WGI driver if another driver is already handling the joystick
|
|
6ca7f510
|
2020-04-23T09:35:32
|
|
Fixed crash trying to get battery status on some devices
|
|
0f374b06
|
2020-04-22T15:42:32
|
|
Fixed build on older Visual Studio, enable new features on newer Visual Studio
|
|
589d636b
|
2020-04-22T14:57:06
|
|
Fixed rare crash when creating an X11 window
|
|
d12ea89c
|
2020-04-22T10:50:50
|
|
Added support for the following controllers:
* PDP Afterglow Switch Controller
* Thrustmaster ESwap Pro PS4 controller
* Giotek VX4
* Generic PS4 controller vid/pid that several knock offs use
|
|
3625b83c
|
2020-04-21T01:32:48
|
|
hid: Add Razer Arctosa keyboard to hid enumeration blacklist.
Hangs SDL, same as the Razer Lycosa.
Fixes Bugzilla #5101.
|
|
09ca66bf
|
2020-04-21T01:30:36
|
|
SDL_error: simplified error string management.
This patch removes deferred error string formatting: now we do it during
SDL_SetError(), so there's no limit on printf-style arguments used.
Also removes stub for managing error string translations; we don't have the
facilities to maintain that and the way we set arbitrary error strings
doesn't really make this practical anyhow.
Since the final error string is set right away and unique to the thread,
we no longer need a static buffer for legacy SDL_GetError(), and we don't
have to allocate 5x 128-byte argument fields per-thread. Also, since we now
use SDL_vsnprintf instead of parsing the format string ourselves, there's a
lot of code deleted and we have access to more robust formatting powers now.
This does mean the final error strings can't be more than 128 bytes, down
from the theoretical maximum of around 768, but I think this is probably okay.
They might truncate but they will always be null-terminated!
Fixes Bugzilla #5092.
|
|
67760f0e
|
2020-04-20T18:58:18
|
|
joystick: Don't report duplicate recentering events for game controllers.
|
|
c5f2a1ce
|
2020-04-20T16:01:36
|
|
joystick: On disconnect, recenter all game controller inputs.
The joystick layer can't necessarily give us perfect centering, but we know
that the game controller level has logical absolute idle positions that have
nothing to do with the physical device.
So send game controller events to make it look like the device is completely
untouched before sending the final removal event.
|
|
116b8c17
|
2020-04-19T00:05:54
|
|
Note which Windows SDK version is required for Windows Gaming Input support
|
|
aba27928
|
2020-04-18T21:41:37
|
|
Added a Windows Gaming Input joystick driver
This driver supports the Razer Atrox Arcade Stick
Some of the quirks of this driver, inherent in Windows Gaming Input:
* There will never appear to be controllers connected at startup. You must support hot-plugging in order to see these controllers.
* You can't read the state of the guide button
* You can't get controller events in the background
|
|
b90b5927
|
2020-04-17T21:30:58
|
|
Added support for the Razer Atrox Arcade Stick
|
|
dbcda0b2
|
2020-04-17T21:30:56
|
|
Added support for the Razer Wolverine Ultimate
|
|
2b323855
|
2020-04-17T15:08:48
|
|
Don't send rumble packets too quickly to Nintendo Switch Pro controllers over Bluetooth
|
|
c02f54a0
|
2020-04-17T15:08:46
|
|
Fixed the default face button mapping for Nintendo Switch Pro controllers
|
|
eaaa809e
|
2020-04-15T13:33:09
|
|
hidapi: Blacklist the Razer Lycosa keyboard from enumeration.
It's not a joystick and it hangs device enumeration.
|
|
a7a4e16b
|
2020-04-15T13:31:54
|
|
haiku: Patched to compile.
|
|
a990a34a
|
2020-04-14T22:26:02
|
|
Cleanly switch between audio recording, playback, and both, on iOS
|
|
14661d3f
|
2020-04-14T17:31:31
|
|
Added support for mousewheel on iOS
|
|
2b7ce8c5
|
2020-04-14T18:14:39
|
|
cmake: Set HAVE_VIDEO_WAYLAND_QT_TOUCH if appropriate (thanks, Michael!).
|
|
50b1c195
|
2020-04-14T09:55:33
|
|
Fixed bug 5091 - Suspicious condition in HIDAPI_DriverXbox360_UpdateXInput
meyraud705
On line 220 of SDL_hidapi_xbox360.c https://hg.libsdl.org/SDL/file/4608f0e6e8e3/src/joystick/hidapi/SDL_hidapi_xbox360.c#l220
if (!XINPUTGETSTATE(user_index, &xinput_state[user_index].state) == ERROR_SUCCESS) {
logical not is only applied to the left hand side of this comparison.
I think you mean:
if (XINPUTGETSTATE(user_index, &xinput_state[user_index].state) != ERROR_SUCCESS) {
|
|
2ae1c0f5
|
2020-04-14T09:52:27
|
|
Allow Bluetooth headphones for iOS playandrecord mode
|
|
2d1f7be2
|
2020-04-14T08:43:46
|
|
Remove development team override for iOS tests
|
|
87917b16
|
2020-04-14T07:54:38
|
|
Removed CoreBluetooth framework dependency as part of fixing bug 4299
|
|
ed1d8558
|
2020-04-14T07:41:00
|
|
Fixed bug 4299 - A recent change requires Core Bluetooth framework on iOS
Caleb Cornett
Just ran into this, and from my testing, whatever re-added the dependency is a _major_ regression. Not only is your app forced to link with CoreBluetooth, but iOS has apparently tightened up security and won't even let you _test_ your app unless it specifies the NSBluetoothAlwaysUsageDescription in an Info.plist. It doesn't even pop up an error message, it just straight up crashes.
Adding the permission isn't a good solution either, since I'd really, really rather not have my app request users' bluetooth to always be enabled, especially if the only apparent reason is for Steam Controller support.
|
|
f34d2c60
|
2020-04-14T07:35:35
|
|
Added zlib license for Steam Controller headers
|
|
3e4856c9
|
2020-04-13T23:07:54
|
|
Fixed mouse button mapping on iOS
|
|
e1215e85
|
2020-04-13T22:50:46
|
|
Fixed mouse button mapping on iOS
|
|
dbf7f84f
|
2020-04-13T22:29:10
|
|
Implemented left/right mouse click detection on iOS
|
|
171ba00a
|
2020-04-13T19:44:26
|
|
Hide the mouse cursor appropriately on iOS
|
|
9e3b259d
|
2020-04-13T19:17:28
|
|
Added virtual joystick sources to the Android build
|
|
132f87c3
|
2020-04-13T22:06:12
|
|
opengl: Don't try to do Desktop OpenGL stuff if support isn't available.
|
|
a96d8a43
|
2020-04-13T22:05:36
|
|
render: Fixed compiler warning about implicit cast.
|
|
6f3fa02e
|
2020-04-13T18:25:38
|
|
Make sure we're using the bounds of the view for our mouse region
|
|
cab1ee9c
|
2020-04-13T15:57:04
|
|
Don't build iOS mouse support on Apple TV
|
|
e5d36299
|
2020-04-13T15:46:12
|
|
Added support for new mouse APIs in iOS 13.4
|
|
e96b05c3
|
2020-04-13T18:21:28
|
|
egl: Attempt to make this compile on WinRT, etc.
|
|
1d879787
|
2020-04-13T13:24:56
|
|
Fixed implicit linkage to ftol2() on Windows
|
|
c302c1ab
|
2020-04-13T13:24:19
|
|
Fixed build
|
|
bf87604e
|
2020-04-13T12:33:29
|
|
Fixed rare crash when unplugging Xbox controller on Windows
|
|
952bac7c
|
2020-04-13T15:22:09
|
|
cmake: use check_symbol_exists, not check_function_exists (thanks, Manuel!)
This fixes the problem where we think iOS has fseeko64, etc, but doesn't.
Fixes Bugzilla #4885.
|
|
c0a875fa
|
2020-04-13T14:48:38
|
|
SDL_EGL_ChooseConfig: don't fall through if no matching format exists
On Raspberry Pi 3 via the VC4 driver in firmware KMS mode, none of the
found configs match the desired format, causing the function to fall through
without any config being selected.
Fix by first iterating over the found configs, and if no match exists,
don't exclude the non-matching configs. This should fix RPI3 and possibly other
targets without breaking targets that have a matching native format (such as RPI4).
|
|
64617d25
|
2020-04-13T14:45:40
|
|
opengl: Convert an int to an SDL_bool.
|
|
389c8995
|
2020-04-13T14:44:21
|
|
opengl: Allow SDL_GL_MakeCurrent() to accept a NULL window (thanks, Martin!).
This allows you to bind surfaceless contexts on a background thread to, for
example, load assets in a separate context, for platforms that have different
requirements about sharing surfaces, etc.
Martin's notes on the matter:
"Here's a patch that enables passing NULL windows to SDL_GL_MakeCurrent, if
the involved APIs allow it. Currently, this is only the case for EGL, and
even then only if some specific extensions are present (which they usually
are).
If "surfaceless" contexts are not supported, SDL_GL_MakeCurrent continues to
generate an error (albeit with a more specific error message than it used to),
so this should not break anything that wasn't broken before."
(Please see https://bugzilla.libsdl.org/show_bug.cgi?id=3695 for more
discussion.)
Fixes Bugzilla #3695.
|
|
e6c640f3
|
2020-04-13T08:18:16
|
|
Enable the virtual joystick API by default
|
|
ef147d2e
|
2020-04-13T08:13:50
|
|
Enable virtual joystick API by default
|
|
bd7b4f39
|
2020-04-13T08:05:29
|
|
Partial fix for bug 5086 - CMake builds on Windows broken by sensor support (thanks DominikD!)
|
|
abcc6706
|
2020-04-12T13:24:36
|
|
build: Don't duplicate Libs in Libs.private in pkg-config file
pkg-config already prepends Libs to Libs.private when you specify
--static so there's no need to duplicate them. Most other projects
don't do this.
|
|
8a5ee3fa
|
2020-04-12T00:55:52
|
|
video: NULL out pointer to freed window surface
This behavior matches SDL_RecreateWindow and makes it less likely that
another piece of code (e.g. a DestroyWindowFramebuffer implementation)
will attempt to use or free the stale surface pointer.
|
|
99f87a71
|
2020-04-11T23:38:34
|
|
build: Merge pkg-config Libs.private into Libs for static-only builds
A project being built entirely statically will call pkg-config with
--static, which utilises the Libs.private field. Conversely it will
not use --static when not being built entirely statically, even if
there is only a static build of SDL available. This will most likely
cause the build to fail due to underlinking unless we merge the Libs
fields.
This is what the Meson build system does when it generates pkg-config
files. This also also follows the behaviour of sdl2-config.
At the same time, the runtime linker flags are not applicable to
static-only builds so only add them for shared builds.
|
|
aa188048
|
2020-04-10T12:23:08
|
|
render: Scale relative mouse motion better for logical sizing
From hmk:
"When scaling is enabled (e.g. via SDL_RenderSetLogicalSize, size not equal
to window size), mouse motion events are also scaled. Small motions are
rounded up (SDL_max() when the value after scaling is less than 1), while
larger motions are truncated by the floating point -> integer conversion.
https://hg.libsdl.org/SDL/file/b18197f9bf9d/src/render/SDL_render.c#l658
The end result feels something like mouse reverse mouse acceleration + angle
snapping at low speeds, but less consistent (amount of truncation & rounding
depends on how fast the mouse is moved) and potentially much worse if the
scaling factor is large. This pretty much makes it useless for anything
where you need precise mouse aiming (think of games). I suspect this is why
aiming gets so terrible in some games that let you use scaling to reduce the
render resolution (e.g. Ion Fury).
With 4x4 scaling, I can reproduce a situation where it takes three fast flicks
of the mouse across the pad to undo one slow sweep across the pad. In other
words, extreme reverse acceleration. This does not happen when scaling is
disabled.
Furthermore, any game that uses relative mouse motion events for 3D camera
rotation probably wants the raw mouse deltas and not a value that depends on
scaling and resolution and rounding and truncation. Ideal camera rotation
just takes mouse input, multiplies it by sensitivity, and adds it to the
angle-in-radians or whatever measure is used for yaw & pitch. Pixels and
screen resolution or window dimensions should not be a part of the equation
at all, even if it could be implemented without rounding errors.
[...]
This [patch] completely eliminates angle snapping for me, and makes
sensitivity consistent. In other words, it's completely usable for, say,
aiming in a first person shooter."
Partially fixes Bugzilla #4811.
|
|
d292f6bd
|
2020-04-10T12:17:14
|
|
stdlib: Add SDL_trunc and SDL_truncf
|
|
a7916890
|
2020-04-10T00:37:35
|
|
metal: Added some support interfaces to Apple's Metal API (thanks, Caleb!).
Caleb Cornett's comments:
"A few weeks ago, Alex added a partial Metal API to SDL2:
https://hg.libsdl.org/SDL/rev/22c8e7cd8d38
I noticed it was missing a few features that would help Metal become a
first-class citizen in SDL, so I went ahead and wrote them! Here are the new
APIs:
1. SDL_WINDOW_METAL flag for SDL_CreateWindow(). This allows the programmer
to specify that they intend to create a window for use with SDL_MetalView.
The flag is used to ensure correct usage of the API and to prevent
accidentally defaulting to OpenGL on iOS.
2. SDL_Metal_GetLayer(). This function takes a SDL_MetalView and returns a
pointer to the view's backing CAMetalLayer. This simplifies things
considerably, since in the current version of the SDL_Metal API the
programmer is required to bridge-cast a SDL_MetalView handle to an NSView or
UIView (depending on the platform) and then extract the layer from there.
SDL_Metal_GetLayer automatically handles all of that, making the operation
simple and cross-platform.
3. SDL_Metal_GetDrawableSize(). This function already exists in the current
SDL_Metal API (and is used behind-the-scenes for SDL_Vulkan_GetDrawableSize
on Apple platforms) but was not publicly exposed. My patch exposes this
function for public use. It works just like you'd expect.
Tested on macOS 10.14 and iOS 12.4."
Fixes Bugzilla #4796.
|
|
258d4106
|
2020-04-09T15:57:12
|
|
emscripten: Add a few keyCode mappings for German keyboards
From @sy2002 in https://github.com/emscripten-ports/SDL2/issues/108
|
|
babf010c
|
2020-04-09T15:01:47
|
|
emscripten: Pass canvas id to request_pointer_lock
Fixes pointer lock with DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=1
|
|
287772f5
|
2020-04-09T15:01:45
|
|
emscripten: Let SDL_GetDisplayUsableBounds return the size of the window
This does not account for scrollbars nor margins. But is much better then returning the full display size when not running fullscreen, but for example in an iframe.
|
|
fb3df3a1
|
2020-04-09T15:01:41
|
|
emscripten: Fix the reported keys for the numpad. See https://github.com/emscripten-ports/SDL2/issues/94
|
|
44716b02
|
2020-04-09T15:01:37
|
|
emscripten: Send SDL_APP_TERMINATING before unload (#88)
|
|
0380cbd7
|
2020-04-09T15:01:32
|
|
emscripten: Typo
|
|
d4f1b520
|
2020-04-08T19:16:31
|
|
Added support for press/release hardware keyboard events in iOS 13.4
|
|
e9c94ac0
|
2020-04-08T10:27:30
|
|
Fixed Windows accelerometer data units
|
|
3d942ccc
|
2020-04-08T09:02:02
|
|
Removed debug code
|
|
09f55263
|
2020-04-08T09:00:10
|
|
Fixed memory leak and removed debug code from Windows sensor implementation
|
|
55515a8c
|
2020-04-08T08:42:15
|
|
SDL: ps4 controller trigger bits on other controllers just mean that there's some activity, not saturation - only force it on if the analog value is 0.
|
|
ba95fa61
|
2020-04-08T08:42:09
|
|
Revert "Fix incorrectly terminated MakeThreadHighPriority dbus message"
The first terminator is for input parameters. The second terminator was for the
output parameters.
If an error occurs when calling MakeThreadHighPriority(), e.g. a bad thread id,
then the reply from connection_send_with_reply_and_block() will be null.
|
|
9cd06ac3
|
2020-04-08T08:41:55
|
|
Add perforce support to showrev.sh
In order to generate meaningful output from SDL_GetRevision()
|
|
3180ba81
|
2020-04-08T08:34:27
|
|
First pass at Windows sensor implementation
|
|
6e6b5177
|
2020-04-07T23:34:41
|
|
cocoa: Patched to compile.
|
|
8c165add
|
2020-04-07T23:17:27
|
|
joystick: Remove force_centering flag; we handle this on disconnect now.
|
|
fba081e4
|
2020-04-07T14:51:08
|
|
wasapi: Patched to compile on C89 systems, and use SDL_ceilf instead of ceilf.
|
|
4c2be472
|
2020-04-07T14:37:24
|
|
wasapi: Improve WASAPI audio backend latency (thanks, Anthony!).
Anthony Pesch's notes on his patch:
"Currently, the WASAPI backend creates a stream in shared mode and sets the
device's callback size to be half of the shared stream's total buffer size.
This works, but doesn't coordinate will with the actual hardware. The hardware
will raise an interrupt after every period which in turn will signal the
object being waited on inside of WaitDevice. From my empirical testing, the
callback size was often larger than the period size and not a multiple of it,
which resulted in poor latency when trying to time an application based on the
audio callback. The reason for this looked something like:
* The device's callback would be called and and the audio buffer was filled.
* WaitDevice would be called.
* The hardware would raise an interrupt after one period.
* WaitDevice would resume, see that a a full callback had not been played and
then wait again.
* The hardware would raise an interrupt after another period.
* WaitDevice would resume, see that a full callback + some extra amount had
been played and then it would again call our callback and this process would
repeat.
The effect of this is that the pacing between subsequent callbacks is poor -
sometimes it's called very quickly, sometimes it's called very late.
By matching the callback's size to the stream's period size, the pacing of
calls to the user callback is improved substantially. I didn't write an actual
test for this, but my use case for this was my Dreamcast emulator
(https://redream.io) which uses the audio callback to help drive the emulation
speed. Without this change and with the default shared stream buffer (which
has a period of ~10ms) I would get frame times that were between ~3-30
milliseconds; after this change I get frame times of ~11-22 milliseconds.
Note, this patch also has a change that removes passing a duration to the
Initialize call. It seems that the default duration used (when 0 is passed)
does typically match up with the duration returned by GetDevicePeriod, however
the Initialize docs say:
> To set the buffer to the minimum size required by the engine thread, the
> client should call Initialize with the hnsBufferDuration parameter set to 0.
> Following the Initialize call, the client can get the size of the resulting
> buffer by calling IAudioClient::GetBufferSize.
This change isn't strictly required, but I made it to hopefully rule out
another source of unexpected latency."
Fixes Bugzilla #4592.
|
|
3cb62d52
|
2020-04-07T11:17:52
|
|
Fixed setting the controller name for the RAWINPUT driver
|
|
e62c25b6
|
2020-04-07T11:17:22
|
|
The 0x02ff product ID shows up for new firmware Xbox One controllers using the RAWINPUT driver
|
|
8641f6e9
|
2020-04-07T14:03:13
|
|
emscripten: support KaiOS's Left Soft Key and Right Soft Key (thanks, pelya!).
Fixes Bugzilla #5027.
|
|
309d6137
|
2020-04-07T14:01:25
|
|
cocoa: OpenGL setView and update must be used on main thread (thanks, Tim!).
If called from background threads, use Grand Central Dispatch to use the
main thread instead. On the main thread, just call them directly.
Fixes Bugzilla #4932.
|
|
486f0b6c
|
2020-04-07T13:49:19
|
|
configure.ac: Fix stupid autotools errors
Apparently, recent versions of autotools will issue an error if an empty
description is supplied to AC_DEFINE(). Avoid these errors by just
adding a space in the square brackets.
Partially fixes Bugzilla #4908.
|
|
02469877
|
2020-04-07T13:30:46
|
|
wayland: Support wayland compositors with wl_seat version < 5 (thanks, Nia!).
Fixes Bugzilla #5074.
|
|
88cecee4
|
2020-04-07T10:14:12
|
|
Fixed build warning
|
|
50cb8e0f
|
2020-04-07T10:13:08
|
|
Fixed deadlock in new raw input joystick code
The appropriate locking is done elsewhere, this prevents inverted lock acquisition
|
|
b6afbe63
|
2020-04-07T09:38:57
|
|
Added SDL_log.h to SDL_internal.h so logging is available everywhere
|
|
488b94cb
|
2020-04-07T09:18:19
|
|
Don't interpret raw input messages with no mouse position
This happens occasionally on touch devices when raw input is enabled
|
|
0721931f
|
2020-04-06T19:21:56
|
|
Avoid sending regular mouse messages for touch input
|
|
dad73b1f
|
2020-04-05T10:47:58
|
|
Fixed bug 5073 - SDL does not handle URL Schemes in MacOS
Jason
In iOS, URL Events trigger the DropFile event. I would also expect the same event to be fired on the macOS platform but this is not implemented at all in the AppDelegate.
|