158 lines
6.0 KiB
C
158 lines
6.0 KiB
C
// =====================================================================================================================
|
|
// fennec, a free and open source game engine
|
|
// Copyright © 2025 Medusa Slockbower
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
// =====================================================================================================================
|
|
|
|
#ifndef FENNEC_PLATFORM_LINUX_XKB_LIB_XKBCOMMON_H
|
|
#define FENNEC_PLATFORM_LINUX_XKB_LIB_XKBCOMMON_H
|
|
|
|
#define FENNEC_LIB(name) extern bool FENNEC_HAS_LIB_##name;
|
|
#define FENNEC_SYMBOL(ret, fn, ...) using sym_##fn = ret(*)(__VA_ARGS__); \
|
|
extern sym_##fn fn;
|
|
#define FENNEC_GLOBAL(type, name) extern type* name;
|
|
#include <fennec/platform/linux/xkb/lib/sym.h>
|
|
|
|
/*
|
|
* Copyright © 2009-2012 Daniel Stone
|
|
* Copyright © 2012 Intel Corporation
|
|
* Copyright © 2012 Ran Benita
|
|
*
|
|
* 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 (including the next
|
|
* paragraph) 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.
|
|
*
|
|
* Author: Daniel Stone <daniel@fooishbar.org>
|
|
*/
|
|
|
|
#include <fennec/platform/linux/xkb/lib/xkbcommon-names.h>
|
|
#include <fennec/platform/linux/xkb/lib/xkbcommon-keysyms.h>
|
|
|
|
#define XKB_KEYCODE_INVALID (0xffffffff)
|
|
#define XKB_LAYOUT_INVALID (0xffffffff)
|
|
#define XKB_LEVEL_INVALID (0xffffffff)
|
|
#define XKB_MOD_INVALID (0xffffffff)
|
|
#define XKB_LED_INVALID (0xffffffff)
|
|
|
|
#define XKB_KEYCODE_MAX (0xffffffff - 1)
|
|
|
|
/**
|
|
* Maximum keysym value
|
|
*
|
|
* @since 1.6.0
|
|
* @sa xkb_keysym_t
|
|
* @ingroup keysyms
|
|
*/
|
|
#define XKB_KEYSYM_MAX 0x1fffffff
|
|
|
|
/**
|
|
* Test whether a value is a valid extended keycode.
|
|
* @sa xkb_keycode_t
|
|
**/
|
|
#define xkb_keycode_is_legal_ext(key) (key <= XKB_KEYCODE_MAX)
|
|
|
|
/**
|
|
* Test whether a value is a valid X11 keycode.
|
|
* @sa xkb_keycode_t
|
|
*/
|
|
#define xkb_keycode_is_legal_x11(key) (key >= 8 && key <= 255)
|
|
|
|
/**
|
|
* Names to compile a keymap with, also known as RMLVO.
|
|
*
|
|
* The names are the common configuration values by which a user picks
|
|
* a keymap.
|
|
*
|
|
* If the entire struct is NULL, then each field is taken to be NULL.
|
|
* You should prefer passing NULL instead of choosing your own defaults.
|
|
*/
|
|
struct xkb_rule_names {
|
|
/**
|
|
* The rules file to use. The rules file describes how to interpret
|
|
* the values of the model, layout, variant and options fields.
|
|
*
|
|
* If NULL or the empty string "", a default value is used.
|
|
* If the XKB_DEFAULT_RULES environment variable is set, it is used
|
|
* as the default. Otherwise the system default is used.
|
|
*/
|
|
const char *rules;
|
|
/**
|
|
* The keyboard model by which to interpret keycodes and LEDs.
|
|
*
|
|
* If NULL or the empty string "", a default value is used.
|
|
* If the XKB_DEFAULT_MODEL environment variable is set, it is used
|
|
* as the default. Otherwise the system default is used.
|
|
*/
|
|
const char *model;
|
|
/**
|
|
* A comma separated list of layouts (languages) to include in the
|
|
* keymap.
|
|
*
|
|
* If NULL or the empty string "", a default value is used.
|
|
* If the XKB_DEFAULT_LAYOUT environment variable is set, it is used
|
|
* as the default. Otherwise the system default is used.
|
|
*/
|
|
const char *layout;
|
|
/**
|
|
* A comma separated list of variants, one per layout, which may
|
|
* modify or augment the respective layout in various ways.
|
|
*
|
|
* Generally, should either be empty or have the same number of values
|
|
* as the number of layouts. You may use empty values as in "intl,,neo".
|
|
*
|
|
* If NULL or the empty string "", and a default value is also used
|
|
* for the layout, a default value is used. Otherwise no variant is
|
|
* used.
|
|
* If the XKB_DEFAULT_VARIANT environment variable is set, it is used
|
|
* as the default. Otherwise the system default is used.
|
|
*/
|
|
const char *variant;
|
|
/**
|
|
* A comma separated list of options, through which the user specifies
|
|
* non-layout related preferences, like which key combinations are used
|
|
* for switching layouts, or which key is the Compose key.
|
|
*
|
|
* If NULL, a default value is used. If the empty string "", no
|
|
* options are used.
|
|
* If the XKB_DEFAULT_OPTIONS environment variable is set, it is used
|
|
* as the default. Otherwise the system default is used.
|
|
*/
|
|
const char *options;
|
|
};
|
|
|
|
/**
|
|
* Get the keymap as a string in the format from which it was created.
|
|
* @sa xkb_keymap_get_as_string()
|
|
**/
|
|
#define XKB_KEYMAP_USE_ORIGINAL_FORMAT ((enum xkb_keymap_format) -1)
|
|
|
|
|
|
#endif // FENNEC_PLATFORM_LINUX_XKB_LIB_XKBCOMMON_H
|