summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/gtk/ScrollbarGtk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform/gtk/ScrollbarGtk.cpp')
-rw-r--r--WebCore/platform/gtk/ScrollbarGtk.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/WebCore/platform/gtk/ScrollbarGtk.cpp b/WebCore/platform/gtk/ScrollbarGtk.cpp
index 00c6ea0..0c3037a 100644
--- a/WebCore/platform/gtk/ScrollbarGtk.cpp
+++ b/WebCore/platform/gtk/ScrollbarGtk.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2007, 2009 Holger Hans Peter Freyther zecke@selfish.org
+ * Copyright (C) 2010 Gustavo Noronha Silva <gns@gnome.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -87,6 +88,32 @@ ScrollbarGtk::ScrollbarGtk(ScrollbarClient* client, ScrollbarOrientation orienta
ScrollbarGtk::~ScrollbarGtk()
{
+ if (m_adjustment)
+ detachAdjustment();
+}
+
+void ScrollbarGtk::attachAdjustment(GtkAdjustment* adjustment)
+{
+ if (platformWidget())
+ return;
+
+ if (m_adjustment)
+ detachAdjustment();
+
+ m_adjustment = adjustment;
+
+ g_object_ref(m_adjustment);
+ g_signal_connect(m_adjustment, "value-changed", G_CALLBACK(ScrollbarGtk::gtkValueChanged), this);
+
+ updateThumbProportion();
+ updateThumbPosition();
+}
+
+void ScrollbarGtk::detachAdjustment()
+{
+ if (!m_adjustment)
+ return;
+
g_signal_handlers_disconnect_by_func(G_OBJECT(m_adjustment), (gpointer)ScrollbarGtk::gtkValueChanged, this);
// For the case where we only operate on the GtkAdjustment it is best to
@@ -98,6 +125,7 @@ ScrollbarGtk::~ScrollbarGtk()
gtk_adjustment_changed(m_adjustment);
gtk_adjustment_value_changed(m_adjustment);
g_object_unref(m_adjustment);
+ m_adjustment = 0;
}
IntPoint ScrollbarGtk::getLocationInParentWindow(const IntRect& rect)