mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-12-19 10:42:36 +03:00
Merge branch 'master' of git://git.netsurf-browser.org/netsurf
This commit is contained in:
commit
239f999936
@ -7,7 +7,7 @@ CFLAGS += -std=c99 -Dnsamiga
|
|||||||
ifneq ($(SUBTARGET),os3)
|
ifneq ($(SUBTARGET),os3)
|
||||||
CFLAGS += -O2 -finline-functions -U__STRICT_ANSI__ -D__USE_INLINE__ -D__USE_BASETYPE__
|
CFLAGS += -O2 -finline-functions -U__STRICT_ANSI__ -D__USE_INLINE__ -D__USE_BASETYPE__
|
||||||
else
|
else
|
||||||
CFLAGS += -m68020-60 -O0 -DPATH_MAX=1024 -D__m68k__
|
CFLAGS += -msoft-float -m68020-60 -O0 -DPATH_MAX=1024 -D__m68k__
|
||||||
endif
|
endif
|
||||||
|
|
||||||
NETSURF_FEATURE_ROSPRITE_CFLAGS := -DWITH_NSSPRITE
|
NETSURF_FEATURE_ROSPRITE_CFLAGS := -DWITH_NSSPRITE
|
||||||
|
19
amiga/font.c
19
amiga/font.c
@ -32,18 +32,31 @@
|
|||||||
#include "amiga/font_diskfont.h"
|
#include "amiga/font_diskfont.h"
|
||||||
#include "amiga/font_scan.h"
|
#include "amiga/font_scan.h"
|
||||||
|
|
||||||
|
static ULONG ami_devicedpi = 72;
|
||||||
|
static ULONG ami_xdpi = 72;
|
||||||
|
|
||||||
|
ULONG ami_font_dpi_get_devicedpi(void)
|
||||||
|
{
|
||||||
|
return ami_devicedpi;
|
||||||
|
}
|
||||||
|
|
||||||
|
ULONG ami_font_dpi_get_xdpi(void)
|
||||||
|
{
|
||||||
|
return ami_xdpi;
|
||||||
|
}
|
||||||
|
|
||||||
void ami_font_setdevicedpi(int id)
|
void ami_font_setdevicedpi(int id)
|
||||||
{
|
{
|
||||||
DisplayInfoHandle dih;
|
DisplayInfoHandle dih;
|
||||||
struct DisplayInfo dinfo;
|
struct DisplayInfo dinfo;
|
||||||
ULONG ydpi = nsoption_int(screen_ydpi);
|
|
||||||
ULONG xdpi = nsoption_int(screen_ydpi);
|
|
||||||
|
|
||||||
if(nsoption_bool(bitmap_fonts) == true) {
|
if(nsoption_bool(bitmap_fonts) == true) {
|
||||||
LOG("WARNING: Using diskfont.library for text. Forcing DPI to 72.");
|
LOG("WARNING: Using diskfont.library for text. Forcing DPI to 72.");
|
||||||
nsoption_int(screen_ydpi) = 72;
|
nsoption_set_int(screen_ydpi, 72);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ULONG ydpi = nsoption_int(screen_ydpi);
|
||||||
|
ULONG xdpi = nsoption_int(screen_ydpi);
|
||||||
browser_set_dpi(nsoption_int(screen_ydpi));
|
browser_set_dpi(nsoption_int(screen_ydpi));
|
||||||
|
|
||||||
if(id && (nsoption_int(monitor_aspect_x) != 0) && (nsoption_int(monitor_aspect_y) != 0))
|
if(id && (nsoption_int(monitor_aspect_x) != 0) && (nsoption_int(monitor_aspect_y) != 0))
|
||||||
|
11
amiga/font.h
11
amiga/font.h
@ -23,12 +23,14 @@
|
|||||||
#include <graphics/rastport.h>
|
#include <graphics/rastport.h>
|
||||||
#include <graphics/text.h>
|
#include <graphics/text.h>
|
||||||
|
|
||||||
struct ami_font_cache_node;
|
|
||||||
|
|
||||||
void ami_font_setdevicedpi(int id);
|
|
||||||
void ami_font_init(void);
|
void ami_font_init(void);
|
||||||
void ami_font_fini(void);
|
void ami_font_fini(void);
|
||||||
|
|
||||||
|
/* DPI stuff */
|
||||||
|
void ami_font_setdevicedpi(int id);
|
||||||
|
ULONG ami_font_dpi_get_devicedpi(void);
|
||||||
|
ULONG ami_font_dpi_get_xdpi(void);
|
||||||
|
|
||||||
/* Simple diskfont functions for graphics.library use (not page rendering) */
|
/* Simple diskfont functions for graphics.library use (not page rendering) */
|
||||||
struct TextFont *ami_font_open_disk_font(struct TextAttr *tattr);
|
struct TextFont *ami_font_open_disk_font(struct TextAttr *tattr);
|
||||||
void ami_font_close_disk_font(struct TextFont *tfont);
|
void ami_font_close_disk_font(struct TextFont *tfont);
|
||||||
@ -52,9 +54,6 @@ struct ami_font_functions {
|
|||||||
ULONG x, ULONG y, bool aa);
|
ULONG x, ULONG y, bool aa);
|
||||||
};
|
};
|
||||||
|
|
||||||
ULONG ami_devicedpi;
|
|
||||||
ULONG ami_xdpi;
|
|
||||||
|
|
||||||
const struct ami_font_functions *ami_nsfont;
|
const struct ami_font_functions *ami_nsfont;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
#define NSA_VALUE_SHEARSIN (1 << 14)
|
#define NSA_VALUE_SHEARSIN (1 << 14)
|
||||||
#define NSA_VALUE_SHEARCOS (1 << 16)
|
#define NSA_VALUE_SHEARCOS (1 << 16)
|
||||||
|
|
||||||
#define NSA_FONT_EMWIDTH(s) (s / FONT_SIZE_SCALE) * (ami_xdpi / 72.0)
|
#define NSA_FONT_EMWIDTH(s) (s / FONT_SIZE_SCALE) * (ami_font_dpi_get_xdpi() / 72.0)
|
||||||
|
|
||||||
const uint16 sc_table[] = {
|
const uint16 sc_table[] = {
|
||||||
0x0061, 0x1D00, /* a */
|
0x0061, 0x1D00, /* a */
|
||||||
@ -155,7 +155,7 @@ static inline uint32 amiga_nsfont_decode_surrogate(const uint16 *char1)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool amiga_nsfont_width(const plot_font_style_t *fstyle,
|
static bool amiga_nsfont_width(const plot_font_style_t *fstyle,
|
||||||
const char *string, size_t length,
|
const char *string, size_t length,
|
||||||
int *width)
|
int *width)
|
||||||
{
|
{
|
||||||
@ -178,7 +178,7 @@ static inline bool amiga_nsfont_width(const plot_font_style_t *fstyle,
|
|||||||
* \return true on success, false on error and error reported
|
* \return true on success, false on error and error reported
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static inline bool amiga_nsfont_position_in_string(const plot_font_style_t *fstyle,
|
static bool amiga_nsfont_position_in_string(const plot_font_style_t *fstyle,
|
||||||
const char *string, size_t length,
|
const char *string, size_t length,
|
||||||
int x, size_t *char_offset, int *actual_x)
|
int x, size_t *char_offset, int *actual_x)
|
||||||
{
|
{
|
||||||
@ -261,7 +261,7 @@ static inline bool amiga_nsfont_position_in_string(const plot_font_style_t *fsty
|
|||||||
* Returning char_offset == length means no split possible
|
* Returning char_offset == length means no split possible
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static inline bool amiga_nsfont_split(const plot_font_style_t *fstyle,
|
static bool amiga_nsfont_split(const plot_font_style_t *fstyle,
|
||||||
const char *string, size_t length,
|
const char *string, size_t length,
|
||||||
int x, size_t *char_offset, int *actual_x)
|
int x, size_t *char_offset, int *actual_x)
|
||||||
{
|
{
|
||||||
@ -510,7 +510,7 @@ static struct OutlineFont *ami_open_outline_font(const plot_font_style_t *fstyle
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(ESetInfo(AMI_OFONT_ENGINE,
|
if(ESetInfo(AMI_OFONT_ENGINE,
|
||||||
OT_DeviceDPI, ami_devicedpi,
|
OT_DeviceDPI, ami_font_dpi_get_devicedpi(),
|
||||||
OT_PointHeight, ysize,
|
OT_PointHeight, ysize,
|
||||||
OT_EmboldenX, emboldenx,
|
OT_EmboldenX, emboldenx,
|
||||||
OT_EmboldenY, emboldeny,
|
OT_EmboldenY, emboldeny,
|
||||||
|
@ -171,7 +171,7 @@ void ami_font_cache_insert(struct ami_font_cache_node *nodedata, const char *fon
|
|||||||
#ifndef __amigaos4__
|
#ifndef __amigaos4__
|
||||||
struct nsObject *node = AddObject(ami_font_cache_list, AMINS_FONT);
|
struct nsObject *node = AddObject(ami_font_cache_list, AMINS_FONT);
|
||||||
if(node) {
|
if(node) {
|
||||||
ObjectCallback(ami_font_bullet_close);
|
ObjectCallback(node, ami_font_bullet_close);
|
||||||
node->objstruct = nodedata;
|
node->objstruct = nodedata;
|
||||||
node->dtz_Node.ln_Name = strdup(font);
|
node->dtz_Node.ln_Name = strdup(font);
|
||||||
}
|
}
|
||||||
|
@ -35,14 +35,19 @@
|
|||||||
#include "amiga/gui.h"
|
#include "amiga/gui.h"
|
||||||
#include "amiga/utf8.h"
|
#include "amiga/utf8.h"
|
||||||
|
|
||||||
|
#define MAX_FONT_NAME_SIZE 33
|
||||||
|
|
||||||
static struct TextFont *ami_font_bm_open(struct RastPort *rp, const plot_font_style_t *fstyle)
|
static struct TextFont *ami_font_bm_open(struct RastPort *rp, const plot_font_style_t *fstyle)
|
||||||
{
|
{
|
||||||
struct TextFont *bmfont = NULL;
|
struct TextFont *bmfont = NULL;
|
||||||
struct TextAttr tattr;
|
struct TextAttr tattr;
|
||||||
char *fontname, *font;
|
char *fontname;
|
||||||
|
char font[MAX_FONT_NAME_SIZE];
|
||||||
|
|
||||||
if(rp == NULL) return NULL;
|
if(rp == NULL) return NULL;
|
||||||
|
|
||||||
|
tattr.ta_Flags = 0;
|
||||||
|
|
||||||
switch(fstyle->family)
|
switch(fstyle->family)
|
||||||
{
|
{
|
||||||
case PLOT_FONT_FAMILY_SANS_SERIF:
|
case PLOT_FONT_FAMILY_SANS_SERIF:
|
||||||
@ -76,14 +81,12 @@ static struct TextFont *ami_font_bm_open(struct RastPort *rp, const plot_font_st
|
|||||||
if (fstyle->weight >= 700)
|
if (fstyle->weight >= 700)
|
||||||
tattr.ta_Style |= FSF_BOLD;
|
tattr.ta_Style |= FSF_BOLD;
|
||||||
|
|
||||||
if((font = ASPrintf("%s.font", fontname))) {
|
snprintf(font, MAX_FONT_NAME_SIZE, "%s.font", fontname);
|
||||||
tattr.ta_Name = font;
|
tattr.ta_Name = font;
|
||||||
tattr.ta_YSize = fstyle->size / FONT_SIZE_SCALE;
|
tattr.ta_YSize = fstyle->size / FONT_SIZE_SCALE;
|
||||||
LOG("font: %s/%d", tattr.ta_Name, tattr.ta_YSize);
|
LOG("font: %s/%d", tattr.ta_Name, tattr.ta_YSize);
|
||||||
if((bmfont = OpenDiskFont(&tattr))) {
|
if((bmfont = OpenDiskFont(&tattr))) {
|
||||||
SetRPAttrs(rp, RPTAG_Font, bmfont, TAG_DONE);
|
SetRPAttrs(rp, RPTAG_Font, bmfont, TAG_DONE);
|
||||||
}
|
|
||||||
FreeVec(font);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return bmfont;
|
return bmfont;
|
||||||
|
@ -562,7 +562,7 @@ static nserror ami_set_options(struct nsoption_s *defaults)
|
|||||||
nsoption_set_bool(font_antialiasing, false);
|
nsoption_set_bool(font_antialiasing, false);
|
||||||
nsoption_set_bool(truecolour_mouse_pointers, false);
|
nsoption_set_bool(truecolour_mouse_pointers, false);
|
||||||
nsoption_set_bool(use_openurl_lib, true);
|
nsoption_set_bool(use_openurl_lib, true);
|
||||||
nsoption_set_bool(use_diskfont, true);
|
nsoption_set_bool(bitmap_fonts, true);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if((!nsoption_charp(accept_language)) ||
|
if((!nsoption_charp(accept_language)) ||
|
||||||
@ -5594,8 +5594,12 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
#ifdef __amigaos4__
|
#ifdef __amigaos4__
|
||||||
amiga_plugin_hack_init();
|
amiga_plugin_hack_init();
|
||||||
#endif
|
|
||||||
|
/* DataTypes loader needs datatypes.library v45,
|
||||||
|
* but for some reason that's not in OS3.9.
|
||||||
|
* Skip it to ensure it isn't causing other problems. */
|
||||||
ret = amiga_datatypes_init();
|
ret = amiga_datatypes_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
/* user options setup */
|
/* user options setup */
|
||||||
ret = nsoption_init(ami_set_options, &nsoptions, &nsoptions_default);
|
ret = nsoption_init(ami_set_options, &nsoptions, &nsoptions_default);
|
||||||
|
@ -94,7 +94,7 @@ void ami_init_layers(struct gui_globals *gg, ULONG width, ULONG height)
|
|||||||
* Height is set to screen width to give enough space for thumbnails *
|
* Height is set to screen width to give enough space for thumbnails *
|
||||||
* Also applies to the further gfx/layers functions and memory below */
|
* Also applies to the further gfx/layers functions and memory below */
|
||||||
|
|
||||||
ULONG depth = 32;
|
int depth = 32;
|
||||||
struct BitMap *friend = NULL;
|
struct BitMap *friend = NULL;
|
||||||
|
|
||||||
depth = GetBitMapAttr(scrn->RastPort.BitMap, BMA_DEPTH);
|
depth = GetBitMapAttr(scrn->RastPort.BitMap, BMA_DEPTH);
|
||||||
@ -112,6 +112,8 @@ void ami_init_layers(struct gui_globals *gg, ULONG width, ULONG height)
|
|||||||
if(depth > 8) depth = 8;
|
if(depth > 8) depth = 8;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if(palette_mapped == true) nsoption_set_bool(font_antialiasing, false);
|
||||||
|
|
||||||
if(!width) width = nsoption_int(redraw_tile_size_x);
|
if(!width) width = nsoption_int(redraw_tile_size_x);
|
||||||
if(!height) height = nsoption_int(redraw_tile_size_y);
|
if(!height) height = nsoption_int(redraw_tile_size_y);
|
||||||
gg->width = width;
|
gg->width = width;
|
||||||
@ -429,13 +431,10 @@ static bool ami_text(int x, int y, const char *text, size_t length,
|
|||||||
LOG("[ami_plotter] Entered ami_text()");
|
LOG("[ami_plotter] Entered ami_text()");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool aa = true;
|
if(__builtin_expect(ami_nsfont == NULL, 0)) return false;
|
||||||
|
|
||||||
if((nsoption_bool(font_antialiasing) == false) || (palette_mapped == true))
|
|
||||||
aa = false;
|
|
||||||
|
|
||||||
ami_plot_setapen(glob->rp, fstyle->foreground);
|
ami_plot_setapen(glob->rp, fstyle->foreground);
|
||||||
ami_nsfont->text(glob->rp, text, length, fstyle, x, y, aa);
|
ami_nsfont->text(glob->rp, text, length, fstyle, x, y, nsoption_bool(font_antialiasing));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ else
|
|||||||
NETLDFLAGS := -lnetwork
|
NETLDFLAGS := -lnetwork
|
||||||
endif
|
endif
|
||||||
|
|
||||||
LDFLAGS += -lbe -ltranslation -ltracker $(NETLDFLAGS)
|
LDFLAGS += -lbe -ltranslation -ltracker -lcolumnlistview $(NETLDFLAGS)
|
||||||
ifeq ($(CC_MAJOR),2)
|
ifeq ($(CC_MAJOR),2)
|
||||||
LDFLAGS += -lstdc++.r4
|
LDFLAGS += -lstdc++.r4
|
||||||
else
|
else
|
||||||
@ -85,7 +85,8 @@ endif
|
|||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
# S_BEOS are sources purely for the BeOS build
|
# S_BEOS are sources purely for the BeOS build
|
||||||
S_BEOS := about.cpp bitmap.cpp download.cpp fetch_rsrc.cpp filetype.cpp \
|
S_BEOS := about.cpp bitmap.cpp cookies.cpp \
|
||||||
|
download.cpp fetch_rsrc.cpp filetype.cpp \
|
||||||
font.cpp gui.cpp login.cpp gui_options.cpp plotters.cpp \
|
font.cpp gui.cpp login.cpp gui_options.cpp plotters.cpp \
|
||||||
scaffolding.cpp search.cpp schedule.cpp throbber.cpp window.cpp
|
scaffolding.cpp search.cpp schedule.cpp throbber.cpp window.cpp
|
||||||
S_BEOS := $(addprefix beos/,$(S_BEOS))
|
S_BEOS := $(addprefix beos/,$(S_BEOS))
|
||||||
@ -99,7 +100,7 @@ RDEF_IMP_BEOS := $(addprefix $(OBJROOT)/,$(subst /,_,$(RDEF_IMP_BEOS)))
|
|||||||
RDEP_BEOS := \
|
RDEP_BEOS := \
|
||||||
adblock.css beosdefault.css default.css internal.css quirks.css \
|
adblock.css beosdefault.css default.css internal.css quirks.css \
|
||||||
netsurf.png favicon.png ca-bundle.txt \
|
netsurf.png favicon.png ca-bundle.txt \
|
||||||
credits.html licence.html welcome.html maps.html
|
credits.html licence.html welcome.html maps.html SearchEngines
|
||||||
RDEP_BEOS := $(addprefix beos/res/,$(RDEP_BEOS)) \
|
RDEP_BEOS := $(addprefix beos/res/,$(RDEP_BEOS)) \
|
||||||
$(wildcard beos/res/icons/*.png) \
|
$(wildcard beos/res/icons/*.png) \
|
||||||
$(wildcard beos/res/??/*) \
|
$(wildcard beos/res/??/*) \
|
||||||
@ -137,17 +138,15 @@ $(RSRC_BEOS): $(RDEF_BEOS) $(RDEF_IMP_BEOS)
|
|||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
install-beos:
|
install-beos:
|
||||||
# TODO:HAIKU -- not sure if throbber is needed. being left out for now.
|
|
||||||
mkdir -p $(DESTDIR)$(NETSURF_BEOS_BIN)
|
mkdir -p $(DESTDIR)$(NETSURF_BEOS_BIN)
|
||||||
mkdir -p $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
|
mkdir -p $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
|
||||||
# mkdir -p $(DESTDIR)$(NETSURF_BEOS_RESOURCES)throbber
|
|
||||||
@copyattr -d $(EXETARGET) $(DESTDIR)$(NETSURF_BEOS_BIN)NetSurf
|
@copyattr -d $(EXETARGET) $(DESTDIR)$(NETSURF_BEOS_BIN)NetSurf
|
||||||
@cp -vRL beos/res/adblock.css $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
|
@cp -vRL beos/res/adblock.css $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
|
||||||
@cp -vRL beos/res/ca-bundle.txt $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
|
@cp -vRL beos/res/ca-bundle.txt $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
|
||||||
@cp -vRL beos/res/default.css $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
|
@cp -vRL beos/res/default.css $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
|
||||||
@cp -vRL beos/res/beosdefault.css $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
|
@cp -vRL beos/res/beosdefault.css $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
|
||||||
@cp -vRL gtk/res/license $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
|
@cp -vRL gtk/res/license $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
|
||||||
# @cp -vRL beos/res/throbber/*.png $(DESTDIR)$(NETSURF_BEOS_RESOURCES)throbber
|
@cp -vRL beos/res/SearchEngines $(DESTDIR)$(NETSURF_BEOS_RESOURCES)
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Package target
|
# Package target
|
||||||
|
416
beos/cookies.cpp
Normal file
416
beos/cookies.cpp
Normal file
@ -0,0 +1,416 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015 Adrián Arroyo Calle <adrian.arroyocalle@gmail.com>
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define __STDBOOL_H__ 1
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
extern "C" {
|
||||||
|
#include "desktop/mouse.h"
|
||||||
|
#include "utils/log.h"
|
||||||
|
#include "desktop/cookie_manager.h"
|
||||||
|
#include "desktop/plotters.h"
|
||||||
|
#include "desktop/tree.h"
|
||||||
|
#include "desktop/textinput.h"
|
||||||
|
#include "content/urldb.h"
|
||||||
|
}
|
||||||
|
#include "beos/cookies.h"
|
||||||
|
|
||||||
|
#include <Application.h>
|
||||||
|
#include <InterfaceKit.h>
|
||||||
|
#include <String.h>
|
||||||
|
#include <Button.h>
|
||||||
|
#include <Catalog.h>
|
||||||
|
#include <private/interface/ColumnListView.h>
|
||||||
|
#include <private/interface/ColumnTypes.h>
|
||||||
|
#include <GroupLayoutBuilder.h>
|
||||||
|
#include <NetworkCookieJar.h>
|
||||||
|
#include <OutlineListView.h>
|
||||||
|
#include <ScrollView.h>
|
||||||
|
#include <StringView.h>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
static std::vector<struct cookie_data*> cookieJar;
|
||||||
|
|
||||||
|
class CookieWindow : public BWindow {
|
||||||
|
public:
|
||||||
|
CookieWindow(BRect frame);
|
||||||
|
virtual void MessageReceived(BMessage* message);
|
||||||
|
virtual void Show();
|
||||||
|
virtual bool QuitRequested();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void _BuildDomainList();
|
||||||
|
BStringItem* _AddDomain(BString domain, bool fake);
|
||||||
|
void _ShowCookiesForDomain(BString domain);
|
||||||
|
void _DeleteCookies();
|
||||||
|
|
||||||
|
private:
|
||||||
|
BOutlineListView* fDomains;
|
||||||
|
BColumnListView* fCookies;
|
||||||
|
BStringView* fHeaderView;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
COOKIE_IMPORT = 'cimp',
|
||||||
|
COOKIE_EXPORT = 'cexp',
|
||||||
|
COOKIE_DELETE = 'cdel',
|
||||||
|
COOKIE_REFRESH = 'rfsh',
|
||||||
|
|
||||||
|
DOMAIN_SELECTED = 'dmsl'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CookieDateColumn: public BDateColumn
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CookieDateColumn(const char* title, float width)
|
||||||
|
:
|
||||||
|
BDateColumn(title, width, width / 2, width * 2)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawField(BField* field, BRect rect, BView* parent) {
|
||||||
|
BDateField* dateField = (BDateField*)field;
|
||||||
|
if (dateField->UnixTime() == -1) {
|
||||||
|
DrawString("Session cookie", parent, rect);
|
||||||
|
} else {
|
||||||
|
BDateColumn::DrawField(field, rect, parent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CookieRow: public BRow
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CookieRow(BColumnListView* list, struct cookie_data& cookie)
|
||||||
|
:
|
||||||
|
BRow(),
|
||||||
|
fCookie(cookie)
|
||||||
|
{
|
||||||
|
list->AddRow(this);
|
||||||
|
SetField(new BStringField(cookie.name), 0);
|
||||||
|
SetField(new BStringField(cookie.path), 1);
|
||||||
|
time_t expiration = cookie.expires;
|
||||||
|
SetField(new BDateField(&expiration), 2);
|
||||||
|
SetField(new BStringField(cookie.value), 3);
|
||||||
|
|
||||||
|
BString flags;
|
||||||
|
if (cookie.secure)
|
||||||
|
flags = "https ";
|
||||||
|
if (cookie.http_only)
|
||||||
|
flags = "http ";
|
||||||
|
|
||||||
|
SetField(new BStringField(flags.String()), 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
struct cookie_data fCookie;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class DomainItem: public BStringItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DomainItem(BString text, bool empty)
|
||||||
|
:
|
||||||
|
BStringItem(text),
|
||||||
|
fEmpty(empty)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
bool fEmpty;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
CookieWindow::CookieWindow(BRect frame)
|
||||||
|
:
|
||||||
|
BWindow(frame,"Cookie manager", B_TITLED_WINDOW,
|
||||||
|
B_NORMAL_WINDOW_FEEL,
|
||||||
|
B_AUTO_UPDATE_SIZE_LIMITS | B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE)
|
||||||
|
{
|
||||||
|
BGroupLayout* root = new BGroupLayout(B_HORIZONTAL, 0.0);
|
||||||
|
SetLayout(root);
|
||||||
|
|
||||||
|
fDomains = new BOutlineListView("domain list");
|
||||||
|
root->AddView(new BScrollView("scroll", fDomains, 0, false, true), 1);
|
||||||
|
|
||||||
|
fHeaderView = new BStringView("label","The cookie jar is empty!");
|
||||||
|
fCookies = new BColumnListView("cookie list", B_WILL_DRAW, B_FANCY_BORDER,
|
||||||
|
false);
|
||||||
|
|
||||||
|
float em = fCookies->StringWidth("M");
|
||||||
|
float flagsLength = fCookies->StringWidth("Mhttps hostOnly" B_UTF8_ELLIPSIS);
|
||||||
|
|
||||||
|
fCookies->AddColumn(new BStringColumn("Name",
|
||||||
|
20 * em, 10 * em, 50 * em, 0), 0);
|
||||||
|
fCookies->AddColumn(new BStringColumn("Path",
|
||||||
|
10 * em, 10 * em, 50 * em, 0), 1);
|
||||||
|
fCookies->AddColumn(new CookieDateColumn("Expiration",
|
||||||
|
fCookies->StringWidth("88/88/8888 88:88:88 AM")), 2);
|
||||||
|
fCookies->AddColumn(new BStringColumn("Value",
|
||||||
|
20 * em, 10 * em, 50 * em, 0), 3);
|
||||||
|
fCookies->AddColumn(new BStringColumn("Flags",
|
||||||
|
flagsLength, flagsLength, flagsLength, 0), 4);
|
||||||
|
|
||||||
|
root->AddItem(BGroupLayoutBuilder(B_VERTICAL, B_USE_DEFAULT_SPACING)
|
||||||
|
.SetInsets(5, 5, 5, 5)
|
||||||
|
.AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING)
|
||||||
|
.Add(fHeaderView)
|
||||||
|
.AddGlue()
|
||||||
|
.End()
|
||||||
|
.Add(fCookies)
|
||||||
|
.AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING)
|
||||||
|
.SetInsets(5, 5, 5, 5)
|
||||||
|
.AddGlue()
|
||||||
|
.Add(new BButton("delete", "Delete",
|
||||||
|
new BMessage(COOKIE_DELETE))), 3);
|
||||||
|
|
||||||
|
fDomains->SetSelectionMessage(new BMessage(DOMAIN_SELECTED));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
CookieWindow::MessageReceived(BMessage* message)
|
||||||
|
{
|
||||||
|
switch(message->what) {
|
||||||
|
case DOMAIN_SELECTED:
|
||||||
|
{
|
||||||
|
int32 index = message->FindInt32("index");
|
||||||
|
BStringItem* item = (BStringItem*)fDomains->ItemAt(index);
|
||||||
|
if (item != NULL) {
|
||||||
|
BString domain = item->Text();
|
||||||
|
_ShowCookiesForDomain(domain);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
case COOKIE_REFRESH:
|
||||||
|
_BuildDomainList();
|
||||||
|
return;
|
||||||
|
|
||||||
|
case COOKIE_DELETE:
|
||||||
|
_DeleteCookies();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
BWindow::MessageReceived(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
CookieWindow::Show()
|
||||||
|
{
|
||||||
|
BWindow::Show();
|
||||||
|
if (IsHidden())
|
||||||
|
return;
|
||||||
|
|
||||||
|
PostMessage(COOKIE_REFRESH);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
CookieWindow::QuitRequested()
|
||||||
|
{
|
||||||
|
if (!IsHidden())
|
||||||
|
Hide();
|
||||||
|
cookieJar.clear();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
CookieWindow::_BuildDomainList()
|
||||||
|
{
|
||||||
|
// Empty the domain list (TODO should we do this when hiding instead?)
|
||||||
|
for (int i = fDomains->FullListCountItems() - 1; i >= 1; i--) {
|
||||||
|
delete fDomains->FullListItemAt(i);
|
||||||
|
}
|
||||||
|
fDomains->MakeEmpty();
|
||||||
|
|
||||||
|
// BOutlineListView does not handle parent = NULL in many methods, so let's
|
||||||
|
// make sure everything always has a parent.
|
||||||
|
DomainItem* rootItem = new DomainItem("", true);
|
||||||
|
fDomains->AddItem(rootItem);
|
||||||
|
|
||||||
|
// Populate the domain list - TODO USE STL VECTOR
|
||||||
|
|
||||||
|
|
||||||
|
for(std::vector<struct cookie_data*>::iterator it = cookieJar.begin(); it != cookieJar.end(); ++it) {
|
||||||
|
_AddDomain((*it)->domain, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
int i = 1;
|
||||||
|
while (i < fDomains->FullListCountItems())
|
||||||
|
{
|
||||||
|
DomainItem* item = (DomainItem*)fDomains->FullListItemAt(i);
|
||||||
|
// Detach items from the fake root
|
||||||
|
item->SetOutlineLevel(item->OutlineLevel() - 1);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
fDomains->RemoveItem(rootItem);
|
||||||
|
delete rootItem;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
int firstNotEmpty = i;
|
||||||
|
// Collapse empty items to keep the list short
|
||||||
|
while (i < fDomains->FullListCountItems())
|
||||||
|
{
|
||||||
|
DomainItem* item = (DomainItem*)fDomains->FullListItemAt(i);
|
||||||
|
if (item->fEmpty == true) {
|
||||||
|
if (fDomains->CountItemsUnder(item, true) == 1) {
|
||||||
|
// The item has no cookies, and only a single child. We can
|
||||||
|
// remove it and move its child one level up in the tree.
|
||||||
|
|
||||||
|
int count = fDomains->CountItemsUnder(item, false);
|
||||||
|
int index = fDomains->FullListIndexOf(item) + 1;
|
||||||
|
for (int j = 0; j < count; j++) {
|
||||||
|
BListItem* child = fDomains->FullListItemAt(index + j);
|
||||||
|
child->SetOutlineLevel(child->OutlineLevel() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fDomains->RemoveItem(item);
|
||||||
|
delete item;
|
||||||
|
|
||||||
|
// The moved child is at the same index the removed item was.
|
||||||
|
// We continue the loop without incrementing i to process it.
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
// The item has no cookies, but has multiple children. Mark it
|
||||||
|
// as disabled so it is not selectable.
|
||||||
|
item->SetEnabled(false);
|
||||||
|
if (i == firstNotEmpty)
|
||||||
|
firstNotEmpty++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
fDomains->Select(firstNotEmpty);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BStringItem*
|
||||||
|
CookieWindow::_AddDomain(BString domain, bool fake)
|
||||||
|
{
|
||||||
|
BStringItem* parent = NULL;
|
||||||
|
int firstDot = domain.FindFirst('.');
|
||||||
|
if (firstDot >= 0) {
|
||||||
|
BString parentDomain(domain);
|
||||||
|
parentDomain.Remove(0, firstDot + 1);
|
||||||
|
parent = _AddDomain(parentDomain, true);
|
||||||
|
} else {
|
||||||
|
parent = (BStringItem*)fDomains->FullListItemAt(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
BListItem* existing;
|
||||||
|
int i = 0;
|
||||||
|
// check that we aren't already there
|
||||||
|
while ((existing = fDomains->ItemUnderAt(parent, true, i++)) != NULL) {
|
||||||
|
DomainItem* stringItem = (DomainItem*)existing;
|
||||||
|
if (stringItem->Text() == domain) {
|
||||||
|
if (fake == false)
|
||||||
|
stringItem->fEmpty = false;
|
||||||
|
return stringItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert the new item, keeping the list alphabetically sorted
|
||||||
|
BStringItem* domainItem = new DomainItem(domain, fake);
|
||||||
|
domainItem->SetOutlineLevel(parent->OutlineLevel() + 1);
|
||||||
|
BStringItem* sibling = NULL;
|
||||||
|
int siblingCount = fDomains->CountItemsUnder(parent, true);
|
||||||
|
for (i = 0; i < siblingCount; i++) {
|
||||||
|
sibling = (BStringItem*)fDomains->ItemUnderAt(parent, true, i);
|
||||||
|
if (strcmp(sibling->Text(), domainItem->Text()) > 0) {
|
||||||
|
fDomains->AddItem(domainItem, fDomains->FullListIndexOf(sibling));
|
||||||
|
return domainItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sibling) {
|
||||||
|
// There were siblings, but all smaller than what we try to insert.
|
||||||
|
// Insert after the last one (and its subitems)
|
||||||
|
fDomains->AddItem(domainItem, fDomains->FullListIndexOf(sibling)
|
||||||
|
+ fDomains->CountItemsUnder(sibling, false) + 1);
|
||||||
|
} else {
|
||||||
|
// There were no siblings, insert right after the parent
|
||||||
|
fDomains->AddItem(domainItem, fDomains->FullListIndexOf(parent) + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return domainItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
CookieWindow::_ShowCookiesForDomain(BString domain)
|
||||||
|
{
|
||||||
|
BString label;
|
||||||
|
label.SetToFormat("Cookies for %s", domain.String());
|
||||||
|
fHeaderView->SetText(label);
|
||||||
|
|
||||||
|
// Empty the cookie list
|
||||||
|
fCookies->Clear();
|
||||||
|
|
||||||
|
// Populate the domain list
|
||||||
|
|
||||||
|
for(std::vector<struct cookie_data*>::iterator it = cookieJar.begin(); it != cookieJar.end(); ++it) {
|
||||||
|
if((*it)->domain == domain) {
|
||||||
|
new CookieRow(fCookies,**it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool nsbeos_cookie_parser(const struct cookie_data* data)
|
||||||
|
{
|
||||||
|
cookieJar.push_back((struct cookie_data*)data);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CookieWindow::_DeleteCookies()
|
||||||
|
{
|
||||||
|
// TODO shall we handle multiple selection here?
|
||||||
|
CookieRow* row = (CookieRow*)fCookies->CurrentSelection();
|
||||||
|
if (row == NULL) {
|
||||||
|
// TODO see if a domain is selected in the domain list, and delete all
|
||||||
|
// cookies for that domain
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fCookies->RemoveRow(row);
|
||||||
|
|
||||||
|
urldb_delete_cookie(row->fCookie.domain, row->fCookie.path, row->fCookie.name);
|
||||||
|
cookieJar.clear();
|
||||||
|
urldb_iterate_cookies(&nsbeos_cookie_parser);
|
||||||
|
|
||||||
|
delete row;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the Cookie Manager
|
||||||
|
*/
|
||||||
|
void nsbeos_cookies_init(void)
|
||||||
|
{
|
||||||
|
CookieWindow* cookWin=new CookieWindow(BRect(100,100,400,400));
|
||||||
|
cookWin->Show();
|
||||||
|
urldb_iterate_cookies(&nsbeos_cookie_parser);
|
||||||
|
}
|
24
beos/cookies.h
Normal file
24
beos/cookies.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015 Adrián Arroyo Calle <adrian.arroyocalle@gmail.com>
|
||||||
|
*
|
||||||
|
* 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 __BEOS_COOKIES_H__
|
||||||
|
#define __BEOS_COOKIES_H__
|
||||||
|
|
||||||
|
void nsbeos_cookies_init();
|
||||||
|
|
||||||
|
#endif /* __BEOS_ABOUT_H__ */
|
@ -1,4 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright 2015 Adrián Arroyo Calle <adrian.arroyocalle@gmail.com>
|
||||||
* Copyright 2008 François Revol <mmu_man@users.sourceforge.net>
|
* Copyright 2008 François Revol <mmu_man@users.sourceforge.net>
|
||||||
* Copyright 2005 James Bursa <bursa@users.sourceforge.net>
|
* Copyright 2005 James Bursa <bursa@users.sourceforge.net>
|
||||||
*
|
*
|
||||||
@ -137,6 +138,7 @@ NSBrowserApplication::MessageReceived(BMessage *message)
|
|||||||
case 'home':
|
case 'home':
|
||||||
case 'urlc':
|
case 'urlc':
|
||||||
case 'urle':
|
case 'urle':
|
||||||
|
case 'sear':
|
||||||
case 'menu':
|
case 'menu':
|
||||||
// NetPositive messages
|
// NetPositive messages
|
||||||
case B_NETPOSITIVE_OPEN_URL:
|
case B_NETPOSITIVE_OPEN_URL:
|
||||||
@ -254,7 +256,7 @@ image_id nsbeos_find_app_path(char *path)
|
|||||||
* \param def default to return if file not found
|
* \param def default to return if file not found
|
||||||
* \return path to resource.
|
* \return path to resource.
|
||||||
*/
|
*/
|
||||||
static char *find_resource(char *buf, const char *filename, const char *def)
|
char *find_resource(char *buf, const char *filename, const char *def)
|
||||||
{
|
{
|
||||||
const char *cdir = NULL;
|
const char *cdir = NULL;
|
||||||
status_t err;
|
status_t err;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright 2015 Adrián Arroyo Calle <adrian.arroyocalle@gmail.com>
|
||||||
* Copyright 2008 François Revol <mmu_man@users.sourceforge.net>
|
* Copyright 2008 François Revol <mmu_man@users.sourceforge.net>
|
||||||
* Copyright 2005 James Bursa <bursa@users.sourceforge.net>
|
* Copyright 2005 James Bursa <bursa@users.sourceforge.net>
|
||||||
*
|
*
|
||||||
@ -65,6 +66,7 @@ void nsbeos_pipe_message_top(BMessage *message, BWindow *_this, struct beos_scaf
|
|||||||
|
|
||||||
void nsbeos_gui_view_source(struct hlcache_handle *content);
|
void nsbeos_gui_view_source(struct hlcache_handle *content);
|
||||||
image_id nsbeos_find_app_path(char *path);
|
image_id nsbeos_find_app_path(char *path);
|
||||||
|
char *find_resource(char *buf, const char *filename, const char *def);
|
||||||
|
|
||||||
void nsbeos_update_system_ui_colors(void);
|
void nsbeos_update_system_ui_colors(void);
|
||||||
|
|
||||||
|
1
beos/res/SearchEngines
Symbolic link
1
beos/res/SearchEngines
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../resources/SearchEngines
|
@ -1,4 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright 2015 Adrián Arroyo Calle <adrian.arroyocalle@gmail.com>
|
||||||
* Copyright 2008 François Revol <mmu_man@users.sourceforge.net>
|
* Copyright 2008 François Revol <mmu_man@users.sourceforge.net>
|
||||||
* Copyright 2006 Rob Kendrick <rjek@rjek.com>
|
* Copyright 2006 Rob Kendrick <rjek@rjek.com>
|
||||||
*
|
*
|
||||||
@ -56,6 +57,8 @@ extern "C" {
|
|||||||
#include "desktop/browser.h"
|
#include "desktop/browser.h"
|
||||||
#include "desktop/netsurf.h"
|
#include "desktop/netsurf.h"
|
||||||
#include "desktop/version.h"
|
#include "desktop/version.h"
|
||||||
|
#include "desktop/searchweb.h"
|
||||||
|
#include "desktop/search.h"
|
||||||
#include "desktop/plotters.h"
|
#include "desktop/plotters.h"
|
||||||
#include "utils/nsoption.h"
|
#include "utils/nsoption.h"
|
||||||
#include "desktop/textinput.h"
|
#include "desktop/textinput.h"
|
||||||
@ -78,6 +81,7 @@ extern "C" {
|
|||||||
#include "beos/window.h"
|
#include "beos/window.h"
|
||||||
#include "beos/schedule.h"
|
#include "beos/schedule.h"
|
||||||
//#include "beos/download.h"
|
//#include "beos/download.h"
|
||||||
|
#include "beos/cookies.h"
|
||||||
|
|
||||||
#define TOOLBAR_HEIGHT 32
|
#define TOOLBAR_HEIGHT 32
|
||||||
#define DRAGGER_WIDTH 8
|
#define DRAGGER_WIDTH 8
|
||||||
@ -111,6 +115,7 @@ struct beos_scaffolding {
|
|||||||
BControl *home_button;
|
BControl *home_button;
|
||||||
|
|
||||||
NSIconTextControl *url_bar;
|
NSIconTextControl *url_bar;
|
||||||
|
NSIconTextControl *search_bar;
|
||||||
//BMenuField *url_bar_completion;
|
//BMenuField *url_bar_completion;
|
||||||
|
|
||||||
NSThrobber *throbber;
|
NSThrobber *throbber;
|
||||||
@ -478,6 +483,7 @@ NSBaseView::MessageReceived(BMessage *message)
|
|||||||
case 'home':
|
case 'home':
|
||||||
case 'urlc':
|
case 'urlc':
|
||||||
case 'urle':
|
case 'urle':
|
||||||
|
case 'sear':
|
||||||
case 'menu':
|
case 'menu':
|
||||||
case NO_ACTION:
|
case NO_ACTION:
|
||||||
case HELP_OPEN_CONTENTS:
|
case HELP_OPEN_CONTENTS:
|
||||||
@ -653,6 +659,7 @@ NSBaseView::AllAttached()
|
|||||||
g->home_button->SetTarget(this);
|
g->home_button->SetTarget(this);
|
||||||
|
|
||||||
g->url_bar->SetTarget(this);
|
g->url_bar->SetTarget(this);
|
||||||
|
g->search_bar->SetTarget(this);
|
||||||
|
|
||||||
rgb_color c = ui_color(B_PANEL_BACKGROUND_COLOR);
|
rgb_color c = ui_color(B_PANEL_BACKGROUND_COLOR);
|
||||||
SetViewColor(c);
|
SetViewColor(c);
|
||||||
@ -669,6 +676,7 @@ NSBaseView::AllAttached()
|
|||||||
g->home_button->SetViewColor(c);
|
g->home_button->SetViewColor(c);
|
||||||
g->home_button->SetLowColor(c);
|
g->home_button->SetLowColor(c);
|
||||||
g->url_bar->SetViewColor(c);
|
g->url_bar->SetViewColor(c);
|
||||||
|
g->search_bar->SetViewColor(c);
|
||||||
g->throbber->SetViewColor(c);
|
g->throbber->SetViewColor(c);
|
||||||
g->scroll_view->SetViewColor(c);
|
g->scroll_view->SetViewColor(c);
|
||||||
|
|
||||||
@ -806,6 +814,7 @@ static void nsbeos_scaffolding_update_colors(nsbeos_scaffolding *g)
|
|||||||
g->reload_button->SetViewColor(c);
|
g->reload_button->SetViewColor(c);
|
||||||
g->home_button->SetViewColor(c);
|
g->home_button->SetViewColor(c);
|
||||||
g->url_bar->SetViewColor(c);
|
g->url_bar->SetViewColor(c);
|
||||||
|
g->search_bar->SetViewColor(c);
|
||||||
g->throbber->SetViewColor(c);
|
g->throbber->SetViewColor(c);
|
||||||
g->scroll_view->SetViewColor(c);
|
g->scroll_view->SetViewColor(c);
|
||||||
|
|
||||||
@ -1073,6 +1082,41 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
|
|||||||
//nsbeos_completion_update(text.String());
|
//nsbeos_completion_update(text.String());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 'sear':
|
||||||
|
{
|
||||||
|
nserror ret;
|
||||||
|
nsurl* url;
|
||||||
|
BString text;
|
||||||
|
if (!scaffold->search_bar->LockLooper())
|
||||||
|
break;
|
||||||
|
text = scaffold->search_bar->Text();
|
||||||
|
scaffold->search_bar->UnlockLooper();
|
||||||
|
|
||||||
|
char t[PATH_MAX];
|
||||||
|
find_resource(t,"SearchEngines","./beos/res/SearchEngines");
|
||||||
|
|
||||||
|
search_web_init(&t[0]);
|
||||||
|
|
||||||
|
ret = search_web_omni(text.String(),SEARCH_WEB_OMNI_SEARCHONLY
|
||||||
|
,&url);
|
||||||
|
if (ret == NSERROR_OK) {
|
||||||
|
ret = browser_window_create(
|
||||||
|
(browser_window_create_flags)(BW_CREATE_HISTORY | BW_CREATE_TAB),
|
||||||
|
url,
|
||||||
|
NULL,
|
||||||
|
bw,
|
||||||
|
NULL);
|
||||||
|
nsurl_unref(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret != NSERROR_OK) {
|
||||||
|
warn_user(messages_get_errorcode(ret), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
search_web_finalise();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
case 'menu':
|
case 'menu':
|
||||||
{
|
{
|
||||||
@ -1148,9 +1192,15 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
|
|||||||
case HOTLIST_SHOW:
|
case HOTLIST_SHOW:
|
||||||
break;
|
break;
|
||||||
case COOKIES_SHOW:
|
case COOKIES_SHOW:
|
||||||
|
{
|
||||||
|
nsbeos_cookies_init();
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case COOKIES_DELETE:
|
case COOKIES_DELETE:
|
||||||
|
{
|
||||||
|
nsbeos_cookies_init();
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case BROWSER_PAGE:
|
case BROWSER_PAGE:
|
||||||
break;
|
break;
|
||||||
case BROWSER_PAGE_INFO:
|
case BROWSER_PAGE_INFO:
|
||||||
@ -1933,18 +1983,9 @@ nsbeos_scaffolding *nsbeos_new_scaffolding(struct gui_window *toplevel)
|
|||||||
item = make_menu_item("HistGlobal", message);
|
item = make_menu_item("HistGlobal", message);
|
||||||
submenu->AddItem(item);
|
submenu->AddItem(item);
|
||||||
|
|
||||||
|
|
||||||
submenu = new BMenu(messages_get("Cookies"));
|
|
||||||
menu->AddItem(submenu);
|
|
||||||
|
|
||||||
message = new BMessage(COOKIES_SHOW);
|
message = new BMessage(COOKIES_SHOW);
|
||||||
item = make_menu_item("ShowCookies", message);
|
item = make_menu_item("Cookie manager", message, true);
|
||||||
submenu->AddItem(item);
|
menu->AddItem(item);
|
||||||
|
|
||||||
message = new BMessage(COOKIES_DELETE);
|
|
||||||
item = make_menu_item("DeleteCookies", message);
|
|
||||||
submenu->AddItem(item);
|
|
||||||
|
|
||||||
|
|
||||||
message = new BMessage(BROWSER_FIND_TEXT);
|
message = new BMessage(BROWSER_FIND_TEXT);
|
||||||
item = make_menu_item("FindText", message);
|
item = make_menu_item("FindText", message);
|
||||||
@ -2113,6 +2154,21 @@ nsbeos_scaffolding *nsbeos_new_scaffolding(struct gui_window *toplevel)
|
|||||||
g->url_bar->TextView()->SetTextRect(rect);
|
g->url_bar->TextView()->SetTextRect(rect);
|
||||||
g->tool_bar->AddChild(g->url_bar);
|
g->tool_bar->AddChild(g->url_bar);
|
||||||
|
|
||||||
|
// search bar
|
||||||
|
|
||||||
|
rect = g->tool_bar->Bounds();
|
||||||
|
rect.left += TOOLBAR_HEIGHT * nButtons + (g->url_bar->Bounds().right - g->url_bar->Bounds().left);
|
||||||
|
rect.right -= TOOLBAR_HEIGHT * 1;
|
||||||
|
rect.InsetBy(5,5);
|
||||||
|
message = new BMessage('sear');
|
||||||
|
message->AddPointer("scaffolding", g);
|
||||||
|
g->search_bar = new NSIconTextControl(rect,"search_bar","","Search...",message,
|
||||||
|
B_FOLLOW_RIGHT);
|
||||||
|
g->search_bar->SetDivider(0);
|
||||||
|
rect = g->search_bar->TextView()->TextRect();
|
||||||
|
rect.left += 0;
|
||||||
|
g->search_bar->TextView()->TextRect();
|
||||||
|
g->tool_bar->AddChild(g->search_bar);
|
||||||
|
|
||||||
// throbber
|
// throbber
|
||||||
rect.Set(0, 0, 24, 24);
|
rect.Set(0, 0, 24, 24);
|
||||||
|
@ -179,12 +179,11 @@ endif
|
|||||||
S_GTK := font_pango.c bitmap.c gui.c schedule.c plotters.c \
|
S_GTK := font_pango.c bitmap.c gui.c schedule.c plotters.c \
|
||||||
treeview.c scaffolding.c gdk.c completion.c login.c throbber.c \
|
treeview.c scaffolding.c gdk.c completion.c login.c throbber.c \
|
||||||
selection.c history.c window.c fetch.c download.c menu.c \
|
selection.c history.c window.c fetch.c download.c menu.c \
|
||||||
print.c search.c tabs.c theme.c toolbar.c gettext.c \
|
print.c search.c tabs.c theme.c theme_container.c toolbar.c gettext.c \
|
||||||
compat.c cookies.c hotlist.c viewdata.c viewsource.c \
|
compat.c cookies.c hotlist.c viewdata.c viewsource.c \
|
||||||
preferences.c about.c ssl_cert.c resources.c
|
preferences.c about.c ssl_cert.c resources.c
|
||||||
|
|
||||||
S_GTK := $(addprefix gtk/,$(S_GTK)) $(addprefix utils/,container.c)
|
S_GTK := $(addprefix gtk/,$(S_GTK))
|
||||||
# code in utils/container.ch is non-universal it seems
|
|
||||||
|
|
||||||
# This is the final source build list
|
# This is the final source build list
|
||||||
# Note this is deliberately *not* expanded here as common and image
|
# Note this is deliberately *not* expanded here as common and image
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
Google|www.google.com|http://www.google.com/search?q=%s|http://www.google.com/favicon.ico|
|
|
||||||
Yahoo|search.yahoo.com|http://search.yahoo.com/search?p=%s|http://www.yahoo.com/favicon.ico|
|
|
||||||
Bing|www.bing.com|http://www.bing.com/search?q=%s|http://www.bing.com/favicon.ico|
|
|
||||||
Business.com|www.business.com|http://www.business.com/search/rslt_default.asp?query=%s|http://www.business.com/favicon.ico|
|
|
||||||
Omgili|www.omgili.com|http://www.omgili.com/AAAAA/%s.html|http://omgili.com/public/images/favicon.ico|
|
|
||||||
BBC News|search.bbc.co.uk|http://search.bbc.co.uk/search?q=%s&tab=ns|http://www.bbc.co.uk/favicon.ico|
|
|
||||||
Ubuntu Packages|packages.ubuntu.com|http://packages.ubuntu.com/search?keywords=%s|http://packages.ubuntu.com/favicon.ico|
|
|
||||||
Creative Commons|creativecommons.org|http://creativecommons.org/?s=%s|http://creativecommons.org/favicon.ico|fixme:favicon does not work as it is served as x-icon and is a png
|
|
||||||
Ask.com|www.ask.com|http://www.ask.com/web?q=%s|http://sp.uk.ask.com/sh/i/a14/favicon/favicon.ico|fixme:favicon is served as text/plain
|
|
||||||
Dictionary.com|dictionary.reference.com|http://dictionary.reference.com/browse/%s?jss=0|http://dictionary.reference.com/favicon.ico|
|
|
||||||
Youtube|www.youtube.com|http://www.youtube.com/results?search_query=%s|http://www.youtube.com/favicon.ico|
|
|
||||||
AOL|search.aol.com|http://search.aol.com/aol/search?query=%s|http://www.aol.com/favicon.ico|
|
|
||||||
Baidu|www.baidu.com|http://www.baidu.com/s?wd=%s|http://www.baidu.com/favicon.ico|
|
|
||||||
Amazon|www.amazon.com|http://www.amazon.com/s/ref=nb_ss_gw?field-keywords=%s|http://www.amazon.com/favicon.ico|
|
|
||||||
Ebay|shop.ebay.com|http://shop.ebay.com/items/%s|http://www.ebay.com/favicon.ico|
|
|
||||||
IMDB|www.imdb.com|http://www.imdb.com/find?q=%s|http://www.imdb.com/favicon.ico|
|
|
||||||
ESPN|search.espn.go.com|http://search.espn.go.com/%s/|http://www.espn.go.com/favicon.ico|
|
|
||||||
Wikipedia|en.wikipedia.org|http://en.wikipedia.org/w/index.php?title=Special%%3ASearch&search=%s|http://en.wikipedia.org/favicon.ico|
|
|
||||||
DuckDuckGo|www.duckduckgo.com|http://www.duckduckgo.com/html/?q=%s|http://www.duckduckgo.com/favicon.ico|fixme:Their ico upsets the current implementation
|
|
||||||
Seeks|www.seeks-project.info|https://www.seeks-project.info/search.php/search?q=%s|http://www.seeks-project.info/search.php/public/images/seek_icon_32x32_transparent.png|fixme:they have no icon
|
|
1
gtk/res/SearchEngines
Symbolic link
1
gtk/res/SearchEngines
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../resources/SearchEngines
|
@ -62,12 +62,12 @@
|
|||||||
#include "gtk/plotters.h"
|
#include "gtk/plotters.h"
|
||||||
#include "gtk/print.h"
|
#include "gtk/print.h"
|
||||||
#include "gtk/search.h"
|
#include "gtk/search.h"
|
||||||
#include "gtk/theme.h"
|
|
||||||
#include "gtk/throbber.h"
|
#include "gtk/throbber.h"
|
||||||
#include "gtk/toolbar.h"
|
#include "gtk/toolbar.h"
|
||||||
#include "gtk/window.h"
|
#include "gtk/window.h"
|
||||||
#include "gtk/gdk.h"
|
#include "gtk/gdk.h"
|
||||||
#include "gtk/scaffolding.h"
|
#include "gtk/scaffolding.h"
|
||||||
|
#include "gtk/theme.h"
|
||||||
#include "gtk/tabs.h"
|
#include "gtk/tabs.h"
|
||||||
#include "gtk/schedule.h"
|
#include "gtk/schedule.h"
|
||||||
#include "gtk/viewdata.h"
|
#include "gtk/viewdata.h"
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
|
|
||||||
#include "utils/config.h"
|
#include "utils/config.h"
|
||||||
#include "utils/nsoption.h"
|
#include "utils/nsoption.h"
|
||||||
#include "utils/container.h"
|
|
||||||
#include "utils/log.h"
|
#include "utils/log.h"
|
||||||
#include "utils/messages.h"
|
#include "utils/messages.h"
|
||||||
#include "utils/utils.h"
|
#include "utils/utils.h"
|
||||||
@ -39,6 +38,7 @@
|
|||||||
#include "gtk/scaffolding.h"
|
#include "gtk/scaffolding.h"
|
||||||
#include "gtk/menu.h"
|
#include "gtk/menu.h"
|
||||||
#include "gtk/theme.h"
|
#include "gtk/theme.h"
|
||||||
|
#include "gtk/theme_container.h"
|
||||||
#include "gtk/window.h"
|
#include "gtk/window.h"
|
||||||
#include "gtk/preferences.h"
|
#include "gtk/preferences.h"
|
||||||
|
|
||||||
|
@ -19,9 +19,6 @@
|
|||||||
#ifndef _NETSURF_GTK_THEME_H_
|
#ifndef _NETSURF_GTK_THEME_H_
|
||||||
#define _NETSURF_GTK_THEME_H_
|
#define _NETSURF_GTK_THEME_H_
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#include "gtk/scaffolding.h"
|
|
||||||
|
|
||||||
typedef enum search_buttons {
|
typedef enum search_buttons {
|
||||||
SEARCH_BACK_BUTTON = 0,
|
SEARCH_BACK_BUTTON = 0,
|
||||||
SEARCH_FORWARD_BUTTON,
|
SEARCH_FORWARD_BUTTON,
|
||||||
|
@ -38,12 +38,14 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
#include "utils/config.h"
|
#include "utils/config.h"
|
||||||
#include "utils/container.h"
|
|
||||||
#include "utils/log.h"
|
#include "utils/log.h"
|
||||||
#include "utils/messages.h"
|
#include "utils/messages.h"
|
||||||
#include "utils/utils.h"
|
#include "utils/utils.h"
|
||||||
|
|
||||||
|
#include "gtk/theme_container.h"
|
||||||
|
|
||||||
#ifdef WITH_MMAP
|
#ifdef WITH_MMAP
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#endif
|
#endif
|
@ -156,6 +156,7 @@ struct box * box_create(css_select_results *styles, css_computed_style *style,
|
|||||||
box->float_children = NULL;
|
box->float_children = NULL;
|
||||||
box->float_container = NULL;
|
box->float_container = NULL;
|
||||||
box->next_float = NULL;
|
box->next_float = NULL;
|
||||||
|
box->cached_place_below_level = 0;
|
||||||
box->list_marker = NULL;
|
box->list_marker = NULL;
|
||||||
box->col = NULL;
|
box->col = NULL;
|
||||||
box->gadget = NULL;
|
box->gadget = NULL;
|
||||||
|
@ -244,6 +244,9 @@ struct box {
|
|||||||
* This is used only for boxes with float_children */
|
* This is used only for boxes with float_children */
|
||||||
int clear_level;
|
int clear_level;
|
||||||
|
|
||||||
|
/* Level below which floats have been placed. */
|
||||||
|
int cached_place_below_level;
|
||||||
|
|
||||||
/** List marker box if this is a list-item, or 0. */
|
/** List marker box if this is a list-item, or 0. */
|
||||||
struct box *list_marker;
|
struct box *list_marker;
|
||||||
|
|
||||||
|
@ -227,6 +227,7 @@ bool layout_block_context(struct box *block, int viewport_height,
|
|||||||
assert(block->width != AUTO);
|
assert(block->width != AUTO);
|
||||||
|
|
||||||
block->float_children = NULL;
|
block->float_children = NULL;
|
||||||
|
block->cached_place_below_level = 0;
|
||||||
block->clear_level = 0;
|
block->clear_level = 0;
|
||||||
|
|
||||||
/* special case if the block contains an object */
|
/* special case if the block contains an object */
|
||||||
@ -2062,8 +2063,14 @@ void find_sides(struct box *fl, int y0, int y1,
|
|||||||
|
|
||||||
*left = *right = 0;
|
*left = *right = 0;
|
||||||
for (; fl; fl = fl->next_float) {
|
for (; fl; fl = fl->next_float) {
|
||||||
fy0 = fl->y;
|
|
||||||
fy1 = fl->y + fl->height;
|
fy1 = fl->y + fl->height;
|
||||||
|
if (fy1 < y0) {
|
||||||
|
/* Floats are sorted in order of decreasing bottom pos.
|
||||||
|
* Past here, all floats will be too high to concern us.
|
||||||
|
*/
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fy0 = fl->y;
|
||||||
if (y0 < fy1 && fy0 <= y1) {
|
if (y0 < fy1 && fy0 <= y1) {
|
||||||
if (fl->type == BOX_FLOAT_LEFT) {
|
if (fl->type == BOX_FLOAT_LEFT) {
|
||||||
fx1 = fl->x + fl->width;
|
fx1 = fl->x + fl->width;
|
||||||
@ -2071,7 +2078,7 @@ void find_sides(struct box *fl, int y0, int y1,
|
|||||||
*x0 = fx1;
|
*x0 = fx1;
|
||||||
*left = fl;
|
*left = fl;
|
||||||
}
|
}
|
||||||
} else if (fl->type == BOX_FLOAT_RIGHT) {
|
} else {
|
||||||
fx0 = fl->x;
|
fx0 = fl->x;
|
||||||
if (fx0 < *x1) {
|
if (fx0 < *x1) {
|
||||||
*x1 = fx0;
|
*x1 = fx0;
|
||||||
@ -2087,6 +2094,44 @@ void find_sides(struct box *fl, int y0, int y1,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Insert a float into a container.
|
||||||
|
*
|
||||||
|
* \param cont block formatting context block, used to contain float
|
||||||
|
* \param b box to add to float
|
||||||
|
*
|
||||||
|
* This sorts floats in order of descending bottom edges.
|
||||||
|
*/
|
||||||
|
static void add_float_to_container(struct box *cont, struct box *b)
|
||||||
|
{
|
||||||
|
struct box *box = cont->float_children;
|
||||||
|
int b_bottom = b->y + b->height;
|
||||||
|
|
||||||
|
assert(b->type == BOX_FLOAT_LEFT || b->type == BOX_FLOAT_RIGHT);
|
||||||
|
|
||||||
|
if (box == NULL) {
|
||||||
|
/* No other float children */
|
||||||
|
b->next_float = NULL;
|
||||||
|
cont->float_children = b;
|
||||||
|
return;
|
||||||
|
} else if (b_bottom >= box->y + box->height) {
|
||||||
|
/* Goes at start of list */
|
||||||
|
b->next_float = cont->float_children;
|
||||||
|
cont->float_children = b;
|
||||||
|
} else {
|
||||||
|
struct box *prev = NULL;
|
||||||
|
while (box != NULL && b_bottom < box->y + box->height) {
|
||||||
|
prev = box;
|
||||||
|
box = box->next_float;
|
||||||
|
}
|
||||||
|
if (prev != NULL) {
|
||||||
|
b->next_float = prev->next_float;
|
||||||
|
prev->next_float = b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Layout lines of text or inline boxes with floats.
|
* Layout lines of text or inline boxes with floats.
|
||||||
*
|
*
|
||||||
@ -2693,6 +2738,7 @@ bool layout_line(struct box *first, int *width, int *y,
|
|||||||
|
|
||||||
d = b->children;
|
d = b->children;
|
||||||
d->float_children = 0;
|
d->float_children = 0;
|
||||||
|
d->cached_place_below_level = 0;
|
||||||
b->float_container = d->float_container = cont;
|
b->float_container = d->float_container = cont;
|
||||||
|
|
||||||
if (!layout_float(d, *width, content))
|
if (!layout_float(d, *width, content))
|
||||||
@ -2729,7 +2775,8 @@ bool layout_line(struct box *first, int *width, int *y,
|
|||||||
left == 0 && right == 0)) &&
|
left == 0 && right == 0)) &&
|
||||||
(!place_below ||
|
(!place_below ||
|
||||||
(left == 0 && right == 0 && x == 0)) &&
|
(left == 0 && right == 0 && x == 0)) &&
|
||||||
cy >= cont->clear_level) {
|
cy >= cont->clear_level &&
|
||||||
|
cy >= cont->cached_place_below_level) {
|
||||||
/* + not cleared or,
|
/* + not cleared or,
|
||||||
* cleared and there are no floats to clear
|
* cleared and there are no floats to clear
|
||||||
* + fits without needing to be placed below or,
|
* + fits without needing to be placed below or,
|
||||||
@ -2754,6 +2801,9 @@ bool layout_line(struct box *first, int *width, int *y,
|
|||||||
/* place below into next available space */
|
/* place below into next available space */
|
||||||
int fcy = (cy > cont->clear_level) ? cy :
|
int fcy = (cy > cont->clear_level) ? cy :
|
||||||
cont->clear_level;
|
cont->clear_level;
|
||||||
|
fcy = (fcy > cont->cached_place_below_level) ?
|
||||||
|
fcy :
|
||||||
|
cont->cached_place_below_level;
|
||||||
fy = (fy > fcy) ? fy : fcy;
|
fy = (fy > fcy) ? fy : fcy;
|
||||||
fy = (fy == cy) ? fy + height : fy;
|
fy = (fy == cy) ? fy + height : fy;
|
||||||
|
|
||||||
@ -2787,16 +2837,7 @@ bool layout_line(struct box *first, int *width, int *y,
|
|||||||
else
|
else
|
||||||
right = b;
|
right = b;
|
||||||
}
|
}
|
||||||
if (cont->float_children == b) {
|
add_float_to_container(cont, b);
|
||||||
#ifdef LAYOUT_DEBUG
|
|
||||||
LOG("float %p already placed", b);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
box_dump(stderr, cont, 0, true);
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
b->next_float = cont->float_children;
|
|
||||||
cont->float_children = b;
|
|
||||||
|
|
||||||
split_box = 0;
|
split_box = 0;
|
||||||
}
|
}
|
||||||
@ -3404,10 +3445,13 @@ bool layout_float(struct box *b, int width, html_content *content)
|
|||||||
void place_float_below(struct box *c, int width, int cx, int y,
|
void place_float_below(struct box *c, int width, int cx, int y,
|
||||||
struct box *cont)
|
struct box *cont)
|
||||||
{
|
{
|
||||||
int x0, x1, yy = y;
|
int x0, x1, yy;
|
||||||
struct box *left;
|
struct box *left;
|
||||||
struct box *right;
|
struct box *right;
|
||||||
|
|
||||||
|
yy = y > cont->cached_place_below_level ?
|
||||||
|
y : cont->cached_place_below_level;
|
||||||
|
|
||||||
#ifdef LAYOUT_DEBUG
|
#ifdef LAYOUT_DEBUG
|
||||||
LOG("c %p, width %i, cx %i, y %i, cont %p", c, width, cx, y, cont);
|
LOG("c %p, width %i, cx %i, y %i, cont %p", c, width, cx, y, cont);
|
||||||
#endif
|
#endif
|
||||||
@ -3436,6 +3480,7 @@ void place_float_below(struct box *c, int width, int cx, int y,
|
|||||||
c->x = x1 - c->width;
|
c->x = x1 - c->width;
|
||||||
}
|
}
|
||||||
c->y = y;
|
c->y = y;
|
||||||
|
cont->cached_place_below_level = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3829,6 +3874,7 @@ bool layout_table(struct box *table, int available_width,
|
|||||||
c->padding[RIGHT] -
|
c->padding[RIGHT] -
|
||||||
c->border[RIGHT].width;
|
c->border[RIGHT].width;
|
||||||
c->float_children = 0;
|
c->float_children = 0;
|
||||||
|
c->cached_place_below_level = 0;
|
||||||
|
|
||||||
c->height = AUTO;
|
c->height = AUTO;
|
||||||
if (!layout_block_context(c, -1, content)) {
|
if (!layout_block_context(c, -1, content)) {
|
||||||
|
20
resources/SearchEngines
Normal file
20
resources/SearchEngines
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
Google|www.google.com|http://www.google.com/search?q=%s|http://www.google.com/favicon.ico|
|
||||||
|
Yahoo|search.yahoo.com|http://search.yahoo.com/search?p=%s|http://www.yahoo.com/favicon.ico|
|
||||||
|
Bing|www.bing.com|http://www.bing.com/search?q=%s|http://www.bing.com/favicon.ico|
|
||||||
|
Business.com|www.business.com|http://www.business.com/search/rslt_default.asp?query=%s|http://www.business.com/favicon.ico|
|
||||||
|
Omgili|www.omgili.com|http://www.omgili.com/AAAAA/%s.html|http://omgili.com/public/images/favicon.ico|
|
||||||
|
BBC News|search.bbc.co.uk|http://search.bbc.co.uk/search?q=%s&tab=ns|http://www.bbc.co.uk/favicon.ico|
|
||||||
|
Ubuntu Packages|packages.ubuntu.com|http://packages.ubuntu.com/search?keywords=%s|http://packages.ubuntu.com/favicon.ico|
|
||||||
|
Creative Commons|creativecommons.org|http://creativecommons.org/?s=%s|http://creativecommons.org/favicon.ico|fixme:favicon does not work as it is served as x-icon and is a png
|
||||||
|
Ask.com|www.ask.com|http://www.ask.com/web?q=%s|http://sp.uk.ask.com/sh/i/a14/favicon/favicon.ico|fixme:favicon is served as text/plain
|
||||||
|
Dictionary.com|dictionary.reference.com|http://dictionary.reference.com/browse/%s?jss=0|http://dictionary.reference.com/favicon.ico|
|
||||||
|
Youtube|www.youtube.com|http://www.youtube.com/results?search_query=%s|http://www.youtube.com/favicon.ico|
|
||||||
|
AOL|search.aol.com|http://search.aol.com/aol/search?query=%s|http://www.aol.com/favicon.ico|
|
||||||
|
Baidu|www.baidu.com|http://www.baidu.com/s?wd=%s|http://www.baidu.com/favicon.ico|
|
||||||
|
Amazon|www.amazon.com|http://www.amazon.com/s/ref=nb_ss_gw?field-keywords=%s|http://www.amazon.com/favicon.ico|
|
||||||
|
Ebay|shop.ebay.com|http://shop.ebay.com/items/%s|http://www.ebay.com/favicon.ico|
|
||||||
|
IMDB|www.imdb.com|http://www.imdb.com/find?q=%s|http://www.imdb.com/favicon.ico|
|
||||||
|
ESPN|search.espn.go.com|http://search.espn.go.com/%s/|http://www.espn.go.com/favicon.ico|
|
||||||
|
Wikipedia|en.wikipedia.org|http://en.wikipedia.org/w/index.php?title=Special%%3ASearch&search=%s|http://en.wikipedia.org/favicon.ico|
|
||||||
|
DuckDuckGo|www.duckduckgo.com|http://www.duckduckgo.com/html/?q=%s|http://www.duckduckgo.com/favicon.ico|fixme:Their ico upsets the current implementation
|
||||||
|
Seeks|www.seeks-project.info|https://www.seeks-project.info/search.php/search?q=%s|http://www.seeks-project.info/search.php/public/images/seek_icon_32x32_transparent.png|fixme:they have no icon
|
Loading…
Reference in New Issue
Block a user