diff options
Diffstat (limited to 'gtk/ScintillaGTK.cxx')
-rw-r--r-- | gtk/ScintillaGTK.cxx | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx index 25e3587ab..ce02e09ca 100644 --- a/gtk/ScintillaGTK.cxx +++ b/gtk/ScintillaGTK.cxx @@ -302,6 +302,7 @@ private: 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); @@ -2583,6 +2584,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 = SCINTILLA(object); @@ -2594,9 +2616,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); @@ -3112,6 +3131,7 @@ void ScintillaGTK::ClassInit(OBJECT_CLASS* object_class, GtkWidgetClass *widget_ // of the signal handlers here (those that currently attached to wDraw // in Initialise() may require coordinate translation?) + object_class->dispose = Dispose; object_class->finalize = Destroy; #if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = GetPreferredWidth; |