_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);
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
{
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);