initial commit, 4.5 stable
Some checks failed
🔗 GHA / 📊 Static checks (push) Has been cancelled
🔗 GHA / 🤖 Android (push) Has been cancelled
🔗 GHA / 🍏 iOS (push) Has been cancelled
🔗 GHA / 🐧 Linux (push) Has been cancelled
🔗 GHA / 🍎 macOS (push) Has been cancelled
🔗 GHA / 🏁 Windows (push) Has been cancelled
🔗 GHA / 🌐 Web (push) Has been cancelled
Some checks failed
🔗 GHA / 📊 Static checks (push) Has been cancelled
🔗 GHA / 🤖 Android (push) Has been cancelled
🔗 GHA / 🍏 iOS (push) Has been cancelled
🔗 GHA / 🐧 Linux (push) Has been cancelled
🔗 GHA / 🍎 macOS (push) Has been cancelled
🔗 GHA / 🏁 Windows (push) Has been cancelled
🔗 GHA / 🌐 Web (push) Has been cancelled
This commit is contained in:
127
platform/linuxbsd/wayland/SCsub
Normal file
127
platform/linuxbsd/wayland/SCsub
Normal file
@@ -0,0 +1,127 @@
|
||||
#!/usr/bin/env python
|
||||
from misc.utility.scons_hints import *
|
||||
|
||||
Import("env")
|
||||
|
||||
# TODO: Add warning to headers and code about their autogenerated status.
|
||||
if env["use_sowrap"]:
|
||||
# We have to implement separate builders for so wrappers as the
|
||||
# autogenerated Wayland protocol wrapper must include them instead of the
|
||||
# native libraries.
|
||||
|
||||
WAYLAND_BUILDERS_SOWRAP = {
|
||||
"WAYLAND_API_HEADER": Builder(
|
||||
action=env.Run(
|
||||
r"wayland-scanner -c client-header < ${SOURCE} | "
|
||||
r"sed 's:wayland-client-core\.h:../dynwrappers/wayland-client-core-so_wrap\.h:' > ${TARGET}",
|
||||
),
|
||||
single_source=True,
|
||||
),
|
||||
"WAYLAND_API_CODE": Builder(
|
||||
action=env.Run(
|
||||
r"wayland-scanner -c private-code < ${SOURCE} | "
|
||||
r"sed 's:wayland-util\.h:../dynwrappers/wayland-client-core-so_wrap\.h:' > ${TARGET}",
|
||||
),
|
||||
single_source=True,
|
||||
),
|
||||
}
|
||||
env.Append(BUILDERS=WAYLAND_BUILDERS_SOWRAP)
|
||||
else:
|
||||
WAYLAND_BUILDERS = {
|
||||
"WAYLAND_API_HEADER": Builder(
|
||||
action=env.Run(r"wayland-scanner -c client-header < ${SOURCE} > ${TARGET}"),
|
||||
single_source=True,
|
||||
),
|
||||
"WAYLAND_API_CODE": Builder(
|
||||
action=env.Run(r"wayland-scanner -c private-code < ${SOURCE} > ${TARGET}"),
|
||||
single_source=True,
|
||||
),
|
||||
}
|
||||
env.Append(BUILDERS=WAYLAND_BUILDERS)
|
||||
|
||||
|
||||
def generate_from_xml(name, path):
|
||||
header = env.WAYLAND_API_HEADER(f"protocol/{name}.gen.h", path)
|
||||
source = env.WAYLAND_API_CODE(f"protocol/{name}.gen.c", path)
|
||||
env.NoCache(header, source)
|
||||
|
||||
return env.Object(f"protocol/{name}.gen.c")
|
||||
|
||||
|
||||
objects = [
|
||||
# Core protocol
|
||||
generate_from_xml("wayland", "#thirdparty/wayland/protocol/wayland.xml"),
|
||||
# Stable protocols
|
||||
generate_from_xml("tablet", "#thirdparty/wayland-protocols/stable/tablet/tablet-v2.xml"),
|
||||
generate_from_xml("viewporter", "#thirdparty/wayland-protocols/stable/viewporter/viewporter.xml"),
|
||||
generate_from_xml("xdg_shell", "#thirdparty/wayland-protocols/stable/xdg-shell/xdg-shell.xml"),
|
||||
# Staging protocols
|
||||
generate_from_xml("cursor_shape", "#thirdparty/wayland-protocols/staging/cursor-shape/cursor-shape-v1.xml"),
|
||||
generate_from_xml(
|
||||
"fractional_scale", "#thirdparty/wayland-protocols/staging/fractional-scale/fractional-scale-v1.xml"
|
||||
),
|
||||
generate_from_xml("xdg_activation", "#thirdparty/wayland-protocols/staging/xdg-activation/xdg-activation-v1.xml"),
|
||||
generate_from_xml(
|
||||
"xdg_system_bell", "#thirdparty/wayland-protocols/staging/xdg-system-bell/xdg-system-bell-v1.xml"
|
||||
),
|
||||
# Unstable protocols
|
||||
generate_from_xml(
|
||||
"idle_inhibit", "#thirdparty/wayland-protocols/unstable/idle-inhibit/idle-inhibit-unstable-v1.xml"
|
||||
),
|
||||
generate_from_xml(
|
||||
"pointer_constraints",
|
||||
"#thirdparty/wayland-protocols/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml",
|
||||
),
|
||||
generate_from_xml(
|
||||
"pointer_gestures", "#thirdparty/wayland-protocols/unstable/pointer-gestures/pointer-gestures-unstable-v1.xml"
|
||||
),
|
||||
generate_from_xml(
|
||||
"primary_selection",
|
||||
"#thirdparty/wayland-protocols/unstable/primary-selection/primary-selection-unstable-v1.xml",
|
||||
),
|
||||
generate_from_xml(
|
||||
"relative_pointer", "#thirdparty/wayland-protocols/unstable/relative-pointer/relative-pointer-unstable-v1.xml"
|
||||
),
|
||||
generate_from_xml("text_input", "#thirdparty/wayland-protocols/unstable/text-input/text-input-unstable-v3.xml"),
|
||||
generate_from_xml(
|
||||
"xdg_decoration", "#thirdparty/wayland-protocols/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml"
|
||||
),
|
||||
generate_from_xml(
|
||||
"xdg_foreign_v1", "#thirdparty/wayland-protocols/unstable/xdg-foreign/xdg-foreign-unstable-v1.xml"
|
||||
), # Note: deprecated
|
||||
generate_from_xml(
|
||||
"xdg_foreign_v2", "#thirdparty/wayland-protocols/unstable/xdg-foreign/xdg-foreign-unstable-v2.xml"
|
||||
),
|
||||
]
|
||||
|
||||
source_files = [
|
||||
"detect_prime_egl.cpp",
|
||||
"display_server_wayland.cpp",
|
||||
"key_mapping_xkb.cpp",
|
||||
"wayland_thread.cpp",
|
||||
]
|
||||
|
||||
if env["use_sowrap"]:
|
||||
source_files.append(
|
||||
[
|
||||
"dynwrappers/wayland-cursor-so_wrap.c",
|
||||
"dynwrappers/wayland-client-core-so_wrap.c",
|
||||
"dynwrappers/wayland-egl-core-so_wrap.c",
|
||||
]
|
||||
)
|
||||
|
||||
if env["libdecor"]:
|
||||
source_files.append("dynwrappers/libdecor-so_wrap.c")
|
||||
|
||||
|
||||
if env["vulkan"]:
|
||||
source_files.append("rendering_context_driver_vulkan_wayland.cpp")
|
||||
|
||||
if env["opengl3"]:
|
||||
source_files.append("egl_manager_wayland.cpp")
|
||||
source_files.append("egl_manager_wayland_gles.cpp")
|
||||
|
||||
for source_file in source_files:
|
||||
objects.append(env.Object(source_file))
|
||||
|
||||
Return("objects")
|
230
platform/linuxbsd/wayland/detect_prime_egl.cpp
Normal file
230
platform/linuxbsd/wayland/detect_prime_egl.cpp
Normal file
@@ -0,0 +1,230 @@
|
||||
/**************************************************************************/
|
||||
/* detect_prime_egl.cpp */
|
||||
/**************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* https://godotengine.org */
|
||||
/**************************************************************************/
|
||||
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
|
||||
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
|
||||
/* */
|
||||
/* Permission is hereby granted, free of charge, to any person obtaining */
|
||||
/* a copy of this software and associated documentation files (the */
|
||||
/* "Software"), to deal in the Software without restriction, including */
|
||||
/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
||||
/* permit persons to whom the Software is furnished to do so, subject to */
|
||||
/* the following conditions: */
|
||||
/* */
|
||||
/* The above copyright notice and this permission notice shall be */
|
||||
/* included in all copies or substantial portions of the Software. */
|
||||
/* */
|
||||
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
||||
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
||||
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
|
||||
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
||||
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
||||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifdef GLES3_ENABLED
|
||||
#ifdef EGL_ENABLED
|
||||
|
||||
#include "detect_prime_egl.h"
|
||||
|
||||
#include "core/string/print_string.h"
|
||||
#include "core/string/ustring.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
#include <cstdlib>
|
||||
|
||||
// To prevent shadowing warnings.
|
||||
#undef glGetString
|
||||
|
||||
// Runs inside a child. Exiting will not quit the engine.
|
||||
void DetectPrimeEGL::create_context(EGLenum p_platform_enum) {
|
||||
#if defined(GLAD_ENABLED)
|
||||
if (!gladLoaderLoadEGL(nullptr)) {
|
||||
print_verbose("Unable to load EGL, GPU detection skipped.");
|
||||
quick_exit(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
EGLDisplay egl_display = EGL_NO_DISPLAY;
|
||||
|
||||
if (GLAD_EGL_VERSION_1_5) {
|
||||
egl_display = eglGetPlatformDisplay(p_platform_enum, nullptr, nullptr);
|
||||
} else if (GLAD_EGL_EXT_platform_base) {
|
||||
#ifdef EGL_EXT_platform_base
|
||||
egl_display = eglGetPlatformDisplayEXT(p_platform_enum, nullptr, nullptr);
|
||||
#endif
|
||||
} else {
|
||||
egl_display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
|
||||
}
|
||||
|
||||
EGLConfig egl_config;
|
||||
EGLContext egl_context = EGL_NO_CONTEXT;
|
||||
|
||||
eglInitialize(egl_display, nullptr, nullptr);
|
||||
|
||||
#if defined(GLAD_ENABLED)
|
||||
if (!gladLoaderLoadEGL(egl_display)) {
|
||||
print_verbose("Unable to load EGL, GPU detection skipped.");
|
||||
quick_exit(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
eglBindAPI(EGL_OPENGL_API);
|
||||
|
||||
EGLint attribs[] = {
|
||||
EGL_RED_SIZE,
|
||||
1,
|
||||
EGL_BLUE_SIZE,
|
||||
1,
|
||||
EGL_GREEN_SIZE,
|
||||
1,
|
||||
EGL_DEPTH_SIZE,
|
||||
24,
|
||||
EGL_NONE,
|
||||
};
|
||||
|
||||
EGLint config_count = 0;
|
||||
eglChooseConfig(egl_display, attribs, &egl_config, 1, &config_count);
|
||||
|
||||
EGLint context_attribs[] = {
|
||||
EGL_CONTEXT_MAJOR_VERSION, 3,
|
||||
EGL_CONTEXT_MINOR_VERSION, 3,
|
||||
EGL_NONE
|
||||
};
|
||||
|
||||
egl_context = eglCreateContext(egl_display, egl_config, EGL_NO_CONTEXT, context_attribs);
|
||||
if (egl_context == EGL_NO_CONTEXT) {
|
||||
print_verbose("Unable to create an EGL context, GPU detection skipped.");
|
||||
quick_exit(1);
|
||||
}
|
||||
|
||||
eglMakeCurrent(egl_display, EGL_NO_SURFACE, EGL_NO_SURFACE, egl_context);
|
||||
}
|
||||
|
||||
int DetectPrimeEGL::detect_prime(EGLenum p_platform_enum) {
|
||||
pid_t p;
|
||||
int priorities[4] = {};
|
||||
String vendors[4];
|
||||
String renderers[4];
|
||||
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
vendors[i] = "Unknown";
|
||||
renderers[i] = "Unknown";
|
||||
}
|
||||
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
int fdset[2];
|
||||
|
||||
if (pipe(fdset) == -1) {
|
||||
print_verbose("Failed to pipe(), using default GPU");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Fork so the driver initialization can crash without taking down the engine.
|
||||
p = fork();
|
||||
|
||||
if (p > 0) {
|
||||
// Main thread
|
||||
|
||||
int stat_loc = 0;
|
||||
char string[201];
|
||||
string[200] = '\0';
|
||||
|
||||
close(fdset[1]);
|
||||
|
||||
waitpid(p, &stat_loc, 0);
|
||||
|
||||
if (!stat_loc) {
|
||||
// No need to do anything complicated here. Anything less than
|
||||
// PIPE_BUF will be delivered in one read() call.
|
||||
// Leave it 'Unknown' otherwise.
|
||||
if (read(fdset[0], string, sizeof(string) - 1) > 0) {
|
||||
vendors[i] = string;
|
||||
renderers[i] = string + strlen(string) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
close(fdset[0]);
|
||||
} else {
|
||||
// In child, exit() here will not quit the engine.
|
||||
|
||||
// Prevent false leak reports as we will not be properly
|
||||
// cleaning up these processes, and fork() makes a copy
|
||||
// of all globals.
|
||||
CoreGlobals::leak_reporting_enabled = false;
|
||||
|
||||
char string[201];
|
||||
|
||||
close(fdset[0]);
|
||||
|
||||
setenv("DRI_PRIME", itos(i).utf8().ptr(), 1);
|
||||
|
||||
create_context(p_platform_enum);
|
||||
|
||||
PFNGLGETSTRINGPROC glGetString = (PFNGLGETSTRINGPROC)eglGetProcAddress("glGetString");
|
||||
const char *vendor = (const char *)glGetString(GL_VENDOR);
|
||||
const char *renderer = (const char *)glGetString(GL_RENDERER);
|
||||
|
||||
unsigned int vendor_len = strlen(vendor) + 1;
|
||||
unsigned int renderer_len = strlen(renderer) + 1;
|
||||
|
||||
if (vendor_len + renderer_len >= sizeof(string)) {
|
||||
renderer_len = 200 - vendor_len;
|
||||
}
|
||||
|
||||
memcpy(&string, vendor, vendor_len);
|
||||
memcpy(&string[vendor_len], renderer, renderer_len);
|
||||
|
||||
if (write(fdset[1], string, vendor_len + renderer_len) == -1) {
|
||||
print_verbose("Couldn't write vendor/renderer string.");
|
||||
}
|
||||
close(fdset[1]);
|
||||
|
||||
// The function quick_exit() is used because exit() will call destructors on static objects copied by fork().
|
||||
// These objects will be freed anyway when the process finishes execution.
|
||||
quick_exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
int preferred = 0;
|
||||
int priority = 0;
|
||||
|
||||
if (vendors[0] == vendors[1]) {
|
||||
print_verbose("Only one GPU found, using default.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (int i = 3; i >= 0; --i) {
|
||||
const Vendor *v = vendor_map;
|
||||
while (v->glxvendor) {
|
||||
if (v->glxvendor == vendors[i]) {
|
||||
priorities[i] = v->priority;
|
||||
|
||||
if (v->priority >= priority) {
|
||||
priority = v->priority;
|
||||
preferred = i;
|
||||
}
|
||||
}
|
||||
++v;
|
||||
}
|
||||
}
|
||||
|
||||
print_verbose("Found renderers:");
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
print_verbose("Renderer " + itos(i) + ": " + renderers[i] + " with priority: " + itos(priorities[i]));
|
||||
}
|
||||
|
||||
print_verbose("Using renderer: " + renderers[preferred]);
|
||||
return preferred;
|
||||
}
|
||||
|
||||
#endif // EGL_ENABLED
|
||||
#endif // GLES3_ENABLED
|
86
platform/linuxbsd/wayland/detect_prime_egl.h
Normal file
86
platform/linuxbsd/wayland/detect_prime_egl.h
Normal file
@@ -0,0 +1,86 @@
|
||||
/**************************************************************************/
|
||||
/* detect_prime_egl.h */
|
||||
/**************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* https://godotengine.org */
|
||||
/**************************************************************************/
|
||||
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
|
||||
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
|
||||
/* */
|
||||
/* Permission is hereby granted, free of charge, to any person obtaining */
|
||||
/* a copy of this software and associated documentation files (the */
|
||||
/* "Software"), to deal in the Software without restriction, including */
|
||||
/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
||||
/* permit persons to whom the Software is furnished to do so, subject to */
|
||||
/* the following conditions: */
|
||||
/* */
|
||||
/* The above copyright notice and this permission notice shall be */
|
||||
/* included in all copies or substantial portions of the Software. */
|
||||
/* */
|
||||
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
||||
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
||||
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
|
||||
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
||||
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
||||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef GLES3_ENABLED
|
||||
#ifdef EGL_ENABLED
|
||||
|
||||
#ifdef GLAD_ENABLED
|
||||
#include "thirdparty/glad/glad/egl.h"
|
||||
#include "thirdparty/glad/glad/gl.h"
|
||||
#else
|
||||
#include <EGL/egl.h>
|
||||
#include <EGL/eglext.h>
|
||||
#include <GL/glcorearb.h>
|
||||
|
||||
#define GLAD_EGL_VERSION_1_5 1
|
||||
|
||||
#ifdef EGL_EXT_platform_base
|
||||
#define GLAD_EGL_EXT_platform_base 1
|
||||
#endif
|
||||
|
||||
#define KHRONOS_STATIC 1
|
||||
extern "C" EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list);
|
||||
#undef KHRONOS_STATIC
|
||||
|
||||
#endif // GLAD_ENABLED
|
||||
|
||||
#ifndef EGL_EXT_platform_base
|
||||
#define GLAD_EGL_EXT_platform_base 0
|
||||
#endif
|
||||
|
||||
class DetectPrimeEGL {
|
||||
private:
|
||||
struct Vendor {
|
||||
const char *glxvendor = nullptr;
|
||||
int priority = 0;
|
||||
};
|
||||
|
||||
static constexpr Vendor vendor_map[] = {
|
||||
{ "Advanced Micro Devices, Inc.", 30 },
|
||||
{ "AMD", 30 },
|
||||
{ "NVIDIA Corporation", 30 },
|
||||
{ "X.Org", 30 },
|
||||
{ "Intel Open Source Technology Center", 20 },
|
||||
{ "Intel", 20 },
|
||||
{ "nouveau", 10 },
|
||||
{ "Mesa Project", 0 },
|
||||
{ nullptr, 0 }
|
||||
};
|
||||
|
||||
public:
|
||||
static void create_context(EGLenum p_platform_enum);
|
||||
|
||||
static int detect_prime(EGLenum p_platform_enum);
|
||||
};
|
||||
|
||||
#endif // GLES3_ENABLED
|
||||
#endif // EGL_ENABLED
|
2238
platform/linuxbsd/wayland/display_server_wayland.cpp
Normal file
2238
platform/linuxbsd/wayland/display_server_wayland.cpp
Normal file
File diff suppressed because it is too large
Load Diff
358
platform/linuxbsd/wayland/display_server_wayland.h
Normal file
358
platform/linuxbsd/wayland/display_server_wayland.h
Normal file
@@ -0,0 +1,358 @@
|
||||
/**************************************************************************/
|
||||
/* display_server_wayland.h */
|
||||
/**************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* https://godotengine.org */
|
||||
/**************************************************************************/
|
||||
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
|
||||
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
|
||||
/* */
|
||||
/* Permission is hereby granted, free of charge, to any person obtaining */
|
||||
/* a copy of this software and associated documentation files (the */
|
||||
/* "Software"), to deal in the Software without restriction, including */
|
||||
/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
||||
/* permit persons to whom the Software is furnished to do so, subject to */
|
||||
/* the following conditions: */
|
||||
/* */
|
||||
/* The above copyright notice and this permission notice shall be */
|
||||
/* included in all copies or substantial portions of the Software. */
|
||||
/* */
|
||||
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
||||
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
||||
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
|
||||
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
||||
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
||||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef WAYLAND_ENABLED
|
||||
|
||||
#include "wayland/wayland_thread.h"
|
||||
|
||||
#ifdef RD_ENABLED
|
||||
#include "servers/rendering/rendering_device.h"
|
||||
|
||||
#ifdef VULKAN_ENABLED
|
||||
#include "wayland/rendering_context_driver_vulkan_wayland.h"
|
||||
#endif
|
||||
|
||||
#endif //RD_ENABLED
|
||||
|
||||
#ifdef GLES3_ENABLED
|
||||
#include "drivers/egl/egl_manager.h"
|
||||
#endif
|
||||
|
||||
#if defined(SPEECHD_ENABLED)
|
||||
#include "tts_linux.h"
|
||||
#endif
|
||||
|
||||
#ifdef DBUS_ENABLED
|
||||
#include "freedesktop_at_spi_monitor.h"
|
||||
#include "freedesktop_portal_desktop.h"
|
||||
#include "freedesktop_screensaver.h"
|
||||
#endif
|
||||
|
||||
#include "core/config/project_settings.h"
|
||||
#include "core/input/input.h"
|
||||
#include "servers/display_server.h"
|
||||
|
||||
#include <climits>
|
||||
#include <cstdio>
|
||||
|
||||
#undef CursorShape
|
||||
|
||||
class DisplayServerWayland : public DisplayServer {
|
||||
GDSOFTCLASS(DisplayServerWayland, DisplayServer);
|
||||
|
||||
struct WindowData {
|
||||
WindowID id = INVALID_WINDOW_ID;
|
||||
|
||||
WindowID parent_id = INVALID_WINDOW_ID;
|
||||
|
||||
// For popups.
|
||||
WindowID root_id = INVALID_WINDOW_ID;
|
||||
|
||||
// For toplevels.
|
||||
List<WindowID> popup_stack;
|
||||
|
||||
Rect2i rect;
|
||||
Size2i max_size;
|
||||
Size2i min_size;
|
||||
|
||||
Rect2i safe_rect;
|
||||
|
||||
bool emulate_vsync = false;
|
||||
|
||||
#ifdef GLES3_ENABLED
|
||||
struct wl_egl_window *wl_egl_window = nullptr;
|
||||
#endif
|
||||
|
||||
// Flags whether we have allocated a buffer through the video drivers.
|
||||
bool visible = false;
|
||||
|
||||
DisplayServer::VSyncMode vsync_mode = VSYNC_ENABLED;
|
||||
|
||||
uint32_t flags = 0;
|
||||
|
||||
DisplayServer::WindowMode mode = WINDOW_MODE_WINDOWED;
|
||||
|
||||
Callable rect_changed_callback;
|
||||
Callable window_event_callback;
|
||||
Callable input_event_callback;
|
||||
Callable drop_files_callback;
|
||||
Callable input_text_callback;
|
||||
|
||||
String title;
|
||||
ObjectID instance_id;
|
||||
};
|
||||
|
||||
struct CustomCursor {
|
||||
Ref<Resource> resource;
|
||||
Point2i hotspot;
|
||||
};
|
||||
|
||||
enum class SuspendState {
|
||||
NONE, // Unsuspended.
|
||||
TIMEOUT, // Legacy fallback.
|
||||
CAPABILITY, // New "suspended" wm_capability flag.
|
||||
};
|
||||
|
||||
CursorShape cursor_shape = CURSOR_ARROW;
|
||||
DisplayServer::MouseMode mouse_mode = DisplayServer::MOUSE_MODE_VISIBLE;
|
||||
DisplayServer::MouseMode mouse_mode_base = MOUSE_MODE_VISIBLE;
|
||||
DisplayServer::MouseMode mouse_mode_override = MOUSE_MODE_VISIBLE;
|
||||
bool mouse_mode_override_enabled = false;
|
||||
void _mouse_update_mode();
|
||||
|
||||
HashMap<CursorShape, CustomCursor> custom_cursors;
|
||||
|
||||
HashMap<WindowID, WindowData> windows;
|
||||
WindowID window_id_counter = MAIN_WINDOW_ID;
|
||||
|
||||
WaylandThread wayland_thread;
|
||||
|
||||
Context context;
|
||||
bool swap_cancel_ok = false;
|
||||
|
||||
// NOTE: These are the based on WINDOW_FLAG_POPUP, which does NOT imply what it
|
||||
// seems. It's particularly confusing for our usecase, but just know that these
|
||||
// are the "take all input thx" windows while the `popup_stack` variable keeps
|
||||
// track of all the generic floating window concept.
|
||||
List<WindowID> popup_menu_list;
|
||||
BitField<MouseButtonMask> last_mouse_monitor_mask = MouseButtonMask::NONE;
|
||||
|
||||
String ime_text;
|
||||
Vector2i ime_selection;
|
||||
|
||||
SuspendState suspend_state = SuspendState::NONE;
|
||||
|
||||
String rendering_driver;
|
||||
|
||||
#ifdef RD_ENABLED
|
||||
RenderingContextDriver *rendering_context = nullptr;
|
||||
RenderingDevice *rendering_device = nullptr;
|
||||
#endif
|
||||
|
||||
#ifdef GLES3_ENABLED
|
||||
EGLManager *egl_manager = nullptr;
|
||||
#endif
|
||||
|
||||
#ifdef SPEECHD_ENABLED
|
||||
TTS_Linux *tts = nullptr;
|
||||
#endif
|
||||
NativeMenu *native_menu = nullptr;
|
||||
|
||||
#if DBUS_ENABLED
|
||||
FreeDesktopPortalDesktop *portal_desktop = nullptr;
|
||||
FreeDesktopAtSPIMonitor *atspi_monitor = nullptr;
|
||||
|
||||
FreeDesktopScreenSaver *screensaver = nullptr;
|
||||
bool screensaver_inhibited = false;
|
||||
#endif
|
||||
static String _get_app_id_from_context(Context p_context);
|
||||
|
||||
void _send_window_event(WindowEvent p_event, WindowID p_window_id = MAIN_WINDOW_ID);
|
||||
|
||||
static void dispatch_input_events(const Ref<InputEvent> &p_event);
|
||||
void _dispatch_input_event(const Ref<InputEvent> &p_event);
|
||||
|
||||
void _update_window_rect(const Rect2i &p_rect, WindowID p_window_id = MAIN_WINDOW_ID);
|
||||
|
||||
void try_suspend();
|
||||
|
||||
void initialize_tts() const;
|
||||
|
||||
public:
|
||||
virtual bool has_feature(Feature p_feature) const override;
|
||||
|
||||
virtual String get_name() const override;
|
||||
|
||||
#ifdef SPEECHD_ENABLED
|
||||
virtual bool tts_is_speaking() const override;
|
||||
virtual bool tts_is_paused() const override;
|
||||
virtual TypedArray<Dictionary> tts_get_voices() const override;
|
||||
|
||||
virtual void tts_speak(const String &p_text, const String &p_voice, int p_volume = 50, float p_pitch = 1.f, float p_rate = 1.f, int p_utterance_id = 0, bool p_interrupt = false) override;
|
||||
virtual void tts_pause() override;
|
||||
virtual void tts_resume() override;
|
||||
virtual void tts_stop() override;
|
||||
#endif
|
||||
|
||||
#ifdef DBUS_ENABLED
|
||||
virtual bool is_dark_mode_supported() const override;
|
||||
virtual bool is_dark_mode() const override;
|
||||
virtual Color get_accent_color() const override;
|
||||
virtual void set_system_theme_change_callback(const Callable &p_callable) override;
|
||||
|
||||
virtual Error file_dialog_show(const String &p_title, const String &p_current_directory, const String &p_filename, bool p_show_hidden, FileDialogMode p_mode, const Vector<String> &p_filters, const Callable &p_callback, WindowID p_window_id) override;
|
||||
virtual Error file_dialog_with_options_show(const String &p_title, const String &p_current_directory, const String &p_root, const String &p_filename, bool p_show_hidden, FileDialogMode p_mode, const Vector<String> &p_filters, const TypedArray<Dictionary> &p_options, const Callable &p_callback, WindowID p_window_id) override;
|
||||
#endif
|
||||
|
||||
virtual void beep() const override;
|
||||
|
||||
virtual void mouse_set_mode(MouseMode p_mode) override;
|
||||
virtual MouseMode mouse_get_mode() const override;
|
||||
virtual void mouse_set_mode_override(MouseMode p_mode) override;
|
||||
virtual MouseMode mouse_get_mode_override() const override;
|
||||
virtual void mouse_set_mode_override_enabled(bool p_override_enabled) override;
|
||||
virtual bool mouse_is_mode_override_enabled() const override;
|
||||
|
||||
virtual void warp_mouse(const Point2i &p_to) override;
|
||||
virtual Point2i mouse_get_position() const override;
|
||||
virtual BitField<MouseButtonMask> mouse_get_button_state() const override;
|
||||
|
||||
virtual void clipboard_set(const String &p_text) override;
|
||||
virtual String clipboard_get() const override;
|
||||
virtual Ref<Image> clipboard_get_image() const override;
|
||||
virtual void clipboard_set_primary(const String &p_text) override;
|
||||
virtual String clipboard_get_primary() const override;
|
||||
|
||||
virtual int get_screen_count() const override;
|
||||
virtual int get_primary_screen() const override;
|
||||
virtual Point2i screen_get_position(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
||||
virtual Size2i screen_get_size(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
||||
virtual Rect2i screen_get_usable_rect(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
||||
virtual int screen_get_dpi(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
||||
virtual float screen_get_scale(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
||||
virtual float screen_get_refresh_rate(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
||||
|
||||
virtual void screen_set_keep_on(bool p_enable) override;
|
||||
virtual bool screen_is_kept_on() const override;
|
||||
|
||||
virtual Vector<DisplayServer::WindowID> get_window_list() const override;
|
||||
|
||||
virtual WindowID create_sub_window(WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Rect2i &p_rect = Rect2i(), bool p_exclusive = false, WindowID p_transient_parent = INVALID_WINDOW_ID) override;
|
||||
virtual void show_window(WindowID p_id) override;
|
||||
virtual void delete_sub_window(WindowID p_id) override;
|
||||
|
||||
virtual WindowID window_get_active_popup() const override;
|
||||
virtual void window_set_popup_safe_rect(WindowID p_window, const Rect2i &p_rect) override;
|
||||
virtual Rect2i window_get_popup_safe_rect(WindowID p_window) const override;
|
||||
|
||||
virtual int64_t window_get_native_handle(HandleType p_handle_type, WindowID p_window = MAIN_WINDOW_ID) const override;
|
||||
|
||||
virtual WindowID get_window_at_screen_position(const Point2i &p_position) const override;
|
||||
|
||||
virtual void window_attach_instance_id(ObjectID p_instance, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
virtual ObjectID window_get_attached_instance_id(WindowID p_window_id = MAIN_WINDOW_ID) const override;
|
||||
|
||||
virtual void window_set_title(const String &p_title, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
virtual void window_set_mouse_passthrough(const Vector<Vector2> &p_region, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
|
||||
virtual void window_set_rect_changed_callback(const Callable &p_callable, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
virtual void window_set_window_event_callback(const Callable &p_callable, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
virtual void window_set_input_event_callback(const Callable &p_callable, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
virtual void window_set_input_text_callback(const Callable &p_callable, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
virtual void window_set_drop_files_callback(const Callable &p_callable, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
|
||||
virtual int window_get_current_screen(WindowID p_window_id = MAIN_WINDOW_ID) const override;
|
||||
virtual void window_set_current_screen(int p_screen, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
|
||||
virtual Point2i window_get_position(WindowID p_window_id = MAIN_WINDOW_ID) const override;
|
||||
virtual Point2i window_get_position_with_decorations(WindowID p_window_id = MAIN_WINDOW_ID) const override;
|
||||
virtual void window_set_position(const Point2i &p_position, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
|
||||
virtual void window_set_max_size(const Size2i p_size, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
virtual Size2i window_get_max_size(WindowID p_window_id = MAIN_WINDOW_ID) const override;
|
||||
virtual void gl_window_make_current(DisplayServer::WindowID p_window_id) override;
|
||||
|
||||
virtual void window_set_transient(WindowID p_window_id, WindowID p_parent) override;
|
||||
|
||||
virtual void window_set_min_size(const Size2i p_size, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
virtual Size2i window_get_min_size(WindowID p_window_id = MAIN_WINDOW_ID) const override;
|
||||
|
||||
virtual void window_set_size(const Size2i p_size, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
virtual Size2i window_get_size(WindowID p_window_id = MAIN_WINDOW_ID) const override;
|
||||
virtual Size2i window_get_size_with_decorations(WindowID p_window_id = MAIN_WINDOW_ID) const override;
|
||||
|
||||
virtual void window_set_mode(WindowMode p_mode, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
virtual WindowMode window_get_mode(WindowID p_window_id = MAIN_WINDOW_ID) const override;
|
||||
|
||||
virtual bool window_is_maximize_allowed(WindowID p_window_id = MAIN_WINDOW_ID) const override;
|
||||
|
||||
virtual void window_set_flag(WindowFlags p_flag, bool p_enabled, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
virtual bool window_get_flag(WindowFlags p_flag, WindowID p_window_id = MAIN_WINDOW_ID) const override;
|
||||
|
||||
virtual void window_request_attention(WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
|
||||
virtual void window_move_to_foreground(WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
virtual bool window_is_focused(WindowID p_window = MAIN_WINDOW_ID) const override;
|
||||
|
||||
virtual bool window_can_draw(WindowID p_window_id = MAIN_WINDOW_ID) const override;
|
||||
|
||||
virtual bool can_any_window_draw() const override;
|
||||
|
||||
virtual void window_set_ime_active(const bool p_active, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
virtual void window_set_ime_position(const Point2i &p_pos, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
|
||||
virtual int accessibility_should_increase_contrast() const override;
|
||||
virtual int accessibility_screen_reader_active() const override;
|
||||
|
||||
virtual Point2i ime_get_selection() const override;
|
||||
virtual String ime_get_text() const override;
|
||||
|
||||
virtual void window_set_vsync_mode(DisplayServer::VSyncMode p_vsync_mode, WindowID p_window_id = MAIN_WINDOW_ID) override;
|
||||
virtual DisplayServer::VSyncMode window_get_vsync_mode(WindowID p_window_id) const override;
|
||||
|
||||
virtual void window_start_drag(WindowID p_window = MAIN_WINDOW_ID) override;
|
||||
virtual void window_start_resize(WindowResizeEdge p_edge, WindowID p_window) override;
|
||||
|
||||
virtual void cursor_set_shape(CursorShape p_shape) override;
|
||||
virtual CursorShape cursor_get_shape() const override;
|
||||
virtual void cursor_set_custom_image(const Ref<Resource> &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot) override;
|
||||
|
||||
virtual bool get_swap_cancel_ok() override;
|
||||
|
||||
virtual int keyboard_get_layout_count() const override;
|
||||
virtual int keyboard_get_current_layout() const override;
|
||||
virtual void keyboard_set_current_layout(int p_index) override;
|
||||
virtual String keyboard_get_layout_language(int p_index) const override;
|
||||
virtual String keyboard_get_layout_name(int p_index) const override;
|
||||
virtual Key keyboard_get_keycode_from_physical(Key p_keycode) const override;
|
||||
|
||||
virtual bool color_picker(const Callable &p_callback) override;
|
||||
|
||||
virtual void process_events() override;
|
||||
|
||||
virtual void release_rendering_thread() override;
|
||||
virtual void swap_buffers() override;
|
||||
|
||||
virtual void set_context(Context p_context) override;
|
||||
|
||||
virtual bool is_window_transparency_available() const override;
|
||||
|
||||
static DisplayServer *create_func(const String &p_rendering_driver, WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Point2i *p_position, const Size2i &p_resolution, int p_screen, Context p_context, int64_t p_parent_window, Error &r_error);
|
||||
static Vector<String> get_rendering_drivers_func();
|
||||
|
||||
static void register_wayland_driver();
|
||||
|
||||
DisplayServerWayland(const String &p_rendering_driver, WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Vector2i &p_resolution, Context p_context, int64_t p_parent_window, Error &r_error);
|
||||
~DisplayServerWayland();
|
||||
};
|
||||
|
||||
#endif // WAYLAND_ENABLED
|
453
platform/linuxbsd/wayland/dynwrappers/libdecor-so_wrap.c
Normal file
453
platform/linuxbsd/wayland/dynwrappers/libdecor-so_wrap.c
Normal file
@@ -0,0 +1,453 @@
|
||||
// This file is generated. Do not edit!
|
||||
// see https://github.com/hpvb/dynload-wrapper for details
|
||||
// generated by ./generate-wrapper.py 0.3 on 2022-12-12 10:55:19
|
||||
// flags: ./generate-wrapper.py --include /usr/include/libdecor-0/libdecor.h --sys-include <libdecor.h> --soname libdecor-0.so.0 --init-name libdecor --output-header libdecor-so_wrap.h --output-implementation libdecor-so_wrap.c --omit-prefix wl_
|
||||
//
|
||||
// EDIT: This has been handpatched to properly report the pointer type of the window_state argument of libdecor_configuration_get_window_state.
|
||||
#include <stdint.h>
|
||||
|
||||
#define libdecor_unref libdecor_unref_dylibloader_orig_libdecor
|
||||
#define libdecor_new libdecor_new_dylibloader_orig_libdecor
|
||||
#define libdecor_get_fd libdecor_get_fd_dylibloader_orig_libdecor
|
||||
#define libdecor_dispatch libdecor_dispatch_dylibloader_orig_libdecor
|
||||
#define libdecor_decorate libdecor_decorate_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_ref libdecor_frame_ref_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_unref libdecor_frame_unref_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_visibility libdecor_frame_set_visibility_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_is_visible libdecor_frame_is_visible_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_parent libdecor_frame_set_parent_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_title libdecor_frame_set_title_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_get_title libdecor_frame_get_title_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_app_id libdecor_frame_set_app_id_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_capabilities libdecor_frame_set_capabilities_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_unset_capabilities libdecor_frame_unset_capabilities_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_has_capability libdecor_frame_has_capability_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_show_window_menu libdecor_frame_show_window_menu_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_popup_grab libdecor_frame_popup_grab_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_popup_ungrab libdecor_frame_popup_ungrab_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_translate_coordinate libdecor_frame_translate_coordinate_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_min_content_size libdecor_frame_set_min_content_size_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_max_content_size libdecor_frame_set_max_content_size_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_resize libdecor_frame_resize_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_move libdecor_frame_move_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_commit libdecor_frame_commit_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_minimized libdecor_frame_set_minimized_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_maximized libdecor_frame_set_maximized_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_unset_maximized libdecor_frame_unset_maximized_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_fullscreen libdecor_frame_set_fullscreen_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_unset_fullscreen libdecor_frame_unset_fullscreen_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_is_floating libdecor_frame_is_floating_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_close libdecor_frame_close_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_map libdecor_frame_map_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_get_xdg_surface libdecor_frame_get_xdg_surface_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_get_xdg_toplevel libdecor_frame_get_xdg_toplevel_dylibloader_orig_libdecor
|
||||
#define libdecor_state_new libdecor_state_new_dylibloader_orig_libdecor
|
||||
#define libdecor_state_free libdecor_state_free_dylibloader_orig_libdecor
|
||||
#define libdecor_configuration_get_content_size libdecor_configuration_get_content_size_dylibloader_orig_libdecor
|
||||
#define libdecor_configuration_get_window_state libdecor_configuration_get_window_state_dylibloader_orig_libdecor
|
||||
#include <libdecor.h>
|
||||
#undef libdecor_unref
|
||||
#undef libdecor_new
|
||||
#undef libdecor_get_fd
|
||||
#undef libdecor_dispatch
|
||||
#undef libdecor_decorate
|
||||
#undef libdecor_frame_ref
|
||||
#undef libdecor_frame_unref
|
||||
#undef libdecor_frame_set_visibility
|
||||
#undef libdecor_frame_is_visible
|
||||
#undef libdecor_frame_set_parent
|
||||
#undef libdecor_frame_set_title
|
||||
#undef libdecor_frame_get_title
|
||||
#undef libdecor_frame_set_app_id
|
||||
#undef libdecor_frame_set_capabilities
|
||||
#undef libdecor_frame_unset_capabilities
|
||||
#undef libdecor_frame_has_capability
|
||||
#undef libdecor_frame_show_window_menu
|
||||
#undef libdecor_frame_popup_grab
|
||||
#undef libdecor_frame_popup_ungrab
|
||||
#undef libdecor_frame_translate_coordinate
|
||||
#undef libdecor_frame_set_min_content_size
|
||||
#undef libdecor_frame_set_max_content_size
|
||||
#undef libdecor_frame_resize
|
||||
#undef libdecor_frame_move
|
||||
#undef libdecor_frame_commit
|
||||
#undef libdecor_frame_set_minimized
|
||||
#undef libdecor_frame_set_maximized
|
||||
#undef libdecor_frame_unset_maximized
|
||||
#undef libdecor_frame_set_fullscreen
|
||||
#undef libdecor_frame_unset_fullscreen
|
||||
#undef libdecor_frame_is_floating
|
||||
#undef libdecor_frame_close
|
||||
#undef libdecor_frame_map
|
||||
#undef libdecor_frame_get_xdg_surface
|
||||
#undef libdecor_frame_get_xdg_toplevel
|
||||
#undef libdecor_state_new
|
||||
#undef libdecor_state_free
|
||||
#undef libdecor_configuration_get_content_size
|
||||
#undef libdecor_configuration_get_window_state
|
||||
#include <dlfcn.h>
|
||||
#include <stdio.h>
|
||||
void (*libdecor_unref_dylibloader_wrapper_libdecor)(struct libdecor*);
|
||||
struct libdecor* (*libdecor_new_dylibloader_wrapper_libdecor)(struct wl_display*,struct libdecor_interface*);
|
||||
int (*libdecor_get_fd_dylibloader_wrapper_libdecor)(struct libdecor*);
|
||||
int (*libdecor_dispatch_dylibloader_wrapper_libdecor)(struct libdecor*, int);
|
||||
struct libdecor_frame* (*libdecor_decorate_dylibloader_wrapper_libdecor)(struct libdecor*,struct wl_surface*,struct libdecor_frame_interface*, void*);
|
||||
void (*libdecor_frame_ref_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
void (*libdecor_frame_unref_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
void (*libdecor_frame_set_visibility_dylibloader_wrapper_libdecor)(struct libdecor_frame*, bool);
|
||||
bool (*libdecor_frame_is_visible_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
void (*libdecor_frame_set_parent_dylibloader_wrapper_libdecor)(struct libdecor_frame*,struct libdecor_frame*);
|
||||
void (*libdecor_frame_set_title_dylibloader_wrapper_libdecor)(struct libdecor_frame*,const char*);
|
||||
const char* (*libdecor_frame_get_title_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
void (*libdecor_frame_set_app_id_dylibloader_wrapper_libdecor)(struct libdecor_frame*,const char*);
|
||||
void (*libdecor_frame_set_capabilities_dylibloader_wrapper_libdecor)(struct libdecor_frame*,enum libdecor_capabilities);
|
||||
void (*libdecor_frame_unset_capabilities_dylibloader_wrapper_libdecor)(struct libdecor_frame*,enum libdecor_capabilities);
|
||||
bool (*libdecor_frame_has_capability_dylibloader_wrapper_libdecor)(struct libdecor_frame*,enum libdecor_capabilities);
|
||||
void (*libdecor_frame_show_window_menu_dylibloader_wrapper_libdecor)(struct libdecor_frame*,struct wl_seat*, uint32_t, int, int);
|
||||
void (*libdecor_frame_popup_grab_dylibloader_wrapper_libdecor)(struct libdecor_frame*,const char*);
|
||||
void (*libdecor_frame_popup_ungrab_dylibloader_wrapper_libdecor)(struct libdecor_frame*,const char*);
|
||||
void (*libdecor_frame_translate_coordinate_dylibloader_wrapper_libdecor)(struct libdecor_frame*, int, int, int*, int*);
|
||||
void (*libdecor_frame_set_min_content_size_dylibloader_wrapper_libdecor)(struct libdecor_frame*, int, int);
|
||||
void (*libdecor_frame_set_max_content_size_dylibloader_wrapper_libdecor)(struct libdecor_frame*, int, int);
|
||||
void (*libdecor_frame_resize_dylibloader_wrapper_libdecor)(struct libdecor_frame*,struct wl_seat*, uint32_t,enum libdecor_resize_edge);
|
||||
void (*libdecor_frame_move_dylibloader_wrapper_libdecor)(struct libdecor_frame*,struct wl_seat*, uint32_t);
|
||||
void (*libdecor_frame_commit_dylibloader_wrapper_libdecor)(struct libdecor_frame*,struct libdecor_state*,struct libdecor_configuration*);
|
||||
void (*libdecor_frame_set_minimized_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
void (*libdecor_frame_set_maximized_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
void (*libdecor_frame_unset_maximized_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
void (*libdecor_frame_set_fullscreen_dylibloader_wrapper_libdecor)(struct libdecor_frame*,struct wl_output*);
|
||||
void (*libdecor_frame_unset_fullscreen_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
bool (*libdecor_frame_is_floating_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
void (*libdecor_frame_close_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
void (*libdecor_frame_map_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
struct xdg_surface* (*libdecor_frame_get_xdg_surface_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
struct xdg_toplevel* (*libdecor_frame_get_xdg_toplevel_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
struct libdecor_state* (*libdecor_state_new_dylibloader_wrapper_libdecor)( int, int);
|
||||
void (*libdecor_state_free_dylibloader_wrapper_libdecor)(struct libdecor_state*);
|
||||
bool (*libdecor_configuration_get_content_size_dylibloader_wrapper_libdecor)(struct libdecor_configuration*,struct libdecor_frame*, int*, int*);
|
||||
bool (*libdecor_configuration_get_window_state_dylibloader_wrapper_libdecor)(struct libdecor_configuration*,enum libdecor_window_state*);
|
||||
int initialize_libdecor(int verbose) {
|
||||
void *handle;
|
||||
char *error;
|
||||
handle = dlopen("libdecor-0.so.0", RTLD_LAZY);
|
||||
if (!handle) {
|
||||
if (verbose) {
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
dlerror();
|
||||
// libdecor_unref
|
||||
*(void **) (&libdecor_unref_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_unref");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_new
|
||||
*(void **) (&libdecor_new_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_new");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_get_fd
|
||||
*(void **) (&libdecor_get_fd_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_get_fd");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_dispatch
|
||||
*(void **) (&libdecor_dispatch_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_dispatch");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_decorate
|
||||
*(void **) (&libdecor_decorate_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_decorate");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_ref
|
||||
*(void **) (&libdecor_frame_ref_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_ref");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_unref
|
||||
*(void **) (&libdecor_frame_unref_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_unref");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_set_visibility
|
||||
*(void **) (&libdecor_frame_set_visibility_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_set_visibility");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_is_visible
|
||||
*(void **) (&libdecor_frame_is_visible_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_is_visible");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_set_parent
|
||||
*(void **) (&libdecor_frame_set_parent_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_set_parent");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_set_title
|
||||
*(void **) (&libdecor_frame_set_title_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_set_title");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_get_title
|
||||
*(void **) (&libdecor_frame_get_title_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_get_title");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_set_app_id
|
||||
*(void **) (&libdecor_frame_set_app_id_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_set_app_id");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_set_capabilities
|
||||
*(void **) (&libdecor_frame_set_capabilities_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_set_capabilities");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_unset_capabilities
|
||||
*(void **) (&libdecor_frame_unset_capabilities_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_unset_capabilities");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_has_capability
|
||||
*(void **) (&libdecor_frame_has_capability_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_has_capability");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_show_window_menu
|
||||
*(void **) (&libdecor_frame_show_window_menu_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_show_window_menu");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_popup_grab
|
||||
*(void **) (&libdecor_frame_popup_grab_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_popup_grab");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_popup_ungrab
|
||||
*(void **) (&libdecor_frame_popup_ungrab_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_popup_ungrab");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_translate_coordinate
|
||||
*(void **) (&libdecor_frame_translate_coordinate_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_translate_coordinate");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_set_min_content_size
|
||||
*(void **) (&libdecor_frame_set_min_content_size_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_set_min_content_size");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_set_max_content_size
|
||||
*(void **) (&libdecor_frame_set_max_content_size_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_set_max_content_size");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_resize
|
||||
*(void **) (&libdecor_frame_resize_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_resize");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_move
|
||||
*(void **) (&libdecor_frame_move_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_move");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_commit
|
||||
*(void **) (&libdecor_frame_commit_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_commit");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_set_minimized
|
||||
*(void **) (&libdecor_frame_set_minimized_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_set_minimized");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_set_maximized
|
||||
*(void **) (&libdecor_frame_set_maximized_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_set_maximized");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_unset_maximized
|
||||
*(void **) (&libdecor_frame_unset_maximized_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_unset_maximized");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_set_fullscreen
|
||||
*(void **) (&libdecor_frame_set_fullscreen_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_set_fullscreen");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_unset_fullscreen
|
||||
*(void **) (&libdecor_frame_unset_fullscreen_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_unset_fullscreen");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_is_floating
|
||||
*(void **) (&libdecor_frame_is_floating_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_is_floating");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_close
|
||||
*(void **) (&libdecor_frame_close_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_close");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_map
|
||||
*(void **) (&libdecor_frame_map_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_map");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_get_xdg_surface
|
||||
*(void **) (&libdecor_frame_get_xdg_surface_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_get_xdg_surface");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_frame_get_xdg_toplevel
|
||||
*(void **) (&libdecor_frame_get_xdg_toplevel_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_frame_get_xdg_toplevel");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_state_new
|
||||
*(void **) (&libdecor_state_new_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_state_new");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_state_free
|
||||
*(void **) (&libdecor_state_free_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_state_free");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_configuration_get_content_size
|
||||
*(void **) (&libdecor_configuration_get_content_size_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_configuration_get_content_size");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// libdecor_configuration_get_window_state
|
||||
*(void **) (&libdecor_configuration_get_window_state_dylibloader_wrapper_libdecor) = dlsym(handle, "libdecor_configuration_get_window_state");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
175
platform/linuxbsd/wayland/dynwrappers/libdecor-so_wrap.h
Normal file
175
platform/linuxbsd/wayland/dynwrappers/libdecor-so_wrap.h
Normal file
@@ -0,0 +1,175 @@
|
||||
#ifndef DYLIBLOAD_WRAPPER_LIBDECOR
|
||||
#define DYLIBLOAD_WRAPPER_LIBDECOR
|
||||
// This file is generated. Do not edit!
|
||||
// see https://github.com/hpvb/dynload-wrapper for details
|
||||
// generated by ./generate-wrapper.py 0.3 on 2022-12-12 10:55:19
|
||||
// flags: ./generate-wrapper.py --include /usr/include/libdecor-0/libdecor.h --sys-include <libdecor.h> --soname libdecor-0.so.0 --init-name libdecor --output-header libdecor-so_wrap.h --output-implementation libdecor-so_wrap.c --omit-prefix wl_
|
||||
//
|
||||
// EDIT: This has been handpatched to properly report the pointer type of the window_state argument of libdecor_configuration_get_window_state.
|
||||
#include <stdint.h>
|
||||
|
||||
#define libdecor_unref libdecor_unref_dylibloader_orig_libdecor
|
||||
#define libdecor_new libdecor_new_dylibloader_orig_libdecor
|
||||
#define libdecor_get_fd libdecor_get_fd_dylibloader_orig_libdecor
|
||||
#define libdecor_dispatch libdecor_dispatch_dylibloader_orig_libdecor
|
||||
#define libdecor_decorate libdecor_decorate_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_ref libdecor_frame_ref_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_unref libdecor_frame_unref_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_visibility libdecor_frame_set_visibility_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_is_visible libdecor_frame_is_visible_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_parent libdecor_frame_set_parent_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_title libdecor_frame_set_title_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_get_title libdecor_frame_get_title_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_app_id libdecor_frame_set_app_id_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_capabilities libdecor_frame_set_capabilities_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_unset_capabilities libdecor_frame_unset_capabilities_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_has_capability libdecor_frame_has_capability_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_show_window_menu libdecor_frame_show_window_menu_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_popup_grab libdecor_frame_popup_grab_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_popup_ungrab libdecor_frame_popup_ungrab_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_translate_coordinate libdecor_frame_translate_coordinate_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_min_content_size libdecor_frame_set_min_content_size_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_max_content_size libdecor_frame_set_max_content_size_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_resize libdecor_frame_resize_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_move libdecor_frame_move_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_commit libdecor_frame_commit_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_minimized libdecor_frame_set_minimized_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_maximized libdecor_frame_set_maximized_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_unset_maximized libdecor_frame_unset_maximized_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_set_fullscreen libdecor_frame_set_fullscreen_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_unset_fullscreen libdecor_frame_unset_fullscreen_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_is_floating libdecor_frame_is_floating_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_close libdecor_frame_close_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_map libdecor_frame_map_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_get_xdg_surface libdecor_frame_get_xdg_surface_dylibloader_orig_libdecor
|
||||
#define libdecor_frame_get_xdg_toplevel libdecor_frame_get_xdg_toplevel_dylibloader_orig_libdecor
|
||||
#define libdecor_state_new libdecor_state_new_dylibloader_orig_libdecor
|
||||
#define libdecor_state_free libdecor_state_free_dylibloader_orig_libdecor
|
||||
#define libdecor_configuration_get_content_size libdecor_configuration_get_content_size_dylibloader_orig_libdecor
|
||||
#define libdecor_configuration_get_window_state libdecor_configuration_get_window_state_dylibloader_orig_libdecor
|
||||
#include <libdecor.h>
|
||||
#undef libdecor_unref
|
||||
#undef libdecor_new
|
||||
#undef libdecor_get_fd
|
||||
#undef libdecor_dispatch
|
||||
#undef libdecor_decorate
|
||||
#undef libdecor_frame_ref
|
||||
#undef libdecor_frame_unref
|
||||
#undef libdecor_frame_set_visibility
|
||||
#undef libdecor_frame_is_visible
|
||||
#undef libdecor_frame_set_parent
|
||||
#undef libdecor_frame_set_title
|
||||
#undef libdecor_frame_get_title
|
||||
#undef libdecor_frame_set_app_id
|
||||
#undef libdecor_frame_set_capabilities
|
||||
#undef libdecor_frame_unset_capabilities
|
||||
#undef libdecor_frame_has_capability
|
||||
#undef libdecor_frame_show_window_menu
|
||||
#undef libdecor_frame_popup_grab
|
||||
#undef libdecor_frame_popup_ungrab
|
||||
#undef libdecor_frame_translate_coordinate
|
||||
#undef libdecor_frame_set_min_content_size
|
||||
#undef libdecor_frame_set_max_content_size
|
||||
#undef libdecor_frame_resize
|
||||
#undef libdecor_frame_move
|
||||
#undef libdecor_frame_commit
|
||||
#undef libdecor_frame_set_minimized
|
||||
#undef libdecor_frame_set_maximized
|
||||
#undef libdecor_frame_unset_maximized
|
||||
#undef libdecor_frame_set_fullscreen
|
||||
#undef libdecor_frame_unset_fullscreen
|
||||
#undef libdecor_frame_is_floating
|
||||
#undef libdecor_frame_close
|
||||
#undef libdecor_frame_map
|
||||
#undef libdecor_frame_get_xdg_surface
|
||||
#undef libdecor_frame_get_xdg_toplevel
|
||||
#undef libdecor_state_new
|
||||
#undef libdecor_state_free
|
||||
#undef libdecor_configuration_get_content_size
|
||||
#undef libdecor_configuration_get_window_state
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#define libdecor_unref libdecor_unref_dylibloader_wrapper_libdecor
|
||||
#define libdecor_new libdecor_new_dylibloader_wrapper_libdecor
|
||||
#define libdecor_get_fd libdecor_get_fd_dylibloader_wrapper_libdecor
|
||||
#define libdecor_dispatch libdecor_dispatch_dylibloader_wrapper_libdecor
|
||||
#define libdecor_decorate libdecor_decorate_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_ref libdecor_frame_ref_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_unref libdecor_frame_unref_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_set_visibility libdecor_frame_set_visibility_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_is_visible libdecor_frame_is_visible_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_set_parent libdecor_frame_set_parent_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_set_title libdecor_frame_set_title_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_get_title libdecor_frame_get_title_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_set_app_id libdecor_frame_set_app_id_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_set_capabilities libdecor_frame_set_capabilities_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_unset_capabilities libdecor_frame_unset_capabilities_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_has_capability libdecor_frame_has_capability_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_show_window_menu libdecor_frame_show_window_menu_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_popup_grab libdecor_frame_popup_grab_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_popup_ungrab libdecor_frame_popup_ungrab_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_translate_coordinate libdecor_frame_translate_coordinate_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_set_min_content_size libdecor_frame_set_min_content_size_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_set_max_content_size libdecor_frame_set_max_content_size_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_resize libdecor_frame_resize_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_move libdecor_frame_move_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_commit libdecor_frame_commit_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_set_minimized libdecor_frame_set_minimized_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_set_maximized libdecor_frame_set_maximized_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_unset_maximized libdecor_frame_unset_maximized_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_set_fullscreen libdecor_frame_set_fullscreen_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_unset_fullscreen libdecor_frame_unset_fullscreen_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_is_floating libdecor_frame_is_floating_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_close libdecor_frame_close_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_map libdecor_frame_map_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_get_xdg_surface libdecor_frame_get_xdg_surface_dylibloader_wrapper_libdecor
|
||||
#define libdecor_frame_get_xdg_toplevel libdecor_frame_get_xdg_toplevel_dylibloader_wrapper_libdecor
|
||||
#define libdecor_state_new libdecor_state_new_dylibloader_wrapper_libdecor
|
||||
#define libdecor_state_free libdecor_state_free_dylibloader_wrapper_libdecor
|
||||
#define libdecor_configuration_get_content_size libdecor_configuration_get_content_size_dylibloader_wrapper_libdecor
|
||||
#define libdecor_configuration_get_window_state libdecor_configuration_get_window_state_dylibloader_wrapper_libdecor
|
||||
extern void (*libdecor_unref_dylibloader_wrapper_libdecor)(struct libdecor*);
|
||||
extern struct libdecor* (*libdecor_new_dylibloader_wrapper_libdecor)(struct wl_display*,struct libdecor_interface*);
|
||||
extern int (*libdecor_get_fd_dylibloader_wrapper_libdecor)(struct libdecor*);
|
||||
extern int (*libdecor_dispatch_dylibloader_wrapper_libdecor)(struct libdecor*, int);
|
||||
extern struct libdecor_frame* (*libdecor_decorate_dylibloader_wrapper_libdecor)(struct libdecor*,struct wl_surface*,struct libdecor_frame_interface*, void*);
|
||||
extern void (*libdecor_frame_ref_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
extern void (*libdecor_frame_unref_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
extern void (*libdecor_frame_set_visibility_dylibloader_wrapper_libdecor)(struct libdecor_frame*, bool);
|
||||
extern bool (*libdecor_frame_is_visible_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
extern void (*libdecor_frame_set_parent_dylibloader_wrapper_libdecor)(struct libdecor_frame*,struct libdecor_frame*);
|
||||
extern void (*libdecor_frame_set_title_dylibloader_wrapper_libdecor)(struct libdecor_frame*,const char*);
|
||||
extern const char* (*libdecor_frame_get_title_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
extern void (*libdecor_frame_set_app_id_dylibloader_wrapper_libdecor)(struct libdecor_frame*,const char*);
|
||||
extern void (*libdecor_frame_set_capabilities_dylibloader_wrapper_libdecor)(struct libdecor_frame*,enum libdecor_capabilities);
|
||||
extern void (*libdecor_frame_unset_capabilities_dylibloader_wrapper_libdecor)(struct libdecor_frame*,enum libdecor_capabilities);
|
||||
extern bool (*libdecor_frame_has_capability_dylibloader_wrapper_libdecor)(struct libdecor_frame*,enum libdecor_capabilities);
|
||||
extern void (*libdecor_frame_show_window_menu_dylibloader_wrapper_libdecor)(struct libdecor_frame*,struct wl_seat*, uint32_t, int, int);
|
||||
extern void (*libdecor_frame_popup_grab_dylibloader_wrapper_libdecor)(struct libdecor_frame*,const char*);
|
||||
extern void (*libdecor_frame_popup_ungrab_dylibloader_wrapper_libdecor)(struct libdecor_frame*,const char*);
|
||||
extern void (*libdecor_frame_translate_coordinate_dylibloader_wrapper_libdecor)(struct libdecor_frame*, int, int, int*, int*);
|
||||
extern void (*libdecor_frame_set_min_content_size_dylibloader_wrapper_libdecor)(struct libdecor_frame*, int, int);
|
||||
extern void (*libdecor_frame_set_max_content_size_dylibloader_wrapper_libdecor)(struct libdecor_frame*, int, int);
|
||||
extern void (*libdecor_frame_resize_dylibloader_wrapper_libdecor)(struct libdecor_frame*,struct wl_seat*, uint32_t,enum libdecor_resize_edge);
|
||||
extern void (*libdecor_frame_move_dylibloader_wrapper_libdecor)(struct libdecor_frame*,struct wl_seat*, uint32_t);
|
||||
extern void (*libdecor_frame_commit_dylibloader_wrapper_libdecor)(struct libdecor_frame*,struct libdecor_state*,struct libdecor_configuration*);
|
||||
extern void (*libdecor_frame_set_minimized_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
extern void (*libdecor_frame_set_maximized_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
extern void (*libdecor_frame_unset_maximized_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
extern void (*libdecor_frame_set_fullscreen_dylibloader_wrapper_libdecor)(struct libdecor_frame*,struct wl_output*);
|
||||
extern void (*libdecor_frame_unset_fullscreen_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
extern bool (*libdecor_frame_is_floating_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
extern void (*libdecor_frame_close_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
extern void (*libdecor_frame_map_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
extern struct xdg_surface* (*libdecor_frame_get_xdg_surface_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
extern struct xdg_toplevel* (*libdecor_frame_get_xdg_toplevel_dylibloader_wrapper_libdecor)(struct libdecor_frame*);
|
||||
extern struct libdecor_state* (*libdecor_state_new_dylibloader_wrapper_libdecor)( int, int);
|
||||
extern void (*libdecor_state_free_dylibloader_wrapper_libdecor)(struct libdecor_state*);
|
||||
extern bool (*libdecor_configuration_get_content_size_dylibloader_wrapper_libdecor)(struct libdecor_configuration*,struct libdecor_frame*, int*, int*);
|
||||
extern bool (*libdecor_configuration_get_window_state_dylibloader_wrapper_libdecor)(struct libdecor_configuration*,enum libdecor_window_state*);
|
||||
int initialize_libdecor(int verbose);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
@@ -0,0 +1,607 @@
|
||||
// This file is generated. Do not edit!
|
||||
// see https://github.com/hpvb/dynload-wrapper for details
|
||||
// generated by ../dynload-wrapper/generate-wrapper.py 0.3 on 2023-01-25 17:36:12
|
||||
// flags: ../dynload-wrapper/generate-wrapper.py --include ./thirdparty/linuxbsd_headers/wayland/wayland-client-core.h --sys-include "./thirdparty/linuxbsd_headers/wayland/wayland-client-core.h" --soname libwayland-client.so.0 --init-name wayland_client --output-header platform/linuxbsd/wayland/dynwrappers/wayland-client-core-so_wrap.h --output-implementation platform/linuxbsd/wayland/dynwrappers/wayland-client-core-so_wrap.c
|
||||
//
|
||||
// NOTE: This has been hand-patched to workaround some issues.
|
||||
#include <stdint.h>
|
||||
|
||||
#define wl_list_init wl_list_init_dylibloader_orig_wayland_client
|
||||
#define wl_list_insert wl_list_insert_dylibloader_orig_wayland_client
|
||||
#define wl_list_remove wl_list_remove_dylibloader_orig_wayland_client
|
||||
#define wl_list_length wl_list_length_dylibloader_orig_wayland_client
|
||||
#define wl_list_empty wl_list_empty_dylibloader_orig_wayland_client
|
||||
#define wl_list_insert_list wl_list_insert_list_dylibloader_orig_wayland_client
|
||||
#define wl_array_init wl_array_init_dylibloader_orig_wayland_client
|
||||
#define wl_array_release wl_array_release_dylibloader_orig_wayland_client
|
||||
#define wl_array_add wl_array_add_dylibloader_orig_wayland_client
|
||||
#define wl_array_copy wl_array_copy_dylibloader_orig_wayland_client
|
||||
#define wl_event_queue_destroy wl_event_queue_destroy_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal_flags wl_proxy_marshal_flags_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal_array_flags wl_proxy_marshal_array_flags_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal wl_proxy_marshal_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal_array wl_proxy_marshal_array_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_create wl_proxy_create_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_create_wrapper wl_proxy_create_wrapper_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_wrapper_destroy wl_proxy_wrapper_destroy_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal_constructor wl_proxy_marshal_constructor_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal_constructor_versioned wl_proxy_marshal_constructor_versioned_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal_array_constructor wl_proxy_marshal_array_constructor_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal_array_constructor_versioned wl_proxy_marshal_array_constructor_versioned_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_destroy wl_proxy_destroy_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_add_listener wl_proxy_add_listener_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_get_listener wl_proxy_get_listener_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_add_dispatcher wl_proxy_add_dispatcher_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_set_user_data wl_proxy_set_user_data_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_get_user_data wl_proxy_get_user_data_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_get_version wl_proxy_get_version_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_get_id wl_proxy_get_id_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_set_tag wl_proxy_set_tag_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_get_tag wl_proxy_get_tag_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_get_class wl_proxy_get_class_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_set_queue wl_proxy_set_queue_dylibloader_orig_wayland_client
|
||||
#define wl_display_connect wl_display_connect_dylibloader_orig_wayland_client
|
||||
#define wl_display_connect_to_fd wl_display_connect_to_fd_dylibloader_orig_wayland_client
|
||||
#define wl_display_disconnect wl_display_disconnect_dylibloader_orig_wayland_client
|
||||
#define wl_display_get_fd wl_display_get_fd_dylibloader_orig_wayland_client
|
||||
#define wl_display_dispatch wl_display_dispatch_dylibloader_orig_wayland_client
|
||||
#define wl_display_dispatch_queue wl_display_dispatch_queue_dylibloader_orig_wayland_client
|
||||
#define wl_display_dispatch_queue_pending wl_display_dispatch_queue_pending_dylibloader_orig_wayland_client
|
||||
#define wl_display_dispatch_pending wl_display_dispatch_pending_dylibloader_orig_wayland_client
|
||||
#define wl_display_get_error wl_display_get_error_dylibloader_orig_wayland_client
|
||||
#define wl_display_get_protocol_error wl_display_get_protocol_error_dylibloader_orig_wayland_client
|
||||
#define wl_display_flush wl_display_flush_dylibloader_orig_wayland_client
|
||||
#define wl_display_roundtrip_queue wl_display_roundtrip_queue_dylibloader_orig_wayland_client
|
||||
#define wl_display_roundtrip wl_display_roundtrip_dylibloader_orig_wayland_client
|
||||
#define wl_display_create_queue wl_display_create_queue_dylibloader_orig_wayland_client
|
||||
#define wl_display_prepare_read_queue wl_display_prepare_read_queue_dylibloader_orig_wayland_client
|
||||
#define wl_display_prepare_read wl_display_prepare_read_dylibloader_orig_wayland_client
|
||||
#define wl_display_cancel_read wl_display_cancel_read_dylibloader_orig_wayland_client
|
||||
#define wl_display_read_events wl_display_read_events_dylibloader_orig_wayland_client
|
||||
#define wl_log_set_handler_client wl_log_set_handler_client_dylibloader_orig_wayland_client
|
||||
#include "./thirdparty/linuxbsd_headers/wayland/wayland-client-core.h"
|
||||
#undef wl_list_init
|
||||
#undef wl_list_insert
|
||||
#undef wl_list_remove
|
||||
#undef wl_list_length
|
||||
#undef wl_list_empty
|
||||
#undef wl_list_insert_list
|
||||
#undef wl_array_init
|
||||
#undef wl_array_release
|
||||
#undef wl_array_add
|
||||
#undef wl_array_copy
|
||||
#undef wl_event_queue_destroy
|
||||
#undef wl_proxy_marshal_flags
|
||||
#undef wl_proxy_marshal_array_flags
|
||||
#undef wl_proxy_marshal
|
||||
#undef wl_proxy_marshal_array
|
||||
#undef wl_proxy_create
|
||||
#undef wl_proxy_create_wrapper
|
||||
#undef wl_proxy_wrapper_destroy
|
||||
#undef wl_proxy_marshal_constructor
|
||||
#undef wl_proxy_marshal_constructor_versioned
|
||||
#undef wl_proxy_marshal_array_constructor
|
||||
#undef wl_proxy_marshal_array_constructor_versioned
|
||||
#undef wl_proxy_destroy
|
||||
#undef wl_proxy_add_listener
|
||||
#undef wl_proxy_get_listener
|
||||
#undef wl_proxy_add_dispatcher
|
||||
#undef wl_proxy_set_user_data
|
||||
#undef wl_proxy_get_user_data
|
||||
#undef wl_proxy_get_version
|
||||
#undef wl_proxy_get_id
|
||||
#undef wl_proxy_set_tag
|
||||
#undef wl_proxy_get_tag
|
||||
#undef wl_proxy_get_class
|
||||
#undef wl_proxy_set_queue
|
||||
#undef wl_display_connect
|
||||
#undef wl_display_connect_to_fd
|
||||
#undef wl_display_disconnect
|
||||
#undef wl_display_get_fd
|
||||
#undef wl_display_dispatch
|
||||
#undef wl_display_dispatch_queue
|
||||
#undef wl_display_dispatch_queue_pending
|
||||
#undef wl_display_dispatch_pending
|
||||
#undef wl_display_get_error
|
||||
#undef wl_display_get_protocol_error
|
||||
#undef wl_display_flush
|
||||
#undef wl_display_roundtrip_queue
|
||||
#undef wl_display_roundtrip
|
||||
#undef wl_display_create_queue
|
||||
#undef wl_display_prepare_read_queue
|
||||
#undef wl_display_prepare_read
|
||||
#undef wl_display_cancel_read
|
||||
#undef wl_display_read_events
|
||||
#undef wl_log_set_handler_client
|
||||
#include <dlfcn.h>
|
||||
#include <stdio.h>
|
||||
void (*wl_list_init_dylibloader_wrapper_wayland_client)(struct wl_list*);
|
||||
void (*wl_list_insert_dylibloader_wrapper_wayland_client)(struct wl_list*,struct wl_list*);
|
||||
void (*wl_list_remove_dylibloader_wrapper_wayland_client)(struct wl_list*);
|
||||
int (*wl_list_length_dylibloader_wrapper_wayland_client)(struct wl_list*);
|
||||
int (*wl_list_empty_dylibloader_wrapper_wayland_client)(struct wl_list*);
|
||||
void (*wl_list_insert_list_dylibloader_wrapper_wayland_client)(struct wl_list*,struct wl_list*);
|
||||
void (*wl_array_init_dylibloader_wrapper_wayland_client)(struct wl_array*);
|
||||
void (*wl_array_release_dylibloader_wrapper_wayland_client)(struct wl_array*);
|
||||
void* (*wl_array_add_dylibloader_wrapper_wayland_client)(struct wl_array*, size_t);
|
||||
int (*wl_array_copy_dylibloader_wrapper_wayland_client)(struct wl_array*,struct wl_array*);
|
||||
void (*wl_event_queue_destroy_dylibloader_wrapper_wayland_client)(struct wl_event_queue*);
|
||||
struct wl_proxy* (*wl_proxy_marshal_flags_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,const struct wl_interface*, uint32_t, uint32_t,...);
|
||||
struct wl_proxy* (*wl_proxy_marshal_array_flags_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,const struct wl_interface*, uint32_t, uint32_t,union wl_argument);
|
||||
void (*wl_proxy_marshal_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,...);
|
||||
void (*wl_proxy_marshal_array_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,union wl_argument);
|
||||
struct wl_proxy* (*wl_proxy_create_dylibloader_wrapper_wayland_client)(struct wl_proxy*,const struct wl_interface*);
|
||||
void* (*wl_proxy_create_wrapper_dylibloader_wrapper_wayland_client)( void*);
|
||||
void (*wl_proxy_wrapper_destroy_dylibloader_wrapper_wayland_client)( void*);
|
||||
struct wl_proxy* (*wl_proxy_marshal_constructor_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,const struct wl_interface*,...);
|
||||
struct wl_proxy* (*wl_proxy_marshal_constructor_versioned_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,const struct wl_interface*, uint32_t,...);
|
||||
struct wl_proxy* (*wl_proxy_marshal_array_constructor_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,union wl_argument,const struct wl_interface*);
|
||||
struct wl_proxy* (*wl_proxy_marshal_array_constructor_versioned_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,union wl_argument,const struct wl_interface*, uint32_t);
|
||||
void (*wl_proxy_destroy_dylibloader_wrapper_wayland_client)(struct wl_proxy*);
|
||||
int (*wl_proxy_add_listener_dylibloader_wrapper_wayland_client)(struct wl_proxy*, void(**)(void), void*);
|
||||
const void* (*wl_proxy_get_listener_dylibloader_wrapper_wayland_client)(struct wl_proxy*);
|
||||
int (*wl_proxy_add_dispatcher_dylibloader_wrapper_wayland_client)(struct wl_proxy*, wl_dispatcher_func_t,const void*, void*);
|
||||
void (*wl_proxy_set_user_data_dylibloader_wrapper_wayland_client)(struct wl_proxy*, void*);
|
||||
void* (*wl_proxy_get_user_data_dylibloader_wrapper_wayland_client)(struct wl_proxy*);
|
||||
uint32_t (*wl_proxy_get_version_dylibloader_wrapper_wayland_client)(struct wl_proxy*);
|
||||
uint32_t (*wl_proxy_get_id_dylibloader_wrapper_wayland_client)(struct wl_proxy*);
|
||||
void (*wl_proxy_set_tag_dylibloader_wrapper_wayland_client)(struct wl_proxy*,const char**);
|
||||
const char** (*wl_proxy_get_tag_dylibloader_wrapper_wayland_client)(struct wl_proxy*);
|
||||
const char* (*wl_proxy_get_class_dylibloader_wrapper_wayland_client)(struct wl_proxy*);
|
||||
void (*wl_proxy_set_queue_dylibloader_wrapper_wayland_client)(struct wl_proxy*,struct wl_event_queue*);
|
||||
struct wl_display* (*wl_display_connect_dylibloader_wrapper_wayland_client)(const char*);
|
||||
struct wl_display* (*wl_display_connect_to_fd_dylibloader_wrapper_wayland_client)( int);
|
||||
void (*wl_display_disconnect_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
int (*wl_display_get_fd_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
int (*wl_display_dispatch_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
int (*wl_display_dispatch_queue_dylibloader_wrapper_wayland_client)(struct wl_display*,struct wl_event_queue*);
|
||||
int (*wl_display_dispatch_queue_pending_dylibloader_wrapper_wayland_client)(struct wl_display*,struct wl_event_queue*);
|
||||
int (*wl_display_dispatch_pending_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
int (*wl_display_get_error_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
uint32_t (*wl_display_get_protocol_error_dylibloader_wrapper_wayland_client)(struct wl_display*,const struct wl_interface**, uint32_t*);
|
||||
int (*wl_display_flush_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
int (*wl_display_roundtrip_queue_dylibloader_wrapper_wayland_client)(struct wl_display*,struct wl_event_queue*);
|
||||
int (*wl_display_roundtrip_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
struct wl_event_queue* (*wl_display_create_queue_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
int (*wl_display_prepare_read_queue_dylibloader_wrapper_wayland_client)(struct wl_display*,struct wl_event_queue*);
|
||||
int (*wl_display_prepare_read_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
void (*wl_display_cancel_read_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
int (*wl_display_read_events_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
void (*wl_log_set_handler_client_dylibloader_wrapper_wayland_client)( wl_log_func_t);
|
||||
int initialize_wayland_client(int verbose) {
|
||||
void *handle;
|
||||
char *error;
|
||||
handle = dlopen("libwayland-client.so.0", RTLD_LAZY);
|
||||
if (!handle) {
|
||||
if (verbose) {
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
dlerror();
|
||||
// wl_list_init
|
||||
*(void **) (&wl_list_init_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_list_init");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_list_insert
|
||||
*(void **) (&wl_list_insert_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_list_insert");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_list_remove
|
||||
*(void **) (&wl_list_remove_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_list_remove");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_list_length
|
||||
*(void **) (&wl_list_length_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_list_length");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_list_empty
|
||||
*(void **) (&wl_list_empty_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_list_empty");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_list_insert_list
|
||||
*(void **) (&wl_list_insert_list_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_list_insert_list");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_array_init
|
||||
*(void **) (&wl_array_init_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_array_init");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_array_release
|
||||
*(void **) (&wl_array_release_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_array_release");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_array_add
|
||||
*(void **) (&wl_array_add_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_array_add");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_array_copy
|
||||
*(void **) (&wl_array_copy_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_array_copy");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_event_queue_destroy
|
||||
*(void **) (&wl_event_queue_destroy_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_event_queue_destroy");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_marshal_flags
|
||||
*(void **) (&wl_proxy_marshal_flags_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_marshal_flags");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_marshal_array_flags
|
||||
*(void **) (&wl_proxy_marshal_array_flags_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_marshal_array_flags");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_marshal
|
||||
*(void **) (&wl_proxy_marshal_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_marshal");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_marshal_array
|
||||
*(void **) (&wl_proxy_marshal_array_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_marshal_array");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_create
|
||||
*(void **) (&wl_proxy_create_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_create");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_create_wrapper
|
||||
*(void **) (&wl_proxy_create_wrapper_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_create_wrapper");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_wrapper_destroy
|
||||
*(void **) (&wl_proxy_wrapper_destroy_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_wrapper_destroy");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_marshal_constructor
|
||||
*(void **) (&wl_proxy_marshal_constructor_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_marshal_constructor");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_marshal_constructor_versioned
|
||||
*(void **) (&wl_proxy_marshal_constructor_versioned_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_marshal_constructor_versioned");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_marshal_array_constructor
|
||||
*(void **) (&wl_proxy_marshal_array_constructor_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_marshal_array_constructor");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_marshal_array_constructor_versioned
|
||||
*(void **) (&wl_proxy_marshal_array_constructor_versioned_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_marshal_array_constructor_versioned");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_destroy
|
||||
*(void **) (&wl_proxy_destroy_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_destroy");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_add_listener
|
||||
*(void **) (&wl_proxy_add_listener_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_add_listener");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_get_listener
|
||||
*(void **) (&wl_proxy_get_listener_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_get_listener");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_add_dispatcher
|
||||
*(void **) (&wl_proxy_add_dispatcher_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_add_dispatcher");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_set_user_data
|
||||
*(void **) (&wl_proxy_set_user_data_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_set_user_data");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_get_user_data
|
||||
*(void **) (&wl_proxy_get_user_data_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_get_user_data");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_get_version
|
||||
*(void **) (&wl_proxy_get_version_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_get_version");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_get_id
|
||||
*(void **) (&wl_proxy_get_id_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_get_id");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_set_tag
|
||||
*(void **) (&wl_proxy_set_tag_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_set_tag");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_get_tag
|
||||
*(void **) (&wl_proxy_get_tag_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_get_tag");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_get_class
|
||||
*(void **) (&wl_proxy_get_class_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_get_class");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_proxy_set_queue
|
||||
*(void **) (&wl_proxy_set_queue_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_proxy_set_queue");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_connect
|
||||
*(void **) (&wl_display_connect_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_connect");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_connect_to_fd
|
||||
*(void **) (&wl_display_connect_to_fd_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_connect_to_fd");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_disconnect
|
||||
*(void **) (&wl_display_disconnect_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_disconnect");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_get_fd
|
||||
*(void **) (&wl_display_get_fd_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_get_fd");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_dispatch
|
||||
*(void **) (&wl_display_dispatch_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_dispatch");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_dispatch_queue
|
||||
*(void **) (&wl_display_dispatch_queue_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_dispatch_queue");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_dispatch_queue_pending
|
||||
*(void **) (&wl_display_dispatch_queue_pending_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_dispatch_queue_pending");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_dispatch_pending
|
||||
*(void **) (&wl_display_dispatch_pending_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_dispatch_pending");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_get_error
|
||||
*(void **) (&wl_display_get_error_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_get_error");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_get_protocol_error
|
||||
*(void **) (&wl_display_get_protocol_error_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_get_protocol_error");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_flush
|
||||
*(void **) (&wl_display_flush_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_flush");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_roundtrip_queue
|
||||
*(void **) (&wl_display_roundtrip_queue_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_roundtrip_queue");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_roundtrip
|
||||
*(void **) (&wl_display_roundtrip_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_roundtrip");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_create_queue
|
||||
*(void **) (&wl_display_create_queue_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_create_queue");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_prepare_read_queue
|
||||
*(void **) (&wl_display_prepare_read_queue_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_prepare_read_queue");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_prepare_read
|
||||
*(void **) (&wl_display_prepare_read_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_prepare_read");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_cancel_read
|
||||
*(void **) (&wl_display_cancel_read_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_cancel_read");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_display_read_events
|
||||
*(void **) (&wl_display_read_events_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_display_read_events");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_log_set_handler_client
|
||||
*(void **) (&wl_log_set_handler_client_dylibloader_wrapper_wayland_client) = dlsym(handle, "wl_log_set_handler_client");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
@@ -0,0 +1,231 @@
|
||||
#ifndef DYLIBLOAD_WRAPPER_WAYLAND_CLIENT
|
||||
#define DYLIBLOAD_WRAPPER_WAYLAND_CLIENT
|
||||
// This file is generated. Do not edit!
|
||||
// see https://github.com/hpvb/dynload-wrapper for details
|
||||
// generated by ../dynload-wrapper/generate-wrapper.py 0.3 on 2023-01-25 17:36:12
|
||||
// flags: ../dynload-wrapper/generate-wrapper.py --include ./thirdparty/linuxbsd_headers/wayland/wayland-client-core.h --sys-include "./thirdparty/linuxbsd_headers/wayland/wayland-client-core.h" --soname libwayland-client.so.0 --init-name wayland_client --output-header platform/linuxbsd/wayland/dynwrappers/wayland-client-core-so_wrap.h --output-implementation platform/linuxbsd/wayland/dynwrappers/wayland-client-core-so_wrap.c
|
||||
//
|
||||
// NOTE: This has been hand-patched to workaround some issues.
|
||||
#include <stdint.h>
|
||||
|
||||
#define wl_list_init wl_list_init_dylibloader_orig_wayland_client
|
||||
#define wl_list_insert wl_list_insert_dylibloader_orig_wayland_client
|
||||
#define wl_list_remove wl_list_remove_dylibloader_orig_wayland_client
|
||||
#define wl_list_length wl_list_length_dylibloader_orig_wayland_client
|
||||
#define wl_list_empty wl_list_empty_dylibloader_orig_wayland_client
|
||||
#define wl_list_insert_list wl_list_insert_list_dylibloader_orig_wayland_client
|
||||
#define wl_array_init wl_array_init_dylibloader_orig_wayland_client
|
||||
#define wl_array_release wl_array_release_dylibloader_orig_wayland_client
|
||||
#define wl_array_add wl_array_add_dylibloader_orig_wayland_client
|
||||
#define wl_array_copy wl_array_copy_dylibloader_orig_wayland_client
|
||||
#define wl_event_queue_destroy wl_event_queue_destroy_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal_flags wl_proxy_marshal_flags_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal_array_flags wl_proxy_marshal_array_flags_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal wl_proxy_marshal_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal_array wl_proxy_marshal_array_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_create wl_proxy_create_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_create_wrapper wl_proxy_create_wrapper_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_wrapper_destroy wl_proxy_wrapper_destroy_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal_constructor wl_proxy_marshal_constructor_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal_constructor_versioned wl_proxy_marshal_constructor_versioned_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal_array_constructor wl_proxy_marshal_array_constructor_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_marshal_array_constructor_versioned wl_proxy_marshal_array_constructor_versioned_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_destroy wl_proxy_destroy_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_add_listener wl_proxy_add_listener_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_get_listener wl_proxy_get_listener_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_add_dispatcher wl_proxy_add_dispatcher_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_set_user_data wl_proxy_set_user_data_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_get_user_data wl_proxy_get_user_data_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_get_version wl_proxy_get_version_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_get_id wl_proxy_get_id_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_set_tag wl_proxy_set_tag_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_get_tag wl_proxy_get_tag_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_get_class wl_proxy_get_class_dylibloader_orig_wayland_client
|
||||
#define wl_proxy_set_queue wl_proxy_set_queue_dylibloader_orig_wayland_client
|
||||
#define wl_display_connect wl_display_connect_dylibloader_orig_wayland_client
|
||||
#define wl_display_connect_to_fd wl_display_connect_to_fd_dylibloader_orig_wayland_client
|
||||
#define wl_display_disconnect wl_display_disconnect_dylibloader_orig_wayland_client
|
||||
#define wl_display_get_fd wl_display_get_fd_dylibloader_orig_wayland_client
|
||||
#define wl_display_dispatch wl_display_dispatch_dylibloader_orig_wayland_client
|
||||
#define wl_display_dispatch_queue wl_display_dispatch_queue_dylibloader_orig_wayland_client
|
||||
#define wl_display_dispatch_queue_pending wl_display_dispatch_queue_pending_dylibloader_orig_wayland_client
|
||||
#define wl_display_dispatch_pending wl_display_dispatch_pending_dylibloader_orig_wayland_client
|
||||
#define wl_display_get_error wl_display_get_error_dylibloader_orig_wayland_client
|
||||
#define wl_display_get_protocol_error wl_display_get_protocol_error_dylibloader_orig_wayland_client
|
||||
#define wl_display_flush wl_display_flush_dylibloader_orig_wayland_client
|
||||
#define wl_display_roundtrip_queue wl_display_roundtrip_queue_dylibloader_orig_wayland_client
|
||||
#define wl_display_roundtrip wl_display_roundtrip_dylibloader_orig_wayland_client
|
||||
#define wl_display_create_queue wl_display_create_queue_dylibloader_orig_wayland_client
|
||||
#define wl_display_prepare_read_queue wl_display_prepare_read_queue_dylibloader_orig_wayland_client
|
||||
#define wl_display_prepare_read wl_display_prepare_read_dylibloader_orig_wayland_client
|
||||
#define wl_display_cancel_read wl_display_cancel_read_dylibloader_orig_wayland_client
|
||||
#define wl_display_read_events wl_display_read_events_dylibloader_orig_wayland_client
|
||||
#define wl_log_set_handler_client wl_log_set_handler_client_dylibloader_orig_wayland_client
|
||||
#include "./thirdparty/linuxbsd_headers/wayland/wayland-client-core.h"
|
||||
#undef wl_list_init
|
||||
#undef wl_list_insert
|
||||
#undef wl_list_remove
|
||||
#undef wl_list_length
|
||||
#undef wl_list_empty
|
||||
#undef wl_list_insert_list
|
||||
#undef wl_array_init
|
||||
#undef wl_array_release
|
||||
#undef wl_array_add
|
||||
#undef wl_array_copy
|
||||
#undef wl_event_queue_destroy
|
||||
#undef wl_proxy_marshal_flags
|
||||
#undef wl_proxy_marshal_array_flags
|
||||
#undef wl_proxy_marshal
|
||||
#undef wl_proxy_marshal_array
|
||||
#undef wl_proxy_create
|
||||
#undef wl_proxy_create_wrapper
|
||||
#undef wl_proxy_wrapper_destroy
|
||||
#undef wl_proxy_marshal_constructor
|
||||
#undef wl_proxy_marshal_constructor_versioned
|
||||
#undef wl_proxy_marshal_array_constructor
|
||||
#undef wl_proxy_marshal_array_constructor_versioned
|
||||
#undef wl_proxy_destroy
|
||||
#undef wl_proxy_add_listener
|
||||
#undef wl_proxy_get_listener
|
||||
#undef wl_proxy_add_dispatcher
|
||||
#undef wl_proxy_set_user_data
|
||||
#undef wl_proxy_get_user_data
|
||||
#undef wl_proxy_get_version
|
||||
#undef wl_proxy_get_id
|
||||
#undef wl_proxy_set_tag
|
||||
#undef wl_proxy_get_tag
|
||||
#undef wl_proxy_get_class
|
||||
#undef wl_proxy_set_queue
|
||||
#undef wl_display_connect
|
||||
#undef wl_display_connect_to_fd
|
||||
#undef wl_display_disconnect
|
||||
#undef wl_display_get_fd
|
||||
#undef wl_display_dispatch
|
||||
#undef wl_display_dispatch_queue
|
||||
#undef wl_display_dispatch_queue_pending
|
||||
#undef wl_display_dispatch_pending
|
||||
#undef wl_display_get_error
|
||||
#undef wl_display_get_protocol_error
|
||||
#undef wl_display_flush
|
||||
#undef wl_display_roundtrip_queue
|
||||
#undef wl_display_roundtrip
|
||||
#undef wl_display_create_queue
|
||||
#undef wl_display_prepare_read_queue
|
||||
#undef wl_display_prepare_read
|
||||
#undef wl_display_cancel_read
|
||||
#undef wl_display_read_events
|
||||
#undef wl_log_set_handler_client
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#define wl_list_init wl_list_init_dylibloader_wrapper_wayland_client
|
||||
#define wl_list_insert wl_list_insert_dylibloader_wrapper_wayland_client
|
||||
#define wl_list_remove wl_list_remove_dylibloader_wrapper_wayland_client
|
||||
#define wl_list_length wl_list_length_dylibloader_wrapper_wayland_client
|
||||
#define wl_list_empty wl_list_empty_dylibloader_wrapper_wayland_client
|
||||
#define wl_list_insert_list wl_list_insert_list_dylibloader_wrapper_wayland_client
|
||||
#define wl_array_init wl_array_init_dylibloader_wrapper_wayland_client
|
||||
#define wl_array_release wl_array_release_dylibloader_wrapper_wayland_client
|
||||
#define wl_array_add wl_array_add_dylibloader_wrapper_wayland_client
|
||||
#define wl_array_copy wl_array_copy_dylibloader_wrapper_wayland_client
|
||||
#define wl_event_queue_destroy wl_event_queue_destroy_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_marshal_flags wl_proxy_marshal_flags_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_marshal_array_flags wl_proxy_marshal_array_flags_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_marshal wl_proxy_marshal_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_marshal_array wl_proxy_marshal_array_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_create wl_proxy_create_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_create_wrapper wl_proxy_create_wrapper_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_wrapper_destroy wl_proxy_wrapper_destroy_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_marshal_constructor wl_proxy_marshal_constructor_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_marshal_constructor_versioned wl_proxy_marshal_constructor_versioned_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_marshal_array_constructor wl_proxy_marshal_array_constructor_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_marshal_array_constructor_versioned wl_proxy_marshal_array_constructor_versioned_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_destroy wl_proxy_destroy_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_add_listener wl_proxy_add_listener_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_get_listener wl_proxy_get_listener_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_add_dispatcher wl_proxy_add_dispatcher_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_set_user_data wl_proxy_set_user_data_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_get_user_data wl_proxy_get_user_data_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_get_version wl_proxy_get_version_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_get_id wl_proxy_get_id_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_set_tag wl_proxy_set_tag_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_get_tag wl_proxy_get_tag_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_get_class wl_proxy_get_class_dylibloader_wrapper_wayland_client
|
||||
#define wl_proxy_set_queue wl_proxy_set_queue_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_connect wl_display_connect_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_connect_to_fd wl_display_connect_to_fd_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_disconnect wl_display_disconnect_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_get_fd wl_display_get_fd_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_dispatch wl_display_dispatch_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_dispatch_queue wl_display_dispatch_queue_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_dispatch_queue_pending wl_display_dispatch_queue_pending_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_dispatch_pending wl_display_dispatch_pending_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_get_error wl_display_get_error_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_get_protocol_error wl_display_get_protocol_error_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_flush wl_display_flush_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_roundtrip_queue wl_display_roundtrip_queue_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_roundtrip wl_display_roundtrip_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_create_queue wl_display_create_queue_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_prepare_read_queue wl_display_prepare_read_queue_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_prepare_read wl_display_prepare_read_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_cancel_read wl_display_cancel_read_dylibloader_wrapper_wayland_client
|
||||
#define wl_display_read_events wl_display_read_events_dylibloader_wrapper_wayland_client
|
||||
#define wl_log_set_handler_client wl_log_set_handler_client_dylibloader_wrapper_wayland_client
|
||||
extern void (*wl_list_init_dylibloader_wrapper_wayland_client)(struct wl_list*);
|
||||
extern void (*wl_list_insert_dylibloader_wrapper_wayland_client)(struct wl_list*,struct wl_list*);
|
||||
extern void (*wl_list_remove_dylibloader_wrapper_wayland_client)(struct wl_list*);
|
||||
extern int (*wl_list_length_dylibloader_wrapper_wayland_client)(struct wl_list*);
|
||||
extern int (*wl_list_empty_dylibloader_wrapper_wayland_client)(struct wl_list*);
|
||||
extern void (*wl_list_insert_list_dylibloader_wrapper_wayland_client)(struct wl_list*,struct wl_list*);
|
||||
extern void (*wl_array_init_dylibloader_wrapper_wayland_client)(struct wl_array*);
|
||||
extern void (*wl_array_release_dylibloader_wrapper_wayland_client)(struct wl_array*);
|
||||
extern void* (*wl_array_add_dylibloader_wrapper_wayland_client)(struct wl_array*, size_t);
|
||||
extern int (*wl_array_copy_dylibloader_wrapper_wayland_client)(struct wl_array*,struct wl_array*);
|
||||
extern void (*wl_event_queue_destroy_dylibloader_wrapper_wayland_client)(struct wl_event_queue*);
|
||||
extern struct wl_proxy* (*wl_proxy_marshal_flags_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,const struct wl_interface*, uint32_t, uint32_t,...);
|
||||
extern struct wl_proxy* (*wl_proxy_marshal_array_flags_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,const struct wl_interface*, uint32_t, uint32_t,union wl_argument);
|
||||
extern void (*wl_proxy_marshal_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,...);
|
||||
extern void (*wl_proxy_marshal_array_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,union wl_argument);
|
||||
extern struct wl_proxy* (*wl_proxy_create_dylibloader_wrapper_wayland_client)(struct wl_proxy*,const struct wl_interface*);
|
||||
extern void* (*wl_proxy_create_wrapper_dylibloader_wrapper_wayland_client)( void*);
|
||||
extern void (*wl_proxy_wrapper_destroy_dylibloader_wrapper_wayland_client)( void*);
|
||||
extern struct wl_proxy* (*wl_proxy_marshal_constructor_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,const struct wl_interface*,...);
|
||||
extern struct wl_proxy* (*wl_proxy_marshal_constructor_versioned_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,const struct wl_interface*, uint32_t,...);
|
||||
extern struct wl_proxy* (*wl_proxy_marshal_array_constructor_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,union wl_argument,const struct wl_interface*);
|
||||
extern struct wl_proxy* (*wl_proxy_marshal_array_constructor_versioned_dylibloader_wrapper_wayland_client)(struct wl_proxy*, uint32_t,union wl_argument,const struct wl_interface*, uint32_t);
|
||||
extern void (*wl_proxy_destroy_dylibloader_wrapper_wayland_client)(struct wl_proxy*);
|
||||
extern int (*wl_proxy_add_listener_dylibloader_wrapper_wayland_client)(struct wl_proxy*, void(**)(void), void*);
|
||||
extern const void* (*wl_proxy_get_listener_dylibloader_wrapper_wayland_client)(struct wl_proxy*);
|
||||
extern int (*wl_proxy_add_dispatcher_dylibloader_wrapper_wayland_client)(struct wl_proxy*, wl_dispatcher_func_t,const void*, void*);
|
||||
extern void (*wl_proxy_set_user_data_dylibloader_wrapper_wayland_client)(struct wl_proxy*, void*);
|
||||
extern void* (*wl_proxy_get_user_data_dylibloader_wrapper_wayland_client)(struct wl_proxy*);
|
||||
extern uint32_t (*wl_proxy_get_version_dylibloader_wrapper_wayland_client)(struct wl_proxy*);
|
||||
extern uint32_t (*wl_proxy_get_id_dylibloader_wrapper_wayland_client)(struct wl_proxy*);
|
||||
extern void (*wl_proxy_set_tag_dylibloader_wrapper_wayland_client)(struct wl_proxy*,const char**);
|
||||
extern const char** (*wl_proxy_get_tag_dylibloader_wrapper_wayland_client)(struct wl_proxy*);
|
||||
extern const char* (*wl_proxy_get_class_dylibloader_wrapper_wayland_client)(struct wl_proxy*);
|
||||
extern void (*wl_proxy_set_queue_dylibloader_wrapper_wayland_client)(struct wl_proxy*,struct wl_event_queue*);
|
||||
extern struct wl_display* (*wl_display_connect_dylibloader_wrapper_wayland_client)(const char*);
|
||||
extern struct wl_display* (*wl_display_connect_to_fd_dylibloader_wrapper_wayland_client)( int);
|
||||
extern void (*wl_display_disconnect_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
extern int (*wl_display_get_fd_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
extern int (*wl_display_dispatch_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
extern int (*wl_display_dispatch_queue_dylibloader_wrapper_wayland_client)(struct wl_display*,struct wl_event_queue*);
|
||||
extern int (*wl_display_dispatch_queue_pending_dylibloader_wrapper_wayland_client)(struct wl_display*,struct wl_event_queue*);
|
||||
extern int (*wl_display_dispatch_pending_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
extern int (*wl_display_get_error_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
extern uint32_t (*wl_display_get_protocol_error_dylibloader_wrapper_wayland_client)(struct wl_display*,const struct wl_interface**, uint32_t*);
|
||||
extern int (*wl_display_flush_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
extern int (*wl_display_roundtrip_queue_dylibloader_wrapper_wayland_client)(struct wl_display*,struct wl_event_queue*);
|
||||
extern int (*wl_display_roundtrip_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
extern struct wl_event_queue* (*wl_display_create_queue_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
extern int (*wl_display_prepare_read_queue_dylibloader_wrapper_wayland_client)(struct wl_display*,struct wl_event_queue*);
|
||||
extern int (*wl_display_prepare_read_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
extern void (*wl_display_cancel_read_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
extern int (*wl_display_read_events_dylibloader_wrapper_wayland_client)(struct wl_display*);
|
||||
extern void (*wl_log_set_handler_client_dylibloader_wrapper_wayland_client)( wl_log_func_t);
|
||||
int initialize_wayland_client(int verbose);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
@@ -0,0 +1,89 @@
|
||||
// This file is generated. Do not edit!
|
||||
// see https://github.com/hpvb/dynload-wrapper for details
|
||||
// generated by ../dynload-wrapper/generate-wrapper.py 0.3 on 2023-01-25 17:46:12
|
||||
// flags: ../dynload-wrapper/generate-wrapper.py --include ./thirdparty/linuxbsd_headers/wayland/wayland-cursor.h --sys-include "./thirdparty/linuxbsd_headers/wayland/wayland-cursor.h" --soname libwayland-cursor.so.0 --init-name wayland_cursor --output-header platform/linuxbsd/wayland/dynwrappers/wayland-cursor-so_wrap.h --output-implementation platform/linuxbsd/wayland/dynwrappers/wayland-cursor-so_wrap.c
|
||||
//
|
||||
#include <stdint.h>
|
||||
|
||||
#define wl_cursor_theme_load wl_cursor_theme_load_dylibloader_orig_wayland_cursor
|
||||
#define wl_cursor_theme_destroy wl_cursor_theme_destroy_dylibloader_orig_wayland_cursor
|
||||
#define wl_cursor_theme_get_cursor wl_cursor_theme_get_cursor_dylibloader_orig_wayland_cursor
|
||||
#define wl_cursor_image_get_buffer wl_cursor_image_get_buffer_dylibloader_orig_wayland_cursor
|
||||
#define wl_cursor_frame wl_cursor_frame_dylibloader_orig_wayland_cursor
|
||||
#define wl_cursor_frame_and_duration wl_cursor_frame_and_duration_dylibloader_orig_wayland_cursor
|
||||
#include "./thirdparty/linuxbsd_headers/wayland/wayland-cursor.h"
|
||||
#undef wl_cursor_theme_load
|
||||
#undef wl_cursor_theme_destroy
|
||||
#undef wl_cursor_theme_get_cursor
|
||||
#undef wl_cursor_image_get_buffer
|
||||
#undef wl_cursor_frame
|
||||
#undef wl_cursor_frame_and_duration
|
||||
#include <dlfcn.h>
|
||||
#include <stdio.h>
|
||||
struct wl_cursor_theme* (*wl_cursor_theme_load_dylibloader_wrapper_wayland_cursor)(const char*, int,struct wl_shm*);
|
||||
void (*wl_cursor_theme_destroy_dylibloader_wrapper_wayland_cursor)(struct wl_cursor_theme*);
|
||||
struct wl_cursor* (*wl_cursor_theme_get_cursor_dylibloader_wrapper_wayland_cursor)(struct wl_cursor_theme*,const char*);
|
||||
struct wl_buffer* (*wl_cursor_image_get_buffer_dylibloader_wrapper_wayland_cursor)(struct wl_cursor_image*);
|
||||
int (*wl_cursor_frame_dylibloader_wrapper_wayland_cursor)(struct wl_cursor*, uint32_t);
|
||||
int (*wl_cursor_frame_and_duration_dylibloader_wrapper_wayland_cursor)(struct wl_cursor*, uint32_t, uint32_t*);
|
||||
int initialize_wayland_cursor(int verbose) {
|
||||
void *handle;
|
||||
char *error;
|
||||
handle = dlopen("libwayland-cursor.so.0", RTLD_LAZY);
|
||||
if (!handle) {
|
||||
if (verbose) {
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
dlerror();
|
||||
// wl_cursor_theme_load
|
||||
*(void **) (&wl_cursor_theme_load_dylibloader_wrapper_wayland_cursor) = dlsym(handle, "wl_cursor_theme_load");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_cursor_theme_destroy
|
||||
*(void **) (&wl_cursor_theme_destroy_dylibloader_wrapper_wayland_cursor) = dlsym(handle, "wl_cursor_theme_destroy");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_cursor_theme_get_cursor
|
||||
*(void **) (&wl_cursor_theme_get_cursor_dylibloader_wrapper_wayland_cursor) = dlsym(handle, "wl_cursor_theme_get_cursor");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_cursor_image_get_buffer
|
||||
*(void **) (&wl_cursor_image_get_buffer_dylibloader_wrapper_wayland_cursor) = dlsym(handle, "wl_cursor_image_get_buffer");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_cursor_frame
|
||||
*(void **) (&wl_cursor_frame_dylibloader_wrapper_wayland_cursor) = dlsym(handle, "wl_cursor_frame");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_cursor_frame_and_duration
|
||||
*(void **) (&wl_cursor_frame_and_duration_dylibloader_wrapper_wayland_cursor) = dlsym(handle, "wl_cursor_frame_and_duration");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
@@ -0,0 +1,42 @@
|
||||
#ifndef DYLIBLOAD_WRAPPER_WAYLAND_CURSOR
|
||||
#define DYLIBLOAD_WRAPPER_WAYLAND_CURSOR
|
||||
// This file is generated. Do not edit!
|
||||
// see https://github.com/hpvb/dynload-wrapper for details
|
||||
// generated by ../dynload-wrapper/generate-wrapper.py 0.3 on 2023-01-25 17:46:12
|
||||
// flags: ../dynload-wrapper/generate-wrapper.py --include ./thirdparty/linuxbsd_headers/wayland/wayland-cursor.h --sys-include "./thirdparty/linuxbsd_headers/wayland/wayland-cursor.h" --soname libwayland-cursor.so.0 --init-name wayland_cursor --output-header platform/linuxbsd/wayland/dynwrappers/wayland-cursor-so_wrap.h --output-implementation platform/linuxbsd/wayland/dynwrappers/wayland-cursor-so_wrap.c
|
||||
//
|
||||
#include <stdint.h>
|
||||
|
||||
#define wl_cursor_theme_load wl_cursor_theme_load_dylibloader_orig_wayland_cursor
|
||||
#define wl_cursor_theme_destroy wl_cursor_theme_destroy_dylibloader_orig_wayland_cursor
|
||||
#define wl_cursor_theme_get_cursor wl_cursor_theme_get_cursor_dylibloader_orig_wayland_cursor
|
||||
#define wl_cursor_image_get_buffer wl_cursor_image_get_buffer_dylibloader_orig_wayland_cursor
|
||||
#define wl_cursor_frame wl_cursor_frame_dylibloader_orig_wayland_cursor
|
||||
#define wl_cursor_frame_and_duration wl_cursor_frame_and_duration_dylibloader_orig_wayland_cursor
|
||||
#include "./thirdparty/linuxbsd_headers/wayland/wayland-cursor.h"
|
||||
#undef wl_cursor_theme_load
|
||||
#undef wl_cursor_theme_destroy
|
||||
#undef wl_cursor_theme_get_cursor
|
||||
#undef wl_cursor_image_get_buffer
|
||||
#undef wl_cursor_frame
|
||||
#undef wl_cursor_frame_and_duration
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#define wl_cursor_theme_load wl_cursor_theme_load_dylibloader_wrapper_wayland_cursor
|
||||
#define wl_cursor_theme_destroy wl_cursor_theme_destroy_dylibloader_wrapper_wayland_cursor
|
||||
#define wl_cursor_theme_get_cursor wl_cursor_theme_get_cursor_dylibloader_wrapper_wayland_cursor
|
||||
#define wl_cursor_image_get_buffer wl_cursor_image_get_buffer_dylibloader_wrapper_wayland_cursor
|
||||
#define wl_cursor_frame wl_cursor_frame_dylibloader_wrapper_wayland_cursor
|
||||
#define wl_cursor_frame_and_duration wl_cursor_frame_and_duration_dylibloader_wrapper_wayland_cursor
|
||||
extern struct wl_cursor_theme* (*wl_cursor_theme_load_dylibloader_wrapper_wayland_cursor)(const char*, int,struct wl_shm*);
|
||||
extern void (*wl_cursor_theme_destroy_dylibloader_wrapper_wayland_cursor)(struct wl_cursor_theme*);
|
||||
extern struct wl_cursor* (*wl_cursor_theme_get_cursor_dylibloader_wrapper_wayland_cursor)(struct wl_cursor_theme*,const char*);
|
||||
extern struct wl_buffer* (*wl_cursor_image_get_buffer_dylibloader_wrapper_wayland_cursor)(struct wl_cursor_image*);
|
||||
extern int (*wl_cursor_frame_dylibloader_wrapper_wayland_cursor)(struct wl_cursor*, uint32_t);
|
||||
extern int (*wl_cursor_frame_and_duration_dylibloader_wrapper_wayland_cursor)(struct wl_cursor*, uint32_t, uint32_t*);
|
||||
int initialize_wayland_cursor(int verbose);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
@@ -0,0 +1,67 @@
|
||||
// This file is generated. Do not edit!
|
||||
// see https://github.com/hpvb/dynload-wrapper for details
|
||||
// generated by ../dynload-wrapper/generate-wrapper.py 0.3 on 2023-01-25 17:49:37
|
||||
// flags: ../dynload-wrapper/generate-wrapper.py --include ./thirdparty/linuxbsd_headers/wayland/wayland-egl-core.h --sys-include "./thirdparty/linuxbsd_headers/wayland/wayland-egl-core.h" --soname libwayland-egl.so.1 --init-name wayland_egl --output-header platform/linuxbsd/wayland/dynwrappers/wayland-egl-core-so_wrap.h --output-implementation platform/linuxbsd/wayland/dynwrappers/wayland-egl-core-so_wrap.c
|
||||
//
|
||||
#include <stdint.h>
|
||||
|
||||
#define wl_egl_window_create wl_egl_window_create_dylibloader_orig_wayland_egl
|
||||
#define wl_egl_window_destroy wl_egl_window_destroy_dylibloader_orig_wayland_egl
|
||||
#define wl_egl_window_resize wl_egl_window_resize_dylibloader_orig_wayland_egl
|
||||
#define wl_egl_window_get_attached_size wl_egl_window_get_attached_size_dylibloader_orig_wayland_egl
|
||||
#include "./thirdparty/linuxbsd_headers/wayland/wayland-egl-core.h"
|
||||
#undef wl_egl_window_create
|
||||
#undef wl_egl_window_destroy
|
||||
#undef wl_egl_window_resize
|
||||
#undef wl_egl_window_get_attached_size
|
||||
#include <dlfcn.h>
|
||||
#include <stdio.h>
|
||||
struct wl_egl_window* (*wl_egl_window_create_dylibloader_wrapper_wayland_egl)(struct wl_surface*, int, int);
|
||||
void (*wl_egl_window_destroy_dylibloader_wrapper_wayland_egl)(struct wl_egl_window*);
|
||||
void (*wl_egl_window_resize_dylibloader_wrapper_wayland_egl)(struct wl_egl_window*, int, int, int, int);
|
||||
void (*wl_egl_window_get_attached_size_dylibloader_wrapper_wayland_egl)(struct wl_egl_window*, int*, int*);
|
||||
int initialize_wayland_egl(int verbose) {
|
||||
void *handle;
|
||||
char *error;
|
||||
handle = dlopen("libwayland-egl.so.1", RTLD_LAZY);
|
||||
if (!handle) {
|
||||
if (verbose) {
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
dlerror();
|
||||
// wl_egl_window_create
|
||||
*(void **) (&wl_egl_window_create_dylibloader_wrapper_wayland_egl) = dlsym(handle, "wl_egl_window_create");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_egl_window_destroy
|
||||
*(void **) (&wl_egl_window_destroy_dylibloader_wrapper_wayland_egl) = dlsym(handle, "wl_egl_window_destroy");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_egl_window_resize
|
||||
*(void **) (&wl_egl_window_resize_dylibloader_wrapper_wayland_egl) = dlsym(handle, "wl_egl_window_resize");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
// wl_egl_window_get_attached_size
|
||||
*(void **) (&wl_egl_window_get_attached_size_dylibloader_wrapper_wayland_egl) = dlsym(handle, "wl_egl_window_get_attached_size");
|
||||
if (verbose) {
|
||||
error = dlerror();
|
||||
if (error != NULL) {
|
||||
fprintf(stderr, "%s\n", error);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
@@ -0,0 +1,34 @@
|
||||
#ifndef DYLIBLOAD_WRAPPER_WAYLAND_EGL
|
||||
#define DYLIBLOAD_WRAPPER_WAYLAND_EGL
|
||||
// This file is generated. Do not edit!
|
||||
// see https://github.com/hpvb/dynload-wrapper for details
|
||||
// generated by ../dynload-wrapper/generate-wrapper.py 0.3 on 2023-01-25 17:49:37
|
||||
// flags: ../dynload-wrapper/generate-wrapper.py --include ./thirdparty/linuxbsd_headers/wayland/wayland-egl-core.h --sys-include "./thirdparty/linuxbsd_headers/wayland/wayland-egl-core.h" --soname libwayland-egl.so.1 --init-name wayland_egl --output-header platform/linuxbsd/wayland/dynwrappers/wayland-egl-core-so_wrap.h --output-implementation platform/linuxbsd/wayland/dynwrappers/wayland-egl-core-so_wrap.c
|
||||
//
|
||||
#include <stdint.h>
|
||||
|
||||
#define wl_egl_window_create wl_egl_window_create_dylibloader_orig_wayland_egl
|
||||
#define wl_egl_window_destroy wl_egl_window_destroy_dylibloader_orig_wayland_egl
|
||||
#define wl_egl_window_resize wl_egl_window_resize_dylibloader_orig_wayland_egl
|
||||
#define wl_egl_window_get_attached_size wl_egl_window_get_attached_size_dylibloader_orig_wayland_egl
|
||||
#include "./thirdparty/linuxbsd_headers/wayland/wayland-egl-core.h"
|
||||
#undef wl_egl_window_create
|
||||
#undef wl_egl_window_destroy
|
||||
#undef wl_egl_window_resize
|
||||
#undef wl_egl_window_get_attached_size
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#define wl_egl_window_create wl_egl_window_create_dylibloader_wrapper_wayland_egl
|
||||
#define wl_egl_window_destroy wl_egl_window_destroy_dylibloader_wrapper_wayland_egl
|
||||
#define wl_egl_window_resize wl_egl_window_resize_dylibloader_wrapper_wayland_egl
|
||||
#define wl_egl_window_get_attached_size wl_egl_window_get_attached_size_dylibloader_wrapper_wayland_egl
|
||||
extern struct wl_egl_window* (*wl_egl_window_create_dylibloader_wrapper_wayland_egl)(struct wl_surface*, int, int);
|
||||
extern void (*wl_egl_window_destroy_dylibloader_wrapper_wayland_egl)(struct wl_egl_window*);
|
||||
extern void (*wl_egl_window_resize_dylibloader_wrapper_wayland_egl)(struct wl_egl_window*, int, int, int, int);
|
||||
extern void (*wl_egl_window_get_attached_size_dylibloader_wrapper_wayland_egl)(struct wl_egl_window*, int*, int*);
|
||||
int initialize_wayland_egl(int verbose);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
66
platform/linuxbsd/wayland/egl_manager_wayland.cpp
Normal file
66
platform/linuxbsd/wayland/egl_manager_wayland.cpp
Normal file
@@ -0,0 +1,66 @@
|
||||
/**************************************************************************/
|
||||
/* egl_manager_wayland.cpp */
|
||||
/**************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* https://godotengine.org */
|
||||
/**************************************************************************/
|
||||
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
|
||||
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
|
||||
/* */
|
||||
/* Permission is hereby granted, free of charge, to any person obtaining */
|
||||
/* a copy of this software and associated documentation files (the */
|
||||
/* "Software"), to deal in the Software without restriction, including */
|
||||
/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
||||
/* permit persons to whom the Software is furnished to do so, subject to */
|
||||
/* the following conditions: */
|
||||
/* */
|
||||
/* The above copyright notice and this permission notice shall be */
|
||||
/* included in all copies or substantial portions of the Software. */
|
||||
/* */
|
||||
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
||||
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
||||
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
|
||||
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
||||
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
||||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#include "egl_manager_wayland.h"
|
||||
|
||||
#ifdef WAYLAND_ENABLED
|
||||
#ifdef EGL_ENABLED
|
||||
#ifdef GLES3_ENABLED
|
||||
|
||||
const char *EGLManagerWayland::_get_platform_extension_name() const {
|
||||
return "EGL_KHR_platform_wayland";
|
||||
}
|
||||
|
||||
EGLenum EGLManagerWayland::_get_platform_extension_enum() const {
|
||||
return EGL_PLATFORM_WAYLAND_KHR;
|
||||
}
|
||||
|
||||
EGLenum EGLManagerWayland::_get_platform_api_enum() const {
|
||||
return EGL_OPENGL_API;
|
||||
}
|
||||
|
||||
Vector<EGLAttrib> EGLManagerWayland::_get_platform_display_attributes() const {
|
||||
return Vector<EGLAttrib>();
|
||||
}
|
||||
|
||||
Vector<EGLint> EGLManagerWayland::_get_platform_context_attribs() const {
|
||||
Vector<EGLint> ret;
|
||||
ret.push_back(EGL_CONTEXT_MAJOR_VERSION);
|
||||
ret.push_back(3);
|
||||
ret.push_back(EGL_CONTEXT_MINOR_VERSION);
|
||||
ret.push_back(3);
|
||||
ret.push_back(EGL_NONE);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif // GLES3_ENABLED
|
||||
#endif // EGL_ENABLED
|
||||
#endif // WAYLAND_ENABLED
|
50
platform/linuxbsd/wayland/egl_manager_wayland.h
Normal file
50
platform/linuxbsd/wayland/egl_manager_wayland.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/**************************************************************************/
|
||||
/* egl_manager_wayland.h */
|
||||
/**************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* https://godotengine.org */
|
||||
/**************************************************************************/
|
||||
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
|
||||
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
|
||||
/* */
|
||||
/* Permission is hereby granted, free of charge, to any person obtaining */
|
||||
/* a copy of this software and associated documentation files (the */
|
||||
/* "Software"), to deal in the Software without restriction, including */
|
||||
/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
||||
/* permit persons to whom the Software is furnished to do so, subject to */
|
||||
/* the following conditions: */
|
||||
/* */
|
||||
/* The above copyright notice and this permission notice shall be */
|
||||
/* included in all copies or substantial portions of the Software. */
|
||||
/* */
|
||||
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
||||
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
||||
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
|
||||
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
||||
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
||||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef WAYLAND_ENABLED
|
||||
#ifdef EGL_ENABLED
|
||||
#ifdef GLES3_ENABLED
|
||||
|
||||
#include "drivers/egl/egl_manager.h"
|
||||
|
||||
class EGLManagerWayland : public EGLManager {
|
||||
public:
|
||||
virtual const char *_get_platform_extension_name() const override;
|
||||
virtual EGLenum _get_platform_extension_enum() const override;
|
||||
virtual EGLenum _get_platform_api_enum() const override;
|
||||
virtual Vector<EGLAttrib> _get_platform_display_attributes() const override;
|
||||
virtual Vector<EGLint> _get_platform_context_attribs() const override;
|
||||
};
|
||||
|
||||
#endif // GLES3_ENABLED
|
||||
#endif // EGL_ENABLED
|
||||
#endif // WAYLAND_ENABLED
|
64
platform/linuxbsd/wayland/egl_manager_wayland_gles.cpp
Normal file
64
platform/linuxbsd/wayland/egl_manager_wayland_gles.cpp
Normal file
@@ -0,0 +1,64 @@
|
||||
/**************************************************************************/
|
||||
/* egl_manager_wayland_gles.cpp */
|
||||
/**************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* https://godotengine.org */
|
||||
/**************************************************************************/
|
||||
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
|
||||
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
|
||||
/* */
|
||||
/* Permission is hereby granted, free of charge, to any person obtaining */
|
||||
/* a copy of this software and associated documentation files (the */
|
||||
/* "Software"), to deal in the Software without restriction, including */
|
||||
/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
||||
/* permit persons to whom the Software is furnished to do so, subject to */
|
||||
/* the following conditions: */
|
||||
/* */
|
||||
/* The above copyright notice and this permission notice shall be */
|
||||
/* included in all copies or substantial portions of the Software. */
|
||||
/* */
|
||||
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
||||
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
||||
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
|
||||
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
||||
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
||||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#include "egl_manager_wayland_gles.h"
|
||||
|
||||
#ifdef WAYLAND_ENABLED
|
||||
#ifdef EGL_ENABLED
|
||||
#ifdef GLES3_ENABLED
|
||||
|
||||
const char *EGLManagerWaylandGLES::_get_platform_extension_name() const {
|
||||
return "EGL_KHR_platform_wayland";
|
||||
}
|
||||
|
||||
EGLenum EGLManagerWaylandGLES::_get_platform_extension_enum() const {
|
||||
return EGL_PLATFORM_WAYLAND_KHR;
|
||||
}
|
||||
|
||||
EGLenum EGLManagerWaylandGLES::_get_platform_api_enum() const {
|
||||
return EGL_OPENGL_ES_API;
|
||||
}
|
||||
|
||||
Vector<EGLAttrib> EGLManagerWaylandGLES::_get_platform_display_attributes() const {
|
||||
return Vector<EGLAttrib>();
|
||||
}
|
||||
|
||||
Vector<EGLint> EGLManagerWaylandGLES::_get_platform_context_attribs() const {
|
||||
Vector<EGLint> ret;
|
||||
ret.push_back(EGL_CONTEXT_MAJOR_VERSION);
|
||||
ret.push_back(3);
|
||||
ret.push_back(EGL_NONE);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif // GLES3_ENABLED
|
||||
#endif // EGL_ENABLED
|
||||
#endif // WAYLAND_ENABLED
|
50
platform/linuxbsd/wayland/egl_manager_wayland_gles.h
Normal file
50
platform/linuxbsd/wayland/egl_manager_wayland_gles.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/**************************************************************************/
|
||||
/* egl_manager_wayland_gles.h */
|
||||
/**************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* https://godotengine.org */
|
||||
/**************************************************************************/
|
||||
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
|
||||
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
|
||||
/* */
|
||||
/* Permission is hereby granted, free of charge, to any person obtaining */
|
||||
/* a copy of this software and associated documentation files (the */
|
||||
/* "Software"), to deal in the Software without restriction, including */
|
||||
/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
||||
/* permit persons to whom the Software is furnished to do so, subject to */
|
||||
/* the following conditions: */
|
||||
/* */
|
||||
/* The above copyright notice and this permission notice shall be */
|
||||
/* included in all copies or substantial portions of the Software. */
|
||||
/* */
|
||||
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
||||
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
||||
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
|
||||
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
||||
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
||||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef WAYLAND_ENABLED
|
||||
#ifdef EGL_ENABLED
|
||||
#ifdef GLES3_ENABLED
|
||||
|
||||
#include "drivers/egl/egl_manager.h"
|
||||
|
||||
class EGLManagerWaylandGLES : public EGLManager {
|
||||
public:
|
||||
virtual const char *_get_platform_extension_name() const override;
|
||||
virtual EGLenum _get_platform_extension_enum() const override;
|
||||
virtual EGLenum _get_platform_api_enum() const override;
|
||||
virtual Vector<EGLAttrib> _get_platform_display_attributes() const override;
|
||||
virtual Vector<EGLint> _get_platform_context_attribs() const override;
|
||||
};
|
||||
|
||||
#endif // GLES3_ENABLED
|
||||
#endif // EGL_ENABLED
|
||||
#endif // WAYLAND_ENABLED
|
411
platform/linuxbsd/wayland/key_mapping_xkb.cpp
Normal file
411
platform/linuxbsd/wayland/key_mapping_xkb.cpp
Normal file
@@ -0,0 +1,411 @@
|
||||
/**************************************************************************/
|
||||
/* key_mapping_xkb.cpp */
|
||||
/**************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* https://godotengine.org */
|
||||
/**************************************************************************/
|
||||
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
|
||||
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
|
||||
/* */
|
||||
/* Permission is hereby granted, free of charge, to any person obtaining */
|
||||
/* a copy of this software and associated documentation files (the */
|
||||
/* "Software"), to deal in the Software without restriction, including */
|
||||
/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
||||
/* permit persons to whom the Software is furnished to do so, subject to */
|
||||
/* the following conditions: */
|
||||
/* */
|
||||
/* The above copyright notice and this permission notice shall be */
|
||||
/* included in all copies or substantial portions of the Software. */
|
||||
/* */
|
||||
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
||||
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
||||
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
|
||||
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
||||
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
||||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#include "key_mapping_xkb.h"
|
||||
|
||||
void KeyMappingXKB::initialize() {
|
||||
// XKB keycode to Godot Key map.
|
||||
|
||||
xkb_keycode_map[XKB_KEY_Escape] = Key::ESCAPE;
|
||||
xkb_keycode_map[XKB_KEY_Tab] = Key::TAB;
|
||||
xkb_keycode_map[XKB_KEY_ISO_Left_Tab] = Key::BACKTAB;
|
||||
xkb_keycode_map[XKB_KEY_BackSpace] = Key::BACKSPACE;
|
||||
xkb_keycode_map[XKB_KEY_Return] = Key::ENTER;
|
||||
xkb_keycode_map[XKB_KEY_Insert] = Key::INSERT;
|
||||
xkb_keycode_map[XKB_KEY_Delete] = Key::KEY_DELETE;
|
||||
xkb_keycode_map[XKB_KEY_Clear] = Key::KEY_DELETE;
|
||||
xkb_keycode_map[XKB_KEY_Pause] = Key::PAUSE;
|
||||
xkb_keycode_map[XKB_KEY_Print] = Key::PRINT;
|
||||
xkb_keycode_map[XKB_KEY_Home] = Key::HOME;
|
||||
xkb_keycode_map[XKB_KEY_End] = Key::END;
|
||||
xkb_keycode_map[XKB_KEY_Left] = Key::LEFT;
|
||||
xkb_keycode_map[XKB_KEY_Up] = Key::UP;
|
||||
xkb_keycode_map[XKB_KEY_Right] = Key::RIGHT;
|
||||
xkb_keycode_map[XKB_KEY_Down] = Key::DOWN;
|
||||
xkb_keycode_map[XKB_KEY_Prior] = Key::PAGEUP;
|
||||
xkb_keycode_map[XKB_KEY_Next] = Key::PAGEDOWN;
|
||||
xkb_keycode_map[XKB_KEY_Shift_L] = Key::SHIFT;
|
||||
xkb_keycode_map[XKB_KEY_Shift_R] = Key::SHIFT;
|
||||
xkb_keycode_map[XKB_KEY_Shift_Lock] = Key::SHIFT;
|
||||
xkb_keycode_map[XKB_KEY_Control_L] = Key::CTRL;
|
||||
xkb_keycode_map[XKB_KEY_Control_R] = Key::CTRL;
|
||||
xkb_keycode_map[XKB_KEY_Meta_L] = Key::META;
|
||||
xkb_keycode_map[XKB_KEY_Meta_R] = Key::META;
|
||||
xkb_keycode_map[XKB_KEY_Alt_L] = Key::ALT;
|
||||
xkb_keycode_map[XKB_KEY_Alt_R] = Key::ALT;
|
||||
xkb_keycode_map[XKB_KEY_Caps_Lock] = Key::CAPSLOCK;
|
||||
xkb_keycode_map[XKB_KEY_Num_Lock] = Key::NUMLOCK;
|
||||
xkb_keycode_map[XKB_KEY_Scroll_Lock] = Key::SCROLLLOCK;
|
||||
xkb_keycode_map[XKB_KEY_less] = Key::QUOTELEFT;
|
||||
xkb_keycode_map[XKB_KEY_grave] = Key::SECTION;
|
||||
xkb_keycode_map[XKB_KEY_Super_L] = Key::META;
|
||||
xkb_keycode_map[XKB_KEY_Super_R] = Key::META;
|
||||
xkb_keycode_map[XKB_KEY_Menu] = Key::MENU;
|
||||
xkb_keycode_map[XKB_KEY_Hyper_L] = Key::HYPER;
|
||||
xkb_keycode_map[XKB_KEY_Hyper_R] = Key::HYPER;
|
||||
xkb_keycode_map[XKB_KEY_Help] = Key::HELP;
|
||||
xkb_keycode_map[XKB_KEY_KP_Space] = Key::SPACE;
|
||||
xkb_keycode_map[XKB_KEY_KP_Tab] = Key::TAB;
|
||||
xkb_keycode_map[XKB_KEY_KP_Enter] = Key::KP_ENTER;
|
||||
xkb_keycode_map[XKB_KEY_Home] = Key::HOME;
|
||||
xkb_keycode_map[XKB_KEY_Left] = Key::LEFT;
|
||||
xkb_keycode_map[XKB_KEY_Up] = Key::UP;
|
||||
xkb_keycode_map[XKB_KEY_Right] = Key::RIGHT;
|
||||
xkb_keycode_map[XKB_KEY_Down] = Key::DOWN;
|
||||
xkb_keycode_map[XKB_KEY_Prior] = Key::PAGEUP;
|
||||
xkb_keycode_map[XKB_KEY_Next] = Key::PAGEDOWN;
|
||||
xkb_keycode_map[XKB_KEY_End] = Key::END;
|
||||
xkb_keycode_map[XKB_KEY_Begin] = Key::CLEAR;
|
||||
xkb_keycode_map[XKB_KEY_Insert] = Key::INSERT;
|
||||
xkb_keycode_map[XKB_KEY_Delete] = Key::KEY_DELETE;
|
||||
xkb_keycode_map[XKB_KEY_KP_Equal] = Key::EQUAL;
|
||||
xkb_keycode_map[XKB_KEY_KP_Separator] = Key::COMMA;
|
||||
xkb_keycode_map[XKB_KEY_KP_Decimal] = Key::KP_PERIOD;
|
||||
xkb_keycode_map[XKB_KEY_KP_Multiply] = Key::KP_MULTIPLY;
|
||||
xkb_keycode_map[XKB_KEY_KP_Divide] = Key::KP_DIVIDE;
|
||||
xkb_keycode_map[XKB_KEY_KP_Subtract] = Key::KP_SUBTRACT;
|
||||
xkb_keycode_map[XKB_KEY_KP_Add] = Key::KP_ADD;
|
||||
xkb_keycode_map[XKB_KEY_KP_0] = Key::KP_0;
|
||||
xkb_keycode_map[XKB_KEY_KP_1] = Key::KP_1;
|
||||
xkb_keycode_map[XKB_KEY_KP_2] = Key::KP_2;
|
||||
xkb_keycode_map[XKB_KEY_KP_3] = Key::KP_3;
|
||||
xkb_keycode_map[XKB_KEY_KP_4] = Key::KP_4;
|
||||
xkb_keycode_map[XKB_KEY_KP_5] = Key::KP_5;
|
||||
xkb_keycode_map[XKB_KEY_KP_6] = Key::KP_6;
|
||||
xkb_keycode_map[XKB_KEY_KP_7] = Key::KP_7;
|
||||
xkb_keycode_map[XKB_KEY_KP_8] = Key::KP_8;
|
||||
xkb_keycode_map[XKB_KEY_KP_9] = Key::KP_9;
|
||||
// Same keys but with numlock off.
|
||||
xkb_keycode_map[XKB_KEY_KP_Insert] = Key::INSERT;
|
||||
xkb_keycode_map[XKB_KEY_KP_Delete] = Key::KEY_DELETE;
|
||||
xkb_keycode_map[XKB_KEY_KP_End] = Key::END;
|
||||
xkb_keycode_map[XKB_KEY_KP_Down] = Key::DOWN;
|
||||
xkb_keycode_map[XKB_KEY_KP_Page_Down] = Key::PAGEDOWN;
|
||||
xkb_keycode_map[XKB_KEY_KP_Left] = Key::LEFT;
|
||||
// X11 documents this (numpad 5) as "begin of line" but no toolkit seems to interpret it this way.
|
||||
// On Windows this is emitting Key::Clear so for consistency it will be mapped to Key::Clear
|
||||
xkb_keycode_map[XKB_KEY_KP_Begin] = Key::CLEAR;
|
||||
xkb_keycode_map[XKB_KEY_KP_Right] = Key::RIGHT;
|
||||
xkb_keycode_map[XKB_KEY_KP_Home] = Key::HOME;
|
||||
xkb_keycode_map[XKB_KEY_KP_Up] = Key::UP;
|
||||
xkb_keycode_map[XKB_KEY_KP_Page_Up] = Key::PAGEUP;
|
||||
xkb_keycode_map[XKB_KEY_F1] = Key::F1;
|
||||
xkb_keycode_map[XKB_KEY_F2] = Key::F2;
|
||||
xkb_keycode_map[XKB_KEY_F3] = Key::F3;
|
||||
xkb_keycode_map[XKB_KEY_F4] = Key::F4;
|
||||
xkb_keycode_map[XKB_KEY_F5] = Key::F5;
|
||||
xkb_keycode_map[XKB_KEY_F6] = Key::F6;
|
||||
xkb_keycode_map[XKB_KEY_F7] = Key::F7;
|
||||
xkb_keycode_map[XKB_KEY_F8] = Key::F8;
|
||||
xkb_keycode_map[XKB_KEY_F9] = Key::F9;
|
||||
xkb_keycode_map[XKB_KEY_F10] = Key::F10;
|
||||
xkb_keycode_map[XKB_KEY_F11] = Key::F11;
|
||||
xkb_keycode_map[XKB_KEY_F12] = Key::F12;
|
||||
xkb_keycode_map[XKB_KEY_F13] = Key::F13;
|
||||
xkb_keycode_map[XKB_KEY_F14] = Key::F14;
|
||||
xkb_keycode_map[XKB_KEY_F15] = Key::F15;
|
||||
xkb_keycode_map[XKB_KEY_F16] = Key::F16;
|
||||
xkb_keycode_map[XKB_KEY_F17] = Key::F17;
|
||||
xkb_keycode_map[XKB_KEY_F18] = Key::F18;
|
||||
xkb_keycode_map[XKB_KEY_F19] = Key::F19;
|
||||
xkb_keycode_map[XKB_KEY_F20] = Key::F20;
|
||||
xkb_keycode_map[XKB_KEY_F21] = Key::F21;
|
||||
xkb_keycode_map[XKB_KEY_F22] = Key::F22;
|
||||
xkb_keycode_map[XKB_KEY_F23] = Key::F23;
|
||||
xkb_keycode_map[XKB_KEY_F24] = Key::F24;
|
||||
xkb_keycode_map[XKB_KEY_F25] = Key::F25;
|
||||
xkb_keycode_map[XKB_KEY_F26] = Key::F26;
|
||||
xkb_keycode_map[XKB_KEY_F27] = Key::F27;
|
||||
xkb_keycode_map[XKB_KEY_F28] = Key::F28;
|
||||
xkb_keycode_map[XKB_KEY_F29] = Key::F29;
|
||||
xkb_keycode_map[XKB_KEY_F30] = Key::F30;
|
||||
xkb_keycode_map[XKB_KEY_F31] = Key::F31;
|
||||
xkb_keycode_map[XKB_KEY_F32] = Key::F32;
|
||||
xkb_keycode_map[XKB_KEY_F33] = Key::F33;
|
||||
xkb_keycode_map[XKB_KEY_F34] = Key::F34;
|
||||
xkb_keycode_map[XKB_KEY_F35] = Key::F35;
|
||||
xkb_keycode_map[XKB_KEY_yen] = Key::YEN;
|
||||
xkb_keycode_map[XKB_KEY_section] = Key::SECTION;
|
||||
// Media keys.
|
||||
xkb_keycode_map[XKB_KEY_XF86Back] = Key::BACK;
|
||||
xkb_keycode_map[XKB_KEY_XF86Forward] = Key::FORWARD;
|
||||
xkb_keycode_map[XKB_KEY_XF86Stop] = Key::STOP;
|
||||
xkb_keycode_map[XKB_KEY_XF86Refresh] = Key::REFRESH;
|
||||
xkb_keycode_map[XKB_KEY_XF86Favorites] = Key::FAVORITES;
|
||||
xkb_keycode_map[XKB_KEY_XF86OpenURL] = Key::OPENURL;
|
||||
xkb_keycode_map[XKB_KEY_XF86HomePage] = Key::HOMEPAGE;
|
||||
xkb_keycode_map[XKB_KEY_XF86Search] = Key::SEARCH;
|
||||
xkb_keycode_map[XKB_KEY_XF86AudioLowerVolume] = Key::VOLUMEDOWN;
|
||||
xkb_keycode_map[XKB_KEY_XF86AudioMute] = Key::VOLUMEMUTE;
|
||||
xkb_keycode_map[XKB_KEY_XF86AudioRaiseVolume] = Key::VOLUMEUP;
|
||||
xkb_keycode_map[XKB_KEY_XF86AudioPlay] = Key::MEDIAPLAY;
|
||||
xkb_keycode_map[XKB_KEY_XF86AudioStop] = Key::MEDIASTOP;
|
||||
xkb_keycode_map[XKB_KEY_XF86AudioPrev] = Key::MEDIAPREVIOUS;
|
||||
xkb_keycode_map[XKB_KEY_XF86AudioNext] = Key::MEDIANEXT;
|
||||
xkb_keycode_map[XKB_KEY_XF86AudioRecord] = Key::MEDIARECORD;
|
||||
xkb_keycode_map[XKB_KEY_XF86Standby] = Key::STANDBY;
|
||||
// Launch keys.
|
||||
xkb_keycode_map[XKB_KEY_XF86Mail] = Key::LAUNCHMAIL;
|
||||
xkb_keycode_map[XKB_KEY_XF86AudioMedia] = Key::LAUNCHMEDIA;
|
||||
xkb_keycode_map[XKB_KEY_XF86MyComputer] = Key::LAUNCH0;
|
||||
xkb_keycode_map[XKB_KEY_XF86Calculator] = Key::LAUNCH1;
|
||||
xkb_keycode_map[XKB_KEY_XF86Launch0] = Key::LAUNCH2;
|
||||
xkb_keycode_map[XKB_KEY_XF86Launch1] = Key::LAUNCH3;
|
||||
xkb_keycode_map[XKB_KEY_XF86Launch2] = Key::LAUNCH4;
|
||||
xkb_keycode_map[XKB_KEY_XF86Launch3] = Key::LAUNCH5;
|
||||
xkb_keycode_map[XKB_KEY_XF86Launch4] = Key::LAUNCH6;
|
||||
xkb_keycode_map[XKB_KEY_XF86Launch5] = Key::LAUNCH7;
|
||||
xkb_keycode_map[XKB_KEY_XF86Launch6] = Key::LAUNCH8;
|
||||
xkb_keycode_map[XKB_KEY_XF86Launch7] = Key::LAUNCH9;
|
||||
xkb_keycode_map[XKB_KEY_XF86Launch8] = Key::LAUNCHA;
|
||||
xkb_keycode_map[XKB_KEY_XF86Launch9] = Key::LAUNCHB;
|
||||
xkb_keycode_map[XKB_KEY_XF86LaunchA] = Key::LAUNCHC;
|
||||
xkb_keycode_map[XKB_KEY_XF86LaunchB] = Key::LAUNCHD;
|
||||
xkb_keycode_map[XKB_KEY_XF86LaunchC] = Key::LAUNCHE;
|
||||
xkb_keycode_map[XKB_KEY_XF86LaunchD] = Key::LAUNCHF;
|
||||
|
||||
// Scancode to Godot Key map.
|
||||
scancode_map[0x09] = Key::ESCAPE;
|
||||
scancode_map[0x0A] = Key::KEY_1;
|
||||
scancode_map[0x0B] = Key::KEY_2;
|
||||
scancode_map[0x0C] = Key::KEY_3;
|
||||
scancode_map[0x0D] = Key::KEY_4;
|
||||
scancode_map[0x0E] = Key::KEY_5;
|
||||
scancode_map[0x0F] = Key::KEY_6;
|
||||
scancode_map[0x10] = Key::KEY_7;
|
||||
scancode_map[0x11] = Key::KEY_8;
|
||||
scancode_map[0x12] = Key::KEY_9;
|
||||
scancode_map[0x13] = Key::KEY_0;
|
||||
scancode_map[0x14] = Key::MINUS;
|
||||
scancode_map[0x15] = Key::EQUAL;
|
||||
scancode_map[0x16] = Key::BACKSPACE;
|
||||
scancode_map[0x17] = Key::TAB;
|
||||
scancode_map[0x18] = Key::Q;
|
||||
scancode_map[0x19] = Key::W;
|
||||
scancode_map[0x1A] = Key::E;
|
||||
scancode_map[0x1B] = Key::R;
|
||||
scancode_map[0x1C] = Key::T;
|
||||
scancode_map[0x1D] = Key::Y;
|
||||
scancode_map[0x1E] = Key::U;
|
||||
scancode_map[0x1F] = Key::I;
|
||||
scancode_map[0x20] = Key::O;
|
||||
scancode_map[0x21] = Key::P;
|
||||
scancode_map[0x22] = Key::BRACELEFT;
|
||||
scancode_map[0x23] = Key::BRACERIGHT;
|
||||
scancode_map[0x24] = Key::ENTER;
|
||||
scancode_map[0x25] = Key::CTRL; // Left
|
||||
scancode_map[0x26] = Key::A;
|
||||
scancode_map[0x27] = Key::S;
|
||||
scancode_map[0x28] = Key::D;
|
||||
scancode_map[0x29] = Key::F;
|
||||
scancode_map[0x2A] = Key::G;
|
||||
scancode_map[0x2B] = Key::H;
|
||||
scancode_map[0x2C] = Key::J;
|
||||
scancode_map[0x2D] = Key::K;
|
||||
scancode_map[0x2E] = Key::L;
|
||||
scancode_map[0x2F] = Key::SEMICOLON;
|
||||
scancode_map[0x30] = Key::APOSTROPHE;
|
||||
scancode_map[0x31] = Key::SECTION;
|
||||
scancode_map[0x32] = Key::SHIFT; // Left
|
||||
scancode_map[0x33] = Key::BACKSLASH;
|
||||
scancode_map[0x34] = Key::Z;
|
||||
scancode_map[0x35] = Key::X;
|
||||
scancode_map[0x36] = Key::C;
|
||||
scancode_map[0x37] = Key::V;
|
||||
scancode_map[0x38] = Key::B;
|
||||
scancode_map[0x39] = Key::N;
|
||||
scancode_map[0x3A] = Key::M;
|
||||
scancode_map[0x3B] = Key::COMMA;
|
||||
scancode_map[0x3C] = Key::PERIOD;
|
||||
scancode_map[0x3D] = Key::SLASH;
|
||||
scancode_map[0x3E] = Key::SHIFT; // Right
|
||||
scancode_map[0x3F] = Key::KP_MULTIPLY;
|
||||
scancode_map[0x40] = Key::ALT; // Left
|
||||
scancode_map[0x41] = Key::SPACE;
|
||||
scancode_map[0x42] = Key::CAPSLOCK;
|
||||
scancode_map[0x43] = Key::F1;
|
||||
scancode_map[0x44] = Key::F2;
|
||||
scancode_map[0x45] = Key::F3;
|
||||
scancode_map[0x46] = Key::F4;
|
||||
scancode_map[0x47] = Key::F5;
|
||||
scancode_map[0x48] = Key::F6;
|
||||
scancode_map[0x49] = Key::F7;
|
||||
scancode_map[0x4A] = Key::F8;
|
||||
scancode_map[0x4B] = Key::F9;
|
||||
scancode_map[0x4C] = Key::F10;
|
||||
scancode_map[0x4D] = Key::NUMLOCK;
|
||||
scancode_map[0x4E] = Key::SCROLLLOCK;
|
||||
scancode_map[0x4F] = Key::KP_7;
|
||||
scancode_map[0x50] = Key::KP_8;
|
||||
scancode_map[0x51] = Key::KP_9;
|
||||
scancode_map[0x52] = Key::KP_SUBTRACT;
|
||||
scancode_map[0x53] = Key::KP_4;
|
||||
scancode_map[0x54] = Key::KP_5;
|
||||
scancode_map[0x55] = Key::KP_6;
|
||||
scancode_map[0x56] = Key::KP_ADD;
|
||||
scancode_map[0x57] = Key::KP_1;
|
||||
scancode_map[0x58] = Key::KP_2;
|
||||
scancode_map[0x59] = Key::KP_3;
|
||||
scancode_map[0x5A] = Key::KP_0;
|
||||
scancode_map[0x5B] = Key::KP_PERIOD;
|
||||
//scancode_map[0x5C]
|
||||
//scancode_map[0x5D] // Zenkaku Hankaku
|
||||
scancode_map[0x5E] = Key::QUOTELEFT;
|
||||
scancode_map[0x5F] = Key::F11;
|
||||
scancode_map[0x60] = Key::F12;
|
||||
//scancode_map[0x61] // Romaji
|
||||
//scancode_map[0x62] // Katakana
|
||||
//scancode_map[0x63] // Hiragana
|
||||
//scancode_map[0x64] // Henkan
|
||||
//scancode_map[0x65] // Hiragana Katakana
|
||||
//scancode_map[0x66] // Muhenkan
|
||||
scancode_map[0x67] = Key::COMMA; // KP_Separator
|
||||
scancode_map[0x68] = Key::KP_ENTER;
|
||||
scancode_map[0x69] = Key::CTRL; // Right
|
||||
scancode_map[0x6A] = Key::KP_DIVIDE;
|
||||
scancode_map[0x6B] = Key::PRINT;
|
||||
scancode_map[0x6C] = Key::ALT; // Right
|
||||
scancode_map[0x6D] = Key::ENTER;
|
||||
scancode_map[0x6E] = Key::HOME;
|
||||
scancode_map[0x6F] = Key::UP;
|
||||
scancode_map[0x70] = Key::PAGEUP;
|
||||
scancode_map[0x71] = Key::LEFT;
|
||||
scancode_map[0x72] = Key::RIGHT;
|
||||
scancode_map[0x73] = Key::END;
|
||||
scancode_map[0x74] = Key::DOWN;
|
||||
scancode_map[0x75] = Key::PAGEDOWN;
|
||||
scancode_map[0x76] = Key::INSERT;
|
||||
scancode_map[0x77] = Key::KEY_DELETE;
|
||||
//scancode_map[0x78] // Macro
|
||||
scancode_map[0x79] = Key::VOLUMEMUTE;
|
||||
scancode_map[0x7A] = Key::VOLUMEDOWN;
|
||||
scancode_map[0x7B] = Key::VOLUMEUP;
|
||||
//scancode_map[0x7C] // Power
|
||||
scancode_map[0x7D] = Key::EQUAL; // KP_Equal
|
||||
//scancode_map[0x7E] // KP_PlusMinus
|
||||
scancode_map[0x7F] = Key::PAUSE;
|
||||
scancode_map[0x80] = Key::LAUNCH0;
|
||||
scancode_map[0x81] = Key::COMMA; // KP_Comma
|
||||
//scancode_map[0x82] // Hangul
|
||||
//scancode_map[0x83] // Hangul_Hanja
|
||||
scancode_map[0x84] = Key::YEN;
|
||||
scancode_map[0x85] = Key::META; // Left
|
||||
scancode_map[0x86] = Key::META; // Right
|
||||
scancode_map[0x87] = Key::MENU;
|
||||
|
||||
scancode_map[0xA6] = Key::BACK; // On Chromebooks
|
||||
scancode_map[0xA7] = Key::FORWARD; // On Chromebooks
|
||||
|
||||
scancode_map[0xB5] = Key::REFRESH; // On Chromebooks
|
||||
|
||||
scancode_map[0xBF] = Key::F13;
|
||||
scancode_map[0xC0] = Key::F14;
|
||||
scancode_map[0xC1] = Key::F15;
|
||||
scancode_map[0xC2] = Key::F16;
|
||||
scancode_map[0xC3] = Key::F17;
|
||||
scancode_map[0xC4] = Key::F18;
|
||||
scancode_map[0xC5] = Key::F19;
|
||||
scancode_map[0xC6] = Key::F20;
|
||||
scancode_map[0xC7] = Key::F21;
|
||||
scancode_map[0xC8] = Key::F22;
|
||||
scancode_map[0xC9] = Key::F23;
|
||||
scancode_map[0xCA] = Key::F24;
|
||||
scancode_map[0xCB] = Key::F25;
|
||||
scancode_map[0xCC] = Key::F26;
|
||||
scancode_map[0xCD] = Key::F27;
|
||||
scancode_map[0xCE] = Key::F28;
|
||||
scancode_map[0xCF] = Key::F29;
|
||||
scancode_map[0xD0] = Key::F30;
|
||||
scancode_map[0xD1] = Key::F31;
|
||||
scancode_map[0xD2] = Key::F32;
|
||||
scancode_map[0xD3] = Key::F33;
|
||||
scancode_map[0xD4] = Key::F34;
|
||||
scancode_map[0xD5] = Key::F35;
|
||||
|
||||
// Godot to scancode map.
|
||||
for (const KeyValue<unsigned int, Key> &E : scancode_map) {
|
||||
scancode_map_inv[E.value] = E.key;
|
||||
}
|
||||
|
||||
// Scancode to physical location map.
|
||||
// Ctrl.
|
||||
location_map[0x25] = KeyLocation::LEFT;
|
||||
location_map[0x69] = KeyLocation::RIGHT;
|
||||
// Shift.
|
||||
location_map[0x32] = KeyLocation::LEFT;
|
||||
location_map[0x3E] = KeyLocation::RIGHT;
|
||||
// Alt.
|
||||
location_map[0x40] = KeyLocation::LEFT;
|
||||
location_map[0x6C] = KeyLocation::RIGHT;
|
||||
// Meta.
|
||||
location_map[0x85] = KeyLocation::LEFT;
|
||||
location_map[0x86] = KeyLocation::RIGHT;
|
||||
}
|
||||
|
||||
Key KeyMappingXKB::get_keycode(xkb_keycode_t p_keysym) {
|
||||
if (p_keysym >= 0x20 && p_keysym < 0x7E) { // ASCII, maps 1-1
|
||||
if (p_keysym > 0x60 && p_keysym < 0x7B) { // Lowercase ASCII.
|
||||
return (Key)(p_keysym - 32);
|
||||
} else {
|
||||
return (Key)p_keysym;
|
||||
}
|
||||
}
|
||||
|
||||
const Key *key = xkb_keycode_map.getptr(p_keysym);
|
||||
if (key) {
|
||||
return *key;
|
||||
}
|
||||
return Key::NONE;
|
||||
}
|
||||
|
||||
Key KeyMappingXKB::get_scancode(unsigned int p_code) {
|
||||
const Key *key = scancode_map.getptr(p_code);
|
||||
if (key) {
|
||||
return *key;
|
||||
}
|
||||
|
||||
return Key::NONE;
|
||||
}
|
||||
|
||||
xkb_keycode_t KeyMappingXKB::get_xkb_keycode(Key p_key) {
|
||||
const unsigned int *key = scancode_map_inv.getptr(p_key);
|
||||
if (key) {
|
||||
return *key;
|
||||
}
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
KeyLocation KeyMappingXKB::get_location(unsigned int p_code) {
|
||||
const KeyLocation *location = location_map.getptr(p_code);
|
||||
if (location) {
|
||||
return *location;
|
||||
}
|
||||
return KeyLocation::UNSPECIFIED;
|
||||
}
|
62
platform/linuxbsd/wayland/key_mapping_xkb.h
Normal file
62
platform/linuxbsd/wayland/key_mapping_xkb.h
Normal file
@@ -0,0 +1,62 @@
|
||||
/**************************************************************************/
|
||||
/* key_mapping_xkb.h */
|
||||
/**************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* https://godotengine.org */
|
||||
/**************************************************************************/
|
||||
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
|
||||
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
|
||||
/* */
|
||||
/* Permission is hereby granted, free of charge, to any person obtaining */
|
||||
/* a copy of this software and associated documentation files (the */
|
||||
/* "Software"), to deal in the Software without restriction, including */
|
||||
/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
||||
/* permit persons to whom the Software is furnished to do so, subject to */
|
||||
/* the following conditions: */
|
||||
/* */
|
||||
/* The above copyright notice and this permission notice shall be */
|
||||
/* included in all copies or substantial portions of the Software. */
|
||||
/* */
|
||||
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
||||
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
||||
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
|
||||
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
||||
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
||||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "core/os/keyboard.h"
|
||||
#include "core/templates/hash_map.h"
|
||||
|
||||
#ifdef SOWRAP_ENABLED
|
||||
#include "xkbcommon-so_wrap.h"
|
||||
#else
|
||||
#include <xkbcommon/xkbcommon.h>
|
||||
#endif // SOWRAP_ENABLED
|
||||
|
||||
class KeyMappingXKB {
|
||||
struct HashMapHasherKeys {
|
||||
static _FORCE_INLINE_ uint32_t hash(Key p_key) { return hash_fmix32(static_cast<uint32_t>(p_key)); }
|
||||
static _FORCE_INLINE_ uint32_t hash(unsigned p_key) { return hash_fmix32(p_key); }
|
||||
};
|
||||
|
||||
static inline HashMap<xkb_keycode_t, Key, HashMapHasherKeys> xkb_keycode_map;
|
||||
static inline HashMap<unsigned int, Key, HashMapHasherKeys> scancode_map;
|
||||
static inline HashMap<Key, unsigned int, HashMapHasherKeys> scancode_map_inv;
|
||||
static inline HashMap<unsigned int, KeyLocation, HashMapHasherKeys> location_map;
|
||||
|
||||
KeyMappingXKB() {}
|
||||
|
||||
public:
|
||||
static void initialize();
|
||||
|
||||
static Key get_keycode(xkb_keysym_t p_keysym);
|
||||
static xkb_keycode_t get_xkb_keycode(Key p_keycode);
|
||||
static Key get_scancode(unsigned int p_code);
|
||||
static KeyLocation get_location(unsigned int p_code);
|
||||
};
|
@@ -0,0 +1,66 @@
|
||||
/**************************************************************************/
|
||||
/* rendering_context_driver_vulkan_wayland.cpp */
|
||||
/**************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* https://godotengine.org */
|
||||
/**************************************************************************/
|
||||
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
|
||||
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
|
||||
/* */
|
||||
/* Permission is hereby granted, free of charge, to any person obtaining */
|
||||
/* a copy of this software and associated documentation files (the */
|
||||
/* "Software"), to deal in the Software without restriction, including */
|
||||
/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
||||
/* permit persons to whom the Software is furnished to do so, subject to */
|
||||
/* the following conditions: */
|
||||
/* */
|
||||
/* The above copyright notice and this permission notice shall be */
|
||||
/* included in all copies or substantial portions of the Software. */
|
||||
/* */
|
||||
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
||||
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
||||
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
|
||||
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
||||
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
||||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifdef VULKAN_ENABLED
|
||||
|
||||
#include "rendering_context_driver_vulkan_wayland.h"
|
||||
|
||||
#include "drivers/vulkan/godot_vulkan.h"
|
||||
|
||||
const char *RenderingContextDriverVulkanWayland::_get_platform_surface_extension() const {
|
||||
return VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME;
|
||||
}
|
||||
|
||||
RenderingContextDriver::SurfaceID RenderingContextDriverVulkanWayland::surface_create(const void *p_platform_data) {
|
||||
const WindowPlatformData *wpd = (const WindowPlatformData *)(p_platform_data);
|
||||
|
||||
VkWaylandSurfaceCreateInfoKHR create_info = {};
|
||||
create_info.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR;
|
||||
create_info.display = wpd->display;
|
||||
create_info.surface = wpd->surface;
|
||||
|
||||
VkSurfaceKHR vk_surface = VK_NULL_HANDLE;
|
||||
VkResult err = vkCreateWaylandSurfaceKHR(instance_get(), &create_info, get_allocation_callbacks(VK_OBJECT_TYPE_SURFACE_KHR), &vk_surface);
|
||||
ERR_FAIL_COND_V(err != VK_SUCCESS, SurfaceID());
|
||||
|
||||
Surface *surface = memnew(Surface);
|
||||
surface->vk_surface = vk_surface;
|
||||
return SurfaceID(surface);
|
||||
}
|
||||
|
||||
RenderingContextDriverVulkanWayland::RenderingContextDriverVulkanWayland() {
|
||||
// Does nothing.
|
||||
}
|
||||
|
||||
RenderingContextDriverVulkanWayland::~RenderingContextDriverVulkanWayland() {
|
||||
// Does nothing.
|
||||
}
|
||||
|
||||
#endif // VULKAN_ENABLED
|
@@ -0,0 +1,54 @@
|
||||
/**************************************************************************/
|
||||
/* rendering_context_driver_vulkan_wayland.h */
|
||||
/**************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* https://godotengine.org */
|
||||
/**************************************************************************/
|
||||
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
|
||||
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
|
||||
/* */
|
||||
/* Permission is hereby granted, free of charge, to any person obtaining */
|
||||
/* a copy of this software and associated documentation files (the */
|
||||
/* "Software"), to deal in the Software without restriction, including */
|
||||
/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
||||
/* permit persons to whom the Software is furnished to do so, subject to */
|
||||
/* the following conditions: */
|
||||
/* */
|
||||
/* The above copyright notice and this permission notice shall be */
|
||||
/* included in all copies or substantial portions of the Software. */
|
||||
/* */
|
||||
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
||||
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
||||
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
|
||||
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
||||
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
||||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef VULKAN_ENABLED
|
||||
|
||||
#include "drivers/vulkan/rendering_context_driver_vulkan.h"
|
||||
|
||||
class RenderingContextDriverVulkanWayland : public RenderingContextDriverVulkan {
|
||||
private:
|
||||
virtual const char *_get_platform_surface_extension() const override final;
|
||||
|
||||
protected:
|
||||
SurfaceID surface_create(const void *p_platform_data) override final;
|
||||
|
||||
public:
|
||||
struct WindowPlatformData {
|
||||
struct wl_display *display;
|
||||
struct wl_surface *surface;
|
||||
};
|
||||
|
||||
RenderingContextDriverVulkanWayland();
|
||||
~RenderingContextDriverVulkanWayland();
|
||||
};
|
||||
|
||||
#endif // VULKAN_ENABLED
|
5060
platform/linuxbsd/wayland/wayland_thread.cpp
Normal file
5060
platform/linuxbsd/wayland/wayland_thread.cpp
Normal file
File diff suppressed because it is too large
Load Diff
1114
platform/linuxbsd/wayland/wayland_thread.h
Normal file
1114
platform/linuxbsd/wayland/wayland_thread.h
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user