Codebase list virt-viewer / 4973411
src: convert VirtViewerSessionVnc to G_DECLARE_FINAL_TYPE This removes the use of a private data struct. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> Daniel P. Berrangé 3 years ago
2 changed file(s) with 97 addition(s) and 121 deletion(s). Raw diff Collapse all Expand all
3333 #include <glib/gi18n.h>
3434 #include <libxml/uri.h>
3535
36 struct _VirtViewerSessionVncPrivate {
36 struct _VirtViewerSessionVnc {
37 VirtViewerSession parent;
3738 GtkWindow *main_window;
3839 /* XXX we should really just have a VncConnection */
3940 VncDisplay *vnc;
4041 gboolean auth_dialog_cancelled;
4142 };
4243
43 G_DEFINE_TYPE_WITH_PRIVATE(VirtViewerSessionVnc, virt_viewer_session_vnc, VIRT_VIEWER_TYPE_SESSION)
44 G_DEFINE_TYPE(VirtViewerSessionVnc, virt_viewer_session_vnc, VIRT_VIEWER_TYPE_SESSION)
4445
4546 static void virt_viewer_session_vnc_close(VirtViewerSession* session);
4647 static gboolean virt_viewer_session_vnc_open_fd(VirtViewerSession* session, int fd);
5354 static void
5455 virt_viewer_session_vnc_finalize(GObject *obj)
5556 {
56 VirtViewerSessionVnc *vnc = VIRT_VIEWER_SESSION_VNC(obj);
57
58 if (vnc->priv->vnc) {
59 vnc_display_close(vnc->priv->vnc);
60 g_object_unref(vnc->priv->vnc);
61 }
62 if (vnc->priv->main_window)
63 g_object_unref(vnc->priv->main_window);
57 VirtViewerSessionVnc *self = VIRT_VIEWER_SESSION_VNC(obj);
58
59 if (self->vnc) {
60 vnc_display_close(self->vnc);
61 g_object_unref(self->vnc);
62 }
63 if (self->main_window)
64 g_object_unref(self->main_window);
6465
6566 G_OBJECT_CLASS(virt_viewer_session_vnc_parent_class)->finalize(obj);
6667 }
9091 static void
9192 virt_viewer_session_vnc_init(VirtViewerSessionVnc *self G_GNUC_UNUSED)
9293 {
93 self->priv = virt_viewer_session_vnc_get_instance_private(self);
9494 }
9595
9696 static void
9797 virt_viewer_session_vnc_connected(VncDisplay *vnc G_GNUC_UNUSED,
98 VirtViewerSessionVnc *session)
99 {
100 GtkWidget *display = virt_viewer_display_vnc_new(session, session->priv->vnc);
101 VirtViewerApp *app = virt_viewer_session_get_app(VIRT_VIEWER_SESSION(session));
102
103 session->priv->auth_dialog_cancelled = FALSE;
98 VirtViewerSessionVnc *self)
99 {
100 GtkWidget *display = virt_viewer_display_vnc_new(self, self->vnc);
101 VirtViewerApp *app = virt_viewer_session_get_app(VIRT_VIEWER_SESSION(self));
102
103 self->auth_dialog_cancelled = FALSE;
104104
105105 virt_viewer_window_set_display(virt_viewer_app_get_main_window(app),
106106 VIRT_VIEWER_DISPLAY(display));
107107
108 g_signal_emit_by_name(session, "session-connected");
109 virt_viewer_session_add_display(VIRT_VIEWER_SESSION(session),
108 g_signal_emit_by_name(self, "session-connected");
109 virt_viewer_session_add_display(VIRT_VIEWER_SESSION(self),
110110 VIRT_VIEWER_DISPLAY(display));
111111 }
112112
113113 static void
114114 virt_viewer_session_vnc_disconnected(VncDisplay *vnc G_GNUC_UNUSED,
115 VirtViewerSessionVnc *session)
115 VirtViewerSessionVnc *self)
116116 {
117117 GtkWidget *display;
118 if (session->priv->auth_dialog_cancelled)
118 if (self->auth_dialog_cancelled)
119119 return;
120120
121 virt_viewer_session_clear_displays(VIRT_VIEWER_SESSION(session));
122 display = virt_viewer_display_vnc_new(session, session->priv->vnc);
121 virt_viewer_session_clear_displays(VIRT_VIEWER_SESSION(self));
122 display = virt_viewer_display_vnc_new(self, self->vnc);
123123 g_debug("Disconnected");
124 g_signal_emit_by_name(session, "session-disconnected", NULL);
124 g_signal_emit_by_name(self, "session-disconnected", NULL);
125125 virt_viewer_display_set_enabled(VIRT_VIEWER_DISPLAY(display), FALSE);
126126 virt_viewer_display_set_show_hint(VIRT_VIEWER_DISPLAY(display),
127127 VIRT_VIEWER_DISPLAY_SHOW_HINT_READY, FALSE);
187187 VirtViewerSessionVnc *self = VIRT_VIEWER_SESSION_VNC(session);
188188
189189 g_return_val_if_fail(self != NULL, FALSE);
190 g_return_val_if_fail(self->priv->vnc != NULL, FALSE);
191
192 return vnc_display_open_fd(self->priv->vnc, fd);
190 g_return_val_if_fail(self->vnc != NULL, FALSE);
191
192 return vnc_display_open_fd(self->vnc, fd);
193193 }
194194
195195 static gboolean
210210 VirtViewerSessionVnc *self = VIRT_VIEWER_SESSION_VNC(session);
211211
212212 g_return_val_if_fail(self != NULL, FALSE);
213 g_return_val_if_fail(self->priv->vnc != NULL, FALSE);
214
215 return vnc_display_open_host(self->priv->vnc, host, port);
213 g_return_val_if_fail(self->vnc != NULL, FALSE);
214
215 return vnc_display_open_host(self->vnc, host, port);
216216 }
217217
218218 static gboolean
228228 gboolean ret;
229229
230230 g_return_val_if_fail(self != NULL, FALSE);
231 g_return_val_if_fail(self->priv->vnc != NULL, FALSE);
231 g_return_val_if_fail(self->vnc != NULL, FALSE);
232232
233233 if (file) {
234234 g_return_val_if_fail(virt_viewer_file_is_set(file, "port"), FALSE);
260260 xmlFreeURI(uri);
261261 }
262262
263 ret = vnc_display_open_host(self->priv->vnc,
263 ret = vnc_display_open_host(self->vnc,
264264 hoststr,
265265 portstr);
266266 g_free(portstr);
295295 break;
296296 default:
297297 g_debug("Unsupported credential type %d", g_value_get_enum(cred));
298 vnc_display_close(self->priv->vnc);
298 vnc_display_close(self->vnc);
299299 goto cleanup;
300300 }
301301 }
317317 }
318318
319319 if (wantUsername || wantPassword) {
320 gboolean ret = virt_viewer_auth_collect_credentials(self->priv->main_window,
320 gboolean ret = virt_viewer_auth_collect_credentials(self->main_window,
321321 "VNC", NULL,
322322 wantUsername ? &username : NULL,
323323 wantPassword ? &password : NULL);
324324
325325 if (!ret) {
326 vnc_display_close(self->priv->vnc);
327 self->priv->auth_dialog_cancelled = TRUE;
326 vnc_display_close(self->vnc);
327 self->auth_dialog_cancelled = TRUE;
328328 g_signal_emit_by_name(self, "session-cancelled");
329329 goto cleanup;
330330 }
335335 switch (g_value_get_enum(cred)) {
336336 case VNC_DISPLAY_CREDENTIAL_USERNAME:
337337 if (!username ||
338 vnc_display_set_credential(self->priv->vnc,
338 vnc_display_set_credential(self->vnc,
339339 g_value_get_enum(cred),
340340 username)) {
341341 g_debug("Failed to set credential type %d", g_value_get_enum(cred));
342 vnc_display_close(self->priv->vnc);
342 vnc_display_close(self->vnc);
343343 }
344344 break;
345345 case VNC_DISPLAY_CREDENTIAL_PASSWORD:
346346 if (!password ||
347 vnc_display_set_credential(self->priv->vnc,
347 vnc_display_set_credential(self->vnc,
348348 g_value_get_enum(cred),
349349 password)) {
350350 g_debug("Failed to set credential type %d", g_value_get_enum(cred));
351 vnc_display_close(self->priv->vnc);
351 vnc_display_close(self->vnc);
352352 }
353353 break;
354354 case VNC_DISPLAY_CREDENTIAL_CLIENTNAME:
355 if (vnc_display_set_credential(self->priv->vnc,
355 if (vnc_display_set_credential(self->vnc,
356356 g_value_get_enum(cred),
357357 "libvirt")) {
358358 g_debug("Failed to set credential type %d", g_value_get_enum(cred));
359 vnc_display_close(self->priv->vnc);
359 vnc_display_close(self->vnc);
360360 }
361361 break;
362362 default:
363363 g_debug("Unsupported credential type %d", g_value_get_enum(cred));
364 vnc_display_close(self->priv->vnc);
364 vnc_display_close(self->vnc);
365365 }
366366 }
367367
378378
379379 g_return_if_fail(self != NULL);
380380
381 g_debug("close vnc=%p", self->priv->vnc);
382 if (self->priv->vnc != NULL) {
381 g_debug("close vnc=%p", self->vnc);
382 if (self->vnc != NULL) {
383383 virt_viewer_session_clear_displays(session);
384 vnc_display_close(self->priv->vnc);
385 g_object_unref(self->priv->vnc);
386 }
387
388 self->priv->vnc = VNC_DISPLAY(vnc_display_new());
389 g_object_ref_sink(self->priv->vnc);
390
391 g_signal_connect(self->priv->vnc, "vnc-connected",
384 vnc_display_close(self->vnc);
385 g_object_unref(self->vnc);
386 }
387
388 self->vnc = VNC_DISPLAY(vnc_display_new());
389 g_object_ref_sink(self->vnc);
390
391 g_signal_connect(self->vnc, "vnc-connected",
392392 G_CALLBACK(virt_viewer_session_vnc_connected), session);
393 g_signal_connect(self->priv->vnc, "vnc-initialized",
393 g_signal_connect(self->vnc, "vnc-initialized",
394394 G_CALLBACK(virt_viewer_session_vnc_initialized), session);
395 g_signal_connect(self->priv->vnc, "vnc-disconnected",
395 g_signal_connect(self->vnc, "vnc-disconnected",
396396 G_CALLBACK(virt_viewer_session_vnc_disconnected), session);
397 g_signal_connect(self->priv->vnc, "vnc-error",
397 g_signal_connect(self->vnc, "vnc-error",
398398 G_CALLBACK(virt_viewer_session_vnc_error), session);
399399
400 g_signal_connect(self->priv->vnc, "vnc-bell",
400 g_signal_connect(self->vnc, "vnc-bell",
401401 G_CALLBACK(virt_viewer_session_vnc_bell), session);
402 g_signal_connect(self->priv->vnc, "vnc-auth-failure",
402 g_signal_connect(self->vnc, "vnc-auth-failure",
403403 G_CALLBACK(virt_viewer_session_vnc_auth_failure), session);
404 g_signal_connect(self->priv->vnc, "vnc-auth-unsupported",
404 g_signal_connect(self->vnc, "vnc-auth-unsupported",
405405 G_CALLBACK(virt_viewer_session_vnc_auth_unsupported), session);
406 g_signal_connect(self->priv->vnc, "vnc-server-cut-text",
406 g_signal_connect(self->vnc, "vnc-server-cut-text",
407407 G_CALLBACK(virt_viewer_session_vnc_cut_text), session);
408408
409 g_signal_connect(self->priv->vnc, "vnc-auth-credential",
409 g_signal_connect(self->vnc, "vnc-auth-credential",
410410 G_CALLBACK(virt_viewer_session_vnc_auth_credential), session);
411411
412412 }
414414 VirtViewerSession *
415415 virt_viewer_session_vnc_new(VirtViewerApp *app, GtkWindow *main_window)
416416 {
417 VirtViewerSessionVnc *session;
418
419 session = g_object_new(VIRT_VIEWER_TYPE_SESSION_VNC, "app", app, NULL);
420
421 session->priv->vnc = VNC_DISPLAY(vnc_display_new());
422 g_object_ref_sink(session->priv->vnc);
423 session->priv->main_window = g_object_ref(main_window);
424
425 vnc_display_set_shared_flag(session->priv->vnc,
417 VirtViewerSessionVnc *self;
418
419 self = g_object_new(VIRT_VIEWER_TYPE_SESSION_VNC, "app", app, NULL);
420
421 self->vnc = VNC_DISPLAY(vnc_display_new());
422 g_object_ref_sink(self->vnc);
423 self->main_window = g_object_ref(main_window);
424
425 vnc_display_set_shared_flag(self->vnc,
426426 virt_viewer_app_get_shared(app));
427427
428 g_signal_connect(session->priv->vnc, "vnc-connected",
429 G_CALLBACK(virt_viewer_session_vnc_connected), session);
430 g_signal_connect(session->priv->vnc, "vnc-initialized",
431 G_CALLBACK(virt_viewer_session_vnc_initialized), session);
432 g_signal_connect(session->priv->vnc, "vnc-disconnected",
433 G_CALLBACK(virt_viewer_session_vnc_disconnected), session);
434 g_signal_connect(session->priv->vnc, "vnc-error",
435 G_CALLBACK(virt_viewer_session_vnc_error), session);
436
437 g_signal_connect(session->priv->vnc, "vnc-bell",
438 G_CALLBACK(virt_viewer_session_vnc_bell), session);
439 g_signal_connect(session->priv->vnc, "vnc-auth-failure",
440 G_CALLBACK(virt_viewer_session_vnc_auth_failure), session);
441 g_signal_connect(session->priv->vnc, "vnc-auth-unsupported",
442 G_CALLBACK(virt_viewer_session_vnc_auth_unsupported), session);
443 g_signal_connect(session->priv->vnc, "vnc-server-cut-text",
444 G_CALLBACK(virt_viewer_session_vnc_cut_text), session);
445
446 g_signal_connect(session->priv->vnc, "vnc-auth-credential",
447 G_CALLBACK(virt_viewer_session_vnc_auth_credential), session);
448
449 return VIRT_VIEWER_SESSION(session);
428 g_signal_connect(self->vnc, "vnc-connected",
429 G_CALLBACK(virt_viewer_session_vnc_connected), self);
430 g_signal_connect(self->vnc, "vnc-initialized",
431 G_CALLBACK(virt_viewer_session_vnc_initialized), self);
432 g_signal_connect(self->vnc, "vnc-disconnected",
433 G_CALLBACK(virt_viewer_session_vnc_disconnected), self);
434 g_signal_connect(self->vnc, "vnc-error",
435 G_CALLBACK(virt_viewer_session_vnc_error), self);
436
437 g_signal_connect(self->vnc, "vnc-bell",
438 G_CALLBACK(virt_viewer_session_vnc_bell), self);
439 g_signal_connect(self->vnc, "vnc-auth-failure",
440 G_CALLBACK(virt_viewer_session_vnc_auth_failure), self);
441 g_signal_connect(self->vnc, "vnc-auth-unsupported",
442 G_CALLBACK(virt_viewer_session_vnc_auth_unsupported), self);
443 g_signal_connect(self->vnc, "vnc-server-cut-text",
444 G_CALLBACK(virt_viewer_session_vnc_cut_text), self);
445
446 g_signal_connect(self->vnc, "vnc-auth-credential",
447 G_CALLBACK(virt_viewer_session_vnc_auth_credential), self);
448
449 return VIRT_VIEWER_SESSION(self);
450450 }
451451
452452 /*
3131 G_BEGIN_DECLS
3232
3333 #define VIRT_VIEWER_TYPE_SESSION_VNC virt_viewer_session_vnc_get_type()
34
35 #define VIRT_VIEWER_SESSION_VNC(obj) \
36 (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIRT_VIEWER_TYPE_SESSION_VNC, VirtViewerSessionVnc))
37
38 #define VIRT_VIEWER_SESSION_VNC_CLASS(klass) \
39 (G_TYPE_CHECK_CLASS_CAST ((klass), VIRT_VIEWER_TYPE_SESSION_VNC, VirtViewerSessionVncClass))
40
41 #define VIRT_VIEWER_IS_SESSION_VNC(obj) \
42 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIRT_VIEWER_TYPE_SESSION_VNC))
43
44 #define VIRT_VIEWER_IS_SESSION_VNC_CLASS(klass) \
45 (G_TYPE_CHECK_CLASS_TYPE ((klass), VIRT_VIEWER_TYPE_SESSION_VNC))
46
47 #define VIRT_VIEWER_SESSION_VNC_GET_CLASS(obj) \
48 (G_TYPE_INSTANCE_GET_CLASS ((obj), VIRT_VIEWER_TYPE_SESSION_VNC, VirtViewerSessionVncClass))
49
50 typedef struct _VirtViewerSessionVnc VirtViewerSessionVnc;
51 typedef struct _VirtViewerSessionVncClass VirtViewerSessionVncClass;
52 typedef struct _VirtViewerSessionVncPrivate VirtViewerSessionVncPrivate;
53
54 struct _VirtViewerSessionVnc {
55 VirtViewerSession parent;
56
57 VirtViewerSessionVncPrivate *priv;
58 };
59
60 struct _VirtViewerSessionVncClass {
61 VirtViewerSessionClass parent_class;
62 };
34 G_DECLARE_FINAL_TYPE(VirtViewerSessionVnc,
35 virt_viewer_session_vnc,
36 VIRT_VIEWER,
37 SESSION_VNC,
38 VirtViewerSession)
6339
6440 GType virt_viewer_session_vnc_get_type(void);
6541