summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Sanders <vince@netsurf-browser.org>2010-04-28 23:29:12 +0000
committerVincent Sanders <vince@netsurf-browser.org>2010-04-28 23:29:12 +0000
commit0d3601a7ce264b4b011e8f7149ee06b6f8da7816 (patch)
treec2e62bcea35732ea1b68b2ea832ccb6ea6de7bd6
parent2fd1476f8c99c4d4f6eb114cc7b5f8ac9ab54be4 (diff)
downloadnetsurf-0d3601a7ce264b4b011e8f7149ee06b6f8da7816.tar.gz
netsurf-0d3601a7ce264b4b011e8f7149ee06b6f8da7816.tar.bz2
fix pending redraw discovery
svn path=/trunk/netsurf/; revision=10515
-rw-r--r--framebuffer/fbtk.c17
-rw-r--r--framebuffer/fbtk.h2
-rw-r--r--framebuffer/gui.c6
-rw-r--r--framebuffer/schedule.c6
4 files changed, 21 insertions, 10 deletions
diff --git a/framebuffer/fbtk.c b/framebuffer/fbtk.c
index 6334bedd5..450e7fdc1 100644
--- a/framebuffer/fbtk.c
+++ b/framebuffer/fbtk.c
@@ -154,20 +154,20 @@ get_root_widget(fbtk_widget_t *widget)
void
fbtk_request_redraw(fbtk_widget_t *widget)
{
- widget->redraw_required = 1;
+ widget->redraw_required = true;
if (widget->type == FB_WIDGET_TYPE_WINDOW) {
fbtk_widget_list_t *lent = widget->u.window.widgets;
while (lent != NULL) {
- lent->widget->redraw_required = 1;
+ lent->widget->redraw_required = true;
lent = lent->next;
}
}
while (widget->parent != NULL) {
widget = widget->parent;
- widget->redraw_required = 1;
+ widget->redraw_required = true;
}
}
@@ -760,6 +760,17 @@ fbtk_move_pointer(fbtk_widget_t *widget, int x, int y, bool relative)
}
+bool
+fbtk_redraw_pending(fbtk_widget_t *widget)
+{
+ fbtk_widget_t *root;
+
+ /* ensure we have the root widget */
+ root = get_root_widget(widget);
+
+ return root->redraw_required;
+}
+
int
fbtk_redraw(fbtk_widget_t *widget)
{
diff --git a/framebuffer/fbtk.h b/framebuffer/fbtk.h
index a3acc08b6..e1f117e0b 100644
--- a/framebuffer/fbtk.h
+++ b/framebuffer/fbtk.h
@@ -241,6 +241,8 @@ void fbtk_request_redraw(fbtk_widget_t *widget);
*/
int fbtk_redraw(fbtk_widget_t *widget);
+bool fbtk_redraw_pending(fbtk_widget_t *widget);
+
int fbtk_count_children(fbtk_widget_t *widget);
bool fbtk_get_bbox(fbtk_widget_t *widget, struct nsfb_bbox_s *bbox);
diff --git a/framebuffer/gui.c b/framebuffer/gui.c
index 2689ffd8b..287652d6e 100644
--- a/framebuffer/gui.c
+++ b/framebuffer/gui.c
@@ -69,8 +69,6 @@ struct gui_window *input_window = NULL;
struct gui_window *search_current_window;
struct gui_window *window_list = NULL;
-bool redraws_pending = false;
-
/* private data for browser user widget */
struct browser_widget_s {
struct browser_window *bw; /**< The browser window connected to this gui window */
@@ -472,7 +470,7 @@ void gui_multitask(void)
void gui_poll(bool active)
{
nsfb_event_t event;
- int timeout;
+ int timeout; /* timeout in miliseconds */
/* run the scheduler and discover how long to wait for the next event */
timeout = schedule_run();
@@ -482,7 +480,7 @@ void gui_poll(bool active)
timeout = 0;
/* if redraws are pending do not wait for event, return immediately */
- if (redraws_pending)
+ if (fbtk_redraw_pending(fbtk))
timeout = 0;
if (fbtk_event(fbtk, &event, timeout)) {
diff --git a/framebuffer/schedule.c b/framebuffer/schedule.c
index 150ac037b..7da0c7aec 100644
--- a/framebuffer/schedule.c
+++ b/framebuffer/schedule.c
@@ -191,9 +191,9 @@ schedule_run(void)
/* make rettime relative to now */
timersub(&nexttime, &tv, &rettime);
- LOG(("returning time to next event as %ldcs",(rettime.tv_sec * 100) + (rettime.tv_usec / 10000)));
- /* return next event time in cs */
- return (rettime.tv_sec * 100) + (rettime.tv_usec / 10000);
+ /*LOG(("returning time to next event as %ldms",(rettime.tv_sec * 1000) + (rettime.tv_usec / 1000))); */
+ /* return next event time in milliseconds (24days max wait) */
+ return (rettime.tv_sec * 1000) + (rettime.tv_usec / 1000);
}
void list_schedule(void)