aboutsummaryrefslogtreecommitdiffhomepage
path: root/gtk/ScintillaGTK.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/ScintillaGTK.cxx')
-rw-r--r--gtk/ScintillaGTK.cxx26
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;