[gnome-flashback] monitor-manager: implement SetCrtcGamma
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] monitor-manager: implement SetCrtcGamma
- Date: Thu, 21 Sep 2017 00:09:14 +0000 (UTC)
commit 4043b98904e0b47fcb689b5de0400e76d261d47f
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Thu Sep 21 01:49:45 2017 +0300
monitor-manager: implement SetCrtcGamma
backends/gf-monitor-manager.c | 52 ++++++++++++++++++++++++++++++++++++++--
1 files changed, 49 insertions(+), 3 deletions(-)
---
diff --git a/backends/gf-monitor-manager.c b/backends/gf-monitor-manager.c
index db845ad..61d8047 100644
--- a/backends/gf-monitor-manager.c
+++ b/backends/gf-monitor-manager.c
@@ -860,9 +860,55 @@ gf_monitor_manager_handle_set_crtc_gamma (GfDBusDisplayConfig *skeleton,
GVariant *green_v,
GVariant *blue_v)
{
- g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
- G_DBUS_ERROR_FAILED,
- "Not implemented");
+ GfMonitorManager *manager;
+ GfMonitorManagerClass *manager_class;
+ GfCrtc *crtc;
+ GBytes *red_bytes;
+ GBytes *green_bytes;
+ GBytes *blue_bytes;
+ gsize size, dummy;
+ gushort *red;
+ gushort *green;
+ gushort *blue;
+
+ manager = GF_MONITOR_MANAGER (skeleton);
+ manager_class = GF_MONITOR_MANAGER_GET_CLASS (skeleton);
+
+ if (serial != manager->serial)
+ {
+ g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
+ G_DBUS_ERROR_ACCESS_DENIED,
+ "The requested configuration is based on stale information");
+ return TRUE;
+ }
+
+ if (crtc_id >= manager->n_crtcs)
+ {
+ g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
+ G_DBUS_ERROR_INVALID_ARGS,
+ "Invalid crtc id");
+ return TRUE;
+ }
+
+ crtc = &manager->crtcs[crtc_id];
+
+ red_bytes = g_variant_get_data_as_bytes (red_v);
+ green_bytes = g_variant_get_data_as_bytes (green_v);
+ blue_bytes = g_variant_get_data_as_bytes (blue_v);
+
+ size = g_bytes_get_size (red_bytes) / sizeof (gushort);
+ red = (gushort*) g_bytes_get_data (red_bytes, &dummy);
+ green = (gushort*) g_bytes_get_data (green_bytes, &dummy);
+ blue = (gushort*) g_bytes_get_data (blue_bytes, &dummy);
+
+ if (manager_class->set_crtc_gamma)
+ manager_class->set_crtc_gamma (manager, crtc, size, red, green, blue);
+
+ gf_dbus_display_config_complete_set_crtc_gamma (skeleton, invocation);
+
+ g_bytes_unref (red_bytes);
+ g_bytes_unref (green_bytes);
+ g_bytes_unref (blue_bytes);
return TRUE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]