From 518b6dc1dd16d0a334e9364b7fdfb8133f130d35 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 27 Mar 2009 09:37:17 +0000 Subject: [PATCH] wait for first expose in x11 engines before beginning to avoid wm delay. SVN revision: 39751 --- src/bin/engine_gl_x11.c | 4 ++++ src/bin/engine_software_16_x11.c | 4 ++++ src/bin/engine_software_x11.c | 4 ++++ src/bin/engine_software_xcb.c | 10 +++++++--- src/bin/engine_xrender_x11.c | 4 ++++ src/bin/engine_xrender_xcb.c | 8 ++++++-- src/bin/ui.c | 8 ++++---- 7 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/bin/engine_gl_x11.c b/src/bin/engine_gl_x11.c index 150ef65..2a0f393 100644 --- a/src/bin/engine_gl_x11.c +++ b/src/bin/engine_gl_x11.c @@ -6,6 +6,7 @@ static Display *disp = NULL; static Window win = 0; +static int first_expose = 0; int engine_gl_x11_args(int argc, char **argv) @@ -76,6 +77,8 @@ engine_gl_x11_args(int argc, char **argv) XSetWMNormalHints(disp, win, &szhints); XMapWindow(disp, win); XSync(disp, False); + while (!first_expose) + engine_gl_x11_loop(); return 1; } @@ -112,6 +115,7 @@ engine_gl_x11_loop(void) evas_event_feed_mouse_move(evas, ev.xmotion.x, ev.xmotion.y, 0, NULL); break; case Expose: + first_expose = 1; evas_damage_rectangle_add(evas, ev.xexpose.x, ev.xexpose.y, diff --git a/src/bin/engine_software_16_x11.c b/src/bin/engine_software_16_x11.c index a3db30e..2dd03ac 100644 --- a/src/bin/engine_software_16_x11.c +++ b/src/bin/engine_software_16_x11.c @@ -6,6 +6,7 @@ static Display *disp = NULL; static Window win = 0; +static first_expose = 0; int engine_software_16_x11_args(int argc, char **argv) @@ -73,6 +74,8 @@ engine_software_16_x11_args(int argc, char **argv) XSetWMNormalHints(disp, win, &szhints); XMapWindow(disp, win); XSync(disp, False); + while (!first_expose) + engine_software_16_x11_loop(); return 1; } @@ -109,6 +112,7 @@ engine_software_16_x11_loop(void) evas_event_feed_mouse_move(evas, ev.xmotion.x, ev.xmotion.y, 0, NULL); break; case Expose: + first_expose = 1; evas_damage_rectangle_add(evas, ev.xexpose.x, ev.xexpose.y, diff --git a/src/bin/engine_software_x11.c b/src/bin/engine_software_x11.c index 25fb0c5..e01bf54 100644 --- a/src/bin/engine_software_x11.c +++ b/src/bin/engine_software_x11.c @@ -6,6 +6,7 @@ static Display *disp = NULL; static Window win = 0; +static int first_expose = 0; int engine_software_x11_args(int argc, char **argv) @@ -80,6 +81,8 @@ engine_software_x11_args(int argc, char **argv) XSetWMNormalHints(disp, win, &szhints); XMapWindow(disp, win); XSync(disp, False); + while (!first_expose) + engine_software_x11_loop(); return 1; } @@ -116,6 +119,7 @@ engine_software_x11_loop(void) evas_event_feed_mouse_move(evas, ev.xmotion.x, ev.xmotion.y, 0, NULL); break; case Expose: + first_expose = 1; evas_damage_rectangle_add(evas, ev.xexpose.x, ev.xexpose.y, diff --git a/src/bin/engine_software_xcb.c b/src/bin/engine_software_xcb.c index c39a501..b79ddb3 100644 --- a/src/bin/engine_software_xcb.c +++ b/src/bin/engine_software_xcb.c @@ -34,8 +34,9 @@ struct xcb_size_hints_t { static xcb_connection_t *conn = NULL; -static xcb_screen_t *screen = NULL; -static xcb_window_t win = 0; +static xcb_screen_t *screen = NULL; +static xcb_window_t win = 0; +static int first_expose = 0; int engine_software_xcb_args(int argc, char **argv) @@ -130,7 +131,7 @@ engine_software_xcb_args(int argc, char **argv) einfo->info.drawable = win; xcb_map_window(conn, win); - + if (!evas_engine_info_set(evas, (Evas_Engine_Info *) einfo)) { printf("Evas can not setup the informations of the Software XCB Engine\n"); @@ -202,6 +203,8 @@ engine_software_xcb_args(int argc, char **argv) free(xcb_get_input_focus_reply(conn, xcb_get_input_focus_unchecked(conn), NULL)); + while (!first_expose) + engine_software_xcb_loop(); return 1; } @@ -252,6 +255,7 @@ engine_software_xcb_loop(void) e = (xcb_expose_event_t *)ev; + first_expose = 1; evas_damage_rectangle_add(evas, e->x, e->y, diff --git a/src/bin/engine_xrender_x11.c b/src/bin/engine_xrender_x11.c index 4e1a3f8..6585756 100644 --- a/src/bin/engine_xrender_x11.c +++ b/src/bin/engine_xrender_x11.c @@ -6,6 +6,7 @@ static Display *disp = NULL; static Window win = 0; +static int first_expose = 0; int engine_xrender_x11_args(int argc, char **argv) @@ -76,6 +77,8 @@ engine_xrender_x11_args(int argc, char **argv) XSetWMNormalHints(disp, win, &szhints); XMapWindow(disp, win); XSync(disp, False); + while (!first_expose) + engine_xrender_x11_loop(); return 1; } @@ -112,6 +115,7 @@ engine_xrender_x11_loop(void) evas_event_feed_mouse_move(evas, ev.xmotion.x, ev.xmotion.y, 0, NULL); break; case Expose: + first_expose = 1; evas_damage_rectangle_add(evas, ev.xexpose.x, ev.xexpose.y, diff --git a/src/bin/engine_xrender_xcb.c b/src/bin/engine_xrender_xcb.c index c636801..72232e1 100644 --- a/src/bin/engine_xrender_xcb.c +++ b/src/bin/engine_xrender_xcb.c @@ -34,8 +34,9 @@ struct xcb_size_hints_t { static xcb_connection_t *conn = NULL; -static xcb_screen_t *screen = NULL; -static xcb_window_t win = 0; +static xcb_screen_t *screen = NULL; +static xcb_window_t win = 0; +static int first_expose = 0; static xcb_visualtype_t * _engine_xrender_visual_get(xcb_connection_t *conn, xcb_screen_t *screen) @@ -217,6 +218,8 @@ engine_xrender_xcb_args(int argc, char **argv) free(xcb_get_input_focus_reply(conn, xcb_get_input_focus_unchecked(conn), NULL)); + while (!first_expose) + engine_xrender_xcb_loop(); return 1; } @@ -267,6 +270,7 @@ engine_xrender_xcb_loop(void) e = (xcb_expose_event_t *)ev; + first_expose = 1; evas_damage_rectangle_add(evas, e->x, e->y, diff --git a/src/bin/ui.c b/src/bin/ui.c index 97aa8a9..ee2187a 100644 --- a/src/bin/ui.c +++ b/src/bin/ui.c @@ -91,8 +91,8 @@ _ui_all(void) if (mi->func) mi->func(); while (p_fps == 0.0) { - ui_loop(); engine_loop(); + ui_loop(); evas_render(evas); } /* This give time to delete the objects of the previous test and make @@ -463,7 +463,7 @@ ui_args(int argc, char **argv) if (!strcmp(argv[i], "-a")) { run_all = 1; - exit_after_test = 1; + exit_after_test = 1; } else if ((!strcmp(argv[i], "-t")) && (i < (argc - 1))) { @@ -559,7 +559,6 @@ ui_loop(void) evas_object_color_set(o, a, a, a, a); evas_object_show(o); - if (i == menu_sel) { a = menu_anim - (double)i; @@ -619,7 +618,8 @@ ui_loop(void) void ui_menu(void) { - evas_object_text_text_set(o_byline, "LEFT/RIGHT - select, ENTER - select, ESCAPE - exit."); + evas_object_text_text_set + (o_byline, "LEFT/RIGHT - select, ENTER - select, ESCAPE - exit."); menu_active = 1; key_func = NULL; loop_func = NULL;