[gtk/wip/chergert/quartz4u] move native property into surface
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/chergert/quartz4u] move native property into surface
- Date: Wed, 29 Apr 2020 01:05:08 +0000 (UTC)
commit 990592313ab474cf027660c0268da4f057e8af27
Author: Christian Hergert <chergert redhat com>
Date: Tue Apr 28 18:04:25 2020 -0700
move native property into surface
gdk/macos/gdkmacossurface-private.h | 3 +-
gdk/macos/gdkmacossurface.c | 103 +++++++++++++++++++++++++++++++++---
gdk/macos/gdkmacostoplevelsurface.c | 63 ++++------------------
3 files changed, 108 insertions(+), 61 deletions(-)
---
diff --git a/gdk/macos/gdkmacossurface-private.h b/gdk/macos/gdkmacossurface-private.h
index 22d8a7f6f1..15f9f39719 100644
--- a/gdk/macos/gdkmacossurface-private.h
+++ b/gdk/macos/gdkmacossurface-private.h
@@ -41,8 +41,6 @@ struct _GdkMacosSurface
struct _GdkMacosSurfaceClass
{
GdkSurfaceClass parent_class;
-
- CGDirectDisplayID (*get_screen_id) (GdkMacosSurface *self);
};
GdkMacosSurface *_gdk_macos_surface_new (GdkMacosDisplay *display,
@@ -52,6 +50,7 @@ GdkMacosSurface *_gdk_macos_surface_new (GdkMacosDisplay *display,
int y,
int width,
int height);
+NSWindow *_gdk_macos_surface_get_native (GdkMacosSurface *self);
CGDirectDisplayID _gdk_macos_surface_get_screen_id (GdkMacosSurface *self);
const char *_gdk_macos_surface_get_title (GdkMacosSurface *self);
void _gdk_macos_surface_set_title (GdkMacosSurface *self,
diff --git a/gdk/macos/gdkmacossurface.c b/gdk/macos/gdkmacossurface.c
index b850191937..dbc6c0a9f1 100644
--- a/gdk/macos/gdkmacossurface.c
+++ b/gdk/macos/gdkmacossurface.c
@@ -22,6 +22,8 @@
#include <AppKit/AppKit.h>
#include <gdk/gdk.h>
+#import "GdkMacosWindow.h"
+
#include "gdkframeclockidleprivate.h"
#include "gdksurfaceprivate.h"
@@ -29,9 +31,12 @@
#include "gdkmacospopupsurface-private.h"
#include "gdkmacossurface-private.h"
#include "gdkmacostoplevelsurface-private.h"
+#include "gdkmacosutils-private.h"
typedef struct
{
+ GdkMacosWindow *window;
+
char *title;
gint shadow_top;
@@ -44,6 +49,14 @@ typedef struct
G_DEFINE_TYPE_WITH_PRIVATE (GdkMacosSurface, gdk_macos_surface, GDK_TYPE_SURFACE)
+enum {
+ PROP_0,
+ PROP_NATIVE,
+ LAST_PROP
+};
+
+static GParamSpec *properties [LAST_PROP];
+
static void
gdk_macos_surface_set_input_region (GdkSurface *surface,
cairo_region_t *region)
@@ -54,14 +67,64 @@ gdk_macos_surface_set_input_region (GdkSurface *surface,
}
static void
-gdk_macos_surface_finalize (GObject *object)
+gdk_macos_surface_destroy (GdkSurface *surface,
+ gboolean foreign_destroy)
{
- GdkMacosSurface *self = (GdkMacosSurface *)object;
+ GDK_BEGIN_MACOS_ALLOC_POOL;
+
+ GdkMacosSurface *self = (GdkMacosSurface *)surface;
GdkMacosSurfacePrivate *priv = gdk_macos_surface_get_instance_private (self);
+ GdkMacosWindow *window = g_steal_pointer (&priv->window);
g_clear_pointer (&priv->title, g_free);
- G_OBJECT_CLASS (gdk_macos_surface_parent_class)->finalize (object);
+ if (window != NULL)
+ [window close];
+
+ GDK_SURFACE_CLASS (gdk_macos_surface_parent_class)->destroy (surface, foreign_destroy);
+
+ GDK_END_MACOS_ALLOC_POOL;
+}
+
+
+static void
+gdk_macos_surface_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GdkMacosSurface *self = GDK_MACOS_SURFACE (object);
+ GdkMacosSurfacePrivate *priv = gdk_macos_surface_get_instance_private (self);
+
+ switch (prop_id)
+ {
+ case PROP_NATIVE:
+ g_value_set_pointer (value, priv->window);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+gdk_macos_surface_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GdkMacosSurface *self = GDK_MACOS_SURFACE (object);
+ GdkMacosSurfacePrivate *priv = gdk_macos_surface_get_instance_private (self);
+
+ switch (prop_id)
+ {
+ case PROP_NATIVE:
+ priv->window = g_value_get_pointer (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
}
static void
@@ -70,9 +133,19 @@ gdk_macos_surface_class_init (GdkMacosSurfaceClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GdkSurfaceClass *surface_class = GDK_SURFACE_CLASS (klass);
- object_class->finalize = gdk_macos_surface_finalize;
+ object_class->get_property = gdk_macos_surface_get_property;
+ object_class->set_property = gdk_macos_surface_set_property;
+ surface_class->destroy = gdk_macos_surface_destroy;
surface_class->set_input_region = gdk_macos_surface_set_input_region;
+
+ properties [PROP_NATIVE] =
+ g_param_spec_pointer ("native",
+ "Native",
+ "The native NSWindow",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_properties (object_class, LAST_PROP, properties);
}
static void
@@ -192,7 +265,25 @@ _gdk_macos_surface_set_modal_hint (GdkMacosSurface *self,
CGDirectDisplayID
_gdk_macos_surface_get_screen_id (GdkMacosSurface *self)
{
- g_return_val_if_fail (GDK_IS_MACOS_SURFACE (self), 0);
+ GdkMacosSurfacePrivate *priv = gdk_macos_surface_get_instance_private (self);
+
+ g_return_val_if_fail (GDK_IS_MACOS_SURFACE (self), (CGDirectDisplayID)-1);
+
+ if (priv->window != NULL)
+ {
+ NSScreen *screen = [priv->window screen];
+ return [[[screen deviceDescription] objectForKey:@"NSScreenNumber"] unsignedIntValue];
+ }
+
+ return (CGDirectDisplayID)-1;
+}
+
+NSWindow *
+_gdk_macos_surface_get_native (GdkMacosSurface *self)
+{
+ GdkMacosSurfacePrivate *priv = gdk_macos_surface_get_instance_private (self);
+
+ g_return_val_if_fail (GDK_IS_MACOS_SURFACE (self), NULL);
- return GDK_MACOS_SURFACE_GET_CLASS (self)->get_screen_id (self);
+ return (NSWindow *)priv->window;
}
diff --git a/gdk/macos/gdkmacostoplevelsurface.c b/gdk/macos/gdkmacostoplevelsurface.c
index 51e9bdb3e3..50143b3444 100644
--- a/gdk/macos/gdkmacostoplevelsurface.c
+++ b/gdk/macos/gdkmacostoplevelsurface.c
@@ -32,7 +32,6 @@ struct _GdkMacosToplevelSurface
GdkMacosSurface parent_instance;
GdkMacosSurface *transient_for;
- GdkMacosWindow *window;
guint decorated : 1;
};
@@ -49,7 +48,8 @@ _gdk_macos_toplevel_surface_present (GdkToplevel *toplevel,
GdkToplevelLayout *layout)
{
GdkMacosToplevelSurface *self = (GdkMacosToplevelSurface *)toplevel;
- [self->window makeKeyAndOrderFront:self->window];
+ NSWindow *window = _gdk_macos_surface_get_native (GDK_MACOS_SURFACE (self));
+ [window makeKeyAndOrderFront:window];
return TRUE;
}
@@ -57,7 +57,8 @@ static gboolean
_gdk_macos_toplevel_surface_minimize (GdkToplevel *toplevel)
{
GdkMacosToplevelSurface *self = (GdkMacosToplevelSurface *)toplevel;
- [self->window miniaturize:self->window];
+ NSWindow *window = _gdk_macos_surface_get_native (GDK_MACOS_SURFACE (self));
+ [window miniaturize:window];
return TRUE;
}
@@ -65,7 +66,8 @@ static gboolean
_gdk_macos_toplevel_surface_lower (GdkToplevel *toplevel)
{
GdkMacosToplevelSurface *self = (GdkMacosToplevelSurface *)toplevel;
- [self->window orderBack:self->window];
+ NSWindow *window = _gdk_macos_surface_get_native (GDK_MACOS_SURFACE (self));
+ [window orderBack:window];
return TRUE;
}
@@ -74,7 +76,8 @@ _gdk_macos_toplevel_surface_focus (GdkToplevel *toplevel,
guint32 timestamp)
{
GdkMacosToplevelSurface *self = (GdkMacosToplevelSurface *)toplevel;
- [self->window makeKeyAndOrderFront:self->window];
+ NSWindow *window = _gdk_macos_surface_get_native (GDK_MACOS_SURFACE (self));
+ [window makeKeyAndOrderFront:window];
}
static void
@@ -91,26 +94,9 @@ G_DEFINE_TYPE_WITH_CODE (GdkMacosToplevelSurface, _gdk_macos_toplevel_surface, G
enum {
PROP_0,
- PROP_NATIVE,
LAST_PROP
};
-static GParamSpec *properties [LAST_PROP];
-
-static CGDirectDisplayID
-_gdk_macos_toplevel_surface_get_screen_id (GdkMacosSurface *base)
-{
- GdkMacosToplevelSurface *self = (GdkMacosToplevelSurface *)base;
-
- if (self->window != NULL)
- {
- NSScreen *screen = [self->window screen];
- return [[[screen deviceDescription] objectForKey:@"NSScreenNumber"] unsignedIntValue];
- }
-
- return 0;
-}
-
static void
_gdk_macos_toplevel_surface_set_transient_for (GdkMacosToplevelSurface *self,
GdkMacosSurface *parent)
@@ -131,8 +117,9 @@ _gdk_macos_toplevel_surface_set_decorated (GdkMacosToplevelSurface *self,
if (decorated != self->decorated)
{
+ NSWindow *window = _gdk_macos_surface_get_native (GDK_MACOS_SURFACE (self));
self->decorated = decorated;
- [self->window setHasShadow:decorated ? YES : NO];
+ [window setHasShadow:decorated ? YES : NO];
}
}
@@ -142,18 +129,6 @@ _gdk_macos_toplevel_surface_destroy (GdkSurface *surface,
{
GdkMacosToplevelSurface *self = (GdkMacosToplevelSurface *)surface;
- if (self->window != NULL)
- {
- GDK_BEGIN_MACOS_ALLOC_POOL;
-
- GdkMacosWindow *window = g_steal_pointer (&self->window);
-
- if (window != NULL)
- [window close];
-
- GDK_END_MACOS_ALLOC_POOL;
- }
-
g_clear_object (&self->transient_for);
GDK_SURFACE_CLASS (_gdk_macos_toplevel_surface_parent_class)->destroy (surface, foreign_destroy);
@@ -180,10 +155,6 @@ _gdk_macos_toplevel_surface_get_property (GObject *object,
switch (prop_id)
{
- case PROP_NATIVE:
- g_value_set_pointer (value, toplevel->window);
- break;
-
case LAST_PROP + GDK_TOPLEVEL_PROP_STATE:
g_value_set_flags (value, surface->state);
break;
@@ -241,10 +212,6 @@ _gdk_macos_toplevel_surface_set_property (GObject *object,
switch (prop_id)
{
- case PROP_NATIVE:
- toplevel->window = g_value_get_pointer (value);
- break;
-
case LAST_PROP + GDK_TOPLEVEL_PROP_TITLE:
_gdk_macos_surface_set_title (base, g_value_get_string (value));
g_object_notify_by_pspec (G_OBJECT (surface), pspec);
@@ -300,17 +267,7 @@ _gdk_macos_toplevel_surface_class_init (GdkMacosToplevelSurfaceClass *klass)
surface_class->destroy = _gdk_macos_toplevel_surface_destroy;
- base_class->get_screen_id = _gdk_macos_toplevel_surface_get_screen_id;
-
gdk_toplevel_install_properties (object_class, LAST_PROP);
-
- properties [PROP_NATIVE] =
- g_param_spec_pointer ("native",
- "Native",
- "The native NSWindow",
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
-
- g_object_class_install_properties (object_class, LAST_PROP, properties);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]