gfio: make log window scrollable
Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/gfio.c b/gfio.c
index a699887..09a2484 100644
--- a/gfio.c
+++ b/gfio.c
@@ -92,6 +92,7 @@
GtkWidget *results_window;
GtkListStore *log_model;
GtkWidget *log_tree;
+ GtkWidget *log_view;
GtkTextBuffer *text;
struct probe_widget probe;
struct eta_widget eta;
@@ -1470,21 +1471,36 @@
gtk_widget_ref(ui->log_tree);
gtk_container_remove(GTK_CONTAINER(w), ui->log_tree);
gtk_widget_destroy(w);
+ ui->log_view = NULL;
}
static void view_log(GtkWidget *w, gpointer data)
{
- GtkWidget *win, *box;
+ GtkWidget *win, *scroll, *vbox, *box;
+ struct gui *ui = (struct gui *) data;
- win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ if (ui->log_view)
+ return;
+
+ ui->log_view = win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(win), "Log");
+ gtk_window_set_default_size(GTK_WINDOW(win), 700, 500);
- box = gtk_hbox_new(FALSE, 3);
- gtk_container_add(GTK_CONTAINER(win), box);
+ scroll = gtk_scrolled_window_new(NULL, NULL);
- g_signal_connect(box, "delete-event", G_CALLBACK(view_log_destroy), (gpointer) &ui);
- g_signal_connect(box, "destroy", G_CALLBACK(view_log_destroy), (gpointer) &ui);
- gtk_container_add(GTK_CONTAINER(box), ui.log_tree);
+ gtk_container_set_border_width(GTK_CONTAINER(scroll), 5);
+
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+ box = gtk_hbox_new(TRUE, 0);
+ gtk_box_pack_start_defaults(GTK_BOX(box), ui->log_tree);
+ g_signal_connect(box, "destroy", G_CALLBACK(view_log_destroy), ui);
+ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), box);
+
+ vbox = gtk_vbox_new(TRUE, 5);
+ gtk_box_pack_start_defaults(GTK_BOX(vbox), scroll);
+
+ gtk_container_add(GTK_CONTAINER(win), vbox);
gtk_widget_show_all(win);
}
@@ -1579,13 +1595,14 @@
</ui> \
";
-static GtkWidget *get_menubar_menu(GtkWidget *window, GtkUIManager *ui_manager)
+static GtkWidget *get_menubar_menu(GtkWidget *window, GtkUIManager *ui_manager,
+ struct gui *ui)
{
GtkActionGroup *action_group = gtk_action_group_new("Menu");
GError *error = 0;
action_group = gtk_action_group_new("Menu");
- gtk_action_group_add_actions(action_group, menu_items, nmenu_items, 0);
+ gtk_action_group_add_actions(action_group, menu_items, nmenu_items, ui);
gtk_ui_manager_insert_action_group(ui_manager, action_group, 0);
gtk_ui_manager_add_ui_from_string(GTK_UI_MANAGER(ui_manager), ui_string, -1, &error);
@@ -1632,7 +1649,7 @@
gtk_container_add(GTK_CONTAINER (ui->window), ui->vbox);
uimanager = gtk_ui_manager_new();
- menu = get_menubar_menu(ui->window, uimanager);
+ menu = get_menubar_menu(ui->window, uimanager, ui);
gfio_ui_setup(settings, menu, ui->vbox, uimanager);
/*