mirror of
https://github.com/labwc/labwc.git
synced 2025-11-02 09:01:47 -05:00
partial libinput configuration
This commit is contained in:
parent
6a00166cff
commit
3dc4c02c54
3 changed files with 102 additions and 4 deletions
|
|
@ -4,6 +4,7 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <wayland-server-core.h>
|
#include <wayland-server-core.h>
|
||||||
|
#include <libinput.h>
|
||||||
|
|
||||||
#include "common/buf.h"
|
#include "common/buf.h"
|
||||||
|
|
||||||
|
|
@ -21,6 +22,13 @@ struct rcxml {
|
||||||
struct wl_list keybinds;
|
struct wl_list keybinds;
|
||||||
struct wl_list mousebinds;
|
struct wl_list mousebinds;
|
||||||
long doubleclick_time; /* in ms */
|
long doubleclick_time; /* in ms */
|
||||||
|
float pointer_speed;
|
||||||
|
int natural_scroll;
|
||||||
|
int left_handed;
|
||||||
|
enum libinput_config_tap_state tap;
|
||||||
|
enum libinput_config_accel_profile accel_profile;
|
||||||
|
enum libinput_config_middle_emulation_state middle_emu;
|
||||||
|
enum libinput_config_dwt_state dwt;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct rcxml rc;
|
extern struct rcxml rc;
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,21 @@ get_bool(const char *s)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum libinput_config_accel_profile
|
||||||
|
get_accel_profile(const char *s)
|
||||||
|
{
|
||||||
|
if (!s) {
|
||||||
|
return LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT;
|
||||||
|
}
|
||||||
|
if (!strcasecmp(s, "flat")) {
|
||||||
|
return LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT;
|
||||||
|
}
|
||||||
|
if (!strcasecmp(s, "adaptive")) {
|
||||||
|
return LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE;
|
||||||
|
}
|
||||||
|
return LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fill_font(char *nodename, char *content, enum font_place place)
|
fill_font(char *nodename, char *content, enum font_place place)
|
||||||
{
|
{
|
||||||
|
|
@ -238,6 +253,24 @@ entry(xmlNode *node, char *nodename, char *content)
|
||||||
}
|
}
|
||||||
} else if (!strcasecmp(nodename, "name.context.mouse")) {
|
} else if (!strcasecmp(nodename, "name.context.mouse")) {
|
||||||
current_mouse_context = content;
|
current_mouse_context = content;
|
||||||
|
} else if (!strcasecmp(nodename, "PointerSpeed.libinput")) {
|
||||||
|
rc.pointer_speed = atof(content);
|
||||||
|
} else if (!strcasecmp(nodename, "NaturalScroll.libinput")) {
|
||||||
|
rc.natural_scroll = get_bool(content) ? 1 : 0;
|
||||||
|
} else if (!strcasecmp(nodename, "LeftHanded.libinput")) {
|
||||||
|
rc.left_handed = get_bool(content) ? 1 : 0;
|
||||||
|
} else if (!strcasecmp(nodename, "Tap.libinput")) {
|
||||||
|
rc.tap = get_bool(content) ? LIBINPUT_CONFIG_TAP_ENABLED :
|
||||||
|
LIBINPUT_CONFIG_TAP_DISABLED;
|
||||||
|
} else if (!strcasecmp(nodename, "MiddleEmulation.libinput")) {
|
||||||
|
rc.middle_emu = get_bool(content) ?
|
||||||
|
LIBINPUT_CONFIG_MIDDLE_EMULATION_ENABLED :
|
||||||
|
LIBINPUT_CONFIG_MIDDLE_EMULATION_DISABLED;
|
||||||
|
} else if (!strcasecmp(nodename, "DisableWhileTyping.libinput")) {
|
||||||
|
rc.dwt = get_bool(content) ? LIBINPUT_CONFIG_DWT_ENABLED :
|
||||||
|
LIBINPUT_CONFIG_DWT_DISABLED;
|
||||||
|
} else if (!strcasecmp(nodename, "AccelerationProfile.libinput")) {
|
||||||
|
rc.accel_profile = get_accel_profile(content);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -322,6 +355,13 @@ rcxml_init()
|
||||||
rc.font_size_activewindow = 10;
|
rc.font_size_activewindow = 10;
|
||||||
rc.font_size_menuitem = 10;
|
rc.font_size_menuitem = 10;
|
||||||
rc.doubleclick_time = 500;
|
rc.doubleclick_time = 500;
|
||||||
|
rc.pointer_speed = -2;
|
||||||
|
rc.natural_scroll = -1;
|
||||||
|
rc.left_handed = -1;
|
||||||
|
rc.tap = LIBINPUT_CONFIG_TAP_ENABLED;
|
||||||
|
rc.accel_profile = -1;
|
||||||
|
rc.middle_emu = -1;
|
||||||
|
rc.dwt = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
|
|
|
||||||
58
src/seat.c
58
src/seat.c
|
|
@ -29,12 +29,62 @@ configure_libinput(struct wlr_input_device *wlr_input_device)
|
||||||
wlr_log(WLR_ERROR, "no libinput_dev");
|
wlr_log(WLR_ERROR, "no libinput_dev");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (libinput_device_config_tap_get_finger_count(libinput_dev) <= 0) {
|
if (libinput_device_config_tap_get_finger_count(libinput_dev) <= 0) {
|
||||||
return;
|
wlr_log(WLR_INFO, "tap unavailable");
|
||||||
|
} else {
|
||||||
|
wlr_log(WLR_INFO, "tap configured");
|
||||||
|
libinput_device_config_tap_set_enabled(libinput_dev, rc.tap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (libinput_device_config_scroll_has_natural_scroll(libinput_dev) <= 0
|
||||||
|
|| rc.natural_scroll < 0) {
|
||||||
|
wlr_log(WLR_INFO, "natural scroll not configured");
|
||||||
|
} else {
|
||||||
|
wlr_log(WLR_INFO, "natural scroll configured");
|
||||||
|
libinput_device_config_scroll_set_natural_scroll_enabled(
|
||||||
|
libinput_dev, rc.natural_scroll);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (libinput_device_config_left_handed_is_available(libinput_dev) <= 0
|
||||||
|
|| rc.left_handed < 0) {
|
||||||
|
wlr_log(WLR_INFO, "left-handed mode not configured");
|
||||||
|
} else {
|
||||||
|
wlr_log(WLR_INFO, "left-handed mode configured");
|
||||||
|
libinput_device_config_left_handed_set(libinput_dev,
|
||||||
|
rc.left_handed);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (libinput_device_config_accel_is_available(libinput_dev) == 0) {
|
||||||
|
wlr_log(WLR_INFO, "pointer acceleration unavailable");
|
||||||
|
} else {
|
||||||
|
wlr_log(WLR_INFO, "pointer acceleration configured");
|
||||||
|
if (rc.pointer_speed > -1) {
|
||||||
|
libinput_device_config_accel_set_speed(libinput_dev,
|
||||||
|
rc.pointer_speed);
|
||||||
|
}
|
||||||
|
if (rc.accel_profile > 0) {
|
||||||
|
libinput_device_config_accel_set_profile(libinput_dev,
|
||||||
|
rc.accel_profile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (libinput_device_config_middle_emulation_is_available(libinput_dev)
|
||||||
|
== 0 || rc.dwt < 0) {
|
||||||
|
wlr_log(WLR_INFO, "middle emulation not configured");
|
||||||
|
} else {
|
||||||
|
wlr_log(WLR_INFO, "middle emulation configured");
|
||||||
|
libinput_device_config_middle_emulation_set_enabled(
|
||||||
|
libinput_dev, rc.middle_emu);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (libinput_device_config_dwt_is_available(libinput_dev) == 0
|
||||||
|
|| rc.dwt < 0) {
|
||||||
|
wlr_log(WLR_INFO, "dwt not configured");
|
||||||
|
} else {
|
||||||
|
wlr_log(WLR_INFO, "dwt configured");
|
||||||
|
libinput_device_config_dwt_set_enabled(libinput_dev, rc.dwt);
|
||||||
}
|
}
|
||||||
wlr_log(WLR_INFO, "tap enabled");
|
|
||||||
libinput_device_config_tap_set_enabled(libinput_dev,
|
|
||||||
LIBINPUT_CONFIG_TAP_ENABLED);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue