WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
25646
[GTK] onscroll event is never sent
https://bugs.webkit.org/show_bug.cgi?id=25646
Summary
[GTK] onscroll event is never sent
Holger Freyther
Reported
2009-05-08 09:47:54 PDT
The current main frame/frame view of WebKitWebView is currently never sending a onscroll event. This is due the ScrollView::valueChanged code being mostly dead code...
Attachments
Make scrolling go through Scrollbar to get the ScrollbarClient invoked
(16.47 KB, patch)
2009-05-08 09:48 PDT
,
Holger Freyther
no flags
Details
Formatted Diff
Diff
Completely kill the "adjustment"
(18.37 KB, patch)
2009-05-10 22:46 PDT
,
Holger Freyther
hyatt
: review+
Details
Formatted Diff
Diff
Show Obsolete
(1)
View All
Add attachment
proposed patch, testcase, etc.
Holger Freyther
Comment 1
2009-05-08 09:48:58 PDT
Created
attachment 30133
[details]
Make scrolling go through Scrollbar to get the ScrollbarClient invoked proposed approach for the problem, only halfway through though. Please comment anyway.
Gustavo Noronha (kov)
Comment 2
2009-05-09 10:46:35 PDT
> Using the wrapped GtkAdjustment approach we might be able to just have > special case for the ScrollView::createScrollbar to create these > scrollbars...
[...]
> PassRefPtr<ScrollbarGtk> ScrollbarGtk::createScrollbar(ScrollbarClient* client, ScrollbarOrientation orientation, GtkAdjustment* adj) > { > return adoptRef(new ScrollbarGtk(client, orientation, adj)); > }
And using this we can ditch the createNativeScrollbar, you mean?
> - /* > - * disable the scrollbars (if we have any) as the GtkAdjustment over > - */
I like the patch in general, it's a good cleanup, but this comment has really blown off my mind while I was reading through this code last week, and I believe you could perhaps make it clearer at this point why we need to disable the scrollbars here:
> + } else { > + m_horizontalAdjustment = ScrollbarGtk::createScrollbar(this, HorizontalScrollbar, hadj); > + m_verticalAdjustment = ScrollbarGtk::createScrollbar(this, VerticalScrollbar, vadj); > setHasVerticalScrollbar(false); > setHasHorizontalScrollbar(false);
[...]
> + m_horizontalAdjustment->setSteps(visibleWidth() / 10.0, visibleWidth() * 0.9, 1); > + m_horizontalAdjustment->setProportion(visibleWidth(), contentsWidth()); > + m_horizontalAdjustment->setCurrentPos(scroll.width());
Xan has done some work recently on the scrolling code to use the WebCore constants instead of magic numbers, which I think we should use here as well; See
r43390
.
> + m_verticalAdjustment->setSteps(visibleHeight() / 10.0, visibleHeight() * 0.9, 1); > + m_verticalAdjustment->setProportion(visibleHeight(), contentsHeight()); > + m_verticalAdjustment->setCurrentPos(scroll.height());
Same here.
> +// Wrap a GtkAdjustment into a WebCore::Scrollbar to properly use the ScrollbarClient > +// for things like valueChanged. > +ScrollbarGtk::ScrollbarGtk(ScrollbarClient* client, ScrollbarOrientation orientation, GtkAdjustment* adjustment) > + : Scrollbar(client, orientation, RegularScrollbar) > + , m_adjustment(adjustment) > +{ > + // reset the adjustment to a known state > + m_adjustment->lower = 0; > + if (m_adjustment->value != 0) { > + m_adjustment->value = 0; > + gtk_adjustment_value_changed(m_adjustment); > + }
Is this wanted? I'm thinking of a javascript call that forces a scrollbar to appear, by using the overflow CSS property, for instance. Will it make the scrolled content go to the top?
> + // We have nothing to show as we are solely operating on the GtkAdjustment > + resize(0, 0);
I don't get it =(.
Xan Lopez
Comment 3
2009-05-10 10:59:22 PDT
(In reply to
comment #2
)
> And using this we can ditch the createNativeScrollbar, you mean? > > > - /* > > - * disable the scrollbars (if we have any) as the GtkAdjustment over > > - */ > > I like the patch in general, it's a good cleanup, but this comment has really > blown off my mind while I was reading through this code last week, and I > believe you could perhaps make it clearer at this point why we need to disable > the scrollbars here:
That's because when you set the adjustments you are telling the View that you'll handle the scrolling yourself (for example, through a GtkScrolledWindow), so you want to disable WebKit's scrollbars. I'm not sure why Holger is removing the comment though...
> > + m_horizontalAdjustment->setSteps(visibleWidth() / 10.0, visibleWidth() * 0.9, 1); > > + m_horizontalAdjustment->setProportion(visibleWidth(), contentsWidth()); > > + m_horizontalAdjustment->setCurrentPos(scroll.width()); > > Xan has done some work recently on the scrolling code to use the WebCore > constants instead of magic numbers, which I think we should use here as well; > See
r43390
.
/me nods (although the WebCore constants are more 'magic numbers' than what we were using :D) I'll try to look at this tomorrow!
Holger Freyther
Comment 4
2009-05-10 22:46:12 PDT
Created
attachment 30172
[details]
Completely kill the "adjustment" The only special case we have in GTK+ after this patch is that we have a custom ::createScrollbar implementation that will create a ScrollbarGtk to operate on the external GtkAdjustment. This way we will go through the normal Scrollbar paths and fix the sendScrollEvent bug.
Dave Hyatt
Comment 5
2009-05-24 23:28:48 PDT
Comment on
attachment 30172
[details]
Completely kill the "adjustment" r=me
Holger Freyther
Comment 6
2009-05-26 22:27:18 PDT
Landed in
r44177
.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug