[glade/tintou/design-view-safe: 2/2] gladeui: Fix wrong pointer convertion in GladeDesignView
- From: Alberto Fanjul <albfan src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glade/tintou/design-view-safe: 2/2] gladeui: Fix wrong pointer convertion in GladeDesignView
- Date: Fri, 13 Sep 2019 13:07:07 +0000 (UTC)
commit 58c737af2a28c5721bd004b0ceeb2031eab6a14b
Author: Corentin Noël <corentin noel collabora com>
Date: Fri Sep 13 11:20:01 2019 +0200
gladeui: Fix wrong pointer convertion in GladeDesignView
Also use g_assert in static functions to always ensure that we're getting the right type.
GNOME Builder is using it like this itself and it allows to find mistakes faster.
It can also be disabled for release builds by defining G_DISABLE_ASSERT
gladeui/glade-design-view.c | 85 +++++++++++++++++++++++++++++----------------
1 file changed, 56 insertions(+), 29 deletions(-)
---
diff --git a/gladeui/glade-design-view.c b/gladeui/glade-design-view.c
index 35ac2e75..da24037e 100644
--- a/gladeui/glade-design-view.c
+++ b/gladeui/glade-design-view.c
@@ -81,6 +81,8 @@ glade_design_layout_scroll (GladeDesignView *view, gint x, gint y, gint w, gint
gdouble vadj_val, hadj_val, vpage_end, hpage_end;
GtkAdjustment *vadj, *hadj;
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
vadj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (priv->scrolled_window));
hadj = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (priv->scrolled_window));
@@ -102,6 +104,8 @@ glade_design_layout_scroll (GladeDesignView *view, gint x, gint y, gint w, gint
static void
on_layout_size_allocate (GtkWidget *widget, GtkAllocation *alloc, GladeDesignView *view)
{
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
glade_design_layout_scroll (view, alloc->x, alloc->y, alloc->width, alloc->height);
g_signal_handlers_disconnect_by_func (widget, on_layout_size_allocate, view);
}
@@ -130,6 +134,8 @@ glade_design_view_selection_changed (GladeProject *project, GladeDesignView *vie
GtkWidget *layout;
GList *selection;
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
glade_design_view_update_state (glade_project_toplevels (project),
GTK_STATE_FLAG_NORMAL);
@@ -161,6 +167,8 @@ glade_design_view_add_toplevel (GladeDesignView *view, GladeWidget *widget)
GList *toplevels;
GObject *object;
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
if (glade_widget_get_parent (widget) ||
(object = glade_widget_get_object (widget)) == NULL ||
!GTK_IS_WIDGET (object) ||
@@ -188,6 +196,8 @@ glade_design_view_remove_toplevel (GladeDesignView *view, GladeWidget *widget)
GtkWidget *layout;
GObject *object;
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
if (glade_widget_get_parent (widget) ||
(object = glade_widget_get_object (widget)) == NULL ||
!GTK_IS_WIDGET (object)) return;
@@ -209,6 +219,8 @@ glade_design_view_widget_visibility_changed (GladeProject *project,
gboolean visible,
GladeDesignView *view)
{
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
if (visible)
glade_design_view_add_toplevel (view, widget);
else
@@ -218,12 +230,16 @@ glade_design_view_widget_visibility_changed (GladeProject *project,
static void
on_project_add_widget (GladeProject *project, GladeWidget *widget, GladeDesignView *view)
{
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
glade_design_view_add_toplevel (view, widget);
}
static void
on_project_remove_widget (GladeProject *project, GladeWidget *widget, GladeDesignView *view)
{
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
glade_design_view_remove_toplevel (view, widget);
}
@@ -232,35 +248,22 @@ glade_design_view_set_project (GladeDesignView *view, GladeProject *project)
{
GladeDesignViewPrivate *priv = glade_design_view_get_instance_private (view);
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
if (priv->project)
{
- g_signal_handlers_disconnect_by_func (priv->project,
- on_project_add_widget,
- view);
- g_signal_handlers_disconnect_by_func (priv->project,
- on_project_remove_widget,
- view);
- g_signal_handlers_disconnect_by_func (priv->project,
- gtk_widget_hide,
- priv->scrolled_window);
- g_signal_handlers_disconnect_by_func (priv->project,
- gtk_widget_show,
- priv->scrolled_window);
- g_signal_handlers_disconnect_by_func (priv->project,
- glade_design_view_selection_changed,
- view);
- g_signal_handlers_disconnect_by_func (priv->project,
- glade_design_view_widget_visibility_changed,
- view);
+ g_signal_handlers_disconnect_by_data (priv->project, view);
+ g_signal_handlers_disconnect_by_data (priv->project, priv->scrolled_window);
g_object_set_data (G_OBJECT (priv->project), GLADE_DESIGN_VIEW_KEY, NULL);
- g_clear_object (&priv->project);
}
+ g_set_object (&priv->project, project);
+
if (!project)
return;
- priv->project = g_object_ref (project);
+ g_assert (GLADE_IS_PROJECT (project));
g_signal_connect (project, "add-widget",
G_CALLBACK (on_project_add_widget), view);
@@ -355,10 +358,12 @@ glade_design_view_viewport_button_press (GtkWidget *widget,
GdkEventButton *event,
GladeDesignView *view)
{
- GladeDesignViewPrivate *priv = glade_design_view_get_instance_private ((GladeDesignView *) widget);
+ GladeDesignViewPrivate *priv = glade_design_view_get_instance_private ((GladeDesignView *) view);
GdkRectangle rect = {event->x, event->y, 8, 8};
GtkWidget *pop, *chooser;
-
+
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
if (event->type != GDK_2BUTTON_PRESS)
return FALSE;
@@ -385,10 +390,12 @@ glade_design_view_viewport_button_press (GtkWidget *widget,
static gboolean
glade_design_view_viewport_draw (GtkWidget *widget, cairo_t *cr, GladeDesignView *view)
{
- GladeDesignViewPrivate *priv = glade_design_view_get_instance_private ((GladeDesignView *) widget);
+ GladeDesignViewPrivate *priv = glade_design_view_get_instance_private ((GladeDesignView *) view);
GtkStyleContext *context = gtk_widget_get_style_context (widget);
GdkRGBA fg_color;
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
gtk_style_context_get_color (context, gtk_style_context_get_state (context),
&fg_color);
@@ -463,13 +470,16 @@ glade_design_view_init (GladeDesignView *view)
}
static void
-glade_design_view_finalize (GObject *object)
+glade_design_view_dispose (GObject *object)
{
GladeDesignView *view = GLADE_DESIGN_VIEW (object);
+ GladeDesignViewPrivate *priv = glade_design_view_get_instance_private (view);
glade_design_view_set_project (view, NULL);
+ g_clear_object (&priv->drag_target);
+ g_clear_object (&priv->drag_data);
- G_OBJECT_CLASS (parent_class)->finalize (object);
+ G_OBJECT_CLASS (parent_class)->dispose (object);
}
typedef struct
@@ -532,6 +542,8 @@ glade_design_view_drag_motion (GtkWidget *widget,
_GladeDrag *drag = NULL;
gint xx, yy;
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
if (!priv->drag_data)
{
GdkAtom target = gtk_drag_dest_find_target (widget, context, NULL);
@@ -619,6 +631,8 @@ glade_design_view_drag_leave (GtkWidget *widget,
GladeDesignView *view = GLADE_DESIGN_VIEW (widget);
GladeDesignViewPrivate *priv = glade_design_view_get_instance_private (view);
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
if (priv->drag_target)
glade_design_view_drag_highlight (priv->drag_target, -1, -1);
}
@@ -629,6 +643,8 @@ on_source_drag_end (GtkWidget *widget,
GladeDesignView *view)
{
GladeDesignViewPrivate *priv = glade_design_view_get_instance_private (view);
+
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
if (priv->drag_target)
{
@@ -652,6 +668,8 @@ glade_design_view_drag_data_received (GtkWidget *widget,
GladeDesignView *view = GLADE_DESIGN_VIEW (widget);
GladeDesignViewPrivate *priv = glade_design_view_get_instance_private (view);
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
g_signal_handlers_disconnect_by_func (source, on_source_drag_end, view);
g_set_object (&priv->drag_data, _glade_dnd_get_data (context, selection, info));
@@ -666,7 +684,10 @@ glade_design_view_drag_drop (GtkWidget *widget,
gint y,
guint time)
{
- GladeDesignViewPrivate *priv = glade_design_view_get_instance_private ((GladeDesignView *) widget);
+ GladeDesignView *view = GLADE_DESIGN_VIEW (widget);
+ GladeDesignViewPrivate *priv = glade_design_view_get_instance_private (view);
+
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
if (priv->drag_data && priv->drag_target)
{
@@ -708,9 +729,12 @@ glade_design_view_drag_iface_drop (_GladeDrag *drag,
gint x, gint y,
GObject *data)
{
- GladeDesignViewPrivate *priv = glade_design_view_get_instance_private ((GladeDesignView *) drag);
+ GladeDesignView *view = GLADE_DESIGN_VIEW (drag);
+ GladeDesignViewPrivate *priv = glade_design_view_get_instance_private (view);
GladeWidget *gsource;
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
if (GLADE_IS_WIDGET_ADAPTOR (data))
{
glade_command_create (GLADE_WIDGET_ADAPTOR (data),
@@ -730,9 +754,12 @@ glade_design_view_drag_iface_drop (_GladeDrag *drag,
static void
glade_design_view_drag_iface_highlight (_GladeDrag *drag, gint x, gint y)
{
- GladeDesignViewPrivate *priv = glade_design_view_get_instance_private ((GladeDesignView *) drag);
+ GladeDesignView *view = GLADE_DESIGN_VIEW (drag);
+ GladeDesignViewPrivate *priv = glade_design_view_get_instance_private (view);
gboolean highlight = !(x < 0 || y < 0);
+ g_assert (GLADE_IS_DESIGN_VIEW (view));
+
if (priv->drag_highlight == highlight)
return;
@@ -760,7 +787,7 @@ glade_design_view_class_init (GladeDesignViewClass *klass)
object_class = G_OBJECT_CLASS (klass);
widget_class = GTK_WIDGET_CLASS (klass);
- object_class->finalize = glade_design_view_finalize;
+ object_class->dispose = glade_design_view_dispose;
object_class->get_property = glade_design_view_get_property;
object_class->set_property = glade_design_view_set_property;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]