From f5991437c3e620708f1701310bd1e67b40ca3b42 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 31 Aug 2009 12:53:52 -0400 Subject: Get EConfig and EEvent hooks working again. There were a number of problems: - Walk the GType tree to find EPluginHook subclasses, instead of just registering the immediate children. - Some EConfig and EEvent subclasses were not being configured properly (particularly the mail and calendar subclasses). - Add preference window pages after the main loop starts to make sure all plugins and plugin hooks are installed first. --- modules/calendar/e-cal-config-hook.c | 8 ++++++-- modules/calendar/e-cal-event-hook.c | 10 +++++----- modules/calendar/e-cal-shell-backend.c | 13 +++++++++---- 3 files changed, 20 insertions(+), 11 deletions(-) (limited to 'modules/calendar') diff --git a/modules/calendar/e-cal-config-hook.c b/modules/calendar/e-cal-config-hook.c index 4a0522460c..e3d9678168 100644 --- a/modules/calendar/e-cal-config-hook.c +++ b/modules/calendar/e-cal-config-hook.c @@ -35,11 +35,15 @@ static const EConfigHookTargetMap targets[] = { }; static void -cal_config_hook_class_init (EPluginHookClass *class) +cal_config_hook_class_init (EConfigHookClass *class) { + EPluginHookClass *plugin_hook_class; gint ii; - class->id = "org.gnome.evolution.calendar.config:1.0"; + plugin_hook_class = E_PLUGIN_HOOK_CLASS (class); + plugin_hook_class->id = "org.gnome.evolution.calendar.config:1.0"; + + class->config_class = g_type_class_ref (e_cal_config_get_type ()); for (ii = 0; targets[ii].type != NULL; ii++) e_config_hook_class_add_target_map ( diff --git a/modules/calendar/e-cal-event-hook.c b/modules/calendar/e-cal-event-hook.c index b263727107..d90162ded7 100644 --- a/modules/calendar/e-cal-event-hook.c +++ b/modules/calendar/e-cal-event-hook.c @@ -35,15 +35,15 @@ static const EEventHookTargetMap targets[] = { }; static void -cal_event_hook_class_init (EPluginHookClass *class) +cal_event_hook_class_init (EEventHookClass *class) { - EEventHookClass *event_hook_class; + EPluginHookClass *plugin_hook_class; gint ii; - event_hook_class = (EEventHookClass *) class; - event_hook_class->event = (EEvent *) e_cal_event_peek (); + plugin_hook_class = E_PLUGIN_HOOK_CLASS (class); + plugin_hook_class->id = "org.gnome.evolution.calendar.events:1.0"; - class->id = "org.gnome.evolution.calendar.events:1.0"; + class->event = (EEvent *) e_cal_event_peek (); for (ii = 0; targets[ii].type != NULL; ii++) e_event_hook_class_add_target_map ( diff --git a/modules/calendar/e-cal-shell-backend.c b/modules/calendar/e-cal-shell-backend.c index 5149574323..6511d0e453 100644 --- a/modules/calendar/e-cal-shell-backend.c +++ b/modules/calendar/e-cal-shell-backend.c @@ -523,11 +523,13 @@ cal_shell_backend_init_importers (void) e_import_class_add_importer (import_class, importer, NULL, NULL); } -static void +static gboolean cal_shell_backend_init_preferences (EShell *shell) { GtkWidget *preferences_window; + /* This is a main loop idle callback. */ + preferences_window = e_shell_get_preferences_window (shell); e_preferences_window_add_page ( @@ -537,6 +539,8 @@ cal_shell_backend_init_preferences (EShell *shell) _("Calendar and Tasks"), calendar_prefs_dialog_new (shell), 600); + + return FALSE; } static gboolean @@ -770,10 +774,11 @@ cal_shell_backend_constructed (GObject *object) cal_shell_backend_init_importers (); - /* Initialize settings before initializing preferences, - * since the preferences bind to the shell settings. */ e_cal_shell_backend_init_settings (shell); - cal_shell_backend_init_preferences (shell); + + /* Initialize preferences after the main loop starts so + * that all EPlugins and EPluginHooks are loaded first. */ + g_idle_add ((GSourceFunc) cal_shell_backend_init_preferences, shell); } static void -- cgit