{
}
+#define GDK_TYPE_WINDOW_IMPL_WAYLAND (_gdk_window_impl_wayland_get_type ())
+#define GDK_WINDOW_IMPL_WAYLAND(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WINDOW_IMPL_WAYLAND, GdkWindowImplWayland))
+#define GDK_WINDOW_IMPL_WAYLAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WINDOW_IMPL_WAYLAND, GdkWindowImplWaylandClass))
+#define GDK_IS_WINDOW_IMPL_WAYLAND(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WINDOW_IMPL_WAYLAND))
+#define GDK_IS_WINDOW_IMPL_WAYLAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_WINDOW_IMPL_WAYLAND))
+#define GDK_WINDOW_IMPL_WAYLAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_WINDOW_IMPL_WAYLAND, GdkWindowImplWaylandClass))
+
+typedef struct _GdkWindowImplWayland GdkWindowImplWayland;
+typedef struct _GdkWindowImplWaylandClass GdkWindowImplWaylandClass;
+
+struct _GdkWindowImplWayland
+{
+ GdkWindowImpl parent_instance;
+
+ GdkWindow *wrapper;
+
+ GdkToplevelWayland *toplevel; /* Toplevel-specific information */
+ GdkCursor *cursor;
+ GHashTable *device_cursor;
+
+ gint8 toplevel_window_type;
+
+ struct wl_surface *surface;
+ struct wl_buffer *buffer;
+ EGLImageKHR *pending_image;
+ EGLImageKHR *next_image;
+
+ cairo_surface_t *cairo_surface;
+ GLuint texture;
+ EGLImageKHR image;
+
+};
+
+struct _GdkWindowImplWaylandClass
+{
+ GdkWindowImplClass parent_class;
+};
+
G_DEFINE_TYPE (GdkWindowImplWayland, _gdk_window_impl_wayland, GDK_TYPE_WINDOW_IMPL)
static void
_gdk_window_impl_wayland_init (GdkWindowImplWayland *impl)
-{
+{
impl->toplevel_window_type = -1;
impl->device_cursor = g_hash_table_new_full (NULL, NULL, NULL,
- (GDestroyNotify) gdk_cursor_unref);
+ (GDestroyNotify) gdk_cursor_unref);
}
GdkToplevelWayland *
_gdk_wayland_window_get_toplevel (GdkWindow *window)
{
GdkWindowImplWayland *impl;
-
+
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
if (!WINDOW_IS_TOPLEVEL (window))
* cairo surface) when its size has changed.
**/
void
-_gdk_wayland_window_update_size (GdkWindowImplWayland *impl)
+_gdk_wayland_window_update_size (GdkWindow *window)
{
+ GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
GdkDisplayWayland *display_wayland =
GDK_DISPLAY_WAYLAND (gdk_window_get_display (impl->wrapper));
impl->image = NULL;
+ wl_buffer_destroy(impl->buffer);
+ impl->buffer = NULL;
+
fprintf(stderr, " - cleared image\n");
}
}
GdkWindowImplWayland *impl;
EGLint name, stride;
struct wl_visual *wl_visual;
- struct wl_buffer *buffer;
if (GDK_WINDOW_DESTROYED (window))
return;
display_wayland->export_drm_image (display_wayland->egl_display,
image, &name, NULL, &stride);
- buffer = wl_drm_create_buffer(display_wayland->drm,
- name, window->width, window->height,
- stride, wl_visual);
- wl_surface_attach (impl->surface, buffer, 0, 0);
- wl_surface_map_toplevel (impl->surface);
- wl_buffer_destroy(buffer);
+ impl->buffer = wl_drm_create_buffer(display_wayland->drm,
+ name, window->width, window->height,
+ stride, wl_visual);
+ wl_surface_attach (impl->surface, impl->buffer, 0, 0);
g_object_ref(impl);
GdkToplevelWayland *toplevel;
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
+ display = gdk_window_get_display (window);
+ display_wayland = GDK_DISPLAY_WAYLAND (display);
+
if (WINDOW_IS_TOPLEVEL (window))
{
- display = gdk_window_get_display (window);
- display_wayland = GDK_DISPLAY_WAYLAND (display);
toplevel = _gdk_wayland_window_get_toplevel (window);
if (toplevel->user_time != 0 &&
gdk_wayland_window_set_user_time (window, display_wayland->user_time);
}
- display = gdk_window_get_display (window);
- display_wayland = GDK_DISPLAY_WAYLAND (display);
-
impl->surface = wl_compositor_create_surface(display_wayland->compositor);
wl_surface_set_user_data(impl->surface, window);
_gdk_make_event (window, GDK_MAP, NULL, FALSE);
+
+ fprintf(stderr, "window show, faked map event\n");
}
static void
if (height > 0)
window->height = height;
- _gdk_wayland_window_update_size (GDK_WINDOW_IMPL_WAYLAND (window->impl));
+ _gdk_wayland_window_update_size (window);
}
static void
impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
fprintf(stderr, "configure %p finished\n", window);
-
- gdk_wayland_window_ref_cairo_surface (GDK_WINDOW (impl));
-
- _gdk_wayland_window_attach_image (window, impl->image);
-
- cairo_surface_destroy (impl->cairo_surface);
}
static void
gdk_wayland_window_process_updates_recurse (GdkWindow *window,
cairo_region_t *region)
{
-#if 0
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
cairo_rectangle_int_t rect;
int i, n;
- gdk_wayland_window_ref_cairo_surface (window);
-
- _gdk_wayland_window_attach_image (window, impl->image);
- cairo_surface_destroy (impl->cairo_surface);
+ if (impl->buffer == NULL)
+ {
+ _gdk_wayland_window_attach_image (window, impl->image);
+ wl_surface_map_toplevel (impl->surface);
+ }
n = cairo_region_num_rectangles(region);
for (i = 0; i < n; i++)
wl_surface_damage (impl->surface,
rect.x, rect.y, rect.width, rect.height);
}
-#endif
_gdk_window_process_updates_recurse (window, region);
}
G_BEGIN_DECLS
typedef struct _GdkToplevelWayland GdkToplevelWayland;
-typedef struct _GdkWindowImplWayland GdkWindowImplWayland;
-typedef struct _GdkWindowImplWaylandClass GdkWindowImplWaylandClass;
typedef struct _GdkXPositionInfo GdkXPositionInfo;
-/* Window implementation for Wayland
- */
-
-#define GDK_TYPE_WINDOW_IMPL_WAYLAND (_gdk_window_impl_wayland_get_type ())
-#define GDK_WINDOW_IMPL_WAYLAND(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WINDOW_IMPL_WAYLAND, GdkWindowImplWayland))
-#define GDK_WINDOW_IMPL_WAYLAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WINDOW_IMPL_WAYLAND, GdkWindowImplWaylandClass))
-#define GDK_IS_WINDOW_IMPL_WAYLAND(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WINDOW_IMPL_WAYLAND))
-#define GDK_IS_WINDOW_IMPL_WAYLAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_WINDOW_IMPL_WAYLAND))
-#define GDK_WINDOW_IMPL_WAYLAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_WINDOW_IMPL_WAYLAND, GdkWindowImplWaylandClass))
-
-struct _GdkWindowImplWayland
-{
- GdkWindowImpl parent_instance;
-
- GdkWindow *wrapper;
-
- GdkToplevelWayland *toplevel; /* Toplevel-specific information */
- GdkCursor *cursor;
- GHashTable *device_cursor;
-
- gint8 toplevel_window_type;
- guint no_bg : 1; /* Set when the window background is temporarily
- * unset during resizing and scaling */
- guint override_redirect : 1;
-
- struct wl_surface *surface;
- EGLImageKHR *pending_image;
- EGLImageKHR *next_image;
-
- cairo_surface_t *cairo_surface;
- GLuint texture;
- EGLImageKHR image;
-
-};
-
-struct _GdkWindowImplWaylandClass
-{
- GdkWindowImplClass parent_class;
-};
-
struct _GdkToplevelWayland
{
gint *x_offset,
gint *y_offset);
-void _gdk_wayland_window_update_size (GdkWindowImplWayland *drawable);
+void _gdk_wayland_window_update_size (GdkWindow *window);
G_END_DECLS