summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKarel Klic <kklic@redhat.com>2011-03-15 10:04:31 +0100
committerKarel Klic <kklic@redhat.com>2011-03-15 10:04:31 +0100
commitedef58a8bcc561b7fb898df6802cd4b4c7400833 (patch)
tree045fb0f7c7cb146e4962b2424efc3334af5e365b /src
parent775659551adc37a079e099a1770abe8e933676d5 (diff)
parentc3295e8741d5f35e30301933bd853bf6c9369588 (diff)
downloadabrt-edef58a8bcc561b7fb898df6802cd4b4c7400833.tar.gz
abrt-edef58a8bcc561b7fb898df6802cd4b4c7400833.tar.xz
abrt-edef58a8bcc561b7fb898df6802cd4b4c7400833.zip
Merge branch 'master' of ssh://git.fedorahosted.org/git/abrt
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am2
-rw-r--r--src/daemon/MiddleWare.cpp12
-rw-r--r--src/gtk-helpers/Makefile.am23
-rw-r--r--src/gtk-helpers/abrt-keyring.c139
-rw-r--r--src/gtk-helpers/event_config_dialog.c (renamed from src/gui-gtk/event_config_dialog.c)71
-rw-r--r--src/gtk-helpers/libreport-gtk.h3
-rw-r--r--src/gui-gtk/Makefile.am7
-rw-r--r--src/gui-gtk/abrt-gtk.c25
-rw-r--r--src/gui-gtk/event_config_dialog.h1
-rw-r--r--src/include/report/event_config.h3
-rw-r--r--src/lib/event_config.c8
-rw-r--r--src/plugins/report_Bugzilla.xml2
12 files changed, 258 insertions, 38 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 066fadf2..7736a7c7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1 +1 @@
-SUBDIRS = include lib report-python hooks btparser daemon applet gui-gtk cli plugins gui-wizard-gtk retrace
+SUBDIRS = include lib report-python hooks btparser daemon applet gtk-helpers gui-gtk cli plugins gui-wizard-gtk retrace
diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp
index 8d62c697..84400361 100644
--- a/src/daemon/MiddleWare.cpp
+++ b/src/daemon/MiddleWare.cpp
@@ -744,6 +744,16 @@ int CreateReportThread(const char* crash_id, long caller_uid, int force, const c
/* Remove dump dir */
int DeleteDebugDump(const char *dump_dir_name, long caller_uid)
{
+ /* If doesn't start with "DEBUG_DUMPS_DIR/"... */
+ if (strncmp(dump_dir_name, DEBUG_DUMPS_DIR"/", strlen(DEBUG_DUMPS_DIR"/")) != 0
+ /* or contains "/." anywhere (-> might contain ".." component) */
+ || strstr(dump_dir_name + strlen(DEBUG_DUMPS_DIR), "/.")
+ ) {
+ /* Then refuse to operate on it (someone is attacking us??) */
+ error_msg("Bad dump directory name '%s', not deleting", dump_dir_name);
+ return MW_ERROR;
+ }
+
struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0);
if (!dd)
return MW_NOENT_ERROR;
@@ -760,7 +770,7 @@ int DeleteDebugDump(const char *dump_dir_name, long caller_uid)
if (!string_to_bool(inform_all))
{
dd_close(dd);
- error_msg("crash '%s' can't be accessed by user with uid %ld", dump_dir_name, caller_uid);
+ error_msg("Dump directory '%s' can't be accessed by user with uid %ld", dump_dir_name, caller_uid);
return 1;
}
}
diff --git a/src/gtk-helpers/Makefile.am b/src/gtk-helpers/Makefile.am
new file mode 100644
index 00000000..de35d39b
--- /dev/null
+++ b/src/gtk-helpers/Makefile.am
@@ -0,0 +1,23 @@
+# libreportgtk - the stuff shared among gtk clients (abrt-gui, wizard)
+lib_LTLIBRARIES = \
+ libreportgtk.la
+
+libreportgtk_la_SOURCES = \
+ libreport-gtk.h \
+ event_config_dialog.c \
+ abrt-keyring.c
+
+libreportgtk_la_CPPFLAGS = \
+ -Wall -Wwrite-strings -Werror \
+ -I$(srcdir)/../include/report -I$(srcdir)/../include \
+ -I$(srcdir)/../lib \
+ $(GTK_CFLAGS) \
+ $(GLIB_CFLAGS) \
+ $(GNOME_KEYRING_CFLAGS) \
+ -D_GNU_SOURCE
+libreportgtk_la_LDFLAGS = \
+ -version-info 0:1:0
+libreportgtk_la_LIBADD = \
+ $(GTK_LIBS) \
+ $(GLIB_LIBS) \
+ $(GNOME_KEYRING_CFLAGS)
diff --git a/src/gtk-helpers/abrt-keyring.c b/src/gtk-helpers/abrt-keyring.c
new file mode 100644
index 00000000..50bfa7e3
--- /dev/null
+++ b/src/gtk-helpers/abrt-keyring.c
@@ -0,0 +1,139 @@
+#include <gnome-keyring.h>
+#include <string.h>
+#include <stdlib.h>
+#include "abrtlib.h"
+
+static char *keyring;
+
+static guint32 search_item_id(const char *event_name)
+{
+ GnomeKeyringAttributeList *attrs = gnome_keyring_attribute_list_new();
+ GList *found;
+ //let's hope 0 is not valid item_id
+ guint32 item_id = 0;
+ gnome_keyring_attribute_list_append_string(attrs, "libreportEventConfig", event_name);
+ GnomeKeyringResult result = gnome_keyring_find_items_sync(
+ GNOME_KEYRING_ITEM_GENERIC_SECRET,
+ attrs,
+ &found);
+ if(result != GNOME_KEYRING_RESULT_OK)
+ return item_id;
+ if(found)
+ {
+ item_id = ((GnomeKeyringFound *)found->data)->item_id;
+ gnome_keyring_found_list_free(found);
+ }
+ return item_id;
+}
+
+void abrt_keyring_save_settings(const char *event_name)
+{
+ GList *l;
+ GnomeKeyringAttributeList *attrs = gnome_keyring_attribute_list_new();
+ guint32 item_id;
+ event_config_t *ec = get_event_config(event_name);
+ /* add string id which we use to search for items */
+ gnome_keyring_attribute_list_append_string(attrs, "libreportEventConfig", event_name);
+ for(l = g_list_first(ec->options); l != NULL; l = g_list_next(l))
+ {
+ event_option_t *op = (event_option_t *)l->data;
+ gnome_keyring_attribute_list_append_string(attrs, op->name, op->value);
+ }
+
+ GnomeKeyringResult result;
+ item_id = search_item_id(event_name);
+ if(item_id)
+ {
+ VERB2 log("updating item with id: %i", item_id);
+ /* found existing item, so just update the values */
+ result = gnome_keyring_item_set_attributes_sync(keyring, item_id, attrs);
+ }
+ else
+ {
+ /* did't find existing item, so create a new one */
+ result = gnome_keyring_item_create_sync(keyring,
+ GNOME_KEYRING_ITEM_GENERIC_SECRET, /* type */
+ event_name, /* display name */
+ attrs, /* attributes */
+ NULL, /* secret - no special handling for password it's stored in attrs */
+ 1, /* update if exist */
+ &item_id);
+ VERB2 log("created new item with id: %i", item_id);
+ }
+
+ if(result != GNOME_KEYRING_RESULT_OK)
+ {
+ VERB2 log("error occured, settings is not saved!");
+ return;
+ }
+ VERB2 log("saved");
+}
+
+static void abrt_keyring_load_settings(const char *event_name, event_config_t *ec)
+{
+ GnomeKeyringAttributeList *attrs = gnome_keyring_attribute_list_new();
+ guint item_id = search_item_id(event_name);
+ if(!item_id)
+ return;
+ GnomeKeyringResult result = gnome_keyring_item_get_attributes_sync(
+ keyring,
+ item_id,
+ &attrs);
+ VERB2 log("num attrs %i", attrs->len);
+ if(result != GNOME_KEYRING_RESULT_OK)
+ return;
+ guint index;
+
+ for(index = 0; index < attrs->len; index++)
+ {
+ char *name = g_array_index(attrs, GnomeKeyringAttribute, index).name;
+VERB2 log("load %s", name);
+ event_option_t *option = get_event_option_from_list(name, ec->options);
+ if(option)
+ option->value = g_array_index(attrs, GnomeKeyringAttribute, index).value.string;
+VERB2 log("loaded %s", name);
+ //VERB2 log("load %s", g_array_index(attrs, GnomeKeyringAttribute, index).value);
+
+ }
+}
+
+static void init_keyring()
+{
+ //called again?
+ if(keyring)
+ return;
+ if(!gnome_keyring_is_available())
+ {
+ VERB2 log("Cannot connect to the Gnome Keyring daemon.");
+ return;
+ }
+ GnomeKeyringResult result = gnome_keyring_get_default_keyring_sync(&keyring);
+ if(result != GNOME_KEYRING_RESULT_OK || keyring == NULL)
+ VERB2 log("can't get the default kerying");
+ /*
+ The default keyring might not be set - in that case result = OK, but the
+ keyring = NULL
+ use gnome_keyring_list_keyring_names () to list all and pick the first one?
+ */
+ VERB2 log("%s", keyring);
+}
+
+void load_event_config(gpointer key, gpointer value, gpointer user_data)
+{
+ char* event_name = (char*)key;
+ event_config_t *ec = (event_config_t *)value;
+VERB2 log("from keyring loading: %s\n", event_name);
+ abrt_keyring_load_settings(event_name, ec);
+
+}
+
+/*
+ * Tries to load settings for all events in g_event_config_list
+*/
+void load_event_config_data_from_keyring()
+{
+ init_keyring();
+ if(!keyring)
+ return;
+ g_hash_table_foreach(g_event_config_list, &load_event_config, NULL);
+} \ No newline at end of file
diff --git a/src/gui-gtk/event_config_dialog.c b/src/gtk-helpers/event_config_dialog.c
index b773c8ad..cdfcb844 100644
--- a/src/gui-gtk/event_config_dialog.c
+++ b/src/gtk-helpers/event_config_dialog.c
@@ -1,5 +1,6 @@
#include "abrtlib.h"
#include <gtk/gtk.h>
+#include "libreport-gtk.h"
static GtkWidget *option_table;
static GtkWidget *parent_dialog;
@@ -8,8 +9,9 @@ static int last_row = 0;
enum
{
+ COLUMN_EVENT_UINAME,
COLUMN_EVENT_NAME,
- COLUMN_EVENT,
+ COLUMN_EVENT_BG,
NUM_COLUMNS
};
@@ -19,16 +21,17 @@ typedef struct
GtkWidget *widget;
} option_widget_t;
-static void show_event_config_dialog(event_config_t* event);
+static void show_event_config_dialog(const char *event_name);
-static void show_error_message(const char* message)
+static void show_error_message(const char* message, GtkWindow *parent)
{
- GtkWidget *dialog = gtk_message_dialog_new(NULL,
+ GtkWidget *dialog = gtk_message_dialog_new(parent,
GTK_DIALOG_MODAL,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
message
);
+ gtk_window_set_icon_name(GTK_WINDOW(dialog), "abrt");
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
}
@@ -145,10 +148,10 @@ static void on_close_event_list_cb(GtkWidget *button, gpointer user_data)
gtk_widget_destroy(window);
}
-static event_config_t *get_event_config_from_row(GtkTreeView *treeview)
+static char *get_event_name_from_row(GtkTreeView *treeview)
{
GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);
- event_config_t *event_config = NULL;
+ char *event_name = NULL;
if (selection)
{
GtkTreeIter iter;
@@ -156,38 +159,40 @@ static event_config_t *get_event_config_from_row(GtkTreeView *treeview)
if (gtk_tree_selection_get_selected(selection, &store, &iter) == TRUE)
{
GValue value = { 0 };
- gtk_tree_model_get_value(store, &iter, COLUMN_EVENT, &value);
- event_config = (event_config_t*)g_value_get_pointer(&value);
+ gtk_tree_model_get_value(store, &iter, COLUMN_EVENT_NAME, &value);
+ event_name = (char *)g_value_get_string(&value);
}
}
- return event_config;
+ return event_name;
}
static void on_configure_event_cb(GtkWidget *button, gpointer user_data)
{
GtkTreeView *events_tv = (GtkTreeView *)user_data;
- event_config_t *ec = get_event_config_from_row(events_tv);
- if(ec != NULL)
- show_event_config_dialog(ec);
+ char *event_name = get_event_name_from_row(events_tv);
+ if(event_name != NULL)
+ show_event_config_dialog(event_name);
else
- show_error_message(_("Please select a plugin from the list to edit its options."));
+ show_error_message(_("Please select a plugin from the list to edit its options."), NULL);
}
static void on_event_row_activated_cb(GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
{
- event_config_t *ec = get_event_config_from_row(treeview);
- if(ec->options != NULL)
- show_event_config_dialog(ec);
+ char *event_name = get_event_name_from_row(treeview);
+ event_config_t *ec = get_event_config(event_name);
+ if(ec->options != NULL) //We need to have some options to show
+ show_event_config_dialog(event_name);
}
static void on_event_row_changed_cb(GtkTreeView *treeview, gpointer user_data)
{
- event_config_t *ec = get_event_config_from_row(treeview);
+ event_config_t *ec = get_event_config(get_event_name_from_row(treeview));
gtk_widget_set_sensitive(GTK_WIDGET(user_data), ec->options != NULL);
}
static void add_event_to_liststore(gpointer key, gpointer value, gpointer user_data)
{
+ static bool grey_bg = false;
GtkListStore *events_list_store = (GtkListStore *)user_data;
event_config_t *ec = (event_config_t *)value;
char *event_label = NULL;
@@ -200,9 +205,11 @@ static void add_event_to_liststore(gpointer key, gpointer value, gpointer user_d
GtkTreeIter iter;
gtk_list_store_append(events_list_store, &iter);
gtk_list_store_set(events_list_store, &iter,
- COLUMN_EVENT_NAME, event_label,
- COLUMN_EVENT, value,
+ COLUMN_EVENT_UINAME, event_label,
+ COLUMN_EVENT_NAME, key,
+ COLUMN_EVENT_BG, grey_bg ? "#EEEEEE" : "#FFFFFF",
-1);
+ grey_bg = !grey_bg;
}
static void save_value_from_widget(gpointer data, gpointer user_data)
@@ -230,7 +237,7 @@ static void dehydrate_config_dialog()
g_list_foreach(option_widget_list, &save_value_from_widget, NULL);
}
-static void show_event_config_dialog(event_config_t* event)
+static void show_event_config_dialog(const char *event_name)
{
if(option_widget_list != NULL)
{
@@ -238,6 +245,7 @@ static void show_event_config_dialog(event_config_t* event)
option_widget_list = NULL;
}
+ event_config_t *event = get_event_config(event_name);
char *title;
if(event->screen_name != NULL)
title = event->screen_name;
@@ -267,7 +275,10 @@ static void show_event_config_dialog(event_config_t* event)
gtk_widget_show_all(option_table);
int result = gtk_dialog_run(GTK_DIALOG(dialog));
if(result == GTK_RESPONSE_APPLY)
+ {
dehydrate_config_dialog();
+ abrt_keyring_save_settings(event_name);
+ }
else if(result == GTK_RESPONSE_CANCEL)
g_print("cancel\n");
gtk_widget_destroy(GTK_WIDGET(dialog));
@@ -279,11 +290,14 @@ void show_events_list_dialog(GtkWindow *parent)
*everytime we show the config dialog
*/
if(g_event_config_list == NULL)
+ {
load_event_config_data();
+ load_event_config_data_from_keyring();
+ }
if(g_event_config_list == NULL)
{
VERB1 log("can't load event's config\n");
- show_error_message(_("Can't load event descriptions"));
+ show_error_message(_("Can't load event descriptions"), parent);
return;
}
parent_dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
@@ -301,7 +315,7 @@ void show_events_list_dialog(GtkWindow *parent)
GtkWidget *main_vbox = gtk_vbox_new(0, 0);
GtkWidget *events_scroll = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(events_scroll),
- GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_NEVER,
GTK_POLICY_AUTOMATIC);
/* event list treeview */
GtkWidget *events_tv = gtk_tree_view_new();
@@ -314,19 +328,24 @@ void show_events_list_dialog(GtkWindow *parent)
column = gtk_tree_view_column_new_with_attributes(_("Event"),
renderer,
"markup",
- COLUMN_EVENT_NAME,
+ COLUMN_EVENT_UINAME,
+ "background",
+ COLUMN_EVENT_BG,
NULL);
gtk_tree_view_column_set_resizable(column, TRUE);
+ g_object_set(G_OBJECT(renderer), "wrap-mode", PANGO_WRAP_WORD, NULL);
+ g_object_set(G_OBJECT(renderer), "wrap-width", 440, NULL);
gtk_tree_view_column_set_sort_column_id(column, COLUMN_EVENT_NAME);
gtk_tree_view_append_column(GTK_TREE_VIEW(events_tv), column);
/* Create data store for the list and attach it
- * COLUMN_EVENT_NAME -> name+description
- * COLUMN_EVENT -> event_conf_t* so we can retrieve the event_config from the row
+ * COLUMN_EVENT_UINAME -> name+description
+ * COLUMN_EVENT_NAME -> event name so we can retrieve it from the row
*/
GtkListStore *events_list_store = gtk_list_store_new(NUM_COLUMNS,
G_TYPE_STRING, /* Event name + description */
- G_TYPE_POINTER);
+ G_TYPE_STRING, /* event name */
+ G_TYPE_STRING);/* bg color */
gtk_tree_view_set_model(GTK_TREE_VIEW(events_tv), GTK_TREE_MODEL(events_list_store));
g_hash_table_foreach(g_event_config_list,
diff --git a/src/gtk-helpers/libreport-gtk.h b/src/gtk-helpers/libreport-gtk.h
new file mode 100644
index 00000000..a916113e
--- /dev/null
+++ b/src/gtk-helpers/libreport-gtk.h
@@ -0,0 +1,3 @@
+void show_events_list_dialog(GtkWindow *parent);
+void abrt_keyring_save_settings(const char *event_name);
+void load_event_config_data_from_keyring();
diff --git a/src/gui-gtk/Makefile.am b/src/gui-gtk/Makefile.am
index 2c525245..978f9428 100644
--- a/src/gui-gtk/Makefile.am
+++ b/src/gui-gtk/Makefile.am
@@ -2,11 +2,11 @@ bin_PROGRAMS = abrt-gui
abrt_gui_SOURCES = \
abrt-gtk.h abrt-gtk.c \
- event_config_dialog.h event_config_dialog.c \
main.c
abrt_gui_CFLAGS = \
-I$(srcdir)/../include/report -I$(srcdir)/../include \
-I$(srcdir)/../lib \
+ -I$(srcdir)/../gtk-helpers \
-DBIN_DIR=\"$(bindir)\" \
-DVAR_RUN=\"$(VAR_RUN)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
@@ -16,6 +16,7 @@ abrt_gui_CFLAGS = \
-DICON_DIR=\"${datadir}/abrt/icons/hicolor/48x48/status\" \
$(GTK_CFLAGS) \
$(DBUS_CFLAGS) \
+ $(GNOME_KEYRING_CFLAGS) \
-D_GNU_SOURCE \
-Wall -Wwrite-strings -Werror
# -I/usr/include/glib-2.0
@@ -25,10 +26,12 @@ abrt_gui_CFLAGS = \
abrt_gui_LDADD = \
../lib/libreport.la \
../lib/libabrt_dbus.la \
+ ../gtk-helpers/libreportgtk.la \
-lglib-2.0 \
-lgthread-2.0 \
$(GTK_LIBS) \
- $(DBUS_LIBS)
+ $(DBUS_LIBS) \
+ $(GNOME_KEYRING_LIBS)
# $(LIBNOTIFY_LIBS)
#test_report_SOURCES = \
diff --git a/src/gui-gtk/abrt-gtk.c b/src/gui-gtk/abrt-gtk.c
index 680c2209..ea85b0b6 100644
--- a/src/gui-gtk/abrt-gtk.c
+++ b/src/gui-gtk/abrt-gtk.c
@@ -3,7 +3,7 @@
#include "abrtlib.h"
#include "abrt_dbus.h"
#include "abrt-gtk.h"
-#include "event_config_dialog.h"
+#include "libreport-gtk.h"
static const char * const help_uri ="http://docs.fedoraproject.org/en-US/"
"Fedora/14/html/Deployment_Guide/ch-abrt.html";
@@ -20,6 +20,7 @@ enum
COLUMN_LATEST_CRASH_STR,
COLUMN_LATEST_CRASH,
COLUMN_DUMP_DIR,
+ COLUMN_BG,
NUM_COLUMNS
};
@@ -44,6 +45,8 @@ void add_directory_to_dirlist(const char *dirname)
free(msg);
char *reason = dd_load_text(dd, FILENAME_REASON);
+ static bool grey_bg = false;
+
GtkTreeIter iter;
gtk_list_store_append(s_dumps_list_store, &iter);
gtk_list_store_set(s_dumps_list_store, &iter,
@@ -54,8 +57,9 @@ void add_directory_to_dirlist(const char *dirname)
COLUMN_LATEST_CRASH_STR, time_buf,
COLUMN_LATEST_CRASH, (int)time,
COLUMN_DUMP_DIR, dirname,
+ COLUMN_BG, grey_bg ? "#EEEEEE" : "#FFFFFF",
-1);
-
+ grey_bg = !grey_bg;
free(reason);
dd_close(dd);
@@ -226,6 +230,8 @@ static void add_columns(GtkTreeView *treeview)
renderer,
"stock_id",
COLUMN_REPORTED,
+ "cell-background",
+ COLUMN_BG,
NULL);
gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_column_set_sort_column_id(column, COLUMN_REPORTED);
@@ -236,11 +242,14 @@ static void add_columns(GtkTreeView *treeview)
renderer,
"text",
COLUMN_REASON,
+ "cell-background",
+ COLUMN_BG,
NULL);
gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_column_set_sort_column_id(column, COLUMN_REASON);
gtk_tree_view_append_column(treeview, column);
+ /*
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes(_("Stored in"),
renderer,
@@ -250,12 +259,14 @@ static void add_columns(GtkTreeView *treeview)
gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_column_set_sort_column_id(column, COLUMN_DIRNAME);
gtk_tree_view_append_column(treeview, column);
-
+ */
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes(_("Last occurrence"),
renderer,
"text",
COLUMN_LATEST_CRASH_STR,
+ "cell-background",
+ COLUMN_BG,
NULL);
gtk_tree_view_column_set_sort_column_id(column, COLUMN_LATEST_CRASH);
gtk_tree_view_append_column(treeview, column);
@@ -310,7 +321,7 @@ GtkWidget *create_main_window(void)
{
/* main window */
g_main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_default_size(GTK_WINDOW(g_main_window), 600, 700);
+ gtk_window_set_default_size(GTK_WINDOW(g_main_window), 700, 700);
gtk_window_set_title(GTK_WINDOW(g_main_window), _("Automatic Bug Reporting Tool"));
gtk_window_set_icon_name(GTK_WINDOW(g_main_window), "abrt");
@@ -339,12 +350,14 @@ GtkWidget *create_main_window(void)
G_TYPE_STRING, /* hostname */
G_TYPE_STRING, /* time */
G_TYPE_INT, /* unix time - used for sort */
- G_TYPE_STRING);/* dump dir path */
+ G_TYPE_STRING, /* dump dir path */
+ G_TYPE_STRING);/* row background */
+
gtk_tree_view_set_model(GTK_TREE_VIEW(s_treeview), GTK_TREE_MODEL(s_dumps_list_store));
/* buttons are homogenous so set size only for one button and it will
* work for the rest buttons in same gtk_hbox_new() */
- GtkWidget *btn_report = gtk_button_new_with_mnemonic(_("O_pen"));
+ GtkWidget *btn_report = gtk_button_new_from_stock(GTK_STOCK_OPEN);
gtk_widget_set_size_request(btn_report, 200, 30);
GtkWidget *btn_delete = gtk_button_new_from_stock(GTK_STOCK_DELETE);
diff --git a/src/gui-gtk/event_config_dialog.h b/src/gui-gtk/event_config_dialog.h
deleted file mode 100644
index 1e70e549..00000000
--- a/src/gui-gtk/event_config_dialog.h
+++ /dev/null
@@ -1 +0,0 @@
-void show_events_list_dialog(GtkWindow *parent);
diff --git a/src/include/report/event_config.h b/src/include/report/event_config.h
index 75fb0c78..75f357dc 100644
--- a/src/include/report/event_config.h
+++ b/src/include/report/event_config.h
@@ -58,7 +58,7 @@ void free_event_option(event_option_t *p);
//structure to hold the option data
typedef struct
{
- char *screen_name; //name of the event "Bugzilla" "RedHat Support Uploader"
+ char *screen_name; //ui friendly name of the event "Bugzilla" "RedHat Support Uploader"
//char *title; //window title - not used right now, maybe the "name" is enough?
//char *action;//action description to show in gui like: Upload report to the Red Hat bugzilla"
char *description; // "Report to ...."/"Save to file"
@@ -76,6 +76,7 @@ void load_event_config_data(void);
/* Frees all loaded data */
void free_event_config_data(void);
event_config_t *get_event_config(const char *event_name);
+event_option_t *get_event_option_from_list(const char *option_name, GList *event_options);
extern GHashTable *g_event_config_list; // for iterating through entire list of all loaded configs
diff --git a/src/lib/event_config.c b/src/lib/event_config.c
index 8b18f332..d733e449 100644
--- a/src/lib/event_config.c
+++ b/src/lib/event_config.c
@@ -45,6 +45,14 @@ static int cmp_event_option_name_with_string(gconstpointer a, gconstpointer b)
return strcmp(((event_option_t *)a)->name, (char *)b);
}
+event_option_t *get_event_option_from_list(const char *name, GList *options)
+{
+ GList *elem = g_list_find_custom(options, name, &cmp_event_option_name_with_string);
+ if(elem)
+ return (event_option_t *)elem->data;
+ return NULL;
+}
+
/* (Re)loads data from /etc/abrt/events/foo.{xml,conf} */
void load_event_config_data(void)
{
diff --git a/src/plugins/report_Bugzilla.xml b/src/plugins/report_Bugzilla.xml
index 0cd1891a..bf1dd82a 100644
--- a/src/plugins/report_Bugzilla.xml
+++ b/src/plugins/report_Bugzilla.xml
@@ -7,6 +7,7 @@
<label>Bugzilla URL</label>
<allow-empty>no</allow-empty>
<description>Address of the bugzilla server</description>
+ <default-value>https://bugzilla.redhat.com</default-value>
<property>Address of the bugzilla server</property>
<notused1>blahblahblah</notused1>
</option>
@@ -23,6 +24,7 @@
<option type="bool" name="Bugzilla_SSLVerify">
<label>SSL Verify</label>
<description>Check the ssl key validity</description>
+ <default-value>yes</default-value>
</option>
</options>
</event>