From 57e6ab1d067c2a6ee7b6d6d9db41701817f02f5e Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 9 Feb 2011 15:06:44 +0100 Subject: abrt-gtk: some cleanups Signed-off-by: Denys Vlasenko --- src/gui-gtk/Makefile.am | 8 ++--- src/gui-gtk/abrt-gtk.c | 95 ++++++++++++++++++++++--------------------------- src/gui-gtk/abrt-gtk.h | 1 - src/gui-gtk/list_dir.c | 61 +++++++++++-------------------- src/gui-gtk/list_dir.h | 2 -- src/gui-gtk/main.c | 60 ++++++++++--------------------- 6 files changed, 86 insertions(+), 141 deletions(-) (limited to 'src') diff --git a/src/gui-gtk/Makefile.am b/src/gui-gtk/Makefile.am index d476866c..c8524183 100644 --- a/src/gui-gtk/Makefile.am +++ b/src/gui-gtk/Makefile.am @@ -17,9 +17,9 @@ abrt_gtk_CFLAGS = \ -DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \ -DICON_DIR=\"${datadir}/abrt/icons/hicolor/48x48/status\" \ $(GTK_CFLAGS) \ - $(DBUS_CFLAGS) \ -D_GNU_SOURCE \ -Wall -Werror +# $(DBUS_CFLAGS) # -I/usr/include/glib-2.0 # -I/usr/lib/glib-2.0/include # $(LIBNOTIFY_CFLAGS) @@ -29,9 +29,9 @@ abrt_gtk_LDADD = \ ../lib/libabrt_dbus.la \ -lglib-2.0 \ -lgthread-2.0 \ - $(DBUS_LIBS) \ - $(LIBNOTIFY_LIBS) \ $(GTK_LIBS) +# $(DBUS_LIBS) +# $(LIBNOTIFY_LIBS) #test_report_SOURCES = \ # test_report.c @@ -45,4 +45,4 @@ abrt_gtk_LDADD = \ DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ -@INTLTOOL_DESKTOP_RULE@ \ No newline at end of file +@INTLTOOL_DESKTOP_RULE@ diff --git a/src/gui-gtk/abrt-gtk.c b/src/gui-gtk/abrt-gtk.c index d67c690b..c0df5ebf 100644 --- a/src/gui-gtk/abrt-gtk.c +++ b/src/gui-gtk/abrt-gtk.c @@ -1,24 +1,19 @@ -#include #include -#include -#include -#include "list_dir.h" #include "abrtlib.h" +#include "list_dir.h" - - -GtkListStore *dumps_list_store; -GtkTreeIter iter; +static GtkListStore *dumps_list_store; +static GtkTreeIter iter___; enum { - COLUMN_REPORTED, - COLUMN_APPLICATION, - COLUMN_HOSTNAME, - COLUMN_LATEST_CRASH_STR, - COLUMN_LATEST_CRASH, - COLUMN_DUMP_DIR, - NUM_COLUMNS + COLUMN_REPORTED, + COLUMN_APPLICATION, + COLUMN_HOSTNAME, + COLUMN_LATEST_CRASH_STR, + COLUMN_LATEST_CRASH, + COLUMN_DUMP_DIR, + NUM_COLUMNS }; /* @@ -29,17 +24,16 @@ void gtk_tree_model_get_value (GtkTreeModel *tree_model, GValue *value); */ - -void on_row_activated_cb(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) +static void on_row_activated_cb(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) { GtkTreeIter iter; GtkTreeSelection *selection = gtk_tree_view_get_selection(tree_view); GtkTreeModel *dump_list_store = gtk_tree_view_get_model(tree_view); gtk_tree_model_get_iter(dump_list_store, &iter, path); GValue d_dir = {0}; - if(selection != NULL) + if (selection != NULL) { - if(gtk_tree_selection_get_selected(selection, &dump_list_store, &iter) == TRUE) + if (gtk_tree_selection_get_selected(selection, &dump_list_store, &iter) == TRUE) { gtk_tree_model_get_value(dump_list_store, &iter, COLUMN_DUMP_DIR, &d_dir); g_print("CALL: run_event(%s)\n", g_value_get_string(&d_dir)); @@ -47,14 +41,12 @@ void on_row_activated_cb(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewC } } -void view_store_add_item(gpointer item, gpointer data) +static void view_store_add_item(gpointer item, gpointer data) { char *dir = (char *)item; - struct dump_dir *dd; - - dd = dd_opendir(dir, DD_OPEN_READONLY); - if(dd == NULL) + struct dump_dir *dd = dd_opendir(dir, DD_OPEN_READONLY); + if (!dd) return; time_t time = atoi(dd_load_text(dd, FILENAME_TIME)); @@ -63,8 +55,8 @@ void view_store_add_item(gpointer item, gpointer data) size_t time_len = strftime(time_buf, 59, "%c", ptm); time_buf[time_len] = '\0'; - gtk_list_store_append(dumps_list_store, &iter); - gtk_list_store_set(dumps_list_store, &iter, + gtk_list_store_append(dumps_list_store, &iter___); + gtk_list_store_set(dumps_list_store, &iter___, COLUMN_REPORTED, "??", COLUMN_APPLICATION, dd_load_text(dd, FILENAME_EXECUTABLE), COLUMN_HOSTNAME, dd_load_text(dd, FILENAME_HOSTNAME), @@ -77,52 +69,51 @@ void view_store_add_item(gpointer item, gpointer data) VERB1 log("added: %s\n", dir); } -static void -add_columns (GtkTreeView *treeview) +static void add_columns(GtkTreeView *treeview) { - GtkCellRenderer *renderer; - GtkTreeViewColumn *column; + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; - /* column reported */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes(_("Reported"), + /* column reported */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes(_("Reported"), renderer, "text", COLUMN_REPORTED, NULL); - gtk_tree_view_column_set_sort_column_id(column, COLUMN_REPORTED); - gtk_tree_view_append_column(treeview, column); + gtk_tree_view_column_set_sort_column_id(column, COLUMN_REPORTED); + gtk_tree_view_append_column(treeview, column); - /* column for executable path */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes(_("Application"), + /* column for executable path */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes(_("Application"), renderer, "text", COLUMN_APPLICATION, NULL); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sort_column_id(column, COLUMN_APPLICATION); - gtk_tree_view_append_column(treeview, column); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sort_column_id(column, COLUMN_APPLICATION); + gtk_tree_view_append_column(treeview, column); - /* column for hostname */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes(_("Hostname"), + /* column for hostname */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes(_("Hostname"), renderer, "text", COLUMN_HOSTNAME, NULL); - gtk_tree_view_column_set_sort_column_id(column, COLUMN_HOSTNAME); - gtk_tree_view_append_column(treeview, column); + gtk_tree_view_column_set_sort_column_id(column, COLUMN_HOSTNAME); + gtk_tree_view_append_column(treeview, column); - /* column for the date of the last crash */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes(_("Last Crash"), + /* column for the date of the last crash */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes(_("Last Crash"), renderer, "text", COLUMN_LATEST_CRASH_STR, NULL); - gtk_tree_view_column_set_sort_column_id(column, COLUMN_LATEST_CRASH); - gtk_tree_view_append_column(treeview, column); + gtk_tree_view_column_set_sort_column_id(column, COLUMN_LATEST_CRASH); + gtk_tree_view_append_column(treeview, column); } @@ -166,7 +157,7 @@ GtkWidget *main_window_create() G_TYPE_STRING, /* time */ G_TYPE_INT, /* unix time - used for sort */ G_TYPE_STRING);/* dump dir path */ - //if(dumps_list_store == NULL) + //if (dumps_list_store == NULL) // return NULL; gtk_tree_view_set_model(GTK_TREE_VIEW(dump_tv), GTK_TREE_MODEL(dumps_list_store)); g_signal_connect(dump_tv, "row-activated", G_CALLBACK(on_row_activated_cb), NULL); diff --git a/src/gui-gtk/abrt-gtk.h b/src/gui-gtk/abrt-gtk.h index c8c9e017..a3c2cbf7 100644 --- a/src/gui-gtk/abrt-gtk.h +++ b/src/gui-gtk/abrt-gtk.h @@ -1,3 +1,2 @@ int dump_list_hydrate(char *path); GtkWidget *main_window_create(); - diff --git a/src/gui-gtk/list_dir.c b/src/gui-gtk/list_dir.c index 8a0d47bd..0e471a84 100644 --- a/src/gui-gtk/list_dir.c +++ b/src/gui-gtk/list_dir.c @@ -1,48 +1,29 @@ -#ifndef _GNU_SOURCE - #define _GNU_SOURCE -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "abrtlib.h" GList *get_dump_list(const char *path) { - GList *dumps = NULL; - DIR *dp; - struct dirent *ep; - //char *path = "./"; - char *current_dir_path; - - dp = opendir(path); + DIR *dp = opendir(path); + if (!dp) + { + perror_msg("Can't open directory '%s'", path); + return NULL; + } - if (dp != NULL) + GList *dumps = NULL; + struct dirent *dent; + while ((dent = readdir(dp)) != NULL) { - while ((ep = readdir (dp))) - /* d_type is not supported on all systems, but should be ok for us - * can be implemented using stat if someone wants to do it... - */ - if(ep->d_name && ep->d_name[0] != '.' && ep->d_type == DT_DIR) - { - if(asprintf(¤t_dir_path, "%s/%s", path, ep->d_name) != -1) - { - //FIXME: should be int ret = access(current_dir_path, R_OK|W_OK); - int ret = access(current_dir_path, R_OK); - if(ret == 0) - { - dumps = g_list_prepend(dumps, current_dir_path); - } - } - } - (void) closedir (dp); + if (dot_or_dotdot(dent->d_name)) + continue; /* skip "." and ".." */ + + char *current_dir_path = concat_path_file(path, dent->d_name); + //FIXME: should be int ret = access(current_dir_path, R_OK|W_OK); + int ret = access(current_dir_path, R_OK); + if (ret == 0) + dumps = g_list_prepend(dumps, current_dir_path); + else + free(current_dir_path); } - else - fprintf(stderr, "Couldn't open the directory %s: %s\n", path, strerror(errno)); + closedir(dp); return dumps; } diff --git a/src/gui-gtk/list_dir.h b/src/gui-gtk/list_dir.h index 1ee14e5d..cd3ef7c4 100644 --- a/src/gui-gtk/list_dir.h +++ b/src/gui-gtk/list_dir.h @@ -1,3 +1 @@ - GList *get_dump_list(const char *path); - diff --git a/src/gui-gtk/main.c b/src/gui-gtk/main.c index 66fee821..dfb3b04d 100644 --- a/src/gui-gtk/main.c +++ b/src/gui-gtk/main.c @@ -1,61 +1,37 @@ #include - #include "abrtlib.h" #include "abrt-gtk.h" - - int main(int argc, char **argv) { /* I18n */ setlocale(LC_ALL, ""); - char *path = "."; - //int optflags = 0; - int opt; - while ((opt = getopt(argc, argv, "c:d:v")) != -1) + gtk_init(&argc, &argv); + + GtkWidget *main_window = main_window_create(); + + const char *default_dirs[] = { + "/var/spool/abrt", + NULL, + NULL, + }; + argv++; + if (!argv[0]) { - switch (opt) - { - case 'c': - VERB1 log("Loading settings from '%s'", optarg); - //load_conf_file(optarg, settings, /*skip key w/o values:*/ true); - VERB3 log("Loaded '%s'", optarg); - break; - case 'd': - path = optarg; - break; - case 'v': - g_verbose++; - break; - default: - /* Careful: the string below contains tabs, dont replace with spaces */ - error_msg_and_die( - "Usage: abrt-gtk -c CONFFILE -d DIR [-v]" - "\n" - "\nReport a crash to Bugzilla" - "\n" - "\nOptions:" - "\n -c FILE Configuration file (may be given many times)" - "\n -d DIR Crash dump directory" - "\n -v Verbose" - "\n -s Log to syslog" - ); - } + char *home = getenv("HOME"); + if (home) + default_dirs[1] = concat_path_file(home, ".abrt/spool"); + argv = (char**)default_dirs; } + while (*argv) + dump_list_hydrate(*argv++); - if (argc > 1) - path = argv[1]; - - gtk_init(&argc, &argv); + gtk_widget_show_all(main_window); /* Prevent zombies when we spawn wizard */ signal(SIGCHLD, SIG_IGN); - GtkWidget *main_window = main_window_create(); - dump_list_hydrate(path); - gtk_widget_show_all(main_window); - /* Enter main loop */ gtk_main(); -- cgit