From d615077df8719751df5b2de2871868fe0450e79b Mon Sep 17 00:00:00 2001 From: Ollie Date: Sat, 30 May 2026 11:57:24 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20sliders=20not=20responding=20on=20Waylan?= =?UTF-8?q?d=20=E2=80=94=20add=20W=5FRedisplayView=20after=20paintSlider?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Slider value changes (from click, drag, or programmatic set) call paintSlider to draw the new knob position into the pixman backing buffer, but the backing was never committed to the scene graph on Wayland. Added W_RedisplayView(slider->view) after each paintSlider call in: WMSetSliderValue, WMSetSliderMinValue, WMSetSliderMaxValue, and handleActionEvents (WME_MOTION/WME_BUTTON_RELEASE). The expose handler path does NOT get W_RedisplayView to avoid recursion. --- WINGs/wslider.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/WINGs/wslider.c b/WINGs/wslider.c index 24f9de2..4efdb59 100644 --- a/WINGs/wslider.c +++ b/WINGs/wslider.c @@ -146,8 +146,10 @@ void WMSetSliderMinValue(WMSlider * slider, int value) slider->minValue = value; if (slider->value < value) { slider->value = value; - if (slider->view->flags.mapped) + if (slider->view->flags.mapped) { paintSlider(slider); + W_RedisplayView(slider->view); + } } } @@ -158,8 +160,10 @@ void WMSetSliderMaxValue(WMSlider * slider, int value) slider->maxValue = value; if (slider->value > value) { slider->value = value; - if (slider->view->flags.mapped) + if (slider->view->flags.mapped) { paintSlider(slider); + W_RedisplayView(slider->view); + } } } @@ -174,8 +178,10 @@ void WMSetSliderValue(WMSlider * slider, int value) else slider->value = value; - if (slider->view->flags.mapped) + if (slider->view->flags.mapped) { paintSlider(slider); + W_RedisplayView(slider->view); + } } void WMSetSliderContinuous(WMSlider * slider, Bool flag) @@ -474,6 +480,8 @@ static void handleActionEvents(WMEvent * event, void *data) } break; } + if (sPtr->flags.dragging || event->type == WME_BUTTON_RELEASE) + W_RedisplayView(sPtr->view); } static void destroySlider(Slider * sPtr)