[virt-tools-list] [PATCH virt-viewer 0/4] Don't open blank window for a disabled first display

Jonathon Jongsma jjongsma at redhat.com
Fri Aug 22 14:59:23 UTC 2014


This is a patch series that attempts to fix rhbz#1032939. It's a pretty
significant re-factoring of some of the multi-monitor handling code, so it
requires careful review and testing.

The current design of virt-viewer is that we have a VirtViewerWindow object
(the "main window") that is shown at startup in order to communicate
session-level connection status to the user. This window is stored in a hash
table with a key being the ID of the display (#0, the first display). When we
receive a new spice message indicating the maximum number of monitors available
(e.g. 4 in the case of a linux guest with QXL), we create display objects for
each of these remote displays, and signal that a new display was added. In
resonse to this signal, we look up the window associated with this display's
ID. If the window exists (as it does with display #0), we associate the display
with that window.  Otherwise, we create a new window, and insert it into the
hash table with the display's ID.

Usually the first display on the guest is enabled, so this works out OK. But
in cases where the first display is disabled on the guest, we end up with a
"main window" that is blank and simply displays the message "Waiting for
display 1...".

The approach taken in this patch series is to remove the explicit association
of an ID with a particular VirtViewerWindow. In other words, we no longer
maintain a hash table of windows that associate a fixed id with the window
object. Instead, we have a simple list of windows, and the ID of that window is
determined by the ID of the VirtViewerDisplay object that it contains. In
addition, we only create a VirtViewerWindow object for the display when the
remote display becomes ready. Disabled remote displays do not have an
associated VirtViewerWindow object until they become enabled. This means that
the initial window (the "main window") can become any ID: it gets its ID from
the first display that becomes enabled.

Kiosk mode and Fullscreen mode require some additional handling, but I've
tested both of them and they seem to work with this patch series.


Jonathon Jongsma (4):
  App: keep hash table of displays
  VirtViewerDisplay: add convenience API for getting nth
  VirtViewerApp: store windows in a list
  Create windows on demand, not at startup

 src/remote-viewer.c       |  14 +--
 src/virt-viewer-app.c     | 296 +++++++++++++++++++++++++---------------------
 src/virt-viewer-app.h     |   2 +-
 src/virt-viewer-display.c |   6 +
 src/virt-viewer-display.h |   1 +
 5 files changed, 176 insertions(+), 143 deletions(-)

-- 
1.9.3




More information about the virt-tools-list mailing list