summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2017-02-16 15:18:29 +0000
committerVincent Sanders <vince@kyllikki.org>2017-02-17 09:06:25 +0000
commitc60cb335f21b602eeee84c7865db4b2bbfe87cfe (patch)
tree5155ccefc82a8b201974b32a2cf1e1afb226d750
parent9d0943b8e561dd2e5449cd9d53d8b5c2f439442d (diff)
downloadnetsurf-c60cb335f21b602eeee84c7865db4b2bbfe87cfe.tar.gz
netsurf-c60cb335f21b602eeee84c7865db4b2bbfe87cfe.tar.bz2
add local history corewindow API
-rw-r--r--desktop/Makefile2
-rw-r--r--desktop/local_history.c135
-rw-r--r--desktop/local_history.h110
3 files changed, 246 insertions, 1 deletions
diff --git a/desktop/Makefile b/desktop/Makefile
index 2dcd61611..ffd932177 100644
--- a/desktop/Makefile
+++ b/desktop/Makefile
@@ -3,7 +3,7 @@
S_DESKTOP := cookie_manager.c knockout.c hotlist.c mouse.c \
plot_style.c print.c search.c searchweb.c scrollbar.c \
sslcert_viewer.c textarea.c version.c system_colour.c \
- global_history.c treeview.c
+ local_history.c global_history.c treeview.c
S_DESKTOP := $(addprefix desktop/,$(S_DESKTOP))
diff --git a/desktop/local_history.c b/desktop/local_history.c
new file mode 100644
index 000000000..05e4b5e18
--- /dev/null
+++ b/desktop/local_history.c
@@ -0,0 +1,135 @@
+/*
+ * 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/>.
+ */
+
+/**
+ * \file
+ * Local history viewer implementation
+ */
+
+#include <stdlib.h>
+
+#include "netsurf/types.h"
+#include "netsurf/core_window.h"
+
+#include "desktop/browser_history.h"
+#include "desktop/local_history.h"
+
+struct local_history_session {
+ struct browser_window *bw;
+ struct core_window_callback_table *cw_t;
+ void *core_window_handle;
+};
+
+/* exported interface documented in desktop/local_history.h */
+nserror local_history_init(struct core_window_callback_table *cw_t,
+ void *core_window_handle,
+ struct browser_window *bw,
+ struct local_history_session **session)
+{
+ struct local_history_session *nses;
+
+ nses = calloc(1, sizeof(struct local_history_session));
+ if (nses == NULL) {
+ return NSERROR_NOMEM;
+ }
+
+ nses->cw_t = cw_t;
+ nses->core_window_handle = core_window_handle;
+
+ local_history_set(nses, bw);
+
+ *session = nses;
+ return NSERROR_OK;
+}
+
+/* exported interface documented in desktop/local_history.h */
+nserror local_history_fini(struct local_history_session *session)
+{
+ free(session);
+
+ return NSERROR_OK;
+}
+
+
+/* exported interface documented in desktop/local_history.h */
+nserror
+local_history_redraw(struct local_history_session *session,
+ int x,
+ int y,
+ struct rect *clip,
+ const struct redraw_context *ctx)
+{
+ if (session->bw != NULL) {
+ browser_window_history_redraw_rectangle(session->bw,
+ clip->x0, clip->y0, clip->x1, clip->y1, x, y, ctx);
+ }
+ return NSERROR_OK;
+}
+
+/* exported interface documented in desktop/local_history.h */
+void
+local_history_mouse_action(struct local_history_session *session,
+ enum browser_mouse_state mouse,
+ int x,
+ int y)
+{
+ if (mouse & BROWSER_MOUSE_PRESS_1) {
+ browser_window_history_click(session->bw, x, y, false);
+ }
+}
+
+/* exported interface documented in desktop/local_history.h */
+bool
+local_history_keypress(struct local_history_session *session, uint32_t key)
+{
+ return false;
+}
+
+/* exported interface documented in desktop/local_history.h */
+nserror
+local_history_set(struct local_history_session *session,
+ struct browser_window *bw)
+{
+ int width;
+ int height;
+
+ session->bw = bw;
+ if (bw != NULL) {
+ browser_window_history_size(session->bw, &width, &height);
+
+ session->cw_t->update_size(session->core_window_handle,
+ width, height);
+ }
+
+ return NSERROR_OK;
+}
+
+
+/* exported interface documented in desktop/local_history.h */
+nserror
+local_history_get_size(struct local_history_session *session,
+ int *width,
+ int *height)
+{
+
+ browser_window_history_size(session->bw, width, height);
+ *width += 20;
+ *height += 20;
+
+ return NSERROR_OK;
+}
diff --git a/desktop/local_history.h b/desktop/local_history.h
new file mode 100644
index 000000000..a23cbd3ed
--- /dev/null
+++ b/desktop/local_history.h
@@ -0,0 +1,110 @@
+/*
+ * 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 global history.
+ *
+ * This iterates through the URL database, generating the global history data,
+ * and creates a treeview.
+ *
+ * This must be called before any other local_history_* function.
+ *
+ * \param cw_t Callback table for core_window containing the treeview.
+ * \param core_window_handle The core_window in which the treeview is shown.
+ * \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 global history.
+ *
+ * This destroys the global history treeview and the global history module's
+ * internal data. After calling this if global history is required again,
+ * local_history_init must be called.
+ *
+ * \param session The local history session to finalise.
+ * \return NSERROR_OK on success, appropriate error otherwise
+ */
+nserror local_history_fini(struct local_history_session *session);
+
+
+/**
+ * Redraw the global history.
+ *
+ * \param session The local history session context.
+ * \param x X coordinate to render treeview at
+ * \param y Y coordinate to render treeview at
+ * \param clip Current clip rectangle (wrt tree origin)
+ * \param 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 session The local history session context.
+ * \param mouse The current mouse state
+ * \param x X coordinate
+ * \param y Y coordinate
+ */
+void local_history_mouse_action(struct local_history_session *session, enum browser_mouse_state mouse, int x, int y);
+
+/**
+ * Key press handling.
+ *
+ * \param key The ucs4 character codepoint
+ * \param session The local history session context.
+ * \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 session The local history session context.
+ */
+nserror local_history_set(struct local_history_session *session, struct browser_window *bw);
+
+/**
+ * get size of local history content area
+ *
+ * \param session The local history session context.
+ */
+nserror local_history_get_size(struct local_history_session *session, int *width, int *height);
+
+#endif