Fix GLFW runtime platform detection (#3863)
* Fix GLFW runtime platform detection * Add libwayland-dev package to workflows * Add libxkbcommon-dev package to workflows * Add libwayland-bin package to codeql.yml * Add libwayland-client0 and libwayland-cursor0 packages to codeql.yml * Use libwayland-dev in codeql.yml * Add libxkbcommon-dev to codeql.yml * Remove libwayland-bin from linux.yml and linux_examples.yml (libwayland-dev includes it as a dependency) --------- Co-authored-by: Ray <raysan5@gmail.com>
This commit is contained in:
parent
42db6badd0
commit
9a8d73e6c3
17 changed files with 112 additions and 556 deletions
2
.github/workflows/codeql.yml
vendored
2
.github/workflows/codeql.yml
vendored
|
@ -57,7 +57,7 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update -qq
|
sudo apt-get update -qq
|
||||||
sudo apt-get install gcc-multilib
|
sudo apt-get install gcc-multilib
|
||||||
sudo apt-get install -y --no-install-recommends libglfw3 libglfw3-dev libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libxext-dev libxfixes-dev libwayland-dev libwayland-bin libxkbcommon-dev
|
sudo apt-get install -y --no-install-recommends libglfw3 libglfw3-dev libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libxext-dev libxfixes-dev libwayland-dev libxkbcommon-dev
|
||||||
|
|
||||||
- name: Configure CMake
|
- name: Configure CMake
|
||||||
# Use a bash shell so we can use the same syntax for environment variable
|
# Use a bash shell so we can use the same syntax for environment variable
|
||||||
|
|
2
.github/workflows/linux.yml
vendored
2
.github/workflows/linux.yml
vendored
|
@ -55,7 +55,7 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update -qq
|
sudo apt-get update -qq
|
||||||
sudo apt-get install gcc-multilib
|
sudo apt-get install gcc-multilib
|
||||||
sudo apt-get install -y --no-install-recommends libglfw3 libglfw3-dev libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libxext-dev libxfixes-dev libwayland-bin
|
sudo apt-get install -y --no-install-recommends libglfw3 libglfw3-dev libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libxext-dev libxfixes-dev libwayland-dev libxkbcommon-dev
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
mkdir ${{ env.RELEASE_NAME }}
|
mkdir ${{ env.RELEASE_NAME }}
|
||||||
|
|
2
.github/workflows/linux_examples.yml
vendored
2
.github/workflows/linux_examples.yml
vendored
|
@ -27,7 +27,7 @@ jobs:
|
||||||
- name: Setup Environment
|
- name: Setup Environment
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update -qq
|
sudo apt-get update -qq
|
||||||
sudo apt-get install -y --no-install-recommends libglfw3 libglfw3-dev libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libxext-dev libxfixes-dev libwayland-bin
|
sudo apt-get install -y --no-install-recommends libglfw3 libglfw3-dev libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libxext-dev libxfixes-dev libwayland-dev libxkbcommon-dev
|
||||||
|
|
||||||
- name: Build Library
|
- name: Build Library
|
||||||
run: |
|
run: |
|
||||||
|
|
16
src/Makefile
16
src/Makefile
|
@ -96,15 +96,15 @@ RAYLIB_MODULE_RAYGUI_PATH ?= $(RAYLIB_SRC_PATH)/../../raygui/src
|
||||||
# Use external GLFW library instead of rglfw module
|
# Use external GLFW library instead of rglfw module
|
||||||
USE_EXTERNAL_GLFW ?= FALSE
|
USE_EXTERNAL_GLFW ?= FALSE
|
||||||
|
|
||||||
|
# Enable support for both Wayland and X11 by default on Linux when using GLFW
|
||||||
|
GLFW_LINUX_ENABLE_WAYLAND ?= TRUE
|
||||||
|
GLFW_LINUX_ENABLE_X11 ?= TRUE
|
||||||
|
|
||||||
# PLATFORM_DESKTOP_SDL: It requires SDL library to be provided externally
|
# PLATFORM_DESKTOP_SDL: It requires SDL library to be provided externally
|
||||||
# WARNING: Library is not included in raylib, it MUST be configured by users
|
# WARNING: Library is not included in raylib, it MUST be configured by users
|
||||||
SDL_INCLUDE_PATH ?= $(RAYLIB_SRC_PATH)/external/SDL2/include
|
SDL_INCLUDE_PATH ?= $(RAYLIB_SRC_PATH)/external/SDL2/include
|
||||||
SDL_LIBRARY_PATH ?= $(RAYLIB_SRC_PATH)/external/SDL2/lib
|
SDL_LIBRARY_PATH ?= $(RAYLIB_SRC_PATH)/external/SDL2/lib
|
||||||
|
|
||||||
# Use Wayland display server protocol on Linux desktop (by default it uses X11 windowing system)
|
|
||||||
# NOTE: This variable is only used for PLATFORM_OS: LINUX
|
|
||||||
USE_WAYLAND_DISPLAY ?= FALSE
|
|
||||||
|
|
||||||
# Determine if the file has root access (only required to install raylib)
|
# Determine if the file has root access (only required to install raylib)
|
||||||
# "whoami" prints the name of the user that calls him (so, if it is the root user, "whoami" prints "root")
|
# "whoami" prints the name of the user that calls him (so, if it is the root user, "whoami" prints "root")
|
||||||
ROOT = $(shell whoami)
|
ROOT = $(shell whoami)
|
||||||
|
@ -407,7 +407,11 @@ endif
|
||||||
# Use Wayland display on Linux desktop
|
# Use Wayland display on Linux desktop
|
||||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
ifeq ($(PLATFORM_OS), LINUX)
|
ifeq ($(PLATFORM_OS), LINUX)
|
||||||
ifeq ($(USE_WAYLAND_DISPLAY),TRUE)
|
ifeq ($(GLFW_LINUX_ENABLE_X11),TRUE)
|
||||||
|
CFLAGS += -D_GLFW_X11
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(GLFW_LINUX_ENABLE_WAYLAND),TRUE)
|
||||||
CFLAGS += -D_GLFW_WAYLAND
|
CFLAGS += -D_GLFW_WAYLAND
|
||||||
LDFLAGS += $(shell pkg-config wayland-client wayland-cursor wayland-egl xkbcommon --libs)
|
LDFLAGS += $(shell pkg-config wayland-client wayland-cursor wayland-egl xkbcommon --libs)
|
||||||
|
|
||||||
|
@ -533,7 +537,7 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
endif
|
endif
|
||||||
ifeq ($(PLATFORM_OS),LINUX)
|
ifeq ($(PLATFORM_OS),LINUX)
|
||||||
LDLIBS = -lGL -lc -lm -lpthread -ldl -lrt
|
LDLIBS = -lGL -lc -lm -lpthread -ldl -lrt
|
||||||
ifeq ($(USE_WAYLAND_DISPLAY),FALSE)
|
ifeq ($(GLFW_LINUX_ENABLE_X11),TRUE)
|
||||||
LDLIBS += -lX11
|
LDLIBS += -lX11
|
||||||
endif
|
endif
|
||||||
# TODO: On ARM 32bit arch, miniaudio requires atomics library
|
# TODO: On ARM 32bit arch, miniaudio requires atomics library
|
||||||
|
|
468
src/external/glfw/README.md
vendored
468
src/external/glfw/README.md
vendored
|
@ -1,458 +1,18 @@
|
||||||
# GLFW
|
# GLFW (modified for raylib)
|
||||||
|
|
||||||
[](https://github.com/glfw/glfw/actions)
|
This directory contains a modification of GLFW, whose official website and
|
||||||
[](https://ci.appveyor.com/project/elmindreda/glfw)
|
upstream repository are https://glfw.org and https://github.com/glfw/glfw,
|
||||||
|
respectively.
|
||||||
|
|
||||||
## Introduction
|
In this modification, some static functions sharing the same name in different
|
||||||
|
platforms have been renamed so all of GLFW's source files can be combined into
|
||||||
|
one (as done by ``rglfw.c``). Also, the Null platform, which is not used by
|
||||||
|
raylib, has been disabled. The renamed functions are:
|
||||||
|
|
||||||
GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan
|
``
|
||||||
application development. It provides a simple, platform-independent API for
|
createKeyTables()
|
||||||
creating windows, contexts and surfaces, reading input, handling events, etc.
|
translateKey()
|
||||||
|
acquireMonitor()
|
||||||
GLFW natively supports Windows, macOS and Linux and other Unix-like systems. On
|
releaseMonitor()
|
||||||
Linux both Wayland and X11 are supported.
|
``
|
||||||
|
|
||||||
GLFW is licensed under the [zlib/libpng
|
|
||||||
license](https://www.glfw.org/license.html).
|
|
||||||
|
|
||||||
You can [download](https://www.glfw.org/download.html) the latest stable release
|
|
||||||
as source or Windows binaries. Each release starting with 3.0 also has
|
|
||||||
a corresponding [annotated tag](https://github.com/glfw/glfw/releases) with
|
|
||||||
source and binary archives.
|
|
||||||
|
|
||||||
The [documentation](https://www.glfw.org/docs/latest/) is available online and is
|
|
||||||
included in all source and binary archives. See the [release
|
|
||||||
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats and
|
|
||||||
deprecations in the latest release. For more details see the [version
|
|
||||||
history](https://www.glfw.org/changelog.html).
|
|
||||||
|
|
||||||
The `master` branch is the stable integration branch and _should_ always compile
|
|
||||||
and run on all supported platforms, although details of newly added features may
|
|
||||||
change until they have been included in a release. New features and many bug
|
|
||||||
fixes live in [other branches](https://github.com/glfw/glfw/branches/all) until
|
|
||||||
they are stable enough to merge.
|
|
||||||
|
|
||||||
If you are new to GLFW, you may find the
|
|
||||||
[tutorial](https://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful. If
|
|
||||||
you have used GLFW 2 in the past, there is a [transition
|
|
||||||
guide](https://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
|
|
||||||
3 API.
|
|
||||||
|
|
||||||
GLFW exists because of the contributions of [many people](CONTRIBUTORS.md)
|
|
||||||
around the world, whether by reporting bugs, providing community support, adding
|
|
||||||
features, reviewing or testing code, debugging, proofreading docs, suggesting
|
|
||||||
features or fixing bugs.
|
|
||||||
|
|
||||||
|
|
||||||
## Compiling GLFW
|
|
||||||
|
|
||||||
GLFW is written primarily in C99, with parts of macOS support being written in
|
|
||||||
Objective-C. GLFW itself requires only the headers and libraries for your OS
|
|
||||||
and window system. It does not need any additional headers for context creation
|
|
||||||
APIs (WGL, GLX, EGL, NSGL, OSMesa) or rendering APIs (OpenGL, OpenGL ES, Vulkan)
|
|
||||||
to enable support for them.
|
|
||||||
|
|
||||||
GLFW supports compilation on Windows with Visual C++ 2013 and later, MinGW and
|
|
||||||
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with GCC
|
|
||||||
and Clang. It will likely compile in other environments as well, but this is
|
|
||||||
not regularly tested.
|
|
||||||
|
|
||||||
There are [pre-compiled binaries](https://www.glfw.org/download.html) available
|
|
||||||
for all supported compilers on Windows and macOS.
|
|
||||||
|
|
||||||
See the [compilation guide](https://www.glfw.org/docs/latest/compile.html) for
|
|
||||||
more information about how to compile GLFW yourself.
|
|
||||||
|
|
||||||
|
|
||||||
## Using GLFW
|
|
||||||
|
|
||||||
See the [documentation](https://www.glfw.org/docs/latest/) for tutorials, guides
|
|
||||||
and the API reference.
|
|
||||||
|
|
||||||
|
|
||||||
## Contributing to GLFW
|
|
||||||
|
|
||||||
See the [contribution
|
|
||||||
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
|
|
||||||
more information.
|
|
||||||
|
|
||||||
|
|
||||||
## System requirements
|
|
||||||
|
|
||||||
GLFW supports Windows XP and later and macOS 10.8 and later. Linux and other
|
|
||||||
Unix-like systems running the X Window System are supported even without
|
|
||||||
a desktop environment or modern extensions, although some features require
|
|
||||||
a running window or clipboard manager. The OSMesa backend requires Mesa 6.3.
|
|
||||||
|
|
||||||
See the [compatibility guide](https://www.glfw.org/docs/latest/compat.html)
|
|
||||||
in the documentation for more information.
|
|
||||||
|
|
||||||
|
|
||||||
## Dependencies
|
|
||||||
|
|
||||||
GLFW itself needs only CMake 3.1 or later and the headers and libraries for your
|
|
||||||
OS and window system.
|
|
||||||
|
|
||||||
The examples and test programs depend on a number of tiny libraries. These are
|
|
||||||
located in the `deps/` directory.
|
|
||||||
|
|
||||||
- [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
|
|
||||||
with command-line options
|
|
||||||
- [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
|
|
||||||
examples
|
|
||||||
- [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
|
|
||||||
functions
|
|
||||||
- [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
|
|
||||||
examples
|
|
||||||
- [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and example UI
|
|
||||||
- [stb\_image\_write](https://github.com/nothings/stb) for writing images to disk
|
|
||||||
|
|
||||||
The documentation is generated with [Doxygen](https://doxygen.org/) if CMake can
|
|
||||||
find that tool.
|
|
||||||
|
|
||||||
|
|
||||||
## Reporting bugs
|
|
||||||
|
|
||||||
Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
|
|
||||||
Please check the [contribution
|
|
||||||
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
|
|
||||||
information on what to include when reporting a bug.
|
|
||||||
|
|
||||||
|
|
||||||
## Changelog since 3.3.10
|
|
||||||
|
|
||||||
- Added `GLFW_PLATFORM` init hint for runtime platform selection (#1958)
|
|
||||||
- Added `GLFW_ANY_PLATFORM`, `GLFW_PLATFORM_WIN32`, `GLFW_PLATFORM_COCOA`,
|
|
||||||
`GLFW_PLATFORM_WAYLAND`, `GLFW_PLATFORM_X11` and `GLFW_PLATFORM_NULL` symbols to
|
|
||||||
specify the desired platform (#1958)
|
|
||||||
- Added `glfwGetPlatform` function to query what platform was selected (#1655,#1958)
|
|
||||||
- Added `glfwPlatformSupported` function to query if a platform is supported
|
|
||||||
(#1655,#1958)
|
|
||||||
- Added `glfwInitAllocator` for setting a custom memory allocator (#544,#1628,#1947)
|
|
||||||
- Added `GLFWallocator` struct and `GLFWallocatefun`, `GLFWreallocatefun` and
|
|
||||||
`GLFWdeallocatefun` types (#544,#1628,#1947)
|
|
||||||
- Added `glfwGetWindowTitle` function for querying window title (#1448,#1909,#2482)
|
|
||||||
- Added `glfwInitVulkanLoader` for using a non-default Vulkan loader (#1374,#1890)
|
|
||||||
- Added `GLFW_RESIZE_NWSE_CURSOR`, `GLFW_RESIZE_NESW_CURSOR`,
|
|
||||||
`GLFW_RESIZE_ALL_CURSOR` and `GLFW_NOT_ALLOWED_CURSOR` cursor shapes (#427)
|
|
||||||
- Added `GLFW_RESIZE_EW_CURSOR` alias for `GLFW_HRESIZE_CURSOR` (#427)
|
|
||||||
- Added `GLFW_RESIZE_NS_CURSOR` alias for `GLFW_VRESIZE_CURSOR` (#427)
|
|
||||||
- Added `GLFW_POINTING_HAND_CURSOR` alias for `GLFW_HAND_CURSOR` (#427)
|
|
||||||
- Added `GLFW_MOUSE_PASSTHROUGH` window hint for letting mouse input pass
|
|
||||||
through the window (#1236,#1568)
|
|
||||||
- Added `GLFW_CURSOR_CAPTURED` cursor mode to confine the cursor to the window
|
|
||||||
content area (#58)
|
|
||||||
- Added `GLFW_POSITION_X` and `GLFW_POSITION_Y` window hints for initial position
|
|
||||||
(#1603,#1747)
|
|
||||||
- Added `GLFW_SCALE_FRAMEBUFFER` window hint for Wayland and macOS scaling (#2457)
|
|
||||||
- Added `GLFW_ANY_POSITION` hint value for letting the window manager choose (#1603,#1747)
|
|
||||||
- Added `GLFW_PLATFORM_UNAVAILABLE` error for platform detection failures (#1958)
|
|
||||||
- Added `GLFW_FEATURE_UNAVAILABLE` error for platform limitations (#1692)
|
|
||||||
- Added `GLFW_FEATURE_UNIMPLEMENTED` error for incomplete backends (#1692)
|
|
||||||
- Added `GLFW_WAYLAND_APP_ID` window hint string for Wayland app\_id selection
|
|
||||||
(#2121,#2122)
|
|
||||||
- Added `GLFW_ANGLE_PLATFORM_TYPE` init hint and `GLFW_ANGLE_PLATFORM_TYPE_*`
|
|
||||||
values to select ANGLE backend (#1380)
|
|
||||||
- Added `GLFW_X11_XCB_VULKAN_SURFACE` init hint for selecting X11 Vulkan
|
|
||||||
surface extension (#1793)
|
|
||||||
- Added `GLFW_WIN32_KEYBOARD_MENU` window hint for enabling access to the window menu
|
|
||||||
- Added `GLFW_WIN32_SHOWDEFAULT` window hint for applying the parent process
|
|
||||||
show command (#2359)
|
|
||||||
- Added `GLFW_NATIVE_INCLUDE_NONE` for disabling inclusion of native headers (#1348)
|
|
||||||
- Added `GLFW_BUILD_WIN32` CMake option for enabling Win32 support (#1958)
|
|
||||||
- Added `GLFW_BUILD_COCOA` CMake option for enabling Cocoa support (#1958)
|
|
||||||
- Added `GLFW_BUILD_X11` CMake option for enabling X11 support (#1958)
|
|
||||||
- Added `GLFW_LIBRARY_TYPE` CMake variable for overriding the library type
|
|
||||||
(#279,#1307,#1497,#1574,#1928)
|
|
||||||
- Added support for `XDG_SESSION_TYPE` environment variable
|
|
||||||
- Added `GLFW_PKG_CONFIG_REQUIRES_PRIVATE` and `GLFW_PKG_CONFIG_LIBS_PRIVATE` CMake
|
|
||||||
variables exposing pkg-config dependencies (#1307)
|
|
||||||
- Made joystick subsystem initialize at first use (#1284,#1646)
|
|
||||||
- Made `GLFW_DOUBLEBUFFER` a read-only window attribute
|
|
||||||
- Made Wayland the preferred platform over X11 if both are available (#2035)
|
|
||||||
- Updated the minimum required CMake version to 3.4
|
|
||||||
- Updated gamepad mappings from upstream
|
|
||||||
- Renamed `GLFW_USE_WAYLAND` CMake option to `GLFW_BUILD_WAYLAND` (#1958)
|
|
||||||
- Disabled tests and examples by default when built as a CMake subdirectory
|
|
||||||
- Removed `GLFW_USE_OSMESA` CMake option enabling the Null platform (#1958)
|
|
||||||
- Removed CMake generated configuration header
|
|
||||||
- Bugfix: `glfwGetVideoMode` returned an invalid mode on error (#1292)
|
|
||||||
- [Win32] Added a version info resource to the GLFW DLL
|
|
||||||
- [Win32] Made hidden helper window use its own window class
|
|
||||||
- [Win32] Bugfix: The foreground lock timeout was overridden, ignoring the user
|
|
||||||
- [Cocoa] Added `glfwGetCocoaView` native access function (#2235)
|
|
||||||
- [Cocoa] Moved main menu creation to GLFW initialization time (#1649)
|
|
||||||
- [Cocoa] Bugfix: Touching event queue from secondary thread before main thread
|
|
||||||
would abort (#1649)
|
|
||||||
- [Wayland] Added support for `glfwRequestWindowAttention` (#2287)
|
|
||||||
- [Wayland] Added support for `glfwFocusWindow`
|
|
||||||
- [Wayland] Added support for `GLFW_RESIZABLE` (#2203)
|
|
||||||
- [Wayland] Added support for fractional scaling of window contents
|
|
||||||
- [Wayland] Added dynamic loading of all Wayland libraries
|
|
||||||
- [Wayland] Bugfix: `CLOCK_MONOTONIC` was not correctly enabled
|
|
||||||
- [Wayland] Bugfix: `GLFW_HOVERED` was true when the cursor was over any
|
|
||||||
fallback window decoration
|
|
||||||
- [Wayland] Bugfix: Fallback decorations allowed resizing to invalid size
|
|
||||||
(#2204)
|
|
||||||
- [X11] Bugfix: Termination would segfault if the IM had been destroyed
|
|
||||||
- [X11] Bugfix: Any IM started after initialization would not be detected
|
|
||||||
- [Linux] Bugfix: Joystick evdev fds remained open in forks (#2446)
|
|
||||||
- [POSIX] Removed use of deprecated function `gettimeofday`
|
|
||||||
- [POSIX] Bugfix: `CLOCK_MONOTONIC` was not correctly tested for or enabled
|
|
||||||
- [WGL] Disabled the DWM swap interval hack for Windows 8 and later (#1072)
|
|
||||||
- [NSGL] Removed enforcement of forward-compatible flag for core contexts
|
|
||||||
- [NSGL] Bugfix: A core profile OpenGL context was returned if 3.2+
|
|
||||||
compatibility profile was requested
|
|
||||||
- [EGL] Added platform selection via the `EGL_EXT_platform_base` extension
|
|
||||||
(#442)
|
|
||||||
- [EGL] Added ANGLE backend selection via `EGL_ANGLE_platform_angle` extension
|
|
||||||
(#1380)
|
|
||||||
|
|
||||||
|
|
||||||
## Changelog since 3.3
|
|
||||||
|
|
||||||
- Added `GLFW_WAYLAND_LIBDECOR` init hint for disabling libdecor support (#1639,#1693)
|
|
||||||
- Bugfix: The CMake config-file package used an absolute path and was not
|
|
||||||
relocatable (#1470)
|
|
||||||
- Bugfix: Video modes with a duplicate screen area were discarded (#1555,#1556)
|
|
||||||
- Bugfix: Compiling with -Wextra-semi caused warnings (#1440)
|
|
||||||
- Bugfix: Built-in mappings failed because some OEMs re-used VID/PID (#1583)
|
|
||||||
- Bugfix: Some extension loader headers did not prevent default OpenGL header
|
|
||||||
inclusion (#1695)
|
|
||||||
- Bugfix: Buffers were swapped at creation on single-buffered windows (#1873)
|
|
||||||
- Bugfix: Gamepad mapping updates could spam `GLFW_INVALID_VALUE` due to
|
|
||||||
incompatible controllers sharing hardware ID (#1763)
|
|
||||||
- Bugfix: Native access functions for context handles did not check that the API matched
|
|
||||||
- Bugfix: `glfwMakeContextCurrent` would access TLS slot before initialization
|
|
||||||
- Bugfix: `glfwSetGammaRamp` could emit `GLFW_INVALID_VALUE` before initialization
|
|
||||||
- Bugfix: `glfwGetJoystickUserPointer` returned `NULL` during disconnection (#2092)
|
|
||||||
- Bugfix: `glfwGetKeyScancode` returned `0` on error when initialized instead of `-1`
|
|
||||||
- Bugfix: Failure to make a newly created context current could cause segfault (#2327)
|
|
||||||
- [Win32] Disabled framebuffer transparency on Windows 7 when DWM windows are
|
|
||||||
opaque (#1512)
|
|
||||||
- [Win32] Bugfix: `GLFW_INCLUDE_VULKAN` plus `VK_USE_PLATFORM_WIN32_KHR` caused
|
|
||||||
symbol redefinition (#1524)
|
|
||||||
- [Win32] Bugfix: The cursor position event was emitted before its cursor enter
|
|
||||||
event (#1490)
|
|
||||||
- [Win32] Bugfix: The window hint `GLFW_MAXIMIZED` did not move or resize the
|
|
||||||
window (#1499)
|
|
||||||
- [Win32] Bugfix: Disabled cursor mode interfered with some non-client actions
|
|
||||||
- [Win32] Bugfix: Super key was not released after Win+V hotkey (#1622)
|
|
||||||
- [Win32] Bugfix: `glfwGetKeyName` could access out of bounds and return an
|
|
||||||
invalid pointer
|
|
||||||
- [Win32] Bugfix: Some synthetic key events were reported as `GLFW_KEY_UNKNOWN`
|
|
||||||
(#1623)
|
|
||||||
- [Win32] Bugfix: Non-BMP Unicode codepoint input was reported as UTF-16
|
|
||||||
- [Win32] Bugfix: Monitor functions could return invalid values after
|
|
||||||
configuration change (#1761)
|
|
||||||
- [Win32] Bugfix: Initialization would segfault on Windows 8 (not 8.1) (#1775)
|
|
||||||
- [Win32] Bugfix: Duplicate size events were not filtered (#1610)
|
|
||||||
- [Win32] Bugfix: Full screen windows were incorrectly resized by DPI changes
|
|
||||||
(#1582)
|
|
||||||
- [Win32] Bugfix: `GLFW_SCALE_TO_MONITOR` had no effect on systems older than
|
|
||||||
Windows 10 version 1703 (#1511)
|
|
||||||
- [Win32] Bugfix: `USE_MSVC_RUNTIME_LIBRARY_DLL` had no effect on CMake 3.15 or
|
|
||||||
later (#1783,#1796)
|
|
||||||
- [Win32] Bugfix: Compilation with LLVM for Windows failed (#1807,#1824,#1874)
|
|
||||||
- [Win32] Bugfix: Content scale queries could fail silently (#1615)
|
|
||||||
- [Win32] Bugfix: Content scales could have garbage values if monitor was recently
|
|
||||||
disconnected (#1615)
|
|
||||||
- [Win32] Bugfix: A window created maximized and undecorated would cover the whole
|
|
||||||
monitor (#1806)
|
|
||||||
- [Win32] Bugfix: The default restored window position was lost when creating a maximized
|
|
||||||
window
|
|
||||||
- [Win32] Bugfix: `glfwMaximizeWindow` would make a hidden window visible
|
|
||||||
- [Win32] Bugfix: `Alt+PrtSc` would emit `GLFW_KEY_UNKNOWN` and a different
|
|
||||||
scancode than `PrtSc` (#1993)
|
|
||||||
- [Win32] Bugfix: `GLFW_KEY_PAUSE` scancode from `glfwGetKeyScancode` did not
|
|
||||||
match event scancode (#1993)
|
|
||||||
- [Win32] Bugfix: Instance-local operations used executable instance (#469,#1296,#1395)
|
|
||||||
- [Win32] Bugfix: The OSMesa library was not unloaded on termination
|
|
||||||
- [Win32] Bugfix: Right shift emitted `GLFW_KEY_UNKNOWN` when using a CJK IME (#2050)
|
|
||||||
- [Win32] Bugfix: `glfwWaitEventsTimeout` did not return for some sent messages (#2408)
|
|
||||||
- [Win32] Bugfix: Fix pkg-config for dynamic library on Windows (#2386, #2420)
|
|
||||||
- [Win32] Bugfix: XInput could reportedly provide invalid DPad bit masks (#2291)
|
|
||||||
- [Win32] Bugfix: Rapid clipboard calls could fail due to Clipboard History
|
|
||||||
- [Win32] Bugfix: Disabled cursor mode doesn't work right when connected over RDP (#1276,#1279,#2431)
|
|
||||||
- [Cocoa] Added support for `VK_EXT_metal_surface` (#1619)
|
|
||||||
- [Cocoa] Added locating the Vulkan loader at runtime in an application bundle
|
|
||||||
- [Cocoa] Changed `EGLNativeWindowType` from `NSView` to `CALayer` (#1169)
|
|
||||||
- [Cocoa] Changed F13 key to report Print Screen for cross-platform consistency
|
|
||||||
(#1786)
|
|
||||||
- [Cocoa] Disabled macOS fullscreen when `GLFW_RESIZABLE` is false
|
|
||||||
- [Cocoa] Removed dependency on the CoreVideo framework
|
|
||||||
- [Cocoa] Bugfix: `glfwSetWindowSize` used a bottom-left anchor point (#1553)
|
|
||||||
- [Cocoa] Bugfix: Window remained on screen after destruction until event poll
|
|
||||||
(#1412)
|
|
||||||
- [Cocoa] Bugfix: Event processing before window creation would assert (#1543)
|
|
||||||
- [Cocoa] Bugfix: Undecorated windows could not be iconified on recent macOS
|
|
||||||
- [Cocoa] Bugfix: Non-BMP Unicode codepoint input was reported as UTF-16
|
|
||||||
(#1635)
|
|
||||||
- [Cocoa] Bugfix: Failing to retrieve the refresh rate of built-in displays
|
|
||||||
could leak memory
|
|
||||||
- [Cocoa] Bugfix: Objective-C files were compiled as C with CMake 3.19 (#1787)
|
|
||||||
- [Cocoa] Bugfix: Duplicate video modes were not filtered out (#1830)
|
|
||||||
- [Cocoa] Bugfix: Menu bar was not clickable on macOS 10.15+ until it lost and
|
|
||||||
regained focus (#1648,#1802)
|
|
||||||
- [Cocoa] Bugfix: Monitor name query could segfault on macOS 11 (#1809,#1833)
|
|
||||||
- [Cocoa] Bugfix: The install name of the installed dylib was relative (#1504)
|
|
||||||
- [Cocoa] Bugfix: The MoltenVK layer contents scale was updated only after
|
|
||||||
related events were emitted
|
|
||||||
- [Cocoa] Bugfix: Moving the cursor programmatically would freeze it for
|
|
||||||
a fraction of a second (#1962)
|
|
||||||
- [Cocoa] Bugfix: `kIOMasterPortDefault` was deprecated in macOS 12.0 (#1980)
|
|
||||||
- [Cocoa] Bugfix: `kUTTypeURL` was deprecated in macOS 12.0 (#2003)
|
|
||||||
- [Cocoa] Bugfix: A connected Apple AirPlay would emit a useless error (#1791)
|
|
||||||
- [Cocoa] Bugfix: The EGL and OSMesa libraries were not unloaded on termination
|
|
||||||
- [Cocoa] Bugfix: `GLFW_MAXIMIZED` was always true when `GLFW_RESIZABLE` was false
|
|
||||||
- [Cocoa] Bugfix: Changing `GLFW_DECORATED` in macOS fullscreen would abort
|
|
||||||
application (#1886)
|
|
||||||
- [Cocoa] Bugfix: Setting a monitor from macOS fullscreen would abort
|
|
||||||
application (#2110)
|
|
||||||
- [Cocoa] Bugfix: The Vulkan loader was not loaded from the `Frameworks` bundle
|
|
||||||
subdirectory (#2113,#2120)
|
|
||||||
- [Cocoa] Bugfix: Compilation failed on OS X 10.8 due to unconditional use of 10.9+
|
|
||||||
symbols (#2161)
|
|
||||||
- [Cocoa] Bugfix: Querying joystick elements could reportedly segfault on macOS
|
|
||||||
13 Ventura (#2320)
|
|
||||||
- [X11] Bugfix: The CMake files did not check for the XInput headers (#1480)
|
|
||||||
- [X11] Bugfix: Key names were not updated when the keyboard layout changed
|
|
||||||
(#1462,#1528)
|
|
||||||
- [X11] Bugfix: Decorations could not be enabled after window creation (#1566)
|
|
||||||
- [X11] Bugfix: Content scale fallback value could be inconsistent (#1578)
|
|
||||||
- [X11] Bugfix: `glfwMaximizeWindow` had no effect on hidden windows
|
|
||||||
- [X11] Bugfix: Clearing `GLFW_FLOATING` on a hidden window caused invalid read
|
|
||||||
- [X11] Bugfix: Changing `GLFW_FLOATING` on a hidden window could silently fail
|
|
||||||
- [X11] Bugfix: Disabled cursor mode was interrupted by indicator windows
|
|
||||||
- [X11] Bugfix: Monitor physical dimensions could be reported as zero mm
|
|
||||||
- [X11] Bugfix: Window position events were not emitted during resizing (#1613)
|
|
||||||
- [X11] Bugfix: `glfwFocusWindow` could terminate on older WMs or without a WM
|
|
||||||
- [X11] Bugfix: Querying a disconnected monitor could segfault (#1602)
|
|
||||||
- [X11] Bugfix: IME input of CJK was broken for "C" locale (#1587,#1636)
|
|
||||||
- [X11] Bugfix: Xlib errors caused by other parts of the application could be
|
|
||||||
reported as GLFW errors
|
|
||||||
- [X11] Bugfix: A handle race condition could cause a `BadWindow` error (#1633)
|
|
||||||
- [X11] Bugfix: XKB path used keysyms instead of physical locations for
|
|
||||||
non-printable keys (#1598)
|
|
||||||
- [X11] Bugfix: Function keys were mapped to `GLFW_KEY_UNKNOWN` for some layout
|
|
||||||
combinations (#1598)
|
|
||||||
- [X11] Bugfix: Keys pressed simultaneously with others were not always
|
|
||||||
reported (#1112,#1415,#1472,#1616)
|
|
||||||
- [X11] Bugfix: Some window attributes were not applied on leaving fullscreen
|
|
||||||
(#1863)
|
|
||||||
- [X11] Bugfix: Changing `GLFW_FLOATING` could leak memory
|
|
||||||
- [X11] Bugfix: Icon pixel format conversion worked only by accident, relying on
|
|
||||||
undefined behavior (#1986)
|
|
||||||
- [X11] Bugfix: Dynamic loading on OpenBSD failed due to soname differences
|
|
||||||
- [X11] Bugfix: Waiting for events would fail if file descriptor was too large
|
|
||||||
(#2024)
|
|
||||||
- [X11] Bugfix: Joystick events could lead to busy-waiting (#1872)
|
|
||||||
- [X11] Bugfix: `glfwWaitEvents*` did not continue for joystick events
|
|
||||||
- [X11] Bugfix: `glfwPostEmptyEvent` could be ignored due to race condition
|
|
||||||
(#379,#1281,#1285,#2033)
|
|
||||||
- [X11] Bugfix: Dynamic loading on NetBSD failed due to soname differences
|
|
||||||
- [X11] Bugfix: Left shift of int constant relied on undefined behavior (#1951)
|
|
||||||
- [X11] Bugfix: The OSMesa libray was not unloaded on termination
|
|
||||||
- [X11] Bugfix: A malformed response during selection transfer could cause a segfault
|
|
||||||
- [X11] Bugfix: Some calls would reset Xlib to the default error handler (#2108)
|
|
||||||
- [Wayland] Added improved fallback window decorations via libdecor (#1639,#1693)
|
|
||||||
- [Wayland] Added support for key names via xkbcommon
|
|
||||||
- [Wayland] Added support for file path drop events (#2040)
|
|
||||||
- [Wayland] Added support for more human-readable monitor names where available
|
|
||||||
- [Wayland] Disabled alpha channel for opaque windows on systems lacking
|
|
||||||
`EGL_EXT_present_opaque` (#1895)
|
|
||||||
- [Wayland] Removed support for `wl_shell` (#1443)
|
|
||||||
- [Wayland] Bugfix: The `GLFW_HAND_CURSOR` shape used the wrong image (#1432)
|
|
||||||
- [Wayland] Bugfix: Repeated keys could be reported with `NULL` window (#1704)
|
|
||||||
- [Wayland] Bugfix: Retrieving partial framebuffer size would segfault
|
|
||||||
- [Wayland] Bugfix: Scrolling offsets were inverted compared to other platforms
|
|
||||||
(#1463)
|
|
||||||
- [Wayland] Bugfix: Client-Side Decorations were destroyed in the wrong order
|
|
||||||
(#1798)
|
|
||||||
- [Wayland] Bugfix: Monitors physical size could report zero (#1784,#1792)
|
|
||||||
- [Wayland] Bugfix: Some keys were not repeating in Wayland (#1908)
|
|
||||||
- [Wayland] Bugfix: Non-arrow cursors are offset from the hotspot (#1706,#1899)
|
|
||||||
- [Wayland] Bugfix: The `O_CLOEXEC` flag was not defined on FreeBSD
|
|
||||||
- [Wayland] Bugfix: Key repeat could lead to a race condition (#1710)
|
|
||||||
- [Wayland] Bugfix: Activating a window would emit two input focus events
|
|
||||||
- [Wayland] Bugfix: Disable key repeat mechanism when window loses input focus
|
|
||||||
- [Wayland] Bugfix: Window hiding and showing did not work (#1492,#1731)
|
|
||||||
- [Wayland] Bugfix: A key being repeated was not released when window lost focus
|
|
||||||
- [Wayland] Bugfix: Showing a hidden window did not emit a window refresh event
|
|
||||||
- [Wayland] Bugfix: Full screen window creation did not ignore `GLFW_VISIBLE`
|
|
||||||
- [Wayland] Bugfix: Some keys were reported as wrong key or `GLFW_KEY_UNKNOWN`
|
|
||||||
- [Wayland] Bugfix: Text input did not repeat along with key repeat
|
|
||||||
- [Wayland] Bugfix: `glfwPostEmptyEvent` sometimes had no effect (#1520,#1521)
|
|
||||||
- [Wayland] Bugfix: `glfwSetClipboardString` would fail if set to result of
|
|
||||||
`glfwGetClipboardString`
|
|
||||||
- [Wayland] Bugfix: Data source creation error would cause double free at termination
|
|
||||||
- [Wayland] Bugfix: Partial writes of clipboard string would cause beginning to repeat
|
|
||||||
- [Wayland] Bugfix: Some errors would cause clipboard string transfer to hang
|
|
||||||
- [Wayland] Bugfix: Drag and drop data was misinterpreted as clipboard string
|
|
||||||
- [Wayland] Bugfix: MIME type matching was not performed for clipboard string
|
|
||||||
- [Wayland] Bugfix: The OSMesa library was not unloaded on termination
|
|
||||||
- [Wayland] Bugfix: `glfwCreateWindow` could emit `GLFW_FEATURE_UNAVAILABLE`
|
|
||||||
- [Wayland] Bugfix: Lock key modifier bits were only set when lock keys were pressed
|
|
||||||
- [Wayland] Bugfix: A window leaving full screen mode would be iconified (#1995)
|
|
||||||
- [Wayland] Bugfix: A window leaving full screen mode ignored its desired size
|
|
||||||
- [Wayland] Bugfix: `glfwSetWindowMonitor` did not update windowed mode size
|
|
||||||
- [Wayland] Bugfix: `glfwRestoreWindow` would make a full screen window windowed
|
|
||||||
- [Wayland] Bugfix: A window maximized or restored by the user would enter an
|
|
||||||
inconsistent state
|
|
||||||
- [Wayland] Bugfix: Window maximization events were not emitted
|
|
||||||
- [Wayland] Bugfix: `glfwRestoreWindow` assumed it was always in windowed mode
|
|
||||||
- [Wayland] Bugfix: `glfwSetWindowSize` would resize a full screen window
|
|
||||||
- [Wayland] Bugfix: A window content scale event would be emitted every time
|
|
||||||
the window resized
|
|
||||||
- [Wayland] Bugfix: If `glfwInit` failed it would close stdin
|
|
||||||
- [Wayland] Bugfix: Manual resizing with fallback decorations behaved erratically
|
|
||||||
(#1991,#2115,#2127)
|
|
||||||
- [Wayland] Bugfix: Size limits included frame size for fallback decorations
|
|
||||||
- [Wayland] Bugfix: Updating `GLFW_DECORATED` had no effect on server-side
|
|
||||||
decorations
|
|
||||||
- [Wayland] Bugfix: A monitor would be reported as connected again if its scale
|
|
||||||
changed
|
|
||||||
- [Wayland] Bugfix: `glfwTerminate` would segfault if any monitor had changed
|
|
||||||
scale
|
|
||||||
- [Wayland] Bugfix: Window content scale events were not emitted when monitor
|
|
||||||
scale changed
|
|
||||||
- [Wayland] Bugfix: `glfwSetWindowAspectRatio` reported an error instead of
|
|
||||||
applying the specified ratio
|
|
||||||
- [Wayland] Bugfix: `GLFW_MAXIMIZED` window hint had no effect
|
|
||||||
- [Wayland] Bugfix: `glfwRestoreWindow` had no effect before first show
|
|
||||||
- [Wayland] Bugfix: Hiding and then showing a window caused program abort on
|
|
||||||
wlroots compositors (#1268)
|
|
||||||
- [Wayland] Bugfix: `GLFW_DECORATED` was ignored when showing a window with XDG
|
|
||||||
decorations
|
|
||||||
- [Wayland] Bugfix: Connecting a mouse after `glfwInit` would segfault (#1450)
|
|
||||||
- [Wayland] Bugfix: Joysticks connected after `glfwInit` were not detected (#2198)
|
|
||||||
- [Wayland] Bugfix: Fallback decorations emitted `GLFW_CURSOR_UNAVAILABLE` errors
|
|
||||||
- [Linux] Bugfix: Joysticks without buttons were ignored (#2042,#2043)
|
|
||||||
- [Linux] Bugfix: A small amount of memory could leak if initialization failed (#2229)
|
|
||||||
- [NSGL] Bugfix: `GLFW_COCOA_RETINA_FRAMEBUFFER` had no effect on newer
|
|
||||||
macOS versions (#1442)
|
|
||||||
- [NSGL] Bugfix: Workaround for swap interval on 10.14 broke on 10.12 (#1483)
|
|
||||||
- [NSGL] Bugfix: Defining `GL_SILENCE_DEPRECATION` externally caused
|
|
||||||
a duplicate definition warning (#1840)
|
|
||||||
- [EGL] Added loading of glvnd `libOpenGL.so.0` where available for OpenGL
|
|
||||||
- [EGL] Bugfix: The `GLFW_DOUBLEBUFFER` context attribute was ignored (#1843)
|
|
||||||
- [EGL] Bugfix: Setting `GLFW_CONTEXT_DEBUG` caused creation to fail (#2348)
|
|
||||||
- [GLX] Added loading of glvnd `libGLX.so.0` where available
|
|
||||||
- [GLX] Bugfix: Context creation failed if GLX 1.4 was not exported by GLX library
|
|
||||||
|
|
||||||
|
|
||||||
## Contact
|
|
||||||
|
|
||||||
On [glfw.org](https://www.glfw.org/) you can find the latest version of GLFW, as
|
|
||||||
well as news, documentation and other information about the project.
|
|
||||||
|
|
||||||
If you have questions related to the use of GLFW, we have a
|
|
||||||
[forum](https://discourse.glfw.org/).
|
|
||||||
|
|
||||||
If you have a bug to report, a patch to submit or a feature you'd like to
|
|
||||||
request, please file it in the
|
|
||||||
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.
|
|
||||||
|
|
||||||
Finally, if you're interested in helping out with the development of GLFW or
|
|
||||||
porting it to your favorite platform, join us on the forum or GitHub.
|
|
||||||
|
|
||||||
|
|
7
src/external/glfw/src/cocoa_init.m
vendored
7
src/external/glfw/src/cocoa_init.m
vendored
|
@ -1,7 +1,8 @@
|
||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.4 macOS - www.glfw.org
|
// GLFW 3.4 macOS (modified for raylib) - www.glfw.org; www.raylib.com
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
// Copyright (c) 2024 M374LX <wilsalx@gmail.com>
|
||||||
//
|
//
|
||||||
// This software is provided 'as-is', without any express or implied
|
// This software is provided 'as-is', without any express or implied
|
||||||
// warranty. In no event will the authors be held liable for any damages
|
// warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -175,7 +176,7 @@ static void createMenuBar(void)
|
||||||
|
|
||||||
// Create key code translation tables
|
// Create key code translation tables
|
||||||
//
|
//
|
||||||
static void createKeyTables(void)
|
static void createKeyTablesCocoa(void)
|
||||||
{
|
{
|
||||||
memset(_glfw.ns.keycodes, -1, sizeof(_glfw.ns.keycodes));
|
memset(_glfw.ns.keycodes, -1, sizeof(_glfw.ns.keycodes));
|
||||||
memset(_glfw.ns.scancodes, -1, sizeof(_glfw.ns.scancodes));
|
memset(_glfw.ns.scancodes, -1, sizeof(_glfw.ns.scancodes));
|
||||||
|
@ -618,7 +619,7 @@ int _glfwInitCocoa(void)
|
||||||
name:NSTextInputContextKeyboardSelectionDidChangeNotification
|
name:NSTextInputContextKeyboardSelectionDidChangeNotification
|
||||||
object:nil];
|
object:nil];
|
||||||
|
|
||||||
createKeyTables();
|
createKeyTablesCocoa();
|
||||||
|
|
||||||
_glfw.ns.eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
|
_glfw.ns.eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
|
||||||
if (!_glfw.ns.eventSource)
|
if (!_glfw.ns.eventSource)
|
||||||
|
|
3
src/external/glfw/src/cocoa_monitor.m
vendored
3
src/external/glfw/src/cocoa_monitor.m
vendored
|
@ -1,8 +1,9 @@
|
||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.4 macOS - www.glfw.org
|
// GLFW 3.4 macOS (modified for raylib) - www.glfw.org; www.raylib.com
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
// Copyright (c) 2024 M374LX <wilsalx@gmail.com>
|
||||||
//
|
//
|
||||||
// This software is provided 'as-is', without any express or implied
|
// This software is provided 'as-is', without any express or implied
|
||||||
// warranty. In no event will the authors be held liable for any damages
|
// warranty. In no event will the authors be held liable for any damages
|
||||||
|
|
28
src/external/glfw/src/cocoa_window.m
vendored
28
src/external/glfw/src/cocoa_window.m
vendored
|
@ -111,7 +111,7 @@ static void updateCursorMode(_GLFWwindow* window)
|
||||||
|
|
||||||
// Make the specified window and its video mode active on its monitor
|
// Make the specified window and its video mode active on its monitor
|
||||||
//
|
//
|
||||||
static void acquireMonitor(_GLFWwindow* window)
|
static void acquireMonitorCocoa(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
_glfwSetVideoModeCocoa(window->monitor, &window->videoMode);
|
_glfwSetVideoModeCocoa(window->monitor, &window->videoMode);
|
||||||
const CGRect bounds = CGDisplayBounds(window->monitor->ns.displayID);
|
const CGRect bounds = CGDisplayBounds(window->monitor->ns.displayID);
|
||||||
|
@ -127,7 +127,7 @@ static void acquireMonitor(_GLFWwindow* window)
|
||||||
|
|
||||||
// Remove the window and restore the original video mode
|
// Remove the window and restore the original video mode
|
||||||
//
|
//
|
||||||
static void releaseMonitor(_GLFWwindow* window)
|
static void releaseMonitorCocoa(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
if (window->monitor->window != window)
|
if (window->monitor->window != window)
|
||||||
return;
|
return;
|
||||||
|
@ -158,7 +158,7 @@ static int translateFlags(NSUInteger flags)
|
||||||
|
|
||||||
// Translates a macOS keycode to a GLFW keycode
|
// Translates a macOS keycode to a GLFW keycode
|
||||||
//
|
//
|
||||||
static int translateKey(unsigned int key)
|
static int translateKeyCocoa(unsigned int key)
|
||||||
{
|
{
|
||||||
if (key >= sizeof(_glfw.ns.keycodes) / sizeof(_glfw.ns.keycodes[0]))
|
if (key >= sizeof(_glfw.ns.keycodes) / sizeof(_glfw.ns.keycodes[0]))
|
||||||
return GLFW_KEY_UNKNOWN;
|
return GLFW_KEY_UNKNOWN;
|
||||||
|
@ -277,7 +277,7 @@ static const NSRange kEmptyRange = { NSNotFound, 0 };
|
||||||
- (void)windowDidMiniaturize:(NSNotification *)notification
|
- (void)windowDidMiniaturize:(NSNotification *)notification
|
||||||
{
|
{
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
releaseMonitor(window);
|
releaseMonitorCocoa(window);
|
||||||
|
|
||||||
_glfwInputWindowIconify(window, GLFW_TRUE);
|
_glfwInputWindowIconify(window, GLFW_TRUE);
|
||||||
}
|
}
|
||||||
|
@ -285,7 +285,7 @@ static const NSRange kEmptyRange = { NSNotFound, 0 };
|
||||||
- (void)windowDidDeminiaturize:(NSNotification *)notification
|
- (void)windowDidDeminiaturize:(NSNotification *)notification
|
||||||
{
|
{
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
acquireMonitor(window);
|
acquireMonitorCocoa(window);
|
||||||
|
|
||||||
_glfwInputWindowIconify(window, GLFW_FALSE);
|
_glfwInputWindowIconify(window, GLFW_FALSE);
|
||||||
}
|
}
|
||||||
|
@ -561,7 +561,7 @@ static const NSRange kEmptyRange = { NSNotFound, 0 };
|
||||||
|
|
||||||
- (void)keyDown:(NSEvent *)event
|
- (void)keyDown:(NSEvent *)event
|
||||||
{
|
{
|
||||||
const int key = translateKey([event keyCode]);
|
const int key = translateKeyCocoa([event keyCode]);
|
||||||
const int mods = translateFlags([event modifierFlags]);
|
const int mods = translateFlags([event modifierFlags]);
|
||||||
|
|
||||||
_glfwInputKey(window, key, [event keyCode], GLFW_PRESS, mods);
|
_glfwInputKey(window, key, [event keyCode], GLFW_PRESS, mods);
|
||||||
|
@ -574,7 +574,7 @@ static const NSRange kEmptyRange = { NSNotFound, 0 };
|
||||||
int action;
|
int action;
|
||||||
const unsigned int modifierFlags =
|
const unsigned int modifierFlags =
|
||||||
[event modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask;
|
[event modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask;
|
||||||
const int key = translateKey([event keyCode]);
|
const int key = translateKeyCocoa([event keyCode]);
|
||||||
const int mods = translateFlags(modifierFlags);
|
const int mods = translateFlags(modifierFlags);
|
||||||
const NSUInteger keyFlag = translateKeyToModifierFlag(key);
|
const NSUInteger keyFlag = translateKeyToModifierFlag(key);
|
||||||
|
|
||||||
|
@ -593,7 +593,7 @@ static const NSRange kEmptyRange = { NSNotFound, 0 };
|
||||||
|
|
||||||
- (void)keyUp:(NSEvent *)event
|
- (void)keyUp:(NSEvent *)event
|
||||||
{
|
{
|
||||||
const int key = translateKey([event keyCode]);
|
const int key = translateKeyCocoa([event keyCode]);
|
||||||
const int mods = translateFlags([event modifierFlags]);
|
const int mods = translateFlags([event modifierFlags]);
|
||||||
_glfwInputKey(window, key, [event keyCode], GLFW_RELEASE, mods);
|
_glfwInputKey(window, key, [event keyCode], GLFW_RELEASE, mods);
|
||||||
}
|
}
|
||||||
|
@ -966,7 +966,7 @@ GLFWbool _glfwCreateWindowCocoa(_GLFWwindow* window,
|
||||||
{
|
{
|
||||||
_glfwShowWindowCocoa(window);
|
_glfwShowWindowCocoa(window);
|
||||||
_glfwFocusWindowCocoa(window);
|
_glfwFocusWindowCocoa(window);
|
||||||
acquireMonitor(window);
|
acquireMonitorCocoa(window);
|
||||||
|
|
||||||
if (wndconfig->centerCursor)
|
if (wndconfig->centerCursor)
|
||||||
_glfwCenterCursorInContentArea(window);
|
_glfwCenterCursorInContentArea(window);
|
||||||
|
@ -996,7 +996,7 @@ void _glfwDestroyWindowCocoa(_GLFWwindow* window)
|
||||||
[window->ns.object orderOut:nil];
|
[window->ns.object orderOut:nil];
|
||||||
|
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
releaseMonitor(window);
|
releaseMonitorCocoa(window);
|
||||||
|
|
||||||
if (window->context.destroy)
|
if (window->context.destroy)
|
||||||
window->context.destroy(window);
|
window->context.destroy(window);
|
||||||
|
@ -1083,7 +1083,7 @@ void _glfwSetWindowSizeCocoa(_GLFWwindow* window, int width, int height)
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
{
|
{
|
||||||
if (window->monitor->window == window)
|
if (window->monitor->window == window)
|
||||||
acquireMonitor(window);
|
acquireMonitorCocoa(window);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1252,7 +1252,7 @@ void _glfwSetWindowMonitorCocoa(_GLFWwindow* window,
|
||||||
if (monitor)
|
if (monitor)
|
||||||
{
|
{
|
||||||
if (monitor->window == window)
|
if (monitor->window == window)
|
||||||
acquireMonitor(window);
|
acquireMonitorCocoa(window);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1270,7 +1270,7 @@ void _glfwSetWindowMonitorCocoa(_GLFWwindow* window,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
releaseMonitor(window);
|
releaseMonitorCocoa(window);
|
||||||
|
|
||||||
_glfwInputWindowMonitor(window, monitor);
|
_glfwInputWindowMonitor(window, monitor);
|
||||||
|
|
||||||
|
@ -1308,7 +1308,7 @@ void _glfwSetWindowMonitorCocoa(_GLFWwindow* window,
|
||||||
[window->ns.object setLevel:NSMainMenuWindowLevel + 1];
|
[window->ns.object setLevel:NSMainMenuWindowLevel + 1];
|
||||||
[window->ns.object setHasShadow:NO];
|
[window->ns.object setHasShadow:NO];
|
||||||
|
|
||||||
acquireMonitor(window);
|
acquireMonitorCocoa(window);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
19
src/external/glfw/src/null_window.c
vendored
19
src/external/glfw/src/null_window.c
vendored
|
@ -1,8 +1,9 @@
|
||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.4 - www.glfw.org
|
// GLFW 3.4 (modified for raylib) - www.glfw.org; www.raylib.com
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2016 Google Inc.
|
// Copyright (c) 2016 Google Inc.
|
||||||
// Copyright (c) 2016-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2016-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
// Copyright (c) 2024 M374LX <wilsalx@gmail.com>
|
||||||
//
|
//
|
||||||
// This software is provided 'as-is', without any express or implied
|
// This software is provided 'as-is', without any express or implied
|
||||||
// warranty. In no event will the authors be held liable for any damages
|
// warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -59,12 +60,12 @@ static void fitToMonitor(_GLFWwindow* window)
|
||||||
window->null.height = mode.height;
|
window->null.height = mode.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void acquireMonitor(_GLFWwindow* window)
|
static void acquireMonitorNull(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
_glfwInputMonitorWindow(window->monitor, window);
|
_glfwInputMonitorWindow(window->monitor, window);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void releaseMonitor(_GLFWwindow* window)
|
static void releaseMonitorNull(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
if (window->monitor->window != window)
|
if (window->monitor->window != window)
|
||||||
return;
|
return;
|
||||||
|
@ -147,7 +148,7 @@ GLFWbool _glfwCreateWindowNull(_GLFWwindow* window,
|
||||||
{
|
{
|
||||||
_glfwShowWindowNull(window);
|
_glfwShowWindowNull(window);
|
||||||
_glfwFocusWindowNull(window);
|
_glfwFocusWindowNull(window);
|
||||||
acquireMonitor(window);
|
acquireMonitorNull(window);
|
||||||
|
|
||||||
if (wndconfig->centerCursor)
|
if (wndconfig->centerCursor)
|
||||||
_glfwCenterCursorInContentArea(window);
|
_glfwCenterCursorInContentArea(window);
|
||||||
|
@ -168,7 +169,7 @@ GLFWbool _glfwCreateWindowNull(_GLFWwindow* window,
|
||||||
void _glfwDestroyWindowNull(_GLFWwindow* window)
|
void _glfwDestroyWindowNull(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
releaseMonitor(window);
|
releaseMonitorNull(window);
|
||||||
|
|
||||||
if (_glfw.null.focusedWindow == window)
|
if (_glfw.null.focusedWindow == window)
|
||||||
_glfw.null.focusedWindow = NULL;
|
_glfw.null.focusedWindow = NULL;
|
||||||
|
@ -203,14 +204,14 @@ void _glfwSetWindowMonitorNull(_GLFWwindow* window,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
releaseMonitor(window);
|
releaseMonitorNull(window);
|
||||||
|
|
||||||
_glfwInputWindowMonitor(window, monitor);
|
_glfwInputWindowMonitor(window, monitor);
|
||||||
|
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
{
|
{
|
||||||
window->null.visible = GLFW_TRUE;
|
window->null.visible = GLFW_TRUE;
|
||||||
acquireMonitor(window);
|
acquireMonitorNull(window);
|
||||||
fitToMonitor(window);
|
fitToMonitor(window);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -340,7 +341,7 @@ void _glfwIconifyWindowNull(_GLFWwindow* window)
|
||||||
_glfwInputWindowIconify(window, GLFW_TRUE);
|
_glfwInputWindowIconify(window, GLFW_TRUE);
|
||||||
|
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
releaseMonitor(window);
|
releaseMonitorNull(window);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -352,7 +353,7 @@ void _glfwRestoreWindowNull(_GLFWwindow* window)
|
||||||
_glfwInputWindowIconify(window, GLFW_FALSE);
|
_glfwInputWindowIconify(window, GLFW_FALSE);
|
||||||
|
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
acquireMonitor(window);
|
acquireMonitorNull(window);
|
||||||
}
|
}
|
||||||
else if (window->null.maximized)
|
else if (window->null.maximized)
|
||||||
{
|
{
|
||||||
|
|
12
src/external/glfw/src/platform.c
vendored
12
src/external/glfw/src/platform.c
vendored
|
@ -1,8 +1,9 @@
|
||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.4 - www.glfw.org
|
// GLFW 3.4 (modified for raylib) - www.glfw.org; www.raylib.com
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
// Copyright (c) 2024 M374LX <wilsalx@gmail.com>
|
||||||
//
|
//
|
||||||
// This software is provided 'as-is', without any express or implied
|
// This software is provided 'as-is', without any express or implied
|
||||||
// warranty. In no event will the authors be held liable for any damages
|
// warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -74,15 +75,6 @@ GLFWbool _glfwSelectPlatform(int desiredID, _GLFWplatform* platform)
|
||||||
return GLFW_FALSE;
|
return GLFW_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only allow the Null platform if specifically requested
|
|
||||||
if (desiredID == GLFW_PLATFORM_NULL)
|
|
||||||
return _glfwConnectNull(desiredID, platform);
|
|
||||||
else if (count == 0)
|
|
||||||
{
|
|
||||||
_glfwInputError(GLFW_PLATFORM_UNAVAILABLE, "This binary only supports the Null platform");
|
|
||||||
return GLFW_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(_GLFW_WAYLAND) && defined(_GLFW_X11)
|
#if defined(_GLFW_WAYLAND) && defined(_GLFW_X11)
|
||||||
if (desiredID == GLFW_ANY_PLATFORM)
|
if (desiredID == GLFW_ANY_PLATFORM)
|
||||||
{
|
{
|
||||||
|
|
7
src/external/glfw/src/win32_init.c
vendored
7
src/external/glfw/src/win32_init.c
vendored
|
@ -1,8 +1,9 @@
|
||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.4 Win32 - www.glfw.org
|
// GLFW 3.4 Win32 (modified for raylib) - www.glfw.org; www.raylib.com
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
// Copyright (c) 2024 M374LX <wilsalx@gmail.com>
|
||||||
//
|
//
|
||||||
// This software is provided 'as-is', without any express or implied
|
// This software is provided 'as-is', without any express or implied
|
||||||
// warranty. In no event will the authors be held liable for any damages
|
// warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -195,7 +196,7 @@ static void freeLibraries(void)
|
||||||
|
|
||||||
// Create key code translation tables
|
// Create key code translation tables
|
||||||
//
|
//
|
||||||
static void createKeyTables(void)
|
static void createKeyTablesWin32(void)
|
||||||
{
|
{
|
||||||
int scancode;
|
int scancode;
|
||||||
|
|
||||||
|
@ -685,7 +686,7 @@ int _glfwInitWin32(void)
|
||||||
if (!loadLibraries())
|
if (!loadLibraries())
|
||||||
return GLFW_FALSE;
|
return GLFW_FALSE;
|
||||||
|
|
||||||
createKeyTables();
|
createKeyTablesWin32();
|
||||||
_glfwUpdateKeyNamesWin32();
|
_glfwUpdateKeyNamesWin32();
|
||||||
|
|
||||||
if (_glfwIsWindows10Version1703OrGreaterWin32())
|
if (_glfwIsWindows10Version1703OrGreaterWin32())
|
||||||
|
|
25
src/external/glfw/src/win32_window.c
vendored
25
src/external/glfw/src/win32_window.c
vendored
|
@ -1,8 +1,9 @@
|
||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.4 Win32 - www.glfw.org
|
// GLFW 3.4 Win32 (modified for raylib) - www.glfw.org; www.raylib.com
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
// Copyright (c) 2024 M374LX <wilsalx@gmail.com>
|
||||||
//
|
//
|
||||||
// This software is provided 'as-is', without any express or implied
|
// This software is provided 'as-is', without any express or implied
|
||||||
// warranty. In no event will the authors be held liable for any damages
|
// warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -439,7 +440,7 @@ static void fitToMonitor(_GLFWwindow* window)
|
||||||
|
|
||||||
// Make the specified window and its video mode active on its monitor
|
// Make the specified window and its video mode active on its monitor
|
||||||
//
|
//
|
||||||
static void acquireMonitor(_GLFWwindow* window)
|
static void acquireMonitorWin32(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
if (!_glfw.win32.acquiredMonitorCount)
|
if (!_glfw.win32.acquiredMonitorCount)
|
||||||
{
|
{
|
||||||
|
@ -460,7 +461,7 @@ static void acquireMonitor(_GLFWwindow* window)
|
||||||
|
|
||||||
// Remove the window and restore the original video mode
|
// Remove the window and restore the original video mode
|
||||||
//
|
//
|
||||||
static void releaseMonitor(_GLFWwindow* window)
|
static void releaseMonitorWin32(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
if (window->monitor->window != window)
|
if (window->monitor->window != window)
|
||||||
return;
|
return;
|
||||||
|
@ -470,7 +471,7 @@ static void releaseMonitor(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
SetThreadExecutionState(ES_CONTINUOUS);
|
SetThreadExecutionState(ES_CONTINUOUS);
|
||||||
|
|
||||||
// HACK: Restore mouse trail length saved in acquireMonitor
|
// HACK: Restore mouse trail length saved in acquireMonitorWin32
|
||||||
SystemParametersInfoW(SPI_SETMOUSETRAILS, _glfw.win32.mouseTrailSize, 0, 0);
|
SystemParametersInfoW(SPI_SETMOUSETRAILS, _glfw.win32.mouseTrailSize, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1050,10 +1051,10 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM l
|
||||||
if (window->monitor && window->win32.iconified != iconified)
|
if (window->monitor && window->win32.iconified != iconified)
|
||||||
{
|
{
|
||||||
if (iconified)
|
if (iconified)
|
||||||
releaseMonitor(window);
|
releaseMonitorWin32(window);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
acquireMonitor(window);
|
acquireMonitorWin32(window);
|
||||||
fitToMonitor(window);
|
fitToMonitor(window);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1534,7 +1535,7 @@ GLFWbool _glfwCreateWindowWin32(_GLFWwindow* window,
|
||||||
{
|
{
|
||||||
_glfwShowWindowWin32(window);
|
_glfwShowWindowWin32(window);
|
||||||
_glfwFocusWindowWin32(window);
|
_glfwFocusWindowWin32(window);
|
||||||
acquireMonitor(window);
|
acquireMonitorWin32(window);
|
||||||
fitToMonitor(window);
|
fitToMonitor(window);
|
||||||
|
|
||||||
if (wndconfig->centerCursor)
|
if (wndconfig->centerCursor)
|
||||||
|
@ -1556,7 +1557,7 @@ GLFWbool _glfwCreateWindowWin32(_GLFWwindow* window,
|
||||||
void _glfwDestroyWindowWin32(_GLFWwindow* window)
|
void _glfwDestroyWindowWin32(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
releaseMonitor(window);
|
releaseMonitorWin32(window);
|
||||||
|
|
||||||
if (window->context.destroy)
|
if (window->context.destroy)
|
||||||
window->context.destroy(window);
|
window->context.destroy(window);
|
||||||
|
@ -1677,7 +1678,7 @@ void _glfwSetWindowSizeWin32(_GLFWwindow* window, int width, int height)
|
||||||
{
|
{
|
||||||
if (window->monitor->window == window)
|
if (window->monitor->window == window)
|
||||||
{
|
{
|
||||||
acquireMonitor(window);
|
acquireMonitorWin32(window);
|
||||||
fitToMonitor(window);
|
fitToMonitor(window);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1849,7 +1850,7 @@ void _glfwSetWindowMonitorWin32(_GLFWwindow* window,
|
||||||
{
|
{
|
||||||
if (monitor->window == window)
|
if (monitor->window == window)
|
||||||
{
|
{
|
||||||
acquireMonitor(window);
|
acquireMonitorWin32(window);
|
||||||
fitToMonitor(window);
|
fitToMonitor(window);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1879,7 +1880,7 @@ void _glfwSetWindowMonitorWin32(_GLFWwindow* window,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
releaseMonitor(window);
|
releaseMonitorWin32(window);
|
||||||
|
|
||||||
_glfwInputWindowMonitor(window, monitor);
|
_glfwInputWindowMonitor(window, monitor);
|
||||||
|
|
||||||
|
@ -1897,7 +1898,7 @@ void _glfwSetWindowMonitorWin32(_GLFWwindow* window,
|
||||||
flags |= SWP_FRAMECHANGED;
|
flags |= SWP_FRAMECHANGED;
|
||||||
}
|
}
|
||||||
|
|
||||||
acquireMonitor(window);
|
acquireMonitorWin32(window);
|
||||||
|
|
||||||
GetMonitorInfoW(window->monitor->win32.handle, &mi);
|
GetMonitorInfoW(window->monitor->win32.handle, &mi);
|
||||||
SetWindowPos(window->win32.handle, HWND_TOPMOST,
|
SetWindowPos(window->win32.handle, HWND_TOPMOST,
|
||||||
|
|
7
src/external/glfw/src/wl_init.c
vendored
7
src/external/glfw/src/wl_init.c
vendored
|
@ -1,7 +1,8 @@
|
||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.4 Wayland - www.glfw.org
|
// GLFW 3.4 Wayland (modified for raylib) - www.glfw.org; www.raylib.com
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>
|
// Copyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>
|
||||||
|
// Copyright (c) 2024 M374LX <wilsalx@gmail.com>
|
||||||
//
|
//
|
||||||
// This software is provided 'as-is', without any express or implied
|
// This software is provided 'as-is', without any express or implied
|
||||||
// warranty. In no event will the authors be held liable for any damages
|
// warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -257,7 +258,7 @@ static const struct wl_callback_listener libdecorReadyListener =
|
||||||
|
|
||||||
// Create key code translation tables
|
// Create key code translation tables
|
||||||
//
|
//
|
||||||
static void createKeyTables(void)
|
static void createKeyTablesWayland(void)
|
||||||
{
|
{
|
||||||
memset(_glfw.wl.keycodes, -1, sizeof(_glfw.wl.keycodes));
|
memset(_glfw.wl.keycodes, -1, sizeof(_glfw.wl.keycodes));
|
||||||
memset(_glfw.wl.scancodes, -1, sizeof(_glfw.wl.scancodes));
|
memset(_glfw.wl.scancodes, -1, sizeof(_glfw.wl.scancodes));
|
||||||
|
@ -821,7 +822,7 @@ int _glfwInitWayland(void)
|
||||||
_glfw.wl.registry = wl_display_get_registry(_glfw.wl.display);
|
_glfw.wl.registry = wl_display_get_registry(_glfw.wl.display);
|
||||||
wl_registry_add_listener(_glfw.wl.registry, ®istryListener, NULL);
|
wl_registry_add_listener(_glfw.wl.registry, ®istryListener, NULL);
|
||||||
|
|
||||||
createKeyTables();
|
createKeyTablesWayland();
|
||||||
|
|
||||||
_glfw.wl.xkb.context = xkb_context_new(0);
|
_glfw.wl.xkb.context = xkb_context_new(0);
|
||||||
if (!_glfw.wl.xkb.context)
|
if (!_glfw.wl.xkb.context)
|
||||||
|
|
17
src/external/glfw/src/wl_window.c
vendored
17
src/external/glfw/src/wl_window.c
vendored
|
@ -1,7 +1,8 @@
|
||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.4 Wayland - www.glfw.org
|
// GLFW 3.4 Wayland (modified for raylib) - www.glfw.org; www.raylib.com
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>
|
// Copyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>
|
||||||
|
// Copyright (c) 2024 M374LX <wilsalx@gmail.com>
|
||||||
//
|
//
|
||||||
// This software is provided 'as-is', without any express or implied
|
// This software is provided 'as-is', without any express or implied
|
||||||
// warranty. In no event will the authors be held liable for any damages
|
// warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -498,7 +499,7 @@ static void setIdleInhibitor(_GLFWwindow* window, GLFWbool enable)
|
||||||
|
|
||||||
// Make the specified window and its video mode active on its monitor
|
// Make the specified window and its video mode active on its monitor
|
||||||
//
|
//
|
||||||
static void acquireMonitor(_GLFWwindow* window)
|
static void acquireMonitorWayland(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
if (window->wl.libdecor.frame)
|
if (window->wl.libdecor.frame)
|
||||||
{
|
{
|
||||||
|
@ -519,7 +520,7 @@ static void acquireMonitor(_GLFWwindow* window)
|
||||||
|
|
||||||
// Remove the window and restore the original video mode
|
// Remove the window and restore the original video mode
|
||||||
//
|
//
|
||||||
static void releaseMonitor(_GLFWwindow* window)
|
static void releaseMonitorWayland(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
if (window->wl.libdecor.frame)
|
if (window->wl.libdecor.frame)
|
||||||
libdecor_frame_unset_fullscreen(window->wl.libdecor.frame);
|
libdecor_frame_unset_fullscreen(window->wl.libdecor.frame);
|
||||||
|
@ -1156,7 +1157,7 @@ static GLFWbool flushDisplay(void)
|
||||||
return GLFW_TRUE;
|
return GLFW_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int translateKey(uint32_t scancode)
|
static int translateKeyWayland(uint32_t scancode)
|
||||||
{
|
{
|
||||||
if (scancode < sizeof(_glfw.wl.keycodes) / sizeof(_glfw.wl.keycodes[0]))
|
if (scancode < sizeof(_glfw.wl.keycodes) / sizeof(_glfw.wl.keycodes[0]))
|
||||||
return _glfw.wl.keycodes[scancode];
|
return _glfw.wl.keycodes[scancode];
|
||||||
|
@ -1270,7 +1271,7 @@ static void handleEvents(double* timeout)
|
||||||
for (uint64_t i = 0; i < repeats; i++)
|
for (uint64_t i = 0; i < repeats; i++)
|
||||||
{
|
{
|
||||||
_glfwInputKey(_glfw.wl.keyboardFocus,
|
_glfwInputKey(_glfw.wl.keyboardFocus,
|
||||||
translateKey(_glfw.wl.keyRepeatScancode),
|
translateKeyWayland(_glfw.wl.keyRepeatScancode),
|
||||||
_glfw.wl.keyRepeatScancode,
|
_glfw.wl.keyRepeatScancode,
|
||||||
GLFW_PRESS,
|
GLFW_PRESS,
|
||||||
_glfw.wl.xkb.modifiers);
|
_glfw.wl.xkb.modifiers);
|
||||||
|
@ -1773,7 +1774,7 @@ static void keyboardHandleKey(void* userData,
|
||||||
if (!window)
|
if (!window)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const int key = translateKey(scancode);
|
const int key = translateKeyWayland(scancode);
|
||||||
const int action =
|
const int action =
|
||||||
state == WL_KEYBOARD_KEY_STATE_PRESSED ? GLFW_PRESS : GLFW_RELEASE;
|
state == WL_KEYBOARD_KEY_STATE_PRESSED ? GLFW_PRESS : GLFW_RELEASE;
|
||||||
|
|
||||||
|
@ -2509,12 +2510,12 @@ void _glfwSetWindowMonitorWayland(_GLFWwindow* window,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
releaseMonitor(window);
|
releaseMonitorWayland(window);
|
||||||
|
|
||||||
_glfwInputWindowMonitor(window, monitor);
|
_glfwInputWindowMonitor(window, monitor);
|
||||||
|
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
acquireMonitor(window);
|
acquireMonitorWayland(window);
|
||||||
else
|
else
|
||||||
_glfwSetWindowSizeWayland(window, width, height);
|
_glfwSetWindowSizeWayland(window, width, height);
|
||||||
}
|
}
|
||||||
|
|
7
src/external/glfw/src/x11_init.c
vendored
7
src/external/glfw/src/x11_init.c
vendored
|
@ -1,8 +1,9 @@
|
||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.4 X11 - www.glfw.org
|
// GLFW 3.4 X11 (modified for raylib) - www.glfw.org; www.raylib.com
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
// Copyright (c) 2024 M374LX <wilsalx@gmail.com>
|
||||||
//
|
//
|
||||||
// This software is provided 'as-is', without any express or implied
|
// This software is provided 'as-is', without any express or implied
|
||||||
// warranty. In no event will the authors be held liable for any damages
|
// warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -210,7 +211,7 @@ static int translateKeySyms(const KeySym* keysyms, int width)
|
||||||
|
|
||||||
// Create key code translation tables
|
// Create key code translation tables
|
||||||
//
|
//
|
||||||
static void createKeyTables(void)
|
static void createKeyTablesX11(void)
|
||||||
{
|
{
|
||||||
int scancodeMin, scancodeMax;
|
int scancodeMin, scancodeMax;
|
||||||
|
|
||||||
|
@ -908,7 +909,7 @@ static GLFWbool initExtensions(void)
|
||||||
// Update the key code LUT
|
// Update the key code LUT
|
||||||
// FIXME: We should listen to XkbMapNotify events to track changes to
|
// FIXME: We should listen to XkbMapNotify events to track changes to
|
||||||
// the keyboard mapping.
|
// the keyboard mapping.
|
||||||
createKeyTables();
|
createKeyTablesX11();
|
||||||
|
|
||||||
// String format atoms
|
// String format atoms
|
||||||
_glfw.x11.NULL_ = XInternAtom(_glfw.x11.display, "NULL", False);
|
_glfw.x11.NULL_ = XInternAtom(_glfw.x11.display, "NULL", False);
|
||||||
|
|
31
src/external/glfw/src/x11_window.c
vendored
31
src/external/glfw/src/x11_window.c
vendored
|
@ -1,8 +1,9 @@
|
||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.4 X11 - www.glfw.org
|
// GLFW 3.4 X11 (modified for raylib) - www.glfw.org; www.raylib.com
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
// Copyright (c) 2024 M374LX <wilsalx@gmail.com>
|
||||||
//
|
//
|
||||||
// This software is provided 'as-is', without any express or implied
|
// This software is provided 'as-is', without any express or implied
|
||||||
// warranty. In no event will the authors be held liable for any damages
|
// warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -235,9 +236,9 @@ static int translateState(int state)
|
||||||
|
|
||||||
// Translates an X11 key code to a GLFW key token
|
// Translates an X11 key code to a GLFW key token
|
||||||
//
|
//
|
||||||
static int translateKey(int scancode)
|
static int translateKeyX11(int scancode)
|
||||||
{
|
{
|
||||||
// Use the pre-filled LUT (see createKeyTables() in x11_init.c)
|
// Use the pre-filled LUT (see createKeyTablesX11() in x11_init.c)
|
||||||
if (scancode < 0 || scancode > 255)
|
if (scancode < 0 || scancode > 255)
|
||||||
return GLFW_KEY_UNKNOWN;
|
return GLFW_KEY_UNKNOWN;
|
||||||
|
|
||||||
|
@ -1081,7 +1082,7 @@ static const char* getSelectionString(Atom selection)
|
||||||
|
|
||||||
// Make the specified window and its video mode active on its monitor
|
// Make the specified window and its video mode active on its monitor
|
||||||
//
|
//
|
||||||
static void acquireMonitor(_GLFWwindow* window)
|
static void acquireMonitorX11(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
if (_glfw.x11.saver.count == 0)
|
if (_glfw.x11.saver.count == 0)
|
||||||
{
|
{
|
||||||
|
@ -1120,7 +1121,7 @@ static void acquireMonitor(_GLFWwindow* window)
|
||||||
|
|
||||||
// Remove the window and restore the original video mode
|
// Remove the window and restore the original video mode
|
||||||
//
|
//
|
||||||
static void releaseMonitor(_GLFWwindow* window)
|
static void releaseMonitorX11(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
if (window->monitor->window != window)
|
if (window->monitor->window != window)
|
||||||
return;
|
return;
|
||||||
|
@ -1242,7 +1243,7 @@ static void processEvent(XEvent *event)
|
||||||
|
|
||||||
case KeyPress:
|
case KeyPress:
|
||||||
{
|
{
|
||||||
const int key = translateKey(keycode);
|
const int key = translateKeyX11(keycode);
|
||||||
const int mods = translateState(event->xkey.state);
|
const int mods = translateState(event->xkey.state);
|
||||||
const int plain = !(mods & (GLFW_MOD_CONTROL | GLFW_MOD_ALT));
|
const int plain = !(mods & (GLFW_MOD_CONTROL | GLFW_MOD_ALT));
|
||||||
|
|
||||||
|
@ -1314,7 +1315,7 @@ static void processEvent(XEvent *event)
|
||||||
|
|
||||||
case KeyRelease:
|
case KeyRelease:
|
||||||
{
|
{
|
||||||
const int key = translateKey(keycode);
|
const int key = translateKeyX11(keycode);
|
||||||
const int mods = translateState(event->xkey.state);
|
const int mods = translateState(event->xkey.state);
|
||||||
|
|
||||||
if (!_glfw.x11.xkb.detectable)
|
if (!_glfw.x11.xkb.detectable)
|
||||||
|
@ -1806,9 +1807,9 @@ static void processEvent(XEvent *event)
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
{
|
{
|
||||||
if (iconified)
|
if (iconified)
|
||||||
releaseMonitor(window);
|
releaseMonitorX11(window);
|
||||||
else
|
else
|
||||||
acquireMonitor(window);
|
acquireMonitorX11(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
window->x11.iconified = iconified;
|
window->x11.iconified = iconified;
|
||||||
|
@ -2025,7 +2026,7 @@ GLFWbool _glfwCreateWindowX11(_GLFWwindow* window,
|
||||||
{
|
{
|
||||||
_glfwShowWindowX11(window);
|
_glfwShowWindowX11(window);
|
||||||
updateWindowMode(window);
|
updateWindowMode(window);
|
||||||
acquireMonitor(window);
|
acquireMonitorX11(window);
|
||||||
|
|
||||||
if (wndconfig->centerCursor)
|
if (wndconfig->centerCursor)
|
||||||
_glfwCenterCursorInContentArea(window);
|
_glfwCenterCursorInContentArea(window);
|
||||||
|
@ -2050,7 +2051,7 @@ void _glfwDestroyWindowX11(_GLFWwindow* window)
|
||||||
enableCursor(window);
|
enableCursor(window);
|
||||||
|
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
releaseMonitor(window);
|
releaseMonitorX11(window);
|
||||||
|
|
||||||
if (window->x11.ic)
|
if (window->x11.ic)
|
||||||
{
|
{
|
||||||
|
@ -2206,7 +2207,7 @@ void _glfwSetWindowSizeX11(_GLFWwindow* window, int width, int height)
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
{
|
{
|
||||||
if (window->monitor->window == window)
|
if (window->monitor->window == window)
|
||||||
acquireMonitor(window);
|
acquireMonitorX11(window);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2477,7 +2478,7 @@ void _glfwSetWindowMonitorX11(_GLFWwindow* window,
|
||||||
if (monitor)
|
if (monitor)
|
||||||
{
|
{
|
||||||
if (monitor->window == window)
|
if (monitor->window == window)
|
||||||
acquireMonitor(window);
|
acquireMonitorX11(window);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2496,7 +2497,7 @@ void _glfwSetWindowMonitorX11(_GLFWwindow* window,
|
||||||
{
|
{
|
||||||
_glfwSetWindowDecoratedX11(window, window->decorated);
|
_glfwSetWindowDecoratedX11(window, window->decorated);
|
||||||
_glfwSetWindowFloatingX11(window, window->floating);
|
_glfwSetWindowFloatingX11(window, window->floating);
|
||||||
releaseMonitor(window);
|
releaseMonitorX11(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
_glfwInputWindowMonitor(window, monitor);
|
_glfwInputWindowMonitor(window, monitor);
|
||||||
|
@ -2511,7 +2512,7 @@ void _glfwSetWindowMonitorX11(_GLFWwindow* window,
|
||||||
}
|
}
|
||||||
|
|
||||||
updateWindowMode(window);
|
updateWindowMode(window);
|
||||||
acquireMonitor(window);
|
acquireMonitorX11(window);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
15
src/rglfw.c
15
src/rglfw.c
|
@ -35,7 +35,7 @@
|
||||||
// _GLFW_WAYLAND to use the Wayland API (experimental and incomplete)
|
// _GLFW_WAYLAND to use the Wayland API (experimental and incomplete)
|
||||||
// _GLFW_COCOA to use the Cocoa frameworks
|
// _GLFW_COCOA to use the Cocoa frameworks
|
||||||
//
|
//
|
||||||
// Note: GLFW's runtime platform selection is not supported at the moment
|
// On Linux, _GLFW_X11 and _GLFW_WAYLAND can be combined
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Feature Test Macros required for this module
|
// Feature Test Macros required for this module
|
||||||
|
@ -53,8 +53,8 @@
|
||||||
#define _GLFW_WIN32
|
#define _GLFW_WIN32
|
||||||
#endif
|
#endif
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
#if !defined(_GLFW_WAYLAND) // Required for Wayland windowing
|
#if !defined(_GLFW_WAYLAND) && !defined(_GLFW_X11)
|
||||||
#define _GLFW_X11
|
#error "Cannot disable Wayland and X11 at the same time"
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
|
#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
|
||||||
|
@ -69,15 +69,6 @@
|
||||||
#define _WIN32_WINNT_WINXP 0x0501
|
#define _WIN32_WINNT_WINXP 0x0501
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "external/glfw/src/internal.h"
|
|
||||||
|
|
||||||
// We do not use GLFW's "null" platform, but the absence of this function
|
|
||||||
// causes the build to fail
|
|
||||||
GLFWbool _glfwConnectNull(int platformID, _GLFWplatform* platform)
|
|
||||||
{
|
|
||||||
return GLFW_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Common modules to all platforms
|
// Common modules to all platforms
|
||||||
#include "external/glfw/src/init.c"
|
#include "external/glfw/src/init.c"
|
||||||
#include "external/glfw/src/platform.c"
|
#include "external/glfw/src/platform.c"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue