Branch: refs/heads/master Author: Colomban Wendling ban@herbesfolles.org Committer: Colomban Wendling ban@herbesfolles.org Date: Sun, 13 Apr 2014 00:09:13 UTC Commit: afcb2a137c8d20a26d69166ed6a4326990c3526c https://github.com/geany/geany-plugins/commit/afcb2a137c8d20a26d69166ed6a432...
Log Message: ----------- debugger: Disconnect signals on the Scintilla widget more cautiously
No signal handler on a Scintilla widget should ever be left on a plugin unload, otherwise unloaded code from the callback could get called.
So, although the code was probably good enough in most normal situations, be a little more cautious about removing existing handlers in any cases.
Modified Paths: -------------- debugger/src/callbacks.c
Modified: debugger/src/callbacks.c 15 files changed, 12 insertions(+), 3 deletions(-) =================================================================== @@ -157,13 +157,17 @@ void on_document_open(GObject *obj, GeanyDocument *doc, gpointer user_data) /* * Handles mouse leave event to check if a calltip is still present and hides it if yes */ -static gint leave_signal; +static gulong leave_signal = 0; static gboolean on_mouse_leave(GtkWidget *widget, GdkEvent *event, gpointer user_data) { ScintillaObject *so = (ScintillaObject*)widget; - if (scintilla_send_message (so, SCI_CALLTIPACTIVE, 0, 0)) + if (leave_signal > 0) { g_signal_handler_disconnect(G_OBJECT(widget), leave_signal); + leave_signal = 0; + } + if (scintilla_send_message (so, SCI_CALLTIPACTIVE, 0, 0)) + { scintilla_send_message (so, SCI_CALLTIPCANCEL, 0, 0); } return FALSE; @@ -234,12 +238,17 @@ gboolean on_editor_notify( } case SCN_DWELLEND: { + if (leave_signal > 0) + { + g_signal_handler_disconnect(G_OBJECT(editor->sci), leave_signal); + leave_signal = 0; + } + if (DBS_STOPPED != debug_get_state ()) break;
if (scintilla_send_message (editor->sci, SCI_CALLTIPACTIVE, 0, 0)) { - g_signal_handler_disconnect(G_OBJECT(editor->sci), leave_signal); scintilla_send_message (editor->sci, SCI_CALLTIPCANCEL, 0, 0); } break;
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).