summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2012-06-16 12:54:27 +0200
committerMarc-André Lureau <marcandre.lureau@redhat.com>2012-07-16 17:46:40 +0200
commitd2e6f651da995ac09b6ba0c03e8b8a347a9a3e51 (patch)
treea1bbe4c42a0ece82b2037a77e50834e7b4a0b0ef
parentd809b2ce54fb61081bc6d3d1f67068093f5532ec (diff)
display: add readonly monitors property
-rw-r--r--gtk/channel-display.c28
-rw-r--r--gtk/channel-display.h10
2 files changed, 38 insertions, 0 deletions
diff --git a/gtk/channel-display.c b/gtk/channel-display.c
index 952628c..f82df4c 100644
--- a/gtk/channel-display.c
+++ b/gtk/channel-display.c
@@ -27,6 +27,7 @@
#include <sys/ipc.h>
#endif
+#include "glib-compat.h"
#include "spice-client.h"
#include "spice-common.h"
@@ -70,6 +71,7 @@ struct _SpiceDisplayChannelPrivate {
int nstreams;
gboolean mark;
guint mark_false_event_id;
+ GArray *monitors;
#ifdef WIN32
HDC dc;
#endif
@@ -82,6 +84,7 @@ enum {
PROP_0,
PROP_WIDTH,
PROP_HEIGHT,
+ PROP_MONITORS
};
enum {
@@ -123,6 +126,9 @@ static void spice_display_channel_dispose(GObject *object)
static void spice_display_channel_finalize(GObject *object)
{
+ SpiceDisplayChannelPrivate *c = SPICE_DISPLAY_CHANNEL(object)->priv;
+
+ g_clear_pointer(&c->monitors, g_array_unref);
clear_surfaces(SPICE_CHANNEL(object), FALSE);
clear_streams(SPICE_CHANNEL(object));
@@ -142,6 +148,8 @@ static void spice_display_channel_constructed(GObject *object)
g_return_if_fail(c->images != NULL);
g_return_if_fail(c->palettes != NULL);
+ c->monitors = g_array_new(FALSE, TRUE, sizeof(SpiceDisplayMonitorConfig));
+
if (G_OBJECT_CLASS(spice_display_channel_parent_class)->constructed)
G_OBJECT_CLASS(spice_display_channel_parent_class)->constructed(object);
}
@@ -165,6 +173,10 @@ static void spice_display_get_property(GObject *object,
g_value_set_uint(value, surface ? surface->height : 0);
break;
}
+ case PROP_MONITORS: {
+ g_value_set_boxed(value, c->monitors);
+ break;
+ }
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
@@ -228,6 +240,22 @@ static void spice_display_channel_class_init(SpiceDisplayChannelClass *klass)
G_PARAM_STATIC_STRINGS));
/**
+ * SpiceDisplayChannel:monitors:
+ *
+ * Current monitors configuration.
+ *
+ * Since: 0.13
+ */
+ g_object_class_install_property
+ (gobject_class, PROP_MONITORS,
+ g_param_spec_boxed("monitors",
+ "Display monitors",
+ "The monitors configuration",
+ G_TYPE_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
* SpiceDisplayChannel::display-primary-create:
* @display: the #SpiceDisplayChannel that emitted the signal
* @format: %SPICE_SURFACE_FMT_32_xRGB or %SPICE_SURFACE_FMT_16_555;
diff --git a/gtk/channel-display.h b/gtk/channel-display.h
index b8d7679..a31aa54 100644
--- a/gtk/channel-display.h
+++ b/gtk/channel-display.h
@@ -33,6 +33,16 @@ typedef struct _SpiceDisplayChannel SpiceDisplayChannel;
typedef struct _SpiceDisplayChannelClass SpiceDisplayChannelClass;
typedef struct _SpiceDisplayChannelPrivate SpiceDisplayChannelPrivate;
+typedef struct _SpiceDisplayMonitorConfig SpiceDisplayMonitorConfig;
+struct _SpiceDisplayMonitorConfig {
+ guint id;
+ guint surface_id;
+ guint x;
+ guint y;
+ guint width;
+ guint height;
+};
+
/**
* SpiceDisplayChannel:
*