summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/platform/gtk/MainFrameScrollbarGtk.cpp
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-05-24 11:24:40 +0100
committerBen Murdoch <benm@google.com>2011-06-02 09:53:15 +0100
commit81bc750723a18f21cd17d1b173cd2a4dda9cea6e (patch)
tree7a9e5ed86ff429fd347a25153107221543909b19 /Source/WebCore/platform/gtk/MainFrameScrollbarGtk.cpp
parent94088a6d336c1dd80a1e734af51e96abcbb689a7 (diff)
downloadexternal_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.zip
external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.gz
external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.bz2
Merge WebKit at r80534: Intial merge by Git
Change-Id: Ia7a83357124c9e1cdb1debf55d9661ec0bd09a61
Diffstat (limited to 'Source/WebCore/platform/gtk/MainFrameScrollbarGtk.cpp')
-rw-r--r--Source/WebCore/platform/gtk/MainFrameScrollbarGtk.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/Source/WebCore/platform/gtk/MainFrameScrollbarGtk.cpp b/Source/WebCore/platform/gtk/MainFrameScrollbarGtk.cpp
index d1571a5..d8cdb79 100644
--- a/Source/WebCore/platform/gtk/MainFrameScrollbarGtk.cpp
+++ b/Source/WebCore/platform/gtk/MainFrameScrollbarGtk.cpp
@@ -60,6 +60,8 @@ MainFrameScrollbarGtk::~MainFrameScrollbarGtk()
void MainFrameScrollbarGtk::attachAdjustment(GtkAdjustment* adjustment)
{
+ if (m_adjustment.get() == adjustment)
+ return;
if (m_adjustment)
detachAdjustment();
@@ -67,9 +69,9 @@ void MainFrameScrollbarGtk::attachAdjustment(GtkAdjustment* adjustment)
if (!m_adjustment)
return;
- g_signal_connect(m_adjustment.get(), "value-changed", G_CALLBACK(MainFrameScrollbarGtk::gtkValueChanged), this);
updateThumbProportion();
updateThumbPosition();
+ g_signal_connect(m_adjustment.get(), "value-changed", G_CALLBACK(MainFrameScrollbarGtk::gtkValueChanged), this);
}
void MainFrameScrollbarGtk::detachAdjustment()
@@ -109,7 +111,17 @@ void MainFrameScrollbarGtk::updateThumbProportion()
void MainFrameScrollbarGtk::gtkValueChanged(GtkAdjustment*, MainFrameScrollbarGtk* that)
{
- that->scrollableArea()->scrollToOffsetWithoutAnimation(that->orientation(), static_cast<int>(gtk_adjustment_get_value(that->m_adjustment.get())));
+ // If we've been removed from our parent, we no longer get to control the WebCore
+ // scrollbar. If this is the case, deactivate this signal handler. WebCore will
+ // create a fresh MainFrameScrollbar when the scrollbar reappears.
+ if (!that->parent()) {
+ that->detachAdjustment();
+ return;
+ }
+
+ int newValue = static_cast<int>(gtk_adjustment_get_value(that->m_adjustment.get()));
+ if (newValue != that->value())
+ that->scrollableArea()->scrollToOffsetWithoutAnimation(that->orientation(), newValue);
}
void MainFrameScrollbarGtk::paint(GraphicsContext* context, const IntRect& rect)