Jiri Moskovcak a42079
From 3f3655980007d39e0377e76a49fd2937f43f0be7 Mon Sep 17 00:00:00 2001
Jiri Moskovcak a42079
From: Jiri Moskovcak <jmoskovc@redhat.com>
Jiri Moskovcak a42079
Date: Thu, 21 Jul 2011 11:02:11 +0200
Jiri Moskovcak a42079
Subject: [PATCH 2/4] gui: split the main window in 2 panes -
Jiri Moskovcak a42079
 reported/not-reported
Jiri Moskovcak a42079
Jiri Moskovcak a42079
---
Jiri Moskovcak a42079
 src/gui-gtk/main.c |  215 ++++++++++++++++++++++++++++++++++++++++++++--------
Jiri Moskovcak a42079
 1 files changed, 182 insertions(+), 33 deletions(-)
Jiri Moskovcak a42079
Jiri Moskovcak a42079
diff --git a/src/gui-gtk/main.c b/src/gui-gtk/main.c
Jiri Moskovcak a42079
index 1409191..776e85a 100644
Jiri Moskovcak a42079
--- a/src/gui-gtk/main.c
Jiri Moskovcak a42079
+++ b/src/gui-gtk/main.c
Jiri Moskovcak a42079
@@ -32,7 +32,9 @@ static const char help_uri[] = "http://docs.fedoraproject.org/en-US/"
Jiri Moskovcak a42079
     "Fedora/14/html/Deployment_Guide/ch-abrt.html";
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
 static GtkListStore *s_dumps_list_store;
Jiri Moskovcak a42079
+static GtkListStore *s_reported_dumps_list_store;
Jiri Moskovcak a42079
 static GtkWidget *s_treeview;
Jiri Moskovcak a42079
+static GtkWidget *s_reported_treeview;
Jiri Moskovcak a42079
 static GtkWidget *g_main_window;
Jiri Moskovcak a42079
 static GtkWidget *s_report_window;
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
@@ -40,13 +42,38 @@ enum
Jiri Moskovcak a42079
 {
Jiri Moskovcak a42079
     COLUMN_SOURCE,
Jiri Moskovcak a42079
     COLUMN_REASON,
Jiri Moskovcak a42079
-    COLUMN_DIRNAME,
Jiri Moskovcak a42079
     COLUMN_LATEST_CRASH_STR,
Jiri Moskovcak a42079
     COLUMN_LATEST_CRASH,
Jiri Moskovcak a42079
     COLUMN_DUMP_DIR,
Jiri Moskovcak a42079
+    COLUMN_REPORTED_TO,
Jiri Moskovcak a42079
     NUM_COLUMNS
Jiri Moskovcak a42079
 };
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
+//FIXME: maybe we can use strrchr and make this faster...
Jiri Moskovcak a42079
+static char *get_last_line(const char* msg)
Jiri Moskovcak a42079
+{
Jiri Moskovcak a42079
+    const char *curr_end = NULL;
Jiri Moskovcak a42079
+    const char *start = msg;
Jiri Moskovcak a42079
+    const char *end = msg;
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    while((curr_end = strchr(end, '\n')) != NULL)
Jiri Moskovcak a42079
+    {
Jiri Moskovcak a42079
+        end = curr_end;
Jiri Moskovcak a42079
+        curr_end = strchr(end+1, '\n');
Jiri Moskovcak a42079
+        if (curr_end == NULL || strchr(end+2, '\n') == NULL)
Jiri Moskovcak a42079
+            break;
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+        start = end+1;
Jiri Moskovcak a42079
+        end = curr_end;
Jiri Moskovcak a42079
+    }
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    //fix the case where reported_to has only 1 line without \n
Jiri Moskovcak a42079
+    if (end == msg)
Jiri Moskovcak a42079
+        end = end + strlen(msg);
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    return xstrndup(start, end - start);
Jiri Moskovcak a42079
+}
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
 static void add_directory_to_dirlist(const char *dirname)
Jiri Moskovcak a42079
 {
Jiri Moskovcak a42079
     /* Silently ignore *any* errors, not only EACCES.
Jiri Moskovcak a42079
@@ -67,21 +94,11 @@ static void add_directory_to_dirlist(const char *dirname)
Jiri Moskovcak a42079
     {
Jiri Moskovcak a42079
         time_t t = strtol(time_str, NULL, 10); /* atoi won't work past 2038! */
Jiri Moskovcak a42079
         struct tm *ptm = localtime(&t);
Jiri Moskovcak a42079
-        size_t time_len = strftime(time_buf, sizeof(time_buf)-1, "%Y-%m-%m %H:%M", ptm);
Jiri Moskovcak a42079
+        size_t time_len = strftime(time_buf, sizeof(time_buf)-1, "%Y-%m-%d %H:%M", ptm);
Jiri Moskovcak a42079
         time_buf[time_len] = '\0';
Jiri Moskovcak a42079
     }
Jiri Moskovcak a42079
     free(time_str);
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
-    /*
Jiri Moskovcak a42079
-    char *msg = dd_load_text_ext(dd, FILENAME_REPORTED_TO, 0
Jiri Moskovcak a42079
-                | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE
Jiri Moskovcak a42079
-                | DD_FAIL_QUIETLY_ENOENT
Jiri Moskovcak a42079
-                | DD_FAIL_QUIETLY_EACCES
Jiri Moskovcak a42079
-    );
Jiri Moskovcak a42079
-    const char *reported = (msg ? GTK_STOCK_YES : GTK_STOCK_NO);
Jiri Moskovcak a42079
-    free(msg);
Jiri Moskovcak a42079
-    */
Jiri Moskovcak a42079
-
Jiri Moskovcak a42079
     char *reason = dd_load_text(dd, FILENAME_REASON);
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
     /* the source of the problem:
Jiri Moskovcak a42079
@@ -102,18 +119,38 @@ static void add_directory_to_dirlist(const char *dirname)
Jiri Moskovcak a42079
         );
Jiri Moskovcak a42079
     }
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
+    char *msg = dd_load_text_ext(dd, FILENAME_REPORTED_TO, 0
Jiri Moskovcak a42079
+                | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE
Jiri Moskovcak a42079
+                | DD_FAIL_QUIETLY_ENOENT
Jiri Moskovcak a42079
+                | DD_FAIL_QUIETLY_EACCES
Jiri Moskovcak a42079
+    );
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    GtkListStore *list_store;
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    char *subm_status = NULL;
Jiri Moskovcak a42079
+    if (msg)
Jiri Moskovcak a42079
+    {
Jiri Moskovcak a42079
+        list_store = s_reported_dumps_list_store;
Jiri Moskovcak a42079
+        subm_status = get_last_line(msg);
Jiri Moskovcak a42079
+    }
Jiri Moskovcak a42079
+    else
Jiri Moskovcak a42079
+        list_store = s_dumps_list_store;
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
     GtkTreeIter iter;
Jiri Moskovcak a42079
-    gtk_list_store_append(s_dumps_list_store, &iter);
Jiri Moskovcak a42079
-    gtk_list_store_set(s_dumps_list_store, &iter,
Jiri Moskovcak a42079
+    gtk_list_store_append(list_store, &iter);
Jiri Moskovcak a42079
+    gtk_list_store_set(list_store, &iter,
Jiri Moskovcak a42079
                           COLUMN_SOURCE, source,
Jiri Moskovcak a42079
                           COLUMN_REASON, reason,
Jiri Moskovcak a42079
-                          COLUMN_DIRNAME, dd->dd_dirname,
Jiri Moskovcak a42079
                           //OPTION: time format
Jiri Moskovcak a42079
                           COLUMN_LATEST_CRASH_STR, time_buf,
Jiri Moskovcak a42079
                           COLUMN_LATEST_CRASH, time,
Jiri Moskovcak a42079
                           COLUMN_DUMP_DIR, dirname,
Jiri Moskovcak a42079
+                          COLUMN_REPORTED_TO, msg ? subm_status : NULL,
Jiri Moskovcak a42079
                           -1);
Jiri Moskovcak a42079
+    /* this is safe, subm_status is either null or malloced string from get_last_line */
Jiri Moskovcak a42079
+    free(subm_status);
Jiri Moskovcak a42079
+    free(msg);
Jiri Moskovcak a42079
     free(reason);
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
     dd_close(dd);
Jiri Moskovcak a42079
@@ -123,6 +160,7 @@ static void add_directory_to_dirlist(const char *dirname)
Jiri Moskovcak a42079
 static void rescan_dirs_and_add_to_dirlist(void)
Jiri Moskovcak a42079
 {
Jiri Moskovcak a42079
     gtk_list_store_clear(s_dumps_list_store);
Jiri Moskovcak a42079
+    gtk_list_store_clear(s_reported_dumps_list_store);
Jiri Moskovcak a42079
     scan_dirs_and_add_to_dirlist();
Jiri Moskovcak a42079
 }
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
@@ -232,7 +270,7 @@ static void delete_report(GtkTreeView *treeview)
Jiri Moskovcak a42079
             VERB1 log("Deleting '%s'", dump_dir_name);
Jiri Moskovcak a42079
             if (delete_dump_dir_possibly_using_abrtd(dump_dir_name) == 0)
Jiri Moskovcak a42079
             {
Jiri Moskovcak a42079
-                gtk_list_store_remove(s_dumps_list_store, &iter);
Jiri Moskovcak a42079
+                gtk_list_store_remove(GTK_LIST_STORE(store), &iter);
Jiri Moskovcak a42079
             }
Jiri Moskovcak a42079
             else
Jiri Moskovcak a42079
             {
Jiri Moskovcak a42079
@@ -262,7 +300,9 @@ static gint on_key_press_event_cb(GtkTreeView *treeview, GdkEventKey *key, gpoin
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
 static void on_btn_delete_cb(GtkButton *button, gpointer unused)
Jiri Moskovcak a42079
 {
Jiri Moskovcak a42079
+    /* delete from both treeviews */
Jiri Moskovcak a42079
     delete_report(GTK_TREE_VIEW(s_treeview));
Jiri Moskovcak a42079
+    delete_report(GTK_TREE_VIEW(s_reported_treeview));
Jiri Moskovcak a42079
 }
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
 static void on_menu_help_cb(GtkMenuItem *menuitem, gpointer unused)
Jiri Moskovcak a42079
@@ -421,6 +461,50 @@ static void add_columns(GtkTreeView *treeview)
Jiri Moskovcak a42079
     gtk_tree_view_append_column(treeview, column);
Jiri Moskovcak a42079
 }
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
+static void add_columns_reported(GtkTreeView *treeview)
Jiri Moskovcak a42079
+{
Jiri Moskovcak a42079
+    GtkCellRenderer *renderer;
Jiri Moskovcak a42079
+    GtkTreeViewColumn *column;
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    renderer = gtk_cell_renderer_text_new();
Jiri Moskovcak a42079
+    column = gtk_tree_view_column_new_with_attributes(_("Source"),
Jiri Moskovcak a42079
+                                                     renderer,
Jiri Moskovcak a42079
+                                                     "text",
Jiri Moskovcak a42079
+                                                     COLUMN_SOURCE,
Jiri Moskovcak a42079
+                                                     NULL);
Jiri Moskovcak a42079
+    gtk_tree_view_column_set_resizable(column, TRUE);
Jiri Moskovcak a42079
+    gtk_tree_view_column_set_sort_column_id(column, COLUMN_SOURCE);
Jiri Moskovcak a42079
+    gtk_tree_view_append_column(treeview, column);
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    renderer = gtk_cell_renderer_text_new();
Jiri Moskovcak a42079
+    column = gtk_tree_view_column_new_with_attributes(_("Problem"),
Jiri Moskovcak a42079
+                                                     renderer,
Jiri Moskovcak a42079
+                                                     "text",
Jiri Moskovcak a42079
+                                                     COLUMN_REASON,
Jiri Moskovcak a42079
+                                                     NULL);
Jiri Moskovcak a42079
+    gtk_tree_view_column_set_resizable(column, TRUE);
Jiri Moskovcak a42079
+    gtk_tree_view_column_set_sort_column_id(column, COLUMN_REASON);
Jiri Moskovcak a42079
+    gtk_tree_view_append_column(treeview, column);
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    renderer = gtk_cell_renderer_text_new();
Jiri Moskovcak a42079
+    column = gtk_tree_view_column_new_with_attributes(_("Date Submitted"),
Jiri Moskovcak a42079
+                                                     renderer,
Jiri Moskovcak a42079
+                                                     "text",
Jiri Moskovcak a42079
+                                                     COLUMN_LATEST_CRASH_STR,
Jiri Moskovcak a42079
+                                                     NULL);
Jiri Moskovcak a42079
+    gtk_tree_view_column_set_sort_column_id(column, COLUMN_LATEST_CRASH);
Jiri Moskovcak a42079
+    gtk_tree_view_append_column(treeview, column);
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    renderer = gtk_cell_renderer_text_new();
Jiri Moskovcak a42079
+    column = gtk_tree_view_column_new_with_attributes(_("Submision Result"),
Jiri Moskovcak a42079
+                                                     renderer,
Jiri Moskovcak a42079
+                                                     "text",
Jiri Moskovcak a42079
+                                                     COLUMN_REPORTED_TO,
Jiri Moskovcak a42079
+                                                     NULL);
Jiri Moskovcak a42079
+    //gtk_tree_view_column_set_sort_column_id(column, COLUMN_LATEST_CRASH);
Jiri Moskovcak a42079
+    gtk_tree_view_append_column(treeview, column);
Jiri Moskovcak a42079
+}
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
 static GtkWidget *create_menu(void)
Jiri Moskovcak a42079
 {
Jiri Moskovcak a42079
     /* main bar */
Jiri Moskovcak a42079
@@ -476,40 +560,102 @@ static GtkWidget *create_main_window(void)
Jiri Moskovcak a42079
     gtk_window_set_default_icon_name("abrt");
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
     GtkWidget *main_vbox = gtk_vbox_new(false, 0);
Jiri Moskovcak a42079
+    /* add menu */
Jiri Moskovcak a42079
+    gtk_box_pack_start(GTK_BOX(main_vbox), create_menu(), false, false, 0);
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
-    /* Scrolled region inside main window */
Jiri Moskovcak a42079
-    GtkWidget *scroll_win = gtk_scrolled_window_new(NULL, NULL);
Jiri Moskovcak a42079
-    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scroll_win),
Jiri Moskovcak a42079
+    GtkWidget *not_subm_vbox = gtk_vbox_new(false, 0);
Jiri Moskovcak a42079
+    gtk_container_set_border_width(GTK_CONTAINER(not_subm_vbox), 10);
Jiri Moskovcak a42079
+    GtkWidget *subm_vbox = gtk_vbox_new(false, 0);
Jiri Moskovcak a42079
+    gtk_container_set_border_width(GTK_CONTAINER(subm_vbox), 10);
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    /* Scrolled region for not reported problems inside main window*/
Jiri Moskovcak a42079
+    GtkWidget *new_problems_scroll_win = gtk_scrolled_window_new(NULL, NULL);
Jiri Moskovcak a42079
+    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(new_problems_scroll_win),
Jiri Moskovcak a42079
                                           GTK_SHADOW_ETCHED_IN);
Jiri Moskovcak a42079
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win),
Jiri Moskovcak a42079
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(new_problems_scroll_win),
Jiri Moskovcak a42079
                                           GTK_POLICY_AUTOMATIC,
Jiri Moskovcak a42079
                                           GTK_POLICY_AUTOMATIC);
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
-    gtk_box_pack_start(GTK_BOX(main_vbox), create_menu(), false, false, 0);
Jiri Moskovcak a42079
-    gtk_box_pack_start(GTK_BOX(main_vbox), scroll_win, true, true, 0);
Jiri Moskovcak a42079
-    gtk_container_add(GTK_CONTAINER(g_main_window), main_vbox);
Jiri Moskovcak a42079
+    GtkWidget *not_subm_lbl = gtk_label_new(_("Not submitted reports"));
Jiri Moskovcak a42079
+    gtk_misc_set_alignment(GTK_MISC(not_subm_lbl), 0, 0);
Jiri Moskovcak a42079
+    gtk_label_set_markup(GTK_LABEL(not_subm_lbl), _("Not submitted reports"));
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    /* add label for not submitted tree view */
Jiri Moskovcak a42079
+    gtk_box_pack_start(GTK_BOX(not_subm_vbox), not_subm_lbl, false, false, 0);
Jiri Moskovcak a42079
+    gtk_box_pack_start(GTK_BOX(not_subm_vbox), new_problems_scroll_win, true, true, 0);
Jiri Moskovcak a42079
+    gtk_box_pack_start(GTK_BOX(main_vbox), not_subm_vbox, true, true, 0);
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
     /* Tree view inside scrolled region */
Jiri Moskovcak a42079
     s_treeview = gtk_tree_view_new();
Jiri Moskovcak a42079
     g_object_set(s_treeview, "rules-hint", 1, NULL); /* use alternating colors */
Jiri Moskovcak a42079
     add_columns(GTK_TREE_VIEW(s_treeview));
Jiri Moskovcak a42079
-    gtk_container_add(GTK_CONTAINER(scroll_win), s_treeview);
Jiri Moskovcak a42079
+    gtk_container_add(GTK_CONTAINER(new_problems_scroll_win), s_treeview);
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
     /* Create data store for the list and attach it */
Jiri Moskovcak a42079
-    s_dumps_list_store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_STRING, /* source */
Jiri Moskovcak a42079
+    s_dumps_list_store = gtk_list_store_new(NUM_COLUMNS,
Jiri Moskovcak a42079
+                                           G_TYPE_STRING, /* source */
Jiri Moskovcak a42079
+                                           G_TYPE_STRING, /* executable */
Jiri Moskovcak a42079
+                                           G_TYPE_STRING, /* time */
Jiri Moskovcak a42079
+                                           G_TYPE_INT,    /* unix time - used for sort */
Jiri Moskovcak a42079
+                                           G_TYPE_STRING, /* dump dir path */
Jiri Moskovcak a42079
+                                           G_TYPE_STRING); /* reported_to */
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    //FIXME: configurable!!
Jiri Moskovcak a42079
+    gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(s_dumps_list_store),
Jiri Moskovcak a42079
+                                        COLUMN_LATEST_CRASH,
Jiri Moskovcak a42079
+                                        GTK_SORT_DESCENDING);
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    gtk_tree_view_set_model(GTK_TREE_VIEW(s_treeview), GTK_TREE_MODEL(s_dumps_list_store));
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    /* Double click/Enter handler */
Jiri Moskovcak a42079
+    g_signal_connect(s_treeview, "row-activated", G_CALLBACK(on_row_activated_cb), NULL);
Jiri Moskovcak a42079
+    /* Delete handler */
Jiri Moskovcak a42079
+    g_signal_connect(s_treeview, "key-press-event", G_CALLBACK(on_key_press_event_cb), NULL);
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    /* scrolled region for reported problems */
Jiri Moskovcak a42079
+    GtkWidget *reported_problems_scroll_win = gtk_scrolled_window_new(NULL, NULL);
Jiri Moskovcak a42079
+    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(reported_problems_scroll_win),
Jiri Moskovcak a42079
+                                          GTK_SHADOW_ETCHED_IN);
Jiri Moskovcak a42079
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(reported_problems_scroll_win),
Jiri Moskovcak a42079
+                                          GTK_POLICY_AUTOMATIC,
Jiri Moskovcak a42079
+                                          GTK_POLICY_AUTOMATIC);
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    GtkWidget *subm_lbl = gtk_label_new(_("Submitted reports"));
Jiri Moskovcak a42079
+    /* align to left */
Jiri Moskovcak a42079
+    gtk_misc_set_alignment(GTK_MISC(subm_lbl), 0, 0);
Jiri Moskovcak a42079
+    gtk_label_set_markup(GTK_LABEL(subm_lbl), _("Submitted reports"));
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    /* add label for submitted tree view */
Jiri Moskovcak a42079
+    gtk_box_pack_start(GTK_BOX(subm_vbox), subm_lbl, false, false, 0);
Jiri Moskovcak a42079
+    gtk_box_pack_start(GTK_BOX(subm_vbox), reported_problems_scroll_win, true, true, 0);
Jiri Moskovcak a42079
+    gtk_box_pack_start(GTK_BOX(main_vbox), subm_vbox, true, true, 0);
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    /* Tree view inside scrolled region */
Jiri Moskovcak a42079
+    s_reported_treeview = gtk_tree_view_new();
Jiri Moskovcak a42079
+    g_object_set(s_reported_treeview, "rules-hint", 1, NULL); /* use alternating colors */
Jiri Moskovcak a42079
+    add_columns_reported(GTK_TREE_VIEW(s_reported_treeview));
Jiri Moskovcak a42079
+    gtk_container_add(GTK_CONTAINER(reported_problems_scroll_win), s_reported_treeview);
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    /* Create data store for the list and attach it */
Jiri Moskovcak a42079
+    s_reported_dumps_list_store = gtk_list_store_new(NUM_COLUMNS,
Jiri Moskovcak a42079
+                                                       G_TYPE_STRING, /* source */
Jiri Moskovcak a42079
                                                        G_TYPE_STRING, /* executable */
Jiri Moskovcak a42079
-                                                       G_TYPE_STRING, /* hostname */
Jiri Moskovcak a42079
                                                        G_TYPE_STRING, /* time */
Jiri Moskovcak a42079
                                                        G_TYPE_INT,    /* unix time - used for sort */
Jiri Moskovcak a42079
                                                        G_TYPE_STRING, /* dump dir path */
Jiri Moskovcak a42079
-                                                       G_TYPE_STRING);/* row background */
Jiri Moskovcak a42079
+                                                       G_TYPE_STRING); /* reported_to */
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
     //FIXME: configurable!!
Jiri Moskovcak a42079
-    gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(s_dumps_list_store),
Jiri Moskovcak a42079
+    gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(s_reported_dumps_list_store),
Jiri Moskovcak a42079
                                         COLUMN_LATEST_CRASH,
Jiri Moskovcak a42079
                                         GTK_SORT_DESCENDING);
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
-    gtk_tree_view_set_model(GTK_TREE_VIEW(s_treeview), GTK_TREE_MODEL(s_dumps_list_store));
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
+    gtk_tree_view_set_model(GTK_TREE_VIEW(s_reported_treeview), GTK_TREE_MODEL(s_reported_dumps_list_store));
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
     /* buttons are homogenous so set size only for one button and it will
Jiri Moskovcak a42079
      * work for the rest buttons in same gtk_hbox_new() */
Jiri Moskovcak a42079
@@ -518,20 +664,23 @@ static GtkWidget *create_main_window(void)
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
     GtkWidget *btn_delete = gtk_button_new_from_stock(GTK_STOCK_DELETE);
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
-    GtkWidget *hbox_report_delete = gtk_hbox_new(true, 4);
Jiri Moskovcak a42079
+    GtkWidget *hbox_report_delete = gtk_hbox_new(true, 0);
Jiri Moskovcak a42079
     gtk_box_pack_start(GTK_BOX(hbox_report_delete), btn_delete, true, true, 0);
Jiri Moskovcak a42079
-    gtk_box_pack_start(GTK_BOX(hbox_report_delete), btn_report, true, true, 0);
Jiri Moskovcak a42079
+    gtk_box_pack_start(GTK_BOX(hbox_report_delete), btn_report, true, true, 10);
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
     GtkWidget *halign = gtk_alignment_new(1, 0, 0, 0);
Jiri Moskovcak a42079
     gtk_container_add(GTK_CONTAINER(halign), hbox_report_delete);
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
     gtk_box_pack_start(GTK_BOX(main_vbox), halign, false, false, 10);
Jiri Moskovcak a42079
 
Jiri Moskovcak a42079
+    /* put the main_vbox to main window */
Jiri Moskovcak a42079
+    gtk_container_add(GTK_CONTAINER(g_main_window), main_vbox);
Jiri Moskovcak a42079
+
Jiri Moskovcak a42079
     /* Double click/Enter handler */
Jiri Moskovcak a42079
-    g_signal_connect(s_treeview, "row-activated", G_CALLBACK(on_row_activated_cb), NULL);
Jiri Moskovcak a42079
+    g_signal_connect(s_reported_treeview, "row-activated", G_CALLBACK(on_row_activated_cb), NULL);
Jiri Moskovcak a42079
     g_signal_connect(btn_report, "clicked", G_CALLBACK(on_btn_report_cb), NULL);
Jiri Moskovcak a42079
     /* Delete handler */
Jiri Moskovcak a42079
-    g_signal_connect(s_treeview, "key-press-event", G_CALLBACK(on_key_press_event_cb), NULL);
Jiri Moskovcak a42079
+    g_signal_connect(s_reported_treeview, "key-press-event", G_CALLBACK(on_key_press_event_cb), NULL);
Jiri Moskovcak a42079
     g_signal_connect(btn_delete, "clicked", G_CALLBACK(on_btn_delete_cb), NULL);
Jiri Moskovcak a42079
     /* Quit when user closes the main window */
Jiri Moskovcak a42079
     g_signal_connect(g_main_window, "destroy", gtk_main_quit, NULL);
Jiri Moskovcak a42079
-- 
Jiri Moskovcak a42079
1.7.6
Jiri Moskovcak a42079