summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJiri Moskovcak <jmoskovc@redhat.com>2011-03-14 21:42:44 +0100
committerJiri Moskovcak <jmoskovc@redhat.com>2011-03-14 21:42:44 +0100
commitc3295e8741d5f35e30301933bd853bf6c9369588 (patch)
treeca5fc590dc54e6815e9630abbf424804e7357308 /src
parent1147945856ed4431ab3b49f88c8c0aa11c6ad8e1 (diff)
downloadabrt-c3295e8741d5f35e30301933bd853bf6c9369588.tar.gz
abrt-c3295e8741d5f35e30301933bd853bf6c9369588.tar.xz
abrt-c3295e8741d5f35e30301933bd853bf6c9369588.zip
abrt-gui: save event settings in gnome keyring
Diffstat (limited to 'src')
-rw-r--r--src/gtk-helpers/abrt-keyring.c39
-rw-r--r--src/gtk-helpers/event_config_dialog.c59
-rw-r--r--src/gtk-helpers/libreport-gtk.h4
-rw-r--r--src/include/report/event_config.h1
-rw-r--r--src/lib/event_config.c8
5 files changed, 76 insertions, 35 deletions
diff --git a/src/gtk-helpers/abrt-keyring.c b/src/gtk-helpers/abrt-keyring.c
index 6ced7a9d..50bfa7e3 100644
--- a/src/gtk-helpers/abrt-keyring.c
+++ b/src/gtk-helpers/abrt-keyring.c
@@ -26,11 +26,12 @@ static guint32 search_item_id(const char *event_name)
return item_id;
}
-void abrt_keyring_save_settings(const char *event_name, event_config_t *ec)
+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))
@@ -68,7 +69,7 @@ void abrt_keyring_save_settings(const char *event_name, event_config_t *ec)
VERB2 log("saved");
}
-void abrt_keyring_load_settings(const char *event_name, event_config_t *ec)
+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);
@@ -82,15 +83,25 @@ void abrt_keyring_load_settings(const char *event_name, event_config_t *ec)
if(result != GNOME_KEYRING_RESULT_OK)
return;
guint index;
+
for(index = 0; index < attrs->len; index++)
{
- VERB2 log("load %s", g_array_index(attrs, GnomeKeyringAttribute, index).name);
+ 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);
+
}
}
-void init_gnome_keyring()
+static void init_keyring()
{
+ //called again?
+ if(keyring)
+ return;
if(!gnome_keyring_is_available())
{
VERB2 log("Cannot connect to the Gnome Keyring daemon.");
@@ -105,4 +116,24 @@ void init_gnome_keyring()
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/gtk-helpers/event_config_dialog.c b/src/gtk-helpers/event_config_dialog.c
index fa1cfcf6..cdfcb844 100644
--- a/src/gtk-helpers/event_config_dialog.c
+++ b/src/gtk-helpers/event_config_dialog.c
@@ -9,8 +9,8 @@ static int last_row = 0;
enum
{
+ COLUMN_EVENT_UINAME,
COLUMN_EVENT_NAME,
- COLUMN_EVENT,
COLUMN_EVENT_BG,
NUM_COLUMNS
};
@@ -21,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);
}
@@ -147,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;
@@ -158,33 +159,34 @@ 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);
}
@@ -203,8 +205,8 @@ 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;
@@ -235,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)
{
@@ -243,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;
@@ -274,7 +277,7 @@ static void show_event_config_dialog(event_config_t* event)
if(result == GTK_RESPONSE_APPLY)
{
dehydrate_config_dialog();
- abrt_keyring_save_settings(event);
+ abrt_keyring_save_settings(event_name);
}
else if(result == GTK_RESPONSE_CANCEL)
g_print("cancel\n");
@@ -289,12 +292,12 @@ void show_events_list_dialog(GtkWindow *parent)
if(g_event_config_list == NULL)
{
load_event_config_data();
- //load_event_config_data_from_keyring();
+ 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);
@@ -325,7 +328,7 @@ 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);
@@ -336,13 +339,13 @@ void show_events_list_dialog(GtkWindow *parent)
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);
+ 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
index 776e84e3..a916113e 100644
--- a/src/gtk-helpers/libreport-gtk.h
+++ b/src/gtk-helpers/libreport-gtk.h
@@ -1,5 +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();
-void abrt_keyring_save_settings(event_config_t *ec);
-void abrt_keyring_load_settings(event_config_t *ec);
-void init_gnome_keyring();
diff --git a/src/include/report/event_config.h b/src/include/report/event_config.h
index 64407b7f..75f357dc 100644
--- a/src/include/report/event_config.h
+++ b/src/include/report/event_config.h
@@ -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 0f5c0f62..313c0f6a 100644
--- a/src/lib/event_config.c
+++ b/src/lib/event_config.c
@@ -44,6 +44,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)
{