mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/virt-viewer
synced 2025-12-27 06:23:42 +00:00
session-spice: Disable extra displays in fullscreen mode
When running in fullscreen it is possible to end up in a situation where we have more displays enabled than monitors. This can happen if displays that were enabled in the previous connection to the guest doesn't match displays requested when entering the fullscreen mode. This commit solves the problem by disabling displays that should not be enabled in the fullscreen mode. Resolves: rhbz#1212802
This commit is contained in:
parent
1f2ef0e9de
commit
7870ea5eff
@ -838,6 +838,16 @@ destroy_display(gpointer data)
|
||||
g_object_unref(display);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
display_is_in_fullscreen_mode(VirtViewerSessionSpice *self,
|
||||
VirtViewerDisplay *display)
|
||||
{
|
||||
gint nth = virt_viewer_display_get_nth(display);
|
||||
VirtViewerApp *app = virt_viewer_session_get_app(VIRT_VIEWER_SESSION(self));
|
||||
|
||||
return virt_viewer_app_get_initial_monitor_for_display(app, nth) != -1;
|
||||
}
|
||||
|
||||
static void
|
||||
virt_viewer_session_spice_display_monitors(SpiceChannel *channel,
|
||||
GParamSpec *pspec G_GNUC_UNUSED,
|
||||
@ -847,6 +857,8 @@ virt_viewer_session_spice_display_monitors(SpiceChannel *channel,
|
||||
GPtrArray *displays = NULL;
|
||||
GtkWidget *display;
|
||||
guint i, monitors_max;
|
||||
gboolean fullscreen_mode =
|
||||
virt_viewer_app_get_fullscreen(virt_viewer_session_get_app(VIRT_VIEWER_SESSION(self)));
|
||||
|
||||
g_object_get(channel,
|
||||
"monitors", &monitors,
|
||||
@ -883,6 +895,16 @@ virt_viewer_session_spice_display_monitors(SpiceChannel *channel,
|
||||
display = g_ptr_array_index(displays, monitor->id);
|
||||
g_return_if_fail(display != NULL);
|
||||
|
||||
if (!disabled && fullscreen_mode && self->priv->did_auto_conf &&
|
||||
!display_is_in_fullscreen_mode(self, VIRT_VIEWER_DISPLAY(display))) {
|
||||
g_warning("display %d should not be enabled, disabling",
|
||||
virt_viewer_display_get_nth(VIRT_VIEWER_DISPLAY(display)));
|
||||
spice_main_set_display_enabled(virt_viewer_session_spice_get_main_channel(self),
|
||||
virt_viewer_display_get_nth(VIRT_VIEWER_DISPLAY(display)),
|
||||
FALSE);
|
||||
disabled = TRUE;
|
||||
}
|
||||
|
||||
virt_viewer_display_set_enabled(VIRT_VIEWER_DISPLAY(display), !disabled);
|
||||
|
||||
if (disabled)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user