diff options
Diffstat (limited to 'frontends/amiga')
-rw-r--r-- | frontends/amiga/gui.c | 84 |
1 files changed, 15 insertions, 69 deletions
diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c index a453e0810..e835e2bd6 100644 --- a/frontends/amiga/gui.c +++ b/frontends/amiga/gui.c @@ -1903,18 +1903,17 @@ static void ami_set_border_gadget_size(struct gui_window_2 *gwin) #endif } -static void ami_handle_msg(void) +static BOOL ami_handle_msg(void) { struct ami_generic_window *w = NULL; struct nsObject *node; struct nsObject *nnode; - struct gui_window_2 *gwin = NULL; + BOOL win_closed = FALSE; - if(IsMinListEmpty(window_list)) - { + if(IsMinListEmpty(window_list)) { /* no windows in list, so NetSurf should not be running */ ami_try_quit(); - return; + return FALSE; } node = (struct nsObject *)GetHead((struct List *)window_list); @@ -1923,75 +1922,20 @@ static void ami_handle_msg(void) nnode=(struct nsObject *)GetSucc((struct Node *)node); w = node->objstruct; + if(w == NULL) continue; - if(node->Type == AMINS_TVWINDOW) { - if(w->tbl->event(w)) { - ami_try_quit(); - break; - } else { - node = nnode; - continue; - } - } else if(node->Type == AMINS_FINDWINDOW) { - if(w->tbl->event(w)) { - ami_try_quit(); - break; - } else { - node = nnode; - continue; - } - } else if(node->Type == AMINS_HISTORYWINDOW) { - if(w->tbl->event(w)) { - ami_try_quit(); - break; - } else { - node = nnode; - continue; - } - } else if(node->Type == AMINS_PRINTWINDOW) { - if(w->tbl->event(w)) { - ami_try_quit(); - break; - } else { - node = nnode; - continue; - } - } else if(node->Type == AMINS_GUIOPTSWINDOW) { - if(w->tbl->event(w)) { - /* last window possibly closed, so exit with conditions ;) */ - if(scrn) ami_try_quit(); - break; - } else { - node = nnode; - continue; - } - } else if(node->Type == AMINS_DLWINDOW) { - if(w->tbl->event(w)) { - ami_try_quit(); - break; - } else { - node = nnode; - continue; - } - } else if(node->Type == AMINS_LOGINWINDOW) { - if(w->tbl->event(w)) { - ami_try_quit(); - break; + if(w->tbl->event != NULL) { + if((win_closed = w->tbl->event(w))) { + if((node->Type != AMINS_GUIOPTSWINDOW) || + ((node->Type == AMINS_GUIOPTSWINDOW) && (scrn != NULL))) { + ami_try_quit(); + break; + } } else { node = nnode; continue; } } - - /* assume this is a normal gui window for now */ - gwin = (struct gui_window_2 *)w; - if((gwin == NULL) || (gwin->objects[OID_MAIN] == NULL)) continue; - if(w->tbl->event(w)) { - break; - } else { - node = nnode; - continue; - } } while((node = nnode)); if(ami_menu_quit_selected() == true) { @@ -2001,6 +1945,8 @@ static void ami_handle_msg(void) if(ami_menu_get_check_toggled() == true) { ami_gui_menu_update_all(); } + + return win_closed; } static BOOL ami_gui_event(void *w) @@ -2846,7 +2792,7 @@ void ami_get_msg(void) } if(signal & winsignal) - ami_handle_msg(); + while(ami_handle_msg()); if(signal & appsig) ami_handle_appmsg(); |