summaryrefslogtreecommitdiff
path: root/amiga
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2014-02-10 18:13:28 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2014-02-10 18:13:28 +0000
commit4aa59f538276ce9413121d6d2e6eeed8ae5c0900 (patch)
treeb26a8bd686d68081c7542acb289fd793b0012b56 /amiga
parenta23b1f34d352fc216b2677a7d3d06baa8bf57595 (diff)
downloadnetsurf-4aa59f538276ce9413121d6d2e6eeed8ae5c0900.tar.gz
netsurf-4aa59f538276ce9413121d6d2e6eeed8ae5c0900.tar.bz2
SA_PubSig needs setting at screen open time.
Potentially this fixes a screen closure problem.
Diffstat (limited to 'amiga')
-rw-r--r--amiga/gui.c43
1 files changed, 24 insertions, 19 deletions
diff --git a/amiga/gui.c b/amiga/gui.c
index 137e1593b..d3b75744b 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -163,6 +163,7 @@ Class *urlStringClass;
BOOL locked_screen = FALSE;
BOOL screen_closed = FALSE;
+ULONG screen_signal = -1;
struct MsgPort *applibport = NULL;
ULONG applibsig = 0;
@@ -763,11 +764,15 @@ void ami_openscreen(void)
}
}
+ screen_signal = AllocSignal(-1);
+ LOG(("Screen signal %d", screen_signal));
scrn = OpenScreenTags(NULL,
SA_DisplayID, id,
SA_Title, nsscreentitle,
SA_Type, PUBLICSCREEN,
SA_PubName, "NetSurf",
+ SA_PubSig, screen_signal,
+ SA_PubTask, FindTask(0),
SA_LikeWorkbench, TRUE,
SA_Compositing, compositing,
TAG_DONE);
@@ -2686,20 +2691,6 @@ void ami_switch_tab(struct gui_window_2 *gwin,bool redraw)
}
}
-void ami_try_quit(void)
-{
- if(nsoption_bool(close_no_quit) == false)
- {
- netsurf_quit = true;
- return;
- }
- else
- {
- if(locked_screen == FALSE)
- if(CloseScreen(scrn)) scrn = NULL;
- }
-}
-
void ami_quit_netsurf(void)
{
struct nsObject *node;
@@ -2767,16 +2758,16 @@ void ami_quit_netsurf_delayed(void)
void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
{
- ULONG screen_signal = -1;
-
if(scrn == NULL) return;
- if(CloseScreen(scrn)) return;
+ if(CloseScreen(scrn) == TRUE) {
+ if(locked_screen == FALSE) scrn = NULL;
+ return;
+ }
if(locked_screen == TRUE) return;
/* If this is our own screen, wait for visitor windows to close */
- if((screen_signal = AllocSignal(-1)) != -1) {
+ if(screen_signal != -1) {
ULONG scrnsig = 1 << screen_signal;
- SetScreenAttr(scrn, SA_PubSig, (APTR)screen_signal, sizeof(ULONG));
LOG(("Waiting for visitor windows to close... (signal)"));
Wait(scrnsig);
}
@@ -2787,6 +2778,20 @@ void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
}
FreeSignal(screen_signal);
+ scrn = NULL;
+}
+
+void ami_try_quit(void)
+{
+ if(nsoption_bool(close_no_quit) == false)
+ {
+ netsurf_quit = true;
+ return;
+ }
+ else
+ {
+ ami_gui_close_screen(scrn, locked_screen);
+ }
}
static void gui_quit(void)