X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=libchimara%2Fchimara-glk.c;h=a00ae659b7cb9dc900871dcb156f3228e3ae1567;hb=3c19422ee9cc38e710bd2f262b2b91a3d6e04ab6;hp=0fabb3943eabe4d6823d04a07dddc15165070e8d;hpb=cbd4cb7f8c62b2ba51329a4cb082a96115a7529d;p=rodin%2Fchimara.git diff --git a/libchimara/chimara-glk.c b/libchimara/chimara-glk.c index 0fabb39..a00ae65 100644 --- a/libchimara/chimara-glk.c +++ b/libchimara/chimara-glk.c @@ -235,8 +235,10 @@ void _chimara_glk_free_window_private_data(ChimaraGlkPrivate *priv) { /* Destroy the window tree */ - trash_windows_recursive(priv, priv->root_window->data); - g_node_destroy(priv->root_window); + if(priv->root_window) { + trash_windows_recursive(priv, priv->root_window->data); + g_node_destroy(priv->root_window); + } /* Free the window arrangement signaling */ g_mutex_lock(priv->arrange_lock); @@ -244,6 +246,12 @@ _chimara_glk_free_window_private_data(ChimaraGlkPrivate *priv) g_mutex_unlock(priv->arrange_lock); g_mutex_free(priv->arrange_lock); priv->arrange_lock = NULL; + + /* Remove the dispatch callbacks */ + priv->register_obj = NULL; + priv->unregister_obj = NULL; + priv->register_arr = NULL; + priv->unregister_arr = NULL; } static void @@ -1153,6 +1161,10 @@ chimara_glk_run(ChimaraGlk *glk, const gchar *plugin, int argc, char *argv[], GE { g_return_val_if_fail(glk || CHIMARA_IS_GLK(glk), FALSE); g_return_val_if_fail(plugin, FALSE); + if(chimara_glk_get_running(glk)) { + g_set_error(error, CHIMARA_ERROR, CHIMARA_PLUGIN_ALREADY_RUNNING, _("There was already a plugin running.")); + return FALSE; + } ChimaraGlkPrivate *priv = CHIMARA_GLK_PRIVATE(glk); struct StartupData *startup = g_slice_new0(struct StartupData);