From ee25e90ddf3d1f90ab407a85f23502e49b4b1512 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Wed, 16 Apr 2014 10:41:10 +0200 Subject: GnomeRR: Add support for the underscan property To get and set whether overscan compensation is active in a given output. https://bugzilla.gnome.org/show_bug.cgi?id=748560 --- libgnome-desktop/gnome-rr-config.c | 12 +++++++++--- libgnome-desktop/gnome-rr-config.h | 3 +++ libgnome-desktop/gnome-rr-output-info.c | 15 +++++++++++++++ libgnome-desktop/gnome-rr-private.h | 1 + libgnome-desktop/gnome-rr.c | 9 +++++++++ libgnome-desktop/gnome-rr.h | 1 + 6 files changed, 38 insertions(+), 3 deletions(-) diff --git a/libgnome-desktop/gnome-rr-config.c b/libgnome-desktop/gnome-rr-config.c index f739ecd8..f21eb367 100644 --- a/libgnome-desktop/gnome-rr-config.c +++ b/libgnome-desktop/gnome-rr-config.c @@ -217,7 +217,8 @@ gnome_rr_config_load_current (GnomeRRConfig *config, GError **error) } output->priv->primary = gnome_rr_output_get_is_primary (rr_output); - + output->priv->underscanning = gnome_rr_output_get_is_underscanning (rr_output); + g_ptr_array_add (a, output); } @@ -339,6 +340,9 @@ output_equal (GnomeRROutputInfo *output1, GnomeRROutputInfo *output2) if (output1->priv->rotation != output2->priv->rotation) return FALSE; + + if (output1->priv->underscanning != output2->priv->underscanning) + return FALSE; } return TRUE; @@ -1171,9 +1175,11 @@ crtc_assignment_apply (CrtcAssignment *assign, gboolean persistent, GError **err g_variant_builder_add (&output_builder, "(u@a{sv})", gnome_rr_output_get_id (gnome_rr_output), g_variant_new_parsed ("{ 'primary': <%b>," - " 'presentation': <%b> }", + " 'presentation': <%b>," + " 'underscanning': <%b> }", output->priv->primary, - FALSE)); + FALSE, + output->priv->underscanning)); } return _gnome_rr_screen_apply_configuration (assign->screen, diff --git a/libgnome-desktop/gnome-rr-config.h b/libgnome-desktop/gnome-rr-config.h index e13825cc..bfd3e14c 100644 --- a/libgnome-desktop/gnome-rr-config.h +++ b/libgnome-desktop/gnome-rr-config.h @@ -88,6 +88,9 @@ void gnome_rr_output_info_set_primary (GnomeRROutputInfo *self, gboolean pri int gnome_rr_output_info_get_preferred_width (GnomeRROutputInfo *self); int gnome_rr_output_info_get_preferred_height (GnomeRROutputInfo *self); +gboolean gnome_rr_output_info_get_underscanning (GnomeRROutputInfo *self); +void gnome_rr_output_info_set_underscanning (GnomeRROutputInfo *self, gboolean underscanning); + typedef struct _GnomeRRConfig GnomeRRConfig; typedef struct _GnomeRRConfigClass GnomeRRConfigClass; typedef struct _GnomeRRConfigPrivate GnomeRRConfigPrivate; diff --git a/libgnome-desktop/gnome-rr-output-info.c b/libgnome-desktop/gnome-rr-output-info.c index 10bc9775..ff8ce780 100644 --- a/libgnome-desktop/gnome-rr-output-info.c +++ b/libgnome-desktop/gnome-rr-output-info.c @@ -251,3 +251,18 @@ int gnome_rr_output_info_get_preferred_height (GnomeRROutputInfo *self) return self->priv->pref_height; } + +gboolean gnome_rr_output_info_get_underscanning (GnomeRROutputInfo *self) +{ + g_return_val_if_fail (GNOME_IS_RR_OUTPUT_INFO (self), FALSE); + + return self->priv->underscanning; +} + +void gnome_rr_output_info_set_underscanning (GnomeRROutputInfo *self, + gboolean underscanning) +{ + g_return_if_fail (GNOME_IS_RR_OUTPUT_INFO (self)); + + self->priv->underscanning = underscanning; +} diff --git a/libgnome-desktop/gnome-rr-private.h b/libgnome-desktop/gnome-rr-private.h index 5ad2b28e..acf64979 100644 --- a/libgnome-desktop/gnome-rr-private.h +++ b/libgnome-desktop/gnome-rr-private.h @@ -73,6 +73,7 @@ struct _GnomeRROutputInfoPrivate int pref_height; char * display_name; gboolean primary; + gboolean underscanning; }; struct _GnomeRRConfigPrivate diff --git a/libgnome-desktop/gnome-rr.c b/libgnome-desktop/gnome-rr.c index f6364d0b..099cd685 100644 --- a/libgnome-desktop/gnome-rr.c +++ b/libgnome-desktop/gnome-rr.c @@ -80,6 +80,7 @@ struct GnomeRROutput gboolean is_primary; gboolean is_presentation; + gboolean is_underscanning; }; struct GnomeRRCrtc @@ -1265,6 +1266,7 @@ output_initialize (GnomeRROutput *output, GVariant *info) g_variant_lookup (properties, "min-backlight-step", "i", &output->min_backlight_step); g_variant_lookup (properties, "primary", "b", &output->is_primary); g_variant_lookup (properties, "presentation", "b", &output->is_presentation); + g_variant_lookup (properties, "underscanning", "b", &output->is_underscanning); if ((edid = g_variant_lookup_value (properties, "edid", G_VARIANT_TYPE ("ay")))) { @@ -2031,3 +2033,10 @@ gnome_rr_crtc_get_gamma (GnomeRRCrtc *crtc, return TRUE; } + +gboolean +gnome_rr_output_get_is_underscanning (GnomeRROutput *output) +{ + g_assert(output != NULL); + return output->is_underscanning; +} diff --git a/libgnome-desktop/gnome-rr.h b/libgnome-desktop/gnome-rr.h index 4fe13204..742edbbb 100644 --- a/libgnome-desktop/gnome-rr.h +++ b/libgnome-desktop/gnome-rr.h @@ -171,6 +171,7 @@ GnomeRRMode * gnome_rr_output_get_preferred_mode (GnomeRROutput *outpu gboolean gnome_rr_output_supports_mode (GnomeRROutput *output, GnomeRRMode *mode); gboolean gnome_rr_output_get_is_primary (GnomeRROutput *output); +gboolean gnome_rr_output_get_is_underscanning (GnomeRROutput *output); /* GnomeRRMode */ guint32 gnome_rr_mode_get_id (GnomeRRMode *mode); -- cgit v1.2.1