summaryrefslogtreecommitdiff
path: root/amiga
diff options
context:
space:
mode:
Diffstat (limited to 'amiga')
-rw-r--r--amiga/Makefile.defaults40
-rw-r--r--amiga/Makefile.target12
-rwxr-xr-xamiga/dist/Install4
-rwxr-xr-xamiga/dist/NetSurf.guide4
-rw-r--r--amiga/download.c25
-rwxr-xr-xamiga/gui.c252
-rwxr-xr-xamiga/gui.h3
-rwxr-xr-xamiga/gui_options.c241
-rwxr-xr-xamiga/hotlist.c37
-rwxr-xr-xamiga/menu.c144
-rwxr-xr-xamiga/menu.h11
-rwxr-xr-xamiga/misc.c23
-rw-r--r--amiga/misc.h1
-rw-r--r--amiga/options.h9
-rwxr-xr-xamiga/tree.c2
15 files changed, 680 insertions, 128 deletions
diff --git a/amiga/Makefile.defaults b/amiga/Makefile.defaults
new file mode 100644
index 000000000..42bcb73ce
--- /dev/null
+++ b/amiga/Makefile.defaults
@@ -0,0 +1,40 @@
+# ----------------------------------------------------------------------------
+# Amiga-specific options
+# ----------------------------------------------------------------------------
+
+ # Force using glibc internal iconv implementation instead of external libiconv
+ # Valid options: YES, NO
+ NETSURF_USE_LIBICONV_PLUG := YES
+
+ # Enable NetSurf's use of librosprite for displaying RISC OS Sprites
+ # Valid options: YES, NO, AUTO
+ NETSURF_USE_ROSPRITE := NO
+
+ # Enable NetSurf's use of libmng for displaying MNGs, JNGs and PNGs
+ # Valid options: YES, NO (at least one of PNG/MNG/DT highly recommended)
+ NETSURF_USE_MNG := NO
+
+ # Enable NetSurf's use of libwebp for displaying WebPs
+ # Valid options: YES, NO
+ NETSURF_USE_WEBP := NO
+
+ # Enable NetSurf to display Amiga icons
+ # Valid options: YES, NO (recommended)
+ NETSURF_USE_AMIGA_ICON := YES
+
+ # Enable NetSurf's use of DataTypes for unknown filetypes
+ # Valid options: YES, NO
+ NETSURF_USE_AMIGA_DATATYPES := YES
+
+ # Enable NetSurf's use of libsvgtiny for displaying SVGs
+ # Valid options: YES, NO
+ NETSURF_USE_NSSVG := YES
+
+ # Enable NetSurf's use of libcairo for some plotter functions
+ # This will also link NetSurf with shared objects, and
+ # requires AmigaOS 4.1 or higher to run the resulting executable
+ # Valid options: YES, NO, AUTO
+ NETSURF_USE_AMIGA_CAIRO := AUTO
+
+ # Optimisation levels
+ CFLAGS += -O2 -gstabs
diff --git a/amiga/Makefile.target b/amiga/Makefile.target
index af4b0bd83..ec43fdd30 100644
--- a/amiga/Makefile.target
+++ b/amiga/Makefile.target
@@ -41,12 +41,12 @@ ifeq ($(HOST),amiga)
LDFLAGS += -use-dynld -ldl -lcairo -lpixman-1 -lfreetype -lfontconfig -lpng -lexpat
endif
else
- $(eval $(call pkg_config_find_and_add,ROSPRITE,librosprite,Sprite))
- $(eval $(call pkg_config_find_and_add,BMP,libnsbmp,BMP))
- $(eval $(call pkg_config_find_and_add,GIF,libnsgif,GIF))
- $(eval $(call pkg_config_find_and_add,PNG,libpng,PNG))
- $(eval $(call pkg_config_find_and_add,NSSVG,libsvgtiny,NSSVG))
- $(eval $(call pkg_config_find_and_add,AMIGA_CAIRO,cairo,Cairo))
+ $(eval $(call pkg_config_find_and_add_enabled,ROSPRITE,librosprite,Sprite))
+ $(eval $(call pkg_config_find_and_add_enabled,BMP,libnsbmp,BMP))
+ $(eval $(call pkg_config_find_and_add_enabled,GIF,libnsgif,GIF))
+ $(eval $(call pkg_config_find_and_add_enabled,PNG,libpng,PNG))
+ $(eval $(call pkg_config_find_and_add_enabled,NSSVG,libsvgtiny,NSSVG))
+ $(eval $(call pkg_config_find_and_add_enabled,AMIGA_CAIRO,cairo,Cairo))
$(eval $(call feature_enabled,AMIGA_ICON,-DWITH_AMIGA_ICON,,Amiga icon))
$(eval $(call feature_enabled,AMIGA_DATATYPES,-DWITH_AMIGA_DATATYPES,,DataTypes))
diff --git a/amiga/dist/Install b/amiga/dist/Install
index 7b8c5fe0b..e32096498 100755
--- a/amiga/dist/Install
+++ b/amiga/dist/Install
@@ -474,6 +474,10 @@
(rename (tackon @default-dest "Resources/SearchEngines") (tackon @default-dest "Resources/SearchEngines.backup"))
)
+(run "c:filenote Rexx/CloseTabs.nsrx \"Close other tabs\"")
+(run "c:filenote Rexx/ViewSource.nsrx \"View source\"")
+(run "c:filenote Rexx/GetVideo.nsrx \"Get video\"")
+
(copyfiles
(prompt "Copying files")
(source "")
diff --git a/amiga/dist/NetSurf.guide b/amiga/dist/NetSurf.guide
index b39ea3d3e..8759b2b24 100755
--- a/amiga/dist/NetSurf.guide
+++ b/amiga/dist/NetSurf.guide
@@ -48,6 +48,7 @@ There are a couple of Amiga-specific options which can only be changed directly
@{b}redraw_tile_size_x@{ub}/@{b}redraw_tile_size_y@{ub} Specify the size of the off-screen bitmap. Higher will speed up redraws at the expense of memory. 0 disables tiling (will use a bitmap at least the size of the screen NetSurf is running on)
@{b}font_antialiasing@{ub} Switch text anti-aliasing on or off. Defaults to on in true-colour modes, but text rendering performance can be improved by setting to 0.
@{b}window_simple_refresh@{ub} If set to 1, NetSurf will use SimpleRefresh rather than SmartRefresh windows. These have slower redraw but use less memory. Note that this setting has no noticeable effect if compositing is enabled. Defaults to 0 (SmartRefresh)
+@{b}web_search_width@{ub} Defaults to 0. Larger values will increase the size of the web search gadget next to the URL bar.
@{b}dithering_quality@{ub} Specify the dithering quality from all values supported by picture.datatype. Currently these are 0=None, 1=Normal, 2=High quality. Other values are undefined. This is only used when NetSurf is running in palette-mapped mode.
@{b}mask_alpha@{ub} Threshold to use when determining which alpha values to convert to full transparency (0 - 255, where 255 will convert even opaque pixels to transparent). Defaults to 50 (0x32). This is only used in palette-mapped modes where alpha blending is not currently supported.
@@ -182,9 +183,8 @@ links clicked within NetSurf.
Items from the hotlist can be added to the Hotlist menu as follows:
Select Hotlist => Show hotlist...
-Add a folder called Menu. This must not be placed within any other folder.
-Items in this folder node up to a maximum (currently) of 40 items will be added to the Hotlist menu, within the limits of the Intuition menu system.
+Items in the "Hotlist menu" folder node, up to a maximum (currently) of 40 items, will be added to the Hotlist menu, within the limits of the Intuition menu system.
Items in folders within the Menu folder node will be converted to subitems in the menu.
diff --git a/amiga/download.c b/amiga/download.c
index d5071d31f..c0c88bb0b 100644
--- a/amiga/download.c
+++ b/amiga/download.c
@@ -37,9 +37,10 @@
#include "desktop/options.h"
#include "amiga/bitmap.h"
#include "amiga/iff_dr2d.h"
+#include "amiga/file.h"
+#include "amiga/misc.h"
#include "amiga/theme.h"
#include "amiga/utf8.h"
-#include "amiga/file.h"
#include "desktop/download.h"
#include "desktop/selection.h"
@@ -389,7 +390,7 @@ gui_window_save_link(struct gui_window *g, const char *url, const char *title)
BOOL ami_download_check_overwrite(const char *file, struct Window *win, ULONG size)
{
/* Return TRUE if file can be (over-)written */
- int res = 0;
+ int32 res = 0;
BPTR lock = 0;
BPTR fh = 0;
int64 oldsize = 0;
@@ -415,27 +416,11 @@ BOOL ami_download_check_overwrite(const char *file, struct Window *win, ULONG si
overwritetext = ASPrintf(messages_get("OverwriteFile"));
}
- char *utf8text = ami_utf8_easy(overwritetext);
+ res = ami_warn_user_multi(overwritetext, "Replace", "DontReplace", win);
FreeVec(overwritetext);
-
- char *utf8gadget1 = ami_utf8_easy(messages_get("DontReplace"));
- char *utf8gadget2 = ami_utf8_easy(messages_get("Replace"));
- char *utf8gadgets = ASPrintf("%s|%s", utf8gadget1, utf8gadget2);
- free(utf8gadget1);
- free(utf8gadget2);
-
- res = TimedDosRequesterTags(TDR_ImageType, TDRIMAGE_WARNING,
- TDR_TitleString, messages_get("NetSurf"),
- TDR_FormatString, utf8text,
- TDR_GadgetString, utf8gadgets,
- TDR_Window, win,
- TAG_DONE);
-
- if(utf8text) free(utf8text);
- if(utf8gadgets) FreeVec(utf8gadgets);
}
else return TRUE;
- if(res == 0) return TRUE;
+ if(res == 1) return TRUE;
else return FALSE;
}
diff --git a/amiga/gui.c b/amiga/gui.c
index 064c49cbd..e1fc19d7f 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -177,6 +177,7 @@ void ami_get_vscroll_pos(struct gui_window_2 *gwin, ULONG *ys);
ULONG ami_set_border_gadget_balance(struct gui_window_2 *gwin);
ULONG ami_get_border_gadget_balance(struct gui_window_2 *gwin, ULONG *size1, ULONG *size2);
void ami_try_quit(void);
+void ami_quit_netsurf_delayed(void);
Object *ami_gui_splash_open(void);
void ami_gui_splash_close(Object *win_obj);
static uint32 ami_set_search_ico_render_hook(struct Hook *hook, APTR space,
@@ -1190,6 +1191,27 @@ void ami_gui_trap_mouse(struct gui_window_2 *gwin)
}
}
+void ami_gui_menu_update_all(void)
+{
+ struct nsObject *node;
+ struct nsObject *nnode;
+ struct gui_window_2 *gwin;
+
+ if(IsMinListEmpty(window_list)) return;
+
+ node = (struct nsObject *)GetHead((struct List *)window_list);
+
+ do {
+ nnode=(struct nsObject *)GetSucc((struct Node *)node);
+ gwin = node->objstruct;
+
+ if(node->Type == AMINS_WINDOW)
+ {
+ ami_menu_update_checked(gwin);
+ }
+ } while(node = nnode);
+}
+
void ami_handle_msg(void)
{
struct IntuiMessage *message = NULL;
@@ -1206,6 +1228,7 @@ void ami_handle_msg(void)
struct browser_window *closedbw;
struct timeval curtime;
static int drag_x_move = 0, drag_y_move = 0;
+ char *url;
if(IsMinListEmpty(window_list))
{
@@ -1633,6 +1656,7 @@ void ami_handle_msg(void)
ami_gui_history(gwin, false);
break;
+ case GID_HOTLIST:
default:
// printf("GADGET: %ld\n",(result & WMHI_GADGETMASK));
break;
@@ -1640,8 +1664,9 @@ void ami_handle_msg(void)
break;
case WMHI_RAWKEY:
+ ami_update_quals(gwin);
+
storage = result & WMHI_GADGETMASK;
-
if(storage >= IECODE_UP_PREFIX) break;
GetAttr(WINDOW_InputEvent,gwin->objects[OID_MAIN],(ULONG *)&ie);
@@ -1940,6 +1965,11 @@ void ami_handle_msg(void)
ami_menu_window_close = NULL;
}
+
+ if(ami_menu_check_toggled) {
+ ami_gui_menu_update_all();
+ ami_menu_check_toggled = false;
+ }
}
void ami_gui_appicon_remove(struct gui_window_2 *gwin)
@@ -2106,11 +2136,12 @@ void ami_get_msg(void)
ULONG winsignal = 1L << sport->mp_SigBit;
ULONG appsig = 1L << appport->mp_SigBit;
ULONG schedulesig = 1L << msgport->mp_SigBit;
+ ULONG ctrlcsig = SIGBREAKF_CTRL_C;
ULONG signal;
struct TimerRequest *timermsg = NULL;
struct MsgPort *printmsgport = ami_print_get_msgport();
ULONG printsig = 1L << printmsgport->mp_SigBit;
- ULONG signalmask = winsignal | appsig | schedulesig | rxsig | printsig | applibsig;
+ ULONG signalmask = winsignal | appsig | schedulesig | rxsig | printsig | applibsig | ctrlcsig;
signal = Wait(signalmask);
/*
@@ -2142,6 +2173,11 @@ printf("sig recvd %ld (%ld %ld %ld %ld %ld %ld)\n", signal, winsignal , appsig ,
schedule_run(FALSE);
}
}
+
+ if(signal & ctrlcsig)
+ {
+ ami_quit_netsurf_delayed();
+ }
}
void gui_poll(bool active)
@@ -2300,6 +2336,32 @@ void ami_quit_netsurf(void)
}
}
+void ami_quit_netsurf_delayed(void)
+{
+ int res = -1;
+#ifdef __amigaos4__
+ char *utf8text = ami_utf8_easy(messages_get("TCPIPShutdown"));
+ char *utf8gadgets = ami_utf8_easy(messages_get("AbortShutdown"));
+
+ DisplayBeep(NULL);
+
+ res = TimedDosRequesterTags(TDR_ImageType, TDRIMAGE_INFO,
+ TDR_TitleString, messages_get("NetSurf"),
+ TDR_FormatString, utf8text,
+ TDR_GadgetString, utf8gadgets,
+ TDR_Timeout, 5,
+ TDR_Inactive, TRUE,
+ TAG_DONE);
+
+ free(utf8text);
+ free(utf8gadgets);
+#endif
+ if(res == -1) { /* Requester timed out */
+ nsoption_set_bool(tab_close_warn, false);
+ ami_quit_netsurf();
+ }
+}
+
void ami_gui_close_screen(struct Screen *scrn)
{
if(scrn == NULL) return;
@@ -2428,7 +2490,7 @@ void ami_update_buttons(struct gui_window_2 *gwin)
}
}
-void ami_gui_hotlist_scan_2(struct tree *tree, struct node *root, WORD *gen, uint16 *item,
+void ami_gui_hotlist_scan_2(struct tree *tree, struct node *root, WORD *gen, int *item,
struct List *speed_button_list, struct gui_window_2 *gwin)
{
struct node *tempnode;
@@ -2470,14 +2532,14 @@ int ami_gui_hotlist_scan(struct tree *tree, struct List *speed_button_list, stru
struct node *root = tree_node_get_child(tree_get_root(tree));
struct node *node;
struct node_element *element;
- static WORD gen = 0;
- static uint16 item = 0;
+ WORD gen = 0;
+ int item = 0;
for (node = root; node; node = tree_node_get_next(node))
{
element = tree_node_find_element(node, TREE_ELEMENT_TITLE, NULL);
if(!element) element = tree_node_find_element(node, TREE_ELEMENT_TITLE, NULL);
- if(element && (strcmp(tree_node_element_get_text(element), "Toolbar") == 0))
+ if(element && (strcmp(tree_node_element_get_text(element), messages_get("HotlistToolbar")) == 0))
{
ami_gui_hotlist_scan_2(tree, tree_node_get_child(node), &gen, &item, speed_button_list, gwin);
}
@@ -2488,6 +2550,13 @@ int ami_gui_hotlist_scan(struct tree *tree, struct List *speed_button_list, stru
void ami_gui_hotlist_toolbar_add(struct gui_window_2 *gwin)
{
+ struct TagItem attrs[2];
+
+ attrs[0].ti_Tag = CHILD_MinWidth;
+ attrs[0].ti_Data = 0;
+ attrs[1].ti_Tag = TAG_DONE;
+ attrs[1].ti_Data = 0;
+
NewList(&gwin->hotlist_toolbar_list);
if(ami_gui_hotlist_scan(ami_tree_get_tree(hotlist_window), &gwin->hotlist_toolbar_list, gwin) > 0) {
@@ -2495,17 +2564,118 @@ void ami_gui_hotlist_toolbar_add(struct gui_window_2 *gwin)
SpeedBarObject,
GA_ID, GID_HOTLIST,
GA_RelVerify, TRUE,
+ ICA_TARGET, ICTARGET_IDCMP,
+ SPEEDBAR_BevelStyle, BVS_NONE,
SPEEDBAR_Buttons, &gwin->hotlist_toolbar_list,
SpeedBarEnd;
+
+ gwin->objects[GID_HOTLISTSEPBAR] =
+ BevelObject,
+ BEVEL_Style, BVS_SBAR_VERT,
+ BevelEnd;
IDoMethod(gwin->objects[GID_HOTLISTLAYOUT], LM_ADDCHILD,
- gwin->win, gwin->objects[GID_HOTLIST], NULL);
+ gwin->win, gwin->objects[GID_HOTLIST], attrs);
+
+ IDoMethod(gwin->objects[GID_HOTLISTLAYOUT], LM_ADDIMAGE,
+ gwin->win, gwin->objects[GID_HOTLISTSEPBAR], NULL);
+
+ FlushLayoutDomainCache((struct Gadget *)gwin->objects[GID_MAIN]);
+
+ RethinkLayout((struct Gadget *)gwin->objects[GID_MAIN],
+ gwin->win, NULL, TRUE);
+
+ if(gwin->bw) {
+ gwin->redraw_required = true;
+ gwin->bw->reformat_pending = true;
+ }
}
+}
+
+void ami_gui_hotlist_toolbar_free(struct gui_window_2 *gwin, struct List *speed_button_list)
+{
+ int i;
+ struct Node *node;
+ struct Node *nnode;
+
+ if(IsListEmpty(speed_button_list)) return;
+ node = GetHead(speed_button_list);
+
+ do {
+ nnode = GetSucc(node);
+ Remove(node);
+ FreeSpeedButtonNode(node);
+ } while(node = nnode);
+
+ for(i = 0; i < AMI_GUI_TOOLBAR_MAX; i++) {
+ if(gwin->hotlist_toolbar_lab[i]) {
+ free(gwin->hotlist_toolbar_lab[i]);
+ gwin->hotlist_toolbar_lab[i] = NULL;
+ }
+ }
+}
+
+void ami_gui_hotlist_toolbar_remove(struct gui_window_2 *gwin)
+{
+ IDoMethod(gwin->objects[GID_HOTLISTLAYOUT], LM_REMOVECHILD,
+ gwin->win, gwin->objects[GID_HOTLIST]);
+
+ IDoMethod(gwin->objects[GID_HOTLISTLAYOUT], LM_REMOVECHILD,
+ gwin->win, gwin->objects[GID_HOTLISTSEPBAR]);
FlushLayoutDomainCache((struct Gadget *)gwin->objects[GID_MAIN]);
RethinkLayout((struct Gadget *)gwin->objects[GID_MAIN],
gwin->win, NULL, TRUE);
+
+ gwin->redraw_required = true;
+ gwin->bw->reformat_pending = true;
+}
+
+void ami_gui_hotlist_toolbar_update(struct gui_window_2 *gwin)
+{
+ if(IsListEmpty(&gwin->hotlist_toolbar_list)) {
+ ami_gui_hotlist_toolbar_add(gwin);
+ return;
+ }
+
+ /* Below should be SetAttr according to Autodocs */
+ SetGadgetAttrs((struct Gadget *)gwin->objects[GID_HOTLIST],
+ gwin->win, NULL,
+ SPEEDBAR_Buttons, ~0,
+ TAG_DONE);
+
+ ami_gui_hotlist_toolbar_free(gwin, &gwin->hotlist_toolbar_list);
+
+ if(ami_gui_hotlist_scan(ami_tree_get_tree(hotlist_window), &gwin->hotlist_toolbar_list, gwin) > 0) {
+ SetGadgetAttrs((struct Gadget *)gwin->objects[GID_HOTLIST],
+ gwin->win, NULL,
+ SPEEDBAR_Buttons, &gwin->hotlist_toolbar_list,
+ TAG_DONE);
+ } else {
+ ami_gui_hotlist_toolbar_remove(gwin);
+ }
+}
+
+void ami_gui_hotlist_toolbar_update_all(void)
+{
+ struct nsObject *node;
+ struct nsObject *nnode;
+ struct gui_window_2 *gwin;
+
+ if(IsMinListEmpty(window_list)) return;
+
+ node = (struct nsObject *)GetHead((struct List *)window_list);
+
+ do {
+ nnode=(struct nsObject *)GetSucc((struct Node *)node);
+ gwin = node->objstruct;
+
+ if(node->Type == AMINS_WINDOW)
+ {
+ ami_gui_hotlist_toolbar_update(gwin);
+ }
+ } while(node = nnode);
}
void ami_toggletabbar(struct gui_window_2 *gwin, bool show)
@@ -2561,8 +2731,37 @@ void ami_toggletabbar(struct gui_window_2 *gwin, bool show)
RethinkLayout((struct Gadget *)gwin->objects[GID_MAIN],
gwin->win, NULL, TRUE);
- gwin->redraw_required = true;
- gwin->bw->reformat_pending = true;
+ if(gwin->bw) {
+ gwin->redraw_required = true;
+ gwin->bw->reformat_pending = true;
+ }
+}
+
+void ami_gui_tabs_toggle_all(void)
+{
+ struct nsObject *node;
+ struct nsObject *nnode;
+ struct gui_window_2 *gwin;
+
+ if(IsMinListEmpty(window_list)) return;
+
+ node = (struct nsObject *)GetHead((struct List *)window_list);
+
+ do {
+ nnode=(struct nsObject *)GetSucc((struct Node *)node);
+ gwin = node->objstruct;
+
+ if(node->Type == AMINS_WINDOW)
+ {
+ if(gwin->tabs == 1) {
+ if(nsoption_bool(tab_always_show) == true) {
+ ami_toggletabbar(gwin, true);
+ } else {
+ ami_toggletabbar(gwin, false);
+ }
+ }
+ }
+ } while(node = nnode);
}
struct gui_window *gui_create_browser_window(struct browser_window *bw,
@@ -2613,7 +2812,7 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
g->shared = clone->window->shared;
g->tab = g->shared->next_tab;
- if(g->shared->tabs == 1)
+ if((g->shared->tabs == 1) && (nsoption_bool(tab_always_show) == false))
ami_toggletabbar(g->shared, true);
SetGadgetAttrs((struct Gadget *)g->shared->objects[GID_TABS],
@@ -2961,7 +3160,7 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
GA_HintInfo, g->shared->helphints[GID_SEARCHSTRING],
StringEnd,
LayoutEnd,
- CHILD_WeightedWidth, 0,
+ CHILD_WeightedWidth, nsoption_int(web_search_width),
LAYOUT_AddChild, g->shared->objects[GID_THROBBER] = SpaceObject,
GA_ID,GID_THROBBER,
SPACE_MinWidth,throbber_width,
@@ -2977,7 +3176,7 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
BEVEL_Style, BVS_SBAR_VERT,
BevelEnd,
CHILD_WeightedHeight, 0,
- LAYOUT_AddChild, g->shared->objects[GID_HOTLISTLAYOUT] = HGroupObject,
+ LAYOUT_AddChild, g->shared->objects[GID_HOTLISTLAYOUT] = VGroupObject,
LAYOUT_SpaceInner, FALSE,
LayoutEnd,
CHILD_WeightedHeight,0,
@@ -3128,6 +3327,7 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
g->shared->win, NULL);
ami_gui_hotlist_toolbar_add(g->shared); /* is this the right place for this? */
+ if(nsoption_bool(tab_always_show)) ami_toggletabbar(g->shared, true);
}
else
{
@@ -3207,7 +3407,15 @@ void ami_close_all_tabs(struct gui_window_2 *gwin)
{
struct Node *tab;
struct Node *ntab;
-
+
+ if((gwin->tabs > 1) && (nsoption_bool(tab_close_warn) == true)) {
+ char *req_body = ami_utf8_easy(messages_get("MultiTabClose"));
+ int32 res = ami_warn_user_multi(req_body, "Yes", "No", gwin->win);
+ free(req_body);
+
+ if(res == 0) return;
+ }
+
if(gwin->tabs)
{
tab = GetHead(&gwin->tab_list);
@@ -3281,7 +3489,7 @@ void gui_window_destroy(struct gui_window *g)
g->shared->tabs--;
ami_switch_tab(g->shared,true);
- if(g->shared->tabs == 1)
+ if((g->shared->tabs == 1) && (nsoption_bool(tab_always_show) == false))
ami_toggletabbar(g->shared, false);
ami_utf8_free(g->tabtitle);
@@ -3296,6 +3504,8 @@ void gui_window_destroy(struct gui_window *g)
ami_gui_appicon_remove(g->shared);
if(g->shared->appwin) RemoveAppWindow(g->shared->appwin);
+ ami_gui_hotlist_toolbar_free(g->shared, &g->shared->hotlist_toolbar_list);
+
/* These aren't freed by the above.
* TODO: nav_west etc need freeing too? */
DisposeObject(g->shared->objects[GID_ADDTAB_BM]);
@@ -4173,6 +4383,8 @@ void ami_scroller_hook(struct Hook *hook,Object *object,struct IntuiMessage *msg
struct gui_window_2 *gwin = hook->h_Data;
struct IntuiWheelData *wheel;
Object *reqrefresh = NULL;
+ struct Node *node = NULL;
+ char *url;
switch(msg->Class)
{
@@ -4189,6 +4401,18 @@ void ami_scroller_hook(struct Hook *hook,Object *object,struct IntuiMessage *msg
gwin->redraw_required = true;
break;
+
+ case GID_HOTLIST:
+ if(node = (struct Node *)GetTagData(SPEEDBAR_SelectedNode, 0, msg->IAddress)) {
+ GetSpeedButtonNodeAttrs(node, SBNA_UserData, (ULONG *)&url, TAG_DONE);
+
+ if(gwin->key_state & BROWSER_MOUSE_MOD_2) {
+ browser_window_create(url, gwin->bw, NULL, false, true);
+ } else {
+ browser_window_go(gwin->bw, url, NULL, true);
+ }
+ }
+ break;
}
break;
diff --git a/amiga/gui.h b/amiga/gui.h
index 59c60f4c9..1dff5d3c0 100755
--- a/amiga/gui.h
+++ b/amiga/gui.h
@@ -66,6 +66,7 @@ enum
GID_TOOLBARLAYOUT,
GID_HOTLIST,
GID_HOTLISTLAYOUT,
+ GID_HOTLISTSEPBAR,
GID_HSCROLL,
GID_LAST
};
@@ -152,6 +153,8 @@ int ami_key_to_nskey(ULONG keycode, struct InputEvent *ie);
bool ami_text_box_at_point(struct gui_window_2 *gwin, ULONG *x, ULONG *y);
BOOL ami_gadget_hit(Object *obj, int x, int y);
void ami_gui_history(struct gui_window_2 *gwin, bool back);
+void ami_gui_hotlist_toolbar_update_all(void);
+void ami_gui_tabs_toggle_all(void);
struct TextFont *origrpfont;
struct MinList *window_list;
diff --git a/amiga/gui_options.c b/amiga/gui_options.c
index 27b3c6314..66e47d8ad 100755
--- a/amiga/gui_options.c
+++ b/amiga/gui_options.c
@@ -85,6 +85,7 @@ enum
GID_OPTS_SCREEN,
GID_OPTS_SCREENMODE,
GID_OPTS_SCREENNAME,
+ GID_OPTS_WIN_SIMPLE,
GID_OPTS_THEME,
GID_OPTS_PTRTRUE,
GID_OPTS_PTROS,
@@ -98,6 +99,7 @@ enum
GID_OPTS_FETCHCACHE,
GID_OPTS_NATIVEBM,
GID_OPTS_SCALEQ,
+ GID_OPTS_DITHERQ,
GID_OPTS_ANIMSPEED,
GID_OPTS_ANIMDISABLE,
GID_OPTS_DPI_Y,
@@ -109,6 +111,7 @@ enum
GID_OPTS_FONT_DEFAULT,
GID_OPTS_FONT_SIZE,
GID_OPTS_FONT_MINSIZE,
+ GID_OPTS_FONT_ANTIALIASING,
GID_OPTS_CACHE_MEM,
GID_OPTS_CACHE_DISC,
GID_OPTS_OVERWRITE,
@@ -117,6 +120,8 @@ enum
GID_OPTS_TAB_ACTIVE,
GID_OPTS_TAB_2,
GID_OPTS_TAB_LAST,
+ GID_OPTS_TAB_ALWAYS,
+ GID_OPTS_TAB_CLOSE,
GID_OPTS_SEARCH_PROV,
GID_OPTS_CLIPBOARD,
GID_OPTS_CONTEXTMENU,
@@ -149,6 +154,7 @@ enum
GRP_OPTS_PRIVACY,
GRP_OPTS_MISC,
GRP_OPTS_SCREEN,
+ GRP_OPTS_WINDOW,
GRP_OPTS_THEME,
GRP_OPTS_MOUSE,
GRP_OPTS_PROXY,
@@ -186,10 +192,11 @@ enum
};
#define OPTS_LAST LAB_OPTS_LAST
-#define OPTS_MAX_TABS 9
+#define OPTS_MAX_TABS 10
#define OPTS_MAX_SCREEN 4
#define OPTS_MAX_PROXY 5
#define OPTS_MAX_NATIVEBM 3
+#define OPTS_MAX_DITHER 4
struct ami_gui_opts_window {
struct nsObject *node;
@@ -203,6 +210,7 @@ CONST_STRPTR tabs[OPTS_MAX_TABS];
static STRPTR screenopts[OPTS_MAX_SCREEN];
CONST_STRPTR proxyopts[OPTS_MAX_PROXY];
CONST_STRPTR nativebmopts[OPTS_MAX_NATIVEBM];
+CONST_STRPTR ditheropts[OPTS_MAX_DITHER];
CONST_STRPTR fontopts[6];
CONST_STRPTR gadlab[OPTS_LAST];
STRPTR *websearch_list;
@@ -218,12 +226,13 @@ void ami_gui_opts_setup(void)
tabs[3] = (char *)ami_utf8_easy((char *)messages_get("con_rendering"));
tabs[4] = (char *)ami_utf8_easy((char *)messages_get("con_fonts"));
tabs[5] = (char *)ami_utf8_easy((char *)messages_get("con_cache"));
- tabs[6] = (char *)ami_utf8_easy((char *)messages_get("con_advanced"));
+ tabs[6] = (char *)ami_utf8_easy((char *)messages_get("Tabs"));
+ tabs[7] = (char *)ami_utf8_easy((char *)messages_get("con_advanced"));
#ifdef WITH_PDF_EXPORT
- tabs[7] = (char *)ami_utf8_easy((char *)messages_get("Export"));
- tabs[8] = NULL;
+ tabs[8] = (char *)ami_utf8_easy((char *)messages_get("Export"));
+ tabs[9] = NULL;
#else
- tabs[7] = NULL;
+ tabs[8] = NULL;
#endif
screenopts[0] = (char *)ami_utf8_easy((char *)messages_get("ScreenOwn"));
@@ -242,6 +251,11 @@ void ami_gui_opts_setup(void)
nativebmopts[2] = (char *)ami_utf8_easy((char *)messages_get("All"));
nativebmopts[3] = NULL;
+ ditheropts[0] = (char *)ami_utf8_easy((char *)messages_get("Low"));
+ ditheropts[1] = (char *)ami_utf8_easy((char *)messages_get("Medium"));
+ ditheropts[2] = (char *)ami_utf8_easy((char *)messages_get("High"));
+ ditheropts[3] = NULL;
+
websearch_list = ami_gui_opts_websearch();
gadlab[GID_OPTS_HOMEPAGE] = (char *)ami_utf8_easy((char *)messages_get("HomePageURL"));
@@ -255,6 +269,7 @@ void ami_gui_opts_setup(void)
gadlab[GID_OPTS_REFERRAL] = (char *)ami_utf8_easy((char *)messages_get("SendReferer"));
gadlab[GID_OPTS_DONOTTRACK] = (char *)ami_utf8_easy((char *)messages_get("DoNotTrack"));
gadlab[GID_OPTS_FASTSCROLL] = (char *)ami_utf8_easy((char *)messages_get("FastScrolling"));
+ gadlab[GID_OPTS_WIN_SIMPLE] = (char *)ami_utf8_easy((char *)messages_get("SimpleRefresh"));
gadlab[GID_OPTS_PTRTRUE] = (char *)ami_utf8_easy((char *)messages_get("TrueColour"));
gadlab[GID_OPTS_PTROS] = (char *)ami_utf8_easy((char *)messages_get("OSPointers"));
gadlab[GID_OPTS_PROXY] = (char *)ami_utf8_easy((char *)messages_get("ProxyType"));
@@ -266,6 +281,7 @@ void ami_gui_opts_setup(void)
gadlab[GID_OPTS_FETCHCACHE] = (char *)ami_utf8_easy((char *)messages_get("FetchesCached"));
gadlab[GID_OPTS_NATIVEBM] = (char *)ami_utf8_easy((char *)messages_get("CacheNative"));
gadlab[GID_OPTS_SCALEQ] = (char *)ami_utf8_easy((char *)messages_get("ScaleQuality"));
+ gadlab[GID_OPTS_DITHERQ] = (char *)ami_utf8_easy((char *)messages_get("DitherQuality"));
gadlab[GID_OPTS_ANIMSPEED] = (char *)ami_utf8_easy((char *)messages_get("AnimSpeedLimit"));
gadlab[GID_OPTS_DPI_Y] = (char *)ami_utf8_easy((char *)messages_get("ResolutionY"));
gadlab[GID_OPTS_ANIMDISABLE] = (char *)ami_utf8_easy((char *)messages_get("AnimDisable"));
@@ -277,6 +293,7 @@ void ami_gui_opts_setup(void)
gadlab[GID_OPTS_FONT_DEFAULT] = (char *)ami_utf8_easy((char *)messages_get("Default"));
gadlab[GID_OPTS_FONT_SIZE] = (char *)ami_utf8_easy((char *)messages_get("Default"));
gadlab[GID_OPTS_FONT_MINSIZE] = (char *)ami_utf8_easy((char *)messages_get("Minimum"));
+ gadlab[GID_OPTS_FONT_ANTIALIASING] = (char *)ami_utf8_easy((char *)messages_get("FontAntialiasing"));
gadlab[GID_OPTS_CACHE_MEM] = (char *)ami_utf8_easy((char *)messages_get("Size"));
gadlab[GID_OPTS_CACHE_DISC] = (char *)ami_utf8_easy((char *)messages_get("Duration"));
gadlab[GID_OPTS_OVERWRITE] = (char *)ami_utf8_easy((char *)messages_get("ConfirmOverwrite"));
@@ -285,6 +302,8 @@ void ami_gui_opts_setup(void)
gadlab[GID_OPTS_TAB_ACTIVE] = (char *)ami_utf8_easy((char *)messages_get("TabActive"));
gadlab[GID_OPTS_TAB_2] = (char *)ami_utf8_easy((char *)messages_get("TabMiddle"));
gadlab[GID_OPTS_TAB_LAST] = (char *)ami_utf8_easy((char *)messages_get("TabLast"));
+ gadlab[GID_OPTS_TAB_ALWAYS] = (char *)ami_utf8_easy((char *)messages_get("TabAlways"));
+ gadlab[GID_OPTS_TAB_CLOSE] = (char *)ami_utf8_easy((char *)messages_get("TabClose"));
gadlab[GID_OPTS_SEARCH_PROV] = (char *)ami_utf8_easy((char *)messages_get("SearchProvider"));
gadlab[GID_OPTS_CLIPBOARD] = (char *)ami_utf8_easy((char *)messages_get("ClipboardUTF8"));
gadlab[GID_OPTS_CONTEXTMENU] = (char *)ami_utf8_easy((char *)messages_get("ContextMenu"));
@@ -321,6 +340,7 @@ void ami_gui_opts_setup(void)
gadlab[GRP_OPTS_SCRIPTING] = (char *)ami_utf8_easy((char *)messages_get("Scripting"));
gadlab[GRP_OPTS_MISC] = (char *)ami_utf8_easy((char *)messages_get("Miscellaneous"));
gadlab[GRP_OPTS_SCREEN] = (char *)ami_utf8_easy((char *)messages_get("Screen"));
+ gadlab[GRP_OPTS_WINDOW] = (char *)ami_utf8_easy((char *)messages_get("Window"));
gadlab[GRP_OPTS_THEME] = (char *)ami_utf8_easy((char *)messages_get("Theme"));
gadlab[GRP_OPTS_MOUSE] = (char *)ami_utf8_easy((char *)messages_get("MousePointers"));
gadlab[GRP_OPTS_PROXY] = (char *)ami_utf8_easy((char *)messages_get("Proxy"));
@@ -682,6 +702,18 @@ void ami_gui_opts_open(void)
LAYOUT_AddChild,VGroupObject,
LAYOUT_SpaceOuter, TRUE,
LAYOUT_BevelStyle, BVS_GROUP,
+ LAYOUT_Label, gadlab[GRP_OPTS_WINDOW],
+ LAYOUT_AddChild, gow->objects[GID_OPTS_WIN_SIMPLE] = CheckBoxObject,
+ GA_ID, GID_OPTS_WIN_SIMPLE,
+ GA_RelVerify, TRUE,
+ GA_Text, gadlab[GID_OPTS_WIN_SIMPLE],
+ GA_Selected, nsoption_bool(window_simple_refresh),
+ CheckBoxEnd,
+ LayoutEnd, // window
+ CHILD_WeightedHeight,0,
+ LAYOUT_AddChild,VGroupObject,
+ LAYOUT_SpaceOuter, TRUE,
+ LAYOUT_BevelStyle, BVS_GROUP,
LAYOUT_Label, gadlab[GRP_OPTS_THEME],
LAYOUT_AddChild, gow->objects[GID_OPTS_THEME] = GetFileObject,
GA_ID, GID_OPTS_THEME,
@@ -848,6 +880,16 @@ void ami_gui_opts_open(void)
CHILD_Label, LabelObject,
LABEL_Text, gadlab[GID_OPTS_NATIVEBM],
LabelEnd,
+ LAYOUT_AddChild, gow->objects[GID_OPTS_DITHERQ] = ChooserObject,
+ GA_ID, GID_OPTS_DITHERQ,
+ GA_RelVerify, TRUE,
+ CHOOSER_PopUp, TRUE,
+ CHOOSER_LabelArray, ditheropts,
+ CHOOSER_Selected, nsoption_int(dither_quality),
+ ChooserEnd,
+ CHILD_Label, LabelObject,
+ LABEL_Text, gadlab[GID_OPTS_DITHERQ],
+ LabelEnd,
LAYOUT_AddChild, gow->objects[GID_OPTS_SCALEQ] = CheckBoxObject,
GA_ID, GID_OPTS_SCALEQ,
GA_Disabled, scaledisabled,
@@ -986,46 +1028,59 @@ void ami_gui_opts_open(void)
LabelEnd,
LayoutEnd, // font faces
CHILD_WeightedHeight, 0,
- LAYOUT_AddChild,VGroupObject,
- LAYOUT_SpaceOuter, TRUE,
- LAYOUT_BevelStyle, BVS_GROUP,
- LAYOUT_Label, gadlab[GRP_OPTS_FONTSIZE],
- LAYOUT_AddChild, HGroupObject,
- LAYOUT_LabelColumn, PLACETEXT_RIGHT,
- LAYOUT_AddChild, gow->objects[GID_OPTS_FONT_SIZE] = IntegerObject,
- GA_ID, GID_OPTS_FONT_SIZE,
- GA_RelVerify, TRUE,
- INTEGER_Number, nsoption_int(font_size) / 10,
- INTEGER_Minimum, 1,
- INTEGER_Maximum, 99,
- INTEGER_Arrows, TRUE,
- IntegerEnd,
- CHILD_WeightedWidth, 0,
+ LAYOUT_AddChild, HGroupObject,
+ LAYOUT_AddChild,VGroupObject,
+ LAYOUT_SpaceOuter, TRUE,
+ LAYOUT_BevelStyle, BVS_GROUP,
+ LAYOUT_Label, gadlab[GRP_OPTS_FONTSIZE],
+ LAYOUT_AddChild, HGroupObject,
+ LAYOUT_LabelColumn, PLACETEXT_RIGHT,
+ LAYOUT_AddChild, gow->objects[GID_OPTS_FONT_SIZE] = IntegerObject,
+ GA_ID, GID_OPTS_FONT_SIZE,
+ GA_RelVerify, TRUE,
+ INTEGER_Number, nsoption_int(font_size) / 10,
+ INTEGER_Minimum, 1,
+ INTEGER_Maximum, 99,
+ INTEGER_Arrows, TRUE,
+ IntegerEnd,
+ CHILD_WeightedWidth, 0,
+ CHILD_Label, LabelObject,
+ LABEL_Text, gadlab[LAB_OPTS_PT],
+ LabelEnd,
+ LayoutEnd,
CHILD_Label, LabelObject,
- LABEL_Text, gadlab[LAB_OPTS_PT],
+ LABEL_Text, gadlab[GID_OPTS_FONT_SIZE],
LabelEnd,
- LayoutEnd,
- CHILD_Label, LabelObject,
- LABEL_Text, gadlab[GID_OPTS_FONT_SIZE],
- LabelEnd,
- LAYOUT_AddChild, HGroupObject,
- LAYOUT_LabelColumn, PLACETEXT_RIGHT,
- LAYOUT_AddChild, gow->objects[GID_OPTS_FONT_MINSIZE] = IntegerObject,
- GA_ID, GID_OPTS_FONT_MINSIZE,
- GA_RelVerify, TRUE,
- INTEGER_Number, nsoption_int(font_min_size) / 10,
- INTEGER_Minimum, 1,
- INTEGER_Maximum, 99,
- INTEGER_Arrows, TRUE,
- IntegerEnd,
- CHILD_WeightedWidth, 0,
+ LAYOUT_AddChild, HGroupObject,
+ LAYOUT_LabelColumn, PLACETEXT_RIGHT,
+ LAYOUT_AddChild, gow->objects[GID_OPTS_FONT_MINSIZE] = IntegerObject,
+ GA_ID, GID_OPTS_FONT_MINSIZE,
+ GA_RelVerify, TRUE,
+ INTEGER_Number, nsoption_int(font_min_size) / 10,
+ INTEGER_Minimum, 1,
+ INTEGER_Maximum, 99,
+ INTEGER_Arrows, TRUE,
+ IntegerEnd,
+ CHILD_WeightedWidth, 0,
+ CHILD_Label, LabelObject,
+ LABEL_Text, gadlab[LAB_OPTS_PT],
+ LabelEnd,
+ LayoutEnd,
CHILD_Label, LabelObject,
- LABEL_Text, gadlab[LAB_OPTS_PT],
+ LABEL_Text, gadlab[GID_OPTS_FONT_MINSIZE],
LabelEnd,
LayoutEnd,
- CHILD_Label, LabelObject,
- LABEL_Text, gadlab[GID_OPTS_FONT_MINSIZE],
- LabelEnd,
+ LAYOUT_AddChild,VGroupObject,
+ LAYOUT_SpaceOuter, TRUE,
+ LAYOUT_BevelStyle, BVS_GROUP,
+ LAYOUT_Label, gadlab[GRP_OPTS_MISC],
+ LAYOUT_AddChild, gow->objects[GID_OPTS_FONT_ANTIALIASING] = CheckBoxObject,
+ GA_ID, GID_OPTS_FONT_ANTIALIASING,
+ GA_RelVerify, TRUE,
+ GA_Text, gadlab[GID_OPTS_FONT_ANTIALIASING],
+ GA_Selected, nsoption_bool(font_antialiasing),
+ CheckBoxEnd,
+ LayoutEnd,
LayoutEnd,
CHILD_WeightedHeight, 0,
LayoutEnd, // page vgroup
@@ -1089,6 +1144,51 @@ void ami_gui_opts_open(void)
CHILD_WeightedHeight, 0,
PageEnd, // page object
/*
+ ** Tabs
+ */
+ PAGE_Add, LayoutObject,
+ LAYOUT_AddChild,VGroupObject,
+ LAYOUT_AddChild,HGroupObject,
+ LAYOUT_AddChild,VGroupObject,
+ LAYOUT_SpaceOuter, TRUE,
+ LAYOUT_BevelStyle, BVS_GROUP,
+ LAYOUT_Label, gadlab[GRP_OPTS_TABS],
+ LAYOUT_AddChild, gow->objects[GID_OPTS_TAB_ACTIVE] = CheckBoxObject,
+ GA_ID, GID_OPTS_TAB_ACTIVE,
+ GA_RelVerify, TRUE,
+ GA_Text, gadlab[GID_OPTS_TAB_ACTIVE],
+ GA_Selected, !nsoption_bool(new_tab_active),
+ CheckBoxEnd,
+ LAYOUT_AddChild, gow->objects[GID_OPTS_TAB_LAST] = CheckBoxObject,
+ GA_ID, GID_OPTS_TAB_LAST,
+ GA_RelVerify, TRUE,
+ GA_Text, gadlab[GID_OPTS_TAB_LAST],
+ GA_Selected, nsoption_bool(new_tab_last),
+ CheckBoxEnd,
+ LAYOUT_AddChild, gow->objects[GID_OPTS_TAB_2] = CheckBoxObject,
+ GA_ID, GID_OPTS_TAB_2,
+ GA_RelVerify, TRUE,
+ GA_Text, gadlab[GID_OPTS_TAB_2],
+ GA_Selected, nsoption_bool(button_2_tab),
+ CheckBoxEnd,
+ LAYOUT_AddChild, gow->objects[GID_OPTS_TAB_ALWAYS] = CheckBoxObject,
+ GA_ID, GID_OPTS_TAB_ALWAYS,
+ GA_RelVerify, TRUE,
+ GA_Text, gadlab[GID_OPTS_TAB_ALWAYS],
+ GA_Selected, nsoption_bool(tab_always_show),
+ CheckBoxEnd,
+ LAYOUT_AddChild, gow->objects[GID_OPTS_TAB_CLOSE] = CheckBoxObject,
+ GA_ID, GID_OPTS_TAB_CLOSE,
+ GA_RelVerify, TRUE,
+ GA_Text, gadlab[GID_OPTS_TAB_CLOSE],
+ GA_Selected, nsoption_bool(tab_close_warn),
+ CheckBoxEnd,
+ LayoutEnd, // tabbed browsing
+ LayoutEnd,
+ LayoutEnd, // page vgroup
+ CHILD_WeightedHeight, 0,
+ PageEnd, // page object
+ /*
** Advanced
*/
PAGE_Add, LayoutObject,
@@ -1127,29 +1227,6 @@ void ami_gui_opts_open(void)
LayoutEnd, // downloads
CHILD_WeightedHeight, 0,
LAYOUT_AddChild,HGroupObject,
- LAYOUT_AddChild,VGroupObject,
- LAYOUT_SpaceOuter, TRUE,
- LAYOUT_BevelStyle, BVS_GROUP,
- LAYOUT_Label, gadlab[GRP_OPTS_TABS],
- LAYOUT_AddChild, gow->objects[GID_OPTS_TAB_ACTIVE] = CheckBoxObject,
- GA_ID, GID_OPTS_TAB_ACTIVE,
- GA_RelVerify, TRUE,
- GA_Text, gadlab[GID_OPTS_TAB_ACTIVE],
- GA_Selected, !nsoption_bool(new_tab_active),
- CheckBoxEnd,
- LAYOUT_AddChild, gow->objects[GID_OPTS_TAB_LAST] = CheckBoxObject,
- GA_ID, GID_OPTS_TAB_LAST,
- GA_RelVerify, TRUE,
- GA_Text, gadlab[GID_OPTS_TAB_LAST],
- GA_Selected, nsoption_bool(new_tab_last),
- CheckBoxEnd,
- LAYOUT_AddChild, gow->objects[GID_OPTS_TAB_2] = CheckBoxObject,
- GA_ID, GID_OPTS_TAB_2,
- GA_RelVerify, TRUE,
- GA_Text, gadlab[GID_OPTS_TAB_2],
- GA_Selected, nsoption_bool(button_2_tab),
- CheckBoxEnd,
- LayoutEnd, // tabbed browsing
LAYOUT_AddChild, VGroupObject,
LAYOUT_SpaceOuter, TRUE,
@@ -1423,6 +1500,7 @@ void ami_gui_opts_use(bool save)
struct TextAttr *tattr;
char *dot;
bool rescan_fonts = false;
+ bool old_tab_always_show;
SetWindowPointer(gow->win,
WA_BusyPointer, TRUE,
@@ -1506,6 +1584,13 @@ void ami_gui_opts_use(bool save)
nsoption_set_charp(modeid, modeid);
}
+ GetAttr(GA_Selected,gow->objects[GID_OPTS_WIN_SIMPLE],(ULONG *)&data);
+ if (data) {
+ nsoption_set_bool(window_simple_refresh, true);
+ } else {
+ nsoption_set_bool(window_simple_refresh, false);
+ }
+
GetAttr(GETFILE_Drawer,gow->objects[GID_OPTS_THEME],(ULONG *)&data);
nsoption_set_charp(theme, (char *)strdup((char *)data));
@@ -1558,6 +1643,8 @@ void ami_gui_opts_use(bool save)
nsoption_set_bool(scale_quality, false);
}
+ GetAttr(CHOOSER_Selected,gow->objects[GID_OPTS_DITHERQ],(ULONG *)&nsoption_int(dither_quality));
+
GetAttr(STRINGA_TextVal,gow->objects[GID_OPTS_ANIMSPEED],(ULONG *)&data);
animspeed = strtof((char *)data, NULL);
nsoption_set_int(minimum_gif_delay, (int)(animspeed * 100));
@@ -1611,6 +1698,13 @@ void ami_gui_opts_use(bool save)
GetAttr(INTEGER_Number,gow->objects[GID_OPTS_FONT_MINSIZE],(ULONG *)&nsoption_int(font_min_size));
nsoption_set_int(font_min_size, nsoption_int(font_min_size) * 10);
+ GetAttr(GA_Selected, gow->objects[GID_OPTS_FONT_ANTIALIASING], (ULONG *)&data);
+ if(data) {
+ nsoption_set_bool(font_antialiasing, true);
+ } else {
+ nsoption_set_bool(font_antialiasing, false);
+ }
+
GetAttr(INTEGER_Number,gow->objects[GID_OPTS_CACHE_MEM],(ULONG *)&nsoption_int(memory_cache_size));
nsoption_set_int(memory_cache_size, nsoption_int(memory_cache_size) * 1048576);
@@ -1654,6 +1748,25 @@ void ami_gui_opts_use(bool save)
nsoption_set_bool(button_2_tab, false);
}
+ GetAttr(GA_Selected,gow->objects[GID_OPTS_TAB_CLOSE],(ULONG *)&data);
+ if (data) {
+ nsoption_set_bool(tab_close_warn, true);
+ } else {
+ nsoption_set_bool(tab_close_warn, false);
+ }
+
+ GetAttr(GA_Selected,gow->objects[GID_OPTS_TAB_ALWAYS],(ULONG *)&data);
+ old_tab_always_show = nsoption_bool(tab_always_show);
+
+ if (data) {
+ nsoption_set_bool(tab_always_show, true);
+ } else {
+ nsoption_set_bool(tab_always_show, false);
+ }
+
+ if(old_tab_always_show != nsoption_bool(tab_always_show))
+ ami_gui_tabs_toggle_all();
+
GetAttr(CHOOSER_Selected,gow->objects[GID_OPTS_SEARCH_PROV],(ULONG *)&nsoption_int(search_provider));
search_web_provider_details(nsoption_int(search_provider));
search_web_retrieve_ico(false);
@@ -1748,6 +1861,8 @@ void ami_gui_opts_use(bool save)
ami_font_savescanner(); /* just in case it has changed and been used only */
}
+ ami_menu_check_toggled = true;
+
SetWindowPointer(gow->win,
WA_Pointer, NULL,
TAG_DONE);
diff --git a/amiga/hotlist.c b/amiga/hotlist.c
index 6469cbd90..c82b92f72 100755
--- a/amiga/hotlist.c
+++ b/amiga/hotlist.c
@@ -18,8 +18,41 @@
#include <proto/exec.h>
#include "amiga/hotlist.h"
-#include "desktop/hotlist.h"
#include "amiga/tree.h"
+#include "desktop/hotlist.h"
+#include "utils/messages.h"
+
+bool ami_hotlist_find_dir(struct tree *tree, const char *dir_name)
+{
+ struct node *root = tree_node_get_child(tree_get_root(tree));
+ struct node *node;
+ struct node_element *element;
+
+ for (node = root; node; node = tree_node_get_next(node))
+ {
+ element = tree_node_find_element(node, TREE_ELEMENT_TITLE, NULL);
+ if(!element) element = tree_node_find_element(node, TREE_ELEMENT_TITLE, NULL);
+ if(element && (strcmp(tree_node_element_get_text(element), dir_name) == 0))
+ {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void ami_hotlist_add_default_dirs(struct tree *tree)
+{
+ if(ami_hotlist_find_dir(tree, messages_get("HotlistMenu")) == false) {
+ tree_create_folder_node(tree, tree_get_root(tree),
+ messages_get("HotlistMenu"), true, true, false);
+ }
+
+ if(ami_hotlist_find_dir(tree, messages_get("HotlistToolbar")) == false) {
+ tree_create_folder_node(tree, tree_get_root(tree),
+ messages_get("HotlistToolbar"), true, true, false);
+ }
+}
void ami_hotlist_initialise(const char *hotlist_file)
{
@@ -30,6 +63,8 @@ void ami_hotlist_initialise(const char *hotlist_file)
hotlist_initialise(ami_tree_get_tree(hotlist_window),
hotlist_file,
tree_directory_icon_name);
+
+ ami_hotlist_add_default_dirs(ami_tree_get_tree(hotlist_window));
}
void ami_hotlist_free(const char *hotlist_file)
diff --git a/amiga/menu.c b/amiga/menu.c
index b116e1b39..58a4d5115 100755
--- a/amiga/menu.c
+++ b/amiga/menu.c
@@ -103,6 +103,9 @@ static void ami_menu_item_browser_find(struct Hook *hook, APTR window, struct In
static void ami_menu_item_browser_localhistory(struct Hook *hook, APTR window, struct IntuiMessage *msg);
static void ami_menu_item_browser_globalhistory(struct Hook *hook, APTR window, struct IntuiMessage *msg);
static void ami_menu_item_browser_cookies(struct Hook *hook, APTR window, struct IntuiMessage *msg);
+static void ami_menu_item_browser_foreimg(struct Hook *hook, APTR window, struct IntuiMessage *msg);
+static void ami_menu_item_browser_backimg(struct Hook *hook, APTR window, struct IntuiMessage *msg);
+static void ami_menu_item_browser_enablejs(struct Hook *hook, APTR window, struct IntuiMessage *msg);
static void ami_menu_item_browser_scale_decrease(struct Hook *hook, APTR window, struct IntuiMessage *msg);
static void ami_menu_item_browser_scale_normal(struct Hook *hook, APTR window, struct IntuiMessage *msg);
static void ami_menu_item_browser_scale_increase(struct Hook *hook, APTR window, struct IntuiMessage *msg);
@@ -325,25 +328,44 @@ void ami_init_menulabs(struct gui_window_2 *gwin)
gwin->menu_hook[37].h_Entry = (HOOKFUNC)ami_menu_item_browser_scale_increase;
gwin->menutype[38] = NM_ITEM;
- gwin->menulab[38] = ami_utf8_easy((char *)messages_get("Redraw"));
- gwin->menu_hook[38].h_Entry = (HOOKFUNC)ami_menu_item_browser_redraw;
-
- gwin->menutype[39] = NM_TITLE;
- gwin->menulab[39] = ami_utf8_easy((char *)messages_get("Hotlist"));
-
- gwin->menutype[40] = NM_ITEM;
- gwin->menulab[40] = ami_utf8_easy((char *)messages_get("HotlistAdd"));
- gwin->menukey[40] = 'B';
- gwin->menu_hook[40].h_Entry = (HOOKFUNC)ami_menu_item_hotlist_add;
-
+ gwin->menulab[38] = ami_utf8_easy((char *)messages_get("Images"));
+
+ gwin->menutype[39] = NM_SUB;
+ gwin->menulab[39] = ami_utf8_easy((char *)messages_get("ForeImg"));
+ gwin->menu_hook[39].h_Entry = (HOOKFUNC)ami_menu_item_browser_foreimg;
+
+ gwin->menutype[40] = NM_SUB;
+ gwin->menulab[40] = ami_utf8_easy((char *)messages_get("BackImg"));
+ gwin->menu_hook[40].h_Entry = (HOOKFUNC)ami_menu_item_browser_backimg;
+
gwin->menutype[41] = NM_ITEM;
- gwin->menulab[41] = ami_utf8_easy((char *)messages_get("HotlistShowNS"));
- gwin->menukey[41] = 'H';
- gwin->menu_hook[41].h_Entry = (HOOKFUNC)ami_menu_item_hotlist_show;
+ gwin->menulab[41] = ami_utf8_easy((char *)messages_get("EnableJS"));
+ gwin->menu_hook[41].h_Entry = (HOOKFUNC)ami_menu_item_browser_enablejs;
+ gwin->menukey[41] = 'J';
gwin->menutype[42] = NM_ITEM;
gwin->menulab[42] = NM_BARLABEL;
+ gwin->menutype[43] = NM_ITEM;
+ gwin->menulab[43] = ami_utf8_easy((char *)messages_get("Redraw"));
+ gwin->menu_hook[43].h_Entry = (HOOKFUNC)ami_menu_item_browser_redraw;
+
+ gwin->menutype[44] = NM_TITLE;
+ gwin->menulab[44] = ami_utf8_easy((char *)messages_get("Hotlist"));
+
+ gwin->menutype[45] = NM_ITEM;
+ gwin->menulab[45] = ami_utf8_easy((char *)messages_get("HotlistAdd"));
+ gwin->menukey[45] = 'B';
+ gwin->menu_hook[45].h_Entry = (HOOKFUNC)ami_menu_item_hotlist_add;
+
+ gwin->menutype[46] = NM_ITEM;
+ gwin->menulab[46] = ami_utf8_easy((char *)messages_get("HotlistShowNS"));
+ gwin->menukey[46] = 'H';
+ gwin->menu_hook[46].h_Entry = (HOOKFUNC)ami_menu_item_hotlist_show;
+
+ gwin->menutype[47] = NM_ITEM;
+ gwin->menulab[47] = NM_BARLABEL;
+
gwin->menutype[AMI_MENU_HOTLIST_MAX + 1] = NM_TITLE;
gwin->menulab[AMI_MENU_HOTLIST_MAX + 1] = ami_utf8_easy((char *)messages_get("Settings"));
@@ -415,9 +437,23 @@ struct NewMenu *ami_create_menu(struct gui_window_2 *gwin)
#ifndef WITH_PDF_EXPORT
gwin->menu[9].nm_Flags = NM_ITEMDISABLED;
#endif
+#if !defined(WITH_JS) && !defined(WITH_MOZJS)
+ gwin->menu[41].nm_Flags = NM_ITEMDISABLED | CHECKIT | MENUTOGGLE;
+#else
+ gwin->menu[41].nm_Flags = CHECKIT | MENUTOGGLE;
+ if(nsoption_bool(enable_javascript) == true)
+ gwin->menu[41].nm_Flags |= CHECKED;
+#endif
gwin->menu[15].nm_Flags = NM_ITEMDISABLED;
+ gwin->menu[39].nm_Flags = CHECKIT | MENUTOGGLE;
+ if(nsoption_bool(foreground_images) == true)
+ gwin->menu[39].nm_Flags |= CHECKED;
+ gwin->menu[40].nm_Flags = CHECKIT | MENUTOGGLE;
+ if(nsoption_bool(background_images) == true)
+ gwin->menu[40].nm_Flags |= CHECKED;
+
ami_menu_scan(ami_tree_get_tree(hotlist_window), false, gwin);
ami_menu_arexx_scan(gwin);
@@ -497,8 +533,8 @@ ULONG ami_menu_scan(struct tree *tree, bool count, struct gui_window_2 *gwin)
struct node *root = tree_node_get_child(tree_get_root(tree));
struct node *node;
struct node_element *element;
- static WORD gen = 0;
- static ULONG item;
+ WORD gen = 0;
+ ULONG item;
item = AMI_MENU_HOTLIST;
@@ -506,17 +542,17 @@ ULONG ami_menu_scan(struct tree *tree, bool count, struct gui_window_2 *gwin)
{
element = tree_node_find_element(node, TREE_ELEMENT_TITLE, NULL);
if(!element) element = tree_node_find_element(node, TREE_ELEMENT_TITLE, NULL);
- if(element && (strcmp(tree_node_element_get_text(element),"Menu")==0))
+ if(element && (strcmp(tree_node_element_get_text(element), messages_get("HotlistMenu")) == 0))
{
// found menu
- ami_menu_scan_2(tree,tree_node_get_child(node),&gen,&item,count,gwin);
+ ami_menu_scan_2(tree, tree_node_get_child(node), &gen, &item, count, gwin);
}
}
return(item - AMI_MENU_HOTLIST);
}
-void ami_menu_scan_2(struct tree *tree,struct node *root,WORD *gen,
+void ami_menu_scan_2(struct tree *tree, struct node *root, WORD *gen,
ULONG *item, bool count, struct gui_window_2 *gwin)
{
struct node *tempnode;
@@ -565,6 +601,40 @@ void ami_menu_scan_2(struct tree *tree,struct node *root,WORD *gen,
*gen = *gen - 1;
}
+void ami_menu_update_checked(struct gui_window_2 *gwin)
+{
+ struct Menu *menustrip;
+
+ GetAttr(WINDOW_MenuStrip, gwin->objects[OID_MAIN], (ULONG *)&menustrip);
+ if(!menustrip) return;
+
+ if(nsoption_bool(enable_javascript) == true) {
+ if((ItemAddress(menustrip, AMI_MENU_JS)->Flags & CHECKED) == 0)
+ ItemAddress(menustrip, AMI_MENU_JS)->Flags ^= CHECKED;
+ } else {
+ if(ItemAddress(menustrip, AMI_MENU_JS)->Flags & CHECKED)
+ ItemAddress(menustrip, AMI_MENU_JS)->Flags ^= CHECKED;
+ }
+
+ if(nsoption_bool(foreground_images) == true) {
+ if((ItemAddress(menustrip, AMI_MENU_FOREIMG)->Flags & CHECKED) == 0)
+ ItemAddress(menustrip, AMI_MENU_FOREIMG)->Flags ^= CHECKED;
+ } else {
+ if(ItemAddress(menustrip, AMI_MENU_FOREIMG)->Flags & CHECKED)
+ ItemAddress(menustrip, AMI_MENU_FOREIMG)->Flags ^= CHECKED;
+ }
+
+ if(nsoption_bool(background_images) == true) {
+ if((ItemAddress(menustrip, AMI_MENU_BACKIMG)->Flags & CHECKED) == 0)
+ ItemAddress(menustrip, AMI_MENU_BACKIMG)->Flags ^= CHECKED;
+ } else {
+ if(ItemAddress(menustrip, AMI_MENU_BACKIMG)->Flags & CHECKED)
+ ItemAddress(menustrip, AMI_MENU_BACKIMG)->Flags ^= CHECKED;
+ }
+
+ ResetMenuStrip(gwin->win, menustrip);
+}
+
void ami_menu_update_disabled(struct gui_window *g, hlcache_handle *c)
{
struct Window *win = g->shared->win;
@@ -824,6 +894,42 @@ static void ami_menu_item_browser_cookies(struct Hook *hook, APTR window, struct
ami_tree_open(cookies_window,AMI_TREE_COOKIES);
}
+static void ami_menu_item_browser_foreimg(struct Hook *hook, APTR window, struct IntuiMessage *msg)
+{
+ struct Menu *menustrip;
+ bool checked = false;
+
+ GetAttr(WINDOW_MenuStrip, (Object *)window, (ULONG *)&menustrip);
+ if(ItemAddress(menustrip, msg->Code)->Flags & CHECKED) checked = true;
+
+ nsoption_set_bool(foreground_images, checked);
+ ami_menu_check_toggled = true;
+}
+
+static void ami_menu_item_browser_backimg(struct Hook *hook, APTR window, struct IntuiMessage *msg)
+{
+ struct Menu *menustrip;
+ bool checked = false;
+
+ GetAttr(WINDOW_MenuStrip, (Object *)window, (ULONG *)&menustrip);
+ if(ItemAddress(menustrip, msg->Code)->Flags & CHECKED) checked = true;
+
+ nsoption_set_bool(background_images, checked);
+ ami_menu_check_toggled = true;
+}
+
+static void ami_menu_item_browser_enablejs(struct Hook *hook, APTR window, struct IntuiMessage *msg)
+{
+ struct Menu *menustrip;
+ bool checked = false;
+
+ GetAttr(WINDOW_MenuStrip, (Object *)window, (ULONG *)&menustrip);
+ if(ItemAddress(menustrip, msg->Code)->Flags & CHECKED) checked = true;
+
+ nsoption_set_bool(enable_javascript, checked);
+ ami_menu_check_toggled = true;
+}
+
static void ami_menu_item_browser_scale_decrease(struct Hook *hook, APTR window, struct IntuiMessage *msg)
{
struct gui_window_2 *gwin;
diff --git a/amiga/menu.h b/amiga/menu.h
index d692320a3..8cff2d539 100755
--- a/amiga/menu.h
+++ b/amiga/menu.h
@@ -30,10 +30,10 @@
/* Maximum number of menu items - first value is number of static items
* (ie. everything not intially defined as NM_IGNORE) */
-#define AMI_MENU_MAX 52 + AMI_HOTLIST_ITEMS
+#define AMI_MENU_MAX 57 + AMI_HOTLIST_ITEMS
/* Where the hotlist entries start */
-#define AMI_MENU_HOTLIST 43
+#define AMI_MENU_HOTLIST 48
/* Where the hotlist entries end */
#define AMI_MENU_HOTLIST_MAX AMI_MENU_HOTLIST+AMI_HOTLIST_ITEMS
@@ -62,17 +62,22 @@
#define AMI_MENU_SELECTALL FULLMENUNUM(1,4,0)
#define AMI_MENU_CLEAR FULLMENUNUM(1,5,0)
#define AMI_MENU_FIND FULLMENUNUM(2,0,0)
+#define AMI_MENU_FOREIMG FULLMENUNUM(2,8,0)
+#define AMI_MENU_BACKIMG FULLMENUNUM(2,8,1)
+#define AMI_MENU_JS FULLMENUNUM(2,9,0)
/* A special value for ami_menu_window_close */
-#define AMI_MENU_WINDOW_CLOSE_ALL 1
+#define AMI_MENU_WINDOW_CLOSE_ALL (void *)1
struct gui_window;
struct gui_window_2;
struct gui_window_2 *ami_menu_window_close;
+bool ami_menu_check_toggled;
void ami_free_menulabs(struct gui_window_2 *gwin);
struct NewMenu *ami_create_menu(struct gui_window_2 *gwin);
void ami_menu_refresh(struct gui_window_2 *gwin);
+void ami_menu_update_checked(struct gui_window_2 *gwin);
void ami_menu_update_disabled(struct gui_window *g, hlcache_handle *c);
#endif
diff --git a/amiga/misc.c b/amiga/misc.c
index 8e8fa76d0..4359c79b5 100755
--- a/amiga/misc.c
+++ b/amiga/misc.c
@@ -71,6 +71,29 @@ void warn_user(const char *warning, const char *detail)
if(utf8warning) free(utf8warning);
}
+int32 ami_warn_user_multi(const char *body, const char *opt1, const char *opt2, struct Window *win)
+{
+ int res = 0;
+ char *utf8text = ami_utf8_easy(body);
+ char *utf8gadget1 = ami_utf8_easy(messages_get(opt1));
+ char *utf8gadget2 = ami_utf8_easy(messages_get(opt2));
+ char *utf8gadgets = ASPrintf("%s|%s", utf8gadget1, utf8gadget2);
+ free(utf8gadget1);
+ free(utf8gadget2);
+
+ res = TimedDosRequesterTags(TDR_ImageType, TDRIMAGE_WARNING,
+ TDR_TitleString, messages_get("NetSurf"),
+ TDR_FormatString, utf8text,
+ TDR_GadgetString, utf8gadgets,
+ TDR_Window, win,
+ TAG_DONE);
+
+ if(utf8text) free(utf8text);
+ if(utf8gadgets) FreeVec(utf8gadgets);
+
+ return res;
+}
+
void die(const char *error)
{
TimedDosRequesterTags(TDR_ImageType,TDRIMAGE_ERROR,
diff --git a/amiga/misc.h b/amiga/misc.h
index c863c7966..34a85fa90 100644
--- a/amiga/misc.h
+++ b/amiga/misc.h
@@ -19,4 +19,5 @@
#ifndef AMIGA_MISC_H
#define AMIGA_MISC_H
char *translate_escape_chars(const char *s);
+int32 ami_warn_user_multi(const char *body, const char *opt1, const char *opt2, struct Window *win);
#endif
diff --git a/amiga/options.h b/amiga/options.h
index 5e4777896..dc0274da2 100644
--- a/amiga/options.h
+++ b/amiga/options.h
@@ -39,6 +39,8 @@
bool use_openurl_lib; \
bool new_tab_active; \
bool new_tab_last; \
+ bool tab_close_warn; \
+ bool tab_always_show; \
bool kiosk_mode; \
char *search_engines_file; \
char *arexx_dir; \
@@ -74,6 +76,7 @@
int cookies_window_ypos; \
int cookies_window_xsize; \
int cookies_window_ysize; \
+ int web_search_width; \
int cairo_renderer; \
bool direct_render; \
bool window_simple_refresh; \
@@ -101,6 +104,8 @@
.use_openurl_lib = false, \
.new_tab_active = false, \
.new_tab_last = false, \
+ .tab_close_warn = true, \
+ .tab_always_show = false, \
.kiosk_mode = false, \
.search_engines_file = NULL, \
.arexx_dir = NULL, \
@@ -136,6 +141,7 @@
.cookies_window_ypos = 0, \
.cookies_window_xsize = 0, \
.cookies_window_ysize = 0, \
+ .web_search_width = 0, \
.cairo_renderer = 0, \
.direct_render = false, \
.window_simple_refresh = false, \
@@ -162,6 +168,8 @@
{ "use_openurl_lib", OPTION_BOOL, &nsoptions.use_openurl_lib}, \
{ "new_tab_is_active", OPTION_BOOL, &nsoptions.new_tab_active}, \
{ "new_tab_last", OPTION_BOOL, &nsoptions.new_tab_last}, \
+{ "tab_close_warn", OPTION_BOOL, &nsoptions.tab_close_warn}, \
+{ "tab_always_show", OPTION_BOOL, &nsoptions.tab_always_show}, \
{ "kiosk_mode", OPTION_BOOL, &nsoptions.kiosk_mode}, \
{ "search_engines_file",OPTION_STRING, &nsoptions.search_engines_file }, \
{ "arexx_dir", OPTION_STRING, &nsoptions.arexx_dir }, \
@@ -197,6 +205,7 @@
{ "cookies_window_ypos", OPTION_INTEGER, &nsoptions.cookies_window_ypos}, \
{ "cookies_window_xsize", OPTION_INTEGER, &nsoptions.cookies_window_xsize}, \
{ "cookies_window_ysize", OPTION_INTEGER, &nsoptions.cookies_window_ysize}, \
+{ "web_search_width", OPTION_INTEGER, &nsoptions.web_search_width}, \
{ "cairo_renderer", OPTION_INTEGER, &nsoptions.cairo_renderer}, \
{ "direct_render", OPTION_BOOL, &nsoptions.direct_render}, \
{ "window_simple_refresh", OPTION_BOOL, &nsoptions.window_simple_refresh}, \
diff --git a/amiga/tree.c b/amiga/tree.c
index f2ef3cc83..95a68dc20 100755
--- a/amiga/tree.c
+++ b/amiga/tree.c
@@ -690,6 +690,8 @@ void ami_tree_close(struct treeview_window *twin)
ami_utf8_free(twin->sslreject);
ami_ssl_free(twin);
}
+
+ ami_gui_hotlist_toolbar_update_all();
}
void ami_tree_update_quals(struct treeview_window *twin)