Hi Pavel, Sorry for the delay. This series looks good to me now. ACK. On Tue, 2015-10-20 at 15:13 +0200, Pavel Grunt wrote: > 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 > --- > v1: https://www.redhat.com/archives/virt-tools-list/2015-April/msg001 > 84.html > v2: - nth is not used to determine which display should be enabled, > but the list of fullscreen displays is used > - the extra display is disabled instead of being ignored > v3: - added missing check for self->priv->did_auto_conf to fix hidden > display > when --reconnect > v4: - due to PATCH 2/3 it is possible to use > virt_viewer_app_get_initial_displays() > to get fullscreen mode displays > v5: - fixed the leak of virt_viewer_app_get_initial_displays() > - https://www.redhat.com/archives/virt-tools-list/2015-May/msg000 > 14.html > v6: - rebased > - changed debug to warning > - due to recent changes > (aff6c79ae080db286e4cb853cdfa02f2da0d0398, thanks Jonathon) > other patches from the series are no longer needed > v7: - fixed the missing word in the commit log > - avoid allocating a list in display_is_in_fullscreen_mode() > by using virt_viewer_app_get_initial_monitor_for_display() > --- > src/virt-viewer-session-spice.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer > -session-spice.c > index eb0761d..b9cae5e 100644 > --- a/src/virt-viewer-session-spice.c > +++ b/src/virt-viewer-session-spice.c > @@ -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_VIEW > ER_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_ch > annel(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) _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list