[gedit] Do not implement the scrollable interface anymore.
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit] Do not implement the scrollable interface anymore.
- Date: Tue, 15 Feb 2011 19:46:36 +0000 (UTC)
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]