summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xamiga/gui_options.c74
-rwxr-xr-xamiga/misc.c38
-rw-r--r--framebuffer/fbtk.h20
-rw-r--r--framebuffer/fbtk/fbtk.c44
-rw-r--r--framebuffer/fbtk/text.c28
-rw-r--r--framebuffer/fbtk/widget.h8
-rw-r--r--framebuffer/gui.c58
-rw-r--r--resources/FatMessages10
8 files changed, 235 insertions, 45 deletions
diff --git a/amiga/gui_options.c b/amiga/gui_options.c
index d4a43c6e4..2d65099b0 100755
--- a/amiga/gui_options.c
+++ b/amiga/gui_options.c
@@ -77,6 +77,7 @@ enum
GID_OPTS_CONTENTLANG,
GID_OPTS_FROMLOCALE,
GID_OPTS_HISTORY,
+ GID_OPTS_JAVASCRIPT,
GID_OPTS_REFERRAL,
GID_OPTS_DONOTTRACK,
GID_OPTS_FASTSCROLL,
@@ -144,6 +145,7 @@ enum
GRP_OPTS_CONTENTBLOCKING,
GRP_OPTS_CONTENTLANGUAGE,
GRP_OPTS_HISTORY,
+ GRP_OPTS_SCRIPTING,
GRP_OPTS_PRIVACY,
GRP_OPTS_MISC,
GRP_OPTS_SCREEN,
@@ -249,6 +251,7 @@ void ami_gui_opts_setup(void)
gadlab[GID_OPTS_HIDEADS] = (char *)ami_utf8_easy((char *)messages_get("BlockAds"));
gadlab[GID_OPTS_FROMLOCALE] = (char *)ami_utf8_easy((char *)messages_get("LocaleLang"));
gadlab[GID_OPTS_HISTORY] = (char *)ami_utf8_easy((char *)messages_get("HistoryAge"));
+ gadlab[GID_OPTS_JAVASCRIPT] = (char *)ami_utf8_easy((char *)messages_get("EnableJS"));
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"));
@@ -316,6 +319,7 @@ void ami_gui_opts_setup(void)
gadlab[GRP_OPTS_CONTENTBLOCKING] = (char *)ami_utf8_easy((char *)messages_get("ContentBlocking"));
gadlab[GRP_OPTS_CONTENTLANGUAGE] = (char *)ami_utf8_easy((char *)messages_get("ContentLanguage"));
gadlab[GRP_OPTS_HISTORY] = (char *)ami_utf8_easy((char *)messages_get("History"));
+ 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_THEME] = (char *)ami_utf8_easy((char *)messages_get("Theme"));
@@ -581,30 +585,45 @@ void ami_gui_opts_open(void)
// CHILD_WeightedWidth, 0,
LayoutEnd, // content language
LayoutEnd, // content
- LAYOUT_AddChild, VGroupObject,
- LAYOUT_SpaceOuter, TRUE,
- LAYOUT_BevelStyle, BVS_GROUP,
- LAYOUT_Label, gadlab[GRP_OPTS_HISTORY],
- LAYOUT_AddChild, HGroupObject,
- LAYOUT_LabelColumn, PLACETEXT_RIGHT,
- LAYOUT_AddChild, gow->objects[GID_OPTS_HISTORY] = IntegerObject,
- GA_ID, GID_OPTS_CACHE_DISC,
- GA_RelVerify, TRUE,
- INTEGER_Number, nsoption_int(expire_url),
- INTEGER_Minimum, 0,
- INTEGER_Maximum, 366,
- INTEGER_Arrows, TRUE,
- IntegerEnd,
+ LAYOUT_AddChild, HGroupObject,
+ LAYOUT_AddChild, VGroupObject,
+ LAYOUT_SpaceOuter, TRUE,
+ LAYOUT_BevelStyle, BVS_GROUP,
+ LAYOUT_Label, gadlab[GRP_OPTS_HISTORY],
+ LAYOUT_AddChild, HGroupObject,
+ LAYOUT_LabelColumn, PLACETEXT_RIGHT,
+ LAYOUT_AddChild, gow->objects[GID_OPTS_HISTORY] = IntegerObject,
+ GA_ID, GID_OPTS_HISTORY,
+ GA_RelVerify, TRUE,
+ INTEGER_Number, nsoption_int(expire_url),
+ INTEGER_Minimum, 0,
+ INTEGER_Maximum, 366,
+ INTEGER_Arrows, TRUE,
+ IntegerEnd,
+ CHILD_WeightedWidth, 0,
+ CHILD_Label, LabelObject,
+ LABEL_Text, gadlab[LAB_OPTS_DAYS],
+ LabelEnd,
+ LayoutEnd,
CHILD_WeightedWidth, 0,
- CHILD_Label, LabelObject,
- LABEL_Text, gadlab[LAB_OPTS_DAYS],
- LabelEnd,
- LayoutEnd,
- CHILD_WeightedWidth, 0,
- CHILD_Label, LabelObject,
- LABEL_Text, gadlab[GID_OPTS_HISTORY],
- LabelEnd,
- LayoutEnd, // history
+ CHILD_Label, LabelObject,
+ LABEL_Text, gadlab[GID_OPTS_HISTORY],
+ LabelEnd,
+ LayoutEnd, // history
+#if defined(WITH_JS) || defined(WITH_MOZJS)
+ LAYOUT_AddChild, VGroupObject,
+ LAYOUT_SpaceOuter, TRUE,
+ LAYOUT_BevelStyle, BVS_GROUP,
+ LAYOUT_Label, gadlab[GRP_OPTS_SCRIPTING],
+ LAYOUT_AddChild, gow->objects[GID_OPTS_JAVASCRIPT] = CheckBoxObject,
+ GA_ID, GID_OPTS_JAVASCRIPT,
+ GA_RelVerify, TRUE,
+ GA_Text, gadlab[GID_OPTS_JAVASCRIPT],
+ GA_Selected, nsoption_bool(enable_javascript),
+ CheckBoxEnd,
+ LayoutEnd, // scripting
+#endif
+ LayoutEnd,
CHILD_WeightedHeight, 0,
LAYOUT_AddChild,VGroupObject,
LAYOUT_SpaceOuter, TRUE,
@@ -1454,6 +1473,15 @@ void ami_gui_opts_use(bool save)
nsoption_set_bool(send_referer, false);
}
+#if defined(WITH_JS) || defined(WITH_MOZJS)
+ GetAttr(GA_Selected,gow->objects[GID_OPTS_JAVASCRIPT],(ULONG *)&data);
+ if (data) {
+ nsoption_set_bool(enable_javascript, true);
+ } else {
+ nsoption_set_bool(enable_javascript, false);
+ }
+#endif
+
GetAttr(GA_Selected,gow->objects[GID_OPTS_DONOTTRACK],(ULONG *)&data);
if (data) {
nsoption_set_bool(do_not_track, true);
diff --git a/amiga/misc.c b/amiga/misc.c
index affb65197..8e8fa76d0 100755
--- a/amiga/misc.c
+++ b/amiga/misc.c
@@ -23,7 +23,14 @@
#include <sys/types.h>
#include <proto/dos.h>
+#include <proto/exec.h>
+#include <proto/intuition.h>
+#include <proto/utility.h>
+#include <proto/requester.h>
+#include <classes/requester.h>
+
+#include "amiga/gui.h"
#include "amiga/utf8.h"
#include "desktop/cookies.h"
#include "utils/log.h"
@@ -33,19 +40,34 @@
void warn_user(const char *warning, const char *detail)
{
+ Object *req = NULL;
char *utf8warning = ami_utf8_easy(messages_get(warning));
+ STRPTR bodytext = NULL;
+ LONG result = 0;
LOG(("%s %s", warning, detail));
- TimedDosRequesterTags(TDR_ImageType,TDRIMAGE_WARNING,
- TDR_TitleString,messages_get("NetSurf"),
- TDR_GadgetString,messages_get("OK"),
-// TDR_CharSet,106,
- TDR_FormatString,"%s\n%s",
- TDR_Arg1,utf8warning != NULL ? utf8warning : warning,
- TDR_Arg2,detail,
- TAG_DONE);
+ bodytext = ASPrintf("\33b%s\33n\n%s",
+ utf8warning != NULL ? utf8warning : warning, detail);
+
+ req = NewObject(REQUESTER_GetClass(), NULL,
+ REQ_Type, REQTYPE_INFO,
+ REQ_TitleText, messages_get("NetSurf"),
+ REQ_BodyText, bodytext,
+ REQ_GadgetText, messages_get("OK"),
+#ifdef __amigaos4__
+ REQ_VarArgs,
+ REQ_Image, (struct Image *)REQIMAGE_WARNING,
+ /* REQ_CharSet, 106, */
+#endif
+ TAG_DONE);
+
+ if (req) {
+ result = IDoMethod(req, RM_OPENREQ, NULL, NULL, scrn);
+ DisposeObject(req);
+ }
+ if(bodytext) FreeVec(bodytext);
if(utf8warning) free(utf8warning);
}
diff --git a/framebuffer/fbtk.h b/framebuffer/fbtk.h
index e58795742..131ae6521 100644
--- a/framebuffer/fbtk.h
+++ b/framebuffer/fbtk.h
@@ -247,6 +247,16 @@ int fbtk_get_height(fbtk_widget_t *widget);
*/
bool fbtk_get_bbox(fbtk_widget_t *widget, struct nsfb_bbox_s *bbox);
+/** Get a widget caret pos, if it owns caret.
+ *
+ * @param widget The widget to inspect.
+ * @param x If widget has caret, returns x-coord of caret within widget
+ * @param y If widget has caret, returns y-coord of caret within widget
+ * @param height If widget has caret, returns caret height
+ * @return true iff widget has caret
+ */
+bool fbtk_get_caret(fbtk_widget_t *widget, int *x, int *y, int *height);
+
/******************* Widget Manipulation **********************/
@@ -255,6 +265,16 @@ bool fbtk_get_bbox(fbtk_widget_t *widget, struct nsfb_bbox_s *bbox);
*/
bool fbtk_set_pos_and_size(fbtk_widget_t *widget, int x, int y, int width, int height);
+/** Set caret owner and position
+ *
+ * @param widget widget to give caret to, or ensure caret is released from
+ * @param set true: caret to be set for widget, false: caret to be released
+ * @param x x-coordinate of caret top
+ * @param y y-coordinate of caret top
+ * @param height height of caret
+ */
+void fbtk_set_caret(fbtk_widget_t *widget, bool set, int x, int y, int height);
+
/** Map a widget and request it is redrawn.
*/
int fbtk_set_mapping(fbtk_widget_t *widget, bool mapped);
diff --git a/framebuffer/fbtk/fbtk.c b/framebuffer/fbtk/fbtk.c
index db298ebdc..8e8bc112c 100644
--- a/framebuffer/fbtk/fbtk.c
+++ b/framebuffer/fbtk/fbtk.c
@@ -220,6 +220,28 @@ fbtk_set_pos_and_size(fbtk_widget_t *widget,
return false;
}
+
+/* exported function docuemnted in fbtk.h */
+void
+fbtk_set_caret(fbtk_widget_t *widget, bool set,
+ int x, int y, int height)
+{
+ fbtk_widget_t *root;
+
+ assert(widget != NULL);
+ root = fbtk_get_root_widget(widget);
+
+ if (set) {
+ root->u.root.caret.owner = widget;
+ root->u.root.caret.x = x;
+ root->u.root.caret.y = y;
+ root->u.root.caret.height = height;
+
+ } else {
+ root->u.root.caret.owner = NULL;
+ }
+}
+
/* exported function documented in fbtk.h */
int
fbtk_destroy_widget(fbtk_widget_t *widget)
@@ -429,6 +451,27 @@ fbtk_get_bbox(fbtk_widget_t *widget, nsfb_bbox_t *bbox)
return true;
}
+bool
+fbtk_get_caret(fbtk_widget_t *widget, int *x, int *y, int *height)
+{
+ fbtk_widget_t *root = fbtk_get_root_widget(widget);
+
+ if (root->u.root.caret.owner == widget) {
+ *x = root->u.root.caret.x;
+ *y = root->u.root.caret.y;
+ *height = root->u.root.caret.height;
+
+ return true;
+
+ } else {
+ *x = 0;
+ *y = 0;
+ *height = 0;
+
+ return false;
+ }
+}
+
/* exported function documented in fbtk.h */
fbtk_widget_t *
fbtk_get_widget_at(fbtk_widget_t *nwid, int x, int y)
@@ -727,6 +770,7 @@ fbtk_init(nsfb_t *fb)
root->type = FB_WIDGET_TYPE_ROOT;
root->u.root.fb = fb;
+ root->u.root.caret.owner = NULL;
nsfb_get_geometry(fb, &root->width, &root->height, NULL);
diff --git a/framebuffer/fbtk/text.c b/framebuffer/fbtk/text.c
index f50a5ad59..27968148f 100644
--- a/framebuffer/fbtk/text.c
+++ b/framebuffer/fbtk/text.c
@@ -50,6 +50,19 @@
/* Convert pixels to points, assuming a DPI of 90 */
#define px_to_pt(x) (((x) * 72) / FBTK_DPI)
+/* Get a font style for a text input */
+static inline void
+fb_text_font_style(fbtk_widget_t *widget, int font_height,
+ plot_font_style_t *font_style)
+{
+ font_style->family = PLOT_FONT_FAMILY_SANS_SERIF;
+ font_style->size = px_to_pt(font_height) * FONT_SIZE_SCALE;
+ font_style->weight = 400;
+ font_style->flags = FONTF_NONE;
+ font_style->background = widget->bg;
+ font_style->foreground = widget->fg;
+}
+
/** Text redraw callback.
*
* Called when a text widget requires redrawing.
@@ -94,13 +107,7 @@ fb_redraw_text(fbtk_widget_t *widget, fbtk_callback_info *cbi )
if (widget->u.text.text != NULL) {
fh = widget->height - padding - padding;
- font_style.family = PLOT_FONT_FAMILY_SANS_SERIF;
- font_style.size = px_to_pt(fh) * FONT_SIZE_SCALE;
- font_style.weight = 400;
- font_style.flags = FONTF_NONE;
- font_style.background = widget->bg;
- font_style.foreground = widget->fg;
-
+ fb_text_font_style(widget, fh, &font_style);
FBTK_LOG(("plotting %p at %d,%d %d,%d w/h %d,%d font h %d padding %d",
widget, bbox.x0, bbox.y0, bbox.x1, bbox.y1,
widget->width, widget->height, fh, padding));
@@ -192,12 +199,7 @@ fb_redraw_text_button(fbtk_widget_t *widget, fbtk_callback_info *cbi )
if (widget->u.text.text != NULL) {
fh = widget->height - border - border;
- font_style.family = PLOT_FONT_FAMILY_SANS_SERIF;
- font_style.size = px_to_pt(fh) * FONT_SIZE_SCALE;
- font_style.weight = 400;
- font_style.flags = FONTF_NONE;
- font_style.background = widget->bg;
- font_style.foreground = widget->fg;
+ fb_text_font_style(widget, fh, &font_style);
LOG(("plotting %p at %d,%d %d,%d w/h %d,%d font h %d border %d",
widget, bbox.x0, bbox.y0, bbox.x1, bbox.y1,
diff --git a/framebuffer/fbtk/widget.h b/framebuffer/fbtk/widget.h
index 060999bba..e31fa117d 100644
--- a/framebuffer/fbtk/widget.h
+++ b/framebuffer/fbtk/widget.h
@@ -161,6 +161,14 @@ struct fbtk_widget_s {
struct fbtk_widget_s *prev; /* previous widget pointer wasin */
struct fbtk_widget_s *grabbed; /* widget that has grabbed pointer movement. */
struct fbtk_widget_s *input;
+
+ /* caret */
+ struct {
+ struct fbtk_widget_s *owner; /* widget / NULL */
+ int x; /* relative to owner */
+ int y; /* relative to owner */
+ int height;
+ } caret;
} root;
/* bitmap */
diff --git a/framebuffer/gui.c b/framebuffer/gui.c
index 10c2e46a1..216791d2b 100644
--- a/framebuffer/gui.c
+++ b/framebuffer/gui.c
@@ -308,12 +308,14 @@ fb_redraw(fbtk_widget_t *widget,
{
int x;
int y;
+ int caret_x, caret_y, caret_h;
struct rect clip;
struct redraw_context ctx = {
.interactive = true,
.background_images = true,
.plot = &fb_plotters
};
+ nsfb_t *nsfb = fbtk_get_nsfb(widget);
LOG(("%d,%d to %d,%d",
bwidget->redraw_box.x0,
@@ -330,7 +332,7 @@ fb_redraw(fbtk_widget_t *widget,
bwidget->redraw_box.x0 += x;
bwidget->redraw_box.x1 += x;
- nsfb_claim(fbtk_get_nsfb(widget), &bwidget->redraw_box);
+ nsfb_claim(nsfb, &bwidget->redraw_box);
/* redraw bounding box is relative to window */
clip.x0 = bwidget->redraw_box.x0;
@@ -343,6 +345,23 @@ fb_redraw(fbtk_widget_t *widget,
(y - bwidget->scrolly) / bw->scale,
&clip, &ctx);
+ if (fbtk_get_caret(widget, &caret_x, &caret_y, &caret_h)) {
+ /* This widget has caret, so render it */
+ nsfb_bbox_t line;
+ nsfb_plot_pen_t pen;
+
+ line.x0 = x - bwidget->scrollx + caret_x;
+ line.y0 = y - bwidget->scrolly + caret_y;
+ line.x1 = x - bwidget->scrollx + caret_x;
+ line.y1 = y - bwidget->scrolly + caret_y + caret_h;
+
+ pen.stroke_type = NFSB_PLOT_OPTYPE_SOLID;
+ pen.stroke_width = 1;
+ pen.stroke_colour = 0xFF0000FF;
+
+ nsfb_plot_line(nsfb, &line, &pen);
+ }
+
nsfb_update(fbtk_get_nsfb(widget), &bwidget->redraw_box);
bwidget->redraw_box.y0 = bwidget->redraw_box.x0 = INT_MAX;
@@ -1483,11 +1502,48 @@ gui_window_stop_throbber(struct gui_window *gw)
void
gui_window_place_caret(struct gui_window *g, int x, int y, int height)
{
+ struct browser_widget_s *bwidget = fbtk_get_userpw(g->browser);
+ int c_x, c_y, c_h;
+
+ if (fbtk_get_caret(g->browser, &c_x, &c_y, &c_h)) {
+ /* browser window already had caret:
+ * redraw its area to remove it first */
+ fb_queue_redraw(g->browser,
+ c_x - bwidget->scrollx,
+ c_y - bwidget->scrolly,
+ c_x + 1 - bwidget->scrollx,
+ c_y + c_h - bwidget->scrolly);
+ }
+
+ /* set new pos */
+ fbtk_set_caret(g->browser, true, x, y, height);
+
+ /* redraw new caret pos */
+ fb_queue_redraw(g->browser,
+ x - bwidget->scrollx,
+ y - bwidget->scrolly,
+ x + 1 - bwidget->scrollx,
+ y + height - bwidget->scrolly);
}
void
gui_window_remove_caret(struct gui_window *g)
{
+ struct browser_widget_s *bwidget = fbtk_get_userpw(g->browser);
+ int c_x, c_y, c_h;
+
+ if (fbtk_get_caret(g->browser, &c_x, &c_y, &c_h)) {
+ /* browser window already had caret:
+ * redraw its area to remove it first */
+ fb_queue_redraw(g->browser,
+ c_x - bwidget->scrollx,
+ c_y - bwidget->scrolly,
+ c_x + 1 - bwidget->scrollx,
+ c_y + c_h - bwidget->scrolly);
+ }
+
+ /* remove caret */
+ fbtk_set_caret(g->browser, false, 0, 0, 0);
}
void
diff --git a/resources/FatMessages b/resources/FatMessages
index bfbb6f03c..640654b89 100644
--- a/resources/FatMessages
+++ b/resources/FatMessages
@@ -5201,6 +5201,16 @@ de.all.Days:Tage
fr.all.Days:days
it.all.Days:giorni
nl.all.Days:days
+en.all.Scripting:Scripting
+de.all.Scripting:Scripting
+fr.all.Scripting:Scripting
+it.all.Scripting:Scripting
+nl.all.Scripting:Scripting
+en.all.EnableJS:Enable Javascript
+de.all.EnableJS:Enable Javascript
+fr.all.EnableJS:Enable Javascript
+it.all.EnableJS:Enable Javascript
+nl.all.EnableJS:Enable Javascript
en.all.Miscellaneous:Miscellaneous
de.all.Miscellaneous:Verschiedenes
fr.all.Miscellaneous:Miscellaneous