summaryrefslogtreecommitdiff
path: root/desktop/browser.c
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2011-12-02 16:10:13 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2011-12-02 16:10:13 +0000
commite2a7600e9a2fe94a00e653b0f484d941129c3ad5 (patch)
treedc7cc72ae5b9cda5d7a863f2974010314401796e /desktop/browser.c
parent6a7e602bbdb80e47929d22a9e3ab802318e4728e (diff)
downloadnetsurf-e2a7600e9a2fe94a00e653b0f484d941129c3ad5.tar.gz
netsurf-e2a7600e9a2fe94a00e653b0f484d941129c3ad5.tar.bz2
Big wodge of internal browser window scroll fixes, or "rationalisation of browser window scrollbar handling".
svn path=/trunk/netsurf/; revision=13221
Diffstat (limited to 'desktop/browser.c')
-rw-r--r--desktop/browser.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/desktop/browser.c b/desktop/browser.c
index e703358ba..614d6b08d 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -332,7 +332,6 @@ void browser_window_get_position(struct browser_window *bw, bool root,
while (bw) {
switch (bw->browser_window_type) {
- case BROWSER_WINDOW_FRAME:
case BROWSER_WINDOW_FRAMESET:
*pos_x += bw->x * bw->scale;
*pos_y += bw->y * bw->scale;
@@ -342,6 +341,9 @@ void browser_window_get_position(struct browser_window *bw, bool root,
/* There is no offset to the root browser window */
break;
+ case BROWSER_WINDOW_FRAME:
+ /* Iframe and Frame handling is identical;
+ * fall though */
case BROWSER_WINDOW_IFRAME:
*pos_x += (bw->x - scrollbar_get_offset(bw->scroll_x)) *
bw->scale;
@@ -533,6 +535,10 @@ bool browser_window_scroll_at_point(struct browser_window *bw,
bool handled_scroll = false;
assert(bw != NULL);
+ /* Handle (i)frame scroll offset (core-managed browser windows only) */
+ x += scrollbar_get_offset(bw->scroll_x);
+ y += scrollbar_get_offset(bw->scroll_y);
+
if (bw->children) {
/* Browser window has children, so pass request on to
* appropriate child */
@@ -581,6 +587,10 @@ bool browser_window_drop_file_at_point(struct browser_window *bw,
{
assert(bw != NULL);
+ /* Handle (i)frame scroll offset (core-managed browser windows only) */
+ x += scrollbar_get_offset(bw->scroll_x);
+ y += scrollbar_get_offset(bw->scroll_y);
+
if (bw->children) {
/* Browser window has children, so pass request on to
* appropriate child */
@@ -600,7 +610,8 @@ bool browser_window_drop_file_at_point(struct browser_window *bw,
/* Pass request into this child */
return browser_window_drop_file_at_point(bwc,
- (x - bwc->x), (y - bwc->y), file);
+ (x - bwc->x), (y - bwc->y),
+ file);
}
}
@@ -1310,13 +1321,6 @@ nserror browser_window_callback(hlcache_handle *c,
.y1 = event->data.redraw.y + event->data.redraw.height
};
- if (bw->browser_window_type == BROWSER_WINDOW_FRAME) {
- rect.x0 -= scrollbar_get_offset(bw->scroll_x);
- rect.y0 -= scrollbar_get_offset(bw->scroll_y);
- rect.x1 -= scrollbar_get_offset(bw->scroll_x);
- rect.y1 -= scrollbar_get_offset(bw->scroll_y);
- }
-
browser_window_update_box(bw, &rect);
}
break;
@@ -2271,9 +2275,6 @@ void browser_window_mouse_track(struct browser_window *bw,
browser_window_get_position(drag_bw, true, &off_x, &off_y);
if (drag_bw->browser_window_type == BROWSER_WINDOW_FRAME) {
- off_x -= scrollbar_get_offset(drag_bw->scroll_x);
- off_y -= scrollbar_get_offset(drag_bw->scroll_y);
-
browser_window_mouse_track(drag_bw, mouse,
x - off_x, y - off_y);