Warning: this removes functionality (#4)

In preparation for split xwm as a client, we want to get rid of all
interactions of the compositor event loop here. Decorations and configure
mechanisms will be overhauled later anyway.

Signed-off-by: Tiago Vignatti <tiago.vigna...@intel.com>
---
 src/xwayland/window-manager.c |   76 ++++++++++++-----------------------------
 1 file changed, 22 insertions(+), 54 deletions(-)

diff --git a/src/xwayland/window-manager.c b/src/xwayland/window-manager.c
index 16d592a..806cf8d 100644
--- a/src/xwayland/window-manager.c
+++ b/src/xwayland/window-manager.c
@@ -100,8 +100,6 @@ struct weston_wm_window {
        struct weston_surface *surface;
        struct shell_surface *shsurf;
        struct wl_listener surface_destroy_listener;
-       struct wl_event_source *repaint_source;
-       struct wl_event_source *configure_source;
        int properties_dirty;
        int pid;
        char *machine;
@@ -120,7 +118,7 @@ static struct weston_wm_window *
 get_wm_window(struct weston_surface *surface);
 
 static void
-weston_wm_window_schedule_repaint(struct weston_wm_window *window);
+weston_wm_window_draw_decoration(struct weston_wm_window *window);
 
 const char *
 get_atom_name(xcb_connection_t *c, xcb_atom_t atom)
@@ -459,7 +457,7 @@ weston_wm_handle_configure_request(struct weston_wm *wm, 
xcb_generic_event_t *ev
        mask = XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT;
        xcb_configure_window(wm->conn, window->frame_id, mask, values);
 
-       weston_wm_window_schedule_repaint(window);
+       weston_wm_window_draw_decoration(window);
 }
 
 static void
@@ -537,10 +535,10 @@ weston_wm_window_activate(struct wl_listener *listener, 
void *data)
        }
 
        if (wm->focus_window)
-               weston_wm_window_schedule_repaint(wm->focus_window);
+               weston_wm_window_draw_decoration(wm->focus_window);
        wm->focus_window = window;
        if (wm->focus_window)
-               weston_wm_window_schedule_repaint(wm->focus_window);
+               weston_wm_window_draw_decoration(wm->focus_window);
 }
 
 static int
@@ -680,8 +678,6 @@ weston_wm_handle_unmap_notify(struct weston_wm *wm, 
xcb_generic_event_t *event)
                return;
 
        window = hash_table_lookup(wm->window_hash, unmap_notify->window);
-       if (window->repaint_source)
-               wl_event_source_remove(window->repaint_source);
        if (window->cairo_surface)
                cairo_surface_destroy(window->cairo_surface);
 
@@ -701,9 +697,8 @@ weston_wm_handle_unmap_notify(struct weston_wm *wm, 
xcb_generic_event_t *event)
 }
 
 static void
-weston_wm_window_draw_decoration(void *data)
+weston_wm_window_draw_decoration(struct weston_wm_window *window)
 {
-       struct weston_wm_window *window = data;
        struct weston_wm *wm = window->wm;
        struct theme *t = wm->theme;
        cairo_t *cr;
@@ -711,9 +706,19 @@ weston_wm_window_draw_decoration(void *data)
        const char *title;
        uint32_t flags = 0;
 
-       weston_wm_window_read_properties(window);
+       if (window->frame_id == XCB_WINDOW_NONE) {
+#if 0
+               if (window->surface != NULL) {
+                       window->surface->opaque_rect[0] = 0.0;
+                       window->surface->opaque_rect[1] = 1.0;
+                       window->surface->opaque_rect[2] = 0.0;
+                       window->surface->opaque_rect[3] = 1.0;
+               }
+#endif
+               return;
+       }
 
-       window->repaint_source = NULL;
+       weston_wm_window_read_properties(window);
 
        weston_wm_window_get_frame_size(window, &width, &height);
        weston_wm_window_get_child_position(window, &x, &y);
@@ -767,34 +772,6 @@ weston_wm_window_draw_decoration(void *data)
 }
 
 static void
-weston_wm_window_schedule_repaint(struct weston_wm_window *window)
-{
-       struct weston_wm *wm = window->wm;
-       int width, height;
-
-       if (window->frame_id == XCB_WINDOW_NONE) {
-#if 0
-               if (window->surface != NULL) {
-                       weston_wm_window_get_frame_size(window, &width, 
&height);
-                       pixman_region32_fini(&window->surface->pending.opaque);
-                       
pixman_region32_init_rect(&window->surface->pending.opaque, 0, 0,
-                                                 width, height);
-                       window->surface->geometry.dirty = 1;
-               }
-#endif
-               return;
-       }
-
-       if (window->repaint_source)
-               return;
-
-       window->repaint_source =
-               wl_event_loop_add_idle(wm->server->loop,
-                                      weston_wm_window_draw_decoration,
-                                      window);
-}
-
-static void
 weston_wm_handle_property_notify(struct weston_wm *wm, xcb_generic_event_t 
*event)
 {
        xcb_property_notify_event_t *property_notify =
@@ -815,7 +792,7 @@ weston_wm_handle_property_notify(struct weston_wm *wm, 
xcb_generic_event_t *even
 
        if (property_notify->atom == wm->atom.net_wm_name ||
            property_notify->atom == XCB_ATOM_WM_NAME)
-               weston_wm_window_schedule_repaint(window);
+               weston_wm_window_draw_decoration(window);
 }
 
 static void
@@ -1552,9 +1529,8 @@ get_wm_window(struct weston_surface *surface)
 }
 
 static void
-weston_wm_window_configure(void *data)
+weston_wm_window_configure(struct weston_wm_window *window)
 {
-       struct weston_wm_window *window = data;
        struct weston_wm *wm = window->wm;
        uint32_t values[2];
        int width, height;
@@ -1576,9 +1552,7 @@ weston_wm_window_configure(void *data)
                             XCB_CONFIG_WINDOW_HEIGHT,
                             values);
 
-       window->configure_source = NULL;
-
-       weston_wm_window_schedule_repaint(window);
+       weston_wm_window_draw_decoration(window);
 }
 
 static void
@@ -1586,7 +1560,6 @@ send_configure(struct weston_surface *surface,
               uint32_t edges, int32_t width, int32_t height)
 {
        struct weston_wm_window *window = get_wm_window(surface);
-       struct weston_wm *wm = window->wm;
        struct theme *t = window->wm->theme;
 
        if (window->decorate) {
@@ -1598,12 +1571,7 @@ send_configure(struct weston_surface *surface,
                window->height = height - 2 * t->margin;
        }
 
-       if (window->configure_source)
-               return;
-
-       window->configure_source =
-               wl_event_loop_add_idle(wm->server->loop,
-                                      weston_wm_window_configure, window);
+       weston_wm_window_configure(window);
 }
 
 static const struct weston_shell_client shell_client = {
@@ -1639,7 +1607,7 @@ xserver_set_window_id(struct wl_client *client, struct 
wl_resource *resource,
        wl_signal_add(&surface->resource.destroy_signal,
                      &window->surface_destroy_listener);
 
-       weston_wm_window_schedule_repaint(window);
+       weston_wm_window_draw_decoration(window);
 
        window->shsurf =
                shell_interface->create_shell_surface(shell_interface->shell,
-- 
1.7.9.5

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to