Only allocate a signal for screen closure at the point we need it. This ensures there are enough free signals for popupmenu.library (at the moment, at least)
This commit is contained in:
parent
bf3ed6a67f
commit
cd9268761c
19
amiga/gui.c
19
amiga/gui.c
|
@ -163,7 +163,7 @@ Class *urlStringClass;
|
||||||
|
|
||||||
BOOL locked_screen = FALSE;
|
BOOL locked_screen = FALSE;
|
||||||
BOOL screen_closed = FALSE;
|
BOOL screen_closed = FALSE;
|
||||||
ULONG screen_signal = -1;
|
|
||||||
struct MsgPort *applibport = NULL;
|
struct MsgPort *applibport = NULL;
|
||||||
ULONG applibsig = 0;
|
ULONG applibsig = 0;
|
||||||
BOOL refresh_search_ico = FALSE;
|
BOOL refresh_search_ico = FALSE;
|
||||||
|
@ -443,7 +443,6 @@ void ami_open_resources(void)
|
||||||
|
|
||||||
ami_file_req_init();
|
ami_file_req_init();
|
||||||
ami_help_init(NULL);
|
ami_help_init(NULL);
|
||||||
screen_signal = AllocSignal(-1); /* for screen closure notification */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static UWORD ami_system_colour_scrollbar_fgpen(struct DrawInfo *drinfo)
|
static UWORD ami_system_colour_scrollbar_fgpen(struct DrawInfo *drinfo)
|
||||||
|
@ -773,7 +772,6 @@ void ami_openscreen(void)
|
||||||
SA_PubName, "NetSurf",
|
SA_PubName, "NetSurf",
|
||||||
SA_LikeWorkbench, TRUE,
|
SA_LikeWorkbench, TRUE,
|
||||||
SA_Compositing, compositing,
|
SA_Compositing, compositing,
|
||||||
SA_PubSig, screen_signal,
|
|
||||||
TAG_DONE);
|
TAG_DONE);
|
||||||
|
|
||||||
if(scrn)
|
if(scrn)
|
||||||
|
@ -2783,20 +2781,26 @@ void ami_quit_netsurf_delayed(void)
|
||||||
|
|
||||||
void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
|
void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
|
||||||
{
|
{
|
||||||
ULONG scrnsig = 1 << screen_signal;
|
ULONG screen_signal = -1;
|
||||||
|
|
||||||
if(scrn == NULL) return;
|
if(scrn == NULL) return;
|
||||||
if(CloseScreen(scrn)) return;
|
if(CloseScreen(scrn)) return;
|
||||||
if(locked_screen == TRUE) return;
|
if(locked_screen == TRUE) return;
|
||||||
|
|
||||||
/* If this is our own screen, wait for visitor windows to close */
|
/* If this is our own screen, wait for visitor windows to close */
|
||||||
LOG(("Waiting for visitor windows to close... (signal)"));
|
if(screen_signal = AllocSignal(-1) != -1) {
|
||||||
Wait(scrnsig);
|
ULONG scrnsig = 1 << screen_signal;
|
||||||
|
SetScreenAttr(scrn, SA_PubSig, (APTR)screen_signal, sizeof(ULONG));
|
||||||
|
LOG(("Waiting for visitor windows to close... (signal)"));
|
||||||
|
Wait(scrnsig);
|
||||||
|
}
|
||||||
|
|
||||||
while (CloseScreen(scrn) == FALSE) {
|
while (CloseScreen(scrn) == FALSE) {
|
||||||
LOG(("Still waiting for visitor windows to close... (polling)"));
|
LOG(("Waiting for visitor windows to close... (polling)"));
|
||||||
Delay(50);
|
Delay(50);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FreeSignal(screen_signal);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gui_quit(void)
|
static void gui_quit(void)
|
||||||
|
@ -2823,7 +2827,6 @@ static void gui_quit(void)
|
||||||
LOG(("Closing screen"));
|
LOG(("Closing screen"));
|
||||||
ami_gui_close_screen(scrn, locked_screen);
|
ami_gui_close_screen(scrn, locked_screen);
|
||||||
FreeVec(nsscreentitle);
|
FreeVec(nsscreentitle);
|
||||||
FreeSignal(screen_signal);
|
|
||||||
|
|
||||||
LOG(("Freeing menu items"));
|
LOG(("Freeing menu items"));
|
||||||
ami_context_menu_free();
|
ami_context_menu_free();
|
||||||
|
|
Loading…
Reference in New Issue