summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2011-03-16 10:38:13 +0100
committerDenys Vlasenko <dvlasenk@redhat.com>2011-03-16 10:38:13 +0100
commit2f4bad3f83fcaade1c63eee797d21a50d7709723 (patch)
tree1e3c09f77981823424fb91f9b0de6f8d02bbb38c /src
parent7d80d160f7e563227cf0d10b72735690432a8927 (diff)
parent8862ed2cc130b922c2ac7af3df5eeeef36bf5ef1 (diff)
downloadabrt-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.c5
-rw-r--r--src/gui-wizard-gtk/wizard.c2
-rw-r--r--src/lib/event_config.c42
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);
}