summaryrefslogtreecommitdiff
path: root/gladeui/glade-design-view.c
diff options
context:
space:
mode:
authorCorentin Noël <corentin.noel@collabora.com>2019-09-13 11:20:01 +0200
committerAlberto Fanjul <albertofanjul@gmail.com>2019-09-13 13:06:54 +0000
commit58c737af2a28c5721bd004b0ceeb2031eab6a14b (patch)
tree56686d4d4c74b9f27e000832aac17770baefbc55 /gladeui/glade-design-view.c
parent6054540957a0ae431f6b1aca7e9baa85fa52e6d1 (diff)
downloadglade-58c737af2a28c5721bd004b0ceeb2031eab6a14b.tar.gz
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
Diffstat (limited to 'gladeui/glade-design-view.c')
-rw-r--r--gladeui/glade-design-view.c85
1 files 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;