[gedit] Do not implement the scrollable interface anymore.



commit 249dac22eccd7ab406860ba1c622237835e687fd
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Tue Feb 15 20:40:04 2011 +0100

    Do not implement the scrollable interface anymore.
    
    Now we just check that the main widget is a scrolled window
    and if so put the floating widgets relative to its child.

 gedit/gedit-overlay-child.c |   59 +---------
 gedit/gedit-overlay.c       |  268 +++++--------------------------------------
 gedit/gedit-overlay.h       |    4 -
 gedit/gedit-view-frame.c    |   10 +-
 4 files changed, 37 insertions(+), 304 deletions(-)
---
diff --git a/gedit/gedit-overlay-child.c b/gedit/gedit-overlay-child.c
index eaa35ab..deb9425 100644
--- a/gedit/gedit-overlay-child.c
+++ b/gedit/gedit-overlay-child.c
@@ -28,7 +28,6 @@ struct _GeditOverlayChildPrivate
 	GtkAllocation             widget_alloc;
 	GeditOverlayChildPosition position;
 	guint                     offset;
-	gboolean                  fixed;
 };
 
 enum
@@ -36,8 +35,7 @@ enum
 	PROP_0,
 	PROP_WIDGET,
 	PROP_POSITION,
-	PROP_OFFSET,
-	PROP_FIXED
+	PROP_OFFSET
 };
 
 G_DEFINE_TYPE (GeditOverlayChild, gedit_overlay_child, GTK_TYPE_BIN)
@@ -61,9 +59,6 @@ gedit_overlay_child_get_property (GObject    *object,
 		case PROP_OFFSET:
 			g_value_set_uint (value, child->priv->offset);
 			break;
-		case PROP_FIXED:
-			g_value_set_boolean (value, child->priv->fixed);
-			break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 			break;
@@ -90,9 +85,6 @@ gedit_overlay_child_set_property (GObject      *object,
 		case PROP_OFFSET:
 			child->priv->offset = g_value_get_uint (value);
 			break;
-		case PROP_FIXED:
-			child->priv->fixed = g_value_get_boolean (value);
-			break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 			break;
@@ -252,15 +244,6 @@ gedit_overlay_child_class_init (GeditOverlayChildClass *klass)
 	                                                    G_PARAM_CONSTRUCT |
 	                                                    G_PARAM_STATIC_STRINGS));
 
-	g_object_class_install_property (object_class, PROP_FIXED,
-	                                 g_param_spec_boolean ("fixed",
-	                                                       "Fixed",
-	                                                       "Wether the Widget is in a fixed position",
-	                                                       TRUE,
-	                                                       G_PARAM_READWRITE |
-	                                                       G_PARAM_CONSTRUCT |
-	                                                       G_PARAM_STATIC_STRINGS));
-
 	g_type_class_add_private (object_class, sizeof (GeditOverlayChildPrivate));
 }
 
@@ -365,44 +348,4 @@ gedit_overlay_child_set_offset (GeditOverlayChild *child,
 	}
 }
 
-/**
- * gedit_overlay_child_get_fixed:
- * @child: a #GeditOverlayChild
- *
- * Gets wether @child is fixed in its position. If @child is not fixed the position
- * will change when for example you scroll the container.
- *
- * Returns: wether @child is fixed in its position
- */
-gboolean
-gedit_overlay_child_get_fixed (GeditOverlayChild *child)
-{
-	g_return_val_if_fail (GEDIT_IS_OVERLAY_CHILD (child), TRUE);
-
-	return child->priv->fixed;
-}
-
-/**
- * gedit_overlay_child_set_fixed:
- * @child: a #GeditOverlayChild
- * @fixed: wether @child is in a fixed position
- *
- * Sets wether @child is in a fixed position
- */
-void
-gedit_overlay_child_set_fixed (GeditOverlayChild *child,
-                               gboolean           fixed)
-{
-	g_return_if_fail (GEDIT_IS_OVERLAY_CHILD (child));
-
-	fixed = (fixed != FALSE);
-
-	if (child->priv->fixed != fixed)
-	{
-		child->priv->fixed = fixed;
-
-		g_object_notify (G_OBJECT (child), "fixed");
-	}
-}
-
 /* ex:set ts=8 noet: */
diff --git a/gedit/gedit-overlay.c b/gedit/gedit-overlay.c
index 05f68de..13649a2 100644
--- a/gedit/gedit-overlay.c
+++ b/gedit/gedit-overlay.c
@@ -30,36 +30,15 @@ struct _GeditOverlayPrivate
 {
 	GtkWidget *main_widget;
 	GSList    *children;
-	GtkAllocation main_alloc;
-
-	GtkAdjustment *hadjustment;
-	GtkAdjustment *vadjustment;
-	glong          hadjustment_signal_id;
-	glong          vadjustment_signal_id;
-
-	/* GtkScrollablePolicy needs to be checked when
-	 * driving the scrollable adjustment values */
-	guint hscroll_policy : 1;
-	guint vscroll_policy : 1;
 };
 
 enum
 {
 	PROP_0,
-	PROP_MAIN_WIDGET,
-	PROP_HADJUSTMENT,
-	PROP_VADJUSTMENT,
-	PROP_HSCROLL_POLICY,
-	PROP_VSCROLL_POLICY
+	PROP_MAIN_WIDGET
 };
 
-static void	gedit_overlay_set_hadjustment		(GeditOverlay  *overlay,
-							 GtkAdjustment *adjustment);
-static void	gedit_overlay_set_vadjustment		(GeditOverlay  *overlay,
-							 GtkAdjustment *adjustment);
-
-G_DEFINE_TYPE_WITH_CODE (GeditOverlay, gedit_overlay, GTK_TYPE_CONTAINER,
-                         G_IMPLEMENT_INTERFACE (GTK_TYPE_SCROLLABLE, NULL))
+G_DEFINE_TYPE (GeditOverlay, gedit_overlay, GTK_TYPE_CONTAINER)
 
 static void
 add_toplevel_widget (GeditOverlay *overlay,
@@ -74,22 +53,6 @@ add_toplevel_widget (GeditOverlay *overlay,
 static void
 gedit_overlay_dispose (GObject *object)
 {
-	GeditOverlay *overlay = GEDIT_OVERLAY (object);
-
-	if (overlay->priv->hadjustment != NULL)
-	{
-		g_signal_handler_disconnect (overlay->priv->hadjustment,
-		                             overlay->priv->hadjustment_signal_id);
-		overlay->priv->hadjustment = NULL;
-	}
-
-	if (overlay->priv->vadjustment != NULL)
-	{
-		g_signal_handler_disconnect (overlay->priv->vadjustment,
-		                             overlay->priv->vadjustment_signal_id);
-		overlay->priv->vadjustment = NULL;
-	}
-
 	G_OBJECT_CLASS (gedit_overlay_parent_class)->dispose (object);
 }
 
@@ -108,38 +71,6 @@ gedit_overlay_get_property (GObject    *object,
 			g_value_set_object (value, priv->main_widget);
 			break;
 
-		case PROP_HADJUSTMENT:
-			g_value_set_object (value, priv->hadjustment);
-			break;
-
-		case PROP_VADJUSTMENT:
-			g_value_set_object (value, priv->vadjustment);
-			break;
-
-		case PROP_HSCROLL_POLICY:
-			if (GTK_IS_SCROLLABLE (priv->main_widget))
-			{
-				g_value_set_enum (value,
-				                  gtk_scrollable_get_hscroll_policy (GTK_SCROLLABLE (priv->main_widget)));
-			}
-			else
-			{
-				g_value_set_enum (value, priv->hscroll_policy);
-			}
-			break;
-
-		case PROP_VSCROLL_POLICY:
-			if (GTK_IS_SCROLLABLE (priv->main_widget))
-			{
-				g_value_set_enum (value,
-				                  gtk_scrollable_get_vscroll_policy (GTK_SCROLLABLE (priv->main_widget)));
-			}
-			else
-			{
-				g_value_set_enum (value, priv->vscroll_policy);
-			}
-			break;
-
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 			break;
@@ -158,45 +89,8 @@ gedit_overlay_set_property (GObject      *object,
 	switch (prop_id)
 	{
 		case PROP_MAIN_WIDGET:
-			overlay->priv->main_widget = g_value_get_object (value);
-			add_toplevel_widget (overlay,
-			                     overlay->priv->main_widget);
-			break;
-
-		case PROP_HADJUSTMENT:
-			gedit_overlay_set_hadjustment (overlay,
-						       g_value_get_object (value));
-			break;
-
-		case PROP_VADJUSTMENT:
-			gedit_overlay_set_vadjustment (overlay,
-						       g_value_get_object (value));
-			break;
-
-		case PROP_HSCROLL_POLICY:
-			if (GTK_IS_SCROLLABLE (priv->main_widget))
-			{
-				gtk_scrollable_set_hscroll_policy (GTK_SCROLLABLE (priv->main_widget),
-				                                   g_value_get_enum (value));
-			}
-			else
-			{
-				priv->hscroll_policy = g_value_get_enum (value);
-				gtk_widget_queue_resize (GTK_WIDGET (overlay));
-			}
-			break;
-
-		case PROP_VSCROLL_POLICY:
-			if (GTK_IS_SCROLLABLE (priv->main_widget))
-			{
-				gtk_scrollable_set_vscroll_policy (GTK_SCROLLABLE (priv->main_widget),
-				                                   g_value_get_enum (value));
-			}
-			else
-			{
-				priv->vscroll_policy = g_value_get_enum (value);
-				gtk_widget_queue_resize (GTK_WIDGET (overlay));
-			}
+			priv->main_widget = g_value_get_object (value);
+			add_toplevel_widget (overlay, priv->main_widget);
 			break;
 
 		default:
@@ -295,10 +189,34 @@ gedit_overlay_get_preferred_height (GtkWidget *widget,
 }
 
 static void
-set_children_positions (GeditOverlay *overlay)
+gedit_overlay_size_allocate (GtkWidget     *widget,
+                             GtkAllocation *allocation)
 {
+	GeditOverlay *overlay = GEDIT_OVERLAY (widget);
+	GtkAllocation main_alloc;
 	GSList *l;
 
+	GTK_WIDGET_CLASS (gedit_overlay_parent_class)->size_allocate (widget, allocation);
+
+	/* main widget allocation */
+	main_alloc.x = 0;
+	main_alloc.y = 0;
+	main_alloc.width = allocation->width;
+	main_alloc.height = allocation->height;
+
+	gtk_widget_size_allocate (overlay->priv->main_widget,
+	                          &main_alloc);
+
+	/* we special case the scrolled window to put the floating widgets
+	   in relation to the scrolled window child */
+	if (GTK_IS_SCROLLED_WINDOW (overlay->priv->main_widget))
+	{
+		GtkWidget *child;
+
+		child = gtk_bin_get_child (GTK_BIN (overlay->priv->main_widget));
+		gtk_widget_get_allocation (child, &main_alloc);
+	}
+
 	for (l = overlay->priv->children; l != NULL; l = g_slist_next (l))
 	{
 		GeditOverlayPrivate *priv = overlay->priv;
@@ -318,7 +236,7 @@ set_children_positions (GeditOverlay *overlay)
 		{
 			/* The gravity is treated as position and not as a gravity */
 			case GEDIT_OVERLAY_CHILD_POSITION_NORTH_EAST:
-				alloc.x = priv->main_alloc.width - req.width - offset;
+				alloc.x = main_alloc.width - req.width - offset;
 				alloc.y = 0;
 				break;
 			case GEDIT_OVERLAY_CHILD_POSITION_NORTH_WEST:
@@ -327,19 +245,13 @@ set_children_positions (GeditOverlay *overlay)
 				break;
 			case GEDIT_OVERLAY_CHILD_POSITION_SOUTH_WEST:
 				alloc.x = offset;
-				alloc.y = priv->main_alloc.height - req.height;
+				alloc.y = main_alloc.height - req.height;
 				break;
 			default:
 				alloc.x = 0;
 				alloc.y = 0;
 		}
 
-		if (!gedit_overlay_child_get_fixed (GEDIT_OVERLAY_CHILD (child)))
-		{
-			alloc.x *= gtk_adjustment_get_value (priv->hadjustment);
-			alloc.y *= gtk_adjustment_get_value (priv->vadjustment);
-		}
-
 		alloc.width = req.width;
 		alloc.height = req.height;
 
@@ -347,24 +259,6 @@ set_children_positions (GeditOverlay *overlay)
 	}
 }
 
-static void
-gedit_overlay_size_allocate (GtkWidget     *widget,
-                             GtkAllocation *allocation)
-{
-	GeditOverlay *overlay = GEDIT_OVERLAY (widget);
-
-	GTK_WIDGET_CLASS (gedit_overlay_parent_class)->size_allocate (widget, allocation);
-
-	overlay->priv->main_alloc.x = 0;
-	overlay->priv->main_alloc.y = 0;
-	overlay->priv->main_alloc.width = allocation->width;
-	overlay->priv->main_alloc.height = allocation->height;
-
-	gtk_widget_size_allocate (overlay->priv->main_widget,
-	                          &overlay->priv->main_alloc);
-	set_children_positions (overlay);
-}
-
 static GeditOverlayChild *
 get_overlay_child (GeditOverlay *overlay,
                    GtkWidget    *widget)
@@ -481,93 +375,6 @@ gedit_overlay_child_type (GtkContainer *overlay)
 	return GTK_TYPE_WIDGET;
 }
 
-static void
-adjustment_value_changed (GtkAdjustment *adjustment,
-                          GeditOverlay  *overlay)
-{
-	set_children_positions (overlay);
-}
-
-static void
-gedit_overlay_set_hadjustment (GeditOverlay  *overlay,
-                               GtkAdjustment *adjustment)
-{
-	GeditOverlayPrivate *priv = overlay->priv;
-
-	if (adjustment && priv->vadjustment == adjustment)
-		return;
-
-	if (priv->hadjustment != NULL)
-	{
-		g_signal_handler_disconnect (priv->hadjustment,
-		                             priv->hadjustment_signal_id);
-		g_object_unref (priv->hadjustment);
-	}
-
-	if (adjustment == NULL)
-	{
-		adjustment = gtk_adjustment_new (0.0, 0.0, 0.0,
-		                                 0.0, 0.0, 0.0);
-	}
-
-	priv->hadjustment_signal_id =
-		g_signal_connect (adjustment,
-		                  "value-changed",
-		                  G_CALLBACK (adjustment_value_changed),
-		                  overlay);
-
-	priv->hadjustment = g_object_ref_sink (adjustment);
-
-	if (GTK_IS_SCROLLABLE (priv->main_widget))
-	{
-		g_object_set (priv->main_widget,
-		              "hadjustment", adjustment,
-		              NULL);
-
-	}
-
-	g_object_notify (G_OBJECT (overlay), "hadjustment");
-}
-
-static void
-gedit_overlay_set_vadjustment (GeditOverlay  *overlay,
-                               GtkAdjustment *adjustment)
-{
-	GeditOverlayPrivate *priv = overlay->priv;
-
-	if (adjustment && priv->vadjustment == adjustment)
-		return;
-
-	if (priv->vadjustment != NULL)
-	{
-		g_signal_handler_disconnect (priv->vadjustment,
-		                             priv->vadjustment_signal_id);
-		g_object_unref (priv->vadjustment);
-	}
-
-	if (adjustment == NULL)
-	{
-		adjustment = gtk_adjustment_new (0.0, 0.0, 0.0,
-		                                 0.0, 0.0, 0.0);
-	}
-
-	overlay->priv->vadjustment_signal_id =
-		g_signal_connect (adjustment,
-		                  "value-changed",
-		                  G_CALLBACK (adjustment_value_changed),
-		                  overlay);
-
-	priv->vadjustment = g_object_ref_sink (adjustment);
-
-	if (GTK_IS_SCROLLABLE (priv->main_widget))
-	{
-		g_object_set (priv->main_widget,
-		              "vadjustment", adjustment,
-		              NULL);
-	}
-
-	g_object_notify (G_OBJECT (overlay), "vadjustment");
-}
 
 static void
 gedit_overlay_class_init (GeditOverlayClass *klass)
@@ -599,19 +406,6 @@ gedit_overlay_class_init (GeditOverlayClass *klass)
 	                                                      G_PARAM_CONSTRUCT_ONLY |
 	                                                      G_PARAM_STATIC_STRINGS));
 
-	g_object_class_override_property (object_class,
-	                                  PROP_HADJUSTMENT,
-	                                  "hadjustment");
-	g_object_class_override_property (object_class,
-	                                  PROP_VADJUSTMENT,
-	                                  "vadjustment");
-	g_object_class_override_property (object_class,
-	                                  PROP_HSCROLL_POLICY,
-	                                  "hscroll-policy");
-	g_object_class_override_property (object_class,
-	                                  PROP_VSCROLL_POLICY,
-	                                  "vscroll-policy");
-
 	g_type_class_add_private (object_class, sizeof (GeditOverlayPrivate));
 }
 
diff --git a/gedit/gedit-overlay.h b/gedit/gedit-overlay.h
index 8817d33..f0d696f 100644
--- a/gedit/gedit-overlay.h
+++ b/gedit/gedit-overlay.h
@@ -50,10 +50,6 @@ struct _GeditOverlay
 struct _GeditOverlayClass
 {
 	GtkContainerClass parent_class;
-
-	void (* set_scroll_adjustments)	  (GeditOverlay	 *overlay,
-					   GtkAdjustment *hadjustment,
-					   GtkAdjustment *vadjustment);
 };
 
 GType		 gedit_overlay_get_type			(void) G_GNUC_CONST;
diff --git a/gedit/gedit-view-frame.c b/gedit/gedit-view-frame.c
index c3f4ea1..2ed050a 100644
--- a/gedit/gedit-view-frame.c
+++ b/gedit/gedit-view-frame.c
@@ -1433,13 +1433,10 @@ gedit_view_frame_init (GeditViewFrame *frame)
 	                  G_CALLBACK (on_start_interactive_goto_line),
 	                  frame);
 
-	frame->priv->overlay = gedit_animated_overlay_new (frame->priv->view);
-	gtk_widget_show (frame->priv->overlay);
-
 	/* Create the scrolled window */
 	sw = gtk_scrolled_window_new (NULL, NULL);
 
-	gtk_container_add (GTK_CONTAINER (sw), frame->priv->overlay);
+	gtk_container_add (GTK_CONTAINER (sw), frame->priv->view);
 
 	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
 					GTK_POLICY_AUTOMATIC,
@@ -1449,7 +1446,10 @@ gedit_view_frame_init (GeditViewFrame *frame)
 					     GTK_SHADOW_IN);
 	gtk_widget_show (sw);
 
-	gtk_box_pack_start (GTK_BOX (frame), sw, TRUE, TRUE, 0);
+	frame->priv->overlay = gedit_animated_overlay_new (sw);
+	gtk_widget_show (frame->priv->overlay);
+
+	gtk_box_pack_start (GTK_BOX (frame), frame->priv->overlay, TRUE, TRUE, 0);
 }
 
 GeditViewFrame *



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]