summaryrefslogtreecommitdiff
path: root/desktop/local_history.h
blob: d0d9209a11c6475bf3cee94b2191543558ab9ac3 (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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*
 * Copyright 2017 Vincent Sanders <vince@netsurf-browser.org>
 *
 * 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/>.
 */
 
#ifndef NETSURF_DESKTOP_LOCAL_HISTORY_H
#define NETSURF_DESKTOP_LOCAL_HISTORY_H

#include <stdbool.h>
#include <stdint.h>

#include "utils/errors.h"
#include "netsurf/mouse.h"

struct core_window_callback_table;
struct redraw_context;
struct nsurl;
struct rect;
struct local_history_session;
struct browser_window;

/**
 * Initialise the local history.
 *
 * This iterates through the history object of a browser window and
 * creates tree of visited pages with thumbnails which may be selected
 * to cause navigation.
 *
 * This must be called before any other local_history_* function.
 *
 * \param[in] cw_t Callback table for core_window containing the treeview.
 * \param[in] core_window_handle The core_window in which the treeview is shown.
 * \param[in] bw browser window to show history of.
 * \param[out] session The created local history session context.
 * \return NSERROR_OK on success and session set, appropriate error code otherwise
 */
nserror local_history_init(struct core_window_callback_table *cw_t,
			   void *core_window_handle,
			   struct browser_window *bw,
			   struct local_history_session **session);

/**
 * Finalise the local history.
 *
 * This destroys the local history view and the local history module's
 * internal data.  After calling this if local history is required again,
 * local_history_init must be called to create a new session.
 *
 * \param session The local history session to finalise.
 * \return NSERROR_OK on success and session freed appropriate error otherwise
 */
nserror local_history_fini(struct local_history_session *session);


/**
 * Redraw the local history.
 *
 * Causes the local history viewer to issue plot operations to redraw
 * the specified area of the viewport.
 *
 * \param[in] session The local history session context.
 * \param[in] x     X coordinate to render history at
 * \param[in] y     Y coordinate to render history at
 * \param[in] clip  Current clip rectangle (wrt tree origin)
 * \param[in] ctx   Current redraw context
 */
nserror local_history_redraw(struct local_history_session *session, int x, int y, struct rect *clip, const struct redraw_context *ctx);


/**
 * Handles all kinds of mouse action
 *
 * \param[in] session The local history session context.
 * \param[in] mouse The current mouse state
 * \param[in] x The current mouse X coordinate
 * \param[in] y The current mouse Y coordinate
 * \return NSERROR_OK if mouse action was processed.
 *         NSERROR_NOT_FOUND if nothing under the pointer where it was clicked
 *         NSERROR_NOT_IMPLEMENTED if the action was not processed.
 *         NSERROR_PERMISSION if the clicked item was the current page
 */
nserror local_history_mouse_action(struct local_history_session *session, enum browser_mouse_state mouse, int x, int y);


/**
 * Key press handling.
 *
 * \param[in] session The local history session context.
 * \param[in] key The ucs4 character codepoint
 * \return true if the keypress is dealt with, false otherwise.
 */
bool local_history_keypress(struct local_history_session *session, uint32_t key);


/**
 * Change the browser window to draw local history for.
 *
 * \param[in] session The local history session context.
 * \param bw browser window to show history of.
 * \return NSERROR_OK or appropriate error code.
 */
nserror local_history_set(struct local_history_session *session, struct browser_window *bw);


/**
 * get size of local history content area.
 *
 * \param[in] session The local history session context.
 * \param[out] width on sucessful return the width of the localhistory content
 * \param[out] height on sucessful return the height of the localhistory content
 * \return NSERROR_OK or appropriate error code.
 */
nserror local_history_get_size(struct local_history_session *session, int *width, int *height);


/**
 * get url of entry at position in local history content area.
 *
 * \todo the returned url should be a referenced nsurl.
 *
 * \param[in] session The local history session context.
 * \param[in] x The x coordinate to get url of.
 * \param[in] y The y coordinate to get url of.
 * \param[out] url_out referenced url.
 * \return NSERROR_OK and url_out updated or NSERROR_NOT_FOUND if no url at
 *          location.
 */
nserror local_history_get_url(struct local_history_session *session, int x, int y, struct nsurl **url_out);

/**
 * Scroll the local history window to ensure the current cursor is shown.
 *
 * \param session The local history session
 */
nserror local_history_scroll_to_cursor(struct local_history_session *session);


#endif