[gnome-flashback] output: make implementations inherit GfOutput



commit b90f29aa4b6660ecda8b910bd7a2b2b062055a92
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Fri Jul 10 12:45:32 2020 +0300

    output: make implementations inherit GfOutput
    
    Based on mutter commit:
    https://gitlab.gnome.org/GNOME/mutter/-/commit/4a4f2d8264d0f961a806

 backends/gf-gpu-xrandr.c             | 14 +++++------
 backends/gf-monitor-manager-xrandr.c |  6 ++---
 backends/gf-output-private.h         | 13 ++++------
 backends/gf-output-xrandr-private.h  | 20 +++++++++-------
 backends/gf-output-xrandr.c          | 46 +++++++++++++++++++++++++++---------
 backends/gf-output.c                 |  5 +---
 6 files changed, 63 insertions(+), 41 deletions(-)
---
diff --git a/backends/gf-gpu-xrandr.c b/backends/gf-gpu-xrandr.c
index d3ffd78..5f98125 100644
--- a/backends/gf-gpu-xrandr.c
+++ b/backends/gf-gpu-xrandr.c
@@ -189,15 +189,15 @@ gf_gpu_xrandr_read_current (GfGpu   *gpu,
 
       if (xrandr_output->connection != RR_Disconnected)
         {
-          GfOutput *output;
+          GfOutputXrandr *output_xrandr;
 
-          output = gf_create_xrandr_output (gpu_xrandr,
-                                            xrandr_output,
-                                            output_id,
-                                            primary_output);
+          output_xrandr = gf_output_xrandr_new (gpu_xrandr,
+                                                xrandr_output,
+                                                output_id,
+                                                primary_output);
 
-          if (output)
-            outputs = g_list_prepend (outputs, output);
+          if (output_xrandr)
+            outputs = g_list_prepend (outputs, output_xrandr);
         }
 
       XRRFreeOutputInfo (xrandr_output);
diff --git a/backends/gf-monitor-manager-xrandr.c b/backends/gf-monitor-manager-xrandr.c
index d05f13a..d47912b 100644
--- a/backends/gf-monitor-manager-xrandr.c
+++ b/backends/gf-monitor-manager-xrandr.c
@@ -549,7 +549,7 @@ apply_crtc_assignments (GfMonitorManager    *manager,
       GfOutputAssignment *output_assignment = outputs[i];
       GfOutput *output = output_assignment->output;
 
-      gf_output_xrandr_apply_mode (output);
+      gf_output_xrandr_apply_mode (GF_OUTPUT_XRANDR (output));
     }
 
   for (l = to_configure_outputs; l; l = l->next)
@@ -732,7 +732,7 @@ static GBytes *
 gf_monitor_manager_xrandr_read_edid (GfMonitorManager *manager,
                                      GfOutput         *output)
 {
-  return gf_output_xrandr_read_edid (output);
+  return gf_output_xrandr_read_edid (GF_OUTPUT_XRANDR (output));
 }
 
 static void
@@ -900,7 +900,7 @@ gf_monitor_manager_xrandr_change_backlight (GfMonitorManager *manager,
                                             GfOutput         *output,
                                             gint              value)
 {
-  gf_output_xrandr_change_backlight (output, value);
+  gf_output_xrandr_change_backlight (GF_OUTPUT_XRANDR (output), value);
 }
 
 static void
diff --git a/backends/gf-output-private.h b/backends/gf-output-private.h
index f7cbbb0..6879076 100644
--- a/backends/gf-output-private.h
+++ b/backends/gf-output-private.h
@@ -41,17 +41,14 @@ typedef struct
   gboolean  is_underscanning;
 } GfOutputAssignment;
 
-struct _GfOutput
-{
-  GObject        parent;
+#define GF_TYPE_OUTPUT (gf_output_get_type ())
+G_DECLARE_DERIVABLE_TYPE (GfOutput, gf_output, GF, OUTPUT, GObject)
 
-  gpointer       driver_private;
-  GDestroyNotify driver_notify;
+struct _GfOutputClass
+{
+  GObjectClass parent_class;
 };
 
-#define GF_TYPE_OUTPUT (gf_output_get_type ())
-G_DECLARE_FINAL_TYPE (GfOutput, gf_output, GF, OUTPUT, GObject)
-
 uint64_t            gf_output_get_id                    (GfOutput                 *self);
 
 GfGpu              *gf_output_get_gpu                   (GfOutput                 *self);
diff --git a/backends/gf-output-xrandr-private.h b/backends/gf-output-xrandr-private.h
index bedf591..c8a7d32 100644
--- a/backends/gf-output-xrandr-private.h
+++ b/backends/gf-output-xrandr-private.h
@@ -26,17 +26,21 @@
 
 G_BEGIN_DECLS
 
-GfOutput *gf_create_xrandr_output           (GfGpuXrandr   *gpu_xrandr,
-                                             XRROutputInfo *xrandr_output,
-                                             RROutput       output_id,
-                                             RROutput       primary_output);
+#define GF_TYPE_OUTPUT_XRANDR (gf_output_xrandr_get_type ())
+G_DECLARE_FINAL_TYPE (GfOutputXrandr, gf_output_xrandr,
+                      GF, OUTPUT_XRANDR, GfOutput)
 
-GBytes   *gf_output_xrandr_read_edid        (GfOutput      *output);
+GfOutputXrandr *gf_output_xrandr_new             (GfGpuXrandr    *gpu_xrandr,
+                                                  XRROutputInfo  *xrandr_output,
+                                                  RROutput        output_id,
+                                                  RROutput        primary_output);
 
-void      gf_output_xrandr_apply_mode       (GfOutput      *output);
+GBytes        *gf_output_xrandr_read_edid        (GfOutputXrandr *self);
 
-void      gf_output_xrandr_change_backlight (GfOutput      *output,
-                                             int            value);
+void           gf_output_xrandr_apply_mode       (GfOutputXrandr *self);
+
+void           gf_output_xrandr_change_backlight (GfOutputXrandr *self,
+                                                  int             value);
 
 G_END_DECLS
 
diff --git a/backends/gf-output-xrandr.c b/backends/gf-output-xrandr.c
index 7608ac7..cbf2679 100644
--- a/backends/gf-output-xrandr.c
+++ b/backends/gf-output-xrandr.c
@@ -34,6 +34,13 @@
 #include "gf-crtc-private.h"
 #include "gf-monitor-manager-xrandr-private.h"
 
+struct _GfOutputXrandr
+{
+  GfOutput parent;
+};
+
+G_DEFINE_TYPE (GfOutputXrandr, gf_output_xrandr, GF_TYPE_OUTPUT)
+
 static Display *
 xdisplay_from_gpu (GfGpu *gpu)
 {
@@ -781,11 +788,21 @@ output_info_init_backlight_limits_xrandr (GfOutputInfo       *output_info,
   g_free (reply);
 }
 
-GfOutput *
-gf_create_xrandr_output (GfGpuXrandr   *gpu_xrandr,
-                         XRROutputInfo *xrandr_output,
-                         RROutput       output_id,
-                         RROutput       primary_output)
+static void
+gf_output_xrandr_class_init (GfOutputXrandrClass *self_class)
+{
+}
+
+static void
+gf_output_xrandr_init (GfOutputXrandr *self)
+{
+}
+
+GfOutputXrandr *
+gf_output_xrandr_new (GfGpuXrandr   *gpu_xrandr,
+                      XRROutputInfo *xrandr_output,
+                      RROutput       output_id,
+                      RROutput       primary_output)
 {
   GfGpu *gpu;
   GfBackend *backend;
@@ -855,7 +872,7 @@ gf_create_xrandr_output (GfGpuXrandr   *gpu_xrandr,
                                                                                   output_id);
   output_info_init_backlight_limits_xrandr (output_info, xdisplay, output_id);
 
-  output = g_object_new (GF_TYPE_OUTPUT,
+  output = g_object_new (GF_TYPE_OUTPUT_XRANDR,
                          "id", output_id,
                          "gpu", gpu_xrandr,
                          "info", output_info,
@@ -891,15 +908,17 @@ gf_create_xrandr_output (GfGpuXrandr   *gpu_xrandr,
 
   gf_output_info_unref (output_info);
 
-  return output;
+  return GF_OUTPUT_XRANDR (output);
 }
 
 GBytes *
-gf_output_xrandr_read_edid (GfOutput *output)
+gf_output_xrandr_read_edid (GfOutputXrandr *self)
 {
+  GfOutput *output;
   Display *xdisplay;
   RROutput output_id;
 
+  output = GF_OUTPUT (self);
   xdisplay = xdisplay_from_output (output);
   output_id = (RROutput) gf_output_get_id (output);
 
@@ -907,10 +926,12 @@ gf_output_xrandr_read_edid (GfOutput *output)
 }
 
 void
-gf_output_xrandr_apply_mode (GfOutput *output)
+gf_output_xrandr_apply_mode (GfOutputXrandr *self)
 {
+  GfOutput *output;
   Display *xdisplay;
 
+  output = GF_OUTPUT (self);
   xdisplay = xdisplay_from_output (output);
 
   if (gf_output_is_primary (output))
@@ -929,14 +950,17 @@ gf_output_xrandr_apply_mode (GfOutput *output)
 }
 
 void
-gf_output_xrandr_change_backlight (GfOutput *output,
-                                   int       value)
+gf_output_xrandr_change_backlight (GfOutputXrandr *self,
+                                   int             value)
 {
+  GfOutput *output;
   const GfOutputInfo *output_info;
   Display *xdisplay;
   gint hw_value;
   Atom atom;
 
+  output = GF_OUTPUT (self);
+
   output_info = gf_output_get_info (output);
   xdisplay = xdisplay_from_output (output);
   hw_value = round ((double) value / 100.0 * output_info->backlight_max + output_info->backlight_min);
diff --git a/backends/gf-output.c b/backends/gf-output.c
index a26ddf5..b7bf09a 100644
--- a/backends/gf-output.c
+++ b/backends/gf-output.c
@@ -61,7 +61,7 @@ enum
 
 static GParamSpec *output_properties[LAST_PROP] = { NULL };
 
-G_DEFINE_TYPE_WITH_PRIVATE (GfOutput, gf_output, G_TYPE_OBJECT)
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GfOutput, gf_output, G_TYPE_OBJECT)
 
 static void
 gf_output_dispose (GObject *object)
@@ -88,9 +88,6 @@ gf_output_finalize (GObject *object)
 
   g_clear_pointer (&priv->info, gf_output_info_unref);
 
-  if (output->driver_notify)
-    output->driver_notify (output);
-
   G_OBJECT_CLASS (gf_output_parent_class)->finalize (object);
 }
 


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