fix: rsync real-time output + refresh button
- Use read() + poll() instead of fgets() to handle rsync \r progress - rsync uses \r for in-place progress updates, fgets() blocked on \n - Added poll() with 200ms timeout for non-blocking read - Added refresh button (view-refresh icon) in snapshot sidebar header - Fixed duplicate build_menu/build_toolbar calls
This commit is contained in:
+10
-2
@@ -142,8 +142,6 @@ void MainWindow::build_ui() {
|
||||
gtk_container_add(GTK_CONTAINER(window_), vbox);
|
||||
|
||||
build_menu();
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toolbar_, FALSE, FALSE, 0);
|
||||
|
||||
build_toolbar();
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toolbar_, FALSE, FALSE, 0);
|
||||
|
||||
@@ -157,11 +155,21 @@ void MainWindow::build_ui() {
|
||||
|
||||
GtkWidget* left_header = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
|
||||
gtk_widget_set_margin_start(left_header, 8);
|
||||
gtk_widget_set_margin_end(left_header, 4);
|
||||
gtk_widget_set_margin_top(left_header, 6);
|
||||
gtk_widget_set_margin_bottom(left_header, 6);
|
||||
GtkWidget* left_title = gtk_label_new(NULL);
|
||||
gtk_label_set_markup(GTK_LABEL(left_title), "<b>Snapshots</b>");
|
||||
gtk_widget_set_halign(left_title, GTK_ALIGN_START);
|
||||
gtk_box_pack_start(GTK_BOX(left_header), left_title, TRUE, TRUE, 0);
|
||||
|
||||
GtkWidget* refresh_btn = gtk_button_new_from_icon_name("view-refresh", GTK_ICON_SIZE_MENU);
|
||||
gtk_widget_set_tooltip_text(refresh_btn, "Refresh snapshot list");
|
||||
g_signal_connect(refresh_btn, "clicked", G_CALLBACK(+[](GtkWidget*, gpointer d) {
|
||||
static_cast<MainWindow*>(d)->refresh_snapshot_list();
|
||||
}), this);
|
||||
gtk_box_pack_end(GTK_BOX(left_header), refresh_btn, FALSE, FALSE, 0);
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(left_box), left_header, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(left_box), gtk_separator_new(GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 0);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user