--- a/ui/gtk/list.c Fri Sep 11 17:27:12 2026 +0200 +++ b/ui/gtk/list.c Fri Sep 11 19:26:51 2026 +0200 @@ -3233,6 +3233,8 @@ rowdata); gtk_widget_set_visible(button, FALSE); WIDGET_NO_SHOW_ALL(button); + + g_object_set_data(G_OBJECT(row), "ui-listbox-row-button", button); } // headings have the expander at the end @@ -3271,6 +3273,17 @@ } GtkWidget *row = gtk_list_box_row_new(); +#if GTK_CHECK_VERSION(4, 0, 0) + GtkEventController *motion_controller = gtk_event_controller_motion_new(); + gtk_widget_add_controller(GTK_WIDGET(row), motion_controller); + g_signal_connect(motion_controller, "enter", G_CALLBACK(listbox_row_enter), row); + g_signal_connect(motion_controller, "leave", G_CALLBACK(listbox_row_leave), row); +#else + gtk_widget_set_events(GTK_WIDGET(row), GDK_POINTER_MOTION_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); + g_signal_connect(row, "enter-notify-event", G_CALLBACK(listbox_row_enter), NULL); + g_signal_connect(row, "leave-notify-event", G_CALLBACK(listbox_row_leave), NULL); +#endif + gtk_list_box_append(listbox->listbox, row); UiListBox2Row row_data = {0}; row_data.listbox = listbox;