diff options
author | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2009-01-26 13:21:18 +0000 |
---|---|---|
committer | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2009-01-26 13:21:18 +0000 |
commit | 81270e3d9ffbcf365f1e8222922f78c7a19ba580 (patch) | |
tree | ead89c837a3fdefdb2279a1f4a198b2e2d273a14 /navit | |
parent | 809a881322185383d6479e682464767674069c0f (diff) | |
download | navit-81270e3d9ffbcf365f1e8222922f78c7a19ba580.tar.gz |
Fix:Core:Avoid drawing the map after gui internal has been opened
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@1974 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit')
-rw-r--r-- | navit/graphics.c | 26 | ||||
-rw-r--r-- | navit/graphics.h | 1 | ||||
-rw-r--r-- | navit/navit.c | 2 |
3 files changed, 23 insertions, 6 deletions
diff --git a/navit/graphics.c b/navit/graphics.c index 284bf6fc4..68af3f5d2 100644 --- a/navit/graphics.c +++ b/navit/graphics.c @@ -48,6 +48,7 @@ #include "util.h" #include "callback.h" #include "file.h" +#include "event.h" static char *navit_sharedir; @@ -1593,9 +1594,8 @@ do_draw(struct displaylist *displaylist, int cancel) struct attr attr; while (!cancel) { - if (!displaylist->msh) { + if (!displaylist->msh) displaylist->msh=mapset_open(displaylist->ms); - } if (!displaylist->m) { displaylist->m=mapset_next(displaylist->msh, 1); if (!displaylist->m) { @@ -1637,13 +1637,15 @@ do_draw(struct displaylist *displaylist, int cancel) event_remove_idle(displaylist->idle_ev); displaylist->idle_ev=NULL; displaylist->busy=0; - graphics_displaylist_draw(displaylist->dc.gra, displaylist, displaylist->dc.trans, displaylist->layout, 1); + if (! cancel) + graphics_displaylist_draw(displaylist->dc.gra, displaylist, displaylist->dc.trans, displaylist->layout, 1); map_rect_destroy(displaylist->mr); map_selection_destroy(displaylist->sel); mapset_close(displaylist->msh); displaylist->mr=NULL; displaylist->sel=NULL; displaylist->m=NULL; + displaylist->msh=NULL; callback_call_1(displaylist->cb, cancel); } @@ -1687,8 +1689,11 @@ void graphics_draw(struct graphics *gra, struct displaylist *displaylist, GList int order=transform_get_order(trans); dbg(1,"enter"); - if (async == 1 && displaylist->busy) - return; + if (displaylist->busy) { + if (async == 1) + return; + do_draw(displaylist, 1); + } xdisplay_free(displaylist->dl); dbg(1,"order=%d\n", order); @@ -1704,12 +1709,21 @@ void graphics_draw(struct graphics *gra, struct displaylist *displaylist, GList displaylist->layout=l; if (async) { if (! displaylist->idle_cb) - displaylist->idle_cb=callback_new_2(do_draw, displaylist, 0); + displaylist->idle_cb=callback_new_2(callback_cast(do_draw), displaylist, 0); displaylist->idle_ev=event_add_idle(50, displaylist->idle_cb); } else do_draw(displaylist, 0); } +int +graphics_draw_cancel(struct graphics *gra, struct displaylist *displaylist) +{ + if (!displaylist->busy) + return 0; + do_draw(displaylist, 1); + return 1; +} + /** * FIXME * @param <> diff --git a/navit/graphics.h b/navit/graphics.h index 5994072bd..8e245b094 100644 --- a/navit/graphics.h +++ b/navit/graphics.h @@ -159,6 +159,7 @@ void graphics_displaylist_draw(struct graphics *gra, struct displaylist *display void graphics_displaylist_move(struct displaylist *displaylist, int dx, int dy); void graphics_draw_itemgra(struct graphics *gra, struct itemgra *itm, struct transformation *t); void graphics_draw(struct graphics *gra, struct displaylist *displaylist, GList *mapsets, struct transformation *trans, struct layout *l, int async, struct callback *cb); +int graphics_draw_cancel(struct graphics *gra, struct displaylist *displaylist); struct displaylist_handle *graphics_displaylist_open(struct displaylist *displaylist); struct displayitem *graphics_displaylist_next(struct displaylist_handle *dlh); void graphics_displaylist_close(struct displaylist_handle *dlh); diff --git a/navit/navit.c b/navit/navit.c index 9cd53cc60..907ad7f1a 100644 --- a/navit/navit.c +++ b/navit/navit.c @@ -1932,6 +1932,8 @@ navit_block(struct navit *this_, int block) { if (block) { this_->blocked |= 1; + if (graphics_draw_cancel(this_->gra, this_->displaylist)) + this_->blocked |= 2; return 0; } if (this_->blocked & 2) { |