From 41cb797b1ae28e992a73bc2c12ba0c05cbb16f72 Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Wed, 24 Aug 2011 15:01:09 +0000 Subject: [PATCH] Move plugin loading to viewer realize callback This prevents plugins from being loaded until after the widget has a valid OpenGL context. Fixes Debian Bug #638939. --- src/aweather-gui.c | 35 ++++++++++++++++++++--------------- src/plugins/radar.c | 5 +++++ 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/aweather-gui.c b/src/aweather-gui.c index 499be3d..93fad72 100644 --- a/src/aweather-gui.c +++ b/src/aweather-gui.c @@ -506,6 +506,24 @@ void aweather_gui_deattach_plugin(AWeatherGui *self, const gchar *name) grits_plugins_disable(self->plugins, name); gtk_widget_queue_draw(GTK_WIDGET(self->viewer)); } +void aweather_gui_load_plugins(AWeatherGui *self) +{ + g_debug("AWeatherGui: load_plugins"); + GtkTreeIter iter; + self->gtk_plugins = GTK_LIST_STORE(aweather_gui_get_object(self, "plugins")); + for (GList *cur = grits_plugins_available(self->plugins); cur; cur = cur->next) { + gchar *name = cur->data; + GError *error = NULL; + gboolean enabled = grits_prefs_get_boolean_v(self->prefs, "plugins", cur->data, &error); + if (error && error->code == G_KEY_FILE_ERROR_GROUP_NOT_FOUND) + enabled = TRUE; + gtk_list_store_append(self->gtk_plugins, &iter); + gtk_list_store_set(self->gtk_plugins, &iter, 0, name, 1, enabled, -1); + if (enabled) + aweather_gui_attach_plugin(self, name); + } +} + /**************** @@ -527,21 +545,6 @@ static void aweather_gui_parser_finished(GtkBuildable *_self, GtkBuilder *builde g_free(config); g_free(defaults); - /* Plugins */ - GtkTreeIter iter; - self->gtk_plugins = GTK_LIST_STORE(aweather_gui_get_object(self, "plugins")); - for (GList *cur = grits_plugins_available(self->plugins); cur; cur = cur->next) { - gchar *name = cur->data; - GError *error = NULL; - gboolean enabled = grits_prefs_get_boolean_v(self->prefs, "plugins", cur->data, &error); - if (error && error->code == G_KEY_FILE_ERROR_GROUP_NOT_FOUND) - enabled = TRUE; - gtk_list_store_append(self->gtk_plugins, &iter); - gtk_list_store_set(self->gtk_plugins, &iter, 0, name, 1, enabled, -1); - if (enabled) - aweather_gui_attach_plugin(self, name); - } - /* Misc, helpers */ site_setup(self); time_setup(self); @@ -554,6 +557,8 @@ static void aweather_gui_parser_finished(GtkBuildable *_self, GtkBuilder *builde g_signal_connect_swapped(self->viewer, "offline", G_CALLBACK(gtk_toggle_action_set_active), aweather_gui_get_object(self, "offline")); + g_signal_connect_swapped(self->viewer, "realize", + G_CALLBACK(aweather_gui_load_plugins), self); } static void aweather_gui_buildable_init(GtkBuildableIface *iface) { diff --git a/src/plugins/radar.c b/src/plugins/radar.c index cbdf12c..ff888f4 100644 --- a/src/plugins/radar.c +++ b/src/plugins/radar.c @@ -301,6 +301,11 @@ RadarSite *radar_site_new(city_t *city, GtkWidget *pconfig, site->city = city; site->pconfig = pconfig; + /* Set initial location */ + gdouble lat, lon, elev; + grits_viewer_get_location(viewer, &lat, &lon, &elev); + _site_on_location_changed(viewer, lat, lon, elev, site); + /* Add marker */ g_idle_add_full(G_PRIORITY_LOW, _site_add_marker, site, NULL); -- 2.43.2