summaryrefslogtreecommitdiffstats
path: root/src/virt-viewer-display-vnc.c
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2011-07-11 20:03:32 +0100
committerDaniel P. Berrange <berrange@redhat.com>2011-07-11 20:03:32 +0100
commit1def55556f4b2c37e349117ccfcf1c33130abd10 (patch)
tree5ed1671d426855554f084bb588fc442715a9cfa3 /src/virt-viewer-display-vnc.c
parent9501b9885ac7de3f12e7fa9f30d87bb4ea71664b (diff)
downloadvirt-viewer-1def55556f4b2c37e349117ccfcf1c33130abd10.tar.gz
virt-viewer-1def55556f4b2c37e349117ccfcf1c33130abd10.tar.xz
virt-viewer-1def55556f4b2c37e349117ccfcf1c33130abd10.zip
Split pull part of VirtViewerDisplay out into VirtViewerSession
To facilitate introduction of multi-head support, pull some of the VirtViewerDisplay class out into a new VirtViewerSession class.
Diffstat (limited to 'src/virt-viewer-display-vnc.c')
-rw-r--r--src/virt-viewer-display-vnc.c189
1 files changed, 45 insertions, 144 deletions
diff --git a/src/virt-viewer-display-vnc.c b/src/virt-viewer-display-vnc.c
index e35b48c..53d4728 100644
--- a/src/virt-viewer-display-vnc.c
+++ b/src/virt-viewer-display-vnc.c
@@ -29,61 +29,47 @@
G_DEFINE_TYPE(VirtViewerDisplayVnc, virt_viewer_display_vnc, VIRT_VIEWER_TYPE_DISPLAY)
-static void virt_viewer_display_vnc_close(VirtViewerDisplay* display);
+struct _VirtViewerDisplayVncPrivate {
+ VncDisplay *vnc;
+};
+
+#define VIRT_VIEWER_DISPLAY_VNC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), VIRT_VIEWER_TYPE_DISPLAY_VNC, VirtViewerDisplayVncPrivate))
+
static void virt_viewer_display_vnc_send_keys(VirtViewerDisplay* display, const guint *keyvals, int nkeyvals);
-static GdkPixbuf* virt_viewer_display_vnc_get_pixbuf(VirtViewerDisplay* display);
-static gboolean virt_viewer_display_vnc_open_fd(VirtViewerDisplay* display, int fd);
-static gboolean virt_viewer_display_vnc_open_host(VirtViewerDisplay* display, char *host, char *port);
-static gboolean virt_viewer_display_vnc_channel_open_fd(VirtViewerDisplay* display,
- VirtViewerDisplayChannel* channel, int fd);
+static GdkPixbuf *virt_viewer_display_vnc_get_pixbuf(VirtViewerDisplay* display);
static void
-virt_viewer_display_vnc_class_init(VirtViewerDisplayVncClass *klass)
+virt_viewer_display_vnc_finalize(GObject *obj)
{
- VirtViewerDisplayClass *dclass = VIRT_VIEWER_DISPLAY_CLASS(klass);
+ VirtViewerDisplayVnc *vnc = VIRT_VIEWER_DISPLAY_VNC(obj);
- dclass->close = virt_viewer_display_vnc_close;
- dclass->send_keys = virt_viewer_display_vnc_send_keys;
- dclass->get_pixbuf = virt_viewer_display_vnc_get_pixbuf;
- dclass->open_fd = virt_viewer_display_vnc_open_fd;
- dclass->open_host = virt_viewer_display_vnc_open_host;
- dclass->channel_open_fd = virt_viewer_display_vnc_channel_open_fd;
-}
+ g_object_unref(vnc->priv->vnc);
-static void
-virt_viewer_display_vnc_init(VirtViewerDisplayVnc *self G_GNUC_UNUSED)
-{
+ G_OBJECT_CLASS(virt_viewer_display_vnc_parent_class)->finalize(obj);
}
-static void
-virt_viewer_display_vnc_connected(VncDisplay *vnc G_GNUC_UNUSED,
- VirtViewerDisplay *display)
-{
- g_signal_emit_by_name(display, "display-connected");
-}
static void
-virt_viewer_display_vnc_disconnected(VncDisplay *vnc G_GNUC_UNUSED,
- VirtViewerDisplay *display)
+virt_viewer_display_vnc_class_init(VirtViewerDisplayVncClass *klass)
{
- g_signal_emit_by_name(display, "display-disconnected");
-}
+ VirtViewerDisplayClass *dclass = VIRT_VIEWER_DISPLAY_CLASS(klass);
+ GObjectClass *oclass = G_OBJECT_CLASS(klass);
-static void
-virt_viewer_display_vnc_initialized(VncDisplay *vnc G_GNUC_UNUSED,
- VirtViewerDisplay *display)
-{
- g_signal_emit_by_name(display, "display-initialized");
+ oclass->finalize = virt_viewer_display_vnc_finalize;
+
+ dclass->send_keys = virt_viewer_display_vnc_send_keys;
+ dclass->get_pixbuf = virt_viewer_display_vnc_get_pixbuf;
+
+ g_type_class_add_private(oclass, sizeof(VirtViewerDisplayVncPrivate));
}
static void
-virt_viewer_display_vnc_cut_text(VncDisplay *vnc G_GNUC_UNUSED,
- const char *text,
- VirtViewerDisplay *display)
+virt_viewer_display_vnc_init(VirtViewerDisplayVnc *self G_GNUC_UNUSED)
{
- g_signal_emit_by_name(display, "display-cut-text", text);
+ self->priv = VIRT_VIEWER_DISPLAY_VNC_GET_PRIVATE(self);
}
+
static void
virt_viewer_display_vnc_mouse_grab(VncDisplay *vnc G_GNUC_UNUSED,
VirtViewerDisplay *display)
@@ -122,93 +108,23 @@ virt_viewer_display_vnc_send_keys(VirtViewerDisplay* display,
g_return_if_fail(self != NULL);
g_return_if_fail(keyvals != NULL);
- g_return_if_fail(self->vnc != NULL);
+ g_return_if_fail(self->priv->vnc != NULL);
- vnc_display_send_keys(self->vnc, keyvals, nkeyvals);
+ vnc_display_send_keys(self->priv->vnc, keyvals, nkeyvals);
}
-static GdkPixbuf*
+
+static GdkPixbuf *
virt_viewer_display_vnc_get_pixbuf(VirtViewerDisplay* display)
{
VirtViewerDisplayVnc *self = VIRT_VIEWER_DISPLAY_VNC(display);
g_return_val_if_fail(self != NULL, NULL);
- g_return_val_if_fail(self->vnc != NULL, NULL);
-
- return vnc_display_get_pixbuf(self->vnc);
-}
-
-static gboolean
-virt_viewer_display_vnc_open_fd(VirtViewerDisplay* display,
- int fd)
-{
- VirtViewerDisplayVnc *self = VIRT_VIEWER_DISPLAY_VNC(display);
-
- g_return_val_if_fail(self != NULL, FALSE);
- g_return_val_if_fail(self->vnc != NULL, FALSE);
+ g_return_val_if_fail(self->priv->vnc != NULL, NULL);
- return vnc_display_open_fd(self->vnc, fd);
+ return vnc_display_get_pixbuf(self->priv->vnc);
}
-static gboolean
-virt_viewer_display_vnc_channel_open_fd(VirtViewerDisplay* display G_GNUC_UNUSED,
- VirtViewerDisplayChannel* channel G_GNUC_UNUSED,
- int fd G_GNUC_UNUSED)
-{
- g_warning("channel_open_fd is not supported by VNC");
- return FALSE;
-}
-
-static gboolean
-virt_viewer_display_vnc_open_host(VirtViewerDisplay* display,
- char *host,
- char *port)
-{
- VirtViewerDisplayVnc *self = VIRT_VIEWER_DISPLAY_VNC(display);
-
- g_return_val_if_fail(self != NULL, FALSE);
- g_return_val_if_fail(self->vnc != NULL, FALSE);
-
- return vnc_display_open_host(self->vnc, host, port);
-}
-
-static void
-virt_viewer_display_vnc_close(VirtViewerDisplay* display)
-{
- VirtViewerDisplayVnc *self = VIRT_VIEWER_DISPLAY_VNC(display);
-
- g_return_if_fail(self != NULL);
-
- if (self->vnc != NULL)
- vnc_display_close(self->vnc);
- }
-
-static void
-virt_viewer_display_vnc_bell(VncDisplay *vnc G_GNUC_UNUSED,
- VirtViewerDisplay *display)
-{
- g_signal_emit_by_name(display, "display-bell");
-}
-
-static void
-virt_viewer_display_vnc_auth_unsupported(VncDisplay *vnc G_GNUC_UNUSED,
- unsigned int authType,
- VirtViewerDisplay *display)
-{
- char *msg = g_strdup_printf(_("Unsupported authentication type %d"),
- authType);
- g_signal_emit_by_name(display, "display-auth-failed", msg);
- g_free(msg);
-}
-
-static void
-virt_viewer_display_vnc_auth_failure(VncDisplay *vnc G_GNUC_UNUSED,
- const char *reason,
- VirtViewerDisplay *display)
-{
-
- g_signal_emit_by_name(display, "display-auth-refused", reason);
-}
/*
* Called when desktop size changes.
@@ -229,16 +145,19 @@ virt_viewer_display_vnc_resize_desktop(VncDisplay *vnc G_GNUC_UNUSED,
GtkWidget *
-virt_viewer_display_vnc_new(void)
+virt_viewer_display_vnc_new(VncDisplay *vnc)
{
VirtViewerDisplayVnc *display;
display = g_object_new(VIRT_VIEWER_TYPE_DISPLAY_VNC, NULL);
- display->vnc = VNC_DISPLAY(vnc_display_new());
- gtk_container_add(GTK_CONTAINER(display), GTK_WIDGET(display->vnc));
- vnc_display_set_keyboard_grab(display->vnc, TRUE);
- vnc_display_set_pointer_grab(display->vnc, TRUE);
+ g_object_ref(vnc);
+ g_object_ref(vnc); /* Because gtk_container_add steals the first ref */
+ display->priv->vnc = vnc;
+
+ gtk_container_add(GTK_CONTAINER(display), GTK_WIDGET(display->priv->vnc));
+ vnc_display_set_keyboard_grab(display->priv->vnc, TRUE);
+ vnc_display_set_pointer_grab(display->priv->vnc, TRUE);
/*
* In auto-resize mode we have things setup so that we always
@@ -249,40 +168,22 @@ virt_viewer_display_vnc_new(void)
* We disable force_size because we want to allow user to
* manually size the widget smaller too
*/
- vnc_display_set_force_size(display->vnc, FALSE);
- vnc_display_set_scaling(display->vnc, TRUE);
-
- g_signal_connect(display->vnc, "vnc-connected",
- G_CALLBACK(virt_viewer_display_vnc_connected), display);
- g_signal_connect(display->vnc, "vnc-initialized",
- G_CALLBACK(virt_viewer_display_vnc_initialized), display);
- g_signal_connect(display->vnc, "vnc-disconnected",
- G_CALLBACK(virt_viewer_display_vnc_disconnected), display);
+ vnc_display_set_force_size(display->priv->vnc, FALSE);
+ vnc_display_set_scaling(display->priv->vnc, TRUE);
/* When VNC desktop resizes, we have to resize the containing widget */
- g_signal_connect(display->vnc, "vnc-desktop-resize",
+ g_signal_connect(display->priv->vnc, "vnc-desktop-resize",
G_CALLBACK(virt_viewer_display_vnc_resize_desktop), display);
- g_signal_connect(display->vnc, "vnc-bell",
- G_CALLBACK(virt_viewer_display_vnc_bell), display);
- g_signal_connect(display->vnc, "vnc-auth-failure",
- G_CALLBACK(virt_viewer_display_vnc_auth_failure), display);
- g_signal_connect(display->vnc, "vnc-auth-unsupported",
- G_CALLBACK(virt_viewer_display_vnc_auth_unsupported), display);
- g_signal_connect(display->vnc, "vnc-server-cut-text",
- G_CALLBACK(virt_viewer_display_vnc_cut_text), display);
-
- g_signal_connect(display->vnc, "vnc-pointer-grab",
+
+ g_signal_connect(display->priv->vnc, "vnc-pointer-grab",
G_CALLBACK(virt_viewer_display_vnc_mouse_grab), display);
- g_signal_connect(display->vnc, "vnc-pointer-ungrab",
+ g_signal_connect(display->priv->vnc, "vnc-pointer-ungrab",
G_CALLBACK(virt_viewer_display_vnc_mouse_ungrab), display);
- g_signal_connect(display->vnc, "vnc-keyboard-grab",
+ g_signal_connect(display->priv->vnc, "vnc-keyboard-grab",
G_CALLBACK(virt_viewer_display_vnc_key_grab), display);
- g_signal_connect(display->vnc, "vnc-keyboard-ungrab",
+ g_signal_connect(display->priv->vnc, "vnc-keyboard-ungrab",
G_CALLBACK(virt_viewer_display_vnc_key_ungrab), display);
- g_signal_connect(display->vnc, "vnc-auth-credential",
- G_CALLBACK(virt_viewer_auth_vnc_credentials), NULL);
-
return GTK_WIDGET(display);
}