Gitweb links:

...log 
http://git.netsurf-browser.org/netsurf.git/shortlog/0a8976156a037bc2ec2d4d10f33334ada36eac9d
...commit 
http://git.netsurf-browser.org/netsurf.git/commit/0a8976156a037bc2ec2d4d10f33334ada36eac9d
...tree 
http://git.netsurf-browser.org/netsurf.git/tree/0a8976156a037bc2ec2d4d10f33334ada36eac9d

The branch, master has been updated
       via  0a8976156a037bc2ec2d4d10f33334ada36eac9d (commit)
       via  6083de4ee1370dbd483e489e4e63ec2a58becc71 (commit)
       via  855721282c01a0cd0c94c87e03ac8229da077372 (commit)
      from  028c4e2860a5cf75ce8a3b97c04d12adaee7ef1b (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=0a8976156a037bc2ec2d4d10f33334ada36eac9d
commit 0a8976156a037bc2ec2d4d10f33334ada36eac9d
Author: Vincent Sanders <[email protected]>
Commit: Vincent Sanders <[email protected]>

    split out browser window drag context into separate structure

diff --git a/desktop/browser.c b/desktop/browser.c
index 8e39c08..0a4afc1 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -421,22 +421,24 @@ void browser_window_set_position(struct browser_window 
*bw, int x, int y)
 }
 
 /* exported interface, documented in browser.h */
-void browser_window_set_drag_type(struct browser_window *bw,
-               browser_drag_type type, const struct rect *rect)
+void
+browser_window_set_drag_type(struct browser_window *bw,
+                            browser_drag_type type,
+                            const struct rect *rect)
 {
        struct browser_window *top_bw = browser_window_get_root(bw);
        gui_drag_type gtype;
 
-       bw->drag_type = type;
+       bw->drag.type = type;
 
        if (type == DRAGGING_NONE) {
-               top_bw->drag_window = NULL;
+               top_bw->drag.window = NULL;
        } else {
-               top_bw->drag_window = bw;
+               top_bw->drag.window = bw;
 
                switch (type) {
                case DRAGGING_SELECTION:
-                       /* TODO: tell front end */
+                       /** \todo tell front end */
                        return;
                case DRAGGING_SCR_X:
                case DRAGGING_SCR_Y:
@@ -455,7 +457,7 @@ void browser_window_set_drag_type(struct browser_window *bw,
 /* exported interface, documented in browser.h */
 browser_drag_type browser_window_get_drag_type(struct browser_window *bw)
 {
-       return bw->drag_type;
+       return bw->drag.type;
 }
 
 /* exported interface, documented in browser.h */
@@ -939,7 +941,7 @@ nserror browser_window_initialise_common(enum 
browser_window_create_flags flags,
        /* window characteristics */
        bw->refresh_interval = -1;
 
-       bw->drag_type = DRAGGING_NONE;
+       bw->drag.type = DRAGGING_NONE;
 
        bw->scroll_x = NULL;
        bw->scroll_y = NULL;
@@ -2879,7 +2881,7 @@ static void browser_window_mouse_drag_end(struct 
browser_window *bw,
 {
        int scr_x, scr_y;
 
-       switch (bw->drag_type) {
+       switch (bw->drag.type) {
        case DRAGGING_SELECTION:
        case DRAGGING_OTHER:
        case DRAGGING_CONTENT_SCROLLBAR:
@@ -2895,7 +2897,7 @@ static void browser_window_mouse_drag_end(struct 
browser_window *bw,
 
                scrollbar_mouse_drag_end(bw->scroll_x, mouse, scr_x, scr_y);
 
-               bw->drag_type = DRAGGING_NONE;
+               bw->drag.type = DRAGGING_NONE;
                break;
 
        case DRAGGING_SCR_Y:
@@ -2907,7 +2909,7 @@ static void browser_window_mouse_drag_end(struct 
browser_window *bw,
 
                scrollbar_mouse_drag_end(bw->scroll_y, mouse, scr_x, scr_y);
 
-               bw->drag_type = DRAGGING_NONE;
+               bw->drag.type = DRAGGING_NONE;
                break;
 
        default:
@@ -2925,11 +2927,11 @@ void browser_window_mouse_track(struct browser_window 
*bw,
        const char *status = NULL;
        browser_pointer_shape pointer = BROWSER_POINTER_DEFAULT;
 
-       if (bw->window != NULL && bw->drag_window && bw != bw->drag_window) {
+       if (bw->window != NULL && bw->drag.window && bw != bw->drag.window) {
                /* This is the root browser window and there's an active drag
                 * in a sub window.
                 * Pass the mouse action straight on to that bw. */
-               struct browser_window *drag_bw = bw->drag_window;
+               struct browser_window *drag_bw = bw->drag.window;
                int off_x = 0;
                int off_y = 0;
 
@@ -2982,25 +2984,27 @@ void browser_window_mouse_track(struct browser_window 
*bw,
                return;
        }
 
-       if (c == NULL && bw->drag_type != DRAGGING_FRAME)
+       if (c == NULL && bw->drag.type != DRAGGING_FRAME) {
                return;
+       }
 
-       if (bw->drag_type != DRAGGING_NONE && !mouse) {
+       if (bw->drag.type != DRAGGING_NONE && !mouse) {
                browser_window_mouse_drag_end(bw, mouse, x, y);
        }
 
        /* Browser window's horizontal scrollbar */
-       if (bw->scroll_x != NULL && bw->drag_type != DRAGGING_SCR_Y) {
+       if (bw->scroll_x != NULL && bw->drag.type != DRAGGING_SCR_Y) {
                int scr_x, scr_y;
                browser_window_get_scrollbar_pos(bw, true, &scr_x, &scr_y);
                scr_x = x - scr_x - scrollbar_get_offset(bw->scroll_x);
                scr_y = y - scr_y - scrollbar_get_offset(bw->scroll_y);
 
-               if ((scr_x > 0 && scr_x < browser_window_get_scrollbar_len(bw,
-                                               true) &&
-                               scr_y > 0 && scr_y < SCROLLBAR_WIDTH &&
-                               bw->drag_type == DRAGGING_NONE) ||
-                               bw->drag_type == DRAGGING_SCR_X) {
+               if ((bw->drag.type == DRAGGING_SCR_X) ||
+                   (scr_x > 0 &&
+                    scr_x < browser_window_get_scrollbar_len(bw, true) &&
+                    scr_y > 0 &&
+                    scr_y < SCROLLBAR_WIDTH &&
+                    bw->drag.type == DRAGGING_NONE)) {
                        /* Start a scrollbar drag, or continue existing drag */
                        status = scrollbar_mouse_status_to_message(
                                        scrollbar_mouse_action(
@@ -3008,8 +3012,9 @@ void browser_window_mouse_track(struct browser_window *bw,
                                                        scr_x, scr_y));
                        pointer = BROWSER_POINTER_DEFAULT;
 
-                       if (status != NULL)
+                       if (status != NULL) {
                                browser_window_set_status(bw, status);
+                       }
 
                        browser_window_set_pointer(bw, pointer);
                        return;
@@ -3023,11 +3028,12 @@ void browser_window_mouse_track(struct browser_window 
*bw,
                scr_x = x - scr_x - scrollbar_get_offset(bw->scroll_x);
                scr_y = y - scr_y - scrollbar_get_offset(bw->scroll_y);
 
-               if ((scr_y > 0 && scr_y < browser_window_get_scrollbar_len(bw,
-                                               false) &&
-                               scr_x > 0 && scr_x < SCROLLBAR_WIDTH &&
-                               bw->drag_type == DRAGGING_NONE) ||
-                               bw->drag_type == DRAGGING_SCR_Y) {
+               if ((bw->drag.type == DRAGGING_SCR_Y) ||
+                   (scr_y > 0 &&
+                    scr_y < browser_window_get_scrollbar_len(bw, false) &&
+                    scr_x > 0 &&
+                    scr_x < SCROLLBAR_WIDTH &&
+                    bw->drag.type == DRAGGING_NONE)) {
                        /* Start a scrollbar drag, or continue existing drag */
                        status = scrollbar_mouse_status_to_message(
                                        scrollbar_mouse_action(
@@ -3035,27 +3041,28 @@ void browser_window_mouse_track(struct browser_window 
*bw,
                                                        scr_x, scr_y));
                        pointer = BROWSER_POINTER_DEFAULT;
 
-                       if (status != NULL)
+                       if (status != NULL) {
                                browser_window_set_status(bw, status);
+                       }
 
                        browser_window_set_pointer(bw, pointer);
                        return;
                }
        }
 
-       if (bw->drag_type == DRAGGING_FRAME) {
+       if (bw->drag.type == DRAGGING_FRAME) {
                browser_window_resize_frame(bw, bw->x + x, bw->y + y);
-       } else if (bw->drag_type == DRAGGING_PAGE_SCROLL) {
+       } else if (bw->drag.type == DRAGGING_PAGE_SCROLL) {
                /* mouse movement since drag started */
-               int scrollx = bw->drag_start_x - x;
-               int scrolly = bw->drag_start_y - y;
+               int scrollx = bw->drag.start_x - x;
+               int scrolly = bw->drag.start_y - y;
 
                /* new scroll offsets */
-               scrollx += bw->drag_start_scroll_x;
-               scrolly += bw->drag_start_scroll_y;
+               scrollx += bw->drag.start_scroll_x;
+               scrolly += bw->drag.start_scroll_y;
 
-               bw->drag_start_scroll_x = scrollx;
-               bw->drag_start_scroll_y = scrolly;
+               bw->drag.start_scroll_x = scrollx;
+               bw->drag.start_scroll_y = scrolly;
 
                browser_window_set_scroll(bw, scrollx, scrolly);
        } else {
@@ -3205,19 +3212,20 @@ void browser_window_page_drag_start(struct 
browser_window *bw, int x, int y)
 
        browser_window_set_drag_type(bw, DRAGGING_PAGE_SCROLL, NULL);
 
-       bw->drag_start_x = x;
-       bw->drag_start_y = y;
+       bw->drag.start_x = x;
+       bw->drag.start_y = y;
 
        if (bw->window != NULL) {
                /* Front end window */
-               guit->window->get_scroll(bw->window, &bw->drag_start_scroll_x,
-                               &bw->drag_start_scroll_y);
+               guit->window->get_scroll(bw->window,
+                                        &bw->drag.start_scroll_x,
+                                        &bw->drag.start_scroll_y);
 
                guit->window->scroll_start(bw->window);
        } else {
                /* Core managed browser window */
-               bw->drag_start_scroll_x = scrollbar_get_offset(bw->scroll_x);
-               bw->drag_start_scroll_y = scrollbar_get_offset(bw->scroll_y);
+               bw->drag.start_scroll_x = scrollbar_get_offset(bw->scroll_x);
+               bw->drag.start_scroll_y = scrollbar_get_offset(bw->scroll_y);
        }
 }
 
diff --git a/desktop/browser_private.h b/desktop/browser_private.h
index b8dce84..3e9b846 100644
--- a/desktop/browser_private.h
+++ b/desktop/browser_private.h
@@ -90,23 +90,32 @@ struct browser_window {
        /** Fragment identifier for current_content. */
        lwc_string *frag_id;
 
-       /** Current drag status. */
-       browser_drag_type drag_type;
-
-       /** Current drag's browser window, when not in root bw. */
-       struct browser_window *drag_window;
-
-       /** Mouse position at start of current scroll drag. */
-       int drag_start_x;
-       int drag_start_y;
-       /** Scroll offsets at start of current scroll draw. */
-       int drag_start_scroll_x;
-       int drag_start_scroll_y;
-       /** Frame resize directions for current frame resize drag. */
-       unsigned int drag_resize_left : 1;
-       unsigned int drag_resize_right : 1;
-       unsigned int drag_resize_up : 1;
-       unsigned int drag_resize_down : 1;
+       /**
+        * Current drag status.
+        *
+        * These values are only vald whle type is not DRAGGING_NONE
+        */
+       struct {
+               /** the type of drag in progress */
+               browser_drag_type type;
+
+               /** Current drag's browser window, when not in root bw. */
+               struct browser_window *window;
+
+               /** Mouse position at start of current scroll drag. */
+               int start_x;
+               int start_y;
+
+               /** Scroll offsets at start of current scroll draw. */
+               int start_scroll_x;
+               int start_scroll_y;
+
+               /** Frame resize directions for current frame resize drag. */
+               unsigned int resize_left : 1;
+               unsigned int resize_right : 1;
+               unsigned int resize_up : 1;
+               unsigned int resize_down : 1;
+       } drag;
 
        /** Current fetch is download */
        bool download;
diff --git a/desktop/frames.c b/desktop/frames.c
index 70e51e7..9eefefe 100644
--- a/desktop/frames.c
+++ b/desktop/frames.c
@@ -675,25 +675,31 @@ void browser_window_resize_frame(struct browser_window 
*bw, int x, int y)
        assert((col >= 0) && (row >= 0));
 
        sibling = NULL;
-       if (bw->drag_resize_left)
+       if (bw->drag.resize_left) {
                sibling = &parent->children[row * parent->cols + (col - 1)];
-       else if (bw->drag_resize_right)
+       } else if (bw->drag.resize_right) {
                sibling = &parent->children[row * parent->cols + (col + 1)];
-       if (sibling)
+       }
+       if (sibling) {
                change |= browser_window_resolve_frame_dimension(bw, sibling,
                                x, y, true, false);
+       }
 
        sibling = NULL;
-       if (bw->drag_resize_up)
+       if (bw->drag.resize_up) {
                sibling = &parent->children[(row - 1) * parent->cols + col];
-       else if (bw->drag_resize_down)
+       } else if (bw->drag.resize_down) {
                sibling = &parent->children[(row + 1) * parent->cols + col];
-       if (sibling)
+       }
+
+       if (sibling) {
                change |= browser_window_resolve_frame_dimension(bw, sibling,
                                x, y, false, true);
+       }
 
-       if (change)
+       if (change) {
                browser_window_recalculate_frameset(parent);
+       }
 }
 
 
@@ -711,20 +717,22 @@ bool browser_window_resolve_frame_dimension(struct 
browser_window *bw,
 
        /* extend/shrink the box to the pointer */
        if (width) {
-               if (bw->drag_resize_left)
+               if (bw->drag.resize_left) {
                        bw_dimension = bw->x + bw->width - x;
-               else
+               } else {
                        bw_dimension = x - bw->x;
+               }
                bw_pixels = bw->width;
                sibling_pixels = sibling->width;
                bw_d = &bw->frame_width;
                sibling_d = &sibling->frame_width;
                frame_size = bw->parent->width;
        } else {
-               if (bw->drag_resize_up)
+               if (bw->drag.resize_up) {
                        bw_dimension = bw->y + bw->height - y;
-               else
+               } else {
                        bw_dimension = y - bw->y;
+               }
                bw_pixels = bw->height;
                sibling_pixels = sibling->height;
                bw_d = &bw->frame_height;
@@ -919,12 +927,12 @@ static bool browser_window_resize_frames(struct 
browser_window *bw,
                                 *       front end to clamp pointer range */
                                browser_window_set_drag_type(bw,
                                                DRAGGING_FRAME, NULL);
-                               bw->drag_start_x = x;
-                               bw->drag_start_y = y;
-                               bw->drag_resize_left = left;
-                               bw->drag_resize_right = right;
-                               bw->drag_resize_up = up;
-                               bw->drag_resize_down = down;
+                               bw->drag.start_x = x;
+                               bw->drag.start_y = y;
+                               bw->drag.resize_left = left;
+                               bw->drag.resize_right = right;
+                               bw->drag.resize_up = up;
+                               bw->drag.resize_down = down;
                        }
                        return true;
                }
diff --git a/include/netsurf/browser_window.h b/include/netsurf/browser_window.h
index 482dcb9..858d4ae 100644
--- a/include/netsurf/browser_window.h
+++ b/include/netsurf/browser_window.h
@@ -43,6 +43,9 @@ struct rect;
 struct redraw_context;
 enum content_debug;
 
+/**
+ * type of browser window drag in progess
+ */
 typedef enum {
        DRAGGING_NONE,
        DRAGGING_SELECTION,


commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=6083de4ee1370dbd483e489e4e63ec2a58becc71
commit 6083de4ee1370dbd483e489e4e63ec2a58becc71
Author: Vincent Sanders <[email protected]>
Commit: Vincent Sanders <[email protected]>

    split out browser windoe favicon context to separate structure

diff --git a/desktop/browser.c b/desktop/browser.c
index 05e8a6e..8e39c08 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -1059,30 +1059,37 @@ static void browser_window_stop_throbber(struct 
browser_window *bw)
 
 /**
  * Callback for fetchcache() for browser window favicon fetches.
+ *
+ * \param c content handle of favicon
+ * \param event The event to process
+ * \param pw a context containing the browser window
+ * \return NSERROR_OK on success else appropriate error code.
  */
-static nserror browser_window_favicon_callback(hlcache_handle *c,
-               const hlcache_event *event, void *pw)
+static nserror
+browser_window_favicon_callback(hlcache_handle *c,
+                               const hlcache_event *event,
+                               void *pw)
 {
        struct browser_window *bw = pw;
 
        switch (event->type) {
        case CONTENT_MSG_DONE:
-               if (bw->current_favicon != NULL) {
+               if (bw->favicon.current != NULL) {
                        content_status status =
-                                       content_get_status(bw->current_favicon);
+                                       content_get_status(bw->favicon.current);
 
                        if ((status == CONTENT_STATUS_READY) ||
                                        (status == CONTENT_STATUS_DONE))
-                               content_close(bw->current_favicon);
+                               content_close(bw->favicon.current);
 
-                       hlcache_handle_release(bw->current_favicon);
+                       hlcache_handle_release(bw->favicon.current);
                }
 
-               bw->current_favicon = c;
-               bw->loading_favicon = NULL;
+               bw->favicon.current = c;
+               bw->favicon.loading = NULL;
 
                /* content_get_bitmap on the hlcache_handle should give
-                *   us the favicon bitmap at this point
+                *   the favicon bitmap at this point
                 */
                guit->window->set_icon(bw->window, c);
                break;
@@ -1090,32 +1097,31 @@ static nserror 
browser_window_favicon_callback(hlcache_handle *c,
        case CONTENT_MSG_ERROR:
 
                /* clean up after ourselves */
-               if (c == bw->loading_favicon)
-                       bw->loading_favicon = NULL;
-               else if (c == bw->current_favicon) {
-                       bw->current_favicon = NULL;
+               if (c == bw->favicon.loading) {
+                       bw->favicon.loading = NULL;
+               } else if (c == bw->favicon.current) {
+                       bw->favicon.current = NULL;
                }
 
                hlcache_handle_release(c);
 
-               if (bw->failed_favicon == false) {
+               if (bw->favicon.failed == false) {
                        nsurl *nsref = NULL;
                        nsurl *nsurl;
                        nserror error;
 
-                       bw->failed_favicon = true;
+                       bw->favicon.failed = true;
 
                        error = nsurl_create("resource:favicon.ico", &nsurl);
                        if (error != NSERROR_OK) {
                                LOG("Unable to create default location url");
                        } else {
-
                                hlcache_handle_retrieve(nsurl,
                                                HLCACHE_RETRIEVE_SNIFF_TYPE,
                                                nsref, NULL,
                                                browser_window_favicon_callback,
                                                bw, NULL, CONTENT_IMAGE,
-                                               &bw->loading_favicon);
+                                               &bw->favicon.loading);
 
                                nsurl_unref(nsurl);
                        }
@@ -1129,8 +1135,18 @@ static nserror 
browser_window_favicon_callback(hlcache_handle *c,
        return NSERROR_OK;
 }
 
-static void browser_window_update_favicon(hlcache_handle *c,
-               struct browser_window *bw, struct content_rfc5988_link *link)
+
+/**
+ * update the favicon associated with the browser window
+ *
+ * \param c the page content handle.
+ * \param bw A top level browser window.
+ * \param link A link context or NULL to attempt fallback scanning.
+ */
+static void
+browser_window_update_favicon(hlcache_handle *c,
+                             struct browser_window *bw,
+                             struct content_rfc5988_link *link)
 {
        nsurl *nsref = NULL;
        nsurl *nsurl;
@@ -1144,10 +1160,10 @@ static void 
browser_window_update_favicon(hlcache_handle *c,
                return;
 
        /* already fetching the favicon - use that */
-       if (bw->loading_favicon != NULL)
+       if (bw->favicon.loading != NULL)
                return;
 
-       bw->failed_favicon = false;
+       bw->favicon.failed = false;
 
        if (link == NULL) {
                /* Look for "icon" */
@@ -1184,7 +1200,7 @@ static void browser_window_update_favicon(hlcache_handle 
*c,
                        /* no favicon via link, try for the default location */
                        error = nsurl_join(nsurl, "/favicon.ico", &nsurl);
                } else {
-                       bw->failed_favicon = true;
+                       bw->favicon.failed = true;
                        error = nsurl_create("resource:favicon.ico", &nsurl);
                }
                if (error != NSERROR_OK) {
@@ -1203,7 +1219,7 @@ static void browser_window_update_favicon(hlcache_handle 
*c,
 
        hlcache_handle_retrieve(nsurl, HLCACHE_RETRIEVE_SNIFF_TYPE,
                        nsref, NULL, browser_window_favicon_callback,
-                       bw, NULL, CONTENT_IMAGE, &bw->loading_favicon);
+                       bw, NULL, CONTENT_IMAGE, &bw->favicon.loading);
 
        nsurl_unref(nsurl);
 }
@@ -1833,21 +1849,22 @@ static void browser_window_destroy_internal(struct 
browser_window *bw)
                bw->current_content = NULL;
        }
 
-       if (bw->loading_favicon != NULL) {
-               hlcache_handle_abort(bw->loading_favicon);
-               hlcache_handle_release(bw->loading_favicon);
-               bw->loading_favicon = NULL;
+       if (bw->favicon.loading != NULL) {
+               hlcache_handle_abort(bw->favicon.loading);
+               hlcache_handle_release(bw->favicon.loading);
+               bw->favicon.loading = NULL;
        }
 
-       if (bw->current_favicon != NULL) {
-               content_status status = content_get_status(bw->current_favicon);
+       if (bw->favicon.current != NULL) {
+               content_status status = content_get_status(bw->favicon.current);
 
                if (status == CONTENT_STATUS_READY ||
-                   status == CONTENT_STATUS_DONE)
-                       content_close(bw->current_favicon);
+                   status == CONTENT_STATUS_DONE) {
+                       content_close(bw->favicon.current);
+               }
 
-               hlcache_handle_release(bw->current_favicon);
-               bw->current_favicon = NULL;
+               hlcache_handle_release(bw->favicon.current);
+               bw->favicon.current = NULL;
        }
 
        if (bw->box != NULL) {
@@ -1861,8 +1878,9 @@ static void browser_window_destroy_internal(struct 
browser_window *bw)
 
        /* These simply free memory, so are safe here */
 
-       if (bw->frag_id != NULL)
+       if (bw->frag_id != NULL) {
                lwc_string_unref(bw->frag_id);
+       }
 
        browser_window_history_destroy(bw);
 
diff --git a/desktop/browser_private.h b/desktop/browser_private.h
index 0234cce..b8dce84 100644
--- a/desktop/browser_private.h
+++ b/desktop/browser_private.h
@@ -46,18 +46,33 @@ struct browser_window {
         *  READY or DONE status or NULL for no content.
         */
        struct hlcache_handle *current_content;
-       /** Page being loaded, or NULL. */
+       /**
+        * Content handle of page in process of being loaded or NULL
+        * if no page is being loaded.
+        */
        struct hlcache_handle *loading_content;
 
-       /** Page Favicon */
-       struct hlcache_handle *current_favicon;
-       /** handle for favicon which we started loading early */
-       struct hlcache_handle *loading_favicon;
        /**
-        * flag to indicate favicon fetch already failed which
-        * prevents infinite error looping.
+        * Favicon
         */
-       bool failed_favicon;
+       struct {
+               /**
+                * content handle of current page favicon
+                */
+               struct hlcache_handle *current;
+
+               /**
+                * content handle for favicon which we started loading
+                * early
+                */
+               struct hlcache_handle *loading;
+
+               /**
+                * flag to indicate favicon fetch already failed which
+                * prevents infinite error looping.
+                */
+               bool failed;
+       } favicon;
 
        /** local history handle. */
        struct history *history;


commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=855721282c01a0cd0c94c87e03ac8229da077372
commit 855721282c01a0cd0c94c87e03ac8229da077372
Author: Vincent Sanders <[email protected]>
Commit: Vincent Sanders <[email protected]>

    split out status bar text cache into separate struct

diff --git a/desktop/browser.c b/desktop/browser.c
index d0114ef..05e8a6e 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -87,7 +87,6 @@
  * \param  x           Updated to x-coord of top left of scrollbar widget
  * \param  y           Updated to y-coord of top left of scrollbar widget
  */
-
 static inline void browser_window_get_scrollbar_pos(struct browser_window *bw,
                bool horizontal, int *x, int *y)
 {
@@ -129,6 +128,7 @@ browser_window_get_name(struct browser_window *bw, const 
char **out_name)
        return NSERROR_OK;
 }
 
+
 /* exported interface, documented in browser.h */
 nserror 
 browser_window_set_name(struct browser_window *bw, const char *name)
@@ -153,6 +153,7 @@ browser_window_set_name(struct browser_window *bw, const 
char *name)
        return NSERROR_OK;
 }
 
+
 /* exported interface, documented in browser.h */
 bool
 browser_window_redraw(struct browser_window *bw,
@@ -330,6 +331,7 @@ browser_window_redraw(struct browser_window *bw,
        return plot_ok;
 }
 
+
 /* exported interface, documented in browser.h */
 bool browser_window_redraw_ready(struct browser_window *bw)
 {
@@ -344,6 +346,7 @@ bool browser_window_redraw_ready(struct browser_window *bw)
        return true;
 }
 
+
 /* exported interface, documented in browser_private.h */
 void browser_window_update_extent(struct browser_window *bw)
 {
@@ -355,9 +358,13 @@ void browser_window_update_extent(struct browser_window 
*bw)
                browser_window_handle_scrollbars(bw);
 }
 
+
 /* exported interface, documented in browser.h */
-void browser_window_get_position(struct browser_window *bw, bool root,
-               int *pos_x, int *pos_y)
+void
+browser_window_get_position(struct browser_window *bw,
+                           bool root,
+                           int *pos_x,
+                           int *pos_y)
 {
        *pos_x = 0;
        *pos_y = 0;
@@ -397,6 +404,7 @@ void browser_window_get_position(struct browser_window *bw, 
bool root,
        }
 }
 
+
 /* exported interface, documented in browser.h */
 void browser_window_set_position(struct browser_window *bw, int x, int y)
 {
@@ -939,10 +947,10 @@ nserror browser_window_initialise_common(enum 
browser_window_create_flags flags,
        bw->focus = NULL;
 
        /* initialise status text cache */
-       bw->status_text = NULL;
-       bw->status_text_len = 0;
-       bw->status_match = 0;
-       bw->status_miss = 0;
+       bw->status.text = NULL;
+       bw->status.text_len = 0;
+       bw->status.match = 0;
+       bw->status.miss = 0;
 
        return NSERROR_OK;
 }
@@ -1318,8 +1326,10 @@ static void browser_window_convert_to_download(struct 
browser_window *bw,
 /**
  * Browser window content event callback handler.
  */
-static nserror browser_window_callback(hlcache_handle *c,
-               const hlcache_event *event, void *pw)
+static nserror
+browser_window_callback(hlcache_handle *c,
+                       const hlcache_event *event,
+                       void *pw)
 {
        struct browser_window *bw = pw;
        nserror res = NSERROR_OK;
@@ -1857,9 +1867,9 @@ static void browser_window_destroy_internal(struct 
browser_window *bw)
        browser_window_history_destroy(bw);
 
        free(bw->name);
-       free(bw->status_text);
-       bw->status_text = NULL;
-       LOG("Status text cache match:miss %d:%d", bw->status_match, 
bw->status_miss);
+       free(bw->status.text);
+       bw->status.text = NULL;
+       LOG("Status text cache match:miss %d:%d", bw->status.match, 
bw->status.miss);
 }
 
 /**
@@ -1931,7 +1941,8 @@ nserror browser_window_refresh_url_bar(struct 
browser_window *bw)
 
 
 /* exported interface documented in netsurf/browser_window.h */
-nserror browser_window_navigate(struct browser_window *bw,
+nserror
+browser_window_navigate(struct browser_window *bw,
                             nsurl *url,
                             nsurl *referrer,
                             enum browser_window_nav_flags flags,
@@ -2289,14 +2300,16 @@ void browser_window_update(struct browser_window *bw, 
bool scroll_to_top)
 
                browser_window_update_extent(bw);
 
-               if (scroll_to_top)
-                       browser_window_set_scroll(bw, 0, 0);
-
                /* if frag_id exists, then try to scroll to it */
                /** @todo don't do this if the user has scrolled */
-               if (bw->frag_id && html_get_id_offset(bw->current_content,
-                               bw->frag_id, &x, &y)) {
+               if (bw->frag_id &&
+                   html_get_id_offset(bw->current_content,
+                                      bw->frag_id, &x, &y)) {
                        browser_window_set_scroll(bw, x, y);
+               } else {
+                       if (scroll_to_top) {
+                               browser_window_set_scroll(bw, 0, 0);
+                       }
                }
 
                guit->window->redraw(bw->window);
@@ -2476,10 +2489,10 @@ void browser_window_set_status(struct browser_window 
*bw, const char *text)
        while (bw->parent)
                bw = bw->parent;
 
-       if ((bw->status_text != NULL) &&
-           (strcmp(text, bw->status_text) == 0)) {
+       if ((bw->status.text != NULL) &&
+           (strcmp(text, bw->status.text) == 0)) {
                /* status text is unchanged */
-               bw->status_match++;
+               bw->status.match++;
                return;
        }
 
@@ -2487,18 +2500,18 @@ void browser_window_set_status(struct browser_window 
*bw, const char *text)
 
        text_len = strlen(text);
 
-       if ((bw->status_text == NULL) || (bw->status_text_len < text_len)) {
+       if ((bw->status.text == NULL) || (bw->status.text_len < text_len)) {
                /* no current string allocation or it is not long enough */
-               free(bw->status_text);
-               bw->status_text = strdup(text);
-               bw->status_text_len = text_len;
+               free(bw->status.text);
+               bw->status.text = strdup(text);
+               bw->status.text_len = text_len;
        } else {
                /* current allocation has enough space */
-               memcpy(bw->status_text, text, text_len + 1);
+               memcpy(bw->status.text, text, text_len + 1);
        }
 
-       bw->status_miss++;
-       guit->window->set_status(bw->window, bw->status_text);
+       bw->status.miss++;
+       guit->window->set_status(bw->window, bw->status.text);
 }
 
 
diff --git a/desktop/browser_private.h b/desktop/browser_private.h
index 072a894..0234cce 100644
--- a/desktop/browser_private.h
+++ b/desktop/browser_private.h
@@ -37,24 +37,34 @@ struct gui_window;
 struct history;
 struct selection;
 
-/** Browser window data. */
+/**
+ * Browser window data.
+ */
 struct browser_window {
-       /** Page currently displayed, or 0. Must have status READY or DONE. */
+       /**
+        * Content handle of page currently displayed which must have
+        *  READY or DONE status or NULL for no content.
+        */
        struct hlcache_handle *current_content;
-       /** Page being loaded, or 0. */
+       /** Page being loaded, or NULL. */
        struct hlcache_handle *loading_content;
 
        /** Page Favicon */
        struct hlcache_handle *current_favicon;
        /** handle for favicon which we started loading early */
        struct hlcache_handle *loading_favicon;
-       /** favicon fetch already failed - prevents infinite error looping */
+       /**
+        * flag to indicate favicon fetch already failed which
+        * prevents infinite error looping.
+        */
        bool failed_favicon;
 
-       /** Window history structure. */
+       /** local history handle. */
        struct history *history;
 
-       /** Platform specific window data. */
+       /**
+        * Platform specific window data only valid at top level.
+        */
        struct gui_window *window;
 
        /** Busy indicator is active. */
@@ -156,14 +166,15 @@ struct browser_window {
        struct jscontext *jsctx;
 
        /** cache of the currently displayed status text. */
-       char *status_text; /**< Current status bar text. */
-       int status_text_len; /**< Length of the browser_window::status_text 
buffer. */
-       int status_match; /**< Number of times an idempotent status-set 
operation was performed. */
-       int status_miss; /**< Number of times status was really updated. */
+       struct {
+               char *text; /**< Current status bar text. */
+               int text_len; /**< Length of the status::text buffer. */
+               int match; /**< Number of times an idempotent status-set 
operation was performed. */
+               int miss; /**< Number of times status was really updated. */
+       } status;
 };
 
 
-
 /**
  * Initialise common parts of a browser window
  *
@@ -174,6 +185,7 @@ struct browser_window {
 nserror browser_window_initialise_common(enum browser_window_create_flags 
flags,
                struct browser_window *bw, struct browser_window *existing);
 
+
 /**
  * Get the dimensions of the area a browser window occupies
  *
@@ -185,6 +197,7 @@ nserror browser_window_initialise_common(enum 
browser_window_create_flags flags,
 void browser_window_get_dimensions(struct browser_window *bw,
                int *width, int *height, bool scaled);
 
+
 /**
  * Update the extent of the inside of a browser window to that of the current
  * content
@@ -193,6 +206,7 @@ void browser_window_get_dimensions(struct browser_window 
*bw,
  */
 void browser_window_update_extent(struct browser_window *bw);
 
+
 /**
  * Change the status bar of a browser window.
  *
@@ -201,6 +215,7 @@ void browser_window_update_extent(struct browser_window 
*bw);
  */
 void browser_window_set_status(struct browser_window *bw, const char *text);
 
+
 /**
  * Get the root level browser window
  *


-----------------------------------------------------------------------

Summary of changes:
 desktop/browser.c                |  247 ++++++++++++++++++++++----------------
 desktop/browser_private.h        |  103 +++++++++++-----
 desktop/frames.c                 |   42 ++++---
 include/netsurf/browser_window.h |    3 +
 4 files changed, 242 insertions(+), 153 deletions(-)

diff --git a/desktop/browser.c b/desktop/browser.c
index d0114ef..0a4afc1 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -87,7 +87,6 @@
  * \param  x           Updated to x-coord of top left of scrollbar widget
  * \param  y           Updated to y-coord of top left of scrollbar widget
  */
-
 static inline void browser_window_get_scrollbar_pos(struct browser_window *bw,
                bool horizontal, int *x, int *y)
 {
@@ -129,6 +128,7 @@ browser_window_get_name(struct browser_window *bw, const 
char **out_name)
        return NSERROR_OK;
 }
 
+
 /* exported interface, documented in browser.h */
 nserror 
 browser_window_set_name(struct browser_window *bw, const char *name)
@@ -153,6 +153,7 @@ browser_window_set_name(struct browser_window *bw, const 
char *name)
        return NSERROR_OK;
 }
 
+
 /* exported interface, documented in browser.h */
 bool
 browser_window_redraw(struct browser_window *bw,
@@ -330,6 +331,7 @@ browser_window_redraw(struct browser_window *bw,
        return plot_ok;
 }
 
+
 /* exported interface, documented in browser.h */
 bool browser_window_redraw_ready(struct browser_window *bw)
 {
@@ -344,6 +346,7 @@ bool browser_window_redraw_ready(struct browser_window *bw)
        return true;
 }
 
+
 /* exported interface, documented in browser_private.h */
 void browser_window_update_extent(struct browser_window *bw)
 {
@@ -355,9 +358,13 @@ void browser_window_update_extent(struct browser_window 
*bw)
                browser_window_handle_scrollbars(bw);
 }
 
+
 /* exported interface, documented in browser.h */
-void browser_window_get_position(struct browser_window *bw, bool root,
-               int *pos_x, int *pos_y)
+void
+browser_window_get_position(struct browser_window *bw,
+                           bool root,
+                           int *pos_x,
+                           int *pos_y)
 {
        *pos_x = 0;
        *pos_y = 0;
@@ -397,6 +404,7 @@ void browser_window_get_position(struct browser_window *bw, 
bool root,
        }
 }
 
+
 /* exported interface, documented in browser.h */
 void browser_window_set_position(struct browser_window *bw, int x, int y)
 {
@@ -413,22 +421,24 @@ void browser_window_set_position(struct browser_window 
*bw, int x, int y)
 }
 
 /* exported interface, documented in browser.h */
-void browser_window_set_drag_type(struct browser_window *bw,
-               browser_drag_type type, const struct rect *rect)
+void
+browser_window_set_drag_type(struct browser_window *bw,
+                            browser_drag_type type,
+                            const struct rect *rect)
 {
        struct browser_window *top_bw = browser_window_get_root(bw);
        gui_drag_type gtype;
 
-       bw->drag_type = type;
+       bw->drag.type = type;
 
        if (type == DRAGGING_NONE) {
-               top_bw->drag_window = NULL;
+               top_bw->drag.window = NULL;
        } else {
-               top_bw->drag_window = bw;
+               top_bw->drag.window = bw;
 
                switch (type) {
                case DRAGGING_SELECTION:
-                       /* TODO: tell front end */
+                       /** \todo tell front end */
                        return;
                case DRAGGING_SCR_X:
                case DRAGGING_SCR_Y:
@@ -447,7 +457,7 @@ void browser_window_set_drag_type(struct browser_window *bw,
 /* exported interface, documented in browser.h */
 browser_drag_type browser_window_get_drag_type(struct browser_window *bw)
 {
-       return bw->drag_type;
+       return bw->drag.type;
 }
 
 /* exported interface, documented in browser.h */
@@ -931,7 +941,7 @@ nserror browser_window_initialise_common(enum 
browser_window_create_flags flags,
        /* window characteristics */
        bw->refresh_interval = -1;
 
-       bw->drag_type = DRAGGING_NONE;
+       bw->drag.type = DRAGGING_NONE;
 
        bw->scroll_x = NULL;
        bw->scroll_y = NULL;
@@ -939,10 +949,10 @@ nserror browser_window_initialise_common(enum 
browser_window_create_flags flags,
        bw->focus = NULL;
 
        /* initialise status text cache */
-       bw->status_text = NULL;
-       bw->status_text_len = 0;
-       bw->status_match = 0;
-       bw->status_miss = 0;
+       bw->status.text = NULL;
+       bw->status.text_len = 0;
+       bw->status.match = 0;
+       bw->status.miss = 0;
 
        return NSERROR_OK;
 }
@@ -1051,30 +1061,37 @@ static void browser_window_stop_throbber(struct 
browser_window *bw)
 
 /**
  * Callback for fetchcache() for browser window favicon fetches.
+ *
+ * \param c content handle of favicon
+ * \param event The event to process
+ * \param pw a context containing the browser window
+ * \return NSERROR_OK on success else appropriate error code.
  */
-static nserror browser_window_favicon_callback(hlcache_handle *c,
-               const hlcache_event *event, void *pw)
+static nserror
+browser_window_favicon_callback(hlcache_handle *c,
+                               const hlcache_event *event,
+                               void *pw)
 {
        struct browser_window *bw = pw;
 
        switch (event->type) {
        case CONTENT_MSG_DONE:
-               if (bw->current_favicon != NULL) {
+               if (bw->favicon.current != NULL) {
                        content_status status =
-                                       content_get_status(bw->current_favicon);
+                                       content_get_status(bw->favicon.current);
 
                        if ((status == CONTENT_STATUS_READY) ||
                                        (status == CONTENT_STATUS_DONE))
-                               content_close(bw->current_favicon);
+                               content_close(bw->favicon.current);
 
-                       hlcache_handle_release(bw->current_favicon);
+                       hlcache_handle_release(bw->favicon.current);
                }
 
-               bw->current_favicon = c;
-               bw->loading_favicon = NULL;
+               bw->favicon.current = c;
+               bw->favicon.loading = NULL;
 
                /* content_get_bitmap on the hlcache_handle should give
-                *   us the favicon bitmap at this point
+                *   the favicon bitmap at this point
                 */
                guit->window->set_icon(bw->window, c);
                break;
@@ -1082,32 +1099,31 @@ static nserror 
browser_window_favicon_callback(hlcache_handle *c,
        case CONTENT_MSG_ERROR:
 
                /* clean up after ourselves */
-               if (c == bw->loading_favicon)
-                       bw->loading_favicon = NULL;
-               else if (c == bw->current_favicon) {
-                       bw->current_favicon = NULL;
+               if (c == bw->favicon.loading) {
+                       bw->favicon.loading = NULL;
+               } else if (c == bw->favicon.current) {
+                       bw->favicon.current = NULL;
                }
 
                hlcache_handle_release(c);
 
-               if (bw->failed_favicon == false) {
+               if (bw->favicon.failed == false) {
                        nsurl *nsref = NULL;
                        nsurl *nsurl;
                        nserror error;
 
-                       bw->failed_favicon = true;
+                       bw->favicon.failed = true;
 
                        error = nsurl_create("resource:favicon.ico", &nsurl);
                        if (error != NSERROR_OK) {
                                LOG("Unable to create default location url");
                        } else {
-
                                hlcache_handle_retrieve(nsurl,
                                                HLCACHE_RETRIEVE_SNIFF_TYPE,
                                                nsref, NULL,
                                                browser_window_favicon_callback,
                                                bw, NULL, CONTENT_IMAGE,
-                                               &bw->loading_favicon);
+                                               &bw->favicon.loading);
 
                                nsurl_unref(nsurl);
                        }
@@ -1121,8 +1137,18 @@ static nserror 
browser_window_favicon_callback(hlcache_handle *c,
        return NSERROR_OK;
 }
 
-static void browser_window_update_favicon(hlcache_handle *c,
-               struct browser_window *bw, struct content_rfc5988_link *link)
+
+/**
+ * update the favicon associated with the browser window
+ *
+ * \param c the page content handle.
+ * \param bw A top level browser window.
+ * \param link A link context or NULL to attempt fallback scanning.
+ */
+static void
+browser_window_update_favicon(hlcache_handle *c,
+                             struct browser_window *bw,
+                             struct content_rfc5988_link *link)
 {
        nsurl *nsref = NULL;
        nsurl *nsurl;
@@ -1136,10 +1162,10 @@ static void 
browser_window_update_favicon(hlcache_handle *c,
                return;
 
        /* already fetching the favicon - use that */
-       if (bw->loading_favicon != NULL)
+       if (bw->favicon.loading != NULL)
                return;
 
-       bw->failed_favicon = false;
+       bw->favicon.failed = false;
 
        if (link == NULL) {
                /* Look for "icon" */
@@ -1176,7 +1202,7 @@ static void browser_window_update_favicon(hlcache_handle 
*c,
                        /* no favicon via link, try for the default location */
                        error = nsurl_join(nsurl, "/favicon.ico", &nsurl);
                } else {
-                       bw->failed_favicon = true;
+                       bw->favicon.failed = true;
                        error = nsurl_create("resource:favicon.ico", &nsurl);
                }
                if (error != NSERROR_OK) {
@@ -1195,7 +1221,7 @@ static void browser_window_update_favicon(hlcache_handle 
*c,
 
        hlcache_handle_retrieve(nsurl, HLCACHE_RETRIEVE_SNIFF_TYPE,
                        nsref, NULL, browser_window_favicon_callback,
-                       bw, NULL, CONTENT_IMAGE, &bw->loading_favicon);
+                       bw, NULL, CONTENT_IMAGE, &bw->favicon.loading);
 
        nsurl_unref(nsurl);
 }
@@ -1318,8 +1344,10 @@ static void browser_window_convert_to_download(struct 
browser_window *bw,
 /**
  * Browser window content event callback handler.
  */
-static nserror browser_window_callback(hlcache_handle *c,
-               const hlcache_event *event, void *pw)
+static nserror
+browser_window_callback(hlcache_handle *c,
+                       const hlcache_event *event,
+                       void *pw)
 {
        struct browser_window *bw = pw;
        nserror res = NSERROR_OK;
@@ -1823,21 +1851,22 @@ static void browser_window_destroy_internal(struct 
browser_window *bw)
                bw->current_content = NULL;
        }
 
-       if (bw->loading_favicon != NULL) {
-               hlcache_handle_abort(bw->loading_favicon);
-               hlcache_handle_release(bw->loading_favicon);
-               bw->loading_favicon = NULL;
+       if (bw->favicon.loading != NULL) {
+               hlcache_handle_abort(bw->favicon.loading);
+               hlcache_handle_release(bw->favicon.loading);
+               bw->favicon.loading = NULL;
        }
 
-       if (bw->current_favicon != NULL) {
-               content_status status = content_get_status(bw->current_favicon);
+       if (bw->favicon.current != NULL) {
+               content_status status = content_get_status(bw->favicon.current);
 
                if (status == CONTENT_STATUS_READY ||
-                   status == CONTENT_STATUS_DONE)
-                       content_close(bw->current_favicon);
+                   status == CONTENT_STATUS_DONE) {
+                       content_close(bw->favicon.current);
+               }
 
-               hlcache_handle_release(bw->current_favicon);
-               bw->current_favicon = NULL;
+               hlcache_handle_release(bw->favicon.current);
+               bw->favicon.current = NULL;
        }
 
        if (bw->box != NULL) {
@@ -1851,15 +1880,16 @@ static void browser_window_destroy_internal(struct 
browser_window *bw)
 
        /* These simply free memory, so are safe here */
 
-       if (bw->frag_id != NULL)
+       if (bw->frag_id != NULL) {
                lwc_string_unref(bw->frag_id);
+       }
 
        browser_window_history_destroy(bw);
 
        free(bw->name);
-       free(bw->status_text);
-       bw->status_text = NULL;
-       LOG("Status text cache match:miss %d:%d", bw->status_match, 
bw->status_miss);
+       free(bw->status.text);
+       bw->status.text = NULL;
+       LOG("Status text cache match:miss %d:%d", bw->status.match, 
bw->status.miss);
 }
 
 /**
@@ -1931,7 +1961,8 @@ nserror browser_window_refresh_url_bar(struct 
browser_window *bw)
 
 
 /* exported interface documented in netsurf/browser_window.h */
-nserror browser_window_navigate(struct browser_window *bw,
+nserror
+browser_window_navigate(struct browser_window *bw,
                             nsurl *url,
                             nsurl *referrer,
                             enum browser_window_nav_flags flags,
@@ -2289,14 +2320,16 @@ void browser_window_update(struct browser_window *bw, 
bool scroll_to_top)
 
                browser_window_update_extent(bw);
 
-               if (scroll_to_top)
-                       browser_window_set_scroll(bw, 0, 0);
-
                /* if frag_id exists, then try to scroll to it */
                /** @todo don't do this if the user has scrolled */
-               if (bw->frag_id && html_get_id_offset(bw->current_content,
-                               bw->frag_id, &x, &y)) {
+               if (bw->frag_id &&
+                   html_get_id_offset(bw->current_content,
+                                      bw->frag_id, &x, &y)) {
                        browser_window_set_scroll(bw, x, y);
+               } else {
+                       if (scroll_to_top) {
+                               browser_window_set_scroll(bw, 0, 0);
+                       }
                }
 
                guit->window->redraw(bw->window);
@@ -2476,10 +2509,10 @@ void browser_window_set_status(struct browser_window 
*bw, const char *text)
        while (bw->parent)
                bw = bw->parent;
 
-       if ((bw->status_text != NULL) &&
-           (strcmp(text, bw->status_text) == 0)) {
+       if ((bw->status.text != NULL) &&
+           (strcmp(text, bw->status.text) == 0)) {
                /* status text is unchanged */
-               bw->status_match++;
+               bw->status.match++;
                return;
        }
 
@@ -2487,18 +2520,18 @@ void browser_window_set_status(struct browser_window 
*bw, const char *text)
 
        text_len = strlen(text);
 
-       if ((bw->status_text == NULL) || (bw->status_text_len < text_len)) {
+       if ((bw->status.text == NULL) || (bw->status.text_len < text_len)) {
                /* no current string allocation or it is not long enough */
-               free(bw->status_text);
-               bw->status_text = strdup(text);
-               bw->status_text_len = text_len;
+               free(bw->status.text);
+               bw->status.text = strdup(text);
+               bw->status.text_len = text_len;
        } else {
                /* current allocation has enough space */
-               memcpy(bw->status_text, text, text_len + 1);
+               memcpy(bw->status.text, text, text_len + 1);
        }
 
-       bw->status_miss++;
-       guit->window->set_status(bw->window, bw->status_text);
+       bw->status.miss++;
+       guit->window->set_status(bw->window, bw->status.text);
 }
 
 
@@ -2848,7 +2881,7 @@ static void browser_window_mouse_drag_end(struct 
browser_window *bw,
 {
        int scr_x, scr_y;
 
-       switch (bw->drag_type) {
+       switch (bw->drag.type) {
        case DRAGGING_SELECTION:
        case DRAGGING_OTHER:
        case DRAGGING_CONTENT_SCROLLBAR:
@@ -2864,7 +2897,7 @@ static void browser_window_mouse_drag_end(struct 
browser_window *bw,
 
                scrollbar_mouse_drag_end(bw->scroll_x, mouse, scr_x, scr_y);
 
-               bw->drag_type = DRAGGING_NONE;
+               bw->drag.type = DRAGGING_NONE;
                break;
 
        case DRAGGING_SCR_Y:
@@ -2876,7 +2909,7 @@ static void browser_window_mouse_drag_end(struct 
browser_window *bw,
 
                scrollbar_mouse_drag_end(bw->scroll_y, mouse, scr_x, scr_y);
 
-               bw->drag_type = DRAGGING_NONE;
+               bw->drag.type = DRAGGING_NONE;
                break;
 
        default:
@@ -2894,11 +2927,11 @@ void browser_window_mouse_track(struct browser_window 
*bw,
        const char *status = NULL;
        browser_pointer_shape pointer = BROWSER_POINTER_DEFAULT;
 
-       if (bw->window != NULL && bw->drag_window && bw != bw->drag_window) {
+       if (bw->window != NULL && bw->drag.window && bw != bw->drag.window) {
                /* This is the root browser window and there's an active drag
                 * in a sub window.
                 * Pass the mouse action straight on to that bw. */
-               struct browser_window *drag_bw = bw->drag_window;
+               struct browser_window *drag_bw = bw->drag.window;
                int off_x = 0;
                int off_y = 0;
 
@@ -2951,25 +2984,27 @@ void browser_window_mouse_track(struct browser_window 
*bw,
                return;
        }
 
-       if (c == NULL && bw->drag_type != DRAGGING_FRAME)
+       if (c == NULL && bw->drag.type != DRAGGING_FRAME) {
                return;
+       }
 
-       if (bw->drag_type != DRAGGING_NONE && !mouse) {
+       if (bw->drag.type != DRAGGING_NONE && !mouse) {
                browser_window_mouse_drag_end(bw, mouse, x, y);
        }
 
        /* Browser window's horizontal scrollbar */
-       if (bw->scroll_x != NULL && bw->drag_type != DRAGGING_SCR_Y) {
+       if (bw->scroll_x != NULL && bw->drag.type != DRAGGING_SCR_Y) {
                int scr_x, scr_y;
                browser_window_get_scrollbar_pos(bw, true, &scr_x, &scr_y);
                scr_x = x - scr_x - scrollbar_get_offset(bw->scroll_x);
                scr_y = y - scr_y - scrollbar_get_offset(bw->scroll_y);
 
-               if ((scr_x > 0 && scr_x < browser_window_get_scrollbar_len(bw,
-                                               true) &&
-                               scr_y > 0 && scr_y < SCROLLBAR_WIDTH &&
-                               bw->drag_type == DRAGGING_NONE) ||
-                               bw->drag_type == DRAGGING_SCR_X) {
+               if ((bw->drag.type == DRAGGING_SCR_X) ||
+                   (scr_x > 0 &&
+                    scr_x < browser_window_get_scrollbar_len(bw, true) &&
+                    scr_y > 0 &&
+                    scr_y < SCROLLBAR_WIDTH &&
+                    bw->drag.type == DRAGGING_NONE)) {
                        /* Start a scrollbar drag, or continue existing drag */
                        status = scrollbar_mouse_status_to_message(
                                        scrollbar_mouse_action(
@@ -2977,8 +3012,9 @@ void browser_window_mouse_track(struct browser_window *bw,
                                                        scr_x, scr_y));
                        pointer = BROWSER_POINTER_DEFAULT;
 
-                       if (status != NULL)
+                       if (status != NULL) {
                                browser_window_set_status(bw, status);
+                       }
 
                        browser_window_set_pointer(bw, pointer);
                        return;
@@ -2992,11 +3028,12 @@ void browser_window_mouse_track(struct browser_window 
*bw,
                scr_x = x - scr_x - scrollbar_get_offset(bw->scroll_x);
                scr_y = y - scr_y - scrollbar_get_offset(bw->scroll_y);
 
-               if ((scr_y > 0 && scr_y < browser_window_get_scrollbar_len(bw,
-                                               false) &&
-                               scr_x > 0 && scr_x < SCROLLBAR_WIDTH &&
-                               bw->drag_type == DRAGGING_NONE) ||
-                               bw->drag_type == DRAGGING_SCR_Y) {
+               if ((bw->drag.type == DRAGGING_SCR_Y) ||
+                   (scr_y > 0 &&
+                    scr_y < browser_window_get_scrollbar_len(bw, false) &&
+                    scr_x > 0 &&
+                    scr_x < SCROLLBAR_WIDTH &&
+                    bw->drag.type == DRAGGING_NONE)) {
                        /* Start a scrollbar drag, or continue existing drag */
                        status = scrollbar_mouse_status_to_message(
                                        scrollbar_mouse_action(
@@ -3004,27 +3041,28 @@ void browser_window_mouse_track(struct browser_window 
*bw,
                                                        scr_x, scr_y));
                        pointer = BROWSER_POINTER_DEFAULT;
 
-                       if (status != NULL)
+                       if (status != NULL) {
                                browser_window_set_status(bw, status);
+                       }
 
                        browser_window_set_pointer(bw, pointer);
                        return;
                }
        }
 
-       if (bw->drag_type == DRAGGING_FRAME) {
+       if (bw->drag.type == DRAGGING_FRAME) {
                browser_window_resize_frame(bw, bw->x + x, bw->y + y);
-       } else if (bw->drag_type == DRAGGING_PAGE_SCROLL) {
+       } else if (bw->drag.type == DRAGGING_PAGE_SCROLL) {
                /* mouse movement since drag started */
-               int scrollx = bw->drag_start_x - x;
-               int scrolly = bw->drag_start_y - y;
+               int scrollx = bw->drag.start_x - x;
+               int scrolly = bw->drag.start_y - y;
 
                /* new scroll offsets */
-               scrollx += bw->drag_start_scroll_x;
-               scrolly += bw->drag_start_scroll_y;
+               scrollx += bw->drag.start_scroll_x;
+               scrolly += bw->drag.start_scroll_y;
 
-               bw->drag_start_scroll_x = scrollx;
-               bw->drag_start_scroll_y = scrolly;
+               bw->drag.start_scroll_x = scrollx;
+               bw->drag.start_scroll_y = scrolly;
 
                browser_window_set_scroll(bw, scrollx, scrolly);
        } else {
@@ -3174,19 +3212,20 @@ void browser_window_page_drag_start(struct 
browser_window *bw, int x, int y)
 
        browser_window_set_drag_type(bw, DRAGGING_PAGE_SCROLL, NULL);
 
-       bw->drag_start_x = x;
-       bw->drag_start_y = y;
+       bw->drag.start_x = x;
+       bw->drag.start_y = y;
 
        if (bw->window != NULL) {
                /* Front end window */
-               guit->window->get_scroll(bw->window, &bw->drag_start_scroll_x,
-                               &bw->drag_start_scroll_y);
+               guit->window->get_scroll(bw->window,
+                                        &bw->drag.start_scroll_x,
+                                        &bw->drag.start_scroll_y);
 
                guit->window->scroll_start(bw->window);
        } else {
                /* Core managed browser window */
-               bw->drag_start_scroll_x = scrollbar_get_offset(bw->scroll_x);
-               bw->drag_start_scroll_y = scrollbar_get_offset(bw->scroll_y);
+               bw->drag.start_scroll_x = scrollbar_get_offset(bw->scroll_x);
+               bw->drag.start_scroll_y = scrollbar_get_offset(bw->scroll_y);
        }
 }
 
diff --git a/desktop/browser_private.h b/desktop/browser_private.h
index 072a894..3e9b846 100644
--- a/desktop/browser_private.h
+++ b/desktop/browser_private.h
@@ -37,24 +37,49 @@ struct gui_window;
 struct history;
 struct selection;
 
-/** Browser window data. */
+/**
+ * Browser window data.
+ */
 struct browser_window {
-       /** Page currently displayed, or 0. Must have status READY or DONE. */
+       /**
+        * Content handle of page currently displayed which must have
+        *  READY or DONE status or NULL for no content.
+        */
        struct hlcache_handle *current_content;
-       /** Page being loaded, or 0. */
+       /**
+        * Content handle of page in process of being loaded or NULL
+        * if no page is being loaded.
+        */
        struct hlcache_handle *loading_content;
 
-       /** Page Favicon */
-       struct hlcache_handle *current_favicon;
-       /** handle for favicon which we started loading early */
-       struct hlcache_handle *loading_favicon;
-       /** favicon fetch already failed - prevents infinite error looping */
-       bool failed_favicon;
-
-       /** Window history structure. */
+       /**
+        * Favicon
+        */
+       struct {
+               /**
+                * content handle of current page favicon
+                */
+               struct hlcache_handle *current;
+
+               /**
+                * content handle for favicon which we started loading
+                * early
+                */
+               struct hlcache_handle *loading;
+
+               /**
+                * flag to indicate favicon fetch already failed which
+                * prevents infinite error looping.
+                */
+               bool failed;
+       } favicon;
+
+       /** local history handle. */
        struct history *history;
 
-       /** Platform specific window data. */
+       /**
+        * Platform specific window data only valid at top level.
+        */
        struct gui_window *window;
 
        /** Busy indicator is active. */
@@ -65,23 +90,32 @@ struct browser_window {
        /** Fragment identifier for current_content. */
        lwc_string *frag_id;
 
-       /** Current drag status. */
-       browser_drag_type drag_type;
+       /**
+        * Current drag status.
+        *
+        * These values are only vald whle type is not DRAGGING_NONE
+        */
+       struct {
+               /** the type of drag in progress */
+               browser_drag_type type;
+
+               /** Current drag's browser window, when not in root bw. */
+               struct browser_window *window;
+
+               /** Mouse position at start of current scroll drag. */
+               int start_x;
+               int start_y;
 
-       /** Current drag's browser window, when not in root bw. */
-       struct browser_window *drag_window;
+               /** Scroll offsets at start of current scroll draw. */
+               int start_scroll_x;
+               int start_scroll_y;
 
-       /** Mouse position at start of current scroll drag. */
-       int drag_start_x;
-       int drag_start_y;
-       /** Scroll offsets at start of current scroll draw. */
-       int drag_start_scroll_x;
-       int drag_start_scroll_y;
-       /** Frame resize directions for current frame resize drag. */
-       unsigned int drag_resize_left : 1;
-       unsigned int drag_resize_right : 1;
-       unsigned int drag_resize_up : 1;
-       unsigned int drag_resize_down : 1;
+               /** Frame resize directions for current frame resize drag. */
+               unsigned int resize_left : 1;
+               unsigned int resize_right : 1;
+               unsigned int resize_up : 1;
+               unsigned int resize_down : 1;
+       } drag;
 
        /** Current fetch is download */
        bool download;
@@ -156,14 +190,15 @@ struct browser_window {
        struct jscontext *jsctx;
 
        /** cache of the currently displayed status text. */
-       char *status_text; /**< Current status bar text. */
-       int status_text_len; /**< Length of the browser_window::status_text 
buffer. */
-       int status_match; /**< Number of times an idempotent status-set 
operation was performed. */
-       int status_miss; /**< Number of times status was really updated. */
+       struct {
+               char *text; /**< Current status bar text. */
+               int text_len; /**< Length of the status::text buffer. */
+               int match; /**< Number of times an idempotent status-set 
operation was performed. */
+               int miss; /**< Number of times status was really updated. */
+       } status;
 };
 
 
-
 /**
  * Initialise common parts of a browser window
  *
@@ -174,6 +209,7 @@ struct browser_window {
 nserror browser_window_initialise_common(enum browser_window_create_flags 
flags,
                struct browser_window *bw, struct browser_window *existing);
 
+
 /**
  * Get the dimensions of the area a browser window occupies
  *
@@ -185,6 +221,7 @@ nserror browser_window_initialise_common(enum 
browser_window_create_flags flags,
 void browser_window_get_dimensions(struct browser_window *bw,
                int *width, int *height, bool scaled);
 
+
 /**
  * Update the extent of the inside of a browser window to that of the current
  * content
@@ -193,6 +230,7 @@ void browser_window_get_dimensions(struct browser_window 
*bw,
  */
 void browser_window_update_extent(struct browser_window *bw);
 
+
 /**
  * Change the status bar of a browser window.
  *
@@ -201,6 +239,7 @@ void browser_window_update_extent(struct browser_window 
*bw);
  */
 void browser_window_set_status(struct browser_window *bw, const char *text);
 
+
 /**
  * Get the root level browser window
  *
diff --git a/desktop/frames.c b/desktop/frames.c
index 70e51e7..9eefefe 100644
--- a/desktop/frames.c
+++ b/desktop/frames.c
@@ -675,25 +675,31 @@ void browser_window_resize_frame(struct browser_window 
*bw, int x, int y)
        assert((col >= 0) && (row >= 0));
 
        sibling = NULL;
-       if (bw->drag_resize_left)
+       if (bw->drag.resize_left) {
                sibling = &parent->children[row * parent->cols + (col - 1)];
-       else if (bw->drag_resize_right)
+       } else if (bw->drag.resize_right) {
                sibling = &parent->children[row * parent->cols + (col + 1)];
-       if (sibling)
+       }
+       if (sibling) {
                change |= browser_window_resolve_frame_dimension(bw, sibling,
                                x, y, true, false);
+       }
 
        sibling = NULL;
-       if (bw->drag_resize_up)
+       if (bw->drag.resize_up) {
                sibling = &parent->children[(row - 1) * parent->cols + col];
-       else if (bw->drag_resize_down)
+       } else if (bw->drag.resize_down) {
                sibling = &parent->children[(row + 1) * parent->cols + col];
-       if (sibling)
+       }
+
+       if (sibling) {
                change |= browser_window_resolve_frame_dimension(bw, sibling,
                                x, y, false, true);
+       }
 
-       if (change)
+       if (change) {
                browser_window_recalculate_frameset(parent);
+       }
 }
 
 
@@ -711,20 +717,22 @@ bool browser_window_resolve_frame_dimension(struct 
browser_window *bw,
 
        /* extend/shrink the box to the pointer */
        if (width) {
-               if (bw->drag_resize_left)
+               if (bw->drag.resize_left) {
                        bw_dimension = bw->x + bw->width - x;
-               else
+               } else {
                        bw_dimension = x - bw->x;
+               }
                bw_pixels = bw->width;
                sibling_pixels = sibling->width;
                bw_d = &bw->frame_width;
                sibling_d = &sibling->frame_width;
                frame_size = bw->parent->width;
        } else {
-               if (bw->drag_resize_up)
+               if (bw->drag.resize_up) {
                        bw_dimension = bw->y + bw->height - y;
-               else
+               } else {
                        bw_dimension = y - bw->y;
+               }
                bw_pixels = bw->height;
                sibling_pixels = sibling->height;
                bw_d = &bw->frame_height;
@@ -919,12 +927,12 @@ static bool browser_window_resize_frames(struct 
browser_window *bw,
                                 *       front end to clamp pointer range */
                                browser_window_set_drag_type(bw,
                                                DRAGGING_FRAME, NULL);
-                               bw->drag_start_x = x;
-                               bw->drag_start_y = y;
-                               bw->drag_resize_left = left;
-                               bw->drag_resize_right = right;
-                               bw->drag_resize_up = up;
-                               bw->drag_resize_down = down;
+                               bw->drag.start_x = x;
+                               bw->drag.start_y = y;
+                               bw->drag.resize_left = left;
+                               bw->drag.resize_right = right;
+                               bw->drag.resize_up = up;
+                               bw->drag.resize_down = down;
                        }
                        return true;
                }
diff --git a/include/netsurf/browser_window.h b/include/netsurf/browser_window.h
index 482dcb9..858d4ae 100644
--- a/include/netsurf/browser_window.h
+++ b/include/netsurf/browser_window.h
@@ -43,6 +43,9 @@ struct rect;
 struct redraw_context;
 enum content_debug;
 
+/**
+ * type of browser window drag in progess
+ */
 typedef enum {
        DRAGGING_NONE,
        DRAGGING_SELECTION,


-- 
NetSurf Browser

_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org

Reply via email to