mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/virt-viewer
synced 2026-01-01 21:43:41 +00:00
Add error dialog for USB redirection failure
This commit is contained in:
parent
c285624bb0
commit
0084b1cfaa
@ -81,6 +81,9 @@ static void virt_viewer_app_auth_refused(VirtViewerSession *session,
|
||||
static void virt_viewer_app_auth_failed(VirtViewerSession *session,
|
||||
const char *msg,
|
||||
VirtViewerApp *self);
|
||||
static void virt_viewer_app_usb_failed(VirtViewerSession *session,
|
||||
const char *msg,
|
||||
VirtViewerApp *self);
|
||||
|
||||
static void virt_viewer_app_server_cut_text(VirtViewerSession *session,
|
||||
const gchar *text,
|
||||
@ -632,6 +635,8 @@ virt_viewer_app_create_session(VirtViewerApp *self, const gchar *type)
|
||||
G_CALLBACK(virt_viewer_app_auth_refused), self);
|
||||
g_signal_connect(priv->session, "session-auth-failed",
|
||||
G_CALLBACK(virt_viewer_app_auth_failed), self);
|
||||
g_signal_connect(priv->session, "session-usb-failed",
|
||||
G_CALLBACK(virt_viewer_app_usb_failed), self);
|
||||
g_signal_connect(priv->session, "session-display-added",
|
||||
G_CALLBACK(virt_viewer_app_display_added), self);
|
||||
g_signal_connect(priv->session, "session-display-removed",
|
||||
@ -987,11 +992,16 @@ static void virt_viewer_app_auth_failed(VirtViewerSession *session G_GNUC_UNUSED
|
||||
const char *msg,
|
||||
VirtViewerApp *self)
|
||||
{
|
||||
VirtViewerAppPrivate *priv = self->priv;
|
||||
|
||||
virt_viewer_app_simple_message_dialog(self,
|
||||
_("Unable to authenticate with remote desktop server at %s"),
|
||||
priv->pretty_address, msg);
|
||||
_("Unable to authenticate with remote desktop server: %s"),
|
||||
msg);
|
||||
}
|
||||
|
||||
static void virt_viewer_app_usb_failed(VirtViewerSession *session G_GNUC_UNUSED,
|
||||
const gchar *msg,
|
||||
VirtViewerApp *self)
|
||||
{
|
||||
virt_viewer_app_simple_message_dialog(self, _("USB redirection error: %s"), msg);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@ -136,6 +136,39 @@ virt_viewer_session_spice_init(VirtViewerSessionSpice *self G_GNUC_UNUSED)
|
||||
self->priv = VIRT_VIEWER_SESSION_SPICE_GET_PRIVATE(self);
|
||||
}
|
||||
|
||||
static void
|
||||
usb_auto_connect_failed(SpiceUsbDeviceManager *manager G_GNUC_UNUSED,
|
||||
SpiceUsbDevice *device G_GNUC_UNUSED,
|
||||
GError *error, VirtViewerSessionSpice *self)
|
||||
{
|
||||
if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||
return;
|
||||
|
||||
g_signal_emit_by_name(self, "session-usb-failed", error->message);
|
||||
}
|
||||
|
||||
static void
|
||||
create_spice_session(VirtViewerSessionSpice *self)
|
||||
{
|
||||
SpiceUsbDeviceManager *manager;
|
||||
|
||||
g_return_if_fail(self != NULL);
|
||||
g_return_if_fail(self->priv->session == NULL);
|
||||
|
||||
self->priv->session = spice_session_new();
|
||||
spice_set_session_option(self->priv->session);
|
||||
|
||||
g_signal_connect(self->priv->session, "channel-new",
|
||||
G_CALLBACK(virt_viewer_session_spice_channel_new), self);
|
||||
g_signal_connect(self->priv->session, "channel-destroy",
|
||||
G_CALLBACK(virt_viewer_session_spice_channel_destroy), self);
|
||||
|
||||
manager = spice_usb_device_manager_get(self->priv->session, NULL);
|
||||
if (manager)
|
||||
g_signal_connect(manager, "auto-connect-failed",
|
||||
G_CALLBACK(usb_auto_connect_failed), self);
|
||||
}
|
||||
|
||||
static void
|
||||
virt_viewer_session_spice_close(VirtViewerSession *session)
|
||||
{
|
||||
@ -148,6 +181,7 @@ virt_viewer_session_spice_close(VirtViewerSession *session)
|
||||
if (self->priv->session) {
|
||||
spice_session_disconnect(self->priv->session);
|
||||
g_object_unref(self->priv->session);
|
||||
self->priv->session = NULL;
|
||||
|
||||
if (self->priv->audio)
|
||||
g_object_unref(self->priv->audio);
|
||||
@ -155,13 +189,7 @@ virt_viewer_session_spice_close(VirtViewerSession *session)
|
||||
}
|
||||
|
||||
/* FIXME: version 0.7 of spice-gtk allows reuse of session */
|
||||
self->priv->session = spice_session_new();
|
||||
spice_set_session_option(self->priv->session);
|
||||
g_signal_connect(self->priv->session, "channel-new",
|
||||
G_CALLBACK(virt_viewer_session_spice_channel_new), self);
|
||||
g_signal_connect(self->priv->session, "channel-destroy",
|
||||
G_CALLBACK(virt_viewer_session_spice_channel_destroy), self);
|
||||
|
||||
create_spice_session(self);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -352,13 +380,7 @@ virt_viewer_session_spice_new(void)
|
||||
|
||||
self = g_object_new(VIRT_VIEWER_TYPE_SESSION_SPICE, NULL);
|
||||
|
||||
self->priv->session = spice_session_new();
|
||||
spice_set_session_option(self->priv->session);
|
||||
|
||||
g_signal_connect(self->priv->session, "channel-new",
|
||||
G_CALLBACK(virt_viewer_session_spice_channel_new), self);
|
||||
g_signal_connect(self->priv->session, "channel-destroy",
|
||||
G_CALLBACK(virt_viewer_session_spice_channel_destroy), self);
|
||||
create_spice_session(self);
|
||||
|
||||
return VIRT_VIEWER_SESSION(self);
|
||||
}
|
||||
|
||||
@ -120,6 +120,16 @@ virt_viewer_session_class_init(VirtViewerSessionClass *class)
|
||||
1,
|
||||
G_TYPE_STRING);
|
||||
|
||||
g_signal_new("session-usb-failed",
|
||||
G_OBJECT_CLASS_TYPE(object_class),
|
||||
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_HOOKS,
|
||||
G_STRUCT_OFFSET(VirtViewerSessionClass, session_usb_failed),
|
||||
NULL,
|
||||
NULL,
|
||||
g_cclosure_marshal_VOID__STRING,
|
||||
G_TYPE_NONE,
|
||||
1,
|
||||
G_TYPE_STRING);
|
||||
|
||||
g_signal_new("session-display-added",
|
||||
G_OBJECT_CLASS_TYPE(object_class),
|
||||
|
||||
@ -77,6 +77,7 @@ struct _VirtViewerSessionClass {
|
||||
void (*session_disconnected)(VirtViewerSession *session);
|
||||
void (*session_auth_refused)(VirtViewerSession *session, const char *msg);
|
||||
void (*session_auth_failed)(VirtViewerSession *session, const char *msg);
|
||||
void (*session_usb_failed)(VirtViewerSession *session, const char *msg);
|
||||
|
||||
void (*session_channel_open)(VirtViewerSession *session, VirtViewerSessionChannel *channel);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user