forked from AuroraMiddleware/gtk
ec729d0649
Store the cursor name on the cursor (rather than always using its type). Use this when setting a cursor on a surface. The mir server will fallback to using standard cursors from the cursor theme if the name used is not one of those defined by mir, which is more or less what we want to happen here in case of creating a cursor by name.
1257 lines
40 KiB
C
1257 lines
40 KiB
C
/*
|
|
* Copyright © 2014 Canonical Ltd
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public License
|
|
* as published by the Free Software Foundation; either version 2 of
|
|
* the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <inttypes.h>
|
|
|
|
#include "config.h"
|
|
|
|
#include "gdk.h"
|
|
#include "gdkmir.h"
|
|
#include "gdkmir-private.h"
|
|
|
|
#include "gdkwindowimpl.h"
|
|
#include "gdkinternals.h"
|
|
#include "gdkdisplayprivate.h"
|
|
#include "gdkdeviceprivate.h"
|
|
|
|
#define GDK_MIR_WINDOW_IMPL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WINDOW_IMPL_MIR, GdkMirWindowImplClass))
|
|
#define GDK_IS_WINDOW_IMPL_MIR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_WINDOW_IMPL_MIR))
|
|
#define GDK_MIR_WINDOW_IMPL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_WINDOW_IMPL_MIR, GdkMirWindowImplClass))
|
|
|
|
typedef struct _GdkMirWindowImplClass GdkMirWindowImplClass;
|
|
|
|
struct _GdkMirWindowImpl
|
|
{
|
|
GdkWindowImpl parent_instance;
|
|
|
|
/* Window we are temporary for */
|
|
GdkWindow *transient_for;
|
|
gint transient_x;
|
|
gint transient_y;
|
|
|
|
/* Child windows (e.g. tooltips) */
|
|
GList *transient_children;
|
|
|
|
/* Desired surface attributes */
|
|
MirSurfaceType surface_type; // FIXME
|
|
MirSurfaceState surface_state;
|
|
|
|
/* Pattern for background */
|
|
cairo_pattern_t *background;
|
|
|
|
/* Current button state for checking which buttons are being pressed / released */
|
|
gdouble x;
|
|
gdouble y;
|
|
MirMotionButton button_state;
|
|
|
|
/* Surface being rendered to (only exists when window visible) */
|
|
MirSurface *surface;
|
|
|
|
/* Cairo context for current frame */
|
|
cairo_surface_t *cairo_surface;
|
|
|
|
/* TRUE if the window can be seen */
|
|
gboolean visible;
|
|
|
|
/* TRUE if cursor is inside this window */
|
|
gboolean cursor_inside;
|
|
};
|
|
|
|
struct _GdkMirWindowImplClass
|
|
{
|
|
GdkWindowImplClass parent_class;
|
|
};
|
|
|
|
G_DEFINE_TYPE (GdkMirWindowImpl, gdk_mir_window_impl, GDK_TYPE_WINDOW_IMPL)
|
|
|
|
static cairo_surface_t *gdk_mir_window_impl_ref_cairo_surface (GdkWindow *window);
|
|
|
|
GdkWindowImpl *
|
|
_gdk_mir_window_impl_new (void)
|
|
{
|
|
return g_object_new (GDK_TYPE_MIR_WINDOW_IMPL, NULL);
|
|
}
|
|
|
|
void
|
|
_gdk_mir_window_impl_set_surface_state (GdkMirWindowImpl *impl, MirSurfaceState state)
|
|
{
|
|
impl->surface_state = state;
|
|
}
|
|
|
|
void
|
|
_gdk_mir_window_impl_set_cursor_state (GdkMirWindowImpl *impl,
|
|
gdouble x,
|
|
gdouble y,
|
|
gboolean cursor_inside,
|
|
MirMotionButton button_state)
|
|
{
|
|
impl->x = x;
|
|
impl->y = y;
|
|
impl->cursor_inside = cursor_inside;
|
|
impl->button_state = button_state;
|
|
}
|
|
|
|
void
|
|
_gdk_mir_window_impl_get_cursor_state (GdkMirWindowImpl *impl,
|
|
gdouble *x,
|
|
gdouble *y,
|
|
gboolean *cursor_inside,
|
|
MirMotionButton *button_state)
|
|
{
|
|
if (x)
|
|
*x = impl->x;
|
|
if (y)
|
|
*y = impl->y;
|
|
if (cursor_inside)
|
|
*cursor_inside = impl->cursor_inside;
|
|
if (button_state)
|
|
*button_state = impl->button_state;
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_init (GdkMirWindowImpl *impl)
|
|
{
|
|
}
|
|
|
|
static MirConnection *
|
|
get_connection (GdkWindow *window)
|
|
{
|
|
return gdk_mir_display_get_mir_connection (gdk_window_get_display (window));
|
|
}
|
|
|
|
static void
|
|
set_surface_state (GdkMirWindowImpl *impl,
|
|
MirSurfaceState state)
|
|
{
|
|
impl->surface_state = state;
|
|
if (impl->surface)
|
|
mir_surface_set_state (impl->surface, state);
|
|
}
|
|
|
|
static void
|
|
event_cb (MirSurface *surface,
|
|
const MirEvent *event,
|
|
void *context)
|
|
{
|
|
_gdk_mir_event_source_queue (context, event);
|
|
}
|
|
|
|
static void
|
|
ensure_surface (GdkWindow *window)
|
|
{
|
|
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
|
|
MirPixelFormat formats[100], pixel_format = mir_pixel_format_invalid;
|
|
unsigned int n_formats, i;
|
|
MirSurfaceParameters parameters;
|
|
MirEventDelegate event_delegate = { event_cb, NULL };
|
|
GdkMirWindowReference *window_ref;
|
|
|
|
if (impl->surface)
|
|
return;
|
|
|
|
/* no destroy notify -- we must leak for now
|
|
* https://bugs.launchpad.net/mir/+bug/1324100
|
|
*/
|
|
window_ref = _gdk_mir_event_source_get_window_reference (window);
|
|
|
|
event_delegate.context = window_ref;
|
|
|
|
// Should probably calculate this once?
|
|
// Should prefer certain formats over others
|
|
mir_connection_get_available_surface_formats (get_connection (window), formats, 100, &n_formats);
|
|
for (i = 0; i < n_formats; i++)
|
|
if (formats[i] == mir_pixel_format_argb_8888)
|
|
{
|
|
pixel_format = formats[i];
|
|
break;
|
|
}
|
|
|
|
parameters.name = "GTK+ Mir";
|
|
parameters.width = window->width;
|
|
parameters.height = window->height;
|
|
parameters.pixel_format = pixel_format;
|
|
parameters.buffer_usage = mir_buffer_usage_software;
|
|
parameters.output_id = mir_display_output_id_invalid;
|
|
impl->surface = mir_connection_create_surface_sync (get_connection (window), ¶meters);
|
|
|
|
MirGraphicsRegion region;
|
|
MirEvent resize_event;
|
|
|
|
mir_surface_get_graphics_region (impl->surface, ®ion);
|
|
|
|
/* Send the initial configure with the size the server gave... */
|
|
resize_event.resize.type = mir_event_type_resize;
|
|
resize_event.resize.surface_id = 0;
|
|
resize_event.resize.width = region.width;
|
|
resize_event.resize.height = region.height;
|
|
|
|
_gdk_mir_event_source_queue (window_ref, &resize_event);
|
|
|
|
mir_surface_set_event_handler (impl->surface, &event_delegate); // FIXME: Ignore some events until shown
|
|
set_surface_state (impl, impl->surface_state);
|
|
}
|
|
|
|
static void
|
|
ensure_no_surface (GdkWindow *window)
|
|
{
|
|
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
|
|
|
|
if (impl->cairo_surface)
|
|
{
|
|
cairo_surface_finish (impl->cairo_surface);
|
|
cairo_surface_destroy (impl->cairo_surface);
|
|
impl->cairo_surface = NULL;
|
|
}
|
|
|
|
if (impl->surface)
|
|
{
|
|
mir_surface_release_sync (impl->surface);
|
|
impl->surface = NULL;
|
|
}
|
|
}
|
|
|
|
static void
|
|
redraw_transient (GdkWindow *window)
|
|
{
|
|
GdkRectangle r;
|
|
r.x = window->x;
|
|
r.y = window->y;
|
|
r.width = window->width;
|
|
r.height = window->height;
|
|
gdk_window_invalidate_rect (GDK_MIR_WINDOW_IMPL (window->impl)->transient_for, &r, FALSE);
|
|
}
|
|
|
|
static void
|
|
send_buffer (GdkWindow *window)
|
|
{
|
|
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
|
|
|
|
/* Transient windows draw onto parent instead */
|
|
if (impl->transient_for)
|
|
{
|
|
redraw_transient (window);
|
|
return;
|
|
}
|
|
|
|
/* Composite transient windows over this one */
|
|
if (impl->transient_children)
|
|
{
|
|
cairo_surface_t *surface;
|
|
cairo_t *c;
|
|
GList *link;
|
|
|
|
surface = gdk_mir_window_impl_ref_cairo_surface (window);
|
|
c = cairo_create (surface);
|
|
|
|
for (link = impl->transient_children; link; link = link->next)
|
|
{
|
|
GdkWindow *child_window = link->data;
|
|
GdkMirWindowImpl *child_impl = GDK_MIR_WINDOW_IMPL (child_window->impl);
|
|
|
|
/* Skip children not yet drawn to */
|
|
if (!child_impl->cairo_surface)
|
|
continue;
|
|
|
|
cairo_set_source_surface (c, child_impl->cairo_surface, child_window->x, child_window->y);
|
|
cairo_rectangle (c, child_window->x, child_window->y, child_window->width, child_window->height);
|
|
cairo_fill (c);
|
|
}
|
|
|
|
cairo_destroy (c);
|
|
cairo_surface_destroy (surface);
|
|
}
|
|
|
|
/* Send the completed buffer to Mir */
|
|
mir_surface_swap_buffers_sync (impl->surface);
|
|
|
|
/* The Cairo context is no longer valid */
|
|
if (impl->cairo_surface)
|
|
{
|
|
cairo_surface_destroy (impl->cairo_surface);
|
|
impl->cairo_surface = NULL;
|
|
}
|
|
}
|
|
|
|
static cairo_surface_t *
|
|
gdk_mir_window_impl_ref_cairo_surface (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_ref_cairo_surface window=%p\n", window);
|
|
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
|
|
MirGraphicsRegion region;
|
|
cairo_format_t pixel_format = CAIRO_FORMAT_INVALID;
|
|
cairo_surface_t *cairo_surface;
|
|
cairo_t *c;
|
|
|
|
if (impl->cairo_surface)
|
|
{
|
|
cairo_surface_reference (impl->cairo_surface);
|
|
return impl->cairo_surface;
|
|
}
|
|
|
|
/* Transient windows get rendered into a buffer and copied onto their parent */
|
|
if (impl->transient_for)
|
|
{
|
|
cairo_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, window->width, window->height);
|
|
}
|
|
else
|
|
{
|
|
ensure_surface (window);
|
|
|
|
mir_surface_get_graphics_region (impl->surface, ®ion);
|
|
|
|
// FIXME: Should calculate this once
|
|
switch (region.pixel_format)
|
|
{
|
|
case mir_pixel_format_argb_8888:
|
|
pixel_format = CAIRO_FORMAT_ARGB32;
|
|
break;
|
|
default:
|
|
case mir_pixel_format_abgr_8888:
|
|
case mir_pixel_format_xbgr_8888:
|
|
case mir_pixel_format_xrgb_8888:
|
|
case mir_pixel_format_bgr_888:
|
|
// uh-oh...
|
|
g_printerr ("Unsupported pixel format %d\n", region.pixel_format);
|
|
break;
|
|
}
|
|
|
|
cairo_surface = cairo_image_surface_create_for_data ((unsigned char *) region.vaddr,
|
|
pixel_format,
|
|
region.width,
|
|
region.height,
|
|
region.stride);
|
|
}
|
|
|
|
impl->cairo_surface = cairo_surface_reference (cairo_surface);
|
|
|
|
/* Draw background */
|
|
c = cairo_create (impl->cairo_surface);
|
|
if (impl->background)
|
|
cairo_set_source (c, impl->background);
|
|
else
|
|
cairo_set_source_rgb (c, 1.0, 0.0, 0.0);
|
|
cairo_paint (c);
|
|
cairo_destroy (c);
|
|
|
|
return cairo_surface;
|
|
}
|
|
|
|
static cairo_surface_t *
|
|
gdk_mir_window_impl_create_similar_image_surface (GdkWindow *window,
|
|
cairo_format_t format,
|
|
int width,
|
|
int height)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_create_similar_image_surface window=%p\n", window);
|
|
return cairo_image_surface_create (format, width, height);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_finalize (GObject *object)
|
|
{
|
|
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (object);
|
|
GList *link;
|
|
|
|
for (link = impl->transient_children; link; link = link->next)
|
|
{
|
|
GdkWindow *window = link->data;
|
|
gdk_window_destroy (window);
|
|
}
|
|
|
|
if (impl->background)
|
|
cairo_pattern_destroy (impl->background);
|
|
if (impl->surface)
|
|
mir_surface_release_sync (impl->surface);
|
|
if (impl->cairo_surface)
|
|
cairo_surface_destroy (impl->cairo_surface);
|
|
g_list_free (impl->transient_children);
|
|
|
|
G_OBJECT_CLASS (gdk_mir_window_impl_parent_class)->finalize (object);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_show (GdkWindow *window,
|
|
gboolean already_mapped)
|
|
{
|
|
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
|
|
cairo_surface_t *s;
|
|
|
|
//g_printerr ("gdk_mir_window_impl_show window=%p\n", window);
|
|
|
|
impl->visible = TRUE;
|
|
|
|
/* Make sure there's a surface to see */
|
|
ensure_surface (window);
|
|
|
|
/* Make sure something is rendered and then show first frame */
|
|
s = gdk_mir_window_impl_ref_cairo_surface (window);
|
|
send_buffer (window);
|
|
cairo_surface_destroy (s);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_hide (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_hide window=%p\n", window);
|
|
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
|
|
|
|
impl->visible = FALSE;
|
|
ensure_no_surface (window);
|
|
|
|
if (impl->transient_for)
|
|
redraw_transient (window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_withdraw (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_withdraw window=%p\n", window);
|
|
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
|
|
|
|
impl->visible = FALSE;
|
|
ensure_no_surface (window);
|
|
|
|
if (impl->transient_for)
|
|
redraw_transient (window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_raise (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_raise window=%p\n", window);
|
|
/* We don't support client window stacking */
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_lower (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_lower window=%p\n", window);
|
|
/* We don't support client window stacking */
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_restack_under (GdkWindow *window,
|
|
GList *native_siblings)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_restack_under window=%p\n", window);
|
|
/* We don't support client window stacking */
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_restack_toplevel (GdkWindow *window,
|
|
GdkWindow *sibling,
|
|
gboolean above)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_restack_toplevel window=%p sibling=%p\n", window, sibling);
|
|
/* We don't support client window stacking */
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_move_resize (GdkWindow *window,
|
|
gboolean with_move,
|
|
gint x,
|
|
gint y,
|
|
gint width,
|
|
gint height)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_move_resize");
|
|
g_printerr (" window=%p", window);
|
|
if (with_move)
|
|
g_printerr (" location=%d,%d", x, y);
|
|
if (width > 0)
|
|
g_printerr (" size=%dx%dpx", width, height);
|
|
g_printerr ("\n");
|
|
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
|
|
|
|
/* Redraw parent where we moved from */
|
|
if (impl->transient_for)
|
|
redraw_transient (window);
|
|
|
|
/* Transient windows can move wherever they want */
|
|
if (with_move)
|
|
{
|
|
if (impl->transient_for)
|
|
{
|
|
window->x = x;
|
|
window->y = y;
|
|
}
|
|
else
|
|
{
|
|
impl->transient_x = x;
|
|
impl->transient_y = y;
|
|
}
|
|
}
|
|
|
|
/* If resize requested then rebuild surface */
|
|
if (width >= 0)
|
|
{
|
|
/* We accept any resize */
|
|
window->width = width;
|
|
window->height = height;
|
|
|
|
if (impl->surface)
|
|
{
|
|
ensure_no_surface (window);
|
|
ensure_surface (window);
|
|
}
|
|
}
|
|
|
|
/* Redraw parent where we moved to */
|
|
if (impl->transient_for)
|
|
redraw_transient (window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_background (GdkWindow *window,
|
|
cairo_pattern_t *pattern)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_set_background window=%p\n", window);
|
|
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
|
|
|
|
if (impl->background)
|
|
cairo_pattern_destroy (impl->background);
|
|
impl->background = cairo_pattern_reference (pattern);
|
|
}
|
|
|
|
static GdkEventMask
|
|
gdk_mir_window_impl_get_events (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_get_events window=%p\n", window);
|
|
return window->event_mask;
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_events (GdkWindow *window,
|
|
GdkEventMask event_mask)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_set_events window=%p\n", window);
|
|
/* We send all events and let GDK decide */
|
|
}
|
|
|
|
static gboolean
|
|
gdk_mir_window_impl_reparent (GdkWindow *window,
|
|
GdkWindow *new_parent,
|
|
gint x,
|
|
gint y)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_reparent window=%p new-parent=%p\n", window, new_parent);
|
|
return FALSE;
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_device_cursor (GdkWindow *window,
|
|
GdkDevice *device,
|
|
GdkCursor *cursor)
|
|
{
|
|
const gchar *cursor_name;
|
|
MirCursorConfiguration *configuration;
|
|
|
|
if (cursor)
|
|
cursor_name = _gdk_mir_cursor_get_name (cursor);
|
|
else
|
|
cursor_name = mir_default_cursor_name;
|
|
|
|
configuration = mir_cursor_configuration_from_name (cursor_name);
|
|
|
|
if (configuration)
|
|
{
|
|
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
|
|
|
|
if (impl->surface)
|
|
mir_surface_configure_cursor (impl->surface, configuration);
|
|
|
|
mir_cursor_configuration_destroy (configuration);
|
|
}
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_get_geometry (GdkWindow *window,
|
|
gint *x,
|
|
gint *y,
|
|
gint *width,
|
|
gint *height)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_get_geometry window=%p\n", window);
|
|
|
|
if (x)
|
|
*x = 0; // FIXME
|
|
if (y)
|
|
*y = 0; // FIXME
|
|
if (width)
|
|
*width = window->width;
|
|
if (height)
|
|
*height = window->height;
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_get_root_coords (GdkWindow *window,
|
|
gint x,
|
|
gint y,
|
|
gint *root_x,
|
|
gint *root_y)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_get_root_coords window=%p\n", window);
|
|
|
|
if (root_x)
|
|
*root_x = x; // FIXME
|
|
if (root_y)
|
|
*root_y = y; // FIXME
|
|
}
|
|
|
|
static gboolean
|
|
gdk_mir_window_impl_get_device_state (GdkWindow *window,
|
|
GdkDevice *device,
|
|
gdouble *x,
|
|
gdouble *y,
|
|
GdkModifierType *mask)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_get_device_state window=%p\n", window);
|
|
GdkWindow *child;
|
|
|
|
_gdk_device_query_state (device, window, NULL, &child, NULL, NULL, x, y, mask);
|
|
|
|
return child != NULL;
|
|
}
|
|
|
|
static gboolean
|
|
gdk_mir_window_impl_begin_paint_region (GdkWindow *window,
|
|
const cairo_region_t *region)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_begin_paint_region window=%p\n", window);
|
|
/* Indicate we are ready to be drawn onto directly? */
|
|
return FALSE;
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_end_paint (GdkWindow *window)
|
|
{
|
|
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
|
|
|
|
//g_printerr ("gdk_mir_window_impl_end_paint window=%p\n", window);
|
|
if (impl->visible)
|
|
send_buffer (window);
|
|
}
|
|
|
|
static cairo_region_t *
|
|
gdk_mir_window_impl_get_shape (GdkWindow *window)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_get_shape window=%p\n", window);
|
|
return NULL;
|
|
}
|
|
|
|
static cairo_region_t *
|
|
gdk_mir_window_impl_get_input_shape (GdkWindow *window)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_get_input_shape window=%p\n", window);
|
|
return NULL;
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_shape_combine_region (GdkWindow *window,
|
|
const cairo_region_t *shape_region,
|
|
gint offset_x,
|
|
gint offset_y)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_shape_combine_region window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_input_shape_combine_region (GdkWindow *window,
|
|
const cairo_region_t *shape_region,
|
|
gint offset_x,
|
|
gint offset_y)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_input_shape_combine_region window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_destroy (GdkWindow *window,
|
|
gboolean recursing,
|
|
gboolean foreign_destroy)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_destroy window=%p\n", window);
|
|
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
|
|
|
|
impl->visible = FALSE;
|
|
ensure_no_surface (window);
|
|
|
|
if (impl->transient_for)
|
|
{
|
|
/* Redraw parent */
|
|
redraw_transient (window);
|
|
|
|
/* Remove from transient list */
|
|
GdkMirWindowImpl *parent_impl = GDK_MIR_WINDOW_IMPL (impl->transient_for->impl);
|
|
parent_impl->transient_children = g_list_remove (parent_impl->transient_children, window);
|
|
}
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_destroy_foreign (GdkWindow *window)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_destroy_foreign window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_focus (GdkWindow *window,
|
|
guint32 timestamp)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_focus window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_type_hint (GdkWindow *window,
|
|
GdkWindowTypeHint hint)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_set_type_hint window=%p\n", window);
|
|
// FIXME: ?
|
|
}
|
|
|
|
static GdkWindowTypeHint
|
|
gdk_mir_window_impl_get_type_hint (GdkWindow *window)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_get_type_hint window=%p\n", window);
|
|
return GDK_WINDOW_TYPE_HINT_NORMAL;
|
|
}
|
|
|
|
void
|
|
gdk_mir_window_impl_set_modal_hint (GdkWindow *window,
|
|
gboolean modal)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_set_modal_hint window=%p\n", window);
|
|
/* Mir doesn't support modal windows */
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_skip_taskbar_hint (GdkWindow *window,
|
|
gboolean skips_taskbar)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_set_skip_taskbar_hint window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_skip_pager_hint (GdkWindow *window,
|
|
gboolean skips_pager)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_set_skip_pager_hint window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_urgency_hint (GdkWindow *window,
|
|
gboolean urgent)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_set_urgency_hint window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_geometry_hints (GdkWindow *window,
|
|
const GdkGeometry *geometry,
|
|
GdkWindowHints geom_mask)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_set_geometry_hints window=%p\n", window);
|
|
//FIXME: ?
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_title (GdkWindow *window,
|
|
const gchar *title)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_set_title window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_role (GdkWindow *window,
|
|
const gchar *role)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_set_role window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_startup_id (GdkWindow *window,
|
|
const gchar *startup_id)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_set_startup_id window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_transient_for (GdkWindow *window,
|
|
GdkWindow *parent)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_set_transient_for window=%p\n", window);
|
|
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
|
|
|
|
if (impl->transient_for == parent)
|
|
return;
|
|
|
|
g_return_if_fail (impl->transient_for == NULL);
|
|
|
|
/* Link this window to the parent */
|
|
impl->transient_for = parent;
|
|
if (parent)
|
|
{
|
|
GdkMirWindowImpl *parent_impl = GDK_MIR_WINDOW_IMPL (parent->impl);
|
|
parent_impl->transient_children = g_list_append (parent_impl->transient_children, window);
|
|
|
|
/* Move to where the client requested */
|
|
window->x = impl->transient_x;
|
|
window->y = impl->transient_y;
|
|
|
|
/* Redraw onto parent */
|
|
redraw_transient (window);
|
|
}
|
|
|
|
/* Remove surface if we had made one before this was set */
|
|
ensure_no_surface (window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_get_frame_extents (GdkWindow *window,
|
|
GdkRectangle *rect)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_get_frame_extents window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_override_redirect (GdkWindow *window,
|
|
gboolean override_redirect)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_set_override_redirect window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_accept_focus (GdkWindow *window,
|
|
gboolean accept_focus)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_set_accept_focus window=%p\n", window);
|
|
/* Mir clients cannot control focus */
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_focus_on_map (GdkWindow *window,
|
|
gboolean focus_on_map)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_set_focus_on_map window=%p\n", window);
|
|
/* Mir clients cannot control focus */
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_icon_list (GdkWindow *window,
|
|
GList *pixbufs)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_set_icon_list window=%p\n", window);
|
|
// ??
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_icon_name (GdkWindow *window,
|
|
const gchar *name)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_set_icon_name window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_iconify (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_iconify window=%p\n", window);
|
|
/* We don't support iconification */
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_deiconify (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_deiconify window=%p\n", window);
|
|
/* We don't support iconification */
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_stick (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_stick window=%p\n", window);
|
|
/* We do not support stick/unstick in Mir */
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_unstick (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_unstick window=%p\n", window);
|
|
/* We do not support stick/unstick in Mir */
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_maximize (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_maximize window=%p\n", window);
|
|
set_surface_state (GDK_MIR_WINDOW_IMPL (window->impl), mir_surface_state_maximized);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_unmaximize (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_unmaximize window=%p\n", window);
|
|
set_surface_state (GDK_MIR_WINDOW_IMPL (window->impl), mir_surface_state_restored);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_fullscreen (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_fullscreen window=%p\n", window);
|
|
set_surface_state (GDK_MIR_WINDOW_IMPL (window->impl), mir_surface_state_fullscreen);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_apply_fullscreen_mode (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_apply_fullscreen_mode window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_unfullscreen (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_unfullscreen window=%p\n", window);
|
|
set_surface_state (GDK_MIR_WINDOW_IMPL (window->impl), mir_surface_state_restored);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_keep_above (GdkWindow *window,
|
|
gboolean setting)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_set_keep_above window=%p\n", window);
|
|
/* We do not support keep above/below in Mir */
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_keep_below (GdkWindow *window,
|
|
gboolean setting)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_set_keep_below window=%p\n", window);
|
|
/* We do not support keep above/below in Mir */
|
|
}
|
|
|
|
static GdkWindow *
|
|
gdk_mir_window_impl_get_group (GdkWindow *window)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_get_group window=%p\n", window);
|
|
return NULL;
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_group (GdkWindow *window,
|
|
GdkWindow *leader)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_set_group window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_decorations (GdkWindow *window,
|
|
GdkWMDecoration decorations)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_set_decorations window=%p decorations=%d\n", window, decorations);
|
|
}
|
|
|
|
static gboolean
|
|
gdk_mir_window_impl_get_decorations (GdkWindow *window,
|
|
GdkWMDecoration *decorations)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_get_decorations window=%p\n", window);
|
|
return FALSE;
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_functions (GdkWindow *window,
|
|
GdkWMFunction functions)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_set_functions window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_begin_resize_drag (GdkWindow *window,
|
|
GdkWindowEdge edge,
|
|
GdkDevice *device,
|
|
gint button,
|
|
gint root_x,
|
|
gint root_y,
|
|
guint32 timestamp)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_begin_resize_drag window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_begin_move_drag (GdkWindow *window,
|
|
GdkDevice *device,
|
|
gint button,
|
|
gint root_x,
|
|
gint root_y,
|
|
guint32 timestamp)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_begin_move_drag window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_enable_synchronized_configure (GdkWindow *window)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_enable_synchronized_configure window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_configure_finished (GdkWindow *window)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_configure_finished window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_opacity (GdkWindow *window,
|
|
gdouble opacity)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_set_opacity window=%p\n", window);
|
|
// FIXME
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_composited (GdkWindow *window,
|
|
gboolean composited)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_set_composited window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_destroy_notify (GdkWindow *window)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_destroy_notify window=%p\n", window);
|
|
}
|
|
|
|
static GdkDragProtocol
|
|
gdk_mir_window_impl_get_drag_protocol (GdkWindow *window,
|
|
GdkWindow **target)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_get_drag_protocol window=%p\n", window);
|
|
return 0;
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_register_dnd (GdkWindow *window)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_register_dnd window=%p\n", window);
|
|
}
|
|
|
|
static GdkDragContext *
|
|
gdk_mir_window_impl_drag_begin (GdkWindow *window,
|
|
GdkDevice *device,
|
|
GList *targets)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_drag_begin window=%p\n", window);
|
|
return NULL;
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_process_updates_recurse (GdkWindow *window,
|
|
cairo_region_t *region)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_process_updates_recurse window=%p\n", window);
|
|
cairo_rectangle_int_t rectangle;
|
|
|
|
/* We redraw the whole region, but we should track the buffers and only redraw what has changed since we sent this buffer */
|
|
rectangle.x = 0;
|
|
rectangle.y = 0;
|
|
rectangle.width = window->width;
|
|
rectangle.height = window->height;
|
|
cairo_region_union_rectangle (region, &rectangle);
|
|
|
|
_gdk_window_process_updates_recurse (window, region);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_sync_rendering (GdkWindow *window)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_sync_rendering window=%p\n", window);
|
|
// FIXME: Only used for benchmarking
|
|
}
|
|
|
|
static gboolean
|
|
gdk_mir_window_impl_simulate_key (GdkWindow *window,
|
|
gint x,
|
|
gint y,
|
|
guint keyval,
|
|
GdkModifierType modifiers,
|
|
GdkEventType key_pressrelease)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_simulate_key window=%p\n", window);
|
|
return FALSE;
|
|
}
|
|
|
|
static gboolean
|
|
gdk_mir_window_impl_simulate_button (GdkWindow *window,
|
|
gint x,
|
|
gint y,
|
|
guint button,
|
|
GdkModifierType modifiers,
|
|
GdkEventType button_pressrelease)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_simulate_button window=%p\n", window);
|
|
return FALSE;
|
|
}
|
|
|
|
static gboolean
|
|
gdk_mir_window_impl_get_property (GdkWindow *window,
|
|
GdkAtom property,
|
|
GdkAtom type,
|
|
gulong offset,
|
|
gulong length,
|
|
gint pdelete,
|
|
GdkAtom *actual_property_type,
|
|
gint *actual_format_type,
|
|
gint *actual_length,
|
|
guchar **data)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_get_property window=%p\n", window);
|
|
return FALSE;
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_change_property (GdkWindow *window,
|
|
GdkAtom property,
|
|
GdkAtom type,
|
|
gint format,
|
|
GdkPropMode mode,
|
|
const guchar *data,
|
|
gint nelements)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_change_property window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_delete_property (GdkWindow *window,
|
|
GdkAtom property)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_delete_property window=%p\n", window);
|
|
}
|
|
|
|
static gint
|
|
gdk_mir_window_impl_get_scale_factor (GdkWindow *window)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_get_scale_factor window=%p\n", window);
|
|
/* Don't support monitor scaling */
|
|
return 1;
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_opaque_region (GdkWindow *window,
|
|
cairo_region_t *region)
|
|
{
|
|
//g_printerr ("gdk_mir_window_impl_set_opaque_region window=%p\n", window);
|
|
/* FIXME: An optimisation to tell the compositor which regions of the window are fully transparent */
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_set_shadow_width (GdkWindow *window,
|
|
gint left,
|
|
gint right,
|
|
gint top,
|
|
gint bottom)
|
|
{
|
|
g_printerr ("gdk_mir_window_impl_set_shadow_width window=%p\n", window);
|
|
}
|
|
|
|
static void
|
|
gdk_mir_window_impl_class_init (GdkMirWindowImplClass *klass)
|
|
{
|
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
GdkWindowImplClass *impl_class = GDK_WINDOW_IMPL_CLASS (klass);
|
|
|
|
object_class->finalize = gdk_mir_window_impl_finalize;
|
|
|
|
impl_class->ref_cairo_surface = gdk_mir_window_impl_ref_cairo_surface;
|
|
impl_class->create_similar_image_surface = gdk_mir_window_impl_create_similar_image_surface;
|
|
impl_class->show = gdk_mir_window_impl_show;
|
|
impl_class->hide = gdk_mir_window_impl_hide;
|
|
impl_class->withdraw = gdk_mir_window_impl_withdraw;
|
|
impl_class->raise = gdk_mir_window_impl_raise;
|
|
impl_class->lower = gdk_mir_window_impl_lower;
|
|
impl_class->restack_under = gdk_mir_window_impl_restack_under;
|
|
impl_class->restack_toplevel = gdk_mir_window_impl_restack_toplevel;
|
|
impl_class->move_resize = gdk_mir_window_impl_move_resize;
|
|
impl_class->set_background = gdk_mir_window_impl_set_background;
|
|
impl_class->get_events = gdk_mir_window_impl_get_events;
|
|
impl_class->set_events = gdk_mir_window_impl_set_events;
|
|
impl_class->reparent = gdk_mir_window_impl_reparent;
|
|
impl_class->set_device_cursor = gdk_mir_window_impl_set_device_cursor;
|
|
impl_class->get_geometry = gdk_mir_window_impl_get_geometry;
|
|
impl_class->get_root_coords = gdk_mir_window_impl_get_root_coords;
|
|
impl_class->get_device_state = gdk_mir_window_impl_get_device_state;
|
|
impl_class->begin_paint_region = gdk_mir_window_impl_begin_paint_region;
|
|
impl_class->end_paint = gdk_mir_window_impl_end_paint;
|
|
impl_class->get_shape = gdk_mir_window_impl_get_shape;
|
|
impl_class->get_input_shape = gdk_mir_window_impl_get_input_shape;
|
|
impl_class->shape_combine_region = gdk_mir_window_impl_shape_combine_region;
|
|
impl_class->input_shape_combine_region = gdk_mir_window_impl_input_shape_combine_region;
|
|
impl_class->destroy = gdk_mir_window_impl_destroy;
|
|
impl_class->destroy_foreign = gdk_mir_window_impl_destroy_foreign;
|
|
impl_class->focus = gdk_mir_window_impl_focus;
|
|
impl_class->set_type_hint = gdk_mir_window_impl_set_type_hint;
|
|
impl_class->get_type_hint = gdk_mir_window_impl_get_type_hint;
|
|
impl_class->set_modal_hint = gdk_mir_window_impl_set_modal_hint;
|
|
impl_class->set_skip_taskbar_hint = gdk_mir_window_impl_set_skip_taskbar_hint;
|
|
impl_class->set_skip_pager_hint = gdk_mir_window_impl_set_skip_pager_hint;
|
|
impl_class->set_urgency_hint = gdk_mir_window_impl_set_urgency_hint;
|
|
impl_class->set_geometry_hints = gdk_mir_window_impl_set_geometry_hints;
|
|
impl_class->set_title = gdk_mir_window_impl_set_title;
|
|
impl_class->set_role = gdk_mir_window_impl_set_role;
|
|
impl_class->set_startup_id = gdk_mir_window_impl_set_startup_id;
|
|
impl_class->set_transient_for = gdk_mir_window_impl_set_transient_for;
|
|
impl_class->get_frame_extents = gdk_mir_window_impl_get_frame_extents;
|
|
impl_class->set_override_redirect = gdk_mir_window_impl_set_override_redirect;
|
|
impl_class->set_accept_focus = gdk_mir_window_impl_set_accept_focus;
|
|
impl_class->set_focus_on_map = gdk_mir_window_impl_set_focus_on_map;
|
|
impl_class->set_icon_list = gdk_mir_window_impl_set_icon_list;
|
|
impl_class->set_icon_name = gdk_mir_window_impl_set_icon_name;
|
|
impl_class->iconify = gdk_mir_window_impl_iconify;
|
|
impl_class->deiconify = gdk_mir_window_impl_deiconify;
|
|
impl_class->stick = gdk_mir_window_impl_stick;
|
|
impl_class->unstick = gdk_mir_window_impl_unstick;
|
|
impl_class->maximize = gdk_mir_window_impl_maximize;
|
|
impl_class->unmaximize = gdk_mir_window_impl_unmaximize;
|
|
impl_class->fullscreen = gdk_mir_window_impl_fullscreen;
|
|
impl_class->apply_fullscreen_mode = gdk_mir_window_impl_apply_fullscreen_mode;
|
|
impl_class->unfullscreen = gdk_mir_window_impl_unfullscreen;
|
|
impl_class->set_keep_above = gdk_mir_window_impl_set_keep_above;
|
|
impl_class->set_keep_below = gdk_mir_window_impl_set_keep_below;
|
|
impl_class->get_group = gdk_mir_window_impl_get_group;
|
|
impl_class->set_group = gdk_mir_window_impl_set_group;
|
|
impl_class->set_decorations = gdk_mir_window_impl_set_decorations;
|
|
impl_class->get_decorations = gdk_mir_window_impl_get_decorations;
|
|
impl_class->set_functions = gdk_mir_window_impl_set_functions;
|
|
impl_class->begin_resize_drag = gdk_mir_window_impl_begin_resize_drag;
|
|
impl_class->begin_move_drag = gdk_mir_window_impl_begin_move_drag;
|
|
impl_class->enable_synchronized_configure = gdk_mir_window_impl_enable_synchronized_configure;
|
|
impl_class->configure_finished = gdk_mir_window_impl_configure_finished;
|
|
impl_class->set_opacity = gdk_mir_window_impl_set_opacity;
|
|
impl_class->set_composited = gdk_mir_window_impl_set_composited;
|
|
impl_class->destroy_notify = gdk_mir_window_impl_destroy_notify;
|
|
impl_class->get_drag_protocol = gdk_mir_window_impl_get_drag_protocol;
|
|
impl_class->register_dnd = gdk_mir_window_impl_register_dnd;
|
|
impl_class->drag_begin = gdk_mir_window_impl_drag_begin;
|
|
impl_class->process_updates_recurse = gdk_mir_window_impl_process_updates_recurse;
|
|
impl_class->sync_rendering = gdk_mir_window_impl_sync_rendering;
|
|
impl_class->simulate_key = gdk_mir_window_impl_simulate_key;
|
|
impl_class->simulate_button = gdk_mir_window_impl_simulate_button;
|
|
impl_class->get_property = gdk_mir_window_impl_get_property;
|
|
impl_class->change_property = gdk_mir_window_impl_change_property;
|
|
impl_class->delete_property = gdk_mir_window_impl_delete_property;
|
|
impl_class->get_scale_factor = gdk_mir_window_impl_get_scale_factor;
|
|
impl_class->set_opaque_region = gdk_mir_window_impl_set_opaque_region;
|
|
impl_class->set_shadow_width = gdk_mir_window_impl_set_shadow_width;
|
|
}
|