object_class->dispose = gdk_broadway_display_dispose;
object_class->finalize = gdk_broadway_display_finalize;
+ display_class->toplevel_type = GDK_TYPE_BROADWAY_TOPLEVEL;
+ display_class->popup_type = GDK_TYPE_BROADWAY_POPUP;
display_class->cairo_context_type = GDK_TYPE_BROADWAY_CAIRO_CONTEXT;
display_class->get_name = gdk_broadway_display_get_name;
display_class->get_next_serial = gdk_broadway_display_get_next_serial;
display_class->notify_startup_complete = gdk_broadway_display_notify_startup_complete;
- display_class->create_surface = gdk_broadway_display_create_surface;
display_class->get_keymap = _gdk_broadway_display_get_keymap;
display_class->get_monitors = gdk_broadway_display_get_monitors;
void _gdk_broadway_display_get_maximal_cursor_size (GdkDisplay *display,
guint *width,
guint *height);
-GdkSurface * gdk_broadway_display_create_surface (GdkDisplay *display,
- GdkSurfaceType surface_type,
- GdkSurface *parent);
GdkKeymap* _gdk_broadway_display_get_keymap (GdkDisplay *display);
void _gdk_broadway_display_consume_all_input (GdkDisplay *display);
BroadwayInputMsg * _gdk_broadway_display_block_for_input (GdkDisplay *display,
G_DEFINE_TYPE (GdkBroadwaySurface, gdk_broadway_surface, GDK_TYPE_SURFACE)
-GType gdk_broadway_toplevel_get_type (void) G_GNUC_CONST;
-GType gdk_broadway_popup_get_type (void) G_GNUC_CONST;
-GType gdk_broadway_drag_surface_get_type (void) G_GNUC_CONST;
-
-#define GDK_TYPE_BROADWAY_TOPLEVEL (gdk_broadway_toplevel_get_type ())
-#define GDK_TYPE_BROADWAY_POPUP (gdk_broadway_popup_get_type ())
-#define GDK_TYPE_BROADWAY_DRAG_SURFACE (gdk_broadway_drag_surface_get_type ())
-
/* We need to flush in an idle rather than AFTER_PAINT, as the clock
is frozen during e.g. surface resizes so the paint will not happen
and the surface resize request is never flushed. */
}
}
-GdkSurface *
-gdk_broadway_display_create_surface (GdkDisplay *display,
- GdkSurfaceType surface_type,
- GdkSurface *parent)
-{
- GdkSurface *surface;
-
- switch (surface_type)
- {
- case GDK_SURFACE_TOPLEVEL:
- surface = g_object_new (GDK_TYPE_BROADWAY_TOPLEVEL,
- "display", display,
- NULL);
- break;
- case GDK_SURFACE_POPUP:
- surface = g_object_new (GDK_TYPE_BROADWAY_POPUP,
- "parent", parent,
- "display", display,
- NULL);
- break;
- default:
- g_assert_not_reached ();
- break;
- }
-
- return surface;
-}
-
static void
_gdk_broadway_surface_destroy (GdkSurface *surface,
gboolean foreign_destroy)
/* Surface implementation for Broadway
*/
+GType gdk_broadway_toplevel_get_type (void) G_GNUC_CONST;
+GType gdk_broadway_popup_get_type (void) G_GNUC_CONST;
+GType gdk_broadway_drag_surface_get_type (void) G_GNUC_CONST;
+
+#define GDK_TYPE_BROADWAY_TOPLEVEL (gdk_broadway_toplevel_get_type ())
+#define GDK_TYPE_BROADWAY_POPUP (gdk_broadway_popup_get_type ())
+#define GDK_TYPE_BROADWAY_DRAG_SURFACE (gdk_broadway_drag_surface_get_type ())
+
struct _GdkBroadwaySurface
{
GdkSurface parent_instance;
display->event_pause_count--;
}
-GdkSurface *
-gdk_display_create_surface (GdkDisplay *display,
- GdkSurfaceType surface_type,
- GdkSurface *parent)
-{
- return GDK_DISPLAY_GET_CLASS (display)->create_surface (display,
- surface_type,
- parent);
-}
-
/*< private >
* gdk_display_get_keymap:
* @display: the `GdkDisplay`
{
GObjectClass parent_class;
+ GType toplevel_type; /* Type for GdkToplevel, must be set */
+ GType popup_type; /* Type for GdkPopup, must be set */
GType cairo_context_type; /* type for GdkCairoContext, must be set */
GType vk_context_type; /* type for GdkVulkanContext, must be set if vk_extension_name != NULL */
const char *vk_extension_name; /* Name of required windowing vulkan extension or %NULL (default) if Vulkan isn't supported */
const char *startup_id);
const char * (*get_startup_notification_id) (GdkDisplay *display);
- GdkSurface * (*create_surface) (GdkDisplay *display,
- GdkSurfaceType surface_type,
- GdkSurface *parent);
-
GdkKeymap * (*get_keymap) (GdkDisplay *display);
GdkGLContext * (* init_gl) (GdkDisplay *display,
gulong _gdk_display_get_next_serial (GdkDisplay *display);
void _gdk_display_pause_events (GdkDisplay *display);
void _gdk_display_unpause_events (GdkDisplay *display);
-GdkSurface * gdk_display_create_surface (GdkDisplay *display,
- GdkSurfaceType surface_type,
- GdkSurface *parent);
GdkGLContext * gdk_display_get_gl_context (GdkDisplay *display);
g_object_notify (G_OBJECT (surface), "height");
}
-static GdkSurface *
-gdk_surface_new (GdkDisplay *display,
- GdkSurfaceType surface_type,
- GdkSurface *parent)
-{
- return gdk_display_create_surface (display,
- surface_type,
- parent);
-}
-
/**
* gdk_surface_new_toplevel: (constructor)
* @display: the display to create the surface on
{
g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
- return gdk_surface_new (display, GDK_SURFACE_TOPLEVEL,
- NULL);
+ return g_object_new (GDK_DISPLAY_GET_CLASS (display)->toplevel_type,
+ "display", display,
+ NULL);
}
/**
gboolean autohide)
{
GdkSurface *surface;
+ GdkDisplay *display;
g_return_val_if_fail (GDK_IS_SURFACE (parent), NULL);
- surface = gdk_surface_new (parent->display, GDK_SURFACE_POPUP,
- parent);
+ display = gdk_surface_get_display (parent);
+
+ surface = g_object_new (GDK_DISPLAY_GET_CLASS (display)->popup_type,
+ "display", display,
+ "parent", parent,
+ NULL);
surface->autohide = autohide;
G_BEGIN_DECLS
-typedef enum
-{
- GDK_SURFACE_TOPLEVEL,
- GDK_SURFACE_POPUP,
-} GdkSurfaceType;
-
struct _GdkSurface
{
GObject parent_instance;
#include "gdkmacosglcontext-private.h"
#include "gdkmacoskeymap-private.h"
#include "gdkmacosmonitor-private.h"
+#include "gdkmacospopupsurface-private.h"
#include "gdkmacosseat-private.h"
#include "gdkmacossurface-private.h"
+#include "gdkmacostoplevelsurface-private.h"
#include "gdkmacosutils-private.h"
G_DEFINE_TYPE (GdkMacosDisplay, gdk_macos_display, GDK_TYPE_DISPLAY)
_gdk_macos_display_clear_sorting (self);
}
-static GdkSurface *
-gdk_macos_display_create_surface (GdkDisplay *display,
- GdkSurfaceType surface_type,
- GdkSurface *parent)
-{
- GdkMacosDisplay *self = (GdkMacosDisplay *)display;
- GdkMacosSurface *surface;
-
- g_assert (GDK_IS_MACOS_DISPLAY (self));
- g_assert (!parent || GDK_IS_MACOS_SURFACE (parent));
-
- surface = _gdk_macos_surface_new (self, surface_type, parent);
-
- return GDK_SURFACE (surface);
-}
-
static GdkKeymap *
gdk_macos_display_get_keymap (GdkDisplay *display)
{
object_class->finalize = gdk_macos_display_finalize;
+ display_class->toplevel_type = GDK_TYPE_MACOS_TOPLEVEL_SURFACE;
+ display_class->popup_type = GDK_TYPE_MACOS_POPUP_SURFACE;
display_class->cairo_context_type = GDK_TYPE_MACOS_CAIRO_CONTEXT;
display_class->beep = gdk_macos_display_beep;
- display_class->create_surface = gdk_macos_display_create_surface;
display_class->flush = gdk_macos_display_flush;
display_class->get_keymap = gdk_macos_display_get_keymap;
display_class->get_monitors = gdk_macos_display_get_monitors;
GdkSurfaceClass parent_class;
};
-GdkMacosSurface *_gdk_macos_surface_new (GdkMacosDisplay *display,
- GdkSurfaceType surface_type,
- GdkSurface *parent);
NSWindow *_gdk_macos_surface_get_native (GdkMacosSurface *self);
void _gdk_macos_surface_set_native (GdkMacosSurface *self,
GdkMacosWindow *window);
#include "gdkmacosmonitor-private.h"
#include "gdkmacospopupsurface-private.h"
#include "gdkmacosutils-private.h"
+#include "gdkmacostoplevelsurface-private.h"
G_DEFINE_ABSTRACT_TYPE (GdkMacosSurface, gdk_macos_surface, GDK_TYPE_SURFACE)
self->monitors = g_ptr_array_new_with_free_func (g_object_unref);
}
-GdkMacosSurface *
-_gdk_macos_surface_new (GdkMacosDisplay *display,
- GdkSurfaceType surface_type,
- GdkSurface *parent)
-{
- GdkMacosSurface *ret;
-
- g_return_val_if_fail (GDK_IS_MACOS_DISPLAY (display), NULL);
-
- switch (surface_type)
- {
- case GDK_SURFACE_TOPLEVEL:
- ret = g_object_new (GDK_TYPE_MACOS_TOPLEVEL_SURFACE,
- "display", display,
- NULL);
- break;
-
- case GDK_SURFACE_POPUP:
- ret = g_object_new (GDK_TYPE_MACOS_POPUP_SURFACE,
- "display", display,
- "parent", parent,
- NULL);
-
- break;
-
- default:
- g_warn_if_reached ();
- ret = NULL;
- }
-
- return g_steal_pointer (&ret);
-}
-
void
_gdk_macos_surface_get_shadow (GdkMacosSurface *self,
int *top,
object_class->dispose = gdk_wayland_display_dispose;
object_class->finalize = gdk_wayland_display_finalize;
+ display_class->toplevel_type = GDK_TYPE_WAYLAND_TOPLEVEL;
+ display_class->popup_type = GDK_TYPE_WAYLAND_POPUP;
display_class->cairo_context_type = GDK_TYPE_WAYLAND_CAIRO_CONTEXT;
#ifdef GDK_RENDERING_VULKAN
display_class->get_startup_notification_id = gdk_wayland_display_get_startup_notification_id;
G_GNUC_END_IGNORE_DEPRECATIONS
display_class->notify_startup_complete = gdk_wayland_display_notify_startup_complete;
- display_class->create_surface = gdk_wayland_display_create_surface;
display_class->get_keymap = _gdk_wayland_display_get_keymap;
display_class->init_gl = gdk_wayland_display_init_gl;
void gdk_wayland_drop_set_action (GdkDrop *drop,
uint32_t action);
-GdkSurface * gdk_wayland_display_create_surface (GdkDisplay *display,
- GdkSurfaceType surface_type,
- GdkSurface *parent);
-
void _gdk_wayland_display_create_seat (GdkWaylandDisplay *display,
guint32 id,
struct wl_seat *seat);
g_clear_pointer (&self->display_server.outputs, g_slist_free);
}
-GdkSurface *
-gdk_wayland_display_create_surface (GdkDisplay *display,
- GdkSurfaceType surface_type,
- GdkSurface *parent)
-{
- GdkSurface *surface;
-
- switch (surface_type)
- {
- case GDK_SURFACE_TOPLEVEL:
- g_warn_if_fail (parent == NULL);
- surface = g_object_new (GDK_TYPE_WAYLAND_TOPLEVEL,
- "display", display,
- NULL);
- break;
- case GDK_SURFACE_POPUP:
- g_warn_if_fail (parent != NULL);
- surface = g_object_new (GDK_TYPE_WAYLAND_POPUP,
- "parent", parent,
- "display", display,
- NULL);
- break;
- default:
- g_assert_not_reached ();
- break;
- }
-
- return surface;
-}
-
static void
maybe_notify_mapped (GdkSurface *surface)
{
#include "gdkdisplay-win32.h"
#include "gdkdevicemanager-win32.h"
#include "gdkglcontext-win32.h"
+#include "gdksurface-win32.h"
#include "gdkwin32display.h"
#include "gdkwin32screen.h"
#include "gdkwin32surface.h"
object_class->dispose = gdk_win32_display_dispose;
object_class->finalize = gdk_win32_display_finalize;
+ display_class->toplevel_type = GDK_TYPE_WIN32_TOPLEVEL;
+ display_class->popup_type = GDK_TYPE_WIN32_POPUP;
display_class->cairo_context_type = GDK_TYPE_WIN32_CAIRO_CONTEXT;
display_class->get_name = gdk_win32_display_get_name;
display_class->get_next_serial = gdk_win32_display_get_next_serial;
display_class->notify_startup_complete = gdk_win32_display_notify_startup_complete;
- display_class->create_surface = gdk_win32_display_create_surface;
display_class->get_keymap = _gdk_win32_display_get_keymap;
GdkKeymap *_gdk_win32_display_get_keymap (GdkDisplay *display);
-GdkSurface *gdk_win32_display_create_surface (GdkDisplay *display,
- GdkSurfaceType surface_type,
- GdkSurface *parent);
-
/* stray GdkSurfaceImplWin32 members */
void _gdk_win32_surface_register_dnd (GdkSurface *window);
void _gdk_win32_surface_unregister_dnd (GdkSurface *window);
G_DEFINE_TYPE (GdkWin32Surface, gdk_win32_surface, GDK_TYPE_SURFACE)
-GType gdk_win32_toplevel_get_type (void) G_GNUC_CONST;
-GType gdk_win32_popup_get_type (void) G_GNUC_CONST;
-GType gdk_win32_drag_surface_get_type (void) G_GNUC_CONST;
-
-#define GDK_TYPE_WIN32_TOPLEVEL (gdk_win32_toplevel_get_type ())
-#define GDK_TYPE_WIN32_POPUP (gdk_win32_popup_get_type ())
-#define GDK_TYPE_WIN32_DRAG_SURFACE (gdk_win32_drag_surface_get_type ())
-
static void
gdk_win32_surface_init (GdkWin32Surface *impl)
{
return klass;
}
-GdkSurface *
-gdk_win32_display_create_surface (GdkDisplay *display,
- GdkSurfaceType surface_type,
- GdkSurface *parent)
-{
- GdkSurface *surface;
-
- switch (surface_type)
- {
- case GDK_SURFACE_TOPLEVEL:
- surface = g_object_new (GDK_TYPE_WIN32_TOPLEVEL,
- "display", display,
- NULL);
- break;
- case GDK_SURFACE_POPUP:
- surface = g_object_new (GDK_TYPE_WIN32_POPUP,
- "parent", parent,
- "display", display,
- NULL);
- break;
- default:
- g_assert_not_reached ();
- break;
- }
-
- return surface;
-}
-
static void
gdk_win32_surface_constructed (GObject *object)
{
G_BEGIN_DECLS
+GType gdk_win32_toplevel_get_type (void) G_GNUC_CONST;
+GType gdk_win32_popup_get_type (void) G_GNUC_CONST;
+GType gdk_win32_drag_surface_get_type (void) G_GNUC_CONST;
+
+#define GDK_TYPE_WIN32_TOPLEVEL (gdk_win32_toplevel_get_type ())
+#define GDK_TYPE_WIN32_POPUP (gdk_win32_popup_get_type ())
+#define GDK_TYPE_WIN32_DRAG_SURFACE (gdk_win32_drag_surface_get_type ())
+
typedef enum
{
GDK_DECOR_ALL = 1 << 0,
object_class->dispose = gdk_x11_display_dispose;
object_class->finalize = gdk_x11_display_finalize;
+ display_class->toplevel_type = GDK_TYPE_X11_TOPLEVEL;
+ display_class->popup_type = GDK_TYPE_X11_POPUP;
display_class->cairo_context_type = GDK_TYPE_X11_CAIRO_CONTEXT;
#ifdef GDK_RENDERING_VULKAN
display_class->vk_context_type = GDK_TYPE_X11_VULKAN_CONTEXT;
display_class->get_startup_notification_id = gdk_x11_display_get_startup_notification_id;
G_GNUC_END_IGNORE_DEPRECATIONS
display_class->notify_startup_complete = gdk_x11_display_notify_startup_complete;
- display_class->create_surface = gdk_x11_display_create_surface;
display_class->get_keymap = gdk_x11_display_get_keymap;
display_class->init_gl = gdk_x11_display_init_gl;
guint *width,
guint *height);
-GdkSurface * gdk_x11_display_create_surface (GdkDisplay *display,
- GdkSurfaceType surface_type,
- GdkSurface *parent);
GList * gdk_x11_display_get_toplevel_windows (GdkDisplay *display);
void _gdk_x11_precache_atoms (GdkDisplay *display,
G_DEFINE_TYPE (GdkX11Surface, gdk_x11_surface, GDK_TYPE_SURFACE)
-GType gdk_x11_toplevel_get_type (void) G_GNUC_CONST;
-GType gdk_x11_popup_get_type (void) G_GNUC_CONST;
-GType gdk_x11_drag_surface_get_type (void) G_GNUC_CONST;
-
-#define GDK_TYPE_X11_TOPLEVEL (gdk_x11_toplevel_get_type ())
-#define GDK_TYPE_X11_POPUP (gdk_x11_popup_get_type ())
-#define GDK_TYPE_X11_DRAG_SURFACE (gdk_x11_drag_surface_get_type ())
-
static void
gdk_x11_surface_init (GdkX11Surface *impl)
{
static void gdk_x11_surface_set_type_hint (GdkSurface *surface,
GdkSurfaceTypeHint hint);
-GdkSurface *
-gdk_x11_display_create_surface (GdkDisplay *display,
- GdkSurfaceType surface_type,
- GdkSurface *parent)
-{
- GdkSurface *surface;
-
- switch (surface_type)
- {
- case GDK_SURFACE_TOPLEVEL:
- surface = g_object_new (GDK_TYPE_X11_TOPLEVEL,
- "display", display,
- NULL);
- break;
- case GDK_SURFACE_POPUP:
- surface = g_object_new (GDK_TYPE_X11_POPUP,
- "parent", parent,
- "display", display,
- NULL);
- break;
- default:
- g_assert_not_reached ();
- break;
- }
-
- return surface;
-}
-
static void
gdk_toplevel_x11_free_contents (GdkDisplay *display,
GdkToplevelX11 *toplevel)
G_BEGIN_DECLS
+GType gdk_x11_toplevel_get_type (void) G_GNUC_CONST;
+GType gdk_x11_popup_get_type (void) G_GNUC_CONST;
+GType gdk_x11_drag_surface_get_type (void) G_GNUC_CONST;
+
+#define GDK_TYPE_X11_TOPLEVEL (gdk_x11_toplevel_get_type ())
+#define GDK_TYPE_X11_POPUP (gdk_x11_popup_get_type ())
+#define GDK_TYPE_X11_DRAG_SURFACE (gdk_x11_drag_surface_get_type ())
+
typedef struct _GdkToplevelX11 GdkToplevelX11;
typedef struct _GdkXPositionInfo GdkXPositionInfo;