[gnome-flashback] crtc: move GfGpu field to instance private



commit 65f5aa592c616c3b4c8fad4f8a201e9ccabb03f9
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Tue Jul 7 15:10:56 2020 +0300

    crtc: move GfGpu field to instance private
    
    Based on mutter commit:
    https://gitlab.gnome.org/GNOME/mutter/-/commit/2ebd43cba95eea4d515a

 backends/gf-crtc-private.h |  2 --
 backends/gf-crtc-xrandr.c  | 10 ++++--
 backends/gf-crtc.c         | 88 ++++++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 93 insertions(+), 7 deletions(-)
---
diff --git a/backends/gf-crtc-private.h b/backends/gf-crtc-private.h
index 80ced6d..3db120b 100644
--- a/backends/gf-crtc-private.h
+++ b/backends/gf-crtc-private.h
@@ -46,8 +46,6 @@ struct _GfCrtc
 {
   GObject         parent;
 
-  GfGpu          *gpu;
-
   glong           crtc_id;
   guint           all_transforms;
 
diff --git a/backends/gf-crtc-xrandr.c b/backends/gf-crtc-xrandr.c
index 236bd16..49473a0 100644
--- a/backends/gf-crtc-xrandr.c
+++ b/backends/gf-crtc-xrandr.c
@@ -127,12 +127,17 @@ gf_create_xrandr_crtc (GfGpuXrandr        *gpu_xrandr,
                        XRRScreenResources *resources)
 
 {
+  GfGpu *gpu;
   GfCrtc *crtc;
   GfCrtcXrandr *crtc_xrandr;
   unsigned int i;
   GList *modes;
 
-  crtc = g_object_new (GF_TYPE_CRTC, NULL);
+  gpu = GF_GPU (gpu_xrandr);
+
+  crtc = g_object_new (GF_TYPE_CRTC,
+                       "gpu", gpu,
+                       NULL);
 
   crtc_xrandr = g_new0 (GfCrtcXrandr, 1);
   crtc_xrandr->rect = (GfRectangle) {
@@ -146,12 +151,11 @@ gf_create_xrandr_crtc (GfGpuXrandr        *gpu_xrandr,
   crtc->driver_private = crtc_xrandr;
   crtc->driver_notify = (GDestroyNotify) gf_crtc_destroy_notify;
 
-  crtc->gpu = GF_GPU (gpu_xrandr);
   crtc->crtc_id = crtc_id;
   crtc->is_dirty = FALSE;
   crtc->all_transforms = gf_monitor_transform_from_xrandr_all (xrandr_crtc->rotations);
 
-  modes = gf_gpu_get_modes (crtc->gpu);
+  modes = gf_gpu_get_modes (gpu);
   for (i = 0; i < (guint) resources->nmode; i++)
     {
       if (resources->modes[i].id == xrandr_crtc->mode)
diff --git a/backends/gf-crtc.c b/backends/gf-crtc.c
index 884fb05..aaea8fc 100644
--- a/backends/gf-crtc.c
+++ b/backends/gf-crtc.c
@@ -19,7 +19,25 @@
 #include "config.h"
 #include "gf-crtc-private.h"
 
-G_DEFINE_TYPE (GfCrtc, gf_crtc, G_TYPE_OBJECT)
+#include "gf-gpu-private.h"
+
+typedef struct
+{
+  GfGpu *gpu;
+} GfCrtcPrivate;
+
+enum
+{
+  PROP_0,
+
+  PROP_GPU,
+
+  LAST_PROP
+};
+
+static GParamSpec *crtc_properties[LAST_PROP] = { NULL };
+
+G_DEFINE_TYPE_WITH_PRIVATE (GfCrtc, gf_crtc, G_TYPE_OBJECT)
 
 static void
 gf_crtc_finalize (GObject *object)
@@ -36,6 +54,54 @@ gf_crtc_finalize (GObject *object)
   G_OBJECT_CLASS (gf_crtc_parent_class)->finalize (object);
 }
 
+static void
+gf_crtc_get_property (GObject    *object,
+                      guint       property_id,
+                      GValue     *value,
+                      GParamSpec *pspec)
+{
+  GfCrtc *self;
+  GfCrtcPrivate *priv;
+
+  self = GF_CRTC (object);
+  priv = gf_crtc_get_instance_private (self);
+
+  switch (property_id)
+    {
+      case PROP_GPU:
+        g_value_set_object (value, priv->gpu);
+        break;
+
+      default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+        break;
+    }
+}
+
+static void
+gf_crtc_set_property (GObject      *object,
+                      guint         property_id,
+                      const GValue *value,
+                      GParamSpec   *pspec)
+{
+  GfCrtc *self;
+  GfCrtcPrivate *priv;
+
+  self = GF_CRTC (object);
+  priv = gf_crtc_get_instance_private (self);
+
+  switch (property_id)
+    {
+      case PROP_GPU:
+        priv->gpu = g_value_get_object (value);
+        break;
+
+      default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+        break;
+    }
+}
+
 static void
 gf_crtc_class_init (GfCrtcClass *crtc_class)
 {
@@ -44,6 +110,20 @@ gf_crtc_class_init (GfCrtcClass *crtc_class)
   object_class = G_OBJECT_CLASS (crtc_class);
 
   object_class->finalize = gf_crtc_finalize;
+  object_class->get_property = gf_crtc_get_property;
+  object_class->set_property = gf_crtc_set_property;
+
+  crtc_properties[PROP_GPU] =
+    g_param_spec_object ("gpu",
+                         "GfGpu",
+                         "GfGpu",
+                         GF_TYPE_GPU,
+                         G_PARAM_READWRITE |
+                         G_PARAM_CONSTRUCT_ONLY |
+                         G_PARAM_STATIC_STRINGS);
+
+  g_object_class_install_properties (object_class, LAST_PROP,
+                                     crtc_properties);
 }
 
 static void
@@ -54,7 +134,11 @@ gf_crtc_init (GfCrtc *crtc)
 GfGpu *
 gf_crtc_get_gpu (GfCrtc *crtc)
 {
-  return crtc->gpu;
+  GfCrtcPrivate *priv;
+
+  priv = gf_crtc_get_instance_private (crtc);
+
+  return priv->gpu;
 }
 
 void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]