diff --git a/src/modules/wl_x11/e_mod_main.c b/src/modules/wl_x11/e_mod_main.c index e9331efb4..e8a06a5c2 100644 --- a/src/modules/wl_x11/e_mod_main.c +++ b/src/modules/wl_x11/e_mod_main.c @@ -5,8 +5,11 @@ static Eina_Bool _output_init(void); static void _output_shutdown(E_Output_X11 *output); static int _output_cb_frame(void *data); +static void _output_cb_repaint_start(E_Output *output); +static void _output_cb_repaint(E_Output *output, E_Region *damages); static void _output_cb_destroy(E_Output *output); static Eina_Bool _output_cb_window_destroy(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); +static void _comp_cb_attach(E_Surface *es, struct wl_buffer *buffer); /* local variables */ static E_Compositor_X11 *_e_x11_comp; @@ -41,6 +44,9 @@ e_modapi_init(E_Module *m) goto comp_err; } + /* set the compositor attach function */ + _e_x11_comp->base.attach = _comp_cb_attach; + /* try to initialize output */ if (!_output_init()) { @@ -104,6 +110,7 @@ _output_init(void) { E_Output_X11 *output; struct wl_event_loop *loop; + unsigned int mask; /* try to allocate space for our output structure */ if (!(output = E_NEW(E_Output_X11, 1))) @@ -149,11 +156,25 @@ _output_init(void) /* show the window */ ecore_x_window_show(output->win); + /* output->pmap = */ + /* ecore_x_pixmap_new(output->win, output->mode.w, output->mode.h, */ + /* ecore_x_window_depth_get(output->win)); */ + + /* output->gc = */ + /* ecore_x_gc_new(output->pmap, (ECORE_X_GC_VALUE_MASK_PLANE_MASK | */ + /* ECORE_X_GC_VALUE_MASK_FOREGROUND), &mask); */ + + /* ecore_x_window_pixmap_set(output->win, output->pmap); */ + output->base.current = &output->mode; output->base.original = output->base.current; output->base.make = "e_wayland"; output->base.model = "none"; output->base.cb_destroy = _output_cb_destroy; + output->base.cb_repaint_start = _output_cb_repaint_start; + + /* FIXME: Change this based on software/gl */ + output->base.cb_repaint = _output_cb_repaint; /* initialize base output */ e_output_init(&output->base, &_e_x11_comp->base, 0, 0, @@ -186,10 +207,25 @@ _output_cb_frame(void *data) E_Output_X11 *output; if (!(output = data)) return 1; - /* TODO: start repaint loop */ + + /* start the repaint loop */ + _output_cb_repaint_start(output); + return 1; } +static void +_output_cb_repaint_start(E_Output *output) +{ + /* TODO */ +} + +static void +_output_cb_repaint(E_Output *output, E_Region *damages) +{ + /* TODO */ +} + static void _output_cb_destroy(E_Output *output) { @@ -200,6 +236,12 @@ _output_cb_destroy(E_Output *output) /* remove the frame timer */ wl_event_source_remove(xout->frame_timer); + /* destroy the pixmap */ + if (xout->pmap) ecore_x_pixmap_free(xout->pmap); + + /* destroy the gc */ + if (xout->gc) ecore_x_gc_free(xout->gc); + /* destroy the window */ if (xout->win) ecore_x_window_free(xout->win); @@ -234,3 +276,9 @@ _output_cb_window_destroy(void *data EINA_UNUSED, int type EINA_UNUSED, void *ev return ECORE_CALLBACK_PASS_ON; } + +static void +_comp_cb_attach(E_Surface *es, struct wl_buffer *buffer) +{ + printf("Wl_X11 Attach: %p\n", es); +} diff --git a/src/modules/wl_x11/e_mod_main.h b/src/modules/wl_x11/e_mod_main.h index 51c287643..9195e9aa7 100644 --- a/src/modules/wl_x11/e_mod_main.h +++ b/src/modules/wl_x11/e_mod_main.h @@ -19,6 +19,8 @@ struct _E_Output_X11 E_Output_Mode mode; Ecore_X_Window win; + Ecore_X_Pixmap pmap; + Ecore_X_GC gc; struct wl_event_source *frame_timer; };