summaryrefslogtreecommitdiffstats
path: root/src/gui-gtk
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2011-02-10 18:04:43 +0100
committerDenys Vlasenko <dvlasenk@redhat.com>2011-02-10 18:04:43 +0100
commit2abf0fc078221715abbd20c8451d300eaf787848 (patch)
tree1dc278a78fda61ad68bcb889fd3f8c94b532900b /src/gui-gtk
parent394508ab25eb2a78a40cde19714e9afa2537c393 (diff)
downloadabrt-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.am6
-rw-r--r--src/gui-gtk/abrt-gtk.c23
-rw-r--r--src/gui-gtk/main.c30
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 */