diff options
author | Jiri Moskovcak <jmoskovc@redhat.com> | 2011-03-14 21:42:44 +0100 |
---|---|---|
committer | Jiri Moskovcak <jmoskovc@redhat.com> | 2011-03-14 21:42:44 +0100 |
commit | c3295e8741d5f35e30301933bd853bf6c9369588 (patch) | |
tree | ca5fc590dc54e6815e9630abbf424804e7357308 /src/gtk-helpers | |
parent | 1147945856ed4431ab3b49f88c8c0aa11c6ad8e1 (diff) | |
download | abrt-c3295e8741d5f35e30301933bd853bf6c9369588.tar.gz abrt-c3295e8741d5f35e30301933bd853bf6c9369588.tar.xz abrt-c3295e8741d5f35e30301933bd853bf6c9369588.zip |
abrt-gui: save event settings in gnome keyring
Diffstat (limited to 'src/gtk-helpers')
-rw-r--r-- | src/gtk-helpers/abrt-keyring.c | 39 | ||||
-rw-r--r-- | src/gtk-helpers/event_config_dialog.c | 59 | ||||
-rw-r--r-- | src/gtk-helpers/libreport-gtk.h | 4 |
3 files changed, 67 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(); |