netsurf/desktop/browser_private.h

252 lines
6.0 KiB
C

/*
* Copyright 2003 Phil Mellor <monkeyson@users.sourceforge.net>
* Copyright 2006 James Bursa <bursa@users.sourceforge.net>
*
* This file is part of NetSurf, http://www.netsurf-browser.org/
*
* NetSurf is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* NetSurf is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file
* Browser window private structure.
*/
#ifndef _NETSURF_DESKTOP_BROWSER_PRIVATE_H_
#define _NETSURF_DESKTOP_BROWSER_PRIVATE_H_
#include <libwapcaplet/libwapcaplet.h>
#include "netsurf/types.h"
#include "netsurf/browser_window.h"
#include "desktop/frame_types.h"
struct box;
struct hlcache_handle;
struct gui_window;
struct history;
struct selection;
/**
* Browser window data.
*/
struct browser_window {
/**
* Content handle of page currently displayed which must have
* READY or DONE status or NULL for no content.
*/
struct hlcache_handle *current_content;
/**
* Content handle of page in process of being loaded or NULL
* if no page is being loaded.
*/
struct hlcache_handle *loading_content;
/**
* 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 only valid at top level.
*/
struct gui_window *window;
/** Busy indicator is active. */
bool throbbing;
/** Add loading_content to the window history when it loads. */
bool history_add;
/** Fragment identifier for current_content. */
lwc_string *frag_id;
/**
* 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;
/** Refresh interval (-1 if undefined) */
int refresh_interval;
/** Window dimensions */
int x;
int y;
int width;
int height;
struct scrollbar *scroll_x; /**< Horizontal scroll. */
struct scrollbar *scroll_y; /**< Vertical scroll. */
/** scale of window contents */
float scale;
/** Window characteristics */
enum {
BROWSER_WINDOW_NORMAL,
BROWSER_WINDOW_IFRAME,
BROWSER_WINDOW_FRAME,
BROWSER_WINDOW_FRAMESET,
} browser_window_type;
/** frameset characteristics */
int rows;
int cols;
/** frame dimensions */
struct frame_dimension frame_width;
struct frame_dimension frame_height;
int margin_width;
int margin_height;
/** frame name for targetting */
char *name;
/** frame characteristics */
bool no_resize;
browser_scrolling scrolling;
bool border;
colour border_colour;
/** iframe parent box */
struct box *box;
/** [cols * rows] children */
struct browser_window *children;
struct browser_window *parent;
/** [iframe_count] iframes */
int iframe_count;
struct browser_window *iframes;
/** browser window child of root browser window which has input focus */
struct browser_window *focus;
/** Last time a link was followed in this window */
uint64_t last_action;
/** Current selection */
struct {
struct browser_window *bw;
bool read_only;
} selection;
bool can_edit;
/** current javascript context */
struct jscontext *jsctx;
/** cache of the currently displayed status text. */
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
*
* \param flags Flags to control operation
* \param bw The window to initialise
* \param existing The existing window if cloning, else NULL
*/
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
*
* \param bw The browser window to get dimensions of
* \param width Updated to the browser window viewport width
* \param height Updated to the browser window viewport height
* \param scaled Whether we want the height with scale applied
*/
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
*
* \param bw browser_window to update the extent of
*/
void browser_window_update_extent(struct browser_window *bw);
/**
* Change the status bar of a browser window.
*
* \param bw browser window
* \param text new status text (copied)
*/
void browser_window_set_status(struct browser_window *bw, const char *text);
/**
* Get the root level browser window
*
* \param bw browser window to set the type of the current drag for
* \return root browser window
*/
struct browser_window * browser_window_get_root(struct browser_window *bw);
#endif