[anjuta-extras] scintilla: bgo #625397 - critical warning on project unload. Crash on reload
- From: Sebastien Granjoux <sgranjoux src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta-extras] scintilla: bgo #625397 - critical warning on project unload. Crash on reload
- Date: Tue, 24 Aug 2010 20:10:45 +0000 (UTC)
commit 432001a9af16ee5c0a57aa04637b1df6db93ceb6
Author: Sébastien Granjoux <seb sfo free fr>
Date: Tue Aug 24 22:07:10 2010 +0200
scintilla: bgo #625397 - critical warning on project unload. Crash on reload
plugins/scintilla/plugin.c | 53 ++++++++++++++++++++++++++++---------------
plugins/scintilla/plugin.h | 10 --------
2 files changed, 34 insertions(+), 29 deletions(-)
---
diff --git a/plugins/scintilla/plugin.c b/plugins/scintilla/plugin.c
index 2f15b29..a4bac13 100644
--- a/plugins/scintilla/plugin.c
+++ b/plugins/scintilla/plugin.c
@@ -41,10 +41,21 @@
gpointer parent_class;
-static IAnjutaSymbolQuery *query_project = NULL;
-static IAnjutaSymbolQuery *query_system = NULL;
-static IAnjutaSymbolManager *manager = NULL;
+/* Plugin types
+ *---------------------------------------------------------------------------*/
+
+struct _EditorPlugin{
+ AnjutaPlugin parent;
+
+ GtkWidget* style_button;
+
+ IAnjutaSymbolQuery *query_system;
+ IAnjutaSymbolQuery *query_project;
+};
+struct _EditorPluginClass{
+ AnjutaPluginClass parent_class;
+};
/* Keep an up to date list of type name
*---------------------------------------------------------------------------*/
@@ -116,13 +127,13 @@ system_symbol_found (IAnjutaSymbolQuery *query, IAnjutaIterable* symbols, gpoint
}
static void
-on_project_symbol_scanned (IAnjutaSymbolManager *manager, guint process, AnjutaShell *shell)
+on_project_symbol_scanned (IAnjutaSymbolManager *manager, guint process, IAnjutaSymbolQuery *query_project)
{
ianjuta_symbol_query_search_all (query_project, NULL);
}
static void
-on_system_symbol_scanned (IAnjutaSymbolManager *manager, guint process, AnjutaShell *shell)
+on_system_symbol_scanned (IAnjutaSymbolManager *manager, guint process, IAnjutaSymbolQuery *query_system)
{
ianjuta_symbol_query_search_all (query_system, NULL);
}
@@ -143,6 +154,10 @@ activate_plugin (AnjutaPlugin *plugin)
IANJUTA_SYMBOL_FIELD_KIND,
IANJUTA_SYMBOL_FIELD_TYPE
};
+ EditorPlugin* editor = ANJUTA_PLUGIN_EDITOR (plugin);
+ IAnjutaSymbolManager *manager;
+ IAnjutaSymbolQuery *query_project;
+ IAnjutaSymbolQuery *query_system;
manager = anjuta_shell_get_interface (plugin->shell,
IAnjutaSymbolManager, NULL);
@@ -188,33 +203,33 @@ activate_plugin (AnjutaPlugin *plugin)
/* Get notified when scan end, to update type list */
- g_signal_connect (G_OBJECT (manager), "prj_scan_end", G_CALLBACK (on_project_symbol_scanned), NULL);
- g_signal_connect (G_OBJECT (manager), "sys_scan_end", G_CALLBACK (on_system_symbol_scanned), NULL);
+ g_signal_connect (G_OBJECT (manager), "prj_scan_end", G_CALLBACK (on_project_symbol_scanned), query_project);
+ g_signal_connect (G_OBJECT (manager), "sys_scan_end", G_CALLBACK (on_system_symbol_scanned), query_system);
/* Initialize type list */
- on_project_symbol_scanned (manager, 0, NULL);
- on_system_symbol_scanned (manager, 0, NULL);
+ on_project_symbol_scanned (manager, 0, query_project);
+ on_system_symbol_scanned (manager, 0, query_system);
+ /* Keep queries to be able to unref them when needed */
+ editor->query_project = query_project;
+ editor->query_system = query_system;
+
+
return TRUE;
}
static gboolean
deactivate_plugin (AnjutaPlugin *plugin)
{
+ EditorPlugin* editor = ANJUTA_PLUGIN_EDITOR (plugin);
IAnjutaSymbolManager *manager = anjuta_shell_get_interface (plugin->shell, IAnjutaSymbolManager, NULL);
/* Disconnect signals */
- g_signal_handlers_disconnect_by_func (G_OBJECT (manager), G_CALLBACK (on_project_symbol_scanned), plugin->shell);
- g_signal_handlers_disconnect_by_func (G_OBJECT (manager), G_CALLBACK (on_system_symbol_scanned), plugin->shell);
-
- if (query_project)
- g_object_unref (query_project);
-
- if (query_system)
- g_object_unref (query_system);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (manager), G_CALLBACK (on_project_symbol_scanned), editor->query_project);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (manager), G_CALLBACK (on_system_symbol_scanned), editor->query_system);
- if (manager)
- g_object_unref (manager);
+ g_object_unref (editor->query_project);
+ g_object_unref (editor->query_system);
return TRUE;
}
diff --git a/plugins/scintilla/plugin.h b/plugins/scintilla/plugin.h
index ec16fde..356b4a4 100644
--- a/plugins/scintilla/plugin.h
+++ b/plugins/scintilla/plugin.h
@@ -32,16 +32,6 @@ extern GType editor_plugin_get_type (GTypeModule *module);
typedef struct _EditorPlugin EditorPlugin;
typedef struct _EditorPluginClass EditorPluginClass;
-struct _EditorPlugin{
- AnjutaPlugin parent;
-
- GtkWidget* style_button;
-};
-
-struct _EditorPluginClass{
- AnjutaPluginClass parent_class;
-};
-
/* Up to date list of type names, used by scintilla for highlighting */
#define TEXT_EDITOR_SYSTEM_TYPE_LIST "editor_system_type_list"
#define TEXT_EDITOR_PROJECT_TYPE_LIST "editor_project_type_list"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]