Add a vfunc for _gdk_window_impl_new

This commit is contained in:
Matthias Clasen 2010-12-15 19:07:36 -05:00
parent d5803fa9b2
commit 126212b470
6 changed files with 101 additions and 54 deletions

View File

@ -2517,3 +2517,21 @@ _gdk_display_event_data_free (GdkDisplay *display,
{
GDK_DISPLAY_GET_CLASS (display)->event_data_free (display, event);
}
void
_gdk_display_create_window_impl (GdkDisplay *display,
GdkWindow *window,
GdkWindow *real_parent,
GdkScreen *screen,
GdkEventMask event_mask,
GdkWindowAttr *attributes,
gint attributes_mask)
{
GDK_DISPLAY_GET_CLASS (display)->create_window_impl (display,
window,
real_parent,
screen,
event_mask,
attributes,
attributes_mask);
}

View File

@ -21,6 +21,7 @@
#define __GDK_DISPLAY_PRIVATE_H__
#include "gdkdisplay.h"
#include "gdkwindow.h"
#include "gdkcursor.h"
G_BEGIN_DECLS
@ -182,6 +183,13 @@ struct _GdkDisplayClass
GdkEvent *new_event);
void (*event_data_free) (GdkDisplay *display,
GdkEvent *event);
void (*create_window_impl) (GdkDisplay *display,
GdkWindow *window,
GdkWindow *real_parent,
GdkScreen *screen,
GdkEventMask event_mask,
GdkWindowAttr *attributes,
gint attributes_mask);
/* Signals */
void (*closed) (GdkDisplay *display,
@ -234,6 +242,13 @@ void _gdk_display_event_data_copy (GdkDisplay *display
GdkEvent *new_event);
void _gdk_display_event_data_free (GdkDisplay *display,
GdkEvent *event);
void _gdk_display_create_window_impl (GdkDisplay *display,
GdkWindow *window,
GdkWindow *real_parent,
GdkScreen *screen,
GdkEventMask event_mask,
GdkWindowAttr *attributes,
gint attributes_mask);
G_END_DECLS

View File

@ -1276,6 +1276,7 @@ gdk_window_new (GdkWindow *parent,
{
GdkWindow *window;
GdkScreen *screen;
GdkDisplay *display;
int x, y;
gboolean native;
GdkEventMask event_mask;
@ -1425,10 +1426,11 @@ gdk_window_new (GdkWindow *parent,
}
else if (native)
{
display = gdk_screen_get_display (screen);
event_mask = get_native_event_mask (window);
/* Create the impl */
_gdk_window_impl_new (window, real_parent, screen, event_mask, attributes, attributes_mask);
_gdk_display_create_window_impl (display, window, real_parent, screen, event_mask, attributes, attributes_mask);
window->impl_window = window;
/* This will put the native window topmost in the native parent, which may
@ -1720,6 +1722,7 @@ gdk_window_ensure_native (GdkWindow *window)
{
GdkWindow *impl_window;
GdkWindowImpl *new_impl, *old_impl;
GdkDisplay *display;
GdkScreen *screen;
GdkWindow *above;
GList listhead;
@ -1745,9 +1748,11 @@ gdk_window_ensure_native (GdkWindow *window)
gdk_window_drop_cairo_surface (window);
screen = gdk_window_get_screen (window);
display = gdk_screen_get_display (screen);
old_impl = window->impl;
_gdk_window_impl_new (window, window->parent,
_gdk_display_create_window_impl (display,
window, window->parent,
screen,
get_native_event_mask (window),
NULL, 0);

View File

@ -2726,5 +2726,6 @@ _gdk_display_x11_class_init (GdkDisplayX11Class * class)
display_class->notify_startup_complete = gdk_x11_display_notify_startup_complete;
display_class->event_data_copy = gdk_x11_display_event_data_copy;
display_class->event_data_free = gdk_x11_display_event_data_free;
display_class->create_window_impl = _gdk_x11_display_create_window_impl;
}

View File

@ -180,6 +180,13 @@ void _gdk_x11_display_get_maximal_cursor_size (GdkDisplay *display,
guint *height);
void _gdk_x11_display_before_process_all_updates (GdkDisplay *display);
void _gdk_x11_display_after_process_all_updates (GdkDisplay *display);
void _gdk_x11_display_create_window_impl (GdkDisplay *display,
GdkWindow *window,
GdkWindow *real_parent,
GdkScreen *screen,
GdkEventMask event_mask,
GdkWindowAttr *attributes,
gint attributes_mask);
void _gdk_x11_precache_atoms (GdkDisplay *display,
const gchar * const *atom_names,

View File

@ -677,7 +677,8 @@ setup_toplevel_window (GdkWindow *window,
}
void
_gdk_window_impl_new (GdkWindow *window,
_gdk_x11_display_create_window_impl (GdkDisplay *display,
GdkWindow *window,
GdkWindow *real_parent,
GdkScreen *screen,
GdkEventMask event_mask,
@ -699,9 +700,9 @@ _gdk_window_impl_new (GdkWindow *window,
unsigned int class;
const char *title;
screen_x11 = GDK_SCREEN_X11 (screen);
display_x11 = GDK_DISPLAY_X11 (display);
xparent = GDK_WINDOW_XID (real_parent);
display_x11 = GDK_DISPLAY_X11 (GDK_SCREEN_DISPLAY (screen));
screen_x11 = GDK_SCREEN_X11 (screen);
impl = g_object_new (GDK_TYPE_WINDOW_IMPL_X11, NULL);
window->impl = GDK_WINDOW_IMPL (impl);