[gnome-flashback] output: make implementations inherit GfOutput
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] output: make implementations inherit GfOutput
- Date: Sat, 11 Jul 2020 18:42:55 +0000 (UTC)
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]