diff options
author | Daniel P. Berrange <berrange@redhat.com> | 2011-07-11 20:03:32 +0100 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2011-07-11 20:03:32 +0100 |
commit | 1def55556f4b2c37e349117ccfcf1c33130abd10 (patch) | |
tree | 5ed1671d426855554f084bb588fc442715a9cfa3 /src/virt-viewer-display-vnc.c | |
parent | 9501b9885ac7de3f12e7fa9f30d87bb4ea71664b (diff) | |
download | virt-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.c | 189 |
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); } |