diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2011-02-10 18:04:43 +0100 |
---|---|---|
committer | Denys Vlasenko <dvlasenk@redhat.com> | 2011-02-10 18:04:43 +0100 |
commit | 2abf0fc078221715abbd20c8451d300eaf787848 (patch) | |
tree | 1dc278a78fda61ad68bcb889fd3f8c94b532900b /src/gui-gtk | |
parent | 394508ab25eb2a78a40cde19714e9afa2537c393 (diff) | |
download | abrt-2abf0fc078221715abbd20c8451d300eaf787848.tar.gz abrt-2abf0fc078221715abbd20c8451d300eaf787848.tar.xz abrt-2abf0fc078221715abbd20c8451d300eaf787848.zip |
abrt-gtk: make Delete key actually delete the dump dir
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'src/gui-gtk')
-rw-r--r-- | src/gui-gtk/Makefile.am | 6 | ||||
-rw-r--r-- | src/gui-gtk/abrt-gtk.c | 23 | ||||
-rw-r--r-- | src/gui-gtk/main.c | 30 |
3 files changed, 55 insertions, 4 deletions
diff --git a/src/gui-gtk/Makefile.am b/src/gui-gtk/Makefile.am index 4a77b3f3..a0d0de40 100644 --- a/src/gui-gtk/Makefile.am +++ b/src/gui-gtk/Makefile.am @@ -14,9 +14,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) @@ -26,8 +26,8 @@ abrt_gtk_LDADD = \ ../lib/libabrt_dbus.la \ -lglib-2.0 \ -lgthread-2.0 \ - $(GTK_LIBS) -# $(DBUS_LIBS) + $(GTK_LIBS) \ + $(DBUS_LIBS) # $(LIBNOTIFY_LIBS) #test_report_SOURCES = \ diff --git a/src/gui-gtk/abrt-gtk.c b/src/gui-gtk/abrt-gtk.c index 42b18fb4..47e0277b 100644 --- a/src/gui-gtk/abrt-gtk.c +++ b/src/gui-gtk/abrt-gtk.c @@ -1,6 +1,7 @@ #include <gtk/gtk.h> #include <gdk/gdkkeysyms.h> #include "abrtlib.h" +#include "abrt_dbus.h" #include "abrt-gtk.h" static GtkListStore *dumps_list_store; @@ -91,7 +92,27 @@ static gint on_key_press_event_cb(GtkTreeView *treeview, GdkEventKey *key, gpoin { GValue d_dir = { 0 }; gtk_tree_model_get_value(store, &iter, COLUMN_DUMP_DIR, &d_dir); - g_print("CALL: del_event(%s)\n", g_value_get_string(&d_dir)); + const char *dump_dir_name = g_value_get_string(&d_dir); + + g_print("CALL: del_event(%s)\n", dump_dir_name); + + /* Try to delete it ourselves */ + struct dump_dir *dd = dd_opendir(dump_dir_name, DD_OPEN_READONLY); + if (dd) + { + if (dd->locked) /* it is not readonly */ + { + dd_delete(dd); + return TRUE; + } + dd_close(dd); + } + + /* Ask abrtd to do it for us */ + connect_to_abrtd_and_call_DeleteDebugDump(dump_dir_name); + +//TODO: refresh the list of crashes + } } diff --git a/src/gui-gtk/main.c b/src/gui-gtk/main.c index b18f854f..c933ac86 100644 --- a/src/gui-gtk/main.c +++ b/src/gui-gtk/main.c @@ -5,6 +5,8 @@ #define PROGNAME "abrt-gtk" +static DBusConnection* s_dbus_conn; + static void scan_directory_and_add_to_dirlist(const char *path) { DIR *dp = opendir(path); @@ -30,6 +32,34 @@ static void scan_directory_and_add_to_dirlist(const char *path) closedir(dp); } +void delete_dump_dir_possibly_via_dbus(const char *dump_dir_name) +{ + /* Try to delete it ourselves */ + struct dump_dir *dd = dd_opendir(dump_dir_name, DD_OPEN_READONLY); + if (dd) + { + if (dd->locked) /* it is not readonly */ + { + dd_delete(dd); + break; + } + dd_close(dd); + } + + /* Ask abrtd to do it for us */ + DBusError err; + dbus_error_init(&err); + s_dbus_conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err); + handle_dbus_err(s_dbus_conn == NULL, &err); + + exitcode = call_DeleteDebugDump(dump_dir_name); + if (exitcode == ENOENT) + error_msg_and_die("Crash '%s' not found", dump_dir_name); + if (exitcode != 0) + error_msg_and_die("Can't delete debug dump '%s'", dump_dir_name); + break; +} + int main(int argc, char **argv) { /* I18n */ |