diff -r 8a428e2f8ae7 -r 6bb45d356481 ui/gtk/list.c --- a/ui/gtk/list.c Sat Sep 12 10:06:47 2026 +0200 +++ b/ui/gtk/list.c Sat Sep 12 11:42:52 2026 +0200 @@ -2802,6 +2802,7 @@ static void listbox_row_on_enter(GtkWidget *row) { GtkWidget *button = g_object_get_data(G_OBJECT(row), "ui-listbox-row-button"); if(button) { + //gtk_widget_set_opacity(button, 1.0); gtk_widget_set_visible(button, TRUE); } } @@ -2810,6 +2811,7 @@ GtkWidget *button = g_object_get_data(G_OBJECT(row), "ui-listbox-row-button"); if(button) { if(!g_object_get_data(G_OBJECT(button), "ui-button-popup")) { + //gtk_widget_set_opacity(button, 0.0); gtk_widget_set_visible(button, FALSE); } else { g_object_set_data(G_OBJECT(button), "ui-button-invisible", (void*)1); @@ -2836,9 +2838,12 @@ #else static gboolean listbox_row_enter( GtkWidget *row, - GdkEventCrossing event, + GdkEventCrossing *event, gpointer user_data) -{ +{ + if(event->detail == GDK_NOTIFY_INFERIOR) { + return FALSE; + } listbox_row_on_enter(row); return FALSE; } @@ -2849,6 +2854,9 @@ GdkEventCrossing *event, gpointer user_data) { + if(event->detail == GDK_NOTIFY_INFERIOR) { + return FALSE; + } listbox_row_on_leave(row); return FALSE; } @@ -2914,18 +2922,21 @@ // create listbox item GtkWidget *row = gtk_list_box_row_new(); + GtkWidget *row0 = row; #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); + row0 = gtk_event_box_new(); + LISTBOX_ROW_SET_CHILD(row, row0); + gtk_widget_set_events(GTK_WIDGET(row0), GDK_POINTER_MOTION_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); + g_signal_connect(row0, "enter-notify-event", G_CALLBACK(listbox_row_enter), NULL); + g_signal_connect(row0, "leave-notify-event", G_CALLBACK(listbox_row_leave), NULL); #endif - listbox_fill_row(listbox, row, sublist, &item, index); + listbox_fill_row(listbox, row0, sublist, &item, index); LISTBOX_ROW_SHOW(row); if(index == first_index) { // first row in the sublist, set ui_listbox data to the row @@ -3305,15 +3316,18 @@ } GtkWidget *row = gtk_list_box_row_new(); + GtkWidget *row0 = row; #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); + row0 = gtk_event_box_new(); + LISTBOX_ROW_SET_CHILD(row, row0); + gtk_widget_set_events(row0, GDK_POINTER_MOTION_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); + g_signal_connect(row0, "enter-notify-event", G_CALLBACK(listbox_row_enter), NULL); + g_signal_connect(row0, "leave-notify-event", G_CALLBACK(listbox_row_leave), NULL); #endif gtk_list_box_insert(listbox->listbox, row, -1); @@ -3324,7 +3338,7 @@ row_data.depth = item.depth; cxListAdd(listbox->rows, &row_data); UiListBox2Row *row_data_ptr = cxListLast(listbox->rows); - listbox2_update_item(row_data_ptr, row, &item, item.depth - (item.depth > 0 ? heading : 0)); + listbox2_update_item(row_data_ptr, row0, &item, item.depth - (item.depth > 0 ? heading : 0)); if(item.depth >= stack_size) { stack_size += 8;