[gtk/wip/dboles/scrolledwindow-deduplicate-set-hvadjustment] ScrolledWindow: Don't duplicate set_vhadjustment()
- From: Daniel Boles <dboles src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/dboles/scrolledwindow-deduplicate-set-hvadjustment] ScrolledWindow: Don't duplicate set_vhadjustment()
- Date: Tue, 21 May 2019 20:25:33 +0000 (UTC)
commit 1a51d8c3de9e8b97966854c06ef048921602180c
Author: Daniel Boles <dboles src gmail com>
Date: Tue May 21 21:12:48 2019 +0100
ScrolledWindow: Don't duplicate set_vhadjustment()
copy and paste... not even once...
gtk/gtkscrolledwindow.c | 153 +++++++++++++++++++-----------------------------
1 file changed, 61 insertions(+), 92 deletions(-)
---
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index 1a87169b71..d85e3601d9 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -2029,78 +2029,102 @@ gtk_scrolled_window_new (GtkAdjustment *hadjustment,
return scrolled_window;
}
-/**
- * gtk_scrolled_window_set_hadjustment:
- * @scrolled_window: a #GtkScrolledWindow
- * @hadjustment: (nullable): the #GtkAdjustment to use, or %NULL to create a new one
- *
- * Sets the #GtkAdjustment for the horizontal scrollbar.
- */
-void
-gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
- GtkAdjustment *hadjustment)
+typedef void (*WidgetInsertFunc)(GtkWidget *, GtkWidget *, GtkWidget *);
+typedef void (*ScrollableSetAdjustmentFunc)(GtkScrollable *, GtkAdjustment *);
+
+static void
+gtk_scrolled_window_set_adjustment (GtkScrolledWindow *scrolled_window,
+ GtkAdjustment *adjustment,
+ GtkOrientation orientation,
+ GtkWidget **scrollbar,
+ guint prop_id,
+ ScrollableSetAdjustmentFunc scrollable_set_adjustment,
+ WidgetInsertFunc widget_insert,
+ GtkWidget *other_scrollbar)
{
- GtkScrolledWindowPrivate *priv = gtk_scrolled_window_get_instance_private (scrolled_window);
GtkBin *bin;
GtkWidget *child;
g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
- if (hadjustment)
- g_return_if_fail (GTK_IS_ADJUSTMENT (hadjustment));
+ if (adjustment)
+ g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment));
else
- hadjustment = (GtkAdjustment*) g_object_new (GTK_TYPE_ADJUSTMENT, NULL);
+ adjustment = (GtkAdjustment*) g_object_new (GTK_TYPE_ADJUSTMENT, NULL);
bin = GTK_BIN (scrolled_window);
- if (!priv->hscrollbar)
+ if (!*scrollbar)
{
- priv->hscrollbar = gtk_scrollbar_new (GTK_ORIENTATION_HORIZONTAL, hadjustment);
+ *scrollbar = gtk_scrollbar_new (orientation, adjustment);
- gtk_widget_insert_before (priv->hscrollbar, GTK_WIDGET (scrolled_window), priv->vscrollbar);
+ widget_insert (*scrollbar, GTK_WIDGET (scrolled_window), other_scrollbar);
update_scrollbar_positions (scrolled_window);
}
else
{
GtkAdjustment *old_adjustment;
- old_adjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (priv->hscrollbar));
- if (old_adjustment == hadjustment)
- return;
+ old_adjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (*scrollbar));
+
+ if (old_adjustment == adjustment)
+ return;
g_signal_handlers_disconnect_by_func (old_adjustment,
gtk_scrolled_window_adjustment_changed,
scrolled_window);
+
g_signal_handlers_disconnect_by_func (old_adjustment,
gtk_scrolled_window_adjustment_value_changed,
scrolled_window);
gtk_adjustment_enable_animation (old_adjustment, NULL, 0);
- gtk_scrollbar_set_adjustment (GTK_SCROLLBAR (priv->hscrollbar), hadjustment);
+ gtk_scrollbar_set_adjustment (GTK_SCROLLBAR (*scrollbar), adjustment);
}
- hadjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (priv->hscrollbar));
+ adjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (*scrollbar));
- g_signal_connect (hadjustment,
+ g_signal_connect (adjustment,
"changed",
- G_CALLBACK (gtk_scrolled_window_adjustment_changed),
- scrolled_window);
- g_signal_connect (hadjustment,
+ G_CALLBACK (gtk_scrolled_window_adjustment_changed),
+ scrolled_window);
+
+ g_signal_connect (adjustment,
"value-changed",
- G_CALLBACK (gtk_scrolled_window_adjustment_value_changed),
- scrolled_window);
+ G_CALLBACK (gtk_scrolled_window_adjustment_value_changed),
+ scrolled_window);
- gtk_scrolled_window_adjustment_changed (hadjustment, scrolled_window);
- gtk_scrolled_window_adjustment_value_changed (hadjustment, scrolled_window);
+ gtk_scrolled_window_adjustment_changed (adjustment, scrolled_window);
+ gtk_scrolled_window_adjustment_value_changed (adjustment, scrolled_window);
child = gtk_bin_get_child (bin);
+
if (child)
- gtk_scrollable_set_hadjustment (GTK_SCROLLABLE (child), hadjustment);
+ scrollable_set_adjustment (GTK_SCROLLABLE (child), adjustment);
if (gtk_widget_should_animate (GTK_WIDGET (scrolled_window)))
- gtk_adjustment_enable_animation (hadjustment, gtk_widget_get_frame_clock (GTK_WIDGET (scrolled_window)),
ANIMATION_DURATION);
+ gtk_adjustment_enable_animation (adjustment, gtk_widget_get_frame_clock (GTK_WIDGET (scrolled_window)),
ANIMATION_DURATION);
- g_object_notify_by_pspec (G_OBJECT (scrolled_window), properties[PROP_HADJUSTMENT]);
+ g_object_notify_by_pspec (G_OBJECT (scrolled_window), properties[prop_id]);
+}
+
+/**
+ * gtk_scrolled_window_set_hadjustment:
+ * @scrolled_window: a #GtkScrolledWindow
+ * @hadjustment: (nullable): the #GtkAdjustment to use, or %NULL to create a new one
+ *
+ * Sets the #GtkAdjustment for the horizontal scrollbar.
+ */
+void
+gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
+ GtkAdjustment *hadjustment)
+{
+ GtkScrolledWindowPrivate *priv = gtk_scrolled_window_get_instance_private (scrolled_window);
+
+ gtk_scrolled_window_set_adjustment (scrolled_window, hadjustment,
+ GTK_ORIENTATION_HORIZONTAL, &priv->hscrollbar, PROP_HADJUSTMENT,
+ gtk_scrollable_set_hadjustment,
+ gtk_widget_insert_before, priv->vscrollbar);
}
/**
@@ -2115,66 +2139,11 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
GtkAdjustment *vadjustment)
{
GtkScrolledWindowPrivate *priv = gtk_scrolled_window_get_instance_private (scrolled_window);
- GtkBin *bin;
- GtkWidget *child;
-
- g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
-
- if (vadjustment)
- g_return_if_fail (GTK_IS_ADJUSTMENT (vadjustment));
- else
- vadjustment = (GtkAdjustment*) g_object_new (GTK_TYPE_ADJUSTMENT, NULL);
-
- bin = GTK_BIN (scrolled_window);
-
- if (!priv->vscrollbar)
- {
- priv->vscrollbar = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, vadjustment);
-
- gtk_widget_insert_after (priv->vscrollbar, GTK_WIDGET (scrolled_window), priv->hscrollbar);
- update_scrollbar_positions (scrolled_window);
- }
- else
- {
- GtkAdjustment *old_adjustment;
-
- old_adjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (priv->vscrollbar));
- if (old_adjustment == vadjustment)
- return;
-
- g_signal_handlers_disconnect_by_func (old_adjustment,
- gtk_scrolled_window_adjustment_changed,
- scrolled_window);
- g_signal_handlers_disconnect_by_func (old_adjustment,
- gtk_scrolled_window_adjustment_value_changed,
- scrolled_window);
-
- gtk_adjustment_enable_animation (old_adjustment, NULL, 0);
- gtk_scrollbar_set_adjustment (GTK_SCROLLBAR (priv->vscrollbar), vadjustment);
- }
-
- vadjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (priv->vscrollbar));
-
- g_signal_connect (vadjustment,
- "changed",
- G_CALLBACK (gtk_scrolled_window_adjustment_changed),
- scrolled_window);
- g_signal_connect (vadjustment,
- "value-changed",
- G_CALLBACK (gtk_scrolled_window_adjustment_value_changed),
- scrolled_window);
-
- gtk_scrolled_window_adjustment_changed (vadjustment, scrolled_window);
- gtk_scrolled_window_adjustment_value_changed (vadjustment, scrolled_window);
-
- child = gtk_bin_get_child (bin);
- if (child)
- gtk_scrollable_set_vadjustment (GTK_SCROLLABLE (child), vadjustment);
-
- if (gtk_widget_should_animate (GTK_WIDGET (scrolled_window)))
- gtk_adjustment_enable_animation (vadjustment, gtk_widget_get_frame_clock (GTK_WIDGET (scrolled_window)),
ANIMATION_DURATION);
- g_object_notify_by_pspec (G_OBJECT (scrolled_window), properties[PROP_VADJUSTMENT]);
+ gtk_scrolled_window_set_adjustment (scrolled_window, vadjustment,
+ GTK_ORIENTATION_VERTICAL, &priv->vscrollbar, PROP_VADJUSTMENT,
+ gtk_scrollable_set_vadjustment,
+ gtk_widget_insert_after, priv->hscrollbar);
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]