summaryrefslogtreecommitdiff
path: root/desktop/browser.h
blob: 34f7591022e45774a7eafe8da6b78068f5f7be98 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
 * This file is part of NetSurf, http://netsurf.sourceforge.net/
 * Licensed under the GNU General Public License,
 *                http://www.opensource.org/licenses/gpl-license
 * Copyright 2003 Phil Mellor <monkeyson@users.sourceforge.net>
 * Copyright 2004 James Bursa <bursa@users.sourceforge.net>
 */

/** \file
 * Browser window creation and manipulation (interface).
 */

#ifndef _NETSURF_DESKTOP_BROWSER_H_
#define _NETSURF_DESKTOP_BROWSER_H_

#include <stdbool.h>
#include <time.h>
#include "netsurf/utils/config.h"
#include "netsurf/content/content.h"
#include "netsurf/desktop/gui.h"

struct box;
struct history;
struct form_successful_control;

/** Browser window data. */
struct browser_window
{
	/** Page currently displayed, or 0. Must have status READY or DONE. */
	struct content *current_content;
	/** Instance state pointer for current_content. */
	void *current_content_state;
	/** Page being loaded, or 0. */
	struct content *loading_content;

	/** Window history structure. */
	struct history *history;

	/** Handler for keyboard input, or 0. */
	void (*caret_callback)(struct browser_window *bw, char key, void *p);
	/** User parameter for caret_callback. */
	void *caret_p;

	/** Platform specific window handle. */
	gui_window *window;

	/** Busy indicator is active. */
	bool throbbing;
	/** Add loading_content to the window history when it loads. */
	bool history_add;
	/** Start time of fetching loading_content. */
	clock_t time0;


#ifdef WITH_FRAMES
  struct browser_window *parent;
  unsigned int no_children;
  struct browser_window **children;
#endif
};


struct browser_action
{
  enum { act_UNKNOWN,
         act_MOUSE_AT, act_MOUSE_CLICK, act_START_NEW_SELECTION,
         act_ALTER_SELECTION, act_CLEAR_SELECTION,
         act_FOLLOW_LINK, act_FOLLOW_LINK_NEW_WINDOW,
	 act_GADGET_SELECT
       } type;
  union {
    struct {
      unsigned long x;
      unsigned long y;
    } mouse;
    struct {
      struct form_control* g;
      int item;
    } gadget_select;
  } data;
};

struct box_selection
{
  struct content *content;
  struct box* box;
  int actual_x;
  int actual_y;
  int plot_index;
};


void browser_window_create(const char *url, struct browser_window *clone);
void browser_window_go(struct browser_window *bw, const char *url);
void browser_window_go_post(struct browser_window *bw, const char *url,
		char *post_urlenc,
		struct form_successful_control *post_multipart,
		bool history_add);
void browser_window_stop(struct browser_window *bw);
void browser_window_destroy(struct browser_window *bw);

int browser_window_action(struct browser_window* bw, struct browser_action* act);

void box_under_area(struct content *content, struct box* box, unsigned long x, unsigned long y, unsigned long ox, unsigned long oy,
		struct box_selection** found, int* count, int* plot_index);

int box_position_lt(struct box_position* x, struct box_position* y);
int box_position_gt(struct box_position* x, struct box_position* y);
int box_position_eq(struct box_position* x, struct box_position* y);
int box_position_distance(struct box_position* x, struct box_position* y);

void gui_redraw_gadget(struct browser_window* bw, struct form_control* g);

bool browser_window_key_press(struct browser_window *bw, char key);

/* In platform specific history.c. */
struct history *history_create(void);
void history_add(struct history *history, struct content *content);
void history_update(struct history *history, struct content *content);
void history_destroy(struct history *history);
void history_back(struct browser_window *bw, struct history *history);
void history_forward(struct browser_window *bw, struct history *history);

/* In platform specific about.c. */
struct content *about_create(const char *url,
		void (*callback)(content_msg msg, struct content *c, void *p1,
			void *p2, const char *error),
		void *p1, void *p2, unsigned long width, unsigned long height);

#endif