summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/desktop-widget.cpp10
-rw-r--r--src/widgets/gimp/ruler.cpp49
2 files changed, 32 insertions, 27 deletions
diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp
index 13a7b649e..aae6ed9bf 100644
--- a/src/widgets/desktop-widget.cpp
+++ b/src/widgets/desktop-widget.cpp
@@ -486,8 +486,8 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
gtk_widget_set_can_focus (GTK_WIDGET (dtw->_canvas), TRUE);
- sp_ruler_add_track_widget (SP_RULER(dtw->_hruler->gobj()), GTK_WIDGET(dtw->_canvas));
- sp_ruler_add_track_widget (SP_RULER(dtw->_vruler->gobj()), GTK_WIDGET(dtw->_canvas));
+ sp_ruler_add_track_widget(SP_RULER(dtw->_hruler->gobj()), GTK_WIDGET(dtw->_canvas));
+ sp_ruler_add_track_widget(SP_RULER(dtw->_vruler->gobj()), GTK_WIDGET(dtw->_canvas));
auto css_provider = gtk_css_provider_new();
auto style_context = gtk_widget_get_style_context(GTK_WIDGET(dtw->_canvas));
@@ -531,7 +531,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
} else {
dtw->_canvas_tbl->set_hexpand(true);
dtw->_canvas_tbl->set_vexpand(true);
- gtk_grid_attach(GTK_GRID(tbl_wrapper), GTK_WIDGET (dtw->_canvas_tbl->gobj()), 1, 1, 1, 1);
+ tbl_wrapper->attach(*(dtw->_canvas_tbl), 1, 1, 1, 1);
}
// connect scrollbar signals
@@ -745,6 +745,10 @@ SPDesktopWidget::dispose(GObject *object)
dtw->desktop->destroy();
Inkscape::GC::release (dtw->desktop);
dtw->desktop = nullptr;
+
+ // Rulers
+ sp_ruler_remove_track_widget(SP_RULER(dtw->_hruler->gobj()), GTK_WIDGET(dtw->_canvas));
+ sp_ruler_remove_track_widget(SP_RULER(dtw->_vruler->gobj()), GTK_WIDGET(dtw->_canvas));
}
dtw->modified_connection.~connection();
diff --git a/src/widgets/gimp/ruler.cpp b/src/widgets/gimp/ruler.cpp
index 470cf44f0..1d196d2b0 100644
--- a/src/widgets/gimp/ruler.cpp
+++ b/src/widgets/gimp/ruler.cpp
@@ -276,20 +276,23 @@ sp_ruler_init (SPRuler *ruler)
static void
sp_ruler_dispose (GObject *object)
{
- SPRuler *ruler = SP_RULER (object);
- SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler);
+ SPRuler *ruler = SP_RULER(object);
+ SPRulerPrivate *priv = SP_RULER_GET_PRIVATE(ruler);
- for (auto i:*(priv->track_widgets))
- sp_ruler_remove_track_widget (ruler, i);
+ if (ruler == nullptr || priv == nullptr || priv->track_widgets == nullptr) { return; }
- if (priv->pos_redraw_idle_id)
- {
- g_source_remove (priv->pos_redraw_idle_id);
- priv->pos_redraw_idle_id = 0;
+ while (!priv->track_widgets->empty()) {
+ sp_ruler_remove_track_widget(ruler, *(priv->track_widgets->begin()));
+ }
+
+ if (priv->pos_redraw_idle_id) {
+ g_source_remove(priv->pos_redraw_idle_id);
+ priv->pos_redraw_idle_id = 0;
}
- delete priv->track_widgets;
+ delete priv->track_widgets;
+ priv->track_widgets = nullptr;
- G_OBJECT_CLASS (parent_class)->dispose (object);
+ G_OBJECT_CLASS (parent_class)->dispose(object);
}
@@ -861,8 +864,8 @@ sp_ruler_event_to_widget_coords (GtkWidget *widget,
static gboolean
sp_ruler_track_widget_motion_notify (GtkWidget *widget,
- GdkEventMotion *mevent,
- SPRuler *ruler)
+ GdkEventMotion *mevent,
+ SPRuler *ruler)
{
gint widget_x;
gint widget_y;
@@ -919,25 +922,23 @@ sp_ruler_add_track_widget (SPRuler *ruler,
*/
void
sp_ruler_remove_track_widget (SPRuler *ruler,
- GtkWidget *widget)
+ GtkWidget *widget)
{
- SPRulerPrivate *priv;
-
g_return_if_fail (SP_IS_RULER (ruler));
g_return_if_fail (GTK_IS_WIDGET (ruler));
- priv = SP_RULER_GET_PRIVATE (ruler);
-
- g_return_if_fail (priv->track_widgets->find(widget)!=priv->track_widgets->end());
-
- priv->track_widgets->erase(widget);
+ SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler);
+ g_return_if_fail(priv->track_widgets->find(widget)!=priv->track_widgets->end());
+
g_signal_handlers_disconnect_by_func (widget,
- (gpointer) G_CALLBACK (sp_ruler_track_widget_motion_notify),
- ruler);
+ (gpointer) G_CALLBACK (sp_ruler_track_widget_motion_notify),
+ ruler);
g_signal_handlers_disconnect_by_func (widget,
- (gpointer) G_CALLBACK (sp_ruler_remove_track_widget),
- ruler);
+ (gpointer) G_CALLBACK (sp_ruler_remove_track_widget),
+ ruler);
+
+ priv->track_widgets->erase(widget);
}
/**