summaryrefslogtreecommitdiff
path: root/amiga/gui.c
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2011-09-02 17:31:47 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2011-09-02 17:31:47 +0000
commit25fea2721df52567999bd9aaf3dd5046c350450e (patch)
treee2755845cb552b687456b0337761eeb29112830b /amiga/gui.c
parenta7d4f08b77245cc66ace55e60032b194e1c9db13 (diff)
downloadnetsurf-25fea2721df52567999bd9aaf3dd5046c350450e.tar.gz
netsurf-25fea2721df52567999bd9aaf3dd5046c350450e.tar.bz2
Avoid calling AllocSignal() until the last minute, as it causes PM_OPEN to initiate
an Intuition or Input deadlock. Re-enable context menus as they are now safe. Remove sticky context menus option as this can be set in GUI prefs as a global option. svn path=/trunk/netsurf/; revision=12698
Diffstat (limited to 'amiga/gui.c')
-rwxr-xr-xamiga/gui.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/amiga/gui.c b/amiga/gui.c
index ad6d419a5..e767b415f 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -147,7 +147,6 @@ Class *urlStringClass;
BOOL locked_screen = FALSE;
BOOL screen_closed = FALSE;
-ULONG screen_signal = -1;
struct MsgPort *applibport = NULL;
ULONG applibsig = 0;
@@ -308,8 +307,6 @@ void ami_open_resources(void)
ASLFR_RejectIcons,TRUE,
ASLFR_InitialDrawer,option_download_dir,
TAG_DONE);
-
- screen_signal = AllocSignal(-1);
}
void ami_set_options(void)
@@ -540,7 +537,6 @@ void ami_openscreen(void)
SA_Type, PUBLICSCREEN,
SA_PubName, "NetSurf",
SA_LikeWorkbench, TRUE,
- SA_PubSig, screen_signal,
TAG_DONE);
if(scrn)
@@ -1201,13 +1197,7 @@ void ami_handle_msg(void)
switch(code)
{
case MENUDOWN:
- if(!option_sticky_context_menu)
- ami_context_menu_show(gwin,x,y);
- break;
-
- case MENUUP:
- if(option_sticky_context_menu)
- ami_context_menu_show(gwin,x,y);
+ ami_context_menu_show(gwin,x,y);
break;
case SELECTUP:
@@ -2138,14 +2128,27 @@ void ami_quit_netsurf(void)
void ami_gui_close_screen(struct Screen *scrn)
{
+ ULONG screen_signal = AllocSignal(-1);
ULONG scrnsig = 1 << screen_signal;
- if(scrn == NULL) return;
- if(CloseScreen(scrn)) return;
+ SetScreenAttr(scrn, SA_PubSig, screen_signal, sizeof(ULONG));
+
+ if(scrn == NULL)
+ {
+ FreeSignal(screen_signal);
+ return;
+ }
+
+ if(CloseScreen(scrn))
+ {
+ FreeSignal(screen_signal);
+ return;
+ }
LOG(("Waiting for visitor windows to close..."));
Wait(scrnsig);
CloseScreen(scrn);
+ FreeSignal(screen_signal);
}
void gui_quit(void)
@@ -2173,7 +2176,6 @@ void gui_quit(void)
/* If it is our public screen, close it or wait until the visitor windows leave */
if(locked_screen == FALSE) ami_gui_close_screen(scrn);
- FreeSignal(screen_signal);
FreeVec(nsscreentitle);