Branch: refs/heads/master Author: Colomban Wendling ban@herbesfolles.org Committer: Colomban Wendling ban@herbesfolles.org Date: Sat, 14 Nov 2015 23:19:53 UTC Commit: 945d6b6364daaf6a82882a221adde8ce7e7375cc https://github.com/geany/geany/commit/945d6b6364daaf6a82882a221adde8ce7e7375...
Log Message: ----------- Merge pull request #746 from techee/scintilla_dispose
Backport Scintilla patch correctly disposing scrollbars
Modified Paths: -------------- scintilla/gtk/ScintillaGTK.cxx
Modified: scintilla/gtk/ScintillaGTK.cxx 32 lines changed, 27 insertions(+), 5 deletions(-) =================================================================== @@ -302,6 +302,7 @@ class ScintillaGTK : public ScintillaBase {
static void StyleSetText(GtkWidget *widget, GtkStyle *previous, void*); static void RealizeText(GtkWidget *widget, void*); + static void Dispose(GObject *object); static void Destroy(GObject *object); static void SelectionReceived(GtkWidget *widget, GtkSelectionData *selection_data, guint time); @@ -617,8 +618,10 @@ void ScintillaGTK::UnMap(GtkWidget *widget) { void ScintillaGTK::ForAll(GtkCallback callback, gpointer callback_data) { try { (*callback) (PWidget(wText), callback_data); - (*callback) (PWidget(scrollbarv), callback_data); - (*callback) (PWidget(scrollbarh), callback_data); + if (PWidget(scrollbarv)) + (*callback) (PWidget(scrollbarv), callback_data); + if (PWidget(scrollbarh)) + (*callback) (PWidget(scrollbarh), callback_data); } catch (...) { errorStatus = SC_STATUS_FAILURE; } @@ -2584,6 +2587,27 @@ void ScintillaGTK::RealizeText(GtkWidget *widget, void*) {
static GObjectClass *scintilla_class_parent_class;
+void ScintillaGTK::Dispose(GObject *object) { + try { + ScintillaObject *scio = reinterpret_cast<ScintillaObject *>(object); + ScintillaGTK *sciThis = reinterpret_cast<ScintillaGTK *>(scio->pscin); + + if (PWidget(sciThis->scrollbarv)) { + gtk_widget_unparent(PWidget(sciThis->scrollbarv)); + sciThis->scrollbarv = NULL; + } + + if (PWidget(sciThis->scrollbarh)) { + gtk_widget_unparent(PWidget(sciThis->scrollbarh)); + sciThis->scrollbarh = NULL; + } + + scintilla_class_parent_class->dispose(object); + } catch (...) { + // Its dying so nowhere to save the status + } +} + void ScintillaGTK::Destroy(GObject *object) { try { ScintillaObject *scio = reinterpret_cast<ScintillaObject *>(object); @@ -2595,9 +2619,6 @@ void ScintillaGTK::Destroy(GObject *object) { //Platform::DebugPrintf("Destroying %x %x\n", sciThis, object); sciThis->Finalise();
- gtk_widget_unparent(PWidget(sciThis->scrollbarv)); - gtk_widget_unparent(PWidget(sciThis->scrollbarh)); - delete sciThis; scio->pscin = 0; scintilla_class_parent_class->finalize(object); @@ -3114,6 +3135,7 @@ void ScintillaGTK::ClassInit(OBJECT_CLASS* object_class, GtkWidgetClass *widget_ // in Initialise() may require coordinate translation?)
object_class->finalize = Destroy; + object_class->dispose = Dispose; #if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = GetPreferredWidth; widget_class->get_preferred_height = GetPreferredHeight;
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).