win32: Move surface init code into ::constructed()
This commit is contained in:
@@ -330,7 +330,7 @@ get_default_title (void)
|
||||
* get its own class
|
||||
*/
|
||||
static ATOM
|
||||
RegisterGdkClass (GdkSurfaceType wtype)
|
||||
RegisterGdkClass (GType wtype)
|
||||
{
|
||||
static ATOM klassTOPLEVEL = 0;
|
||||
static ATOM klassTEMP = 0;
|
||||
@@ -403,10 +403,8 @@ RegisterGdkClass (GdkSurfaceType wtype)
|
||||
/* MSDN: CS_OWNDC is needed for OpenGL contexts */
|
||||
wcl.style |= CS_OWNDC;
|
||||
|
||||
switch (wtype)
|
||||
if (wtype != GDK_TYPE_WIN32_DRAG_SURFACE)
|
||||
{
|
||||
case GDK_SURFACE_TOPLEVEL:
|
||||
case GDK_SURFACE_POPUP:
|
||||
if (0 == klassTOPLEVEL)
|
||||
{
|
||||
wcl.lpszClassName = L"gdkSurfaceToplevel";
|
||||
@@ -415,9 +413,9 @@ RegisterGdkClass (GdkSurfaceType wtype)
|
||||
klassTOPLEVEL = RegisterClassExW (&wcl);
|
||||
}
|
||||
klass = klassTOPLEVEL;
|
||||
break;
|
||||
|
||||
case GDK_SURFACE_DRAG:
|
||||
}
|
||||
else
|
||||
{
|
||||
if (klassTEMP == 0)
|
||||
{
|
||||
wcl.lpszClassName = L"gdkSurfaceTemp";
|
||||
@@ -427,12 +425,6 @@ RegisterGdkClass (GdkSurfaceType wtype)
|
||||
}
|
||||
|
||||
klass = klassTEMP;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
}
|
||||
|
||||
if (klass == 0)
|
||||
@@ -448,19 +440,9 @@ gdk_win32_display_create_surface (GdkDisplay *display,
|
||||
GdkSurfaceType surface_type,
|
||||
GdkSurface *parent)
|
||||
{
|
||||
HANDLE owner;
|
||||
ATOM klass = 0;
|
||||
DWORD dwStyle = 0, dwExStyle;
|
||||
RECT rect;
|
||||
GdkWin32Surface *impl;
|
||||
GdkWin32Display *display_win32;
|
||||
GdkSurface *surface;
|
||||
const char *title;
|
||||
wchar_t *wtitle;
|
||||
GdkFrameClock *frame_clock;
|
||||
|
||||
display_win32 = GDK_WIN32_DISPLAY (display);
|
||||
|
||||
if (parent)
|
||||
frame_clock = g_object_ref (gdk_surface_get_frame_clock (parent));
|
||||
else
|
||||
@@ -469,29 +451,48 @@ gdk_win32_display_create_surface (GdkDisplay *display,
|
||||
switch (surface_type)
|
||||
{
|
||||
case GDK_SURFACE_TOPLEVEL:
|
||||
impl = g_object_new (GDK_TYPE_WIN32_TOPLEVEL,
|
||||
"display", display,
|
||||
"frame-clock", frame_clock,
|
||||
NULL);
|
||||
surface = g_object_new (GDK_TYPE_WIN32_TOPLEVEL,
|
||||
"display", display,
|
||||
"frame-clock", frame_clock,
|
||||
NULL);
|
||||
break;
|
||||
case GDK_SURFACE_POPUP:
|
||||
impl = g_object_new (GDK_TYPE_WIN32_POPUP,
|
||||
"parent", parent,
|
||||
"display", display,
|
||||
"frame-clock", frame_clock,
|
||||
NULL);
|
||||
surface = g_object_new (GDK_TYPE_WIN32_POPUP,
|
||||
"parent", parent,
|
||||
"display", display,
|
||||
"frame-clock", frame_clock,
|
||||
NULL);
|
||||
break;
|
||||
case GDK_SURFACE_DRAG:
|
||||
impl = g_object_new (GDK_TYPE_WIN32_DRAG_SURFACE,
|
||||
"display", display,
|
||||
"frame-clock", frame_clock,
|
||||
NULL);
|
||||
surface = g_object_new (GDK_TYPE_WIN32_DRAG_SURFACE,
|
||||
"display", display,
|
||||
"frame-clock", frame_clock,
|
||||
NULL);
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
}
|
||||
|
||||
g_object_unref (frame_clock);
|
||||
|
||||
return surface;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_win32_surface_constructed (GObject *object)
|
||||
{
|
||||
GdkWin32Surface *impl = GDK_WIN32_SURFACE (object);
|
||||
GdkSurface *surface = GDK_SURFACE (impl);
|
||||
GdkDisplay *display = gdk_surface_get_display (surface);
|
||||
GdkWin32Display *display_win32 = GDK_WIN32_DISPLAY (display);
|
||||
HANDLE owner;
|
||||
ATOM klass = 0;
|
||||
DWORD dwStyle = 0, dwExStyle;
|
||||
RECT rect;
|
||||
const char *title;
|
||||
wchar_t *wtitle;
|
||||
|
||||
impl->surface_scale = gdk_win32_display_get_monitor_scale_factor (display_win32, NULL, NULL);
|
||||
|
||||
dwExStyle = 0;
|
||||
@@ -500,24 +501,22 @@ gdk_win32_display_create_surface (GdkDisplay *display,
|
||||
/* MSDN: We need WS_CLIPCHILDREN and WS_CLIPSIBLINGS for GL Context Creation */
|
||||
dwStyle = WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
|
||||
|
||||
switch (surface_type)
|
||||
if (G_OBJECT_TYPE (impl) == GDK_TYPE_WIN32_TOPLEVEL)
|
||||
{
|
||||
case GDK_SURFACE_TOPLEVEL:
|
||||
dwStyle |= WS_OVERLAPPEDWINDOW;
|
||||
break;
|
||||
|
||||
case GDK_SURFACE_DRAG:
|
||||
}
|
||||
else if (G_OBJECT_TYPE (impl) == GDK_TYPE_WIN32_DRAG_SURFACE)
|
||||
{
|
||||
dwExStyle |= WS_EX_TOOLWINDOW | WS_EX_TOPMOST;
|
||||
/* fall through */
|
||||
case GDK_SURFACE_POPUP:
|
||||
dwStyle |= WS_POPUP;
|
||||
|
||||
/* Only popup and temp windows are fit to use the Owner Window mechanism */
|
||||
if (parent != NULL)
|
||||
owner = GDK_SURFACE_HWND (parent);
|
||||
break;
|
||||
|
||||
default:
|
||||
}
|
||||
else if (G_OBJECT_TYPE (impl) == GDK_TYPE_WIN32_POPUP)
|
||||
{
|
||||
dwStyle |= WS_POPUP;
|
||||
owner = GDK_SURFACE_HWND (gdk_popup_get_parent (GDK_POPUP (impl)));
|
||||
}
|
||||
else
|
||||
{
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
@@ -525,7 +524,7 @@ gdk_win32_display_create_surface (GdkDisplay *display,
|
||||
if (!title || !*title)
|
||||
title = "";
|
||||
|
||||
klass = RegisterGdkClass (surface_type);
|
||||
klass = RegisterGdkClass (G_OBJECT_TYPE (impl));
|
||||
|
||||
wtitle = g_utf8_to_utf16 (title, -1, NULL, NULL, NULL);
|
||||
|
||||
@@ -564,7 +563,7 @@ gdk_win32_display_create_surface (GdkDisplay *display,
|
||||
|
||||
gdk_surface_set_egl_native_window (surface, (void *) impl->handle);
|
||||
|
||||
if (surface_type != GDK_SURFACE_DRAG)
|
||||
if (G_OBJECT_TYPE (impl) != GDK_TYPE_WIN32_DRAG_SURFACE)
|
||||
{
|
||||
if (display_win32->tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINPOINTER)
|
||||
gdk_winpointer_initialize_surface (surface);
|
||||
@@ -576,16 +575,15 @@ gdk_win32_display_create_surface (GdkDisplay *display,
|
||||
_gdk_win32_surface_register_dnd (surface);
|
||||
_gdk_win32_surface_update_style_bits (surface);
|
||||
|
||||
g_signal_connect (frame_clock,
|
||||
g_signal_connect (gdk_surface_get_frame_clock (surface),
|
||||
"after-paint",
|
||||
G_CALLBACK (gdk_win32_impl_frame_clock_after_paint),
|
||||
impl);
|
||||
|
||||
g_object_unref (frame_clock);
|
||||
impl->hdc = GetDC (impl->handle);
|
||||
impl->inhibit_configure = TRUE;
|
||||
|
||||
return surface;
|
||||
G_OBJECT_CLASS (parent_class)->constructed (object);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -4547,6 +4545,7 @@ gdk_win32_surface_class_init (GdkWin32SurfaceClass *klass)
|
||||
|
||||
parent_class = g_type_class_peek_parent (klass);
|
||||
|
||||
object_class->constructed = gdk_win32_surface_constructed;
|
||||
object_class->dispose = gdk_surface_win32_dispose;
|
||||
object_class->finalize = gdk_surface_win32_finalize;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user