*src/virt-viewer-session-spice.c sending out 'session-cancelled' when the cancel buttion is clicked. *src/virt-viewer-session.c register a the new signal. *src/virt-viewer-session.h default callback. --- src/virt-viewer-session-spice.c | 10 ++++++---- src/virt-viewer-session.c | 9 +++++++++ src/virt-viewer-session.h | 1 + 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c index d0d6e29..3af9350 100644 --- a/src/virt-viewer-session-spice.c +++ b/src/virt-viewer-session-spice.c @@ -193,12 +193,14 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel *channel G_GNUC_UNUSED int ret = virt_viewer_auth_collect_credentials("SPICE", NULL, NULL, &password); - if (ret < 0) { - g_signal_emit_by_name(session, "session-auth-refused", - _("Unable to collect credentials")); - } else { + if (ret == 1) { g_object_set(self->priv->session, "password", password, NULL); spice_session_connect(self->priv->session); + } else if (ret == -1) { + g_signal_emit_by_name(session, "session-cancelled"); + } else { + g_signal_emit_by_name(session, "session-auth-refused", + _("Unable to collect credentials")); } break; default: diff --git a/src/virt-viewer-session.c b/src/virt-viewer-session.c index d151238..e234042 100644 --- a/src/virt-viewer-session.c +++ b/src/virt-viewer-session.c @@ -164,6 +164,15 @@ virt_viewer_session_class_init(VirtViewerSessionClass *class) G_TYPE_NONE, 0); + g_signal_new("session-cancelled", + G_OBJECT_CLASS_TYPE(object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(VirtViewerSessionClass, session_cancelled), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); + g_type_class_add_private(object_class, sizeof(VirtViewerSessionPrivate)); } diff --git a/src/virt-viewer-session.h b/src/virt-viewer-session.h index 48c8de3..f2f345a 100644 --- a/src/virt-viewer-session.h +++ b/src/virt-viewer-session.h @@ -86,6 +86,7 @@ struct _VirtViewerSessionClass { void (*session_cut_text)(VirtViewerSession *session, const char *str); void (*session_bell)(VirtViewerSession *session); + void (*session_cancelled)(VirtViewerSession *session); }; GType virt_viewer_session_get_type(void); -- 1.7.7.5