Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libinput for openSUSE:Factory checked in at 2025-12-09 12:45:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libinput (Old) and /work/SRC/openSUSE:Factory/.libinput.new.1939 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libinput" Tue Dec 9 12:45:43 2025 rev:128 rq:1321537 version:1.30.1 Changes: -------- --- /work/SRC/openSUSE:Factory/libinput/libinput.changes 2025-11-27 15:18:54.054248927 +0100 +++ /work/SRC/openSUSE:Factory/.libinput.new.1939/libinput.changes 2025-12-09 12:46:20.941787735 +0100 @@ -1,0 +2,9 @@ +Mon Dec 8 10:09:17 UTC 2025 - Jan Engelhardt <[email protected]> + +- Update to release 1.30.1 + * Fixed a regression in the tablet handling code for some tablets + that send input events while being logically out of proximity. + * Support for the INPUT_PROP_PRESSUREPAD property available in + Linux kernel 6.18. + +------------------------------------------------------------------- Old: ---- libinput-1.30.0.tar.gz New: ---- libinput-1.30.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libinput.spec ++++++ --- /var/tmp/diff_new_pack.c84Aax/_old 2025-12-09 12:46:30.750202275 +0100 +++ /var/tmp/diff_new_pack.c84Aax/_new 2025-12-09 12:46:30.754202444 +0100 @@ -37,7 +37,7 @@ %define lname libinput10 %define pname libinput Name: libinput%{?xsuffix} -Version: 1.30.0 +Version: 1.30.1 Release: 0 Summary: Input device and event processing library License: MIT ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.c84Aax/_old 2025-12-09 12:46:30.810204811 +0100 +++ /var/tmp/diff_new_pack.c84Aax/_new 2025-12-09 12:46:30.814204980 +0100 @@ -1,5 +1,5 @@ -mtime: 1764049279 -commit: dd742e196bb44b6ee8e2ed47df56225668022d4f6855ef83d966b75aa2bfff35 +mtime: 1765188604 +commit: 27d121ec3f84ef42920eb355221d5c233f58ddd1b4cc28ca68e7ad361cba1fd1 url: https://src.opensuse.org/jengelh/libinput revision: master ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2025-12-08 11:10:44.000000000 +0100 @@ -0,0 +1 @@ +.osc ++++++ libinput-1.30.0.tar.gz -> libinput-1.30.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.30.0/include/linux/freebsd/input-event-codes.h new/libinput-1.30.1/include/linux/freebsd/input-event-codes.h --- old/libinput-1.30.0/include/linux/freebsd/input-event-codes.h 2025-11-25 04:40:43.000000000 +0100 +++ new/libinput-1.30.1/include/linux/freebsd/input-event-codes.h 2025-12-08 03:40:00.000000000 +0100 @@ -27,6 +27,7 @@ #define INPUT_PROP_TOPBUTTONPAD 0x04 /* softbuttons at top of pad */ #define INPUT_PROP_POINTING_STICK 0x05 /* is a pointing stick */ #define INPUT_PROP_ACCELEROMETER 0x06 /* has accelerometer */ +#define INPUT_PROP_PRESSUREPAD 0x07 /* pressure triggers clicks */ #define INPUT_PROP_MAX 0x1f #define INPUT_PROP_CNT (INPUT_PROP_MAX + 1) @@ -278,7 +279,8 @@ #define KEY_PAUSECD 201 #define KEY_PROG3 202 #define KEY_PROG4 203 -#define KEY_DASHBOARD 204 /* AL Dashboard */ +#define KEY_ALL_APPLICATIONS 204 /* AC Desktop Show All Applications */ +#define KEY_DASHBOARD KEY_ALL_APPLICATIONS #define KEY_SUSPEND 205 #define KEY_CLOSE 206 /* AC Close */ #define KEY_PLAY 207 @@ -515,6 +517,10 @@ #define KEY_10CHANNELSUP 0x1b8 /* 10 channels up (10+) */ #define KEY_10CHANNELSDOWN 0x1b9 /* 10 channels down (10-) */ #define KEY_IMAGES 0x1ba /* AL Image Browser */ +#define KEY_NOTIFICATION_CENTER 0x1bc /* Show/hide the notification center */ +#define KEY_PICKUP_PHONE 0x1bd /* Answer incoming call */ +#define KEY_HANGUP_PHONE 0x1be /* Decline incoming call */ +#define KEY_LINK_PHONE 0x1bf /* AL Phone Syncing */ #define KEY_DEL_EOL 0x1c0 #define KEY_DEL_EOS 0x1c1 @@ -542,6 +548,7 @@ #define KEY_FN_F 0x1e2 #define KEY_FN_S 0x1e3 #define KEY_FN_B 0x1e4 +#define KEY_FN_RIGHT_SHIFT 0x1e5 #define KEY_BRL_DOT1 0x1f1 #define KEY_BRL_DOT2 0x1f2 @@ -595,8 +602,14 @@ #define BTN_DPAD_LEFT 0x222 #define BTN_DPAD_RIGHT 0x223 +#define BTN_GRIPL 0x224 +#define BTN_GRIPR 0x225 +#define BTN_GRIPL2 0x226 +#define BTN_GRIPR2 0x227 + #define KEY_ALS_TOGGLE 0x230 /* Ambient light sensor */ #define KEY_ROTATE_LOCK_TOGGLE 0x231 /* Display rotation lock */ +#define KEY_REFRESH_RATE_TOGGLE 0x232 /* Display refresh rate toggle */ #define KEY_BUTTONCONFIG 0x240 /* AL Button Configuration */ #define KEY_TASKMANAGER 0x241 /* AL Task/Project Manager */ @@ -607,10 +620,29 @@ #define KEY_VOICECOMMAND 0x246 /* Listening Voice Command */ #define KEY_ASSISTANT 0x247 /* AL Context-aware desktop assistant */ #define KEY_KBD_LAYOUT_NEXT 0x248 /* AC Next Keyboard Layout Select */ +#define KEY_EMOJI_PICKER 0x249 /* Show/hide emoji picker (HUTRR101) */ +#define KEY_DICTATE 0x24a /* Start or Stop Voice Dictation Session (HUTRR99) */ +#define KEY_CAMERA_ACCESS_ENABLE 0x24b /* Enables programmatic access to camera devices. (HUTRR72) */ +#define KEY_CAMERA_ACCESS_DISABLE 0x24c /* Disables programmatic access to camera devices. (HUTRR72) */ +#define KEY_CAMERA_ACCESS_TOGGLE 0x24d /* Toggles the current state of the camera access control. (HUTRR72) */ +#define KEY_ACCESSIBILITY 0x24e /* Toggles the system bound accessibility UI/command (HUTRR116) */ +#define KEY_DO_NOT_DISTURB 0x24f /* Toggles the system-wide "Do Not Disturb" control (HUTRR94)*/ #define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */ #define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */ +/* + * Keycodes for hotkeys toggling the electronic privacy screen found on some + * laptops on/off. Note when the embedded-controller turns on/off the eprivacy + * screen itself then the state should be reported through drm connecter props: + * https://www.kernel.org/doc/html/latest/gpu/drm-kms.html#standard-connector-properties + * Except when implementing the drm connecter properties API is not possible + * because e.g. the firmware does not allow querying the presence and/or status + * of the eprivacy screen at boot. + */ +#define KEY_EPRIVACY_SCREEN_ON 0x252 +#define KEY_EPRIVACY_SCREEN_OFF 0x253 + #define KEY_KBDINPUTASSIST_PREV 0x260 #define KEY_KBDINPUTASSIST_NEXT 0x261 #define KEY_KBDINPUTASSIST_PREVGROUP 0x262 @@ -655,6 +687,27 @@ /* Select an area of screen to be copied */ #define KEY_SELECTIVE_SCREENSHOT 0x27a +/* Move the focus to the next or previous user controllable element within a UI container */ +#define KEY_NEXT_ELEMENT 0x27b +#define KEY_PREVIOUS_ELEMENT 0x27c + +/* Toggle Autopilot engagement */ +#define KEY_AUTOPILOT_ENGAGE_TOGGLE 0x27d + +/* Shortcut Keys */ +#define KEY_MARK_WAYPOINT 0x27e +#define KEY_SOS 0x27f +#define KEY_NAV_CHART 0x280 +#define KEY_FISHING_CHART 0x281 +#define KEY_SINGLE_RANGE_RADAR 0x282 +#define KEY_DUAL_RANGE_RADAR 0x283 +#define KEY_RADAR_OVERLAY 0x284 +#define KEY_TRADITIONAL_SONAR 0x285 +#define KEY_CLEARVU_SONAR 0x286 +#define KEY_SIDEVU_SONAR 0x287 +#define KEY_NAV_INFO 0x288 +#define KEY_BRIGHTNESS_MENU 0x289 + /* * Some keyboards have keys which do not have a defined meaning, these keys * are intended to be programmed / bound to macros by the user. For most @@ -730,6 +783,9 @@ #define KEY_KBD_LCD_MENU4 0x2bb #define KEY_KBD_LCD_MENU5 0x2bc +/* Performance Boost key (Alienware)/G-Mode key (Dell) */ +#define KEY_PERFORMANCE 0x2bd + #define BTN_TRIGGER_HAPPY 0x2c0 #define BTN_TRIGGER_HAPPY1 0x2c0 #define BTN_TRIGGER_HAPPY2 0x2c1 @@ -834,6 +890,7 @@ #define ABS_TOOL_WIDTH 0x1c #define ABS_VOLUME 0x20 +#define ABS_PROFILE 0x21 #define ABS_MISC 0x28 @@ -889,7 +946,8 @@ #define SW_MUTE_DEVICE 0x0e /* set = device disabled */ #define SW_PEN_INSERTED 0x0f /* set = pen inserted */ #define SW_MACHINE_COVER 0x10 /* set = cover closed */ -#define SW_MAX 0x10 +#define SW_USB_INSERT 0x11 /* set = USB audio device connected */ +#define SW_MAX 0x11 #define SW_CNT (SW_MAX+1) /* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.30.0/include/linux/linux/input-event-codes.h new/libinput-1.30.1/include/linux/linux/input-event-codes.h --- old/libinput-1.30.0/include/linux/linux/input-event-codes.h 2025-11-25 04:40:43.000000000 +0100 +++ new/libinput-1.30.1/include/linux/linux/input-event-codes.h 2025-12-08 03:40:00.000000000 +0100 @@ -27,6 +27,7 @@ #define INPUT_PROP_TOPBUTTONPAD 0x04 /* softbuttons at top of pad */ #define INPUT_PROP_POINTING_STICK 0x05 /* is a pointing stick */ #define INPUT_PROP_ACCELEROMETER 0x06 /* has accelerometer */ +#define INPUT_PROP_PRESSUREPAD 0x07 /* pressure triggers clicks */ #define INPUT_PROP_MAX 0x1f #define INPUT_PROP_CNT (INPUT_PROP_MAX + 1) @@ -278,7 +279,8 @@ #define KEY_PAUSECD 201 #define KEY_PROG3 202 #define KEY_PROG4 203 -#define KEY_DASHBOARD 204 /* AL Dashboard */ +#define KEY_ALL_APPLICATIONS 204 /* AC Desktop Show All Applications */ +#define KEY_DASHBOARD KEY_ALL_APPLICATIONS #define KEY_SUSPEND 205 #define KEY_CLOSE 206 /* AC Close */ #define KEY_PLAY 207 @@ -515,6 +517,10 @@ #define KEY_10CHANNELSUP 0x1b8 /* 10 channels up (10+) */ #define KEY_10CHANNELSDOWN 0x1b9 /* 10 channels down (10-) */ #define KEY_IMAGES 0x1ba /* AL Image Browser */ +#define KEY_NOTIFICATION_CENTER 0x1bc /* Show/hide the notification center */ +#define KEY_PICKUP_PHONE 0x1bd /* Answer incoming call */ +#define KEY_HANGUP_PHONE 0x1be /* Decline incoming call */ +#define KEY_LINK_PHONE 0x1bf /* AL Phone Syncing */ #define KEY_DEL_EOL 0x1c0 #define KEY_DEL_EOS 0x1c1 @@ -542,6 +548,7 @@ #define KEY_FN_F 0x1e2 #define KEY_FN_S 0x1e3 #define KEY_FN_B 0x1e4 +#define KEY_FN_RIGHT_SHIFT 0x1e5 #define KEY_BRL_DOT1 0x1f1 #define KEY_BRL_DOT2 0x1f2 @@ -595,8 +602,14 @@ #define BTN_DPAD_LEFT 0x222 #define BTN_DPAD_RIGHT 0x223 +#define BTN_GRIPL 0x224 +#define BTN_GRIPR 0x225 +#define BTN_GRIPL2 0x226 +#define BTN_GRIPR2 0x227 + #define KEY_ALS_TOGGLE 0x230 /* Ambient light sensor */ #define KEY_ROTATE_LOCK_TOGGLE 0x231 /* Display rotation lock */ +#define KEY_REFRESH_RATE_TOGGLE 0x232 /* Display refresh rate toggle */ #define KEY_BUTTONCONFIG 0x240 /* AL Button Configuration */ #define KEY_TASKMANAGER 0x241 /* AL Task/Project Manager */ @@ -607,10 +620,29 @@ #define KEY_VOICECOMMAND 0x246 /* Listening Voice Command */ #define KEY_ASSISTANT 0x247 /* AL Context-aware desktop assistant */ #define KEY_KBD_LAYOUT_NEXT 0x248 /* AC Next Keyboard Layout Select */ +#define KEY_EMOJI_PICKER 0x249 /* Show/hide emoji picker (HUTRR101) */ +#define KEY_DICTATE 0x24a /* Start or Stop Voice Dictation Session (HUTRR99) */ +#define KEY_CAMERA_ACCESS_ENABLE 0x24b /* Enables programmatic access to camera devices. (HUTRR72) */ +#define KEY_CAMERA_ACCESS_DISABLE 0x24c /* Disables programmatic access to camera devices. (HUTRR72) */ +#define KEY_CAMERA_ACCESS_TOGGLE 0x24d /* Toggles the current state of the camera access control. (HUTRR72) */ +#define KEY_ACCESSIBILITY 0x24e /* Toggles the system bound accessibility UI/command (HUTRR116) */ +#define KEY_DO_NOT_DISTURB 0x24f /* Toggles the system-wide "Do Not Disturb" control (HUTRR94)*/ #define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */ #define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */ +/* + * Keycodes for hotkeys toggling the electronic privacy screen found on some + * laptops on/off. Note when the embedded-controller turns on/off the eprivacy + * screen itself then the state should be reported through drm connecter props: + * https://www.kernel.org/doc/html/latest/gpu/drm-kms.html#standard-connector-properties + * Except when implementing the drm connecter properties API is not possible + * because e.g. the firmware does not allow querying the presence and/or status + * of the eprivacy screen at boot. + */ +#define KEY_EPRIVACY_SCREEN_ON 0x252 +#define KEY_EPRIVACY_SCREEN_OFF 0x253 + #define KEY_KBDINPUTASSIST_PREV 0x260 #define KEY_KBDINPUTASSIST_NEXT 0x261 #define KEY_KBDINPUTASSIST_PREVGROUP 0x262 @@ -655,6 +687,27 @@ /* Select an area of screen to be copied */ #define KEY_SELECTIVE_SCREENSHOT 0x27a +/* Move the focus to the next or previous user controllable element within a UI container */ +#define KEY_NEXT_ELEMENT 0x27b +#define KEY_PREVIOUS_ELEMENT 0x27c + +/* Toggle Autopilot engagement */ +#define KEY_AUTOPILOT_ENGAGE_TOGGLE 0x27d + +/* Shortcut Keys */ +#define KEY_MARK_WAYPOINT 0x27e +#define KEY_SOS 0x27f +#define KEY_NAV_CHART 0x280 +#define KEY_FISHING_CHART 0x281 +#define KEY_SINGLE_RANGE_RADAR 0x282 +#define KEY_DUAL_RANGE_RADAR 0x283 +#define KEY_RADAR_OVERLAY 0x284 +#define KEY_TRADITIONAL_SONAR 0x285 +#define KEY_CLEARVU_SONAR 0x286 +#define KEY_SIDEVU_SONAR 0x287 +#define KEY_NAV_INFO 0x288 +#define KEY_BRIGHTNESS_MENU 0x289 + /* * Some keyboards have keys which do not have a defined meaning, these keys * are intended to be programmed / bound to macros by the user. For most @@ -730,6 +783,9 @@ #define KEY_KBD_LCD_MENU4 0x2bb #define KEY_KBD_LCD_MENU5 0x2bc +/* Performance Boost key (Alienware)/G-Mode key (Dell) */ +#define KEY_PERFORMANCE 0x2bd + #define BTN_TRIGGER_HAPPY 0x2c0 #define BTN_TRIGGER_HAPPY1 0x2c0 #define BTN_TRIGGER_HAPPY2 0x2c1 @@ -834,6 +890,7 @@ #define ABS_TOOL_WIDTH 0x1c #define ABS_VOLUME 0x20 +#define ABS_PROFILE 0x21 #define ABS_MISC 0x28 @@ -889,7 +946,8 @@ #define SW_MUTE_DEVICE 0x0e /* set = device disabled */ #define SW_PEN_INSERTED 0x0f /* set = pen inserted */ #define SW_MACHINE_COVER 0x10 /* set = cover closed */ -#define SW_MAX 0x10 +#define SW_USB_INSERT 0x11 /* set = USB audio device connected */ +#define SW_MAX 0x11 #define SW_CNT (SW_MAX+1) /* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.30.0/meson.build new/libinput-1.30.1/meson.build --- old/libinput-1.30.0/meson.build 2025-11-25 04:40:43.000000000 +0100 +++ new/libinput-1.30.1/meson.build 2025-12-08 03:40:00.000000000 +0100 @@ -1,5 +1,5 @@ project('libinput', 'c', - version : '1.30.0', + version : '1.30.1', license : 'MIT/Expat', default_options : [ 'c_std=gnu99', 'warning_level=2' ], meson_version : '>= 0.64.0') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.30.0/src/evdev-mt-touchpad.c new/libinput-1.30.1/src/evdev-mt-touchpad.c --- old/libinput-1.30.0/src/evdev-mt-touchpad.c 2025-11-25 04:40:43.000000000 +0100 +++ new/libinput-1.30.1/src/evdev-mt-touchpad.c 2025-12-08 03:40:00.000000000 +0100 @@ -3622,7 +3622,8 @@ * * See also #562 */ - if (libevdev_get_abs_resolution(device->evdev, ABS_MT_PRESSURE) != 0 || + if (libevdev_has_property(device->evdev, INPUT_PROP_PRESSUREPAD) || + libevdev_get_abs_resolution(device->evdev, ABS_MT_PRESSURE) != 0 || evdev_device_has_model_quirk(device, QUIRK_MODEL_PRESSURE_PAD)) { libevdev_disable_event_code(device->evdev, EV_ABS, ABS_MT_PRESSURE); libevdev_disable_event_code(device->evdev, EV_ABS, ABS_PRESSURE); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.30.0/src/evdev-tablet.c new/libinput-1.30.1/src/evdev-tablet.c --- old/libinput-1.30.0/src/evdev-tablet.c 2025-11-25 04:40:43.000000000 +0100 +++ new/libinput-1.30.1/src/evdev-tablet.c 2025-12-08 03:40:00.000000000 +0100 @@ -1272,10 +1272,13 @@ eraser_button_toggle(struct libinput_tablet_tool *tool) { struct libinput_device *libinput_device = tool->last_device; - struct evdev_device *device = evdev_device(libinput_device); - struct tablet_dispatch *tablet = tablet_dispatch(device->dispatch); - tablet_tool_apply_eraser_button(tablet, tool); + if (libinput_device) { + struct evdev_device *device = evdev_device(libinput_device); + struct tablet_dispatch *tablet = tablet_dispatch(device->dispatch); + + tablet_tool_apply_eraser_button(tablet, tool); + } } static enum libinput_config_status @@ -1296,7 +1299,7 @@ static enum libinput_config_eraser_button_mode eraser_button_get_mode(struct libinput_tablet_tool *tool) { - return tool->eraser_button.mode; + return tool->eraser_button.want_mode; } static enum libinput_config_eraser_button_mode @@ -1330,7 +1333,7 @@ static unsigned int eraser_button_get_button(struct libinput_tablet_tool *tool) { - return tool->eraser_button.button; + return tool->eraser_button.want_button; } static unsigned int @@ -2448,6 +2451,8 @@ struct libinput *li = tablet_libinput_context(tablet); list_for_each_safe(tool, &tablet->tool_list, link) { + list_remove(&tool->link); + list_init(&tool->link); /* unref may list_remove() too */ libinput_tablet_tool_unref(tool); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.30.0/src/libinput-plugin-tablet-forced-tool.c new/libinput-1.30.1/src/libinput-plugin-tablet-forced-tool.c --- old/libinput-1.30.0/src/libinput-plugin-tablet-forced-tool.c 2025-11-25 04:40:43.000000000 +0100 +++ new/libinput-1.30.1/src/libinput-plugin-tablet-forced-tool.c 2025-12-08 03:40:00.000000000 +0100 @@ -54,6 +54,7 @@ struct libinput_device *device; bitmask_t tool_state; bool pen_forced_into_proximity; + size_t pen_prox_out_events; }; struct plugin_data { @@ -121,6 +122,23 @@ } else { bitmask_clear_bit(&device->tool_state, BTN_TOOL_PEN); device->pen_forced_into_proximity = false; + + /* If we get three valid pen proximity out events, let's + * assume this device works fine and disable our plugin + */ + if (++device->pen_prox_out_events > 2) { + plugin_log_debug( + libinput_plugin, + "%s: forced tool handling unloaded\n", + libinput_device_get_name( + device->device)); + libinput_plugin_enable_device_event_frame( + libinput_plugin, + device->device, + false); + plugin_device_destroy(device); + return; + } } return; /* Nothing to do */ case EVDEV_BTN_TOOL_RUBBER: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.30.0/src/libinput.h new/libinput-1.30.1/src/libinput.h --- old/libinput-1.30.0/src/libinput.h 2025-11-25 04:40:43.000000000 +0100 +++ new/libinput-1.30.1/src/libinput.h 2025-12-08 03:40:00.000000000 +0100 @@ -6700,7 +6700,7 @@ /** * @ingroup config * - * Check if the disable-while typing feature is currently enabled on this + * Check if the disable-while-typing feature is currently enabled on this * device. If the device does not support disable-while-typing, this * function returns @ref LIBINPUT_CONFIG_DWT_DISABLED. * @@ -6718,7 +6718,7 @@ /** * @ingroup config * - * Check if the disable-while typing feature is enabled on this device by + * Check if the disable-while-typing feature is enabled on this device by * default. If the device does not support disable-while-typing, this * function returns @ref LIBINPUT_CONFIG_DWT_DISABLED. * @@ -6796,7 +6796,7 @@ /** * @ingroup config * - * Check if the disable-while trackpointing feature is currently enabled on + * Check if the disable-while-trackpointing feature is currently enabled on * this device. If the device does not support disable-while-trackpointing, * this function returns @ref LIBINPUT_CONFIG_DWTP_DISABLED. * @@ -6816,7 +6816,7 @@ /** * @ingroup config * - * Check if the disable-while trackpointing feature is enabled on this device + * Check if the disable-while-trackpointing feature is enabled on this device * by default. If the device does not support disable-while-trackpointing, this * function returns @ref LIBINPUT_CONFIG_DWTP_DISABLED. * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.30.0/test/litest-runner.c new/libinput-1.30.1/test/litest-runner.c --- old/libinput-1.30.0/test/litest-runner.c 2025-11-25 04:40:43.000000000 +0100 +++ new/libinput-1.30.1/test/litest-runner.c 2025-12-08 03:40:00.000000000 +0100 @@ -123,7 +123,8 @@ close_pipes(int fds[_FD_LAST]) { for (int i = 0; i < _FD_LAST; i++) { - fsync(fds[i]); + if (fds[i] != -1) + fsync(fds[i]); xclose(&fds[i]); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.30.0/test/test-tablet.c new/libinput-1.30.1/test/test-tablet.c --- old/libinput-1.30.0/test/test-tablet.c 2025-11-25 04:40:43.000000000 +0100 +++ new/libinput-1.30.1/test/test-tablet.c 2025-12-08 03:40:00.000000000 +0100 @@ -7722,6 +7722,51 @@ } END_TEST +START_TEST(tablet_eraser_button_config_after_device_removal) +{ + _litest_context_destroy_ struct libinput *li = litest_create_context(); + struct litest_device *tablet = litest_add_device(li, LITEST_ELAN_TABLET); + struct axis_replacement axes[] = { + { ABS_DISTANCE, 10 }, + { ABS_PRESSURE, 0 }, + { -1, -1 }, + }; + + litest_drain_events(li); + + litest_tablet_set_tool_type(tablet, BTN_TOOL_RUBBER); + litest_tablet_proximity_in(tablet, 10, 10, axes); + + litest_dispatch(li); + auto event = libinput_get_event(li); + auto tev = litest_is_tablet_event(event, LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY); + auto tool = libinput_event_tablet_tool_get_tool(tev); + libinput_tablet_tool_ref(tool); + libinput_event_destroy(event); + + litest_device_destroy(tablet); + litest_drain_events(li); + + /* Tool isn't associated with a device but config should take effect anyway */ + auto status = libinput_tablet_tool_config_eraser_button_set_mode( + tool, + LIBINPUT_CONFIG_ERASER_BUTTON_BUTTON); + litest_assert_enum_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS); + status = + libinput_tablet_tool_config_eraser_button_set_button(tool, BTN_STYLUS2); + litest_assert_enum_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS); + + litest_assert_enum_eq(libinput_tablet_tool_config_eraser_button_get_mode(tool), + LIBINPUT_CONFIG_ERASER_BUTTON_BUTTON); + litest_assert_int_eq(libinput_tablet_tool_config_eraser_button_get_button(tool), + (unsigned)BTN_STYLUS2); + + litest_drain_events(li); + + libinput_tablet_tool_unref(tool); +} +END_TEST + TEST_COLLECTION(tablet) { /* clang-format off */ @@ -7886,6 +7931,8 @@ "with-motion-events", 'b') { litest_add_parametrized(tablet_eraser_button_disabled, LITEST_TABLET, LITEST_TOTEM|LITEST_FORCED_PROXOUT, params); } + + litest_add_no_device(tablet_eraser_button_config_after_device_removal); /* clang-format on */ } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.30.0/test/test-touchpad.c new/libinput-1.30.1/test/test-touchpad.c --- old/libinput-1.30.0/test/test-touchpad.c 2025-11-25 04:40:43.000000000 +0100 +++ new/libinput-1.30.1/test/test-touchpad.c 2025-12-08 03:40:00.000000000 +0100 @@ -3651,7 +3651,7 @@ } END_TEST -START_TEST(touchpad_dwt) +START_TEST(touchpad_dwt_single_key) { struct litest_device *touchpad = litest_current_device(); struct litest_device *keyboard; @@ -3674,7 +3674,7 @@ litest_assert_only_typed_events(li, LIBINPUT_EVENT_KEYBOARD_KEY); - litest_timeout_dwt_short(li); + litest_timeout_dwt_long(li); /* after timeout - motion events*/ litest_touch_down(touchpad, 0, 50, 50); @@ -7160,7 +7160,8 @@ TEST_COLLECTION(touchpad_dwt) { /* clang-format off */ - litest_add(touchpad_dwt, LITEST_TOUCHPAD, LITEST_ANY); + litest_add(touchpad_dwt_single_key, LITEST_TOUCHPAD, LITEST_ANY); + litest_add_for_device(touchpad_dwt_ext_and_int_keyboard, LITEST_SYNAPTICS_I2C); litest_add(touchpad_dwt_enable_touch, LITEST_TOUCHPAD, LITEST_ANY); litest_add(touchpad_dwt_touch_hold, LITEST_TOUCHPAD, LITEST_ANY);
