diff --git a/include/swaybar/tray/dbusmenu.h b/include/swaybar/tray/dbusmenu.h index 442e40547b..610b6e6285 100644 --- a/include/swaybar/tray/dbusmenu.h +++ b/include/swaybar/tray/dbusmenu.h @@ -25,4 +25,7 @@ bool dbusmenu_pointer_leave(void *data, struct wl_pointer *wl_pointer, bool dbusmenu_pointer_frame(struct swaybar_seat *data, struct wl_pointer *wl_pointer); +bool dbusmenu_pointer_axis(struct swaybar_seat *data, + struct wl_pointer *wl_pointer); + #endif diff --git a/swaybar/input.c b/swaybar/input.c index c6d176946d..adb4c940ea 100644 --- a/swaybar/input.c +++ b/swaybar/input.c @@ -311,6 +311,12 @@ static void wl_pointer_axis(void *data, struct wl_pointer *wl_pointer, return; } +#if HAVE_TRAY + if (dbusmenu_pointer_axis(data, wl_pointer)) { + return; + } +#endif + // If there's a while since the last scroll event, // set 'value' to zero as if to reset the "virtual scroll wheel" if (seat->axis[axis].discrete_steps == 0 && diff --git a/swaybar/tray/dbusmenu.c b/swaybar/tray/dbusmenu.c index f389097a93..e4a6a9f6d6 100644 --- a/swaybar/tray/dbusmenu.c +++ b/swaybar/tray/dbusmenu.c @@ -1256,6 +1256,15 @@ bool dbusmenu_pointer_frame(struct swaybar_seat *data, return true; } +bool dbusmenu_pointer_axis(struct swaybar_seat *data, + struct wl_pointer *wl_pointer) { + struct swaybar_tray *tray = data->bar->tray; + if (!(tray && tray->menu && tray->menu_pointer_focus)) { + return false; + } + return true; +} + bool dbusmenu_pointer_enter(void *data, struct wl_pointer *wl_pointer, uint32_t serial, struct wl_surface *surface, wl_fixed_t surface_x, wl_fixed_t surface_y) {