diff options
| author | Denys Vlasenko <dvlasenk@redhat.com> | 2011-03-16 10:38:13 +0100 |
|---|---|---|
| committer | Denys Vlasenko <dvlasenk@redhat.com> | 2011-03-16 10:38:13 +0100 |
| commit | 2f4bad3f83fcaade1c63eee797d21a50d7709723 (patch) | |
| tree | 1e3c09f77981823424fb91f9b0de6f8d02bbb38c /src | |
| parent | 7d80d160f7e563227cf0d10b72735690432a8927 (diff) | |
| parent | 8862ed2cc130b922c2ac7af3df5eeeef36bf5ef1 (diff) | |
| download | abrt-2f4bad3f83fcaade1c63eee797d21a50d7709723.tar.gz abrt-2f4bad3f83fcaade1c63eee797d21a50d7709723.tar.xz abrt-2f4bad3f83fcaade1c63eee797d21a50d7709723.zip | |
Merge branch 'master' of ssh://git.fedorahosted.org/git/abrt
Diffstat (limited to 'src')
| -rw-r--r-- | src/gui-gtk/abrt-gtk.c | 5 | ||||
| -rw-r--r-- | src/gui-wizard-gtk/wizard.c | 2 | ||||
| -rw-r--r-- | src/lib/event_config.c | 42 |
3 files changed, 46 insertions, 3 deletions
diff --git a/src/gui-gtk/abrt-gtk.c b/src/gui-gtk/abrt-gtk.c index 3405fc2d..118dee4a 100644 --- a/src/gui-gtk/abrt-gtk.c +++ b/src/gui-gtk/abrt-gtk.c @@ -217,7 +217,7 @@ static void on_menu_about_cb(GtkMenuItem *menuitem, gpointer unused) GtkWidget *about_d = gtk_about_dialog_new(); - gtk_window_set_default_icon_name("abrt"); + gtk_window_set_icon_name(GTK_WINDOW(about_d), "abrt"); gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about_d), VERSION); gtk_about_dialog_set_logo_icon_name(GTK_ABOUT_DIALOG(about_d), "abrt"); gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(about_d), "ABRT"); @@ -229,6 +229,9 @@ static void on_menu_about_cb(GtkMenuItem *menuitem, gpointer unused) gtk_about_dialog_set_artists(GTK_ABOUT_DIALOG(about_d), artists); gtk_about_dialog_set_translator_credits(GTK_ABOUT_DIALOG(about_d), _("translator-credits")); + gtk_window_set_transient_for(GTK_WINDOW(about_d), GTK_WINDOW(g_main_window)); + gtk_window_set_position(GTK_WINDOW(about_d), GTK_WIN_POS_CENTER_ON_PARENT); + gtk_dialog_run(GTK_DIALOG(about_d)); gtk_widget_hide(GTK_WIDGET(about_d)); } diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c index 1372b6fb..081fe3a7 100644 --- a/src/gui-wizard-gtk/wizard.c +++ b/src/gui-wizard-gtk/wizard.c @@ -423,7 +423,7 @@ static GtkWidget *add_event_buttons(GtkBox *box, char *event_name, GCallback fun else event_screen_name = event_name; const char *event_description = NULL; - event_config_t *cfg = g_hash_table_lookup(g_event_config_list, event_name); + event_config_t *cfg = get_event_config(event_name); if (cfg) { /* .xml has (presumably) prettier description, use it: */ diff --git a/src/lib/event_config.c b/src/lib/event_config.c index e38041b8..6207f721 100644 --- a/src/lib/event_config.c +++ b/src/lib/event_config.c @@ -19,6 +19,7 @@ #include "abrtlib.h" GHashTable *g_event_config_list; +static GHashTable *g_event_config_symlinks; event_option_t *new_event_option(void) { @@ -82,6 +83,13 @@ void load_event_config_data(void) /*key_destroy_func:*/ free, /*value_destroy_func:*/ (GDestroyNotify) free_event_config ); + if (!g_event_config_symlinks) + g_event_config_symlinks = g_hash_table_new_full( + /*hash_func*/ g_str_hash, + /*key_equal_func:*/ g_str_equal, + /*key_destroy_func:*/ free, + /*value_destroy_func:*/ free + ); DIR *dir; struct dirent *dent; @@ -99,8 +107,29 @@ void load_event_config_data(void) continue; char *fullname = concat_path_file(EVENTS_DIR, dent->d_name); - *ext = '\0'; + + struct stat buf; + if (0 != lstat(fullname, &buf)) + continue; + if (S_ISLNK(buf.st_mode)) + { + GError *error = NULL; + gchar *link = g_file_read_link(fullname, &error); + if (error != NULL) + error_msg_and_die("Error reading symlink '%s': %s", fullname, error->message); + + gchar *target = g_path_get_basename(link); + char *ext = strrchr(target, '.'); + if (!ext || 0 != strcmp(ext + 1, "xml")) + error_msg_and_die("Invalid event symlink '%s': expected it to point to another xml file", fullname); + *ext = '\0'; + g_hash_table_replace(g_event_config_symlinks, xstrdup(dent->d_name), target); + g_free(link); + /* don't free target, it is owned by the hash table now */ + continue; + } + event_config_t *event_config = get_event_config(dent->d_name); bool new_config = (!event_config); if (new_config) @@ -181,11 +210,22 @@ void free_event_config_data(void) g_hash_table_destroy(g_event_config_list); g_event_config_list = NULL; } + if (g_event_config_symlinks) + { + g_hash_table_destroy(g_event_config_symlinks); + g_event_config_symlinks = NULL; + } } event_config_t *get_event_config(const char *name) { if (!g_event_config_list) return NULL; + if (g_event_config_symlinks) + { + char *link = g_hash_table_lookup(g_event_config_symlinks, name); + if (link) + name = link; + } return g_hash_table_lookup(g_event_config_list, name); } |
