mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-11-28 09:13:08 +03:00
3f5d902edd
svn://svn.netsurf-browser.org/branches/vince/netsurf-fb ........ r5309 | vince | 2008-09-13 10:59:10 +0100 (Sat, 13 Sep 2008) | 2 lines first stab at framebuffer frontend ........ r5313 | vince | 2008-09-14 15:08:52 +0100 (Sun, 14 Sep 2008) | 2 lines add line plotters ........ r5314 | vince | 2008-09-14 15:28:12 +0100 (Sun, 14 Sep 2008) | 2 lines add rectangle plot to 16bpp plotters ........ r5315 | vince | 2008-09-14 19:58:57 +0100 (Sun, 14 Sep 2008) | 2 lines improve 16bpp image plot ........ r5316 | vince | 2008-09-15 00:35:32 +0100 (Mon, 15 Sep 2008) | 2 lines abstract the os specific framebuffer init ........ r5317 | vince | 2008-09-15 11:18:51 +0100 (Mon, 15 Sep 2008) | 2 lines first cut of linux frontend ........ r5318 | vince | 2008-09-15 12:01:00 +0100 (Mon, 15 Sep 2008) | 2 lines remove junk includes ........ r5319 | vince | 2008-09-15 12:09:02 +0100 (Mon, 15 Sep 2008) | 2 lines make plotters OS agnostic again ........ r5322 | vince | 2008-09-15 15:55:01 +0100 (Mon, 15 Sep 2008) | 2 lines Linux frontend operates ........ r5323 | vince | 2008-09-15 16:32:47 +0100 (Mon, 15 Sep 2008) | 2 lines abstract out OS specific input ........ r5326 | vince | 2008-09-15 19:21:01 +0100 (Mon, 15 Sep 2008) | 2 lines Improve linux mode setting ........ r5329 | vince | 2008-09-15 21:13:33 +0100 (Mon, 15 Sep 2008) | 2 lines improve text clipping ........ r5339 | vince | 2008-09-16 00:07:57 +0100 (Tue, 16 Sep 2008) | 2 lines possibly fix text clipping issue ........ r5342 | vince | 2008-09-16 00:39:36 +0100 (Tue, 16 Sep 2008) | 2 lines consolidate polygon plotters ........ r5344 | dsilvers | 2008-09-16 10:21:06 +0100 (Tue, 16 Sep 2008) | 1 line Fix up the framebuffer target makefile a bit more, add some config options for it ........ r5345 | dsilvers | 2008-09-16 10:22:19 +0100 (Tue, 16 Sep 2008) | 1 line Ensure the appropriate frontend is selected when building framebuffer ........ r5346 | dsilvers | 2008-09-16 10:27:16 +0100 (Tue, 16 Sep 2008) | 1 line Update build system to support targetting separate framebuffer frontends in different build trees, update executable to be nsfb-blah ........ r5350 | vince | 2008-09-16 17:15:04 +0100 (Tue, 16 Sep 2008) | 1 line Add -g to provide symbols for framebuffer link ........ r5351 | vince | 2008-09-16 17:17:09 +0100 (Tue, 16 Sep 2008) | 1 line framebuffer scheduler now works, plotters tweaked, gui tracks window redraw requirements better, keypresses not duplicated under linux fb ........ r5352 | dsilvers | 2008-09-16 17:38:53 +0100 (Tue, 16 Sep 2008) | 1 line Ensure we only allow one fetcher at a time ........ r5361 | vince | 2008-09-17 11:48:44 +0100 (Wed, 17 Sep 2008) | 2 lines initial cursor support ........ r5362 | vince | 2008-09-17 13:56:47 +0100 (Wed, 17 Sep 2008) | 2 lines add mouse handling ........ r5363 | vince | 2008-09-17 14:14:44 +0100 (Wed, 17 Sep 2008) | 2 lines add framebuffer resources ........ r5364 | vince | 2008-09-17 17:12:21 +0100 (Wed, 17 Sep 2008) | 2 lines add reasonable pointer ........ r5366 | vince | 2008-09-17 17:17:25 +0100 (Wed, 17 Sep 2008) | 2 lines fix pointer alpha ........ r5370 | vince | 2008-09-18 13:43:53 +0100 (Thu, 18 Sep 2008) | 2 lines warning squash and cleanup ready for trunk merge ........ r5375 | vince | 2008-09-19 14:58:43 +0100 (Fri, 19 Sep 2008) | 2 lines Working mouse navigation ........ r5377 | vince | 2008-09-20 14:06:22 +0100 (Sat, 20 Sep 2008) | 2 lines Improve scrolling ........ r5378 | vince | 2008-09-20 14:46:46 +0100 (Sat, 20 Sep 2008) | 2 lines fix redraw issues with scrolling ........ r5380 | vince | 2008-09-20 17:08:43 +0100 (Sat, 20 Sep 2008) | 3 lines Alter panning to use its own flag so it doesnt cause invalid redraw operations ........ r5381 | vince | 2008-09-20 21:52:45 +0100 (Sat, 20 Sep 2008) | 2 lines add dummy framebuffer ........ r5383 | vince | 2008-09-21 00:00:15 +0100 (Sun, 21 Sep 2008) | 2 lines fix segfault when cursor is off teh bottom of teh screen ........ r5384 | vince | 2008-09-21 00:06:08 +0100 (Sun, 21 Sep 2008) | 2 lines fix off by one in pointer fix ........ r5385 | vince | 2008-09-21 00:25:09 +0100 (Sun, 21 Sep 2008) | 2 lines when fixing bloody silly off by one errors remember to fix *both* references ........ r5387 | vince | 2008-09-21 00:38:13 +0100 (Sun, 21 Sep 2008) | 2 lines last try at stopping the pointer segfault ........ r5388 | vince | 2008-09-21 16:24:18 +0100 (Sun, 21 Sep 2008) | 2 lines improve vertical text clipping ........ r5392 | vince | 2008-09-21 23:11:51 +0100 (Sun, 21 Sep 2008) | 2 lines Improve text plotters ........ r5393 | vince | 2008-09-21 23:34:38 +0100 (Sun, 21 Sep 2008) | 2 lines fix 32bpp line plotting ........ r5394 | vince | 2008-09-22 00:00:03 +0100 (Mon, 22 Sep 2008) | 2 lines Fix off by one error in line plotting clipping ........ r5397 | vince | 2008-09-22 13:46:22 +0100 (Mon, 22 Sep 2008) | 2 lines Fix bitmap tileing ........ r5398 | vince | 2008-09-22 17:46:02 +0100 (Mon, 22 Sep 2008) | 2 lines enable knockout renderer ........ r5399 | vince | 2008-09-22 18:43:48 +0100 (Mon, 22 Sep 2008) | 2 lines ensure clipping region lies within window, caused by knockout renderer ........ r5400 | vince | 2008-09-22 19:20:25 +0100 (Mon, 22 Sep 2008) | 2 lines update cursor to one swiped from X windows ........ r5405 | vince | 2008-09-23 09:09:05 +0100 (Tue, 23 Sep 2008) | 2 lines fix vertical scroll limit ........ r5412 | dsilvers | 2008-09-23 10:53:14 +0100 (Tue, 23 Sep 2008) | 1 line Revert noisy fetcher patch ........ r5413 | dsilvers | 2008-09-23 10:58:00 +0100 (Tue, 23 Sep 2008) | 1 line Add header guards ........ r5414 | dsilvers | 2008-09-23 11:31:31 +0100 (Tue, 23 Sep 2008) | 1 line Tidy the region clipping slightly ........ r5416 | dsilvers | 2008-09-23 12:05:00 +0100 (Tue, 23 Sep 2008) | 1 line Rationalise how the framebuffer frontend finds resources and options ........ r5418 | dsilvers | 2008-09-23 13:59:00 +0100 (Tue, 23 Sep 2008) | 1 line Ensure options are overridden after load, and squash an fb_gui.c warning ........ r5419 | dsilvers | 2008-09-23 14:20:07 +0100 (Tue, 23 Sep 2008) | 1 line Support fb_mode and fb_device options ........ r5420 | dsilvers | 2008-09-23 14:21:48 +0100 (Tue, 23 Sep 2008) | 1 line Support option_fb_device in the able frontend ........ r5421 | dsilvers | 2008-09-23 14:25:17 +0100 (Tue, 23 Sep 2008) | 1 line Ensure target_blank is disabled ........ r5422 | dsilvers | 2008-09-23 14:39:00 +0100 (Tue, 23 Sep 2008) | 1 line Rework linux fb frontend to support scanning and opening all event devices for input ........ svn path=/trunk/netsurf/; revision=5423
555 lines
12 KiB
C
555 lines
12 KiB
C
/*
|
|
* Copyright 2008 Vincent Sanders <vince@simtec.co.uk>
|
|
*
|
|
* 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/>.
|
|
*/
|
|
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <fcntl.h>
|
|
#include <sys/ioctl.h>
|
|
#include <unistd.h>
|
|
|
|
#include "desktop/gui.h"
|
|
#include "desktop/plotters.h"
|
|
#include "desktop/netsurf.h"
|
|
#include "desktop/options.h"
|
|
#include "utils/log.h"
|
|
#include "utils/messages.h"
|
|
|
|
#include "framebuffer/fb_bitmap.h"
|
|
#include "framebuffer/fb_gui.h"
|
|
#include "framebuffer/fb_frontend.h"
|
|
#include "framebuffer/fb_plotters.h"
|
|
#include "framebuffer/fb_schedule.h"
|
|
#include "framebuffer/fb_cursor.h"
|
|
#include "framebuffer/fb_findfile.h"
|
|
|
|
#include "content/urldb.h"
|
|
#include "desktop/history_core.h"
|
|
#include "content/fetch.h"
|
|
|
|
char *default_stylesheet_url;
|
|
char *adblock_stylesheet_url;
|
|
struct gui_window *input_window = NULL;
|
|
struct gui_window *search_current_window;
|
|
struct gui_window *window_list = NULL;
|
|
|
|
bool redraws_pending = false;
|
|
|
|
framebuffer_t *framebuffer;
|
|
|
|
static void fb_queue_redraw(struct gui_window *g, int x0, int y0, int x1, int y1);
|
|
|
|
static void fb_pan(struct gui_window *g)
|
|
{
|
|
struct content *c;
|
|
|
|
if (!g)
|
|
return;
|
|
|
|
c = g->bw->current_content;
|
|
|
|
if (!c) return;
|
|
if (c->locked) return;
|
|
|
|
LOG(("panning %d, %d from %d, %d in content %d,%d",g->panx, g->pany,g->scrollx,g->scrolly,c->width, c->height));
|
|
/* dont pan off the top */
|
|
if ((g->scrolly + g->pany) < 0)
|
|
g->pany = -g->scrolly;
|
|
|
|
/* do not pan off the bottom of the content */
|
|
if ((g->scrolly + g->pany) > (c->height - g->height))
|
|
g->pany = (c->height - g->height) - g->scrolly;
|
|
|
|
LOG(("panning %d, %d",g->panx, g->pany));
|
|
|
|
/* pump up the volume. dance, dance! lets do it */
|
|
if (g->pany < 0) {
|
|
/* we cannot pan more than a window height at a time */
|
|
if (g->pany < -g->height)
|
|
g->pany = -g->height;
|
|
|
|
LOG(("panning up %d", g->pany));
|
|
|
|
fb_plotters_move_block(g->x, g->y,
|
|
g->width, g->height + g->pany,
|
|
g->x, g->y - g->pany);
|
|
g->scrolly += g->pany;
|
|
fb_queue_redraw(g, g->x, g->y,
|
|
g->x + g->width, g->y - g->pany);
|
|
}
|
|
if (g->pany > 0) {
|
|
/* we cannot pan more than a window height at a time */
|
|
if (g->pany > g->height)
|
|
g->pany = g->height;
|
|
|
|
LOG(("panning down %d", g->pany));
|
|
|
|
fb_plotters_move_block(g->x, g->y + g->pany, g->width, g->height - g->pany, g->x, g->y);
|
|
g->scrolly += g->pany;
|
|
fb_queue_redraw(g, g->x, g->y + g->height - g->pany,
|
|
g->x + g->width, g->y + g->height);
|
|
}
|
|
|
|
g->pan_required = false;
|
|
g->panx = 0;
|
|
g->pany = 0;
|
|
}
|
|
|
|
static void fb_redraw(struct gui_window *g)
|
|
{
|
|
struct content *c;
|
|
|
|
if (!g)
|
|
return;
|
|
|
|
c = g->bw->current_content;
|
|
|
|
if (!c) return;
|
|
if (c->locked) return;
|
|
|
|
content_redraw(c, 0, -g->scrolly, g->width, g->height,
|
|
g->redraw_box.x0, g->redraw_box.y0, g->redraw_box.x1, g->redraw_box.y1,
|
|
g->bw->scale, 0xFFFFFF);
|
|
|
|
g->redraw_required = false;
|
|
g->redraw_box.y0 = g->redraw_box.x0 = INT_MAX;
|
|
g->redraw_box.y1 = g->redraw_box.x1 = -(INT_MAX);
|
|
g->panx = 0;
|
|
g->pany = 0;
|
|
redraws_pending = false;
|
|
}
|
|
|
|
|
|
void gui_init(int argc, char** argv)
|
|
{
|
|
LOG(("argc %d, argv %p", argc, argv));
|
|
|
|
/* load browser messages */
|
|
messages_load(fb_findfile("messages"));
|
|
|
|
/* load browser options */
|
|
options_read(fb_findfile("Options"));
|
|
|
|
default_stylesheet_url = fb_findfile_asurl("default.css");
|
|
|
|
framebuffer = fb_os_init(argc, argv);
|
|
|
|
fb_os_option_override();
|
|
|
|
option_target_blank = false;
|
|
|
|
switch (framebuffer->bpp) {
|
|
/* case 1:
|
|
plot = framebuffer_1bpp_plot;
|
|
break;
|
|
*/
|
|
case 8:
|
|
plot = framebuffer_8bpp_plot;
|
|
break;
|
|
|
|
case 16:
|
|
plot = framebuffer_16bpp_plot;
|
|
break;
|
|
|
|
case 32:
|
|
plot = framebuffer_32bpp_plot;
|
|
break;
|
|
|
|
default:
|
|
LOG(("Unsupported bit depth (%d)", framebuffer->bpp));
|
|
exit(1);
|
|
}
|
|
|
|
framebuffer->cursor = fb_cursor_init(framebuffer);
|
|
}
|
|
|
|
void gui_init2(int argc, char** argv)
|
|
{
|
|
struct browser_window *bw;
|
|
const char *addr = NETSURF_HOMEPAGE;
|
|
|
|
LOG(("%s(%d, %p)", __func__, argc, argv));
|
|
|
|
if (option_homepage_url != NULL && option_homepage_url[0] != '\0')
|
|
addr = option_homepage_url;
|
|
|
|
if (argc > 1) addr = argv[1];
|
|
|
|
LOG(("%s: calling browser_window_create", __func__));
|
|
bw = browser_window_create(addr, 0, 0, true, false);
|
|
}
|
|
|
|
|
|
void gui_multitask(void)
|
|
{
|
|
// LOG(("gui_multitask"));
|
|
}
|
|
|
|
|
|
void gui_poll(bool active)
|
|
{
|
|
// LOG(("enter fetch_poll"));
|
|
if (active)
|
|
fetch_poll();
|
|
//LOG(("enter schedule run"));
|
|
schedule_run();
|
|
|
|
|
|
fb_os_input(input_window);
|
|
|
|
if (redraws_pending == true) {
|
|
struct gui_window *g;
|
|
|
|
fb_cursor_move(framebuffer, 0,0);
|
|
|
|
redraws_pending = false;
|
|
|
|
for (g = window_list; g != NULL; g = g->next) {
|
|
if (g->pan_required == true) {
|
|
fb_pan(g);
|
|
}
|
|
if (g->redraw_required == true) {
|
|
fb_redraw(g);
|
|
}
|
|
}
|
|
}
|
|
|
|
fb_cursor_plot(framebuffer);
|
|
}
|
|
|
|
void gui_quit(void)
|
|
{
|
|
LOG(("gui_quit"));
|
|
fb_os_quit(framebuffer);
|
|
}
|
|
|
|
|
|
struct gui_window *gui_create_browser_window(struct browser_window *bw,
|
|
struct browser_window *clone,
|
|
bool new_tab)
|
|
{
|
|
struct gui_window *g, *p;
|
|
LOG(("bw %p, clone %p", bw, clone));
|
|
|
|
g = calloc(1, sizeof(struct gui_window));
|
|
if (g == NULL)
|
|
return NULL;
|
|
|
|
g->x = 0;
|
|
g->y = 0;
|
|
g->width = framebuffer->width;
|
|
g->height = framebuffer->height;
|
|
g->bw = bw;
|
|
|
|
if (window_list == NULL) {
|
|
window_list = input_window = g;
|
|
} else {
|
|
for(p = window_list; p->next != NULL; p = p->next);
|
|
p->next = g;
|
|
g->prev = p;
|
|
}
|
|
|
|
return g;
|
|
}
|
|
|
|
void gui_window_destroy(struct gui_window *g)
|
|
{
|
|
LOG(("g %p", g));
|
|
|
|
if (g->prev == NULL) {
|
|
window_list = input_window = g->next;
|
|
} else {
|
|
g->prev->next = g->next;
|
|
}
|
|
if (g->next != NULL)
|
|
g->next->prev = g->prev;
|
|
|
|
free(g);
|
|
|
|
if (window_list == NULL)
|
|
netsurf_quit = true;
|
|
|
|
}
|
|
|
|
void gui_window_set_title(struct gui_window *g, const char *title)
|
|
{
|
|
LOG(("%s(%p, %s)", __func__, g, title));
|
|
}
|
|
|
|
#ifndef MIN
|
|
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
|
|
#endif
|
|
|
|
#ifndef MAX
|
|
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
|
|
#endif
|
|
|
|
static void fb_queue_redraw(struct gui_window *g, int x0, int y0, int x1, int y1)
|
|
{
|
|
if (!g) return;
|
|
|
|
LOG(("%p, %d, %d, %d, %d", g, x0 , y0, x1, y1));
|
|
|
|
g->redraw_box.x0 = MIN(g->redraw_box.x0, x0);
|
|
g->redraw_box.y0 = MIN(g->redraw_box.y0, y0);
|
|
g->redraw_box.x1 = MAX(g->redraw_box.x1, x1);
|
|
g->redraw_box.y1 = MAX(g->redraw_box.y1, y1);
|
|
|
|
redraws_pending = true;
|
|
g->redraw_required = true;
|
|
}
|
|
|
|
static void fb_queue_pan(struct gui_window *g, int x, int y)
|
|
{
|
|
if (!g) return;
|
|
|
|
LOG(("%p, x %d, y %d", g, x , y));
|
|
|
|
g->panx +=x;
|
|
g->pany +=y;
|
|
|
|
redraws_pending = true;
|
|
g->pan_required = true;
|
|
}
|
|
|
|
void fb_window_scroll(struct gui_window *g, int x, int y)
|
|
{
|
|
fb_queue_pan(g, x, y);
|
|
}
|
|
|
|
void gui_window_redraw(struct gui_window *g, int x0, int y0, int x1, int y1)
|
|
{
|
|
if (!g) return;
|
|
|
|
fb_queue_redraw(g, x0, y0, x1, y1);
|
|
}
|
|
|
|
void gui_window_redraw_window(struct gui_window *g)
|
|
{
|
|
if (!g) return;
|
|
|
|
fb_queue_redraw(g, 0, 0, g->width, g->height);
|
|
}
|
|
|
|
void gui_window_update_box(struct gui_window *g,
|
|
const union content_msg_data *data)
|
|
{
|
|
struct content *c;
|
|
|
|
if (!g) return;
|
|
|
|
c = g->bw->current_content;
|
|
|
|
if (c == NULL) return;
|
|
|
|
gui_window_redraw(g, data->redraw.x, data->redraw.y, data->redraw.x + data->redraw.width, data->redraw.y + data->redraw.height);
|
|
}
|
|
|
|
bool gui_window_get_scroll(struct gui_window *g, int *sx, int *sy)
|
|
{
|
|
LOG(("g %p, sx %d, sy%d", g, *sx, *sy));
|
|
*sx=0;
|
|
*sy=g->scrolly;
|
|
|
|
return true;
|
|
}
|
|
|
|
void gui_window_set_scroll(struct gui_window *g, int sx, int sy)
|
|
{
|
|
LOG(("%s:(%p, %d, %d)", __func__, g, sx, sy));
|
|
g->scrolly = sy;
|
|
}
|
|
|
|
void gui_window_scroll_visible(struct gui_window *g, int x0, int y0,
|
|
int x1, int y1)
|
|
{
|
|
LOG(("%s:(%p, %d, %d, %d, %d)", __func__, g, x0, y0, x1, y1));
|
|
}
|
|
|
|
void gui_window_position_frame(struct gui_window *g, int x0, int y0,
|
|
int x1, int y1)
|
|
{
|
|
LOG(("%p, %d, %d, %d, %d", g, x0, y0, x1, y1));
|
|
}
|
|
|
|
void gui_window_get_dimensions(struct gui_window *g, int *width, int *height,
|
|
bool scaled)
|
|
{
|
|
LOG(("%p, %d, %d, %d", g, *width, *height, scaled));
|
|
*width = g->width;
|
|
*height = g->height;
|
|
|
|
}
|
|
|
|
void gui_window_update_extent(struct gui_window *g)
|
|
{
|
|
LOG(("g %p", g));
|
|
}
|
|
|
|
void gui_window_set_status(struct gui_window *g, const char *text)
|
|
{
|
|
LOG(("g %p, text %s", g, 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_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_place_caret(struct gui_window *g, int x, int y, int height)
|
|
{
|
|
}
|
|
|
|
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)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool gui_window_box_scroll_start(struct gui_window *g,
|
|
int x0, int y0, int x1, int y1)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool gui_window_frame_resize_start(struct gui_window *g)
|
|
{
|
|
printf("resize frame\n");
|
|
return true;
|
|
}
|
|
|
|
void gui_window_save_as_link(struct gui_window *g, struct content *c)
|
|
{
|
|
}
|
|
|
|
void gui_window_set_scale(struct gui_window *g, float scale)
|
|
{
|
|
printf("set scale\n");
|
|
}
|
|
|
|
struct gui_download_window *gui_download_window_create(const char *url,
|
|
const char *mime_type, struct fetch *fetch,
|
|
unsigned int total_size, struct gui_window *gui)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
void gui_download_window_data(struct gui_download_window *dw, const char *data,
|
|
unsigned int size)
|
|
{
|
|
}
|
|
|
|
void gui_download_window_error(struct gui_download_window *dw,
|
|
const char *error_msg)
|
|
{
|
|
}
|
|
|
|
void gui_download_window_done(struct gui_download_window *dw)
|
|
{
|
|
}
|
|
|
|
void gui_drag_save_object(gui_save_type type, struct content *c,
|
|
struct gui_window *g)
|
|
{
|
|
}
|
|
|
|
void gui_drag_save_selection(struct selection *s, struct gui_window *g)
|
|
{
|
|
}
|
|
|
|
void gui_start_selection(struct gui_window *g)
|
|
{
|
|
}
|
|
|
|
void gui_paste_from_clipboard(struct gui_window *g, int x, int y)
|
|
{
|
|
}
|
|
|
|
bool gui_empty_clipboard(void)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool gui_add_to_clipboard(const char *text, size_t length, bool space)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool gui_commit_clipboard(void)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool gui_copy_to_clipboard(struct selection *s)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
void gui_create_form_select_menu(struct browser_window *bw,
|
|
struct form_control *control)
|
|
{
|
|
}
|
|
|
|
void gui_launch_url(const char *url)
|
|
{
|
|
}
|
|
|
|
bool gui_search_term_highlighted(struct gui_window *g,
|
|
unsigned start_offset, unsigned end_offset,
|
|
unsigned *start_idx, unsigned *end_idx)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
#ifdef WITH_SSL
|
|
void gui_cert_verify(struct browser_window *bw, struct content *c,
|
|
const struct ssl_cert_info *certs, unsigned long num)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
/*
|
|
* Local Variables:
|
|
* c-basic-offset:8
|
|
* End:
|
|
*/
|