summaryrefslogtreecommitdiff
path: root/navit
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2009-01-26 13:21:18 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2009-01-26 13:21:18 +0000
commit81270e3d9ffbcf365f1e8222922f78c7a19ba580 (patch)
treeead89c837a3fdefdb2279a1f4a198b2e2d273a14 /navit
parent809a881322185383d6479e682464767674069c0f (diff)
downloadnavit-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.c26
-rw-r--r--navit/graphics.h1
-rw-r--r--navit/navit.c2
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) {