summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2014-01-12 17:07:34 +0000
committerVincent Sanders <vince@kyllikki.org>2014-01-12 17:07:34 +0000
commitb7736bae2f37675be55b1c89d33b03e8603b2946 (patch)
tree31d4c9aa165b71ff33d181b0d2b4982812963100
parent56bb9582b16dfd45bbd1665adaf87c6c5986aed3 (diff)
downloadnetsurf-b7736bae2f37675be55b1c89d33b03e8603b2946.tar.gz
netsurf-b7736bae2f37675be55b1c89d33b03e8603b2946.tar.bz2
split gui operations into core and window and move more operations into tables
-rwxr-xr-xamiga/download.h3
-rw-r--r--amiga/gui.c157
-rw-r--r--atari/gui.c41
-rw-r--r--beos/gui.cpp17
-rw-r--r--beos/scaffolding.cpp9
-rw-r--r--beos/scaffolding.h2
-rw-r--r--beos/window.cpp22
-rw-r--r--beos/window.h9
-rw-r--r--cocoa/gui.m39
-rw-r--r--desktop/browser.c20
-rw-r--r--desktop/gui.h76
-rw-r--r--desktop/gui_factory.c99
-rw-r--r--desktop/searchweb.c2
-rw-r--r--framebuffer/gui.c44
-rw-r--r--gtk/dialogs/preferences.c4
-rw-r--r--gtk/gui.c18
-rw-r--r--gtk/scaffolding.c5
-rw-r--r--gtk/scaffolding.h2
-rw-r--r--gtk/toolbar.c4
-rw-r--r--gtk/window.c26
-rw-r--r--gtk/window.h5
-rw-r--r--monkey/browser.c39
-rw-r--r--monkey/browser.h10
-rw-r--r--monkey/main.c11
-rw-r--r--riscos/gui.c10
-rw-r--r--riscos/window.c43
-rw-r--r--riscos/window.h12
-rw-r--r--windows/gui.c38
28 files changed, 390 insertions, 377 deletions
diff --git a/amiga/download.h b/amiga/download.h
index ed09a8057..2febbe908 100755
--- a/amiga/download.h
+++ b/amiga/download.h
@@ -36,4 +36,7 @@ void ami_download_window_abort(struct gui_download_window *dw);
BOOL ami_download_window_event(struct gui_download_window *dw);
void ami_free_download_list(struct List *dllist);
BOOL ami_download_check_overwrite(const char *file, struct Window *win, ULONG size);
+
+void gui_window_save_link(struct gui_window *g, const char *url, const char *title);
+
#endif
diff --git a/amiga/gui.c b/amiga/gui.c
index 463334676..f7c9b92a5 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -1318,6 +1318,69 @@ void ami_gui_menu_update_all(void)
} while(node = nnode);
}
+/**
+ * function to add retrieved favicon to gui
+ */
+static void gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
+{
+ struct BitMap *bm = NULL;
+ struct IBox *bbox;
+ ULONG cur_tab = 0;
+ struct bitmap *icon_bitmap;
+
+ if(nsoption_bool(kiosk_mode) == true) return;
+ if(!g) return;
+
+ if(g->tab_node && (g->shared->tabs > 1)) GetAttr(CLICKTAB_Current,
+ g->shared->objects[GID_TABS],
+ (ULONG *)&cur_tab);
+
+ if ((icon != NULL) && ((icon_bitmap = content_get_bitmap(icon)) != NULL))
+ {
+ bm = ami_bitmap_get_native(icon_bitmap, 16, 16,
+ g->shared->win->RPort->BitMap);
+ }
+
+ if((cur_tab == g->tab) || (g->shared->tabs <= 1))
+ {
+ GetAttr(SPACE_AreaBox, g->shared->objects[GID_ICON], (ULONG *)&bbox);
+
+ RefreshGList((struct Gadget *)g->shared->objects[GID_ICON],
+ g->shared->win, NULL, 1);
+
+ if(bm)
+ {
+ ULONG tag, tag_data, minterm;
+
+ if(ami_plot_screen_is_palettemapped() == false) {
+ tag = BLITA_UseSrcAlpha;
+ tag_data = !icon_bitmap->opaque;
+ minterm = 0xc0;
+ } else {
+ tag = BLITA_MaskPlane;
+ tag_data = (ULONG)ami_bitmap_get_mask(icon_bitmap, 16, 16, bm);
+ minterm = (ABC|ABNC|ANBC);
+ }
+
+ BltBitMapTags(BLITA_SrcX, 0,
+ BLITA_SrcY, 0,
+ BLITA_DestX, bbox->Left,
+ BLITA_DestY, bbox->Top,
+ BLITA_Width, 16,
+ BLITA_Height, 16,
+ BLITA_Source, bm,
+ BLITA_Dest, g->shared->win->RPort,
+ BLITA_SrcType, BLITT_BITMAP,
+ BLITA_DestType, BLITT_RASTPORT,
+ BLITA_Minterm, minterm,
+ tag, tag_data,
+ TAG_DONE);
+ }
+ }
+
+ g->favicon = icon;
+}
+
void ami_handle_msg(void)
{
struct IntuiMessage *message = NULL;
@@ -2166,7 +2229,7 @@ void ami_handle_msg(void)
if(refresh_search_ico)
{
- gui_window_set_search_ico(NULL);
+ gui_set_search_ico(NULL);
refresh_search_ico = FALSE;
}
@@ -4611,68 +4674,6 @@ static void gui_window_set_url(struct gui_window *g, const char *url)
ami_update_buttons(g->shared);
}
-/**
- * function to add retrieved favicon to gui
- */
-void gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
-{
- struct BitMap *bm = NULL;
- struct IBox *bbox;
- ULONG cur_tab = 0;
- struct bitmap *icon_bitmap;
-
- if(nsoption_bool(kiosk_mode) == true) return;
- if(!g) return;
-
- if(g->tab_node && (g->shared->tabs > 1)) GetAttr(CLICKTAB_Current,
- g->shared->objects[GID_TABS],
- (ULONG *)&cur_tab);
-
- if ((icon != NULL) && ((icon_bitmap = content_get_bitmap(icon)) != NULL))
- {
- bm = ami_bitmap_get_native(icon_bitmap, 16, 16,
- g->shared->win->RPort->BitMap);
- }
-
- if((cur_tab == g->tab) || (g->shared->tabs <= 1))
- {
- GetAttr(SPACE_AreaBox, g->shared->objects[GID_ICON], (ULONG *)&bbox);
-
- RefreshGList((struct Gadget *)g->shared->objects[GID_ICON],
- g->shared->win, NULL, 1);
-
- if(bm)
- {
- ULONG tag, tag_data, minterm;
-
- if(ami_plot_screen_is_palettemapped() == false) {
- tag = BLITA_UseSrcAlpha;
- tag_data = !icon_bitmap->opaque;
- minterm = 0xc0;
- } else {
- tag = BLITA_MaskPlane;
- tag_data = (ULONG)ami_bitmap_get_mask(icon_bitmap, 16, 16, bm);
- minterm = (ABC|ABNC|ANBC);
- }
-
- BltBitMapTags(BLITA_SrcX, 0,
- BLITA_SrcY, 0,
- BLITA_DestX, bbox->Left,
- BLITA_DestY, bbox->Top,
- BLITA_Width, 16,
- BLITA_Height, 16,
- BLITA_Source, bm,
- BLITA_Dest, g->shared->win->RPort,
- BLITA_SrcType, BLITT_BITMAP,
- BLITA_DestType, BLITT_RASTPORT,
- BLITA_Minterm, minterm,
- tag, tag_data,
- TAG_DONE);
- }
- }
-
- g->favicon = icon;
-}
static uint32 ami_set_favicon_render_hook(struct Hook *hook, APTR space,
struct gpRender *msg)
@@ -4687,7 +4688,7 @@ static uint32 ami_set_favicon_render_hook(struct Hook *hook, APTR space,
* \param ico may be NULL for local calls; then access current cache from
* search_web_ico()
*/
-void gui_window_set_search_ico(hlcache_handle *ico)
+static void gui_set_search_ico(hlcache_handle *ico)
{
struct BitMap *bm = NULL;
struct IBox *bbox;
@@ -4849,7 +4850,7 @@ bool gui_window_scroll_start(struct gui_window *g)
return true;
}
-bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
+static bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
const struct rect *rect)
{
g->shared->drag_op = type;
@@ -5092,17 +5093,29 @@ void gui_file_gadget_open(struct gui_window *g, hlcache_handle *hl,
}
}
+static struct gui_window_table ami_window_table = {
+ .create = gui_window_create,
+ .destroy = gui_window_destroy,
+
+ .set_icon = gui_window_set_icon,
+ .set_title = gui_window_set_title,
+ .set_url = gui_window_set_url,
+
+ .drag_start = gui_window_drag_start,
+ .start_throbber = gui_window_start_throbber,
+ .stop_throbber = gui_window_stop_throbber,
+
+ /* from download */
+ .save_link = gui_window_save_link,
+};
+
+
static struct gui_table ami_gui_table = {
.poll = gui_poll,
.quit = gui_quit,
+ .set_search_ico = gui_set_search_ico,
- .window_create = gui_window_create,
- .window_destroy = gui_window_destroy,
-
- .window_set_title = gui_window_set_title,
- .window_set_url = gui_window_set_url,
- .window_start_throbber = gui_window_start_throbber,
- .window_stop_throbber = gui_window_stop_throbber,
+ .window = &ami_window_table,
};
/** Normal entry point from OS */
diff --git a/atari/gui.c b/atari/gui.c
index de088a47e..24577c5aa 100644
--- a/atari/gui.c
+++ b/atari/gui.c
@@ -646,7 +646,7 @@ gui_window_remove_caret(struct gui_window *w)
return;
}
-void
+static void
gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
{
struct bitmap *bmp_icon;
@@ -658,12 +658,6 @@ gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
}
}
-void
-gui_window_set_search_ico(hlcache_handle *ico)
-{
- TODO();
-}
-
void gui_window_new_content(struct gui_window *w)
{
struct gemtk_wm_scroll_info_s *slid = gemtk_wm_get_scroll_info(w->root->win);
@@ -679,19 +673,6 @@ bool gui_window_scroll_start(struct gui_window *w)
return true;
}
-bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
- const struct rect *rect)
-{
- TODO();
- return true;
-}
-
-void gui_window_save_link(struct gui_window *g, const char *url,
- const char *title)
-{
- LOG(("%s -> %s", title, url ));
- TODO();
-}
void gui_drag_save_object(gui_save_type type, hlcache_handle *c,
struct gui_window *w)
@@ -1105,17 +1086,23 @@ void gui_file_gadget_open(struct gui_window *g, hlcache_handle *hl,
/* browser_window_set_gadget_filename(bw, gadget, "filename"); */
}
+static struct gui_window_table atari_window_table = {
+ .create = gui_window_create,
+ .destroy = gui_window_destroy,
+
+ .set_title = gui_window_set_title,
+ .set_url = gui_window_set_url,
+ .set_icon = gui_window_set_icon,
+
+ .start_throbber = gui_window_start_throbber,
+ .stop_throbber = gui_window_stop_throbber,
+};
+
static struct gui_table atari_gui_table = {
.poll = gui_poll,
.quit = gui_quit,
- .window_create = gui_window_create,
- .window_destroy = gui_window_destroy,
-
- .window_set_title = gui_window_set_title,
- .window_set_url = gui_window_set_url,
- .window_start_throbber = gui_window_start_throbber,
- .window_stop_throbber = gui_window_stop_throbber,
+ .window = &atari_window_table;
};
/* #define WITH_DBG_LOGFILE 1 */
diff --git a/beos/gui.cpp b/beos/gui.cpp
index c5e2fe482..42a681c30 100644
--- a/beos/gui.cpp
+++ b/beos/gui.cpp
@@ -791,11 +791,6 @@ void gui_create_form_select_menu(struct browser_window *bw,
CALLED();
}
-void
-gui_window_save_link(struct gui_window *g, const char *url, const char *title)
-{
-}
-
/**
* Send the source of a content to a text editor.
*/
@@ -1089,15 +1084,6 @@ void gui_file_gadget_open(struct gui_window *g, hlcache_handle *hl,
static struct gui_table beos_gui_table = {
.poll = gui_poll,
.quit = gui_quit,
-
- .window_create = gui_window_create,
- .window_destroy = gui_window_destroy,
-
- .window_set_title = gui_window_set_title,
- .window_set_url = gui_window_set_url,
- .window_start_throbber = gui_window_start_throbber,
- .window_stop_throbber = gui_window_stop_throbber,
-
};
@@ -1131,6 +1117,9 @@ int main(int argc, char** argv)
/* common initialisation */
BPath messages = get_messages_path();
+
+ beos_gui_table.window = beos_gui_window_table;
+
ret = netsurf_init(messages.Path(), &beos_gui_table);
if (ret != NSERROR_OK) {
die("NetSurf failed to initialise");
diff --git a/beos/scaffolding.cpp b/beos/scaffolding.cpp
index 51235b6d0..f302efcb4 100644
--- a/beos/scaffolding.cpp
+++ b/beos/scaffolding.cpp
@@ -2194,15 +2194,6 @@ void gui_window_set_icon(struct gui_window *_g, hlcache_handle *icon)
g->top_view->UnlockLooper();
}
-/**
-* set gui display of a retrieved favicon representing the search provider
-* \param ico may be NULL for local calls; then access current cache from
-* search_web_ico()
-*/
-void gui_window_set_search_ico(hlcache_handle *ico)
-{
-}
-
void nsbeos_scaffolding_popup_menu(nsbeos_scaffolding *g, BPoint where)
{
diff --git a/beos/scaffolding.h b/beos/scaffolding.h
index 210499fc7..fe726147c 100644
--- a/beos/scaffolding.h
+++ b/beos/scaffolding.h
@@ -204,6 +204,6 @@ void gui_window_set_title(struct gui_window *_g, const char *title);
void gui_window_set_url(struct gui_window *_g, const char *url);
void gui_window_start_throbber(struct gui_window* _g);
void gui_window_stop_throbber(struct gui_window* _g);
-
+void gui_window_set_icon(struct gui_window *_g, hlcache_handle *icon);
#endif /* NETSURF_BEOS_SCAFFOLDING_H */
diff --git a/beos/window.cpp b/beos/window.cpp
index e2c17d7e0..c4a3784e5 100644
--- a/beos/window.cpp
+++ b/beos/window.cpp
@@ -335,7 +335,7 @@ float nsbeos_get_scale_for_gui(struct gui_window *g)
}
/* Create a gui_window */
-struct gui_window *gui_window_create(struct browser_window *bw,
+static struct gui_window *gui_window_create(struct browser_window *bw,
struct browser_window *clone,
bool new_tab)
{
@@ -957,7 +957,7 @@ void nsbeos_window_destroy_browser(struct gui_window *g)
browser_window_destroy(g->bw);
}
-void gui_window_destroy(struct gui_window *g)
+static void gui_window_destroy(struct gui_window *g)
{
if (!g)
return;
@@ -1284,11 +1284,6 @@ bool gui_window_scroll_start(struct gui_window *g)
return true;
}
-bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
- const struct rect *rect)
-{
- return true;
-}
void gui_drag_save_object(gui_save_type type, hlcache_handle *c,
struct gui_window *g)
@@ -1384,3 +1379,16 @@ void gui_window_get_dimensions(struct gui_window *g, int *width, int *height,
}
}
+static struct gui_window_table gui_window_table = {
+ .create = gui_window_create,
+ .destroy = gui_window_destroy,
+
+ /* from scaffold */
+ .set_icon = gui_window_set_icon,
+ .set_title = gui_window_set_title,
+ .set_url = gui_window_set_url,
+ .start_throbber = gui_window_start_throbber,
+ .stop_throbber = gui_window_stop_throbber,
+};
+
+struct gui_window_table *beos_gui_window_table = &gui_window_table;
diff --git a/beos/window.h b/beos/window.h
index 012fbe06f..4bd38de4e 100644
--- a/beos/window.h
+++ b/beos/window.h
@@ -25,6 +25,8 @@ extern "C" {
}
#include "beos/scaffolding.h"
+extern struct gui_window_table *beos_gui_window_table;
+
class NSBrowserFrameView : public BView {
public:
NSBrowserFrameView(BRect frame, struct gui_window *gui);
@@ -48,7 +50,6 @@ private:
void nsbeos_dispatch_event(BMessage *message);
-
void nsbeos_reflow_all_windows(void);
void nsbeos_window_process_reformats(void);
@@ -61,10 +62,4 @@ void nsbeos_window_destroy_browser(struct gui_window *g);
struct browser_window *nsbeos_get_browser_window(struct gui_window *g);
-
-struct gui_window *gui_window_create(struct browser_window *bw,
- struct browser_window *clone,
- bool new_tab);
-void gui_window_destroy(struct gui_window *g);
-
#endif /* NETSURF_BEOS_WINDOW_H */
diff --git a/cocoa/gui.m b/cocoa/gui.m
index 80f811416..fcec64192 100644
--- a/cocoa/gui.m
+++ b/cocoa/gui.m
@@ -226,7 +226,7 @@ static void gui_window_stop_throbber(struct gui_window *g)
[(BrowserViewController *)g updateBackForward];
}
-void gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
+static void gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
{
NSBitmapImageRep *bmp = icon != NULL ? (NSBitmapImageRep *)content_get_bitmap( icon ) : NULL;
@@ -243,11 +243,6 @@ void gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
[image release];
}
-void gui_window_set_search_ico(hlcache_handle *ico)
-{
- UNIMPL();
-}
-
void gui_window_place_caret(struct gui_window *g, int x, int y, int height,
const struct rect *clip)
{
@@ -270,18 +265,6 @@ bool gui_window_scroll_start(struct gui_window *g)
return true;
}
-bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
- const struct rect *rect)
-{
- return true;
-}
-
-void gui_window_save_link(struct gui_window *g, const char *url,
- const char *title)
-{
- UNIMPL();
-}
-
void gui_drag_save_object(gui_save_type type, hlcache_handle *c,
struct gui_window *g)
{
@@ -328,16 +311,22 @@ void gui_file_gadget_open(struct gui_window *g, hlcache_handle *hl,
/* browser_window_set_gadget_filename(bw, gadget, "filename"); */
}
+static struct gui_window_table cocoa_window_table = {
+ .create = gui_window_create,
+ .destroy = gui_window_destroy,
+
+ .set_title = gui_window_set_title,
+ .set_url = gui_window_set_url,
+ .set_icon = gui_window_set_icon,
+
+ .start_throbber = gui_window_start_throbber,
+ .stop_throbber = gui_window_stop_throbber,
+};
+
static struct gui_table gui_table = {
.poll = &gui_poll,
- .window_create = gui_window_create,
- .window_destroy = gui_window_destroy,
-
- .window_set_title = gui_window_set_title,
- .window_set_url = gui_window_set_url,
- .window_start_throbber = gui_window_start_throbber,
- .window_stop_throbber = gui_window_stop_throbber,
+ .window = &cocoa_window_table,
};
struct gui_table *cocoa_gui_table = &gui_table;
diff --git a/desktop/browser.c b/desktop/browser.c
index e01595fcc..bef6eb109 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -391,7 +391,7 @@ void browser_window_set_drag_type(struct browser_window *bw,
break;
}
- gui_window_drag_start(top_bw->window, gtype, rect);
+ guit->window->drag_start(top_bw->window, gtype, rect);
}
}
@@ -732,7 +732,7 @@ browser_window_create(enum browser_window_nav_flags flags,
* so find that. */
top = browser_window_get_root(clone);
- bw->window = guit->window_create(bw, top, ((flags & BROWSER_WINDOW_TAB) != 0));
+ bw->window = guit->window->create(bw, top, ((flags & BROWSER_WINDOW_TAB) != 0));
if (bw->window == NULL) {
browser_window_destroy(bw);
@@ -866,7 +866,7 @@ static void browser_window_start_throbber(struct browser_window *bw)
while (bw->parent)
bw = bw->parent;
- guit->window_start_throbber(bw->window);
+ guit->window->start_throbber(bw->window);
}
@@ -884,7 +884,7 @@ static void browser_window_stop_throbber(struct browser_window *bw)
bw = bw->parent;
if (!browser_window_check_throbber(bw)) {
- guit->window_stop_throbber(bw->window);
+ guit->window->stop_throbber(bw->window);
}
}
@@ -918,7 +918,7 @@ static nserror browser_window_favicon_callback(hlcache_handle *c,
/* content_get_bitmap on the hlcache_handle should give
* us the favicon bitmap at this point
*/
- gui_window_set_icon(bw->window, c);
+ guit->window->set_icon(bw->window, c);
break;
case CONTENT_MSG_ERROR:
@@ -1507,7 +1507,7 @@ static nserror browser_window_callback(hlcache_handle *c,
{
/* Content wants a link to be saved */
struct browser_window *root = browser_window_get_root(bw);
- gui_window_save_link(root->window,
+ guit->window->save_link(root->window,
event->data.savelink.url,
event->data.savelink.title);
}
@@ -1643,7 +1643,7 @@ void browser_window_destroy_internal(struct browser_window *bw)
if (bw->window) {
/* Only the root window has a GUI window */
- guit->window_destroy(bw->window);
+ guit->window->destroy(bw->window);
}
if (bw->loading_content != NULL) {
@@ -1959,7 +1959,7 @@ void browser_window_update(struct browser_window *bw, bool scroll_to_top)
case BROWSER_WINDOW_NORMAL:
/* Root browser window, constituting a front end window/tab */
- guit->window_set_title(bw->window,
+ guit->window->set_title(bw->window,
content_get_title(bw->current_content));
browser_window_update_extent(bw);
@@ -2359,7 +2359,7 @@ void browser_window_refresh_url_bar(struct browser_window *bw, nsurl *url,
/* With no fragment, we may as well pass url straight through
* saving a malloc, copy, free cycle.
*/
- guit->window_set_url(bw->window, nsurl_access(url));
+ guit->window->set_url(bw->window, nsurl_access(url));
} else {
nsurl *display_url;
nserror error;
@@ -2370,7 +2370,7 @@ void browser_window_refresh_url_bar(struct browser_window *bw, nsurl *url,
return;
}
- guit->window_set_url(bw->window, nsurl_access(display_url));
+ guit->window->set_url(bw->window, nsurl_access(display_url));
nsurl_unref(display_url);
}
}
diff --git a/desktop/gui.h b/desktop/gui.h
index 26e1792f8..96062ddae 100644
--- a/desktop/gui.h
+++ b/desktop/gui.h
@@ -65,43 +65,75 @@ struct gui_download_window;
struct browser_window;
struct form_control;
-/** Graphical user interface function table
+/** Graphical user interface window function table
*
- * function table implementing GUI interface to browser core
+ * function table implementing window operations
*/
-struct gui_table {
+struct gui_window_table {
/* Mandantory entries */
- /** called to let the frontend update its state and run any
- * I/O operations.
- */
- void (*poll)(bool active);
-
/** create a gui window for a browsing context */
- struct gui_window *(*window_create)(struct browser_window *bw, struct browser_window *clone, bool new_tab);
+ struct gui_window *(*create)(struct browser_window *bw, struct browser_window *clone, bool new_tab);
/** destroy previously created gui window */
- void (*window_destroy)(struct gui_window *g);
+ void (*destroy)(struct gui_window *g);
/* Optional entries */
- /** called to allow the gui to cleanup */
- void (*quit)(void);
-
/** set the window title. */
- void (*window_set_title)(struct gui_window *g, const char *title);
+ void (*set_title)(struct gui_window *g, const char *title);
/** set the navigation url. */
- void (*window_set_url)(struct gui_window *g, const char *url);
+ void (*set_url)(struct gui_window *g, const char *url);
/** start the navigation throbber. */
- void (*window_start_throbber)(struct gui_window *g);
+ void (*start_throbber)(struct gui_window *g);
/** stop the navigation throbber. */
- void (*window_stop_throbber)(struct gui_window *g);
+ void (*stop_throbber)(struct gui_window *g);
+ /** start a drag operation within a window */
+ bool (*drag_start)(struct gui_window *g, gui_drag_type type, const struct rect *rect);
+
+ /** save link operation */
+ void (*save_link)(struct gui_window *g, const char *url, const char *title);
+
+ /** set favicon */
+ void (*set_icon)(struct gui_window *g, hlcache_handle *icon);
+};
+
+/** Graphical user interface function table
+ *
+ * function table implementing GUI interface to browser core
+ */
+struct gui_table {
+
+ /* Mandantory entries */
+
+ /* sub tables */
+ struct gui_window_table *window; /* window sub table */
+
+ /** called to let the frontend update its state and run any
+ * I/O operations.
+ */
+ void (*poll)(bool active);
+
+
+ /* Optional entries */
+
+ /** called to allow the gui to cleanup */
+ void (*quit)(void);
+
+ /**
+ * set gui display of a retrieved favicon representing the
+ * search provider
+ *
+ * \param ico may be NULL for local calls; then access current
+ * cache from search_web_ico()
+ */
+ void (*set_search_ico)(hlcache_handle *ico);
};
extern struct gui_table *guit; /* the gui vtable */
@@ -119,19 +151,12 @@ void gui_window_update_extent(struct gui_window *g);
void gui_window_set_status(struct gui_window *g, const char *text);
void gui_window_set_pointer(struct gui_window *g, gui_pointer_shape shape);
void gui_window_hide_pointer(struct gui_window *g);
-void gui_window_set_icon(struct gui_window *g, hlcache_handle *icon);
-void gui_window_set_search_ico(hlcache_handle *ico);
void gui_window_place_caret(struct gui_window *g, int x, int y, int height,
const struct rect *clip);
void gui_window_remove_caret(struct gui_window *g);
void gui_window_new_content(struct gui_window *g);
bool gui_window_scroll_start(struct gui_window *g);
-bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
- const struct rect *rect);
-
-void gui_window_save_link(struct gui_window *g, const char *url,
- const char *title);
struct gui_download_window *gui_download_window_create(download_context *ctx,
struct gui_window *parent);
@@ -150,6 +175,8 @@ void gui_clear_selection(struct gui_window *g);
void gui_file_gadget_open(struct gui_window *g, hlcache_handle *hl,
struct form_control *gadget);
+void gui_launch_url(const char *url);
+
/**
* Core asks front end for clipboard contents.
*
@@ -179,7 +206,6 @@ void gui_set_clipboard(const char *buffer, size_t length,
void gui_create_form_select_menu(struct browser_window *bw,
struct form_control *control);
-void gui_launch_url(const char *url);
struct ssl_cert_info;
diff --git a/desktop/gui_factory.c b/desktop/gui_factory.c
index c760218ec..3ced1901f 100644
--- a/desktop/gui_factory.c
+++ b/desktop/gui_factory.c
@@ -25,41 +25,104 @@ static void gui_default_window_stop_throbber(struct gui_window *g)
{
}
+static bool
+gui_default_window_drag_start(struct gui_window *g,
+ gui_drag_type type,
+ const struct rect *rect)
+{
+ return true;
+}
+
+static void
+gui_default_window_save_link(struct gui_window *g,
+ const char *url,
+ const char *title)
+{
+}
+
+static void
+gui_default_window_set_icon(struct gui_window *g, hlcache_handle *icon)
+{
+}
+
+static void
+gui_default_set_search_ico(hlcache_handle *ico)
+{
+}
+
+/** verify window table is valid */
+static nserror verify_window_register(struct gui_window_table *gwt)
+{
+ /* check table is present */
+ if (gwt == NULL) {
+ return NSERROR_BAD_PARAMETER;
+ }
+
+ /* check the mandantory fields are set */
+ if (gwt->create == NULL) {
+ return NSERROR_BAD_PARAMETER;
+ }
+ if (gwt->destroy == NULL) {
+ return NSERROR_BAD_PARAMETER;
+ }
+
+ /* fill in the optional entries with defaults */
+ if (gwt->set_title == NULL) {
+ gwt->set_title = gui_default_window_set_title;
+ }
+ if (gwt->set_url == NULL) {
+ gwt->set_url = gui_default_window_set_url;
+ }
+ if (gwt->start_throbber == NULL) {
+ gwt->start_throbber = gui_default_window_start_throbber;
+ }
+ if (gwt->stop_throbber == NULL) {
+ gwt->stop_throbber = gui_default_window_stop_throbber;
+ }
+ if (gwt->drag_start == NULL) {
+ gwt->drag_start = gui_default_window_drag_start;
+ }
+ if (gwt->save_link == NULL) {
+ gwt->save_link = gui_default_window_save_link;
+ }
+ if (gwt->set_icon == NULL) {
+ gwt->set_icon = gui_default_window_set_icon;
+ }
+
+ return NSERROR_OK;
+}
+
nserror gui_factory_register(struct gui_table *gt)
{
+ nserror err;
+
/* ensure not already initialised */
if (guit != NULL) {
return NSERROR_INIT_FAILED;
}
-
- /* check the mandantory fields are set */
- if (gt->poll == NULL) {
+ /* check table is present */
+ if (gt == NULL) {
return NSERROR_BAD_PARAMETER;
}
- if (gt->window_create == NULL) {
- return NSERROR_BAD_PARAMETER;
+
+ /* check subtables */
+ err = verify_window_register(gt->window);
+ if (err != NSERROR_OK) {
+ return err;
}
- if (gt->window_destroy == NULL) {
+
+ /* check the mandantory fields are set */
+ if (gt->poll == NULL) {
return NSERROR_BAD_PARAMETER;
}
-
/* fill in the optional entries with defaults */
if (gt->quit == NULL) {
gt->quit = gui_default_quit;
}
- if (gt->window_set_title == NULL) {
- gt->window_set_title = gui_default_window_set_title;
- }
- if (gt->window_set_url == NULL) {
- gt->window_set_url = gui_default_window_set_url;
- }
- if (gt->window_start_throbber == NULL) {
- gt->window_start_throbber = gui_default_window_start_throbber;
- }
- if (gt->window_stop_throbber == NULL) {
- gt->window_stop_throbber = gui_default_window_stop_throbber;
+ if (gt->set_search_ico == NULL) {
+ gt->set_search_ico = gui_default_set_search_ico;
}
guit = gt;
diff --git a/desktop/searchweb.c b/desktop/searchweb.c
index 4c050d97a..321edd0b6 100644
--- a/desktop/searchweb.c
+++ b/desktop/searchweb.c
@@ -307,7 +307,7 @@ nserror search_web_ico_callback(hlcache_handle *ico,
case CONTENT_MSG_DONE:
LOG(("got favicon '%s'", nsurl_access(hlcache_handle_get_url(ico))));
- gui_window_set_search_ico(search_ico);
+ guit->set_search_ico(search_ico);
break;
case CONTENT_MSG_ERROR:
diff --git a/framebuffer/gui.c b/framebuffer/gui.c
index 5a903c31e..c9a0d311e 100644
--- a/framebuffer/gui.c
+++ b/framebuffer/gui.c
@@ -1788,35 +1788,6 @@ gui_window_scroll_start(struct gui_window *g)
return true;
}
-bool
-gui_window_drag_start(struct gui_window *g, gui_drag_type type,
- const struct rect *rect)
-{
- return true;
-}
-
-void
-gui_window_save_link(struct gui_window *g, const char *url, const char *title)
-{
-}
-
-/**
- * set favicon
- */
-void
-gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
-{
-}
-
-/**
- * set gui display of a retrieved favicon representing the search provider
- * \param ico may be NULL for local calls; then access current cache from
- * search_web_ico()
- */
-void
-gui_window_set_search_ico(hlcache_handle *ico)
-{
-}
struct gui_download_window *
gui_download_window_create(download_context *ctx, struct gui_window *parent)
@@ -1893,17 +1864,20 @@ void gui_file_gadget_open(struct gui_window *g, hlcache_handle *hl,
/* browser_window_set_gadget_filename(bw, gadget, "filename"); */
}
+static struct gui_window_table framebuffer_gui_window_table = {
+ .create = gui_window_create,
+ .destroy = gui_window_destroy,
+
+ .set_url = gui_window_set_url,
+ .start_throbber = gui_window_start_throbber,
+ .stop_throbber = gui_window_stop_throbber,
+};
static struct gui_table framebuffer_gui_table = {
.poll = gui_poll,
.quit = gui_quit,
- .window_create = gui_window_create,
- .window_destroy = gui_window_destroy,
-
- .window_set_url = gui_window_set_url,
- .window_start_throbber = gui_window_start_throbber,
- .window_stop_throbber = gui_window_stop_throbber,
+ .window = &framebuffer_gui_window_table,
};
/** Entry point from OS.
diff --git a/gtk/dialogs/preferences.c b/gtk/dialogs/preferences.c
index 0669f8d9f..18c8d7b6c 100644
--- a/gtk/dialogs/preferences.c
+++ b/gtk/dialogs/preferences.c
@@ -944,9 +944,7 @@ nsgtk_preferences_comboSearch_changed(GtkComboBox *widget, struct ppref *priv)
search_web_retrieve_ico(false);
/* callback may handle changing gui */
- if (search_web_ico() != NULL) {
- gui_window_set_search_ico(search_web_ico());
- }
+ gui_set_search_ico(search_web_ico());
/* set entry */
name = search_web_provider_name();
diff --git a/gtk/gui.c b/gtk/gui.c
index 1905f20dc..0a89f0ee3 100644
--- a/gtk/gui.c
+++ b/gtk/gui.c
@@ -676,11 +676,6 @@ void gui_create_form_select_menu(struct browser_window *bw,
}
-void gui_window_save_link(struct gui_window *g, const char *url,
- const char *title)
-{
-}
-
void gui_launch_url(const char *url)
{
gboolean ok;
@@ -1132,17 +1127,11 @@ bool path_add_part(char *path, int length, const char *newpart)
}
+
static struct gui_table nsgtk_gui_table = {
.poll = gui_poll,
.quit = gui_quit,
-
- .window_create = gui_window_create,
- .window_destroy = gui_window_destroy,
-
- .window_set_title = gui_window_set_title,
- .window_set_url = gui_window_set_url,
- .window_start_throbber = gui_window_start_throbber,
- .window_stop_throbber = gui_window_stop_throbber,
+ .set_search_ico = gui_set_search_ico,
};
/**
@@ -1181,6 +1170,9 @@ int main(int argc, char** argv)
/* common initialisation */
messages = filepath_find(respaths, "Messages");
+
+ nsgtk_gui_table.window = nsgtk_gui_window_table;
+
ret = netsurf_init(messages, &nsgtk_gui_table);
free(messages);
if (ret != NSERROR_OK) {
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index b39283cc6..098d5e121 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -2147,8 +2147,7 @@ nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
nsgtk_theme_implement(g);
/* set web search ico */
- if (search_web_ico() != NULL)
- gui_window_set_search_ico(search_web_ico());
+ gui_set_search_ico(search_web_ico());
/* finally, show the window. */
gtk_widget_show(GTK_WIDGET(g->window));
@@ -2261,7 +2260,7 @@ nsgtk_scaffolding_set_icon(struct gui_window *gw)
gtk_widget_show_all(GTK_WIDGET(sc->buttons[URL_BAR_ITEM]->button));
}
-void gui_window_set_search_ico(hlcache_handle *ico)
+void gui_set_search_ico(hlcache_handle *ico)
{
struct bitmap *srch_bitmap;
nsgtk_scaffolding *current;
diff --git a/gtk/scaffolding.h b/gtk/scaffolding.h
index b1f11bbdf..43eb41b19 100644
--- a/gtk/scaffolding.h
+++ b/gtk/scaffolding.h
@@ -182,6 +182,6 @@ void gui_window_set_title(struct gui_window *g, const char *title);
void gui_window_set_url(struct gui_window *g, const char *url);
void gui_window_start_throbber(struct gui_window *g);
void gui_window_stop_throbber(struct gui_window *g);
-
+void gui_set_search_ico(hlcache_handle *ico);
#endif /* NETSURF_GTK_SCAFFOLDING_H */
diff --git a/gtk/toolbar.c b/gtk/toolbar.c
index d543ca5fd..8453f4e27 100644
--- a/gtk/toolbar.c
+++ b/gtk/toolbar.c
@@ -449,8 +449,8 @@ void nsgtk_toolbar_close(nsgtk_scaffolding *g)
TRUE);
/* update favicon etc */
nsgtk_scaffolding_set_top_level(nsgtk_scaffolding_top_level(g));
- if (search_web_ico())
- gui_window_set_search_ico(search_web_ico());
+
+ gui_set_search_ico(search_web_ico());
}
/**
diff --git a/gtk/window.c b/gtk/window.c
index aabaacbb8..075678cb0 100644
--- a/gtk/window.c
+++ b/gtk/window.c
@@ -656,7 +656,7 @@ static void window_destroy(GtkWidget *widget, gpointer data)
}
/* Core interface documented in desktop/gui.h to create a gui_window */
-struct gui_window *
+static struct gui_window *
gui_window_create(struct browser_window *bw,
struct browser_window *clone,
bool new_tab)
@@ -838,7 +838,7 @@ void nsgtk_window_destroy_browser(struct gui_window *gw)
gtk_widget_destroy(gw->container);
}
-void gui_window_destroy(struct gui_window *g)
+static void gui_window_destroy(struct gui_window *g)
{
LOG(("gui_window: %p", g));
assert(g != NULL);
@@ -861,7 +861,7 @@ void gui_window_destroy(struct gui_window *g)
/**
* set favicon
*/
-void gui_window_set_icon(struct gui_window *gw, hlcache_handle *icon)
+static void gui_window_set_icon(struct gui_window *gw, hlcache_handle *icon)
{
struct bitmap *icon_bitmap = NULL;
@@ -1128,11 +1128,6 @@ bool gui_window_scroll_start(struct gui_window *g)
return true;
}
-bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
- const struct rect *rect)
-{
- return true;
-}
void gui_drag_save_object(gui_save_type type, hlcache_handle *c,
struct gui_window *g)
@@ -1195,3 +1190,18 @@ void gui_file_gadget_open(struct gui_window *g, hlcache_handle *hl,
gtk_widget_destroy(dialog);
}
+
+static struct gui_window_table gui_window_table = {
+ .create = gui_window_create,
+ .destroy = gui_window_destroy,
+
+ .set_icon = gui_window_set_icon,
+
+ /* from scaffold */
+ .set_title = gui_window_set_title,
+ .set_url = gui_window_set_url,
+ .start_throbber = gui_window_start_throbber,
+ .stop_throbber = gui_window_stop_throbber,
+};
+
+struct gui_window_table *nsgtk_gui_window_table = &gui_window_table;
diff --git a/gtk/window.h b/gtk/window.h
index 9ff036e85..b6953a99e 100644
--- a/gtk/window.h
+++ b/gtk/window.h
@@ -32,7 +32,7 @@ typedef enum nsgtk_window_signals {
extern struct gui_window *window_list;
extern int temp_open_background;
-
+extern struct gui_window_table *nsgtk_gui_window_table;
struct browser_window *nsgtk_get_browser_window(struct gui_window *g);
nsgtk_scaffolding *nsgtk_get_scaffold(struct gui_window *g);
@@ -48,7 +48,4 @@ struct gui_window *nsgtk_window_iterate(struct gui_window *g);
GtkWidget *nsgtk_window_get_tab(struct gui_window *g);
void nsgtk_window_set_tab(struct gui_window *g, GtkWidget *w);
-struct gui_window *gui_window_create(struct browser_window *bw, struct browser_window *clone, bool new_tab);
-void gui_window_destroy(struct gui_window *g);
-
#endif /* NETSURF_GTK_WINDOW_H */
diff --git a/monkey/browser.c b/monkey/browser.c
index b9e583c1f..ed0398142 100644
--- a/monkey/browser.c
+++ b/monkey/browser.c
@@ -87,7 +87,7 @@ monkey_kill_browser_windows(void)
}
}
-struct gui_window *
+static struct gui_window *
gui_window_create(struct browser_window *bw,
struct browser_window *clone,
bool new_tab)
@@ -112,7 +112,7 @@ gui_window_create(struct browser_window *bw,
return ret;
}
-void
+static void
gui_window_destroy(struct gui_window *g)
{
fprintf(stdout, "WINDOW DESTROY WIN %u\n", g->win_num);
@@ -120,7 +120,7 @@ gui_window_destroy(struct gui_window *g)
free(g);
}
-void
+static void
gui_window_set_title(struct gui_window *g, const char *title)
{
fprintf(stdout, "WINDOW TITLE WIN %u STR %s\n", g->win_num, title);
@@ -148,19 +148,19 @@ gui_window_new_content(struct gui_window *g)
fprintf(stdout, "WINDOW NEW_CONTENT WIN %u\n", g->win_num);
}
-void
+static void
gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
{
fprintf(stdout, "WINDOW NEW_ICON WIN %u\n", g->win_num);
}
-void
+static void
gui_window_start_throbber(struct gui_window *g)
{
fprintf(stdout, "WINDOW START_THROBBER WIN %u\n", g->win_num);
}
-void
+static void
gui_window_stop_throbber(struct gui_window *g)
{
fprintf(stdout, "WINDOW STOP_THROBBER WIN %u\n", g->win_num);
@@ -270,7 +270,7 @@ gui_window_set_pointer(struct gui_window *g, gui_pointer_shape shape)
fprintf(stdout, "WINDOW SET_POINTER WIN %u POINTER %s\n", g->win_num, ptr_name);
}
-void
+static void
gui_window_set_url(struct gui_window *g, const char *url)
{
fprintf(stdout, "WINDOW SET_URL WIN %u URL %s\n", g->win_num, url);
@@ -302,11 +302,6 @@ gui_window_scroll_start(struct gui_window *g)
}
void
-gui_window_set_search_ico(hlcache_handle *ico)
-{
-}
-
-void
gui_window_scroll_visible(struct gui_window *g, int x0, int y0,
int x1, int y1)
{
@@ -367,7 +362,7 @@ gui_window_remove_caret(struct gui_window *g)
fprintf(stdout, "WINDOW REMOVE_CARET WIN %u\n", g->win_num);
}
-bool
+static bool
gui_window_drag_start(struct gui_window *g, gui_drag_type type,
const struct rect *rect)
{
@@ -383,7 +378,7 @@ gui_create_form_select_menu(struct browser_window *bw,
bw->window->win_num);
}
-void
+static void
gui_window_save_link(struct gui_window *g, const char *url,
const char *title)
{
@@ -567,3 +562,19 @@ monkey_window_handle_command(int argc, char **argv)
}
}
+
+static struct gui_window_table gui_window_table = {
+ .create = gui_window_create,
+ .destroy = gui_window_destroy,
+
+ .set_title = gui_window_set_title,
+ .set_url = gui_window_set_url,
+ .set_icon = gui_window_set_icon,
+
+ .drag_start = gui_window_drag_start,
+ .save_link = gui_window_save_link,
+ .start_throbber = gui_window_start_throbber,
+ .stop_throbber = gui_window_stop_throbber,
+};
+
+struct gui_window_table *monkey_gui_window_table = &gui_window_table;
diff --git a/monkey/browser.h b/monkey/browser.h
index ab4e59bbb..892c615ab 100644
--- a/monkey/browser.h
+++ b/monkey/browser.h
@@ -36,6 +36,8 @@ struct gui_window {
};
+extern struct gui_window_table *monkey_gui_window_table;
+
struct gui_window *monkey_find_window_by_num(uint32_t win_num);
struct gui_window *monkey_find_window_by_content(hlcache_handle *content);
void monkey_window_process_reformats(void);
@@ -43,12 +45,4 @@ void monkey_window_process_reformats(void);
void monkey_window_handle_command(int argc, char **argv);
void monkey_kill_browser_windows(void);
-
-struct gui_window *gui_window_create(struct browser_window *bw, struct browser_window *clone, bool new_tab);
-void gui_window_destroy(struct gui_window *g);
-void gui_window_set_title(struct gui_window *g, const char *title);
-void gui_window_set_url(struct gui_window *g, const char *url);
-void gui_window_start_throbber(struct gui_window *g);
-void gui_window_stop_throbber(struct gui_window *g);
-
#endif /* NETSURF_MONKEY_BROWSER_H */
diff --git a/monkey/main.c b/monkey/main.c
index 73803f536..c6aa60f10 100644
--- a/monkey/main.c
+++ b/monkey/main.c
@@ -116,14 +116,6 @@ static bool nslog_stream_configure(FILE *fptr)
static struct gui_table monkey_gui_table = {
.poll = monkey_poll,
.quit = monkey_quit,
-
- .window_create = gui_window_create,
- .window_destroy = gui_window_destroy,
-
- .window_set_title = gui_window_set_title,
- .window_set_url = gui_window_set_url,
- .window_start_throbber = gui_window_start_throbber,
- .window_stop_throbber = gui_window_stop_throbber,
};
int
@@ -159,6 +151,9 @@ main(int argc, char **argv)
/* common initialisation */
messages = filepath_find(respaths, "Messages");
+
+ monkey_gui_table.window = monkey_gui_window_table;
+
ret = netsurf_init(messages, &monkey_gui_table);
free(messages);
if (ret != NSERROR_OK) {
diff --git a/riscos/gui.c b/riscos/gui.c
index ee4c59105..2854744df 100644
--- a/riscos/gui.c
+++ b/riscos/gui.c
@@ -840,14 +840,6 @@ static bool nslog_stream_configure(FILE *fptr)
static struct gui_table riscos_gui_table = {
.poll = gui_poll,
.quit = gui_quit,
-
- .window_create = gui_window_create,
- .window_destroy = gui_window_destroy,
-
- .window_set_title = gui_window_set_title,
- .window_set_url = gui_window_set_url,
- .window_start_throbber = gui_window_start_throbber,
- .window_stop_throbber = gui_window_stop_throbber,
};
@@ -905,6 +897,8 @@ int main(int argc, char** argv)
}
/* common initialisation */
+ riscos_gui_table.window = riscos_gui_window_table;
+
ret = netsurf_init(path, &riscos_gui_table);
if (ret != NSERROR_OK) {
die("NetSurf failed to initialise");
diff --git a/riscos/window.c b/riscos/window.c
index 892c24e1d..7285cbc90 100644
--- a/riscos/window.c
+++ b/riscos/window.c
@@ -379,7 +379,7 @@ void ro_gui_window_initialise(void)
* \return gui_window, or 0 on error and error reported
*/
-struct gui_window *gui_window_create(struct browser_window *bw,
+static struct gui_window *gui_window_create(struct browser_window *bw,
struct browser_window *clone, bool new_tab)
{
int screen_width, screen_height, win_width, win_height, scroll_width;
@@ -600,7 +600,7 @@ struct gui_window *gui_window_create(struct browser_window *bw,
* \param g gui_window to destroy
*/
-void gui_window_destroy(struct gui_window *g)
+static void gui_window_destroy(struct gui_window *g)
{
os_error *error;
wimp_w w;
@@ -651,7 +651,7 @@ void gui_window_destroy(struct gui_window *g)
* \param title new window title, copied
*/
-void gui_window_set_title(struct gui_window *g, const char *title)
+static void gui_window_set_title(struct gui_window *g, const char *title)
{
int scale_disp;
@@ -1061,7 +1061,7 @@ void gui_window_hide_pointer(struct gui_window *g)
* \param url new url for address bar
*/
-void gui_window_set_url(struct gui_window *g, const char *url)
+static void gui_window_set_url(struct gui_window *g, const char *url)
{
if (!g->toolbar)
return;
@@ -1077,7 +1077,7 @@ void gui_window_set_url(struct gui_window *g, const char *url)
* \param g window with start of load
*/
-void gui_window_start_throbber(struct gui_window *g)
+static void gui_window_start_throbber(struct gui_window *g)
{
ro_gui_window_update_toolbar_buttons(g);
ro_gui_menu_refresh(ro_gui_browser_window_menu);
@@ -1093,7 +1093,7 @@ void gui_window_start_throbber(struct gui_window *g)
* \param g window with start of load
*/
-void gui_window_stop_throbber(struct gui_window *g)
+static void gui_window_stop_throbber(struct gui_window *g)
{
ro_gui_window_update_toolbar_buttons(g);
ro_gui_menu_refresh(ro_gui_browser_window_menu);
@@ -1105,7 +1105,7 @@ void gui_window_stop_throbber(struct gui_window *g)
* set favicon
*/
-void gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
+static void gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
{
if (g == NULL || g->toolbar == NULL)
return;
@@ -1114,15 +1114,6 @@ void gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
}
/**
-* set gui display of a retrieved favicon representing the search provider
-* \param ico may be NULL for local calls; then access current cache from
-* search_web_ico()
-*/
-void gui_window_set_search_ico(hlcache_handle *ico)
-{
-}
-
-/**
* Place the caret in a browser window.
*
* \param g window with caret
@@ -1260,7 +1251,7 @@ bool gui_window_scroll_start(struct gui_window *g)
* \return true iff succesful
*/
-bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
+static bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
const struct rect *rect)
{
wimp_pointer pointer;
@@ -1319,7 +1310,7 @@ bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
* \param g gui_window containing the content
* \param c the content to save
*/
-void gui_window_save_link(struct gui_window *g, const char *url,
+static void gui_window_save_link(struct gui_window *g, const char *url,
const char *title)
{
ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL, url, title);
@@ -5264,3 +5255,19 @@ bool ro_gui_alt_pressed(void)
xosbyte1(osbyte_SCAN_KEYBOARD, 2 ^ 0x80, 0, &alt);
return (alt == 0xff);
}
+
+static struct gui_window_table gui_window_table = {
+ .create = gui_window_create,
+ .destroy = gui_window_destroy,
+
+ .set_icon = gui_window_set_icon,
+ .set_title = gui_window_set_title,
+ .set_url = gui_window_set_url,
+
+ .save_link = gui_window_save_link,
+ .drag_start = gui_window_drag_start,
+ .start_throbber = gui_window_start_throbber,
+ .stop_throbber = gui_window_stop_throbber,
+};
+
+struct gui_window_table *riscos_gui_window_table = &gui_window_table;
diff --git a/riscos/window.h b/riscos/window.h
index 8614ce0d2..679fa9801 100644
--- a/riscos/window.h
+++ b/riscos/window.h
@@ -25,19 +25,11 @@
#ifndef _NETSURF_RISCOS_WINDOW_H_
#define _NETSURF_RISCOS_WINDOW_H_
+extern struct gui_window_table *riscos_gui_window_table;
+
void ro_gui_window_initialise(void);
bool ro_gui_window_check_menu(wimp_menu *menu);
-/* core acessors */
-struct gui_window *gui_window_create(struct browser_window *bw, struct browser_window *clone, bool new_tab);
-void gui_window_destroy(struct gui_window *g);
-
-void gui_window_set_title(struct gui_window *g, const char *title);
-void gui_window_set_url(struct gui_window *g, const char *url);
-void gui_window_start_throbber(struct gui_window *g);
-void gui_window_stop_throbber(struct gui_window *g);
-
-
#endif
diff --git a/windows/gui.c b/windows/gui.c
index 6f0dfd874..74ad173ee 100644
--- a/windows/gui.c
+++ b/windows/gui.c
@@ -1737,15 +1737,6 @@ gui_window_remove_caret(struct gui_window *w)
HideCaret(w->drawingarea);
}
-void
-gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
-{
-}
-
-void
-gui_window_set_search_ico(hlcache_handle *ico)
-{
-}
void gui_window_new_content(struct gui_window *w)
{
@@ -1756,16 +1747,6 @@ bool gui_window_scroll_start(struct gui_window *w)
return true;
}
-bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
- const struct rect *rect)
-{
- return true;
-}
-
-void gui_window_save_link(struct gui_window *g, const char *url,
- const char *title)
-{
-}
void gui_drag_save_object(gui_save_type type, hlcache_handle *c,
struct gui_window *w)
@@ -1884,16 +1865,21 @@ nsws_create_main_class(HINSTANCE hinstance) {
return ret;
}
+static struct gui_window_table win32_window_table = {
+ .create = gui_window_create,
+ .destroy = gui_window_destroy,
+
+ .set_title = gui_window_set_title,
+ .set_url = gui_window_set_url,
+
+ .start_throbber = gui_window_start_throbber,
+ .stop_throbber = gui_window_stop_throbber,
+};
+
static struct gui_table gui_table = {
.poll = gui_poll,
- .window_create = gui_window_create,
- .window_destroy = gui_window_destroy,
-
- .window_set_title = gui_window_set_title,
- .window_set_url = gui_window_set_url,
- .window_start_throbber = gui_window_start_throbber,
- .window_stop_throbber = gui_window_stop_throbber,
+ .window = &win32_window_table,
};
struct gui_table *win32_gui_table = &gui_table;