mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/virt-viewer
synced 2026-01-03 07:14:34 +00:00
Only make the USB device selection sensitive when the vm is USB capable
This commit is contained in:
parent
b272e08541
commit
c67a8cfdbe
@ -449,6 +449,21 @@ virt_viewer_app_update_title(VirtViewerApp *self)
|
||||
g_hash_table_foreach(self->priv->windows, update_title, NULL);
|
||||
}
|
||||
|
||||
static void set_usb_options_sensitive(gpointer key G_GNUC_UNUSED,
|
||||
gpointer value,
|
||||
gpointer user_data)
|
||||
{
|
||||
virt_viewer_window_set_usb_options_sensitive(
|
||||
VIRT_VIEWER_WINDOW(value), GPOINTER_TO_INT(user_data));
|
||||
}
|
||||
|
||||
static void
|
||||
virt_viewer_app_set_usb_options_sensitive(VirtViewerApp *self, gboolean sensitive)
|
||||
{
|
||||
g_hash_table_foreach(self->priv->windows, set_usb_options_sensitive,
|
||||
GINT_TO_POINTER(sensitive));
|
||||
}
|
||||
|
||||
static VirtViewerWindow *
|
||||
virt_viewer_app_get_nth_window(VirtViewerApp *self, gint nth)
|
||||
{
|
||||
@ -981,7 +996,10 @@ static void
|
||||
virt_viewer_app_initialized(VirtViewerSession *session G_GNUC_UNUSED,
|
||||
VirtViewerApp *self)
|
||||
{
|
||||
gboolean has_usb = virt_viewer_session_has_usb(self->priv->session);
|
||||
|
||||
virt_viewer_app_update_title(self);
|
||||
virt_viewer_app_set_usb_options_sensitive(self, has_usb);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -995,6 +1013,7 @@ virt_viewer_app_disconnected(VirtViewerSession *session G_GNUC_UNUSED,
|
||||
_("Unable to connect to the graphic server %s"),
|
||||
priv->pretty_address);
|
||||
}
|
||||
virt_viewer_app_set_usb_options_sensitive(self, FALSE);
|
||||
virt_viewer_app_deactivate(self);
|
||||
}
|
||||
|
||||
|
||||
@ -54,6 +54,7 @@ static gboolean virt_viewer_session_spice_open_fd(VirtViewerSession *session, in
|
||||
static gboolean virt_viewer_session_spice_open_host(VirtViewerSession *session, char *host, char *port);
|
||||
static gboolean virt_viewer_session_spice_open_uri(VirtViewerSession *session, char *uri);
|
||||
static gboolean virt_viewer_session_spice_channel_open_fd(VirtViewerSession *session, VirtViewerSessionChannel *channel, int fd);
|
||||
static gboolean virt_viewer_session_spice_has_usb(VirtViewerSession *session);
|
||||
static void virt_viewer_session_spice_usb_device_selection(VirtViewerSession *session, GtkWindow *parent);
|
||||
static void virt_viewer_session_spice_channel_new(SpiceSession *s,
|
||||
SpiceChannel *channel,
|
||||
@ -120,6 +121,7 @@ virt_viewer_session_spice_class_init(VirtViewerSessionSpiceClass *klass)
|
||||
dclass->open_host = virt_viewer_session_spice_open_host;
|
||||
dclass->open_uri = virt_viewer_session_spice_open_uri;
|
||||
dclass->channel_open_fd = virt_viewer_session_spice_channel_open_fd;
|
||||
dclass->has_usb = virt_viewer_session_spice_has_usb;
|
||||
dclass->usb_device_selection = virt_viewer_session_spice_usb_device_selection;
|
||||
|
||||
g_type_class_add_private(klass, sizeof(VirtViewerSessionSpicePrivate));
|
||||
@ -310,6 +312,17 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel *channel G_GNUC_UNUSED
|
||||
g_free(password);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
virt_viewer_session_spice_has_usb(VirtViewerSession *session)
|
||||
{
|
||||
VirtViewerSessionSpice *self = VIRT_VIEWER_SESSION_SPICE(session);
|
||||
VirtViewerSessionSpicePrivate *priv = self->priv;
|
||||
|
||||
return spice_usb_device_manager_get(priv->session, NULL) &&
|
||||
spice_session_has_channel_type(priv->session,
|
||||
SPICE_CHANNEL_USBREDIR);
|
||||
}
|
||||
|
||||
static void
|
||||
virt_viewer_session_spice_usb_device_selection(VirtViewerSession *session,
|
||||
GtkWindow *parent)
|
||||
|
||||
@ -352,6 +352,19 @@ gboolean virt_viewer_session_get_auto_usbredir(VirtViewerSession *self)
|
||||
return self->priv->auto_usbredir;
|
||||
}
|
||||
|
||||
gboolean virt_viewer_session_has_usb(VirtViewerSession *self)
|
||||
{
|
||||
VirtViewerSessionClass *klass;
|
||||
|
||||
g_return_val_if_fail(VIRT_VIEWER_IS_SESSION(self), FALSE);
|
||||
|
||||
klass = VIRT_VIEWER_SESSION_GET_CLASS(self);
|
||||
if (klass->has_usb == NULL)
|
||||
return FALSE;
|
||||
|
||||
return klass->has_usb(self);
|
||||
}
|
||||
|
||||
void virt_viewer_session_usb_device_selection(VirtViewerSession *self,
|
||||
GtkWindow *parent)
|
||||
{
|
||||
|
||||
@ -70,6 +70,7 @@ struct _VirtViewerSessionClass {
|
||||
gboolean (* open_host) (VirtViewerSession* session, char *host, char *port);
|
||||
gboolean (* open_uri) (VirtViewerSession* session, char *uri);
|
||||
gboolean (* channel_open_fd) (VirtViewerSession* session, VirtViewerSessionChannel *channel, int fd);
|
||||
gboolean (* has_usb) (VirtViewerSession* session);
|
||||
void (* usb_device_selection) (VirtViewerSession* session, GtkWindow *parent);
|
||||
|
||||
/* signals */
|
||||
@ -113,6 +114,7 @@ gboolean virt_viewer_session_open_uri(VirtViewerSession *session, gchar *uri);
|
||||
void virt_viewer_session_set_auto_usbredir(VirtViewerSession* session, gboolean auto_usbredir);
|
||||
gboolean virt_viewer_session_get_auto_usbredir(VirtViewerSession* session);
|
||||
|
||||
gboolean virt_viewer_session_has_usb(VirtViewerSession *self);
|
||||
void virt_viewer_session_usb_device_selection(VirtViewerSession *self,
|
||||
GtkWindow *parent);
|
||||
|
||||
|
||||
@ -866,6 +866,19 @@ virt_viewer_window_update_title(VirtViewerWindow *self)
|
||||
g_free(title);
|
||||
}
|
||||
|
||||
void
|
||||
virt_viewer_window_set_usb_options_sensitive(VirtViewerWindow *self, gboolean sensitive)
|
||||
{
|
||||
VirtViewerWindowPrivate *priv;
|
||||
GtkWidget *menu;
|
||||
|
||||
g_return_if_fail(VIRT_VIEWER_IS_WINDOW(self));
|
||||
|
||||
priv = self->priv;
|
||||
menu = GTK_WIDGET(gtk_builder_get_object(priv->builder, "menu-file-usb-device-selection"));
|
||||
gtk_widget_set_sensitive(menu, sensitive);
|
||||
}
|
||||
|
||||
void
|
||||
virt_viewer_window_set_display(VirtViewerWindow *self, VirtViewerDisplay *display)
|
||||
{
|
||||
|
||||
@ -63,6 +63,7 @@ GType virt_viewer_window_get_type (void);
|
||||
GtkWindow* virt_viewer_window_get_window (VirtViewerWindow* window);
|
||||
VirtViewerNotebook* virt_viewer_window_get_notebook (VirtViewerWindow* window);
|
||||
void virt_viewer_window_set_display(VirtViewerWindow *self, VirtViewerDisplay *display);
|
||||
void virt_viewer_window_set_usb_options_sensitive(VirtViewerWindow *self, gboolean sensitive);
|
||||
void virt_viewer_window_update_title(VirtViewerWindow *self);
|
||||
void virt_viewer_window_set_zoom_level(VirtViewerWindow *self, gint zoom_level);
|
||||
gint virt_viewer_window_get_zoom_level(VirtViewerWindow *self);
|
||||
|
||||
@ -38,6 +38,7 @@
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="menu-file-usb-device-selection">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="label" translatable="yes">USB device selection</property>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user