@@ -727,6 +727,22 @@ void cursor_button(struct wl_listener *listener, void *data) {
727727 }
728728 }
729729
730+ // middle-click on tab bar closes the tab
731+ if (event -> button == BTN_MIDDLE ) {
732+ for (output_t * m = mon_head ; m != NULL ; m = m -> next ) {
733+ desktop_t * d = m -> desk ;
734+ if (d == NULL )
735+ continue ;
736+
737+ node_t * tab_leaf = tabs_hit_test_desktop (d , server .cursor -> x , server .cursor -> y );
738+ if (tab_leaf != NULL ) {
739+ kill_node (d , tab_leaf );
740+ server .cursor_buttons |= 1 << (event -> button - 272 );
741+ return ;
742+ }
743+ }
744+ }
745+
730746 double sx , sy ;
731747 struct wlr_surface * surface = NULL ;
732748 void * type = desktop_type_at (server .cursor -> x , server .cursor -> y , & surface , & sx , & sy );
@@ -931,6 +947,33 @@ void cursor_button(struct wl_listener *listener, void *data) {
931947void cursor_axis (struct wl_listener * listener , void * data ) {
932948 (void )listener ;
933949 struct wlr_pointer_axis_event * event = data ;
950+
951+ // cycle through tabs when cursor is over a tab bar
952+ for (output_t * m = mon_head ; m != NULL ; m = m -> next ) {
953+ desktop_t * d = m -> desk ;
954+ if (d == NULL )
955+ continue ;
956+
957+ node_t * tab_leaf = tabs_hit_test_desktop (d , server .cursor -> x , server .cursor -> y );
958+ if (tab_leaf != NULL ) {
959+ node_t * tab_node = tabbed_ancestor (tab_leaf );
960+ if (tab_node != NULL ) {
961+ node_t * next ;
962+ double delta = event -> delta_discrete != 0 ? (double )event -> delta_discrete : event -> delta ;
963+ if (delta < 0 )
964+ next = tab_prev_leaf (tab_node , d -> focus );
965+ else
966+ next = tab_next_leaf (tab_node , d -> focus );
967+
968+ if (next != NULL && next != d -> focus ) {
969+ focus_node (m , d , next );
970+ arrange (m , d , true);
971+ }
972+ }
973+ return ;
974+ }
975+ }
976+
934977 wlr_seat_pointer_notify_axis (server .seat , event -> time_msec , event -> orientation , event -> delta ,
935978 event -> delta_discrete , event -> source , event -> relative_direction );
936979 wlr_idle_notifier_v1_notify_activity (server .idle_notifier , server .seat );
0 commit comments