From: <mar...@us...> - 2010-04-30 19:36:23
|
Revision: 3212 http://navit.svn.sourceforge.net/navit/?rev=3212&view=rev Author: martin-s Date: 2010-04-30 19:36:17 +0000 (Fri, 30 Apr 2010) Log Message: ----------- Fix:gui_internal:Prevent crash after terminating event loop Modified Paths: -------------- trunk/navit/navit/event.c trunk/navit/navit/event.h trunk/navit/navit/gui/internal/gui_internal.c Modified: trunk/navit/navit/event.c =================================================================== --- trunk/navit/navit/event.c 2010-04-30 05:47:25 UTC (rev 3211) +++ trunk/navit/navit/event.c 2010-04-30 19:36:17 UTC (rev 3212) @@ -27,6 +27,8 @@ static const char *e_requestor; static const char *e_system; +static int has_quit; + void event_main_loop_run(void) { if (! event_methods.main_loop_run) { @@ -40,8 +42,15 @@ { if (event_methods.main_loop_quit) event_methods.main_loop_quit(); + has_quit=1; } +int +event_main_loop_has_quit(void) +{ + return has_quit; +} + struct event_watch * event_add_watch(void *fd, enum event_watch_cond cond, struct callback *cb) { Modified: trunk/navit/navit/event.h =================================================================== --- trunk/navit/navit/event.h 2010-04-30 05:47:25 UTC (rev 3211) +++ trunk/navit/navit/event.h 2010-04-30 19:36:17 UTC (rev 3212) @@ -48,16 +48,23 @@ /* prototypes */ +enum event_watch_cond; +struct callback; +struct callback_list; +struct event_idle; +struct event_timeout; +struct event_watch; void event_main_loop_run(void); void event_main_loop_quit(void); +int event_main_loop_has_quit(void); struct event_watch *event_add_watch(void *fd, enum event_watch_cond cond, struct callback *cb); void event_remove_watch(struct event_watch *ev); struct event_timeout *event_add_timeout(int timeout, int multi, struct callback *cb); void event_remove_timeout(struct event_timeout *ev); struct event_idle *event_add_idle(int priority, struct callback *cb); void event_remove_idle(struct event_idle *ev); +void event_call_callback(struct callback_list *cb); int event_request_system(const char *system, const char *requestor); -void event_call_callback(struct callback_list *cb); /* end of prototypes */ #ifdef __cplusplus } Modified: trunk/navit/navit/gui/internal/gui_internal.c =================================================================== --- trunk/navit/navit/gui/internal/gui_internal.c 2010-04-30 05:47:25 UTC (rev 3211) +++ trunk/navit/navit/gui/internal/gui_internal.c 2010-04-30 19:36:17 UTC (rev 3212) @@ -4643,9 +4643,11 @@ this->current.y=-1; graphics_draw_mode(gra, draw_mode_begin); gui_internal_call_highlighted(this); - gui_internal_highlight(this); - graphics_draw_mode(gra, draw_mode_end); - gui_internal_check_exit(this); + if (!event_main_loop_has_quit()) { + gui_internal_highlight(this); + graphics_draw_mode(gra, draw_mode_end); + gui_internal_check_exit(this); + } } } @@ -4868,8 +4870,10 @@ default: gui_internal_keypress_do(this, key); } - graphics_draw_mode(this->gra, draw_mode_end); - gui_internal_check_exit(this); + if (!event_main_loop_has_quit()) { + graphics_draw_mode(this->gra, draw_mode_end); + gui_internal_check_exit(this); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |