netsurf: branch master updated. release/3.6-188-g9e03737
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/9e037376276aaa042b529...
...commit http://git.netsurf-browser.org/netsurf.git/commit/9e037376276aaa042b52949...
...tree http://git.netsurf-browser.org/netsurf.git/tree/9e037376276aaa042b529499f...
The branch, master has been updated
via 9e037376276aaa042b529499f1978766b9535f7b (commit)
from 4fab8f830bd4ffaf8faca408a5c1265887712704 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=9e037376276aaa042b5...
commit 9e037376276aaa042b529499f1978766b9535f7b
Author: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Commit: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Dave Higton's fix for 'tree' windows not being movable off-screen
diff --git a/frontends/riscos/templates/de b/frontends/riscos/templates/de
index 0fb4a9d..a4ec1f4 100644
--- a/frontends/riscos/templates/de
+++ b/frontends/riscos/templates/de
@@ -2542,7 +2542,7 @@ wimp_window {
xscroll:0
yscroll:0
next:wimp_TOP
- window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT
+ window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT | wimp_WINDOW_NO_BOUNDS
title_fg:wimp_COLOUR_BLACK
title_bg:wimp_COLOUR_LIGHT_GREY
work_fg:wimp_COLOUR_BLACK
diff --git a/frontends/riscos/templates/en b/frontends/riscos/templates/en
index 7746b86..25be55f 100644
--- a/frontends/riscos/templates/en
+++ b/frontends/riscos/templates/en
@@ -2750,7 +2750,7 @@ wimp_window {
xscroll:0
yscroll:0
next:wimp_TOP
- window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BOUNDED_ONCE | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT
+ window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BOUNDED_ONCE | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT | wimp_WINDOW_NO_BOUNDS
title_fg:wimp_COLOUR_BLACK
title_bg:wimp_COLOUR_LIGHT_GREY
work_fg:wimp_COLOUR_BLACK
diff --git a/frontends/riscos/templates/fr b/frontends/riscos/templates/fr
index 6779264..fafe0ce 100644
--- a/frontends/riscos/templates/fr
+++ b/frontends/riscos/templates/fr
@@ -2554,7 +2554,7 @@ wimp_window {
xscroll:0
yscroll:0
next:wimp_TOP
- window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BOUNDED_ONCE | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT
+ window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BOUNDED_ONCE | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT | wimp_WINDOW_NO_BOUNDS
title_fg:wimp_COLOUR_BLACK
title_bg:wimp_COLOUR_LIGHT_GREY
work_fg:wimp_COLOUR_BLACK
diff --git a/frontends/riscos/templates/nl b/frontends/riscos/templates/nl
index 704206f..5ed9cac 100644
--- a/frontends/riscos/templates/nl
+++ b/frontends/riscos/templates/nl
@@ -2796,7 +2796,7 @@ wimp_window {
xscroll:0
yscroll:0
next:wimp_TOP
- window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BOUNDED_ONCE | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT
+ window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BOUNDED_ONCE | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT | wimp_WINDOW_NO_BOUNDS
title_fg:wimp_COLOUR_BLACK
title_bg:wimp_COLOUR_LIGHT_GREY
work_fg:wimp_COLOUR_BLACK
-----------------------------------------------------------------------
Summary of changes:
frontends/riscos/templates/de | 2 +-
frontends/riscos/templates/en | 2 +-
frontends/riscos/templates/fr | 2 +-
frontends/riscos/templates/nl | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/frontends/riscos/templates/de b/frontends/riscos/templates/de
index 0fb4a9d..a4ec1f4 100644
--- a/frontends/riscos/templates/de
+++ b/frontends/riscos/templates/de
@@ -2542,7 +2542,7 @@ wimp_window {
xscroll:0
yscroll:0
next:wimp_TOP
- window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT
+ window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT | wimp_WINDOW_NO_BOUNDS
title_fg:wimp_COLOUR_BLACK
title_bg:wimp_COLOUR_LIGHT_GREY
work_fg:wimp_COLOUR_BLACK
diff --git a/frontends/riscos/templates/en b/frontends/riscos/templates/en
index 7746b86..25be55f 100644
--- a/frontends/riscos/templates/en
+++ b/frontends/riscos/templates/en
@@ -2750,7 +2750,7 @@ wimp_window {
xscroll:0
yscroll:0
next:wimp_TOP
- window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BOUNDED_ONCE | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT
+ window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BOUNDED_ONCE | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT | wimp_WINDOW_NO_BOUNDS
title_fg:wimp_COLOUR_BLACK
title_bg:wimp_COLOUR_LIGHT_GREY
work_fg:wimp_COLOUR_BLACK
diff --git a/frontends/riscos/templates/fr b/frontends/riscos/templates/fr
index 6779264..fafe0ce 100644
--- a/frontends/riscos/templates/fr
+++ b/frontends/riscos/templates/fr
@@ -2554,7 +2554,7 @@ wimp_window {
xscroll:0
yscroll:0
next:wimp_TOP
- window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BOUNDED_ONCE | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT
+ window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BOUNDED_ONCE | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT | wimp_WINDOW_NO_BOUNDS
title_fg:wimp_COLOUR_BLACK
title_bg:wimp_COLOUR_LIGHT_GREY
work_fg:wimp_COLOUR_BLACK
diff --git a/frontends/riscos/templates/nl b/frontends/riscos/templates/nl
index 704206f..5ed9cac 100644
--- a/frontends/riscos/templates/nl
+++ b/frontends/riscos/templates/nl
@@ -2796,7 +2796,7 @@ wimp_window {
xscroll:0
yscroll:0
next:wimp_TOP
- window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BOUNDED_ONCE | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT
+ window_flags:wimp_WINDOW_MOVEABLE | wimp_WINDOW_SCROLL_REPEAT | wimp_WINDOW_IGNORE_XEXTENT | wimp_WINDOW_IGNORE_YEXTENT | wimp_WINDOW_BOUNDED_ONCE | wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON | wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_SIZE_ICON | wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT | wimp_WINDOW_NO_BOUNDS
title_fg:wimp_COLOUR_BLACK
title_bg:wimp_COLOUR_LIGHT_GREY
work_fg:wimp_COLOUR_BLACK
--
NetSurf Browser
6 years, 8 months
netsurf: branch chris/menuclass updated. release/3.6-188-g439dedd
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/439deddba14f509fa0be9...
...commit http://git.netsurf-browser.org/netsurf.git/commit/439deddba14f509fa0be90b...
...tree http://git.netsurf-browser.org/netsurf.git/tree/439deddba14f509fa0be90bef...
The branch, chris/menuclass has been updated
via 439deddba14f509fa0be90beff07481643178b69 (commit)
from 4fab8f830bd4ffaf8faca408a5c1265887712704 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=439deddba14f509fa0b...
commit 439deddba14f509fa0be90beff07481643178b69
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Attempt to construct menu using menuclass
diff --git a/frontends/amiga/menu.c b/frontends/amiga/menu.c
index 88a875e..fc42dc9 100644
--- a/frontends/amiga/menu.c
+++ b/frontends/amiga/menu.c
@@ -33,6 +33,9 @@
#endif
#include <libraries/gadtools.h>
+#ifdef __amigaos4__
+#include <intuition/menuclass.h>
+#endif
#include <classes/window.h>
#include <proto/label.h>
@@ -853,8 +856,60 @@ static int ami_menu_calc_item_width(struct ami_menu_data **md, int j, struct Ras
return item_size;
}
+#ifdef __amigaos4__
+static void ami_menu_layout_mc_recursive(Object *menu_parent, struct ami_menu_data **md, int level, int *i, int max)
+{
+ Object *menu_item = menu_parent;
+ ULONG item_type = T_ITEM;
+
+ if(level == NM_TITLE) {
+ item_type = T_MENU;
+ }
+
+ while(*i <= max) {
+ /* skip empty entries */
+ if(md[*i] == NULL) continue;
+ if(md[*i]->menutype == NM_IGNORE) continue;
+
+ if(md[*i]->menutype == level) {
+ menu_item = NewObject(NULL, "menuclass",
+ MA_Type, item_type,
+ MA_ID, *i,
+ MA_Label, md[*i]->menulab,
+ MA_Image, md[*i]->menuicon,
+ MA_Key, &md[*i]->menukey,
+ MA_PickHook, &md[*i]->menu_hook,
+ MA_Disabled, (md[*i]->flags & NM_ITEMDISABLED),
+ MA_Selected, (md[*i]->flags & CHECKED),
+ MA_Toggle, (md[*i]->flags & MENUTOGGLE),
+ TAG_DONE);
+ IDoMethod(menu_parent, OM_ADDMEMBER, menu_item);
+ } else if (md[*i]->menutype > level) {
+ ami_menu_layout_mc_recursive(menu_item, md, md[*i]->menutype, i, max);
+ } else {
+ break;
+ }
+ *i++;
+ }
+ return;
+}
+
+static struct Menu *ami_menu_layout_mc(struct ami_menu_data **md, int max)
+{
+ int i = 0;
-struct Menu *ami_menu_layout(struct ami_menu_data **md, int max)
+ Object *menu_root = NewObject(NULL, "menuclass",
+ MA_Type, T_ROOT,
+ MA_FreeImage, FALSE,
+ TAG_DONE);
+
+ ami_menu_layout_mc_recursive(menu_root, md, NM_TITLE, &i, max);
+
+ return (struct Menu *)menu_root;
+}
+#endif
+
+static struct Menu *ami_menu_layout_gt(struct ami_menu_data **md, int max)
{
int i, j;
int txtlen = 0;
@@ -977,15 +1032,34 @@ struct Menu *ami_menu_layout(struct ami_menu_data **md, int max)
return imenu;
}
+struct Menu *ami_menu_layout(struct ami_menu_data **md, int max)
+{
+ if(LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) {
+#ifdef __amigaos4__
+ return ami_menu_layout_mc(md, max);
+#endif
+ } else {
+ return ami_menu_layout_gt(md, max);
+ }
+}
+
void ami_menu_free(struct gui_window_2 *gwin)
{
- FreeMenus(gwin->imenu);
+ if(LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) {
+ DisposeObject((Object *)gwin->imenu); // if we detach our menu from the window we need to do this manually
+ } else {
+ FreeMenus(gwin->imenu);
+ }
}
void ami_menu_free_menu(struct ami_menu_data **md, int max, struct Menu *imenu)
{
ami_menu_free_labs(md, max);
- FreeMenus(imenu);
+ if(LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) {
+ DisposeObject((Object *)imenu); // if we detach our menu from the window we need to do this manually
+ } else {
+ FreeMenus(imenu);
+ }
}
struct Menu *ami_menu_create(struct gui_window_2 *gwin)
@@ -1066,9 +1140,12 @@ static bool ami_menu_hotlist_add(void *userdata, int level, int item, const char
type = NM_SUB;
break;
default:
- /* entries not at level 1 or 2 are not able to be added
- * \todo construct menus using menuclass instead! */
- return false;
+ if(LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) {
+ type = NM_SUB + (level - 2);
+ } else {
+ /* entries not at level 1 or 2 are not able to be added */
+ return false;
+ }
break;
}
@@ -1079,8 +1156,10 @@ static bool ami_menu_hotlist_add(void *userdata, int level, int item, const char
if (icon == NULL) icon = ASPrintf("icons/content.png");
}
- if((is_folder == true) && (type == NM_SUB)) {
- flags = NM_ITEMDISABLED;
+ if(!LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) {
+ if((is_folder == true) && (type == NM_SUB)) {
+ flags = NM_ITEMDISABLED;
+ }
}
ami_menu_alloc_item(md, item, type, title,
@@ -1098,6 +1177,11 @@ static nserror ami_menu_scan(struct ami_menu_data **md)
void ami_menu_update_checked(struct gui_window_2 *gwin)
{
+ if(LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) {
+ //needs re-writing for MenuClass
+ return;
+ }
+
struct Menu *menustrip;
GetAttr(WINDOW_MenuStrip, gwin->objects[OID_MAIN], (ULONG *)&menustrip);
-----------------------------------------------------------------------
Summary of changes:
frontends/amiga/menu.c | 100 ++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 92 insertions(+), 8 deletions(-)
diff --git a/frontends/amiga/menu.c b/frontends/amiga/menu.c
index 88a875e..fc42dc9 100644
--- a/frontends/amiga/menu.c
+++ b/frontends/amiga/menu.c
@@ -33,6 +33,9 @@
#endif
#include <libraries/gadtools.h>
+#ifdef __amigaos4__
+#include <intuition/menuclass.h>
+#endif
#include <classes/window.h>
#include <proto/label.h>
@@ -853,8 +856,60 @@ static int ami_menu_calc_item_width(struct ami_menu_data **md, int j, struct Ras
return item_size;
}
+#ifdef __amigaos4__
+static void ami_menu_layout_mc_recursive(Object *menu_parent, struct ami_menu_data **md, int level, int *i, int max)
+{
+ Object *menu_item = menu_parent;
+ ULONG item_type = T_ITEM;
+
+ if(level == NM_TITLE) {
+ item_type = T_MENU;
+ }
+
+ while(*i <= max) {
+ /* skip empty entries */
+ if(md[*i] == NULL) continue;
+ if(md[*i]->menutype == NM_IGNORE) continue;
+
+ if(md[*i]->menutype == level) {
+ menu_item = NewObject(NULL, "menuclass",
+ MA_Type, item_type,
+ MA_ID, *i,
+ MA_Label, md[*i]->menulab,
+ MA_Image, md[*i]->menuicon,
+ MA_Key, &md[*i]->menukey,
+ MA_PickHook, &md[*i]->menu_hook,
+ MA_Disabled, (md[*i]->flags & NM_ITEMDISABLED),
+ MA_Selected, (md[*i]->flags & CHECKED),
+ MA_Toggle, (md[*i]->flags & MENUTOGGLE),
+ TAG_DONE);
+ IDoMethod(menu_parent, OM_ADDMEMBER, menu_item);
+ } else if (md[*i]->menutype > level) {
+ ami_menu_layout_mc_recursive(menu_item, md, md[*i]->menutype, i, max);
+ } else {
+ break;
+ }
+ *i++;
+ }
+ return;
+}
+
+static struct Menu *ami_menu_layout_mc(struct ami_menu_data **md, int max)
+{
+ int i = 0;
-struct Menu *ami_menu_layout(struct ami_menu_data **md, int max)
+ Object *menu_root = NewObject(NULL, "menuclass",
+ MA_Type, T_ROOT,
+ MA_FreeImage, FALSE,
+ TAG_DONE);
+
+ ami_menu_layout_mc_recursive(menu_root, md, NM_TITLE, &i, max);
+
+ return (struct Menu *)menu_root;
+}
+#endif
+
+static struct Menu *ami_menu_layout_gt(struct ami_menu_data **md, int max)
{
int i, j;
int txtlen = 0;
@@ -977,15 +1032,34 @@ struct Menu *ami_menu_layout(struct ami_menu_data **md, int max)
return imenu;
}
+struct Menu *ami_menu_layout(struct ami_menu_data **md, int max)
+{
+ if(LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) {
+#ifdef __amigaos4__
+ return ami_menu_layout_mc(md, max);
+#endif
+ } else {
+ return ami_menu_layout_gt(md, max);
+ }
+}
+
void ami_menu_free(struct gui_window_2 *gwin)
{
- FreeMenus(gwin->imenu);
+ if(LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) {
+ DisposeObject((Object *)gwin->imenu); // if we detach our menu from the window we need to do this manually
+ } else {
+ FreeMenus(gwin->imenu);
+ }
}
void ami_menu_free_menu(struct ami_menu_data **md, int max, struct Menu *imenu)
{
ami_menu_free_labs(md, max);
- FreeMenus(imenu);
+ if(LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) {
+ DisposeObject((Object *)imenu); // if we detach our menu from the window we need to do this manually
+ } else {
+ FreeMenus(imenu);
+ }
}
struct Menu *ami_menu_create(struct gui_window_2 *gwin)
@@ -1066,9 +1140,12 @@ static bool ami_menu_hotlist_add(void *userdata, int level, int item, const char
type = NM_SUB;
break;
default:
- /* entries not at level 1 or 2 are not able to be added
- * \todo construct menus using menuclass instead! */
- return false;
+ if(LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) {
+ type = NM_SUB + (level - 2);
+ } else {
+ /* entries not at level 1 or 2 are not able to be added */
+ return false;
+ }
break;
}
@@ -1079,8 +1156,10 @@ static bool ami_menu_hotlist_add(void *userdata, int level, int item, const char
if (icon == NULL) icon = ASPrintf("icons/content.png");
}
- if((is_folder == true) && (type == NM_SUB)) {
- flags = NM_ITEMDISABLED;
+ if(!LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) {
+ if((is_folder == true) && (type == NM_SUB)) {
+ flags = NM_ITEMDISABLED;
+ }
}
ami_menu_alloc_item(md, item, type, title,
@@ -1098,6 +1177,11 @@ static nserror ami_menu_scan(struct ami_menu_data **md)
void ami_menu_update_checked(struct gui_window_2 *gwin)
{
+ if(LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) {
+ //needs re-writing for MenuClass
+ return;
+ }
+
struct Menu *menustrip;
GetAttr(WINDOW_MenuStrip, gwin->objects[OID_MAIN], (ULONG *)&menustrip);
--
NetSurf Browser
6 years, 8 months
netsurf: branch master updated. release/3.6-187-g4fab8f8
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/4fab8f830bd4ffaf8faca...
...commit http://git.netsurf-browser.org/netsurf.git/commit/4fab8f830bd4ffaf8faca40...
...tree http://git.netsurf-browser.org/netsurf.git/tree/4fab8f830bd4ffaf8faca408a...
The branch, master has been updated
via 4fab8f830bd4ffaf8faca408a5c1265887712704 (commit)
from c19ea4deaa61f8418db2c92f1843456be0389b7e (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=4fab8f830bd4ffaf8fa...
commit 4fab8f830bd4ffaf8faca408a5c1265887712704
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Queue redraws for SimpleRefresh browser windows
diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c
index 823bbcf..6627e87 100644
--- a/frontends/amiga/gui.c
+++ b/frontends/amiga/gui.c
@@ -242,7 +242,7 @@ static bool gui_window_get_scroll(struct gui_window *g, int *restrict sx, int *r
static void gui_window_set_scroll(struct gui_window *g, int sx, int sy);
static void gui_window_remove_caret(struct gui_window *g);
static void gui_window_place_caret(struct gui_window *g, int x, int y, int height, const struct rect *clip);
-
+static void gui_window_update_box(struct gui_window *g, const struct rect *restrict rect);
/* accessors for default options - user option is updated if it is set as per default */
@@ -3669,8 +3669,9 @@ static void ami_refresh_window(struct gui_window_2 *gwin)
/* simplerefresh only */
struct IBox *bbox;
- int x0, x1, y0, y1, sx, sy;
+ int sx, sy;
struct RegionRectangle *regrect;
+ struct rect r;
sx = gwin->gw->scrollx;
sy = gwin->gw->scrolly;
@@ -3684,33 +3685,33 @@ static void ami_refresh_window(struct gui_window_2 *gwin)
BeginRefresh(gwin->win);
- x0 = ((gwin->win->RPort->Layer->DamageList->bounds.MinX - bbox->Left) /
+ r.x0 = ((gwin->win->RPort->Layer->DamageList->bounds.MinX - bbox->Left) /
browser_window_get_scale(gwin->gw->bw)) + sx - 1;
- x1 = ((gwin->win->RPort->Layer->DamageList->bounds.MaxX - bbox->Left) /
+ r.x1 = ((gwin->win->RPort->Layer->DamageList->bounds.MaxX - bbox->Left) /
browser_window_get_scale(gwin->gw->bw)) + sx + 2;
- y0 = ((gwin->win->RPort->Layer->DamageList->bounds.MinY - bbox->Top) /
+ r.y0 = ((gwin->win->RPort->Layer->DamageList->bounds.MinY - bbox->Top) /
browser_window_get_scale(gwin->gw->bw)) + sy - 1;
- y1 = ((gwin->win->RPort->Layer->DamageList->bounds.MaxY - bbox->Top) /
+ r.y1 = ((gwin->win->RPort->Layer->DamageList->bounds.MaxY - bbox->Top) /
browser_window_get_scale(gwin->gw->bw)) + sy + 2;
regrect = gwin->win->RPort->Layer->DamageList->RegionRectangle;
- ami_do_redraw_limits(gwin->gw, gwin->gw->bw, false, x0, y0, x1, y1);
+ gui_window_update_box(gwin->gw, &r);
while(regrect)
{
- x0 = ((regrect->bounds.MinX - bbox->Left) /
+ r.x0 = ((regrect->bounds.MinX - bbox->Left) /
browser_window_get_scale(gwin->gw->bw)) + sx - 1;
- x1 = ((regrect->bounds.MaxX - bbox->Left) /
+ r.x1 = ((regrect->bounds.MaxX - bbox->Left) /
browser_window_get_scale(gwin->gw->bw)) + sx + 2;
- y0 = ((regrect->bounds.MinY - bbox->Top) /
+ r.y0 = ((regrect->bounds.MinY - bbox->Top) /
browser_window_get_scale(gwin->gw->bw)) + sy - 1;
- y1 = ((regrect->bounds.MaxY - bbox->Top) /
+ r.y1 = ((regrect->bounds.MaxY - bbox->Top) /
browser_window_get_scale(gwin->gw->bw)) + sy + 2;
regrect = regrect->Next;
- ami_do_redraw_limits(gwin->gw, gwin->gw->bw, false, x0, y0, x1, y1);
+ gui_window_update_box(gwin->gw, &r);
}
EndRefresh(gwin->win, TRUE);
-----------------------------------------------------------------------
Summary of changes:
frontends/amiga/gui.c | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c
index 823bbcf..6627e87 100644
--- a/frontends/amiga/gui.c
+++ b/frontends/amiga/gui.c
@@ -242,7 +242,7 @@ static bool gui_window_get_scroll(struct gui_window *g, int *restrict sx, int *r
static void gui_window_set_scroll(struct gui_window *g, int sx, int sy);
static void gui_window_remove_caret(struct gui_window *g);
static void gui_window_place_caret(struct gui_window *g, int x, int y, int height, const struct rect *clip);
-
+static void gui_window_update_box(struct gui_window *g, const struct rect *restrict rect);
/* accessors for default options - user option is updated if it is set as per default */
@@ -3669,8 +3669,9 @@ static void ami_refresh_window(struct gui_window_2 *gwin)
/* simplerefresh only */
struct IBox *bbox;
- int x0, x1, y0, y1, sx, sy;
+ int sx, sy;
struct RegionRectangle *regrect;
+ struct rect r;
sx = gwin->gw->scrollx;
sy = gwin->gw->scrolly;
@@ -3684,33 +3685,33 @@ static void ami_refresh_window(struct gui_window_2 *gwin)
BeginRefresh(gwin->win);
- x0 = ((gwin->win->RPort->Layer->DamageList->bounds.MinX - bbox->Left) /
+ r.x0 = ((gwin->win->RPort->Layer->DamageList->bounds.MinX - bbox->Left) /
browser_window_get_scale(gwin->gw->bw)) + sx - 1;
- x1 = ((gwin->win->RPort->Layer->DamageList->bounds.MaxX - bbox->Left) /
+ r.x1 = ((gwin->win->RPort->Layer->DamageList->bounds.MaxX - bbox->Left) /
browser_window_get_scale(gwin->gw->bw)) + sx + 2;
- y0 = ((gwin->win->RPort->Layer->DamageList->bounds.MinY - bbox->Top) /
+ r.y0 = ((gwin->win->RPort->Layer->DamageList->bounds.MinY - bbox->Top) /
browser_window_get_scale(gwin->gw->bw)) + sy - 1;
- y1 = ((gwin->win->RPort->Layer->DamageList->bounds.MaxY - bbox->Top) /
+ r.y1 = ((gwin->win->RPort->Layer->DamageList->bounds.MaxY - bbox->Top) /
browser_window_get_scale(gwin->gw->bw)) + sy + 2;
regrect = gwin->win->RPort->Layer->DamageList->RegionRectangle;
- ami_do_redraw_limits(gwin->gw, gwin->gw->bw, false, x0, y0, x1, y1);
+ gui_window_update_box(gwin->gw, &r);
while(regrect)
{
- x0 = ((regrect->bounds.MinX - bbox->Left) /
+ r.x0 = ((regrect->bounds.MinX - bbox->Left) /
browser_window_get_scale(gwin->gw->bw)) + sx - 1;
- x1 = ((regrect->bounds.MaxX - bbox->Left) /
+ r.x1 = ((regrect->bounds.MaxX - bbox->Left) /
browser_window_get_scale(gwin->gw->bw)) + sx + 2;
- y0 = ((regrect->bounds.MinY - bbox->Top) /
+ r.y0 = ((regrect->bounds.MinY - bbox->Top) /
browser_window_get_scale(gwin->gw->bw)) + sy - 1;
- y1 = ((regrect->bounds.MaxY - bbox->Top) /
+ r.y1 = ((regrect->bounds.MaxY - bbox->Top) /
browser_window_get_scale(gwin->gw->bw)) + sy + 2;
regrect = regrect->Next;
- ami_do_redraw_limits(gwin->gw, gwin->gw->bw, false, x0, y0, x1, y1);
+ gui_window_update_box(gwin->gw, &r);
}
EndRefresh(gwin->win, TRUE);
--
NetSurf Browser
6 years, 8 months
netsurf: branch master updated. release/3.6-186-gc19ea4d
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/c19ea4deaa61f8418db2c...
...commit http://git.netsurf-browser.org/netsurf.git/commit/c19ea4deaa61f8418db2c92...
...tree http://git.netsurf-browser.org/netsurf.git/tree/c19ea4deaa61f8418db2c92f1...
The branch, master has been updated
via c19ea4deaa61f8418db2c92f1843456be0389b7e (commit)
via 05e4463230d8ae9880ac3aef38ca12f09d30d960 (commit)
from 074afb43f424d671ce6d00b140df851a26f3ddd7 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=c19ea4deaa61f8418db...
commit c19ea4deaa61f8418db2c92f1843456be0389b7e
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Support SimpleRefresh corewindows
These queue redraws unlike the main browser window, which seems to work a bit better than redrawing immediately.
diff --git a/frontends/amiga/cookies.c b/frontends/amiga/cookies.c
index f428881..74c89cb 100644
--- a/frontends/amiga/cookies.c
+++ b/frontends/amiga/cookies.c
@@ -288,6 +288,11 @@ static nserror
ami_cookies_create_window(struct ami_cookie_window *cookie_win)
{
struct ami_corewindow *ami_cw = (struct ami_corewindow *)&cookie_win->core;
+ ULONG refresh_mode = WA_SmartRefresh;
+
+ if(nsoption_bool(window_simple_refresh) == true) {
+ refresh_mode = WA_SimpleRefresh;
+ }
ami_cw->objects[GID_CW_WIN] = WindowObj,
WA_ScreenTitle, ami_gui_get_screen_title(),
@@ -304,11 +309,13 @@ ami_cookies_create_window(struct ami_cookie_window *cookie_win)
WA_Height, nsoption_int(cookies_window_ysize),
WA_PubScreen, scrn,
WA_ReportMouse, TRUE,
- WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
+ refresh_mode, TRUE,
+ WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_IDCMPUPDATE |
- IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY,
+ IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_IDCMPHook, &ami_cw->idcmp_hook,
- WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE,
+ WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE |
+ IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_SharedPort, sport,
WINDOW_HorizProp, 1,
WINDOW_VertProp, 1,
diff --git a/frontends/amiga/corewindow.c b/frontends/amiga/corewindow.c
index 2417d7b..d2bfbf9 100644
--- a/frontends/amiga/corewindow.c
+++ b/frontends/amiga/corewindow.c
@@ -66,8 +66,6 @@
#include "amiga/schedule.h"
#include "amiga/utf8.h"
-static void ami_cw_get_window_dimensions(struct core_window *cw, int *width, int *height);
-
static void
ami_cw_scroller_top(struct ami_corewindow *ami_cw, ULONG *restrict x, ULONG *restrict y)
{
@@ -86,6 +84,22 @@ ami_cw_scroller_top(struct ami_corewindow *ami_cw, ULONG *restrict x, ULONG *res
*y = ys;
}
+static void
+ami_cw_window_size(struct ami_corewindow *ami_cw, int *width, int *height)
+{
+ struct IBox *bbox;
+
+ if(ami_gui_get_space_box((Object *)ami_cw->objects[GID_CW_DRAW], &bbox) != NSERROR_OK) {
+ amiga_warn_user("NoMemory", "");
+ return;
+ }
+
+ *width = bbox->Width;
+ *height = bbox->Height;
+
+ ami_gui_free_space_box(bbox);
+}
+
/**
* Convert co-ordinates relative to space.gadget
@@ -366,6 +380,41 @@ ami_cw_redraw(struct ami_corewindow *ami_cw, const struct rect *restrict r)
ami_schedule(1, ami_cw_redraw_cb, ami_cw);
}
+static void ami_cw_simplerefresh(struct ami_corewindow *ami_cw)
+{
+ struct rect r;
+ struct RegionRectangle *regrect;
+
+ BeginRefresh(ami_cw->win);
+
+ r.x0 = ami_cw->win->RPort->Layer->DamageList->bounds.MinX;
+ r.x1 = ami_cw->win->RPort->Layer->DamageList->bounds.MaxX;
+ r.y0 = ami_cw->win->RPort->Layer->DamageList->bounds.MinY;
+ r.y1 = ami_cw->win->RPort->Layer->DamageList->bounds.MaxY;
+
+ ami_cw_coord_amiga_to_ns(ami_cw, &r.x0, &r.y0);
+ ami_cw_coord_amiga_to_ns(ami_cw, &r.y0, &r.y1);
+
+ regrect = ami_cw->win->RPort->Layer->DamageList->RegionRectangle;
+
+ ami_cw_redraw(ami_cw, &r); /* queue redraw */
+
+ while(regrect) {
+ r.x0 = regrect->bounds.MinX;
+ r.x1 = regrect->bounds.MaxX;
+ r.y0 = regrect->bounds.MinY;
+ r.y1 = regrect->bounds.MaxY;
+ ami_cw_coord_amiga_to_ns(ami_cw, &r.x0, &r.y0);
+ ami_cw_coord_amiga_to_ns(ami_cw, &r.y0, &r.y1);
+
+ regrect = regrect->Next;
+
+ ami_cw_redraw(ami_cw, &r); /* queue redraw */
+ }
+
+ EndRefresh(ami_cw->win, TRUE);
+}
+
static void
ami_cw_toggle_scrollbar(struct ami_corewindow *ami_cw, bool vert, bool visible)
{
@@ -464,6 +513,17 @@ HOOKF(void, ami_cw_idcmp_hook, Object *, object, struct IntuiMessage *)
}
break;
#endif
+
+ case IDCMP_SIZEVERIFY:
+ break;
+
+ case IDCMP_REFRESHWINDOW:
+ ami_cw_simplerefresh(ami_cw);
+ break;
+
+ default:
+ LOG("IDCMP hook unhandled event: %ld", msg->Class);
+ break;
}
}
@@ -548,7 +608,7 @@ static void
ami_cw_newsize(struct ami_corewindow *ami_cw)
{
int win_w, win_h;
- ami_cw_get_window_dimensions(ami_cw, &win_w, &win_h);
+ ami_cw_window_size(ami_cw, &win_w, &win_h);
if(ami_cw->objects[GID_CW_HSCROLL] != NULL) {
RefreshSetGadgetAttrs((struct Gadget *)ami_cw->objects[GID_CW_HSCROLL], ami_cw->win, NULL,
@@ -750,17 +810,8 @@ static void
ami_cw_get_window_dimensions(struct core_window *cw, int *width, int *height)
{
struct ami_corewindow *ami_cw = (struct ami_corewindow *)cw;
- struct IBox *bbox;
- if(ami_gui_get_space_box((Object *)ami_cw->objects[GID_CW_DRAW], &bbox) != NSERROR_OK) {
- amiga_warn_user("NoMemory", "");
- return;
- }
-
- *width = bbox->Width;
- *height = bbox->Height;
-
- ami_gui_free_space_box(bbox);
+ ami_cw_window_size(ami_cw, width, height);
}
@@ -770,7 +821,7 @@ ami_cw_update_size(struct core_window *cw, int width, int height)
struct ami_corewindow *ami_cw = (struct ami_corewindow *)cw;
int win_w, win_h;
- ami_cw_get_window_dimensions((struct core_window *)ami_cw, &win_w, &win_h);
+ ami_cw_window_size(ami_cw, &win_w, &win_h);
if(width == -1) {
ami_cw_toggle_scrollbar(ami_cw, false, false);
@@ -805,7 +856,7 @@ ami_cw_scroll_visible(struct core_window *cw, const struct rect *r)
ULONG win_x0, win_y0;
int win_x1, win_y1;
- ami_cw_get_window_dimensions((struct core_window *)ami_cw, &win_w, &win_h);
+ ami_cw_window_size(ami_cw, &win_w, &win_h);
ami_cw_scroller_top(ami_cw, &win_x0, &win_y0);
diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c
index e27d105..823bbcf 100644
--- a/frontends/amiga/gui.c
+++ b/frontends/amiga/gui.c
@@ -3784,7 +3784,7 @@ HOOKF(void, ami_scroller_hook, Object *, object, struct IntuiMessage *)
break;
default:
- LOG("IDCMP hook unhandled event: %ld\n", msg->Class);
+ LOG("IDCMP hook unhandled event: %ld", msg->Class);
break;
}
// ReplyMsg((struct Message *)msg);
diff --git a/frontends/amiga/history.c b/frontends/amiga/history.c
index f326f91..b2a3cc0 100644
--- a/frontends/amiga/history.c
+++ b/frontends/amiga/history.c
@@ -360,6 +360,11 @@ static nserror
ami_history_global_create_window(struct ami_history_global_window *history_win)
{
struct ami_corewindow *ami_cw = (struct ami_corewindow *)&history_win->core;
+ ULONG refresh_mode = WA_SmartRefresh;
+
+ if(nsoption_bool(window_simple_refresh) == true) {
+ refresh_mode = WA_SimpleRefresh;
+ }
ami_cw->objects[GID_CW_WIN] = WindowObj,
WA_ScreenTitle, ami_gui_get_screen_title(),
@@ -376,11 +381,13 @@ ami_history_global_create_window(struct ami_history_global_window *history_win)
WA_Height, nsoption_int(history_window_ysize),
WA_PubScreen, scrn,
WA_ReportMouse, TRUE,
- WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
+ refresh_mode, TRUE,
+ WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_IDCMPUPDATE |
- IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY,
+ IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_IDCMPHook, &ami_cw->idcmp_hook,
- WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE,
+ WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE |
+ IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_SharedPort, sport,
WINDOW_HorizProp, 1,
WINDOW_VertProp, 1,
diff --git a/frontends/amiga/hotlist.c b/frontends/amiga/hotlist.c
index a0fd303..8aa181b 100644
--- a/frontends/amiga/hotlist.c
+++ b/frontends/amiga/hotlist.c
@@ -464,6 +464,11 @@ static nserror
ami_hotlist_create_window(struct ami_hotlist_window *hotlist_win)
{
struct ami_corewindow *ami_cw = (struct ami_corewindow *)&hotlist_win->core;
+ ULONG refresh_mode = WA_SmartRefresh;
+
+ if(nsoption_bool(window_simple_refresh) == true) {
+ refresh_mode = WA_SimpleRefresh;
+ }
ami_cw->objects[GID_CW_WIN] = WindowObj,
WA_ScreenTitle, ami_gui_get_screen_title(),
@@ -480,11 +485,13 @@ ami_hotlist_create_window(struct ami_hotlist_window *hotlist_win)
WA_Height, nsoption_int(hotlist_window_ysize),
WA_PubScreen, scrn,
WA_ReportMouse, TRUE,
- WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
+ refresh_mode, TRUE,
+ WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_IDCMPUPDATE |
- IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY,
+ IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_IDCMPHook, &ami_cw->idcmp_hook,
- WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE,
+ WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE |
+ IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_SharedPort, sport,
WINDOW_HorizProp, 1,
WINDOW_VertProp, 1,
diff --git a/frontends/amiga/sslcert.c b/frontends/amiga/sslcert.c
index 2cb3d8e..5929f7e 100644
--- a/frontends/amiga/sslcert.c
+++ b/frontends/amiga/sslcert.c
@@ -41,6 +41,7 @@
#include "netsurf/plotters.h"
#include "desktop/sslcert_viewer.h"
#include "utils/messages.h"
+#include "utils/nsoption.h"
#include "amiga/corewindow.h"
#include "amiga/libs.h"
@@ -214,6 +215,11 @@ static nserror
ami_crtvrfy_create_window(struct ami_crtvrfy_window *crtvrfy_win)
{
struct ami_corewindow *ami_cw = (struct ami_corewindow *)&crtvrfy_win->core;
+ ULONG refresh_mode = WA_SmartRefresh;
+
+ if(nsoption_bool(window_simple_refresh) == true) {
+ refresh_mode = WA_SimpleRefresh;
+ }
ami_cw->objects[GID_CW_WIN] = WindowObj,
WA_ScreenTitle, ami_gui_get_screen_title(),
@@ -227,11 +233,13 @@ ami_crtvrfy_create_window(struct ami_crtvrfy_window *crtvrfy_win)
WA_Height, scrn->Height / 2,
WA_PubScreen, scrn,
WA_ReportMouse, TRUE,
- WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
+ refresh_mode, TRUE,
+ WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_IDCMPUPDATE |
- IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY,
+ IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_IDCMPHook, &ami_cw->idcmp_hook,
- WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE,
+ WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE |
+ IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_SharedPort, sport,
WINDOW_UserData, crtvrfy_win,
/* WINDOW_NewMenu, twin->menu, -> No menu for SSL Cert */
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=05e4463230d8ae9880a...
commit 05e4463230d8ae9880ac3aef38ca12f09d30d960
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Update corewindow scrollbars when user resizes window
diff --git a/frontends/amiga/corewindow.c b/frontends/amiga/corewindow.c
index 548ecac..2417d7b 100644
--- a/frontends/amiga/corewindow.c
+++ b/frontends/amiga/corewindow.c
@@ -66,6 +66,8 @@
#include "amiga/schedule.h"
#include "amiga/utf8.h"
+static void ami_cw_get_window_dimensions(struct core_window *cw, int *width, int *height);
+
static void
ami_cw_scroller_top(struct ami_corewindow *ami_cw, ULONG *restrict x, ULONG *restrict y)
{
@@ -539,6 +541,31 @@ ami_cw_drag_end(struct ami_corewindow *ami_cw, int x, int y)
}
/**
+ * User has resized window
+ */
+
+static void
+ami_cw_newsize(struct ami_corewindow *ami_cw)
+{
+ int win_w, win_h;
+ ami_cw_get_window_dimensions(ami_cw, &win_w, &win_h);
+
+ if(ami_cw->objects[GID_CW_HSCROLL] != NULL) {
+ RefreshSetGadgetAttrs((struct Gadget *)ami_cw->objects[GID_CW_HSCROLL], ami_cw->win, NULL,
+ SCROLLER_Visible, win_w,
+ TAG_DONE);
+ }
+
+ if(ami_cw->objects[GID_CW_VSCROLL] != NULL) {
+ RefreshSetGadgetAttrs((struct Gadget *)ami_cw->objects[GID_CW_VSCROLL], ami_cw->win, NULL,
+ SCROLLER_Visible, win_h,
+ TAG_DONE);
+ }
+
+ ami_cw_redraw(ami_cw, NULL);
+}
+
+/**
* Main event loop for our core window
*
* \return TRUE if window destroyed
@@ -681,7 +708,7 @@ ami_cw_event(void *w)
break;
case WMHI_NEWSIZE:
- ami_cw_redraw(ami_cw, NULL);
+ ami_cw_newsize(ami_cw);
break;
case WMHI_CLOSEWINDOW:
-----------------------------------------------------------------------
Summary of changes:
frontends/amiga/cookies.c | 13 ++++--
frontends/amiga/corewindow.c | 104 ++++++++++++++++++++++++++++++++++++------
frontends/amiga/gui.c | 2 +-
frontends/amiga/history.c | 13 ++++--
frontends/amiga/hotlist.c | 13 ++++--
frontends/amiga/sslcert.c | 14 ++++--
6 files changed, 133 insertions(+), 26 deletions(-)
diff --git a/frontends/amiga/cookies.c b/frontends/amiga/cookies.c
index f428881..74c89cb 100644
--- a/frontends/amiga/cookies.c
+++ b/frontends/amiga/cookies.c
@@ -288,6 +288,11 @@ static nserror
ami_cookies_create_window(struct ami_cookie_window *cookie_win)
{
struct ami_corewindow *ami_cw = (struct ami_corewindow *)&cookie_win->core;
+ ULONG refresh_mode = WA_SmartRefresh;
+
+ if(nsoption_bool(window_simple_refresh) == true) {
+ refresh_mode = WA_SimpleRefresh;
+ }
ami_cw->objects[GID_CW_WIN] = WindowObj,
WA_ScreenTitle, ami_gui_get_screen_title(),
@@ -304,11 +309,13 @@ ami_cookies_create_window(struct ami_cookie_window *cookie_win)
WA_Height, nsoption_int(cookies_window_ysize),
WA_PubScreen, scrn,
WA_ReportMouse, TRUE,
- WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
+ refresh_mode, TRUE,
+ WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_IDCMPUPDATE |
- IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY,
+ IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_IDCMPHook, &ami_cw->idcmp_hook,
- WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE,
+ WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE |
+ IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_SharedPort, sport,
WINDOW_HorizProp, 1,
WINDOW_VertProp, 1,
diff --git a/frontends/amiga/corewindow.c b/frontends/amiga/corewindow.c
index 548ecac..d2bfbf9 100644
--- a/frontends/amiga/corewindow.c
+++ b/frontends/amiga/corewindow.c
@@ -84,6 +84,22 @@ ami_cw_scroller_top(struct ami_corewindow *ami_cw, ULONG *restrict x, ULONG *res
*y = ys;
}
+static void
+ami_cw_window_size(struct ami_corewindow *ami_cw, int *width, int *height)
+{
+ struct IBox *bbox;
+
+ if(ami_gui_get_space_box((Object *)ami_cw->objects[GID_CW_DRAW], &bbox) != NSERROR_OK) {
+ amiga_warn_user("NoMemory", "");
+ return;
+ }
+
+ *width = bbox->Width;
+ *height = bbox->Height;
+
+ ami_gui_free_space_box(bbox);
+}
+
/**
* Convert co-ordinates relative to space.gadget
@@ -364,6 +380,41 @@ ami_cw_redraw(struct ami_corewindow *ami_cw, const struct rect *restrict r)
ami_schedule(1, ami_cw_redraw_cb, ami_cw);
}
+static void ami_cw_simplerefresh(struct ami_corewindow *ami_cw)
+{
+ struct rect r;
+ struct RegionRectangle *regrect;
+
+ BeginRefresh(ami_cw->win);
+
+ r.x0 = ami_cw->win->RPort->Layer->DamageList->bounds.MinX;
+ r.x1 = ami_cw->win->RPort->Layer->DamageList->bounds.MaxX;
+ r.y0 = ami_cw->win->RPort->Layer->DamageList->bounds.MinY;
+ r.y1 = ami_cw->win->RPort->Layer->DamageList->bounds.MaxY;
+
+ ami_cw_coord_amiga_to_ns(ami_cw, &r.x0, &r.y0);
+ ami_cw_coord_amiga_to_ns(ami_cw, &r.y0, &r.y1);
+
+ regrect = ami_cw->win->RPort->Layer->DamageList->RegionRectangle;
+
+ ami_cw_redraw(ami_cw, &r); /* queue redraw */
+
+ while(regrect) {
+ r.x0 = regrect->bounds.MinX;
+ r.x1 = regrect->bounds.MaxX;
+ r.y0 = regrect->bounds.MinY;
+ r.y1 = regrect->bounds.MaxY;
+ ami_cw_coord_amiga_to_ns(ami_cw, &r.x0, &r.y0);
+ ami_cw_coord_amiga_to_ns(ami_cw, &r.y0, &r.y1);
+
+ regrect = regrect->Next;
+
+ ami_cw_redraw(ami_cw, &r); /* queue redraw */
+ }
+
+ EndRefresh(ami_cw->win, TRUE);
+}
+
static void
ami_cw_toggle_scrollbar(struct ami_corewindow *ami_cw, bool vert, bool visible)
{
@@ -462,6 +513,17 @@ HOOKF(void, ami_cw_idcmp_hook, Object *, object, struct IntuiMessage *)
}
break;
#endif
+
+ case IDCMP_SIZEVERIFY:
+ break;
+
+ case IDCMP_REFRESHWINDOW:
+ ami_cw_simplerefresh(ami_cw);
+ break;
+
+ default:
+ LOG("IDCMP hook unhandled event: %ld", msg->Class);
+ break;
}
}
@@ -539,6 +601,31 @@ ami_cw_drag_end(struct ami_corewindow *ami_cw, int x, int y)
}
/**
+ * User has resized window
+ */
+
+static void
+ami_cw_newsize(struct ami_corewindow *ami_cw)
+{
+ int win_w, win_h;
+ ami_cw_window_size(ami_cw, &win_w, &win_h);
+
+ if(ami_cw->objects[GID_CW_HSCROLL] != NULL) {
+ RefreshSetGadgetAttrs((struct Gadget *)ami_cw->objects[GID_CW_HSCROLL], ami_cw->win, NULL,
+ SCROLLER_Visible, win_w,
+ TAG_DONE);
+ }
+
+ if(ami_cw->objects[GID_CW_VSCROLL] != NULL) {
+ RefreshSetGadgetAttrs((struct Gadget *)ami_cw->objects[GID_CW_VSCROLL], ami_cw->win, NULL,
+ SCROLLER_Visible, win_h,
+ TAG_DONE);
+ }
+
+ ami_cw_redraw(ami_cw, NULL);
+}
+
+/**
* Main event loop for our core window
*
* \return TRUE if window destroyed
@@ -681,7 +768,7 @@ ami_cw_event(void *w)
break;
case WMHI_NEWSIZE:
- ami_cw_redraw(ami_cw, NULL);
+ ami_cw_newsize(ami_cw);
break;
case WMHI_CLOSEWINDOW:
@@ -723,17 +810,8 @@ static void
ami_cw_get_window_dimensions(struct core_window *cw, int *width, int *height)
{
struct ami_corewindow *ami_cw = (struct ami_corewindow *)cw;
- struct IBox *bbox;
- if(ami_gui_get_space_box((Object *)ami_cw->objects[GID_CW_DRAW], &bbox) != NSERROR_OK) {
- amiga_warn_user("NoMemory", "");
- return;
- }
-
- *width = bbox->Width;
- *height = bbox->Height;
-
- ami_gui_free_space_box(bbox);
+ ami_cw_window_size(ami_cw, width, height);
}
@@ -743,7 +821,7 @@ ami_cw_update_size(struct core_window *cw, int width, int height)
struct ami_corewindow *ami_cw = (struct ami_corewindow *)cw;
int win_w, win_h;
- ami_cw_get_window_dimensions((struct core_window *)ami_cw, &win_w, &win_h);
+ ami_cw_window_size(ami_cw, &win_w, &win_h);
if(width == -1) {
ami_cw_toggle_scrollbar(ami_cw, false, false);
@@ -778,7 +856,7 @@ ami_cw_scroll_visible(struct core_window *cw, const struct rect *r)
ULONG win_x0, win_y0;
int win_x1, win_y1;
- ami_cw_get_window_dimensions((struct core_window *)ami_cw, &win_w, &win_h);
+ ami_cw_window_size(ami_cw, &win_w, &win_h);
ami_cw_scroller_top(ami_cw, &win_x0, &win_y0);
diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c
index e27d105..823bbcf 100644
--- a/frontends/amiga/gui.c
+++ b/frontends/amiga/gui.c
@@ -3784,7 +3784,7 @@ HOOKF(void, ami_scroller_hook, Object *, object, struct IntuiMessage *)
break;
default:
- LOG("IDCMP hook unhandled event: %ld\n", msg->Class);
+ LOG("IDCMP hook unhandled event: %ld", msg->Class);
break;
}
// ReplyMsg((struct Message *)msg);
diff --git a/frontends/amiga/history.c b/frontends/amiga/history.c
index f326f91..b2a3cc0 100644
--- a/frontends/amiga/history.c
+++ b/frontends/amiga/history.c
@@ -360,6 +360,11 @@ static nserror
ami_history_global_create_window(struct ami_history_global_window *history_win)
{
struct ami_corewindow *ami_cw = (struct ami_corewindow *)&history_win->core;
+ ULONG refresh_mode = WA_SmartRefresh;
+
+ if(nsoption_bool(window_simple_refresh) == true) {
+ refresh_mode = WA_SimpleRefresh;
+ }
ami_cw->objects[GID_CW_WIN] = WindowObj,
WA_ScreenTitle, ami_gui_get_screen_title(),
@@ -376,11 +381,13 @@ ami_history_global_create_window(struct ami_history_global_window *history_win)
WA_Height, nsoption_int(history_window_ysize),
WA_PubScreen, scrn,
WA_ReportMouse, TRUE,
- WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
+ refresh_mode, TRUE,
+ WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_IDCMPUPDATE |
- IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY,
+ IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_IDCMPHook, &ami_cw->idcmp_hook,
- WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE,
+ WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE |
+ IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_SharedPort, sport,
WINDOW_HorizProp, 1,
WINDOW_VertProp, 1,
diff --git a/frontends/amiga/hotlist.c b/frontends/amiga/hotlist.c
index a0fd303..8aa181b 100644
--- a/frontends/amiga/hotlist.c
+++ b/frontends/amiga/hotlist.c
@@ -464,6 +464,11 @@ static nserror
ami_hotlist_create_window(struct ami_hotlist_window *hotlist_win)
{
struct ami_corewindow *ami_cw = (struct ami_corewindow *)&hotlist_win->core;
+ ULONG refresh_mode = WA_SmartRefresh;
+
+ if(nsoption_bool(window_simple_refresh) == true) {
+ refresh_mode = WA_SimpleRefresh;
+ }
ami_cw->objects[GID_CW_WIN] = WindowObj,
WA_ScreenTitle, ami_gui_get_screen_title(),
@@ -480,11 +485,13 @@ ami_hotlist_create_window(struct ami_hotlist_window *hotlist_win)
WA_Height, nsoption_int(hotlist_window_ysize),
WA_PubScreen, scrn,
WA_ReportMouse, TRUE,
- WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
+ refresh_mode, TRUE,
+ WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_IDCMPUPDATE |
- IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY,
+ IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_IDCMPHook, &ami_cw->idcmp_hook,
- WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE,
+ WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE |
+ IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_SharedPort, sport,
WINDOW_HorizProp, 1,
WINDOW_VertProp, 1,
diff --git a/frontends/amiga/sslcert.c b/frontends/amiga/sslcert.c
index 2cb3d8e..5929f7e 100644
--- a/frontends/amiga/sslcert.c
+++ b/frontends/amiga/sslcert.c
@@ -41,6 +41,7 @@
#include "netsurf/plotters.h"
#include "desktop/sslcert_viewer.h"
#include "utils/messages.h"
+#include "utils/nsoption.h"
#include "amiga/corewindow.h"
#include "amiga/libs.h"
@@ -214,6 +215,11 @@ static nserror
ami_crtvrfy_create_window(struct ami_crtvrfy_window *crtvrfy_win)
{
struct ami_corewindow *ami_cw = (struct ami_corewindow *)&crtvrfy_win->core;
+ ULONG refresh_mode = WA_SmartRefresh;
+
+ if(nsoption_bool(window_simple_refresh) == true) {
+ refresh_mode = WA_SimpleRefresh;
+ }
ami_cw->objects[GID_CW_WIN] = WindowObj,
WA_ScreenTitle, ami_gui_get_screen_title(),
@@ -227,11 +233,13 @@ ami_crtvrfy_create_window(struct ami_crtvrfy_window *crtvrfy_win)
WA_Height, scrn->Height / 2,
WA_PubScreen, scrn,
WA_ReportMouse, TRUE,
- WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
+ refresh_mode, TRUE,
+ WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_IDCMPUPDATE |
- IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY,
+ IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_IDCMPHook, &ami_cw->idcmp_hook,
- WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE,
+ WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE |
+ IDCMP_SIZEVERIFY | IDCMP_REFRESHWINDOW,
WINDOW_SharedPort, sport,
WINDOW_UserData, crtvrfy_win,
/* WINDOW_NewMenu, twin->menu, -> No menu for SSL Cert */
--
NetSurf Browser
6 years, 8 months