<html>
    <head>
      <base href="https://bugs.freedesktop.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - When qemu provides two displays, windowed, fullscreen and Kiosk do not show displays in predictable locations."
   href="https://bugs.freedesktop.org/show_bug.cgi?id=96511">96511</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>When qemu provides two displays, windowed, fullscreen and Kiosk do not show displays in predictable locations.
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>Spice
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>x86-64 (AMD64)
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux (All)
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>major
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>medium
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>spice-gtk
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>spice-bugs@lists.freedesktop.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>david.tyree@cox.net
          </td>
        </tr></table>
      <p>
        <div>
        <pre>With a QEMU setting of
 -vga none \ 
 -device qxl,id=video0,ram_size=67108864,bus=pci.0,addr=0x02\
 -device qxl,id=video1,ram_size=67108864,bus=pci.0,addr=0x0a 

spice-view is a non-ui spice viewer I am customizing from virtual-viewer.

The expected order and assignment is:
** (spice-view:2084): WARNING **: New display: channel [ 0 ] monitorid [0]
** (spice-view:2084): WARNING **: New display: channel [ 0 ] monitorid [1]
** (spice-view:2084): WARNING **: New display: channel [ 0 ] monitorid [2]
** (spice-view:2084): WARNING **: New display: channel [ 0 ] monitorid [3]
** (spice-view:2084): WARNING **: New display: channel [ 1 ] monitorid [0]
** (spice-view:2084): WARNING **: New display: channel [ 1 ] monitorid [1]
** (spice-view:2084): WARNING **: New display: channel [ 1 ] monitorid [2]
** (spice-view:2084): WARNING **: New display: channel [ 1 ] monitorid [3]

All the high order of displays [1,2,3] fail in in the gtk lib, viewer or both.

The order of displays, restarting the viewer, 
  ** (spice-view:1830): WARNING **: New display: channel [ 0 ] monitorid [1]
  ** (spice-view:1830): WARNING **: New display: channel [ 1 ] monitorid [0]
restart
  ** (spice-view:1830): WARNING **: New display: channel [ 0 ] monitorid [1]
  ** (spice-view:1830): WARNING **: New display: channel [ 1 ] monitorid [0]
restart
  ** (spice-view:1830): WARNING **: New display: channel [ 0 ] monitorid [1]
  ** (spice-view:1830): WARNING **: New display: channel [ 1 ] monitorid [0]
....

The order of display assignments are inverted like this:
  ** (spice-view:1830): WARNING **: New display: channel [ 1 ] monitorid [0]
  ** (spice-view:1830): WARNING **: New display: channel [ 0 ] monitorid [0]
or back again.

It results in wrong assignment in order of assignment of displays. On two
displays in full scree or kiosk, this results in a swap of expected results if
[0,0] / qxl card0 is always expected to be primary display, and [1,0] secondary
display (hidden if unavailable) at qxl card1.

This also causes inversion in a windowed mode where it is not predictable which
display will be on top, an annoyance, but not a "failure" like fullscreen or
Kiosk.


Looking through the code I see the check in both the spice-wigdet.c "static
gint get_display_id(SpiceDisplay *display)" and  virt-viewer
"virt_viewer_display_spice_new". That both use a check like this (respectivly):

    /* supported monitor_id only with display channel #0 */
    if (d->channel_id == 0 && d->monitor_id >= 0)
        return d->monitor_id;
and

    // We don't allow monitorid != 0 && channelid != 0
    g_return_val_if_fail(channelid != 0 ||  monitorid != 0, NULL);

This made me wonder how the second display [1,0] is recognized by the widget,
the viewer does not seem to care.

I cannot tell how to force location or priority of an expected channel's
display to the proper window and prevent the inversion.  

 Where should I look to solve the inversion?</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>