diff --git a/xtt/lib/glow/gtk/glow_curvewidget_gtk.cpp b/xtt/lib/glow/gtk/glow_curvewidget_gtk.cpp index a013510dac50c9b25a128a1b3031419780f0a865..1a607b76b112b984195974492172d410ba514cc5 100644 --- a/xtt/lib/glow/gtk/glow_curvewidget_gtk.cpp +++ b/xtt/lib/glow/gtk/glow_curvewidget_gtk.cpp @@ -287,8 +287,10 @@ static void curvewidgetgtk_destroy( GtkObject *object) curvew->destroyed = 1; if ( curvew->scroll_timerid) g_source_remove( curvew->scroll_timerid); - if ( curvew->is_navigator && curvew->curve_ctx) - ((CurveCtx *)curvew->curve_ctx)->no_nav = 1; + if ( curvew->is_navigator) { + if ( curvew->curve_ctx && !((CurveWidgetGtk *)curvew->main_curve_widget)->destroyed) + ((CurveCtx *)curvew->curve_ctx)->no_nav = 1; + } else delete (GlowDrawGtk *)curvew->draw_ctx; } diff --git a/xtt/lib/glow/gtk/glow_draw_gtk.cpp b/xtt/lib/glow/gtk/glow_draw_gtk.cpp index 23a6b4b7b5e44a9310fdaf25a7525abdf7b5c765..e3cc1f8a8cb28ddff05ec1c66d208cfbc3ed55e0 100644 --- a/xtt/lib/glow/gtk/glow_draw_gtk.cpp +++ b/xtt/lib/glow/gtk/glow_draw_gtk.cpp @@ -859,20 +859,28 @@ int GlowDrawGtk::event_handler( GdkEvent event) if ( (event.button.state & GDK_SHIFT_MASK) && !(event.button.state & GDK_CONTROL_MASK)) { sts = ctx->event_handler( glow_eEvent_MB1ClickShift, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } else if ( !(event.button.state & GDK_SHIFT_MASK) && (event.button.state & GDK_CONTROL_MASK)) { sts = ctx->event_handler( glow_eEvent_MB1ClickCtrl, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } else if ( (event.button.state & GDK_SHIFT_MASK) && (event.button.state & GDK_CONTROL_MASK)) { sts = ctx->event_handler( glow_eEvent_MB1ClickShiftCtrl, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } else { sts = ctx->event_handler( glow_eEvent_MB1Click, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } break; @@ -880,20 +888,28 @@ int GlowDrawGtk::event_handler( GdkEvent event) if ( (event.button.state & GDK_SHIFT_MASK) && !(event.button.state & GDK_CONTROL_MASK)) { sts = ctx->event_handler( glow_eEvent_MB2ClickShift, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } else if ( !(event.button.state & GDK_SHIFT_MASK) && (event.button.state & GDK_CONTROL_MASK)) { sts = ctx->event_handler( glow_eEvent_MB2ClickCtrl, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } else if ( (event.button.state & GDK_SHIFT_MASK) && (event.button.state & GDK_CONTROL_MASK)) { sts = ctx->event_handler( glow_eEvent_MB2ClickShiftCtrl, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } else { sts = ctx->event_handler( glow_eEvent_MB2Click, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } break; @@ -911,6 +927,8 @@ int GlowDrawGtk::event_handler( GdkEvent event) else #endif sts = ctx->event_handler( glow_eEvent_MB3Click, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; break; } @@ -919,6 +937,8 @@ int GlowDrawGtk::event_handler( GdkEvent event) /* Button release */ // cout << "Button release detected" << endl; sts = ctx->event_handler( glow_eEvent_ButtonRelease, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; } } else { @@ -945,20 +965,28 @@ int GlowDrawGtk::event_handler( GdkEvent event) if ( (event.button.state & GDK_SHIFT_MASK) && !(event.button.state & GDK_CONTROL_MASK)) { sts = ctx->event_handler( glow_eEvent_MB1DoubleClickShift, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } else if ( !(event.button.state & GDK_SHIFT_MASK) && (event.button.state & GDK_CONTROL_MASK)) { sts = ctx->event_handler( glow_eEvent_MB1DoubleClickCtrl, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } else if ( (event.button.state & GDK_SHIFT_MASK) && (event.button.state & GDK_CONTROL_MASK)) { sts = ctx->event_handler( glow_eEvent_MB1DoubleClickShiftCtrl, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } else { sts = ctx->event_handler( glow_eEvent_MB1DoubleClick, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } break; @@ -966,20 +994,28 @@ int GlowDrawGtk::event_handler( GdkEvent event) if ( (event.button.state & GDK_SHIFT_MASK) && !(event.button.state & GDK_CONTROL_MASK)) { sts = ctx->event_handler( glow_eEvent_MB2DoubleClickShift, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } else if ( !(event.button.state & GDK_SHIFT_MASK) && (event.button.state & GDK_CONTROL_MASK)) { sts = ctx->event_handler( glow_eEvent_MB2DoubleClickCtrl, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } else if ( (event.button.state & GDK_SHIFT_MASK) && (event.button.state & GDK_CONTROL_MASK)) { sts = ctx->event_handler( glow_eEvent_MB2DoubleClickShiftCtrl, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } else { sts = ctx->event_handler( glow_eEvent_MB2DoubleClick, (int)event.button.x, (int)event.button.y, 0, 0); + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return 1; click_sensitivity = 0; } break; diff --git a/xtt/lib/glow/gtk/glow_growwidget_gtk.cpp b/xtt/lib/glow/gtk/glow_growwidget_gtk.cpp index 1ebea62d355a70a82a07d363cbc046c5165a8455..c1ce5f1201d345be1ae0000b9e8bd48db9d45397 100644 --- a/xtt/lib/glow/gtk/glow_growwidget_gtk.cpp +++ b/xtt/lib/glow/gtk/glow_growwidget_gtk.cpp @@ -291,8 +291,10 @@ static void growwidgetgtk_destroy( GtkObject *object) grow->destroyed = 1; if ( grow->scroll_timerid) g_source_remove( grow->scroll_timerid); - if ( grow->is_navigator && grow->grow_ctx) - ((GrowCtx *)grow->grow_ctx)->no_nav = 1; + if ( grow->is_navigator) { + if ( grow->grow_ctx && !((GrowWidgetGtk *)grow->main_grow_widget)->destroyed) + ((GrowCtx *)grow->grow_ctx)->no_nav = 1; + } else delete (GlowDrawGtk *)grow->draw_ctx; } diff --git a/xtt/lib/glow/src/glow_growctx.cpp b/xtt/lib/glow/src/glow_growctx.cpp index 4b7a43433d79454434d55c0e0980c4fb66dad714..0694b26f5d4662c46b2f88324faad694b57ab99a 100644 --- a/xtt/lib/glow/src/glow_growctx.cpp +++ b/xtt/lib/glow/src/glow_growctx.cpp @@ -266,7 +266,9 @@ int GrowCtx::event_handler( glow_eEvent event, int x, int y, int w, int h) case glow_eEvent_MB1Up: case glow_eEvent_MB1Click: sts = a[a.a_size-1]->event_handler( &mw, event, x, y, fx, fy); - if ( sts) + if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED) + return sts; + else if ( sts) return 1; break; default: ;