Blender V4.3
GHOST_SystemWayland.cc File Reference
#include "GHOST_SystemWayland.hh"
#include "GHOST_Context.hh"
#include "GHOST_Event.hh"
#include "GHOST_EventButton.hh"
#include "GHOST_EventCursor.hh"
#include "GHOST_EventDragnDrop.hh"
#include "GHOST_EventKey.hh"
#include "GHOST_EventTrackpad.hh"
#include "GHOST_EventWheel.hh"
#include "GHOST_PathUtils.hh"
#include "GHOST_TimerManager.hh"
#include "GHOST_WaylandUtils.hh"
#include "GHOST_WindowManager.hh"
#include "GHOST_utildefines.hh"
#include <algorithm>
#include <atomic>
#include <stdexcept>
#include <thread>
#include <unordered_map>
#include <unordered_set>
#include <wayland-cursor.h>
#include <xkbcommon/xkbcommon-compose.h>
#include <xkbcommon/xkbcommon.h>
#include <fractional-scale-v1-client-protocol.h>
#include <pointer-constraints-unstable-v1-client-protocol.h>
#include <pointer-gestures-unstable-v1-client-protocol.h>
#include <primary-selection-unstable-v1-client-protocol.h>
#include <relative-pointer-unstable-v1-client-protocol.h>
#include <tablet-unstable-v2-client-protocol.h>
#include <viewporter-client-protocol.h>
#include <xdg-activation-v1-client-protocol.h>
#include <xdg-output-unstable-v1-client-protocol.h>
#include <xdg-decoration-unstable-v1-client-protocol.h>
#include <xdg-shell-client-protocol.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <cstdlib>
#include <cstring>
#include <mutex>
#include <pthread.h>
#include "CLG_log.h"
#include "GHOST_TimerTask.hh"
#include "IMB_imbuf.hh"
#include "IMB_imbuf_types.hh"

Go to the source code of this file.

Classes

struct  GWL_ModifierInfo
 
struct  GWL_SimpleBuffer
 
struct  GWL_Cursor_AnimHandle
 
struct  GWL_Cursor
 
struct  GWL_TabletTool
 
struct  GWL_DataOffer
 
struct  GWL_DataSource
 
struct  GWL_KeyRepeatPlayload
 
struct  GWL_SeatStateGrab
 
struct  GWL_SeatStatePointer
 
struct  GWL_SeatStatePointer_Events
 
struct  GWL_SeatStatePointerScroll_SmoothAsDiscrete
 
struct  GWL_SeatStatePointerScroll
 
struct  GWL_ScaledFixedT
 
struct  GWL_SeatStatePointerGesture_Pinch
 
struct  GWL_SeatStateKeyboard
 
struct  GWL_KeyboardDepressedState
 
struct  GWL_XDG_Decor_System
 
struct  GWL_PrimarySelection_DataOffer
 
struct  GWL_PrimarySelection_DataSource
 
struct  GWL_PrimarySelection
 
struct  GWL_Seat
 
struct  GWL_DisplayTimeStamp
 
struct  GWL_Display
 
struct  GWL_RegisteryAdd_Params
 
struct  GWL_RegisteryUpdate_Params
 
struct  GWL_RegistryHandler
 
struct  GWL_RegistryEntry
 
struct  GWL_Cursor_ShapeInfo
 

Macros

#define GWL_TabletTool_FrameTypes_NUM   (int(GWL_TabletTool_EventTypes::Stylus3_Up) + 1)
 
#define GWL_SeatStatePointer_EventTypes_NUM   (int(GWL_Pointer_EventTypes::Button6_Up) + 1)
 
#define GXMAP(k, x, y)
 
#define CASE_CURSOR(shape_id, shape_name_in_theme)
 
#define SURFACE_CLEAR_PTR(surface_test)
 
Local Defines

Control local functionality, compositors specific workarounds.

#define _VERBOSE_OLD_IFACE_PRINT(params_version, version_max)    ((void)(params_version), (version_max))
 
#define GWL_IFACE_VERSION_CLAMP(params_version, version_min, version_max)
 
#define USE_NON_LATIN_KB_WORKAROUND
 
#define WL_NAME_UNSET   uint32_t(-1)
 
#define WL_FIXED_TO_INT_FOR_WINDOW_V2(win, xy)
 
Internal #GWL_Cursor Type
#define EVDEV_OFFSET   8
 

Typedefs

Internal #GWL_RegistryHandler
using GWL_RegistryHandler_AddFn
 
using GWL_RegistryHandler_UpdateFn
 
using GWL_RegistryEntry_RemoveFn = void (*)(GWL_Display *display, void *user_data, bool on_exit)
 

Functions

Internal #GWL_SimpleBuffer Type
static void gwl_simple_buffer_free_data (GWL_SimpleBuffer *buffer)
 
static void gwl_simple_buffer_set_from_string (GWL_SimpleBuffer *buffer, const char *str)
 
Internal #GWL_Display Type (#wl_display & #wl_compositor wrapper)
static void gwl_display_destroy (GWL_Display *display)
 
static int gwl_display_seat_index (GWL_Display *display, const GWL_Seat *seat)
 
static GWL_Seatgwl_display_seat_active_get (const GWL_Display *display)
 
static bool gwl_display_seat_active_set (GWL_Display *display, const GWL_Seat *seat)
 
Internal #GWL_RegistryEntry
static void gwl_registry_entry_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params, void *user_data)
 
static bool gwl_registry_entry_remove_by_interface_slot (GWL_Display *display, int interface_slot, bool on_exit)
 
static void gwl_registry_entry_update_all (GWL_Display *display, const int interface_slot_exclude)
 
Private Cursor Animation API
static bool gwl_seat_cursor_anim_check (GWL_Seat *seat)
 
Event Thread
static void * gwl_display_event_thread_fn (void *display_voidp)
 
static void gwl_display_event_thread_create (GWL_Display *display)
 
Public WAYLAND Query Access
GWL_Outputghost_wl_output_user_data (wl_output *wl_output)
 
GHOST_WindowWaylandghost_wl_surface_user_data (wl_surface *wl_surface)
 

Variables

static signed char has_wl_trackpad_physical_direction = -1
 
Public WAYLAND Direct Data Access

Expose some members via methods.

static const char * ghost_wl_app_id
 

Forward Declarations

#define pushEvent   DONT_USE
 
constexpr size_t events_pending_default_size = 4096 / sizeof(void *)
 
static void keyboard_handle_key_repeat_cancel (GWL_Seat *seat)
 
static void output_handle_done (void *data, wl_output *wl_output)
 
static void gwl_seat_capability_pointer_disable (GWL_Seat *seat)
 
static void gwl_seat_capability_keyboard_disable (GWL_Seat *seat)
 
static void gwl_seat_capability_touch_disable (GWL_Seat *seat)
 
static void gwl_seat_cursor_anim_begin (GWL_Seat *seat)
 
static void gwl_seat_cursor_anim_begin_if_needed (GWL_Seat *seat)
 
static void gwl_seat_cursor_anim_end (GWL_Seat *seat)
 
static void gwl_seat_cursor_anim_reset (GWL_Seat *seat)
 
static bool gwl_registry_entry_remove_by_name (GWL_Display *display, uint32_t name, int *r_interface_slot)
 
static void gwl_registry_entry_remove_all (GWL_Display *display)
 
static int gwl_registry_handler_interface_slot_max ()
 
static int gwl_registry_handler_interface_slot_from_string (const char *interface)
 
static const GWL_RegistryHandlergwl_registry_handler_from_interface_slot (int interface_slot)
 
static bool xkb_compose_state_feed_and_get_utf8 (xkb_compose_state *compose_state, xkb_state *state, const xkb_keycode_t key, char r_utf8_buf[sizeof(GHOST_TEventKeyData::utf8_buf)])
 
static void gwl_display_event_thread_destroy (GWL_Display *display)
 
static void ghost_wl_display_lock_without_input (wl_display *wl_display, std::mutex *server_mutex)
 

Workaround Compositor Specific Bugs

#define USE_GNOME_CONFINE_HACK
 
#define USE_KDE_TABLET_HIDDEN_CURSOR_HACK
 
static bool use_gnome_confine_hack = false
 

Inline Event Codes

Selected input event code defines from linux/input-event-codes.h We include some of the button input event codes here, since the header is only available in more recent kernel versions.

#define BTN_RANGE_MIN   BTN_LEFT
 
#define BTN_RANGE_MAX   BTN_BACK
 
enum  {
  BTN_LEFT = 0x110 , BTN_RIGHT = 0x111 , BTN_MIDDLE = 0x112 , BTN_SIDE = 0x113 ,
  BTN_EXTRA = 0x114 , BTN_FORWARD = 0x115 , BTN_BACK = 0x116
}
 
enum  { BTN_STYLUS = 0x14b , BTN_STYLUS2 = 0x14c , BTN_STYLUS3 = 0x149 }
 
enum  {
  KEY_GRAVE = 41 , KEY_102ND = 86 , KEY_1 = 2 , KEY_2 = 3 ,
  KEY_3 = 4 , KEY_4 = 5 , KEY_5 = 6 , KEY_6 = 7 ,
  KEY_7 = 8 , KEY_8 = 9 , KEY_9 = 10 , KEY_0 = 11
}
 

Modifier Table

Convenient access to modifier key values, allow looping over modifier keys.

#define MOD_INDEX_NUM   (MOD_INDEX_OS + 1)
 
enum  { MOD_INDEX_SHIFT = 0 , MOD_INDEX_ALT = 1 , MOD_INDEX_CTRL = 2 , MOD_INDEX_OS = 3 }
 
static const GWL_ModifierInfo g_modifier_info_table [MOD_INDEX_NUM]
 

Listener (Registry), #wl_registry_listener

#define LOG   (&LOG_WL_KEYBOARD_DEPRESSED_STATE)
 
#define LOG   (&LOG_WL_RELATIVE_POINTER)
 
#define LOG   (&LOG_WL_DATA_SOURCE)
 
#define LOG   (&LOG_WL_DATA_OFFER)
 
#define LOG   (&LOG_WL_DATA_DEVICE)
 
#define LOG   (&LOG_WL_CURSOR_BUFFER)
 
#define LOG   (&LOG_WL_CURSOR_SURFACE)
 
#define LOG   (&LOG_WL_POINTER)
 
#define LOG   (&LOG_WL_TOUCH)
 
#define LOG   (&LOG_WL_TABLET_TOOL)
 
#define LOG   (&LOG_WL_TABLET_SEAT)
 
#define LOG   (&LOG_WL_KEYBOARD)
 
#define LOG   (&LOG_WL_PRIMARY_SELECTION_OFFER)
 
#define LOG   (&LOG_WL_PRIMARY_SELECTION_DEVICE)
 
#define LOG   (&LOG_WL_PRIMARY_SELECTION_SOURCE)
 
#define LOG   (&LOG_WL_SEAT)
 
#define LOG   (&LOG_WL_XDG_OUTPUT)
 
#define LOG   (&LOG_WL_OUTPUT)
 
#define LOG   (&LOG_WL_XDG_WM_BASE)
 
#define LOG   (&LOG_WL_REGISTRY)
 
static CLG_LogRef LOG_WL_REGISTRY = {"ghost.wl.handle.registry"}
 
static const GWL_RegistryHandler gwl_registry_handlers []
 
static const wl_registry_listener registry_listener
 
static void gwl_registry_compositor_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_compositor_remove (GWL_Display *display, void *, const bool)
 
static void gwl_registry_xdg_wm_base_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_xdg_wm_base_remove (GWL_Display *display, void *, const bool)
 
static void gwl_registry_xdg_decoration_manager_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_xdg_decoration_manager_remove (GWL_Display *display, void *, const bool)
 
static void gwl_registry_xdg_output_manager_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_xdg_output_manager_remove (GWL_Display *display, void *, const bool)
 
static void gwl_registry_wl_output_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_wl_output_update (GWL_Display *display, const GWL_RegisteryUpdate_Params &params)
 
static void gwl_registry_wl_output_remove (GWL_Display *display, void *user_data, const bool on_exit)
 
static void gwl_registry_wl_seat_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_wl_seat_update (GWL_Display *display, const GWL_RegisteryUpdate_Params &params)
 
static void gwl_registry_wl_seat_remove (GWL_Display *display, void *user_data, const bool on_exit)
 
static void gwl_registry_wl_shm_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_wl_shm_remove (GWL_Display *display, void *, const bool)
 
static void gwl_registry_wl_data_device_manager_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_wl_data_device_manager_remove (GWL_Display *display, void *, const bool)
 
static void gwl_registry_wp_tablet_manager_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_wp_tablet_manager_remove (GWL_Display *display, void *, const bool)
 
static void gwl_registry_wp_relative_pointer_manager_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_wp_relative_pointer_manager_remove (GWL_Display *display, void *, const bool)
 
static void gwl_registry_wp_pointer_constraints_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_wp_pointer_constraints_remove (GWL_Display *display, void *, const bool)
 
static void gwl_registry_wp_pointer_gestures_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_wp_pointer_gestures_remove (GWL_Display *display, void *, const bool)
 
static void gwl_registry_xdg_activation_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_xdg_activation_remove (GWL_Display *display, void *, const bool)
 
static void gwl_registry_wp_fractional_scale_manager_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_wp_fractional_scale_manager_remove (GWL_Display *display, void *, const bool)
 
static void gwl_registry_wp_viewporter_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_wp_viewporter_remove (GWL_Display *display, void *, const bool)
 
static void gwl_registry_wp_primary_selection_device_manager_add (GWL_Display *display, const GWL_RegisteryAdd_Params &params)
 
static void gwl_registry_wp_primary_selection_device_manager_remove (GWL_Display *display, void *, const bool)
 
static void global_handle_add (void *data, wl_registry *wl_registry, const uint32_t name, const char *interface, const uint32_t version)
 
static void global_handle_remove (void *data, wl_registry *wl_registry, const uint32_t name)
 

Internal #GWL_TabletTool Type

enum class  GWL_TabletTool_EventTypes {
  Motion = 0 , Pressure , Tilt , Wheel ,
  Stylus0_Down , Stylus0_Up , Stylus1_Down , Stylus1_Up ,
  Stylus2_Down , Stylus2_Up , Stylus3_Down , Stylus3_Up ,
  GWL_TabletTool_FrameTypes_NUM
}
 
static const GHOST_TButton gwl_tablet_tool_ebutton []
 
static void gwl_tablet_tool_frame_event_add (GWL_TabletTool *tablet_tool, const GWL_TabletTool_EventTypes ty)
 
static void gwl_tablet_tool_frame_event_reset (GWL_TabletTool *tablet_tool)
 

Internal #GWL_Seat Type (#wl_seat wrapper & associated types)

enum class  GWL_Pointer_EventTypes {
  Motion = 0 , Scroll , Button0_Down , Button0_Up ,
  Button1_Down , Button1_Up , Button2_Down , Button2_Up ,
  Button3_Down , Button3_Up , Button4_Down , Button4_Up ,
  Button5_Down , Button5_Up , Button6_Down , Button6_Up ,
  GWL_SeatStatePointer_EventTypes_NUM
}
 
static const GHOST_TButton gwl_pointer_events_ebutton []
 
static constexpr int smooth_as_discrete_steps = 2400
 
static void gwl_pointer_handle_frame_event_add (GWL_SeatStatePointer_Events *pointer_events, const GWL_Pointer_EventTypes ty, const uint64_t event_ms)
 
static void gwl_pointer_handle_frame_event_reset (GWL_SeatStatePointer_Events *pointer_events)
 
static int gwl_scaled_fixed_t_add_and_calc_rounded_delta (GWL_ScaledFixedT *sf, const wl_fixed_t add)
 
static void gwl_xdg_decor_system_destroy (GWL_Display *display, GWL_XDG_Decor_System *decor)
 
static void gwl_primary_selection_discard_offer (GWL_PrimarySelection *primary)
 
static void gwl_primary_selection_discard_source (GWL_PrimarySelection *primary)
 
static GWL_SeatStatePointergwl_seat_state_pointer_active (GWL_Seat *seat)
 
static GWL_SeatStatePointergwl_seat_state_pointer_from_cursor_surface (GWL_Seat *seat, const wl_surface *wl_surface)
 
static void gwl_seat_key_layout_active_state_update_mask (GWL_Seat *seat)
 
static void gwl_seat_key_repeat_timer_fn (GHOST_ITimerTask *task, uint64_t time_ms)
 
static void gwl_seat_key_repeat_timer_add (GWL_Seat *seat, GHOST_TimerProcPtr key_repeat_fn, GHOST_TUserDataPtr payload, const bool use_delay)
 
static void gwl_seat_key_repeat_timer_remove (GWL_Seat *seat)
 

Private Utility Functions

enum  { GWL_IOR_READ = 1 << 0 , GWL_IOR_WRITE = 1 << 1 , GWL_IOR_NO_RETRY = 1 << 2 }
 
static bool ghost_wayland_log_handler_is_background = false
 
static const int default_cursor_size = 24
 
static const GWL_Cursor_ShapeInfo ghost_wl_cursors
 
static constexpr const char * ghost_wl_mime_text_plain = "text/plain"
 
static constexpr const char * ghost_wl_mime_text_utf8 = "text/plain;charset=utf-8"
 
static constexpr const char * ghost_wl_mime_text_uri = "text/uri-list"
 
static const char * ghost_wl_mime_preference_order []
 
static const GHOST_TDragnDropTypes ghost_wl_mime_preference_order_type []
 
static const char * ghost_wl_mime_send []
 
static uint64_t sub_abs_u64 (const uint64_t a, const uint64_t b)
 
static uint64_t ghost_wl_ms_from_utime_pair (uint32_t utime_hi, uint32_t utime_lo)
 
static const char * ghost_wl_locale_from_env_with_default ()
 
static void ghost_wl_display_report_error_from_code (wl_display *display, const int ecode)
 
static void ghost_wl_display_report_error (wl_display *display)
 
bool ghost_wl_display_report_error_if_set (wl_display *display)
 
static void ghost_wayland_log_handler (const char *msg, va_list arg)
 
static GHOST_TKey xkb_map_gkey (const xkb_keysym_t sym)
 
static GHOST_TKey xkb_map_gkey_or_scan_code (const xkb_keysym_t sym, const uint32_t key)
 
static int pointer_axis_as_index (const uint32_t axis)
 
static GHOST_TTabletMode tablet_tool_map_type (enum zwp_tablet_tool_v2_type wp_tablet_tool_type)
 
static void pthread_set_min_priority (pthread_t handle)
 
static void thread_set_min_priority (std::thread &thread)
 
static int memfd_create_sealed (const char *name)
 
static int file_descriptor_is_io_ready (int fd, const int flags, const int timeout_ms)
 
static int ghost_wl_display_event_pump (wl_display *wl_display)
 
static int ghost_wl_display_event_pump_from_thread (wl_display *wl_display, const int fd, std::mutex *server_mutex)
 
static size_t ghost_wl_shm_format_as_size (enum wl_shm_format format)
 
static wl_buffer * ghost_wl_buffer_create_for_image (wl_shm *shm, const int32_t size_xy[2], enum wl_shm_format format, void **r_buffer_data, size_t *r_buffer_data_size)
 
static ssize_t read_exhaustive (const int fd, void *data, size_t nbytes)
 
static char * read_file_as_buffer (const int fd, const bool nil_terminate, size_t *r_len)
 

Private Cursor API

enum  eCursorSetMode { CURSOR_VISIBLE_ALWAYS_SET = 1 , CURSOR_VISIBLE_ONLY_HIDE , CURSOR_VISIBLE_ONLY_SHOW }
 
static void cursor_buffer_set_surface_impl (const wl_cursor_image *wl_image, wl_buffer *buffer, wl_surface *wl_surface, const int scale)
 
static int cursor_buffer_compatible_scale_from_image (const wl_cursor_image *wl_image, int scale)
 
static const wl_cursor * gwl_seat_cursor_find_from_shape (GWL_Seat *seat, const GHOST_TStandardCursor shape, const char **r_cursor_name)
 
static void gwl_seat_cursor_buffer_show (GWL_Seat *seat)
 
static void gwl_seat_cursor_buffer_hide (GWL_Seat *seat)
 
static void gwl_seat_cursor_buffer_set (const GWL_Seat *seat, const wl_cursor_image *wl_image, wl_buffer *buffer)
 
static void gwl_seat_cursor_buffer_set_current (GWL_Seat *seat)
 
static void gwl_seat_cursor_visible_set (GWL_Seat *seat, const bool visible, const bool is_hardware, const enum eCursorSetMode set_mode)
 

Private Keyboard Depressed Key Tracking

Don't track physical key-codes because there may be multiple keyboards connected. Instead, count the number of #GHOST_kKey are pressed. This may seem susceptible to bugs with sticky-keys however XKB works this way internally.

static CLG_LogRef LOG_WL_KEYBOARD_DEPRESSED_STATE = {"ghost.wl.keyboard.depressed"}
 
static void keyboard_depressed_state_reset (GWL_Seat *seat)
 
static void keyboard_depressed_state_key_event (GWL_Seat *seat, const GHOST_TKey gkey, const GHOST_TEventType etype)
 
static void keyboard_depressed_state_push_events_from_change (GWL_Seat *seat, GHOST_IWindow *win, const uint64_t event_ms, const GWL_KeyboardDepressedState &key_depressed_prev)
 

Listener (Relative Motion), #zwp_relative_pointer_v1_listener

These callbacks are registered for Wayland interfaces and called when an event is received from the compositor.

static CLG_LogRef LOG_WL_RELATIVE_POINTER = {"ghost.wl.handle.relative_pointer"}
 
static const zwp_relative_pointer_v1_listener relative_pointer_listener
 
static void relative_pointer_handle_relative_motion_impl (GWL_Seat *seat, GHOST_WindowWayland *win, const wl_fixed_t xy[2], const uint64_t event_ms)
 
static void relative_pointer_handle_relative_motion (void *data, zwp_relative_pointer_v1 *, const uint32_t utime_hi, const uint32_t utime_lo, const wl_fixed_t dx, const wl_fixed_t dy, const wl_fixed_t, const wl_fixed_t)
 

Listener (Data Source), #wl_data_source_listener

static CLG_LogRef LOG_WL_DATA_SOURCE = {"ghost.wl.handle.data_source"}
 
static const wl_data_source_listener data_source_listener
 
static void dnd_events (const GWL_Seat *const seat, const GHOST_TEventType event, const uint64_t event_ms)
 
static char * read_buffer_from_data_offer (GWL_DataOffer *data_offer, const char *mime_receive, std::mutex *mutex, const bool nil_terminate, size_t *r_len)
 
static char * read_buffer_from_primary_selection_offer (GWL_PrimarySelection_DataOffer *data_offer, const char *mime_receive, std::mutex *mutex, const bool nil_terminate, size_t *r_len)
 
static void data_source_handle_target (void *, wl_data_source *, const char *)
 
static void data_source_handle_send (void *data, wl_data_source *, const char *, const int32_t fd)
 
static void data_source_handle_cancelled (void *data, wl_data_source *wl_data_source)
 
static void data_source_handle_dnd_drop_performed (void *, wl_data_source *)
 
static void data_source_handle_dnd_finished (void *, wl_data_source *)
 
static void data_source_handle_action (void *, wl_data_source *, const uint32_t dnd_action)
 

Listener (Data Offer), #wl_data_offer_listener

static CLG_LogRef LOG_WL_DATA_OFFER = {"ghost.wl.handle.data_offer"}
 
static const wl_data_offer_listener data_offer_listener
 
static void data_offer_handle_offer (void *data, wl_data_offer *, const char *mime_type)
 
static void data_offer_handle_source_actions (void *data, wl_data_offer *, const uint32_t source_actions)
 
static void data_offer_handle_action (void *data, wl_data_offer *, const uint32_t dnd_action)
 

Listener (Data Device), #wl_data_device_listener

static CLG_LogRef LOG_WL_DATA_DEVICE = {"ghost.wl.handle.data_device"}
 
static const wl_data_device_listener data_device_listener
 
static void data_device_handle_data_offer (void *, wl_data_device *, wl_data_offer *id)
 
static void data_device_handle_enter (void *data, wl_data_device *, const uint32_t serial, wl_surface *wl_surface, const wl_fixed_t x, const wl_fixed_t y, wl_data_offer *id)
 
static void data_device_handle_leave (void *data, wl_data_device *)
 
static void data_device_handle_motion (void *data, wl_data_device *, const uint32_t time, const wl_fixed_t x, const wl_fixed_t y)
 
static void data_device_handle_drop (void *data, wl_data_device *)
 
static void data_device_handle_selection (void *data, wl_data_device *, wl_data_offer *id)
 

Listener (Buffer), #wl_buffer_listener

static CLG_LogRef LOG_WL_CURSOR_BUFFER = {"ghost.wl.handle.cursor_buffer"}
 
static const wl_buffer_listener cursor_buffer_listener
 
static void cursor_buffer_handle_release (void *data, wl_buffer *wl_buffer)
 

Listener (Surface), #wl_surface_listener

static CLG_LogRef LOG_WL_CURSOR_SURFACE = {"ghost.wl.handle.cursor_surface"}
 
static const wl_surface_listener cursor_surface_listener
 
static bool update_cursor_scale (GWL_Cursor &cursor, wl_shm *shm, GWL_SeatStatePointer *seat_state_pointer, wl_surface *wl_surface_cursor)
 
static void cursor_surface_handle_enter (void *data, wl_surface *wl_surface, wl_output *wl_output)
 
static void cursor_surface_handle_leave (void *data, wl_surface *wl_surface, wl_output *wl_output)
 
static void cursor_surface_handle_preferred_buffer_scale (void *, wl_surface *, int32_t factor)
 

Listener (Pointer), #wl_pointer_listener

static CLG_LogRef LOG_WL_POINTER = {"ghost.wl.handle.pointer"}
 
static const wl_pointer_listener pointer_listener
 
static void pointer_handle_enter (void *data, wl_pointer *, const uint32_t serial, wl_surface *wl_surface, const wl_fixed_t surface_x, const wl_fixed_t surface_y)
 
static void pointer_handle_leave (void *data, wl_pointer *, const uint32_t, wl_surface *wl_surface)
 
static void pointer_handle_motion (void *data, wl_pointer *, const uint32_t time, const wl_fixed_t surface_x, const wl_fixed_t surface_y)
 
static void pointer_handle_button (void *data, wl_pointer *, const uint32_t serial, const uint32_t time, const uint32_t button, const uint32_t state)
 
static void pointer_handle_axis (void *data, wl_pointer *, const uint32_t time, const uint32_t axis, const wl_fixed_t value)
 
static void pointer_handle_frame (void *data, wl_pointer *)
 
static void pointer_handle_axis_source (void *data, wl_pointer *, uint32_t axis_source)
 
static void pointer_handle_axis_stop (void *data, wl_pointer *, uint32_t time, uint32_t axis)
 
static void pointer_handle_axis_discrete (void *data, wl_pointer *, uint32_t axis, int32_t discrete)
 
static void pointer_handle_axis_value120 (void *data, wl_pointer *, uint32_t axis, int32_t value120)
 

Listener (Touch Seat), #wl_touch_listener

NOTE(@ideasman42): It's not clear if this interface is used by popular compositors. It looks like GNOME/KDE only support zwp_pointer_gestures_v1_interface. If this isn't used anywhere, it could be removed.

static CLG_LogRef LOG_WL_TOUCH = {"ghost.wl.handle.touch"}
 
static const wl_touch_listener touch_seat_listener
 
static void touch_seat_handle_down (void *, wl_touch *, uint32_t, uint32_t, wl_surface *, int32_t, wl_fixed_t, wl_fixed_t)
 
static void touch_seat_handle_up (void *, wl_touch *, uint32_t, uint32_t, int32_t)
 
static void touch_seat_handle_motion (void *, wl_touch *, uint32_t, int32_t, wl_fixed_t, wl_fixed_t)
 
static void touch_seat_handle_frame (void *, wl_touch *)
 
static void touch_seat_handle_cancel (void *, wl_touch *)
 
static void touch_seat_handle_shape (void *, wl_touch *, int32_t, wl_fixed_t, wl_fixed_t)
 
static void touch_seat_handle_orientation (void *, wl_touch *, int32_t, wl_fixed_t)
 

Listener (Tablet Tool), #zwp_tablet_tool_v2_listener

static CLG_LogRef LOG_WL_TABLET_TOOL = {"ghost.wl.handle.tablet_tool"}
 
static const zwp_tablet_tool_v2_listener tablet_tool_listner
 
static void tablet_tool_handle_type (void *data, zwp_tablet_tool_v2 *, const uint32_t tool_type)
 
static void tablet_tool_handle_hardware_serial (void *, zwp_tablet_tool_v2 *, const uint32_t, const uint32_t)
 
static void tablet_tool_handle_hardware_id_wacom (void *, zwp_tablet_tool_v2 *, const uint32_t, const uint32_t)
 
static void tablet_tool_handle_capability (void *, zwp_tablet_tool_v2 *, const uint32_t capability)
 
static void tablet_tool_handle_done (void *, zwp_tablet_tool_v2 *)
 
static void tablet_tool_handle_removed (void *data, zwp_tablet_tool_v2 *zwp_tablet_tool_v2)
 
static void tablet_tool_handle_proximity_in (void *data, zwp_tablet_tool_v2 *, const uint32_t serial, zwp_tablet_v2 *, wl_surface *wl_surface)
 
static void tablet_tool_handle_proximity_out (void *data, zwp_tablet_tool_v2 *)
 
static void tablet_tool_handle_down (void *data, zwp_tablet_tool_v2 *, const uint32_t serial)
 
static void tablet_tool_handle_up (void *data, zwp_tablet_tool_v2 *)
 
static void tablet_tool_handle_motion (void *data, zwp_tablet_tool_v2 *, const wl_fixed_t x, const wl_fixed_t y)
 
static void tablet_tool_handle_pressure (void *data, zwp_tablet_tool_v2 *, const uint32_t pressure)
 
static void tablet_tool_handle_distance (void *, zwp_tablet_tool_v2 *, const uint32_t distance)
 
static void tablet_tool_handle_tilt (void *data, zwp_tablet_tool_v2 *, const wl_fixed_t tilt_x, const wl_fixed_t tilt_y)
 
static void tablet_tool_handle_rotation (void *, zwp_tablet_tool_v2 *, const wl_fixed_t degrees)
 
static void tablet_tool_handle_slider (void *, zwp_tablet_tool_v2 *, const int32_t position)
 
static void tablet_tool_handle_wheel (void *data, zwp_tablet_tool_v2 *, const wl_fixed_t, const int32_t clicks)
 
static void tablet_tool_handle_button (void *data, zwp_tablet_tool_v2 *, const uint32_t serial, const uint32_t button, const uint32_t state)
 
static void tablet_tool_handle_frame (void *data, zwp_tablet_tool_v2 *, const uint32_t time)
 

Listener (Table Seat), #zwp_tablet_seat_v2_listener

static CLG_LogRef LOG_WL_TABLET_SEAT = {"ghost.wl.handle.tablet_seat"}
 
static const zwp_tablet_seat_v2_listener tablet_seat_listener
 
static void tablet_seat_handle_tablet_added (void *, zwp_tablet_seat_v2 *, zwp_tablet_v2 *id)
 
static void tablet_seat_handle_tool_added (void *data, zwp_tablet_seat_v2 *, zwp_tablet_tool_v2 *id)
 
static void tablet_seat_handle_pad_added (void *, zwp_tablet_seat_v2 *, zwp_tablet_pad_v2 *id)
 

Listener (Keyboard), #wl_keyboard_listener

static CLG_LogRef LOG_WL_KEYBOARD = {"ghost.wl.handle.keyboard"}
 
static const wl_keyboard_listener keyboard_listener
 
static void keyboard_handle_keymap (void *data, wl_keyboard *, const uint32_t format, const int32_t fd, const uint32_t size)
 
static void keyboard_handle_enter (void *data, wl_keyboard *, const uint32_t serial, wl_surface *wl_surface, wl_array *keys)
 
static void keyboard_handle_leave (void *data, wl_keyboard *, const uint32_t, wl_surface *wl_surface)
 
static xkb_keysym_t xkb_state_key_get_one_sym_without_modifiers (xkb_state *xkb_state_empty, xkb_state *xkb_state_empty_with_numlock, xkb_state *xkb_state_empty_with_shift, const bool xkb_use_non_latin_workaround, const xkb_keycode_t key)
 
static void keyboard_handle_key_repeat_reset (GWL_Seat *seat, const bool use_delay)
 
static void keyboard_handle_key (void *data, wl_keyboard *, const uint32_t serial, const uint32_t time, const uint32_t key, const uint32_t state)
 
static void keyboard_handle_modifiers (void *data, wl_keyboard *, const uint32_t serial, const uint32_t mods_depressed, const uint32_t mods_latched, const uint32_t mods_locked, const uint32_t group)
 
static void keyboard_handle_repeat_info (void *data, wl_keyboard *, const int32_t rate, const int32_t delay)
 

Listener (Primary Selection Offer), #zwp_primary_selection_offer_v1_listener

static CLG_LogRef LOG_WL_PRIMARY_SELECTION_OFFER = {"ghost.wl.handle.primary_selection_offer"}
 
static const zwp_primary_selection_offer_v1_listener primary_selection_offer_listener
 
static void primary_selection_offer_offer (void *data, zwp_primary_selection_offer_v1 *id, const char *type)
 

Listener (Primary Selection Device), #zwp_primary_selection_device_v1_listener

static CLG_LogRef LOG_WL_PRIMARY_SELECTION_DEVICE = {"ghost.wl.handle.primary_selection_device"}
 
static const zwp_primary_selection_device_v1_listener primary_selection_device_listener
 
static void primary_selection_device_handle_data_offer (void *, zwp_primary_selection_device_v1 *, zwp_primary_selection_offer_v1 *id)
 
static void primary_selection_device_handle_selection (void *data, zwp_primary_selection_device_v1 *, zwp_primary_selection_offer_v1 *id)
 

Listener (Primary Selection Source), #zwp_primary_selection_source_v1_listener

static CLG_LogRef LOG_WL_PRIMARY_SELECTION_SOURCE = {"ghost.wl.handle.primary_selection_source"}
 
static const zwp_primary_selection_source_v1_listener primary_selection_source_listener
 
static void primary_selection_source_send (void *data, zwp_primary_selection_source_v1 *, const char *, int32_t fd)
 
static void primary_selection_source_cancelled (void *data, zwp_primary_selection_source_v1 *source)
 

Listener (Seat), #wl_seat_listener

static CLG_LogRef LOG_WL_SEAT = {"ghost.wl.handle.seat"}
 
static const wl_seat_listener seat_listener
 
static bool gwl_seat_capability_pointer_multitouch_check (const GWL_Seat *seat, const bool fallback)
 
static void gwl_seat_capability_pointer_multitouch_enable (GWL_Seat *seat)
 
static void gwl_seat_capability_pointer_multitouch_disable (GWL_Seat *seat)
 
static void gwl_seat_capability_pointer_enable (GWL_Seat *seat)
 
static void gwl_seat_capability_keyboard_enable (GWL_Seat *seat)
 
static void gwl_seat_capability_touch_enable (GWL_Seat *seat)
 
static void seat_handle_capabilities (void *data, wl_seat *wl_seat, const uint32_t capabilities)
 
static void seat_handle_name (void *data, wl_seat *, const char *name)
 

Listener (XDG Output), #zxdg_output_v1_listener

static CLG_LogRef LOG_WL_XDG_OUTPUT = {"ghost.wl.handle.xdg_output"}
 
static const zxdg_output_v1_listener xdg_output_listener
 
static void xdg_output_handle_logical_position (void *data, zxdg_output_v1 *, const int32_t x, const int32_t y)
 
static void xdg_output_handle_logical_size (void *data, zxdg_output_v1 *, const int32_t width, const int32_t height)
 
static void xdg_output_handle_done (void *data, zxdg_output_v1 *)
 
static void xdg_output_handle_name (void *, zxdg_output_v1 *, const char *name)
 
static void xdg_output_handle_description (void *, zxdg_output_v1 *, const char *description)
 

Listener (Output), #wl_output_listener

static CLG_LogRef LOG_WL_OUTPUT = {"ghost.wl.handle.output"}
 
static const wl_output_listener output_listener
 
static void output_handle_geometry (void *data, wl_output *, const int32_t, const int32_t, const int32_t physical_width, const int32_t physical_height, const int32_t, const char *make, const char *model, const int32_t transform)
 
static void output_handle_mode (void *data, wl_output *, const uint32_t flags, const int32_t width, const int32_t height, const int32_t)
 
static void output_handle_scale (void *data, wl_output *, const int32_t factor)
 
static void output_handle_name (void *, wl_output *, const char *name)
 
static void output_handle_description (void *, wl_output *, const char *description)
 

Listener (XDG WM Base), #xdg_wm_base_listener

static CLG_LogRef LOG_WL_XDG_WM_BASE = {"ghost.wl.handle.xdg_wm_base"}
 
static const xdg_wm_base_listener shell_listener
 
static void shell_handle_ping (void *, xdg_wm_base *xdg_wm_base, const uint32_t serial)
 

GHOST Implementation

WAYLAND specific implementation of the GHOST_System interface.

static constexpr const char * ghost_wl_mime_img_png = "image/png"
 
static const char * system_clipboard_text_mime_type (const std::unordered_set< std::string > &data_offer_types)
 
static char * system_clipboard_get_primary_selection (GWL_Display *display)
 
static char * system_clipboard_get (GWL_Display *display)
 
static void system_clipboard_put_primary_selection (GWL_Display *display, const char *buffer)
 
static void system_clipboard_put (GWL_Display *display, const char *buffer)
 
static GHOST_TSuccess getCursorPositionClientRelative_impl (const GWL_SeatStatePointer *seat_state_pointer, const GHOST_WindowWayland *win, int32_t &x, int32_t &y)
 
static GHOST_TSuccess setCursorPositionClientRelative_impl (GWL_Seat *seat, GHOST_WindowWayland *win, const int32_t x, const int32_t y)
 
static bool cursor_is_software (const GHOST_TGrabCursorMode mode, const bool use_software_confine)
 
static bool setCursorGrab_use_software_confine (const GHOST_TGrabCursorMode mode, wl_surface *wl_surface)
 
static GWL_SeatStateGrab seat_grab_state_from_mode (const GHOST_TGrabCursorMode mode, const bool use_software_confine)
 

Public WAYLAND Proxy Ownership API

static const char * ghost_wl_output_tag_id = "GHOST-output"
 
static const char * ghost_wl_surface_tag_id = "GHOST-window"
 
static const char * ghost_wl_surface_cursor_pointer_tag_id = "GHOST-cursor-pointer"
 
static const char * ghost_wl_surface_cursor_tablet_tag_id = "GHOST-cursor-tablet"
 
bool ghost_wl_output_own (const wl_output *wl_output)
 
bool ghost_wl_surface_own (const wl_surface *wl_surface)
 
bool ghost_wl_surface_own_with_null_check (const wl_surface *wl_surface)
 
bool ghost_wl_surface_own_cursor_pointer (const wl_surface *wl_surface)
 
bool ghost_wl_surface_own_cursor_tablet (const wl_surface *wl_surface)
 
void ghost_wl_output_tag (wl_output *wl_output)
 
void ghost_wl_surface_tag (wl_surface *wl_surface)
 
void ghost_wl_surface_tag_cursor_pointer (wl_surface *wl_surface)
 
void ghost_wl_surface_tag_cursor_tablet (wl_surface *wl_surface)
 

Macro Definition Documentation

◆ _VERBOSE_OLD_IFACE_PRINT

#define _VERBOSE_OLD_IFACE_PRINT ( params_version,
version_max )    ((void)(params_version), (version_max))

A version clamping macro that optionally prints when the version is outdated. This is useful when investigating when newer versions of an interface might be supported.

This addresses the following:

  • Filling in callbacks which wont be called because they aren't part of the older interface.
  • Not taking advantage of newer interfaces which would be beneficial.
  • When interface versions need to be bumped to support new features, avoid large version bumps that could change behavior in unexpected ways due to versions changes between each version that wont have been accounted for.

This should only be enabled during development, never enabled for regular releases.

Definition at line 227 of file GHOST_SystemWayland.cc.

◆ BTN_RANGE_MAX

#define BTN_RANGE_MAX   BTN_BACK

Definition at line 276 of file GHOST_SystemWayland.cc.

Referenced by pointer_handle_button().

◆ BTN_RANGE_MIN

#define BTN_RANGE_MIN   BTN_LEFT

Definition at line 275 of file GHOST_SystemWayland.cc.

Referenced by pointer_handle_button().

◆ CASE_CURSOR

#define CASE_CURSOR ( shape_id,
shape_name_in_theme )
Value:
case shape_id: \
info.names[int(shape_id)] = shape_name_in_theme;
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int

◆ EVDEV_OFFSET

#define EVDEV_OFFSET   8

From XKB internals, use for converting a scan-code from WAYLAND to a #xkb_keycode_t. Ideally this wouldn't need a local define.

Definition at line 424 of file GHOST_SystemWayland.cc.

Referenced by keyboard_handle_enter(), keyboard_handle_key(), keyboard_handle_keymap(), and xkb_state_key_get_one_sym_without_modifiers().

◆ GWL_IFACE_VERSION_CLAMP

◆ GWL_SeatStatePointer_EventTypes_NUM

#define GWL_SeatStatePointer_EventTypes_NUM   (int(GWL_Pointer_EventTypes::Button6_Up) + 1)

Definition at line 746 of file GHOST_SystemWayland.cc.

◆ GWL_TabletTool_FrameTypes_NUM

#define GWL_TabletTool_FrameTypes_NUM   (int(GWL_TabletTool_EventTypes::Stylus3_Up) + 1)

Definition at line 510 of file GHOST_SystemWayland.cc.

◆ GXMAP

#define GXMAP ( k,
x,
y )
Value:

Referenced by xkb_map_gkey().

◆ LOG [1/20]

Definition at line 3019 of file GHOST_SystemWayland.cc.

Referenced by cursor_buffer_handle_release(), cursor_surface_handle_enter(), cursor_surface_handle_leave(), cursor_surface_handle_preferred_buffer_scale(), data_device_handle_data_offer(), data_device_handle_drop(), data_device_handle_enter(), data_device_handle_leave(), data_device_handle_motion(), data_device_handle_selection(), data_offer_handle_action(), data_offer_handle_offer(), data_offer_handle_source_actions(), data_source_handle_action(), data_source_handle_cancelled(), data_source_handle_dnd_drop_performed(), data_source_handle_dnd_finished(), data_source_handle_send(), data_source_handle_target(), global_handle_add(), global_handle_remove(), gwl_registry_wl_output_remove(), keyboard_depressed_state_key_event(), keyboard_depressed_state_push_events_from_change(), keyboard_handle_enter(), keyboard_handle_key(), keyboard_handle_keymap(), keyboard_handle_leave(), keyboard_handle_modifiers(), keyboard_handle_repeat_info(), output_handle_description(), output_handle_done(), output_handle_geometry(), output_handle_mode(), output_handle_name(), output_handle_scale(), pointer_handle_axis(), pointer_handle_axis_discrete(), pointer_handle_axis_source(), pointer_handle_axis_stop(), pointer_handle_axis_value120(), pointer_handle_button(), pointer_handle_enter(), pointer_handle_frame(), pointer_handle_leave(), pointer_handle_motion(), primary_selection_device_handle_data_offer(), primary_selection_device_handle_selection(), primary_selection_offer_offer(), primary_selection_source_cancelled(), primary_selection_source_send(), read_buffer_from_data_offer(), read_buffer_from_primary_selection_offer(), relative_pointer_handle_relative_motion(), seat_handle_capabilities(), seat_handle_name(), shell_handle_ping(), tablet_seat_handle_pad_added(), tablet_seat_handle_tablet_added(), tablet_seat_handle_tool_added(), tablet_tool_handle_button(), tablet_tool_handle_capability(), tablet_tool_handle_distance(), tablet_tool_handle_done(), tablet_tool_handle_down(), tablet_tool_handle_frame(), tablet_tool_handle_hardware_id_wacom(), tablet_tool_handle_hardware_serial(), tablet_tool_handle_motion(), tablet_tool_handle_pressure(), tablet_tool_handle_proximity_in(), tablet_tool_handle_proximity_out(), tablet_tool_handle_removed(), tablet_tool_handle_rotation(), tablet_tool_handle_slider(), tablet_tool_handle_tilt(), tablet_tool_handle_type(), tablet_tool_handle_up(), tablet_tool_handle_wheel(), touch_seat_handle_cancel(), touch_seat_handle_down(), touch_seat_handle_frame(), touch_seat_handle_motion(), touch_seat_handle_orientation(), touch_seat_handle_shape(), touch_seat_handle_up(), xdg_output_handle_description(), xdg_output_handle_done(), xdg_output_handle_logical_position(), xdg_output_handle_logical_size(), and xdg_output_handle_name().

◆ LOG [2/20]

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [3/20]

#define LOG   (&LOG_WL_DATA_SOURCE)

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [4/20]

#define LOG   (&LOG_WL_DATA_OFFER)

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [5/20]

#define LOG   (&LOG_WL_DATA_DEVICE)

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [6/20]

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [7/20]

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [8/20]

#define LOG   (&LOG_WL_POINTER)

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [9/20]

#define LOG   (&LOG_WL_TOUCH)

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [10/20]

#define LOG   (&LOG_WL_TABLET_TOOL)

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [11/20]

#define LOG   (&LOG_WL_TABLET_SEAT)

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [12/20]

#define LOG   (&LOG_WL_KEYBOARD)

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [13/20]

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [14/20]

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [15/20]

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [16/20]

#define LOG   (&LOG_WL_SEAT)

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [17/20]

#define LOG   (&LOG_WL_XDG_OUTPUT)

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [18/20]

#define LOG   (&LOG_WL_OUTPUT)

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [19/20]

#define LOG   (&LOG_WL_XDG_WM_BASE)

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ LOG [20/20]

#define LOG   (&LOG_WL_REGISTRY)

Definition at line 3019 of file GHOST_SystemWayland.cc.

◆ MOD_INDEX_NUM

#define MOD_INDEX_NUM   (MOD_INDEX_OS + 1)

◆ pushEvent

◆ SURFACE_CLEAR_PTR

#define SURFACE_CLEAR_PTR ( surface_test)
Value:
if (surface_test == wl_surface) { \
surface_test = nullptr; \
changed = true; \
} \
((void)0);
#define wl_surface

Referenced by GHOST_SystemWayland::window_surface_unref().

◆ USE_GNOME_CONFINE_HACK

#define USE_GNOME_CONFINE_HACK

GNOME (mutter 42.2 had a bug with confine not respecting scale - Hi-DPI), See: #98793. Even though this has been fixed, at time of writing it's not yet in a release. Workaround the problem by implementing confine with a software cursor. While this isn't ideal, it's not adding a lot of overhead as software cursors are already used for warping (which WAYLAND doesn't support).

Definition at line 176 of file GHOST_SystemWayland.cc.

◆ USE_KDE_TABLET_HIDDEN_CURSOR_HACK

#define USE_KDE_TABLET_HIDDEN_CURSOR_HACK

KDE (plasma 5.26.1) has a bug where the cursor surface needs to be committed (via wl_surface_commit) when it was hidden and is being set to visible again, see: #102048. See: https://bugs.kde.org/show_bug.cgi?id=461001

Definition at line 192 of file GHOST_SystemWayland.cc.

◆ USE_NON_LATIN_KB_WORKAROUND

#define USE_NON_LATIN_KB_WORKAROUND

Fix short-cut part of keyboard reading code not properly handling some keys, see: #102194.

Note
This is similar to X11 workaround by the same name, see: #47228.

Definition at line 239 of file GHOST_SystemWayland.cc.

Referenced by keyboard_handle_key().

◆ WL_FIXED_TO_INT_FOR_WINDOW_V2

#define WL_FIXED_TO_INT_FOR_WINDOW_V2 ( win,
xy )
Value:
wl_fixed_to_int((win)->wl_fixed_to_window((xy)[0])), \
wl_fixed_to_int((win)->wl_fixed_to_window((xy)[1])),
int xy[2]
Definition wm_draw.cc:170

Initializer for GHOST integer coordinates from wl_fixed_t, taking window scale into account.

Definition at line 247 of file GHOST_SystemWayland.cc.

Referenced by data_device_handle_drop(), dnd_events(), pointer_handle_enter(), pointer_handle_frame(), relative_pointer_handle_relative_motion_impl(), and tablet_tool_handle_frame().

◆ WL_NAME_UNSET

#define WL_NAME_UNSET   uint32_t(-1)

Typedef Documentation

◆ GWL_RegistryEntry_RemoveFn

using GWL_RegistryEntry_RemoveFn = void (*)(GWL_Display *display, void *user_data, bool on_exit)

Remove callback for object registry.

Parameters
displayThe display which holes a reference to the global object.
user_dataOptional reference to a sub element of display, use for outputs or seats for e.g. when the display may hold multiple references.
on_exitEnabled when freeing on exit. When true the consistency of references between objects should be kept valid. Otherwise it can be assumed that all objects will be freed and none will be used again, so there is no need to ensure a valid state.

Definition at line 1690 of file GHOST_SystemWayland.cc.

◆ GWL_RegistryHandler_AddFn

Initial value:
void (*)(GWL_Display *display,
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]

Add callback for object registry.

Note
Any operations that depend on other interfaces being registered must be performed in the GWL_RegistryHandler_UpdateFn callback as the order interfaces are added is out of our control.
Parameters
displayThe display which holes a reference to the global object.
paramsVarious arguments needed for registration.

Definition at line 1658 of file GHOST_SystemWayland.cc.

◆ GWL_RegistryHandler_UpdateFn

Initial value:

Optional update callback to refresh internal data when another interface has been added/removed.

Parameters
displayThe display which holes a reference to the global object.
paramsVarious arguments needed for updating.

Definition at line 1677 of file GHOST_SystemWayland.cc.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

The event codes are used to differentiate from which mouse button an event comes from.

Enumerator
BTN_LEFT 
BTN_RIGHT 
BTN_MIDDLE 
BTN_SIDE 
BTN_EXTRA 
BTN_FORWARD 
BTN_BACK 

Definition at line 264 of file GHOST_SystemWayland.cc.

◆ anonymous enum

anonymous enum

Tablet events.

Note
Gnome/GTK swap middle/right, where the same application in X11 will swap the middle/right mouse button when running under WAYLAND. KDE doesn't do this, and according to artists at the Blender studio, having the button closest to the nib be MMB is preferable, so use this as a default. If needs be - swapping these could be a preference.
Enumerator
BTN_STYLUS 

Use as middle-mouse.

BTN_STYLUS2 

Use as right-mouse.

BTN_STYLUS3 

NOTE(@ideasman42): Map to an additional button (not sure which hardware uses this).

Definition at line 286 of file GHOST_SystemWayland.cc.

◆ anonymous enum

anonymous enum

Keyboard scan-codes.

From linux/input-event-codes.h.

Enumerator
KEY_GRAVE 
KEY_102ND 

Sometimes called OEM 102, used for German GrLess key. For the common case this key will be mapped using #XKB_KEY_less. Use a scan-code to prevent the key being unknown.

KEY_1 
KEY_2 
KEY_3 
KEY_4 
KEY_5 
KEY_6 
KEY_7 
KEY_8 
KEY_9 
KEY_0 

Definition at line 300 of file GHOST_SystemWayland.cc.

◆ anonymous enum

anonymous enum
Enumerator
MOD_INDEX_SHIFT 
MOD_INDEX_ALT 
MOD_INDEX_CTRL 
MOD_INDEX_OS 

Definition at line 331 of file GHOST_SystemWayland.cc.

◆ anonymous enum

anonymous enum
Enumerator
GWL_IOR_READ 
GWL_IOR_WRITE 
GWL_IOR_NO_RETRY 

Definition at line 2379 of file GHOST_SystemWayland.cc.

◆ eCursorSetMode

Enumerator
CURSOR_VISIBLE_ALWAYS_SET 
CURSOR_VISIBLE_ONLY_HIDE 
CURSOR_VISIBLE_ONLY_SHOW 

Definition at line 2865 of file GHOST_SystemWayland.cc.

◆ GWL_Pointer_EventTypes

enum class GWL_Pointer_EventTypes
strong
Enumerator
Motion 
Scroll 

Wheel & smooth scroll.

Note
The logic for scrolling is quite involved. This event is more of a catch-all that scrolling needs to be computed.
Button0_Down 
Button0_Up 
Button1_Down 
Button1_Up 
Button2_Down 
Button2_Up 
Button3_Down 
Button3_Up 
Button4_Down 
Button4_Up 
Button5_Down 
Button5_Up 
Button6_Down 
Button6_Up 
GWL_SeatStatePointer_EventTypes_NUM 

Definition at line 711 of file GHOST_SystemWayland.cc.

◆ GWL_TabletTool_EventTypes

enum class GWL_TabletTool_EventTypes
strong

Collect tablet event data before the frame callback runs.

Enumerator
Motion 
Pressure 
Tilt 
Wheel 
Stylus0_Down 
Stylus0_Up 
Stylus1_Down 
Stylus1_Up 
Stylus2_Down 
Stylus2_Up 
Stylus3_Down 
Stylus3_Up 
GWL_TabletTool_FrameTypes_NUM 

Definition at line 488 of file GHOST_SystemWayland.cc.

Function Documentation

◆ cursor_buffer_compatible_scale_from_image()

static int cursor_buffer_compatible_scale_from_image ( const wl_cursor_image * wl_image,
int scale )
static

Needed to ensure the cursor size is always a multiple of scale.

Definition at line 2716 of file GHOST_SystemWayland.cc.

Referenced by gwl_seat_cursor_buffer_set().

◆ cursor_buffer_handle_release()

static void cursor_buffer_handle_release ( void * data,
wl_buffer * wl_buffer )
static

Definition at line 3712 of file GHOST_SystemWayland.cc.

References CLOG_INFO, data, and LOG.

◆ cursor_buffer_set_surface_impl()

static void cursor_buffer_set_surface_impl ( const wl_cursor_image * wl_image,
wl_buffer * buffer,
wl_surface * wl_surface,
const int scale )
static

Definition at line 2697 of file GHOST_SystemWayland.cc.

References GHOST_ASSERT, and wl_surface.

Referenced by gwl_seat_cursor_buffer_set().

◆ cursor_is_software()

static bool cursor_is_software ( const GHOST_TGrabCursorMode mode,
const bool use_software_confine )
static

◆ cursor_surface_handle_enter()

◆ cursor_surface_handle_leave()

◆ cursor_surface_handle_preferred_buffer_scale()

static void cursor_surface_handle_preferred_buffer_scale ( void * ,
wl_surface * ,
int32_t factor )
static

Definition at line 3822 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ data_device_handle_data_offer()

static void data_device_handle_data_offer ( void * ,
wl_data_device * ,
wl_data_offer * id )
static

◆ data_device_handle_drop()

◆ data_device_handle_enter()

◆ data_device_handle_leave()

◆ data_device_handle_motion()

static void data_device_handle_motion ( void * data,
wl_data_device * ,
const uint32_t time,
const wl_fixed_t x,
const wl_fixed_t y )
static

◆ data_device_handle_selection()

static void data_device_handle_selection ( void * data,
wl_data_device * ,
wl_data_offer * id )
static

◆ data_offer_handle_action()

static void data_offer_handle_action ( void * data,
wl_data_offer * ,
const uint32_t dnd_action )
static

Definition at line 3376 of file GHOST_SystemWayland.cc.

References GWL_DataOffer::action, CLOG_INFO, data, GWL_DataOffer::dnd, and LOG.

◆ data_offer_handle_offer()

static void data_offer_handle_offer ( void * data,
wl_data_offer * ,
const char * mime_type )
static

Definition at line 3358 of file GHOST_SystemWayland.cc.

References CLOG_INFO, data, LOG, and GWL_DataOffer::types.

◆ data_offer_handle_source_actions()

static void data_offer_handle_source_actions ( void * data,
wl_data_offer * ,
const uint32_t source_actions )
static

◆ data_source_handle_action()

static void data_source_handle_action ( void * ,
wl_data_source * ,
const uint32_t dnd_action )
static

Notify the selected action.

This event indicates the action selected by the compositor after matching the source/destination side actions. Only one action (or none) will be offered here.

Definition at line 3331 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ data_source_handle_cancelled()

static void data_source_handle_cancelled ( void * data,
wl_data_source * wl_data_source )
static

◆ data_source_handle_dnd_drop_performed()

static void data_source_handle_dnd_drop_performed ( void * ,
wl_data_source *  )
static

The drag-and-drop operation physically finished.

The user performed the drop action. This event does not indicate acceptance, #wl_data_source.cancelled may still be emitted afterwards if the drop destination does not accept any mime type.

Definition at line 3306 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ data_source_handle_dnd_finished()

static void data_source_handle_dnd_finished ( void * ,
wl_data_source *  )
static

The drag-and-drop operation concluded.

The drop destination finished interoperating with this data source, so the client is now free to destroy this data source and free all associated data.

Definition at line 3319 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ data_source_handle_send()

static void data_source_handle_send ( void * data,
wl_data_source * ,
const char * ,
const int32_t fd )
static

◆ data_source_handle_target()

static void data_source_handle_target ( void * ,
wl_data_source * ,
const char *  )
static

A target accepts an offered mime type.

Sent when a target accepts pointer_focus or motion events. If a target does not accept any of the offered types, type is nullptr.

Definition at line 3255 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ dnd_events()

◆ file_descriptor_is_io_ready()

static int file_descriptor_is_io_ready ( int fd,
const int flags,
const int timeout_ms )
static

◆ getCursorPositionClientRelative_impl()

◆ ghost_wayland_log_handler()

static void ghost_wayland_log_handler ( const char * msg,
va_list arg )
static

Callback for WAYLAND to run when there is an error.

Note
It's useful to set a break-point on this function as some errors are fatal (for all intents and purposes) but don't crash the process.

Definition at line 2015 of file GHOST_SystemWayland.cc.

References GHOST_ISystem::getBacktraceFn(), and ghost_wayland_log_handler_is_background.

Referenced by GHOST_SystemWayland::GHOST_SystemWayland().

◆ ghost_wl_buffer_create_for_image()

static wl_buffer * ghost_wl_buffer_create_for_image ( wl_shm * shm,
const int32_t size_xy[2],
enum wl_shm_format format,
void ** r_buffer_data,
size_t * r_buffer_data_size )
static

Return a #wl_buffer, ready to have it's data filled in or nullptr in case of failure. The caller is responsible for calling unmap(buffer_data, buffer_size).

Parameters
r_buffer_dataThe buffer to be filled.
r_buffer_data_sizeThe size of r_buffer_data in bytes.

Definition at line 2549 of file GHOST_SystemWayland.cc.

References ghost_wl_shm_format_as_size(), memfd_create_sealed(), and UNPACK2.

Referenced by GHOST_SystemWayland::cursor_shape_custom_set().

◆ ghost_wl_display_event_pump()

◆ ghost_wl_display_event_pump_from_thread()

static int ghost_wl_display_event_pump_from_thread ( wl_display * wl_display,
const int fd,
std::mutex * server_mutex )
static

◆ ghost_wl_display_lock_without_input()

static void ghost_wl_display_lock_without_input ( wl_display * wl_display,
std::mutex * server_mutex )
static

◆ ghost_wl_display_report_error()

static void ghost_wl_display_report_error ( wl_display * display)
static

◆ ghost_wl_display_report_error_from_code()

static void ghost_wl_display_report_error_from_code ( wl_display * display,
const int ecode )
static

◆ ghost_wl_display_report_error_if_set()

bool ghost_wl_display_report_error_if_set ( wl_display * display)

◆ ghost_wl_locale_from_env_with_default()

static const char * ghost_wl_locale_from_env_with_default ( )
static

Access the LOCALE (with a fallback).

Definition at line 1932 of file GHOST_SystemWayland.cc.

Referenced by gwl_registry_wl_seat_add().

◆ ghost_wl_ms_from_utime_pair()

static uint64_t ghost_wl_ms_from_utime_pair ( uint32_t utime_hi,
uint32_t utime_lo )
static

Return milliseconds from a microsecond uint32 pair (used by some wayland functions).

Definition at line 1924 of file GHOST_SystemWayland.cc.

Referenced by relative_pointer_handle_relative_motion().

◆ ghost_wl_output_own()

bool ghost_wl_output_own ( const wl_output * wl_output)

◆ ghost_wl_output_tag()

void ghost_wl_output_tag ( wl_output * wl_output)

Definition at line 8789 of file GHOST_SystemWayland.cc.

References ghost_wl_output_tag_id, and wl_proxy_set_tag.

Referenced by gwl_registry_wl_output_add().

◆ ghost_wl_output_user_data()

◆ ghost_wl_shm_format_as_size()

static size_t ghost_wl_shm_format_as_size ( enum wl_shm_format format)
static

Definition at line 2528 of file GHOST_SystemWayland.cc.

References GHOST_ASSERT.

Referenced by ghost_wl_buffer_create_for_image().

◆ ghost_wl_surface_own()

bool ghost_wl_surface_own ( const wl_surface * wl_surface)

◆ ghost_wl_surface_own_cursor_pointer()

bool ghost_wl_surface_own_cursor_pointer ( const wl_surface * wl_surface)

◆ ghost_wl_surface_own_cursor_tablet()

bool ghost_wl_surface_own_cursor_tablet ( const wl_surface * wl_surface)

◆ ghost_wl_surface_own_with_null_check()

bool ghost_wl_surface_own_with_null_check ( const wl_surface * wl_surface)

◆ ghost_wl_surface_tag()

void ghost_wl_surface_tag ( wl_surface * wl_surface)

◆ ghost_wl_surface_tag_cursor_pointer()

void ghost_wl_surface_tag_cursor_pointer ( wl_surface * wl_surface)

◆ ghost_wl_surface_tag_cursor_tablet()

void ghost_wl_surface_tag_cursor_tablet ( wl_surface * wl_surface)

◆ ghost_wl_surface_user_data()

◆ global_handle_add()

static void global_handle_add ( void * data,
wl_registry * wl_registry,
const uint32_t name,
const char * interface,
const uint32_t version )
static

◆ global_handle_remove()

static void global_handle_remove ( void * data,
wl_registry * wl_registry,
const uint32_t name )
static

Announce removal of global object.

Notify the client of removed global objects.

This event notifies the client that the global identified by name is no longer available. If the client bound to the global using the bind request, the client should now destroy that object.

Definition at line 7262 of file GHOST_SystemWayland.cc.

References CLOG_INFO, data, GHOST_ASSERT, gwl_registry_entry_remove_by_name(), gwl_registry_entry_update_all(), gwl_registry_handlers, and LOG.

◆ gwl_display_destroy()

static void gwl_display_destroy ( GWL_Display * display)
static

Free the GWL_Display and its related members.

Note
This may run on a partially initialized struct, so it can't be assumed all members are set.

Definition at line 1526 of file GHOST_SystemWayland.cc.

References ghost_wl_display_lock_without_input(), gwl_display_event_thread_destroy(), gwl_registry_entry_remove_all(), gwl_seat_cursor_anim_end(), gwl_xdg_decor_system_destroy(), and wl_display_disconnect.

◆ gwl_display_event_thread_create()

static void gwl_display_event_thread_create ( GWL_Display * display)
static

◆ gwl_display_event_thread_destroy()

static void gwl_display_event_thread_destroy ( GWL_Display * display)
static

Definition at line 7336 of file GHOST_SystemWayland.cc.

Referenced by gwl_display_destroy().

◆ gwl_display_event_thread_fn()

static void * gwl_display_event_thread_fn ( void * display_voidp)
static

◆ gwl_display_seat_active_get()

◆ gwl_display_seat_active_set()

static bool gwl_display_seat_active_set ( GWL_Display * display,
const GWL_Seat * seat )
static

Definition at line 1624 of file GHOST_SystemWayland.cc.

References gwl_display_seat_index(), and UNLIKELY.

Referenced by GHOST_SystemWayland::seat_active_set().

◆ gwl_display_seat_index()

static int gwl_display_seat_index ( GWL_Display * display,
const GWL_Seat * seat )
static

Definition at line 1599 of file GHOST_SystemWayland.cc.

References GHOST_ASSERT.

Referenced by gwl_display_seat_active_set().

◆ gwl_pointer_handle_frame_event_add()

◆ gwl_pointer_handle_frame_event_reset()

static void gwl_pointer_handle_frame_event_reset ( GWL_SeatStatePointer_Events * pointer_events)
static

◆ gwl_primary_selection_discard_offer()

static void gwl_primary_selection_discard_offer ( GWL_PrimarySelection * primary)
static

◆ gwl_primary_selection_discard_source()

◆ gwl_registry_compositor_add()

static void gwl_registry_compositor_add ( GWL_Display * display,
const GWL_RegisteryAdd_Params & params )
static

◆ gwl_registry_compositor_remove()

static void gwl_registry_compositor_remove ( GWL_Display * display,
void * ,
const bool  )
static

Definition at line 6495 of file GHOST_SystemWayland.cc.

◆ gwl_registry_entry_add()

◆ gwl_registry_entry_remove_all()

static void gwl_registry_entry_remove_all ( GWL_Display * display)
static

Remove all global objects (on exit).

Definition at line 1813 of file GHOST_SystemWayland.cc.

References GHOST_ASSERT, gwl_registry_entry_remove_by_interface_slot(), and gwl_registry_handler_interface_slot_max().

Referenced by gwl_display_destroy().

◆ gwl_registry_entry_remove_by_interface_slot()

static bool gwl_registry_entry_remove_by_interface_slot ( GWL_Display * display,
int interface_slot,
bool on_exit )
static

◆ gwl_registry_entry_remove_by_name()

◆ gwl_registry_entry_update_all()

static void gwl_registry_entry_update_all ( GWL_Display * display,
const int interface_slot_exclude )
static

Run GWL_RegistryHandler.update_fn an all registered interface instances. This is needed to refresh the state of interfaces that may reference other interfaces. Called when interfaces are added/removed.

Parameters
interface_slot_excludeSkip updating slots of this type. Note that while harmless dependencies only exist between different types, so there is no reason to update all other outputs that an output was removed (for e.g.). Pass as -1 to update all slots.

NOTE(@ideasman42): Updating all other items on a single change is typically worth avoiding. In practice this isn't a problem as so there are so few elements in display->registry_entry, so few use update functions and adding/removal at runtime is rarely called (plugging/unplugging) hardware for e.g. So while it's possible to store dependency links to avoid unnecessary looping over data - it ends up being a non issue.

Definition at line 1853 of file GHOST_SystemWayland.cc.

References GHOST_ASSERT, gwl_registry_handler_from_interface_slot(), gwl_registry_handler_interface_slot_max(), params, and GWL_RegistryHandler::update_fn.

Referenced by GHOST_SystemWayland::GHOST_SystemWayland(), global_handle_add(), and global_handle_remove().

◆ gwl_registry_handler_from_interface_slot()

static const GWL_RegistryHandler * gwl_registry_handler_from_interface_slot ( int interface_slot)
static

◆ gwl_registry_handler_interface_slot_from_string()

static int gwl_registry_handler_interface_slot_from_string ( const char * interface)
static

◆ gwl_registry_handler_interface_slot_max()

static int gwl_registry_handler_interface_slot_max ( )
static

Workaround for gwl_registry_handlers order of declaration, preventing ARRAY_SIZE(gwl_registry_handlers) - 1 being used.

Definition at line 7184 of file GHOST_SystemWayland.cc.

References ARRAY_SIZE, and gwl_registry_handlers.

Referenced by gwl_registry_entry_remove_all(), gwl_registry_entry_update_all(), and gwl_registry_handler_from_interface_slot().

◆ gwl_registry_wl_data_device_manager_add()

static void gwl_registry_wl_data_device_manager_add ( GWL_Display * display,
const GWL_RegisteryAdd_Params & params )
static

◆ gwl_registry_wl_data_device_manager_remove()

static void gwl_registry_wl_data_device_manager_remove ( GWL_Display * display,
void * ,
const bool  )
static

Definition at line 6851 of file GHOST_SystemWayland.cc.

◆ gwl_registry_wl_output_add()

static void gwl_registry_wl_output_add ( GWL_Display * display,
const GWL_RegisteryAdd_Params & params )
static

◆ gwl_registry_wl_output_remove()

static void gwl_registry_wl_output_remove ( GWL_Display * display,
void * user_data,
const bool on_exit )
static

Definition at line 6607 of file GHOST_SystemWayland.cc.

References CLOG_WARN, GHOST_ASSERT, LOG, and output.

◆ gwl_registry_wl_output_update()

static void gwl_registry_wl_output_update ( GWL_Display * display,
const GWL_RegisteryUpdate_Params & params )
static

◆ gwl_registry_wl_seat_add()

◆ gwl_registry_wl_seat_remove()

◆ gwl_registry_wl_seat_update()

◆ gwl_registry_wl_shm_add()

static void gwl_registry_wl_shm_add ( GWL_Display * display,
const GWL_RegisteryAdd_Params & params )
static

◆ gwl_registry_wl_shm_remove()

static void gwl_registry_wl_shm_remove ( GWL_Display * display,
void * ,
const bool  )
static

Definition at line 6831 of file GHOST_SystemWayland.cc.

◆ gwl_registry_wp_fractional_scale_manager_add()

static void gwl_registry_wp_fractional_scale_manager_add ( GWL_Display * display,
const GWL_RegisteryAdd_Params & params )
static

◆ gwl_registry_wp_fractional_scale_manager_remove()

static void gwl_registry_wp_fractional_scale_manager_remove ( GWL_Display * display,
void * ,
const bool  )
static

Definition at line 6976 of file GHOST_SystemWayland.cc.

◆ gwl_registry_wp_pointer_constraints_add()

static void gwl_registry_wp_pointer_constraints_add ( GWL_Display * display,
const GWL_RegisteryAdd_Params & params )
static

◆ gwl_registry_wp_pointer_constraints_remove()

static void gwl_registry_wp_pointer_constraints_remove ( GWL_Display * display,
void * ,
const bool  )
static

Definition at line 6912 of file GHOST_SystemWayland.cc.

◆ gwl_registry_wp_pointer_gestures_add()

static void gwl_registry_wp_pointer_gestures_add ( GWL_Display * display,
const GWL_RegisteryAdd_Params & params )
static

◆ gwl_registry_wp_pointer_gestures_remove()

static void gwl_registry_wp_pointer_gestures_remove ( GWL_Display * display,
void * ,
const bool  )
static

Definition at line 6935 of file GHOST_SystemWayland.cc.

◆ gwl_registry_wp_primary_selection_device_manager_add()

static void gwl_registry_wp_primary_selection_device_manager_add ( GWL_Display * display,
const GWL_RegisteryAdd_Params & params )
static

◆ gwl_registry_wp_primary_selection_device_manager_remove()

static void gwl_registry_wp_primary_selection_device_manager_remove ( GWL_Display * display,
void * ,
const bool  )
static

Definition at line 7020 of file GHOST_SystemWayland.cc.

◆ gwl_registry_wp_relative_pointer_manager_add()

static void gwl_registry_wp_relative_pointer_manager_add ( GWL_Display * display,
const GWL_RegisteryAdd_Params & params )
static

◆ gwl_registry_wp_relative_pointer_manager_remove()

static void gwl_registry_wp_relative_pointer_manager_remove ( GWL_Display * display,
void * ,
const bool  )
static

Definition at line 6892 of file GHOST_SystemWayland.cc.

◆ gwl_registry_wp_tablet_manager_add()

static void gwl_registry_wp_tablet_manager_add ( GWL_Display * display,
const GWL_RegisteryAdd_Params & params )
static

◆ gwl_registry_wp_tablet_manager_remove()

static void gwl_registry_wp_tablet_manager_remove ( GWL_Display * display,
void * ,
const bool  )
static

Definition at line 6871 of file GHOST_SystemWayland.cc.

◆ gwl_registry_wp_viewporter_add()

static void gwl_registry_wp_viewporter_add ( GWL_Display * display,
const GWL_RegisteryAdd_Params & params )
static

◆ gwl_registry_wp_viewporter_remove()

static void gwl_registry_wp_viewporter_remove ( GWL_Display * display,
void * ,
const bool  )
static

Definition at line 6996 of file GHOST_SystemWayland.cc.

◆ gwl_registry_xdg_activation_add()

static void gwl_registry_xdg_activation_add ( GWL_Display * display,
const GWL_RegisteryAdd_Params & params )
static

◆ gwl_registry_xdg_activation_remove()

static void gwl_registry_xdg_activation_remove ( GWL_Display * display,
void * ,
const bool  )
static

Definition at line 6955 of file GHOST_SystemWayland.cc.

◆ gwl_registry_xdg_decoration_manager_add()

static void gwl_registry_xdg_decoration_manager_add ( GWL_Display * display,
const GWL_RegisteryAdd_Params & params )
static

◆ gwl_registry_xdg_decoration_manager_remove()

static void gwl_registry_xdg_decoration_manager_remove ( GWL_Display * display,
void * ,
const bool  )
static

◆ gwl_registry_xdg_output_manager_add()

static void gwl_registry_xdg_output_manager_add ( GWL_Display * display,
const GWL_RegisteryAdd_Params & params )
static

◆ gwl_registry_xdg_output_manager_remove()

static void gwl_registry_xdg_output_manager_remove ( GWL_Display * display,
void * ,
const bool  )
static

Definition at line 6566 of file GHOST_SystemWayland.cc.

◆ gwl_registry_xdg_wm_base_add()

static void gwl_registry_xdg_wm_base_add ( GWL_Display * display,
const GWL_RegisteryAdd_Params & params )
static

◆ gwl_registry_xdg_wm_base_remove()

static void gwl_registry_xdg_wm_base_remove ( GWL_Display * display,
void * ,
const bool  )
static

◆ gwl_scaled_fixed_t_add_and_calc_rounded_delta()

static int gwl_scaled_fixed_t_add_and_calc_rounded_delta ( GWL_ScaledFixedT * sf,
const wl_fixed_t add )
static

Definition at line 861 of file GHOST_SystemWayland.cc.

References add(), GWL_ScaledFixedT::factor, and GWL_ScaledFixedT::value.

◆ gwl_seat_capability_keyboard_disable()

◆ gwl_seat_capability_keyboard_enable()

static void gwl_seat_capability_keyboard_enable ( GWL_Seat * seat)
static

◆ gwl_seat_capability_pointer_disable()

◆ gwl_seat_capability_pointer_enable()

◆ gwl_seat_capability_pointer_multitouch_check()

static bool gwl_seat_capability_pointer_multitouch_check ( const GWL_Seat * seat,
const bool fallback )
static

◆ gwl_seat_capability_pointer_multitouch_disable()

◆ gwl_seat_capability_pointer_multitouch_enable()

◆ gwl_seat_capability_touch_disable()

static void gwl_seat_capability_touch_disable ( GWL_Seat * seat)
static

Definition at line 6145 of file GHOST_SystemWayland.cc.

References GWL_Seat::touch, and GWL_Seat::wl.

Referenced by gwl_registry_wl_seat_remove(), and seat_handle_capabilities().

◆ gwl_seat_capability_touch_enable()

static void gwl_seat_capability_touch_enable ( GWL_Seat * seat)
static

◆ gwl_seat_cursor_anim_begin()

◆ gwl_seat_cursor_anim_begin_if_needed()

static void gwl_seat_cursor_anim_begin_if_needed ( GWL_Seat * seat)
static

◆ gwl_seat_cursor_anim_check()

static bool gwl_seat_cursor_anim_check ( GWL_Seat * seat)
static

◆ gwl_seat_cursor_anim_end()

◆ gwl_seat_cursor_anim_reset()

static void gwl_seat_cursor_anim_reset ( GWL_Seat * seat)
static

◆ gwl_seat_cursor_buffer_hide()

static void gwl_seat_cursor_buffer_hide ( GWL_Seat * seat)
static

Hide the buffer defined by gwl_seat_cursor_buffer_set without changing anything else, so gwl_seat_cursor_buffer_show can be used to display it again.

The caller is responsible for setting seat->cursor.visible.

Definition at line 2806 of file GHOST_SystemWayland.cc.

References gwl_seat_cursor_anim_end(), GWL_Seat::pointer, GWL_SeatStatePointer::serial, GWL_Seat::tablet, GWL_Seat::tablet_tools, GWL_Seat::wl, and GWL_Seat::wp.

Referenced by gwl_seat_cursor_visible_set().

◆ gwl_seat_cursor_buffer_set()

◆ gwl_seat_cursor_buffer_set_current()

◆ gwl_seat_cursor_buffer_show()

static void gwl_seat_cursor_buffer_show ( GWL_Seat * seat)
static

Show the buffer defined by gwl_seat_cursor_buffer_set without changing anything else, so gwl_seat_cursor_buffer_hide can be used to display it again.

The caller is responsible for setting seat->cursor.visible.

Definition at line 2767 of file GHOST_SystemWayland.cc.

References GWL_Seat::cursor, gwl_seat_cursor_anim_reset(), GWL_Cursor::is_custom, GWL_Seat::pointer, GWL_SeatStatePointer::serial, GWL_TabletTool::surface_cursor, GWL_Seat::tablet, GWL_Seat::tablet_tools, GWL_SeatStatePointer::theme_scale, GWL_Seat::wl, GWL_TabletTool::wl, and GWL_Seat::wp.

Referenced by gwl_seat_cursor_visible_set().

◆ gwl_seat_cursor_find_from_shape()

static const wl_cursor * gwl_seat_cursor_find_from_shape ( GWL_Seat * seat,
const GHOST_TStandardCursor shape,
const char ** r_cursor_name )
static

◆ gwl_seat_cursor_visible_set()

static void gwl_seat_cursor_visible_set ( GWL_Seat * seat,
const bool visible,
const bool is_hardware,
const enum eCursorSetMode set_mode )
static

◆ gwl_seat_key_layout_active_state_update_mask()

static void gwl_seat_key_layout_active_state_update_mask ( GWL_Seat * seat)
static

Account for changes to #GWL_Seat::xkb::layout_active by running #xkb_state_update_mask on static states which are used for lookups.

This is also used when initializing the states.

Definition at line 1240 of file GHOST_SystemWayland.cc.

References GHOST_ASSERT, GWL_Seat::layout_active, MOD_INDEX_SHIFT, GWL_Seat::state_empty, GWL_Seat::state_empty_with_numlock, GWL_Seat::state_empty_with_shift, GWL_Seat::xkb, GWL_Seat::xkb_keymap_mod_index, GWL_Seat::xkb_keymap_mod_index_mod2, and GWL_Seat::xkb_keymap_mod_index_numlock.

Referenced by keyboard_handle_keymap(), and keyboard_handle_modifiers().

◆ gwl_seat_key_repeat_timer_add()

◆ gwl_seat_key_repeat_timer_fn()

◆ gwl_seat_key_repeat_timer_remove()

◆ gwl_seat_state_pointer_active()

◆ gwl_seat_state_pointer_from_cursor_surface()

static GWL_SeatStatePointer * gwl_seat_state_pointer_from_cursor_surface ( GWL_Seat * seat,
const wl_surface * wl_surface )
static

◆ gwl_simple_buffer_free_data()

static void gwl_simple_buffer_free_data ( GWL_SimpleBuffer * buffer)
static

◆ gwl_simple_buffer_set_from_string()

static void gwl_simple_buffer_set_from_string ( GWL_SimpleBuffer * buffer,
const char * str )
static

◆ gwl_tablet_tool_frame_event_add()

◆ gwl_tablet_tool_frame_event_reset()

static void gwl_tablet_tool_frame_event_reset ( GWL_TabletTool * tablet_tool)
static

◆ gwl_xdg_decor_system_destroy()

◆ keyboard_depressed_state_key_event()

static void keyboard_depressed_state_key_event ( GWL_Seat * seat,
const GHOST_TKey gkey,
const GHOST_TEventType etype )
static

◆ keyboard_depressed_state_push_events_from_change()

static void keyboard_depressed_state_push_events_from_change ( GWL_Seat * seat,
GHOST_IWindow * win,
const uint64_t event_ms,
const GWL_KeyboardDepressedState & key_depressed_prev )
static

◆ keyboard_depressed_state_reset()

static void keyboard_depressed_state_reset ( GWL_Seat * seat)
static

◆ keyboard_handle_enter()

◆ keyboard_handle_key()

◆ keyboard_handle_key_repeat_cancel()

static void keyboard_handle_key_repeat_cancel ( GWL_Seat * seat)
static

◆ keyboard_handle_key_repeat_reset()

static void keyboard_handle_key_repeat_reset ( GWL_Seat * seat,
const bool use_delay )
static

Restart the key-repeat timer.

Parameters
use_delayWhen false, use the interval (prevents pause when the setting changes while the key is held).
Note
Caller must lock timer_mutex.

Definition at line 5361 of file GHOST_SystemWayland.cc.

References GHOST_ITimerTask::getTimerProc(), GHOST_ITimerTask::getUserData(), GHOST_ASSERT, gwl_seat_key_repeat_timer_add(), gwl_seat_key_repeat_timer_remove(), GWL_Seat::key_repeat, and GWL_Seat::timer.

Referenced by keyboard_handle_modifiers(), and keyboard_handle_repeat_info().

◆ keyboard_handle_keymap()

◆ keyboard_handle_leave()

static void keyboard_handle_leave ( void * data,
wl_keyboard * ,
const uint32_t ,
wl_surface * wl_surface )
static

Leave event.

Notification that this seat's keyboard focus is no longer on a certain wl_surface.

Definition at line 5222 of file GHOST_SystemWayland.cc.

References CLOG_INFO, data, ghost_wl_surface_own_with_null_check(), GWL_Seat::key_repeat, GWL_Seat::keyboard, keyboard_handle_key_repeat_cancel(), LOG, GWL_Seat::system, GWL_Seat::timer, GHOST_SystemWayland::timer_mutex, and wl_surface.

◆ keyboard_handle_modifiers()

static void keyboard_handle_modifiers ( void * data,
wl_keyboard * ,
const uint32_t serial,
const uint32_t mods_depressed,
const uint32_t mods_latched,
const uint32_t mods_locked,
const uint32_t group )
static

◆ keyboard_handle_repeat_info()

static void keyboard_handle_repeat_info ( void * data,
wl_keyboard * ,
const int32_t rate,
const int32_t delay )
static

◆ memfd_create_sealed()

static int memfd_create_sealed ( const char * name)
static

Definition at line 2347 of file GHOST_SystemWayland.cc.

References free().

Referenced by ghost_wl_buffer_create_for_image().

◆ output_handle_description()

static void output_handle_description ( void * ,
wl_output * ,
const char * description )
static

Definition at line 6404 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ output_handle_done()

static void output_handle_done ( void * data,
wl_output *  )
static

Sent all information about output.

This event is sent after all other properties have been sent after binding to the output object and after any other property changes done after that. This allows changes to the output properties to be seen as atomic, even if they happen via multiple events.

Definition at line 6367 of file GHOST_SystemWayland.cc.

References CLOG_INFO, data, ELEM, FRACTIONAL_DENOMINATOR, GHOST_ASSERT, LOG, and UNPACK2.

Referenced by xdg_output_handle_done().

◆ output_handle_geometry()

static void output_handle_geometry ( void * data,
wl_output * ,
const int32_t ,
const int32_t ,
const int32_t physical_width,
const int32_t physical_height,
const int32_t ,
const char * make,
const char * model,
const int32_t transform )
static

Definition at line 6306 of file GHOST_SystemWayland.cc.

References CLOG_INFO, data, LOG, GWL_Output::transform, and transform().

◆ output_handle_mode()

static void output_handle_mode ( void * data,
wl_output * ,
const uint32_t flags,
const int32_t width,
const int32_t height,
const int32_t  )
static

Definition at line 6334 of file GHOST_SystemWayland.cc.

References CLOG_INFO, data, LOG, and GWL_Output::size_native.

◆ output_handle_name()

static void output_handle_name ( void * ,
wl_output * ,
const char * name )
static

Definition at line 6399 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ output_handle_scale()

static void output_handle_scale ( void * data,
wl_output * ,
const int32_t factor )
static

Definition at line 6391 of file GHOST_SystemWayland.cc.

References CLOG_INFO, data, LOG, and GWL_Output::scale.

◆ pointer_axis_as_index()

static int pointer_axis_as_index ( const uint32_t axis)
static

◆ pointer_handle_axis()

◆ pointer_handle_axis_discrete()

static void pointer_handle_axis_discrete ( void * data,
wl_pointer * ,
uint32_t axis,
int32_t discrete )
static

◆ pointer_handle_axis_source()

static void pointer_handle_axis_source ( void * data,
wl_pointer * ,
uint32_t axis_source )
static

◆ pointer_handle_axis_stop()

◆ pointer_handle_axis_value120()

static void pointer_handle_axis_value120 ( void * data,
wl_pointer * ,
uint32_t axis,
int32_t value120 )
static

◆ pointer_handle_button()

static void pointer_handle_button ( void * data,
wl_pointer * ,
const uint32_t serial,
const uint32_t time,
const uint32_t button,
const uint32_t state )
static

◆ pointer_handle_enter()

◆ pointer_handle_frame()

static void pointer_handle_frame ( void * data,
wl_pointer *  )
static

◆ pointer_handle_leave()

static void pointer_handle_leave ( void * data,
wl_pointer * ,
const uint32_t ,
wl_surface * wl_surface )
static

◆ pointer_handle_motion()

static void pointer_handle_motion ( void * data,
wl_pointer * ,
const uint32_t time,
const wl_fixed_t surface_x,
const wl_fixed_t surface_y )
static

◆ primary_selection_device_handle_data_offer()

static void primary_selection_device_handle_data_offer ( void * ,
zwp_primary_selection_device_v1 * ,
zwp_primary_selection_offer_v1 * id )
static

◆ primary_selection_device_handle_selection()

static void primary_selection_device_handle_selection ( void * data,
zwp_primary_selection_device_v1 * ,
zwp_primary_selection_offer_v1 * id )
static

◆ primary_selection_offer_offer()

static void primary_selection_offer_offer ( void * data,
zwp_primary_selection_offer_v1 * id,
const char * type )
static

◆ primary_selection_source_cancelled()

static void primary_selection_source_cancelled ( void * data,
zwp_primary_selection_source_v1 * source )
static

Definition at line 5697 of file GHOST_SystemWayland.cc.

References CLOG_INFO, data, gwl_primary_selection_discard_source(), and LOG.

◆ primary_selection_source_send()

static void primary_selection_source_send ( void * data,
zwp_primary_selection_source_v1 * ,
const char * ,
int32_t fd )
static

Definition at line 5672 of file GHOST_SystemWayland.cc.

References CLOG_INFO, CLOG_WARN, data, LOG, and UNLIKELY.

◆ pthread_set_min_priority()

static void pthread_set_min_priority ( pthread_t handle)
static

◆ read_buffer_from_data_offer()

static char * read_buffer_from_data_offer ( GWL_DataOffer * data_offer,
const char * mime_receive,
std::mutex * mutex,
const bool nil_terminate,
size_t * r_len )
static

◆ read_buffer_from_primary_selection_offer()

static char * read_buffer_from_primary_selection_offer ( GWL_PrimarySelection_DataOffer * data_offer,
const char * mime_receive,
std::mutex * mutex,
const bool nil_terminate,
size_t * r_len )
static

◆ read_exhaustive()

static ssize_t read_exhaustive ( const int fd,
void * data,
size_t nbytes )
static

A version of read which will read nbytes or as many bytes as possible, useful as the LIBC version may read less than requested.

Definition at line 2585 of file GHOST_SystemWayland.cc.

References UNLIKELY.

Referenced by read_file_as_buffer().

◆ read_file_as_buffer()

static char * read_file_as_buffer ( const int fd,
const bool nil_terminate,
size_t * r_len )
static

Read from fd into a buffer which is returned. Use for files where seeking to determine the final size isn't supported (pipes for e.g.).

Returns
the buffer or null on failure. On failure errno will be set.

Definition at line 2613 of file GHOST_SystemWayland.cc.

References free(), len, next, read_exhaustive(), and UNLIKELY.

Referenced by read_buffer_from_data_offer(), and read_buffer_from_primary_selection_offer().

◆ relative_pointer_handle_relative_motion()

static void relative_pointer_handle_relative_motion ( void * data,
zwp_relative_pointer_v1 * ,
const uint32_t utime_hi,
const uint32_t utime_lo,
const wl_fixed_t dx,
const wl_fixed_t dy,
const wl_fixed_t ,
const wl_fixed_t  )
static

◆ relative_pointer_handle_relative_motion_impl()

◆ seat_grab_state_from_mode()

static GWL_SeatStateGrab seat_grab_state_from_mode ( const GHOST_TGrabCursorMode mode,
const bool use_software_confine )
static

◆ seat_handle_capabilities()

◆ seat_handle_name()

static void seat_handle_name ( void * data,
wl_seat * ,
const char * name )
static

Definition at line 6191 of file GHOST_SystemWayland.cc.

References CLOG_INFO, data, and LOG.

◆ setCursorGrab_use_software_confine()

static bool setCursorGrab_use_software_confine ( const GHOST_TGrabCursorMode mode,
wl_surface * wl_surface )
static

◆ setCursorPositionClientRelative_impl()

◆ shell_handle_ping()

static void shell_handle_ping ( void * ,
xdg_wm_base * xdg_wm_base,
const uint32_t serial )
static

Definition at line 6432 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ sub_abs_u64()

static uint64_t sub_abs_u64 ( const uint64_t a,
const uint64_t b )
static

Definition at line 1916 of file GHOST_SystemWayland.cc.

References b.

Referenced by GHOST_SystemWayland::ms_from_input_time().

◆ system_clipboard_get()

◆ system_clipboard_get_primary_selection()

◆ system_clipboard_put()

◆ system_clipboard_put_primary_selection()

◆ system_clipboard_text_mime_type()

static const char * system_clipboard_text_mime_type ( const std::unordered_set< std::string > & data_offer_types)
static

Return a mime type which is supported by GHOST and exists in types (defined by the data offer).

Definition at line 7720 of file GHOST_SystemWayland.cc.

References ARRAY_SIZE, ghost_wl_mime_text_plain, and ghost_wl_mime_text_utf8.

Referenced by system_clipboard_get(), and system_clipboard_get_primary_selection().

◆ tablet_seat_handle_pad_added()

static void tablet_seat_handle_pad_added ( void * ,
zwp_tablet_seat_v2 * ,
zwp_tablet_pad_v2 * id )
static

Definition at line 5009 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ tablet_seat_handle_tablet_added()

static void tablet_seat_handle_tablet_added ( void * ,
zwp_tablet_seat_v2 * ,
zwp_tablet_v2 * id )
static

Definition at line 4980 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ tablet_seat_handle_tool_added()

static void tablet_seat_handle_tool_added ( void * data,
zwp_tablet_seat_v2 * ,
zwp_tablet_tool_v2 * id )
static

◆ tablet_tool_handle_button()

static void tablet_tool_handle_button ( void * data,
zwp_tablet_tool_v2 * ,
const uint32_t serial,
const uint32_t button,
const uint32_t state )
static

◆ tablet_tool_handle_capability()

static void tablet_tool_handle_capability ( void * ,
zwp_tablet_tool_v2 * ,
const uint32_t capability )
static

Definition at line 4630 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ tablet_tool_handle_distance()

static void tablet_tool_handle_distance ( void * ,
zwp_tablet_tool_v2 * ,
const uint32_t distance )
static

Definition at line 4760 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ tablet_tool_handle_done()

static void tablet_tool_handle_done ( void * ,
zwp_tablet_tool_v2 *  )
static

Definition at line 4644 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ tablet_tool_handle_down()

static void tablet_tool_handle_down ( void * data,
zwp_tablet_tool_v2 * ,
const uint32_t serial )
static

◆ tablet_tool_handle_frame()

◆ tablet_tool_handle_hardware_id_wacom()

static void tablet_tool_handle_hardware_id_wacom ( void * ,
zwp_tablet_tool_v2 * ,
const uint32_t ,
const uint32_t  )
static

Definition at line 4622 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ tablet_tool_handle_hardware_serial()

static void tablet_tool_handle_hardware_serial ( void * ,
zwp_tablet_tool_v2 * ,
const uint32_t ,
const uint32_t  )
static

Definition at line 4614 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ tablet_tool_handle_motion()

static void tablet_tool_handle_motion ( void * data,
zwp_tablet_tool_v2 * ,
const wl_fixed_t x,
const wl_fixed_t y )
static

◆ tablet_tool_handle_pressure()

static void tablet_tool_handle_pressure ( void * data,
zwp_tablet_tool_v2 * ,
const uint32_t pressure )
static

◆ tablet_tool_handle_proximity_in()

◆ tablet_tool_handle_proximity_out()

static void tablet_tool_handle_proximity_out ( void * data,
zwp_tablet_tool_v2 *  )
static

Definition at line 4697 of file GHOST_SystemWayland.cc.

References CLOG_INFO, data, LOG, and GWL_TabletTool::proximity.

◆ tablet_tool_handle_removed()

static void tablet_tool_handle_removed ( void * data,
zwp_tablet_tool_v2 * zwp_tablet_tool_v2 )
static

◆ tablet_tool_handle_rotation()

static void tablet_tool_handle_rotation ( void * ,
zwp_tablet_tool_v2 * ,
const wl_fixed_t degrees )
static

Definition at line 4786 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ tablet_tool_handle_slider()

static void tablet_tool_handle_slider ( void * ,
zwp_tablet_tool_v2 * ,
const int32_t position )
static

Definition at line 4793 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ tablet_tool_handle_tilt()

static void tablet_tool_handle_tilt ( void * data,
zwp_tablet_tool_v2 * ,
const wl_fixed_t tilt_x,
const wl_fixed_t tilt_y )
static

◆ tablet_tool_handle_type()

static void tablet_tool_handle_type ( void * data,
zwp_tablet_tool_v2 * ,
const uint32_t tool_type )
static

◆ tablet_tool_handle_up()

static void tablet_tool_handle_up ( void * data,
zwp_tablet_tool_v2 *  )
static

◆ tablet_tool_handle_wheel()

static void tablet_tool_handle_wheel ( void * data,
zwp_tablet_tool_v2 * ,
const wl_fixed_t ,
const int32_t clicks )
static

◆ tablet_tool_map_type()

static GHOST_TTabletMode tablet_tool_map_type ( enum zwp_tablet_tool_v2_type wp_tablet_tool_type)
static

◆ thread_set_min_priority()

static void thread_set_min_priority ( std::thread & thread)
static

Definition at line 2335 of file GHOST_SystemWayland.cc.

References pthread_set_min_priority().

Referenced by gwl_seat_cursor_anim_begin().

◆ touch_seat_handle_cancel()

static void touch_seat_handle_cancel ( void * ,
wl_touch *  )
static

Definition at line 4559 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ touch_seat_handle_down()

static void touch_seat_handle_down ( void * ,
wl_touch * ,
uint32_t ,
uint32_t ,
wl_surface * ,
int32_t ,
wl_fixed_t ,
wl_fixed_t  )
static

Definition at line 4523 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ touch_seat_handle_frame()

static void touch_seat_handle_frame ( void * ,
wl_touch *  )
static

Definition at line 4554 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ touch_seat_handle_motion()

static void touch_seat_handle_motion ( void * ,
wl_touch * ,
uint32_t ,
int32_t ,
wl_fixed_t ,
wl_fixed_t  )
static

Definition at line 4544 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ touch_seat_handle_orientation()

static void touch_seat_handle_orientation ( void * ,
wl_touch * ,
int32_t ,
wl_fixed_t  )
static

Definition at line 4574 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ touch_seat_handle_shape()

static void touch_seat_handle_shape ( void * ,
wl_touch * ,
int32_t ,
wl_fixed_t ,
wl_fixed_t  )
static

Definition at line 4565 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ touch_seat_handle_up()

static void touch_seat_handle_up ( void * ,
wl_touch * ,
uint32_t ,
uint32_t ,
int32_t  )
static

Definition at line 4535 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ update_cursor_scale()

◆ xdg_output_handle_description()

static void xdg_output_handle_description ( void * ,
zxdg_output_v1 * ,
const char * description )
static

Definition at line 6280 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ xdg_output_handle_done()

static void xdg_output_handle_done ( void * data,
zxdg_output_v1 *  )
static

Definition at line 6262 of file GHOST_SystemWayland.cc.

References CLOG_INFO, data, LOG, and output_handle_done().

◆ xdg_output_handle_logical_position()

static void xdg_output_handle_logical_position ( void * data,
zxdg_output_v1 * ,
const int32_t x,
const int32_t y )
static

Definition at line 6213 of file GHOST_SystemWayland.cc.

References CLOG_INFO, data, LOG, GWL_Output::position_logical, x, and y.

◆ xdg_output_handle_logical_size()

static void xdg_output_handle_logical_size ( void * data,
zxdg_output_v1 * ,
const int32_t width,
const int32_t height )
static

◆ xdg_output_handle_name()

static void xdg_output_handle_name ( void * ,
zxdg_output_v1 * ,
const char * name )
static

Definition at line 6273 of file GHOST_SystemWayland.cc.

References CLOG_INFO, and LOG.

◆ xkb_compose_state_feed_and_get_utf8()

static bool xkb_compose_state_feed_and_get_utf8 ( xkb_compose_state * compose_state,
xkb_state * state,
const xkb_keycode_t key,
char r_utf8_buf[sizeof(GHOST_TEventKeyData::utf8_buf)] )
static

◆ xkb_map_gkey()

◆ xkb_map_gkey_or_scan_code()

static GHOST_TKey xkb_map_gkey_or_scan_code ( const xkb_keysym_t sym,
const uint32_t key )
static

Map the keys using the users keyboard layout, if that fails fall back to physical locations. This is needed so users with keyboard layouts that don't expose GHOST_kKeyAccentGrave (typically the key under escape) in the layout can still use this key in keyboard shortcuts.

Parameters
keyThe key's scan-code, compatible with values in linux/input-event-codes.h.

Definition at line 2165 of file GHOST_SystemWayland.cc.

References GHOST_kKeyAccentGrave, GHOST_kKeyGrLess, GHOST_kKeyUnknown, GHOST_PRINT, KEY_102ND, KEY_GRAVE, UNLIKELY, and xkb_map_gkey().

Referenced by keyboard_handle_enter(), and keyboard_handle_key().

◆ xkb_state_key_get_one_sym_without_modifiers()

static xkb_keysym_t xkb_state_key_get_one_sym_without_modifiers ( xkb_state * xkb_state_empty,
xkb_state * xkb_state_empty_with_numlock,
xkb_state * xkb_state_empty_with_shift,
const bool xkb_use_non_latin_workaround,
const xkb_keycode_t key )
static

A version of #xkb_state_key_get_one_sym which returns the key without any modifiers pressed. Needed because GHOST_TKey uses these values as key-codes.

Definition at line 5251 of file GHOST_SystemWayland.cc.

References EVDEV_OFFSET, GHOST_ASSERT, KEY_0, and KEY_1.

Referenced by keyboard_handle_key().

Variable Documentation

◆ cursor_buffer_listener

const wl_buffer_listener cursor_buffer_listener
static
Initial value:
= {
}
static void cursor_buffer_handle_release(void *data, wl_buffer *wl_buffer)

Definition at line 3725 of file GHOST_SystemWayland.cc.

Referenced by GHOST_SystemWayland::cursor_shape_custom_set().

◆ cursor_surface_listener

const wl_surface_listener cursor_surface_listener
static
Initial value:
= {
}
static void cursor_surface_handle_enter(void *data, wl_surface *wl_surface, wl_output *wl_output)
static void cursor_surface_handle_leave(void *data, wl_surface *wl_surface, wl_output *wl_output)

Definition at line 3842 of file GHOST_SystemWayland.cc.

Referenced by gwl_seat_capability_pointer_enable(), and tablet_seat_handle_tool_added().

◆ data_device_listener

const wl_data_device_listener data_device_listener
static
Initial value:
= {
}
static void data_device_handle_drop(void *data, wl_data_device *)
static void data_device_handle_selection(void *data, wl_data_device *, wl_data_offer *id)
static void data_device_handle_data_offer(void *, wl_data_device *, wl_data_offer *id)
static void data_device_handle_leave(void *data, wl_data_device *)
static void data_device_handle_motion(void *data, wl_data_device *, const uint32_t time, const wl_fixed_t x, const wl_fixed_t y)
static void data_device_handle_enter(void *data, wl_data_device *, const uint32_t serial, wl_surface *wl_surface, const wl_fixed_t x, const wl_fixed_t y, wl_data_offer *id)

Definition at line 3692 of file GHOST_SystemWayland.cc.

Referenced by gwl_registry_wl_seat_update().

◆ data_offer_listener

const wl_data_offer_listener data_offer_listener
static
Initial value:
= {
}
static void data_offer_handle_source_actions(void *data, wl_data_offer *, const uint32_t source_actions)
static void data_offer_handle_action(void *data, wl_data_offer *, const uint32_t dnd_action)
static void data_offer_handle_offer(void *data, wl_data_offer *, const char *mime_type)

Definition at line 3385 of file GHOST_SystemWayland.cc.

Referenced by data_device_handle_data_offer().

◆ data_source_listener

const wl_data_source_listener data_source_listener
static
Initial value:
= {
}
static void data_source_handle_target(void *, wl_data_source *, const char *)
static void data_source_handle_cancelled(void *data, wl_data_source *wl_data_source)
static void data_source_handle_send(void *data, wl_data_source *, const char *, const int32_t fd)
static void data_source_handle_dnd_finished(void *, wl_data_source *)
static void data_source_handle_action(void *, wl_data_source *, const uint32_t dnd_action)
static void data_source_handle_dnd_drop_performed(void *, wl_data_source *)

Definition at line 3338 of file GHOST_SystemWayland.cc.

Referenced by GHOST_SystemWayland::putClipboardImage(), and system_clipboard_put().

◆ default_cursor_size

const int default_cursor_size = 24
static

Definition at line 2233 of file GHOST_SystemWayland.cc.

Referenced by gwl_seat_capability_pointer_enable().

◆ events_pending_default_size

size_t events_pending_default_size = 4096 / sizeof(void *)
constexpr

Default size for pending event vector.

Definition at line 155 of file GHOST_SystemWayland.cc.

Referenced by gwl_display_event_thread_create(), and GHOST_SystemWayland::processEvents().

◆ g_modifier_info_table

const GWL_ModifierInfo g_modifier_info_table[MOD_INDEX_NUM]
static

◆ ghost_wayland_log_handler_is_background

bool ghost_wayland_log_handler_is_background = false
static

◆ ghost_wl_app_id

const char* ghost_wl_app_id
static
Initial value:
= (
"blender"
)

Definition at line 8862 of file GHOST_SystemWayland.cc.

Referenced by GHOST_SystemWayland::xdg_app_id_get().

◆ ghost_wl_cursors

const GWL_Cursor_ShapeInfo ghost_wl_cursors
static

Definition at line 2239 of file GHOST_SystemWayland.cc.

Referenced by gwl_seat_cursor_find_from_shape().

◆ ghost_wl_mime_img_png

const char* ghost_wl_mime_img_png = "image/png"
staticconstexpr

◆ ghost_wl_mime_preference_order

const char* ghost_wl_mime_preference_order[]
static
Initial value:
= {
}
static constexpr const char * ghost_wl_mime_text_plain
static constexpr const char * ghost_wl_mime_text_uri
static constexpr const char * ghost_wl_mime_text_utf8

Definition at line 2303 of file GHOST_SystemWayland.cc.

Referenced by data_device_handle_drop(), and data_device_handle_enter().

◆ ghost_wl_mime_preference_order_type

const GHOST_TDragnDropTypes ghost_wl_mime_preference_order_type[]
static
Initial value:

Definition at line 2309 of file GHOST_SystemWayland.cc.

Referenced by dnd_events().

◆ ghost_wl_mime_send

const char* ghost_wl_mime_send[]
static
Initial value:
= {
"UTF8_STRING",
"COMPOUND_TEXT",
"TEXT",
"STRING",
"text/plain;charset=utf-8",
"text/plain",
}

Definition at line 2315 of file GHOST_SystemWayland.cc.

Referenced by system_clipboard_put(), and system_clipboard_put_primary_selection().

◆ ghost_wl_mime_text_plain

const char* ghost_wl_mime_text_plain = "text/plain"
staticconstexpr

◆ ghost_wl_mime_text_uri

const char* ghost_wl_mime_text_uri = "text/uri-list"
staticconstexpr

Definition at line 2301 of file GHOST_SystemWayland.cc.

Referenced by data_device_handle_drop().

◆ ghost_wl_mime_text_utf8

const char* ghost_wl_mime_text_utf8 = "text/plain;charset=utf-8"
staticconstexpr

◆ ghost_wl_output_tag_id

const char* ghost_wl_output_tag_id = "GHOST-output"
static

Definition at line 8754 of file GHOST_SystemWayland.cc.

Referenced by ghost_wl_output_own(), and ghost_wl_output_tag().

◆ ghost_wl_surface_cursor_pointer_tag_id

const char* ghost_wl_surface_cursor_pointer_tag_id = "GHOST-cursor-pointer"
static

◆ ghost_wl_surface_cursor_tablet_tag_id

const char* ghost_wl_surface_cursor_tablet_tag_id = "GHOST-cursor-tablet"
static

◆ ghost_wl_surface_tag_id

const char* ghost_wl_surface_tag_id = "GHOST-window"
static

Definition at line 8755 of file GHOST_SystemWayland.cc.

Referenced by ghost_wl_surface_own(), and ghost_wl_surface_tag().

◆ gwl_pointer_events_ebutton

const GHOST_TButton gwl_pointer_events_ebutton[]
static
Initial value:

Definition at line 749 of file GHOST_SystemWayland.cc.

Referenced by pointer_handle_frame().

◆ gwl_registry_handlers

const GWL_RegistryHandler gwl_registry_handlers[]
static

Map interfaces to initialization functions.

Note
This list also defines the order interfaces are removed. On exit interface removal runs from last to first to avoid potential bugs caused by undefined order of removal.

In general fundamental, low level objects such as the compositor and shared memory should be declared earlier and other interfaces that may use them should be declared later.

Definition at line 7064 of file GHOST_SystemWayland.cc.

Referenced by global_handle_add(), global_handle_remove(), gwl_registry_handler_from_interface_slot(), gwl_registry_handler_interface_slot_from_string(), and gwl_registry_handler_interface_slot_max().

◆ gwl_tablet_tool_ebutton

const GHOST_TButton gwl_tablet_tool_ebutton[]
static

◆ has_wl_trackpad_physical_direction

signed char has_wl_trackpad_physical_direction = -1
static

◆ keyboard_listener

const wl_keyboard_listener keyboard_listener
static
Initial value:
= {
}
static void keyboard_handle_repeat_info(void *data, wl_keyboard *, const int32_t rate, const int32_t delay)
static void keyboard_handle_modifiers(void *data, wl_keyboard *, const uint32_t serial, const uint32_t mods_depressed, const uint32_t mods_latched, const uint32_t mods_locked, const uint32_t group)
static void keyboard_handle_keymap(void *data, wl_keyboard *, const uint32_t format, const int32_t fd, const uint32_t size)
static void keyboard_handle_key(void *data, wl_keyboard *, const uint32_t serial, const uint32_t time, const uint32_t key, const uint32_t state)
static void keyboard_handle_leave(void *data, wl_keyboard *, const uint32_t, wl_surface *wl_surface)
static void keyboard_handle_enter(void *data, wl_keyboard *, const uint32_t serial, wl_surface *wl_surface, wl_array *keys)

Definition at line 5571 of file GHOST_SystemWayland.cc.

Referenced by gwl_seat_capability_keyboard_enable().

◆ LOG_WL_CURSOR_BUFFER

CLG_LogRef LOG_WL_CURSOR_BUFFER = {"ghost.wl.handle.cursor_buffer"}
static

Definition at line 3709 of file GHOST_SystemWayland.cc.

◆ LOG_WL_CURSOR_SURFACE

CLG_LogRef LOG_WL_CURSOR_SURFACE = {"ghost.wl.handle.cursor_surface"}
static

Definition at line 3737 of file GHOST_SystemWayland.cc.

◆ LOG_WL_DATA_DEVICE

CLG_LogRef LOG_WL_DATA_DEVICE = {"ghost.wl.handle.data_device"}
static

Definition at line 3399 of file GHOST_SystemWayland.cc.

◆ LOG_WL_DATA_OFFER

CLG_LogRef LOG_WL_DATA_OFFER = {"ghost.wl.handle.data_offer"}
static

Definition at line 3355 of file GHOST_SystemWayland.cc.

◆ LOG_WL_DATA_SOURCE

CLG_LogRef LOG_WL_DATA_SOURCE = {"ghost.wl.handle.data_source"}
static

Definition at line 3162 of file GHOST_SystemWayland.cc.

◆ LOG_WL_KEYBOARD

CLG_LogRef LOG_WL_KEYBOARD = {"ghost.wl.handle.keyboard"}
static

Definition at line 5030 of file GHOST_SystemWayland.cc.

◆ LOG_WL_KEYBOARD_DEPRESSED_STATE

CLG_LogRef LOG_WL_KEYBOARD_DEPRESSED_STATE = {"ghost.wl.keyboard.depressed"}
static

Definition at line 3018 of file GHOST_SystemWayland.cc.

Referenced by GHOST_SystemWayland::getModifierKeys().

◆ LOG_WL_OUTPUT

CLG_LogRef LOG_WL_OUTPUT = {"ghost.wl.handle.output"}
static

Definition at line 6303 of file GHOST_SystemWayland.cc.

◆ LOG_WL_POINTER

CLG_LogRef LOG_WL_POINTER = {"ghost.wl.handle.pointer"}
static

Definition at line 3860 of file GHOST_SystemWayland.cc.

◆ LOG_WL_PRIMARY_SELECTION_DEVICE

CLG_LogRef LOG_WL_PRIMARY_SELECTION_DEVICE = {"ghost.wl.handle.primary_selection_device"}
static

Definition at line 5616 of file GHOST_SystemWayland.cc.

◆ LOG_WL_PRIMARY_SELECTION_OFFER

CLG_LogRef LOG_WL_PRIMARY_SELECTION_OFFER = {"ghost.wl.handle.primary_selection_offer"}
static

Definition at line 5588 of file GHOST_SystemWayland.cc.

◆ LOG_WL_PRIMARY_SELECTION_SOURCE

CLG_LogRef LOG_WL_PRIMARY_SELECTION_SOURCE = {"ghost.wl.handle.primary_selection_source"}
static

Definition at line 5669 of file GHOST_SystemWayland.cc.

◆ LOG_WL_REGISTRY

CLG_LogRef LOG_WL_REGISTRY = {"ghost.wl.handle.registry"}
static

Definition at line 6481 of file GHOST_SystemWayland.cc.

◆ LOG_WL_RELATIVE_POINTER

CLG_LogRef LOG_WL_RELATIVE_POINTER = {"ghost.wl.handle.relative_pointer"}
static

Definition at line 3089 of file GHOST_SystemWayland.cc.

◆ LOG_WL_SEAT

CLG_LogRef LOG_WL_SEAT = {"ghost.wl.handle.seat"}
static

Definition at line 5926 of file GHOST_SystemWayland.cc.

◆ LOG_WL_TABLET_SEAT

CLG_LogRef LOG_WL_TABLET_SEAT = {"ghost.wl.handle.tablet_seat"}
static

Definition at line 4977 of file GHOST_SystemWayland.cc.

◆ LOG_WL_TABLET_TOOL

CLG_LogRef LOG_WL_TABLET_TOOL = {"ghost.wl.handle.tablet_tool"}
static

Definition at line 4600 of file GHOST_SystemWayland.cc.

◆ LOG_WL_TOUCH

CLG_LogRef LOG_WL_TOUCH = {"ghost.wl.handle.touch"}
static

Definition at line 4520 of file GHOST_SystemWayland.cc.

◆ LOG_WL_XDG_OUTPUT

CLG_LogRef LOG_WL_XDG_OUTPUT = {"ghost.wl.handle.xdg_output"}
static

Definition at line 6210 of file GHOST_SystemWayland.cc.

◆ LOG_WL_XDG_WM_BASE

CLG_LogRef LOG_WL_XDG_WM_BASE = {"ghost.wl.handle.xdg_wm_base"}
static

Definition at line 6429 of file GHOST_SystemWayland.cc.

◆ output_listener

const wl_output_listener output_listener
static
Initial value:
= {
}
static void output_handle_geometry(void *data, wl_output *, const int32_t, const int32_t, const int32_t physical_width, const int32_t physical_height, const int32_t, const char *make, const char *model, const int32_t transform)
static void output_handle_done(void *data, wl_output *wl_output)
static void output_handle_scale(void *data, wl_output *, const int32_t factor)
static void output_handle_mode(void *data, wl_output *, const uint32_t flags, const int32_t width, const int32_t height, const int32_t)
static void output_handle_description(void *, wl_output *, const char *description)
static void output_handle_name(void *, wl_output *, const char *name)

Definition at line 6412 of file GHOST_SystemWayland.cc.

Referenced by gwl_registry_wl_output_add().

◆ pointer_listener

const wl_pointer_listener pointer_listener
static
Initial value:
= {
}
static void pointer_handle_frame(void *data, wl_pointer *)
static void pointer_handle_axis(void *data, wl_pointer *, const uint32_t time, const uint32_t axis, const wl_fixed_t value)
static void pointer_handle_axis_value120(void *data, wl_pointer *, uint32_t axis, int32_t value120)
static void pointer_handle_axis_stop(void *data, wl_pointer *, uint32_t time, uint32_t axis)
static void pointer_handle_button(void *data, wl_pointer *, const uint32_t serial, const uint32_t time, const uint32_t button, const uint32_t state)
static void pointer_handle_axis_discrete(void *data, wl_pointer *, uint32_t axis, int32_t discrete)
static void pointer_handle_enter(void *data, wl_pointer *, const uint32_t serial, wl_surface *wl_surface, const wl_fixed_t surface_x, const wl_fixed_t surface_y)
static void pointer_handle_axis_source(void *data, wl_pointer *, uint32_t axis_source)
static void pointer_handle_motion(void *data, wl_pointer *, const uint32_t time, const wl_fixed_t surface_x, const wl_fixed_t surface_y)
static void pointer_handle_leave(void *data, wl_pointer *, const uint32_t, wl_surface *wl_surface)

Definition at line 4250 of file GHOST_SystemWayland.cc.

Referenced by gwl_seat_capability_pointer_enable().

◆ primary_selection_device_listener

const zwp_primary_selection_device_v1_listener primary_selection_device_listener
static
Initial value:
= {
}
static void primary_selection_device_handle_selection(void *data, zwp_primary_selection_device_v1 *, zwp_primary_selection_offer_v1 *id)
static void primary_selection_device_handle_data_offer(void *, zwp_primary_selection_device_v1 *, zwp_primary_selection_offer_v1 *id)

Definition at line 5656 of file GHOST_SystemWayland.cc.

Referenced by gwl_registry_wl_seat_update().

◆ primary_selection_offer_listener

const zwp_primary_selection_offer_v1_listener primary_selection_offer_listener
static
Initial value:
= {
}
static void primary_selection_offer_offer(void *data, zwp_primary_selection_offer_v1 *id, const char *type)

Definition at line 5604 of file GHOST_SystemWayland.cc.

Referenced by primary_selection_device_handle_data_offer().

◆ primary_selection_source_listener

const zwp_primary_selection_source_v1_listener primary_selection_source_listener
static
Initial value:
= {
}
static void primary_selection_source_send(void *data, zwp_primary_selection_source_v1 *, const char *, int32_t fd)
static void primary_selection_source_cancelled(void *data, zwp_primary_selection_source_v1 *source)

Definition at line 5708 of file GHOST_SystemWayland.cc.

Referenced by system_clipboard_put_primary_selection().

◆ registry_listener

const wl_registry_listener registry_listener
static
Initial value:
= {
}
static void global_handle_add(void *data, wl_registry *wl_registry, const uint32_t name, const char *interface, const uint32_t version)
static void global_handle_remove(void *data, wl_registry *wl_registry, const uint32_t name)

Definition at line 7286 of file GHOST_SystemWayland.cc.

Referenced by GHOST_SystemWayland::GHOST_SystemWayland().

◆ relative_pointer_listener

const zwp_relative_pointer_v1_listener relative_pointer_listener
static
Initial value:
= {
}
static void relative_pointer_handle_relative_motion(void *data, zwp_relative_pointer_v1 *, const uint32_t utime_hi, const uint32_t utime_lo, const wl_fixed_t dx, const wl_fixed_t dy, const wl_fixed_t, const wl_fixed_t)

Definition at line 3150 of file GHOST_SystemWayland.cc.

Referenced by GHOST_SystemWayland::window_cursor_grab_set().

◆ seat_listener

const wl_seat_listener seat_listener
static
Initial value:
= {
}
static void seat_handle_capabilities(void *data, wl_seat *wl_seat, const uint32_t capabilities)
static void seat_handle_name(void *data, wl_seat *, const char *name)

Definition at line 6197 of file GHOST_SystemWayland.cc.

Referenced by gwl_registry_wl_seat_add().

◆ shell_listener

const xdg_wm_base_listener shell_listener
static
Initial value:
= {
}
static void shell_handle_ping(void *, xdg_wm_base *xdg_wm_base, const uint32_t serial)

Definition at line 6438 of file GHOST_SystemWayland.cc.

Referenced by gwl_registry_xdg_wm_base_add().

◆ smooth_as_discrete_steps

int smooth_as_discrete_steps = 2400
staticconstexpr

Number of smooth steps for a discrete step (matches X11 for touch-pads).

Definition at line 815 of file GHOST_SystemWayland.cc.

Referenced by pointer_handle_frame().

◆ tablet_seat_listener

const zwp_tablet_seat_v2_listener tablet_seat_listener
static
Initial value:
= {
}
static void tablet_seat_handle_tool_added(void *data, zwp_tablet_seat_v2 *, zwp_tablet_tool_v2 *id)
static void tablet_seat_handle_tablet_added(void *, zwp_tablet_seat_v2 *, zwp_tablet_v2 *id)
static void tablet_seat_handle_pad_added(void *, zwp_tablet_seat_v2 *, zwp_tablet_pad_v2 *id)

Definition at line 5016 of file GHOST_SystemWayland.cc.

Referenced by gwl_registry_wl_seat_update().

◆ tablet_tool_listner

const zwp_tablet_tool_v2_listener tablet_tool_listner
static
Initial value:
= {
}
static void tablet_tool_handle_button(void *data, zwp_tablet_tool_v2 *, const uint32_t serial, const uint32_t button, const uint32_t state)
static void tablet_tool_handle_distance(void *, zwp_tablet_tool_v2 *, const uint32_t distance)
static void tablet_tool_handle_type(void *data, zwp_tablet_tool_v2 *, const uint32_t tool_type)
static void tablet_tool_handle_proximity_out(void *data, zwp_tablet_tool_v2 *)
static void tablet_tool_handle_done(void *, zwp_tablet_tool_v2 *)
static void tablet_tool_handle_frame(void *data, zwp_tablet_tool_v2 *, const uint32_t time)
static void tablet_tool_handle_hardware_id_wacom(void *, zwp_tablet_tool_v2 *, const uint32_t, const uint32_t)
static void tablet_tool_handle_motion(void *data, zwp_tablet_tool_v2 *, const wl_fixed_t x, const wl_fixed_t y)
static void tablet_tool_handle_hardware_serial(void *, zwp_tablet_tool_v2 *, const uint32_t, const uint32_t)
static void tablet_tool_handle_tilt(void *data, zwp_tablet_tool_v2 *, const wl_fixed_t tilt_x, const wl_fixed_t tilt_y)
static void tablet_tool_handle_removed(void *data, zwp_tablet_tool_v2 *zwp_tablet_tool_v2)
static void tablet_tool_handle_capability(void *, zwp_tablet_tool_v2 *, const uint32_t capability)
static void tablet_tool_handle_rotation(void *, zwp_tablet_tool_v2 *, const wl_fixed_t degrees)
static void tablet_tool_handle_proximity_in(void *data, zwp_tablet_tool_v2 *, const uint32_t serial, zwp_tablet_v2 *, wl_surface *wl_surface)
static void tablet_tool_handle_wheel(void *data, zwp_tablet_tool_v2 *, const wl_fixed_t, const int32_t clicks)
static void tablet_tool_handle_down(void *data, zwp_tablet_tool_v2 *, const uint32_t serial)
static void tablet_tool_handle_up(void *data, zwp_tablet_tool_v2 *)
static void tablet_tool_handle_slider(void *, zwp_tablet_tool_v2 *, const int32_t position)
static void tablet_tool_handle_pressure(void *data, zwp_tablet_tool_v2 *, const uint32_t pressure)

Definition at line 4947 of file GHOST_SystemWayland.cc.

Referenced by tablet_seat_handle_tool_added().

◆ touch_seat_listener

const wl_touch_listener touch_seat_listener
static
Initial value:
= {
}
static void touch_seat_handle_cancel(void *, wl_touch *)
static void touch_seat_handle_orientation(void *, wl_touch *, int32_t, wl_fixed_t)
static void touch_seat_handle_up(void *, wl_touch *, uint32_t, uint32_t, int32_t)
static void touch_seat_handle_shape(void *, wl_touch *, int32_t, wl_fixed_t, wl_fixed_t)
static void touch_seat_handle_motion(void *, wl_touch *, uint32_t, int32_t, wl_fixed_t, wl_fixed_t)
static void touch_seat_handle_down(void *, wl_touch *, uint32_t, uint32_t, wl_surface *, int32_t, wl_fixed_t, wl_fixed_t)
static void touch_seat_handle_frame(void *, wl_touch *)

Definition at line 4582 of file GHOST_SystemWayland.cc.

Referenced by gwl_seat_capability_touch_enable().

◆ use_gnome_confine_hack

bool use_gnome_confine_hack = false
static

Always use software confine (not just in GNOME). Useful for developing with compositors that don't need this workaround.

Definition at line 184 of file GHOST_SystemWayland.cc.

Referenced by setCursorGrab_use_software_confine(), and xdg_output_handle_logical_size().

◆ xdg_output_listener

const zxdg_output_v1_listener xdg_output_listener
static
Initial value:
= {
}
static void xdg_output_handle_name(void *, zxdg_output_v1 *, const char *name)
static void xdg_output_handle_description(void *, zxdg_output_v1 *, const char *description)
static void xdg_output_handle_logical_position(void *data, zxdg_output_v1 *, const int32_t x, const int32_t y)
static void xdg_output_handle_logical_size(void *data, zxdg_output_v1 *, const int32_t width, const int32_t height)
static void xdg_output_handle_done(void *data, zxdg_output_v1 *)

Definition at line 6287 of file GHOST_SystemWayland.cc.

Referenced by gwl_registry_wl_output_update().