Fix OS3 button disabling

Testing reveals OS3's button.gadget doesn't support OM_GET for GA_Disabled.
In addition, we fix OS4's boolean comparisons to ensure we only check against FALSE and !FALSE
This commit is contained in:
Chris Young 2016-02-29 23:06:10 +00:00
parent 64575f2aed
commit 2e958f4a4d
2 changed files with 28 additions and 17 deletions

View File

@ -166,6 +166,12 @@
#define NSA_STATUS_TEXT STRINGA_TextVal #define NSA_STATUS_TEXT STRINGA_TextVal
#endif #endif
#ifdef __amigaos4__
#define BOOL_MISMATCH(a,b) ((a == FALSE) && (b != FALSE)) || ((a != FALSE) && (b == FALSE))
#else
#define BOOL_MISMATCH(a,b) (1)
#endif
static bool ami_quit = false; static bool ami_quit = false;
extern struct gui_utf8_table *amiga_utf8_table; extern struct gui_utf8_table *amiga_utf8_table;
@ -1116,17 +1122,14 @@ static void gui_init2(int argc, char** argv)
static void ami_update_buttons(struct gui_window_2 *gwin) static void ami_update_buttons(struct gui_window_2 *gwin)
{ {
#ifndef __amigaos4__ long back=FALSE, forward=FALSE, tabclose=FALSE, stop=FALSE, reload=FALSE;
#warning these buttons aren't updating on OS3 long s_back, s_forward, s_tabclose, s_stop, s_reload;
#endif
long back=FALSE,forward=TRUE,tabclose=FALSE,stop=FALSE,reload=FALSE;
long storage = FALSE;
if(!browser_window_back_available(gwin->gw->bw)) if(!browser_window_back_available(gwin->gw->bw))
back=TRUE; back=TRUE;
if(browser_window_forward_available(gwin->gw->bw)) if(!browser_window_forward_available(gwin->gw->bw))
forward=FALSE; forward=TRUE;
if(!browser_window_stop_available(gwin->gw->bw)) if(!browser_window_stop_available(gwin->gw->bw))
stop=TRUE; stop=TRUE;
@ -1147,30 +1150,35 @@ static void ami_update_buttons(struct gui_window_2 *gwin)
} }
} }
GetAttr(GA_Disabled, gwin->objects[GID_BACK], (uint32 *)&storage); #ifdef __amigaos4__
if(storage != back) GetAttr(GA_Disabled, gwin->objects[GID_BACK], (long *)&s_back);
GetAttr(GA_Disabled, gwin->objects[GID_FORWARD], (long *)&s_forward);
GetAttr(GA_Disabled, gwin->objects[GID_RELOAD], (long *)&s_reload);
GetAttr(GA_Disabled, gwin->objects[GID_STOP], (long *)&s_stop);
#endif
if(BOOL_MISMATCH(storage, back))
SetGadgetAttrs((struct Gadget *)gwin->objects[GID_BACK], SetGadgetAttrs((struct Gadget *)gwin->objects[GID_BACK],
gwin->win, NULL, GA_Disabled, back, TAG_DONE); gwin->win, NULL, GA_Disabled, back, TAG_DONE);
GetAttr(GA_Disabled, gwin->objects[GID_FORWARD], (uint32 *)&storage); if(BOOL_MISMATCH(storage, forward))
if(storage != forward)
SetGadgetAttrs((struct Gadget *)gwin->objects[GID_FORWARD], SetGadgetAttrs((struct Gadget *)gwin->objects[GID_FORWARD],
gwin->win, NULL, GA_Disabled, forward, TAG_DONE); gwin->win, NULL, GA_Disabled, forward, TAG_DONE);
GetAttr(GA_Disabled, gwin->objects[GID_RELOAD], (uint32 *)&storage); if(BOOL_MISMATCH(storage, reload))
if(storage != reload)
SetGadgetAttrs((struct Gadget *)gwin->objects[GID_RELOAD], SetGadgetAttrs((struct Gadget *)gwin->objects[GID_RELOAD],
gwin->win, NULL, GA_Disabled, reload, TAG_DONE); gwin->win, NULL, GA_Disabled, reload, TAG_DONE);
GetAttr(GA_Disabled, gwin->objects[GID_STOP], (uint32 *)&storage); if(BOOL_MISMATCH(storage, stop))
if(storage != stop)
SetGadgetAttrs((struct Gadget *)gwin->objects[GID_STOP], SetGadgetAttrs((struct Gadget *)gwin->objects[GID_STOP],
gwin->win, NULL, GA_Disabled, stop, TAG_DONE); gwin->win, NULL, GA_Disabled, stop, TAG_DONE);
if(ClickTabBase->lib_Version < 53) { if(ClickTabBase->lib_Version < 53) {
if(gwin->tabs <= 1) tabclose = TRUE; if(gwin->tabs <= 1) tabclose = TRUE;
GetAttr(GA_Disabled, gwin->objects[GID_CLOSETAB], (uint32 *)&storage); #ifdef __amigaos4__
if(storage != tabclose) GetAttr(GA_Disabled, gwin->objects[GID_CLOSETAB], (long *)&s_tabclose);
#endif
if(BOOL_MISMATCH(storage, tabclose))
SetGadgetAttrs((struct Gadget *)gwin->objects[GID_CLOSETAB], SetGadgetAttrs((struct Gadget *)gwin->objects[GID_CLOSETAB],
gwin->win, NULL, GA_Disabled, tabclose, TAG_DONE); gwin->win, NULL, GA_Disabled, tabclose, TAG_DONE);
} }
@ -3767,6 +3775,8 @@ gui_window_create(struct browser_window *bw,
ULONG defer_layout = TRUE; ULONG defer_layout = TRUE;
ULONG idcmp_sizeverify = IDCMP_SIZEVERIFY; ULONG idcmp_sizeverify = IDCMP_SIZEVERIFY;
LOG("Creating window");
if (!scrn) ami_openscreenfirst(); if (!scrn) ami_openscreenfirst();
if (nsoption_bool(kiosk_mode)) flags &= ~GW_CREATE_TAB; if (nsoption_bool(kiosk_mode)) flags &= ~GW_CREATE_TAB;

View File

@ -189,6 +189,7 @@ void ami_init_layers(struct gui_globals *gg, ULONG width, ULONG height, bool for
} }
init_layers_count++; init_layers_count++;
LOG("Layer initialised (total: %d)", init_layers_count);
} }
void ami_free_layers(struct gui_globals *gg) void ami_free_layers(struct gui_globals *gg)