Updated test.html to current generated version. Peter Hatina EMEA ENG-Desktop Development Red Hat Czech, Brno --- data/test.html | 331 +++++++++++++++++++++++++++----------------------------- 1 file changed, 159 insertions(+), 172 deletions(-) diff --git a/data/test.html b/data/test.html index 675d2e6..c8e60e1 100644 --- a/data/test.html +++ b/data/test.html @@ -1,31 +1,29 @@ <html> <head> -<title>Spice-XPI test page</title> +<title>Spice-XPI test page (generated)</title> <style type="text/css"> +caption { + text-align: left; + font-weight: bold; +} - caption { - text-align: left; - font-weight: bold; - } - - th { - text-align: left; - } - +th { + text-align: left; +} </style> </head> -<body onload='bodyLoad()' onunload='bodyUnload()'> - -<center> -<h1>SPICE xpi test page</h1> -</center> -SPICE xpi test page. Disabled (greyed out) values are passed to SPICE xpi as empty variables, asterisk-marked ones are passed when you press button marked in the same fashion. -<br /> +<body onload="bodyLoad()" onunload="bodyUnload()"> <center> +<h1>SPICE xpi test page (generated)</h1> +This page was autogenerated using IDL description and should not be modified by hand.<br> +Disabled (greyed out) values are passed +to SPICE xpi as empty variables. +</center> +<br/> -<embed type="application/x-spice" width="0" height="0" id="spice-xpi" /><br /> +<embed type="application/x-spice" width="0" height="0" id="spice-xpi"/><br/> <script type="text/javascript"> @@ -33,275 +31,264 @@ var embed = document.getElementById("spice-xpi"); function bodyLoad() { - log("BodyLoad"); -} + log("Body Load"); +}; function bodyUnload() { - log("BodyUnload"); + log("Body Unload"); } function connect() { - setConnectVars(); - log("connect: host '" + embed.hostIP + "', port '" + embed.port + "', secure port '" + embed.SecurePort + "', USB port '" + embed.UsbListenPort + "'"); - embed.connect(); + setConnectVars(); + setUsbFilter(); + embed.connect(); + log("Connect: host '" + embed.hostIP + "', port '" + embed.port + + "', secure port '" + embed.SecurePort + "', USB port '" + + embed.UsbListenPort + "'"); } function disconnect() { - embed.disconnect(); - log("disconnected by page"); + embed.disconnect(); + log("Disconnect"); } -/* FIXME function OnDisconnected(msg) { - log(msg); + log("Disconnected, return code: " + msg); } -*/ function log(message) { - var log = document.getElementById("log"); - var ts = new Date().toString() + ": "; - var newRow = document.createElement("tr"); - var tsCell = document.createElement("td"); - var msgCell = document.createElement("td"); - - tsCell.innerHTML = ts; - msgCell.innerHTML = message; - - newRow.appendChild(tsCell); - newRow.appendChild(msgCell); - log.appendChild(newRow); + var log = document.getElementById("log"); + var ts = new Date().toString() + ": "; + var newRow = document.createElement("tr"); + var tsCell = document.createElement("td"); + var msgCell = document.createElement("td"); + + tsCell.innerHTML = ts; + msgCell.innerHTML = message; + + newRow.appendChild(tsCell); + newRow.appendChild(msgCell); + log.appendChild(newRow); } function setLanguageStrings() { - section = document.getElementById("LanguageStringsSectionToggled").checked == true ? document.getElementById("LanguageStringsSection").value : ""; - lang = document.getElementById("LanguageStringsLangToggled").checked == true ? document.getElementById("LanguageStringsLang").value : ""; - embed.SetLanguageStrings(section, lang) - log("Language Strings were set to '" + section + "' '" + lang + "'"); + section = document.getElementById("SetLanguageStringssectionToggled").checked ? + document.getElementById("SetLanguageStringssection").value : ""; + lang = document.getElementById("SetLanguageStringslangToggled").checked ? + document.getElementById("SetLanguageStringslang").value : ""; + embed.SetLanguageStrings(section, lang); + log("Language Strings set to '" + section + "' '" + lang + "'"); } function setUsbFilter() { - filter = document.getElementById("UsbFilterToggled").checked == true ? document.getElementById("UsbFilter").value : ""; - embed.SetUsbFilter(filter); - log("USB Filter String was set to: '" + filter + "'"); + UsbFilterToggled = document.getElementById("SetUsbFilterfilterToggled"); + if (!UsbFilterToggled) + return; + filter = UsbFilterToggled.checked ? + document.getElementById("SetUsbFilterfilter").value : ""; + embed.SetUsbFilter(filter); + log("USB Filter String set to: '" + filter + "'"); } -function setConnectVars() +function show() { - if(document.getElementById("hostIPToggled").checked == true) { embed.hostIP = document.getElementById("hostIP").value; } else { embed.hostIP = ""; } - if(document.getElementById("portToggled").checked == true) { embed.port = document.getElementById("port").value; } else { embed.port = ""; } - if(document.getElementById("SecurePortToggled").checked == true) { embed.SecurePort = document.getElementById("SecurePort").value; } else { embed.SecurePort = ""; } - if(document.getElementById("PasswordToggled").checked == true) { embed.Password = document.getElementById("Password").value; } else { embed.Password = ""; } - if(document.getElementById("CipherSuiteToggled").checked == true) { embed.CipherSuite = document.getElementById("CipherSuite").value; } else { embed.CipherSuite = ""; } - if(document.getElementById("SSLChannelsToggled").checked == true) { embed.SSLChannels = document.getElementById("SSLChannels").value; } else { embed.SSLChannels = ""; } - if(document.getElementById("TrustStoreToggled").checked == true) { embed.TrustStore = document.getElementById("TrustStore").value; } else { embed.TrustStore = ""; } - if(document.getElementById("HostSubjectToggled").checked == true) { embed.HostSubject = document.getElementById("HostSubject").value; } else { embed.HostSubject = ""; } - if(document.getElementById("fullScreenToggled").checked == true) { embed.fullScreen = document.getElementById("fullScreen").checked; } else { embed.fullScreen = ""; } - if(document.getElementById("AdminConsoleToggled").checked == true) { embed.AdminConsole = document.getElementById("AdminConsole").checked; } else { embed.AdminConsole = ""; } - if(document.getElementById("TitleToggled").checked == true) { embed.Title = document.getElementById("Title").value; } else { embed.Title = ""; } - if(document.getElementById("dynamicMenuToggled").checked == true) { embed.dynamicMenu = document.getElementById("dynamicMenu").value; } else { embed.dynamicMenu = ""; } - if(document.getElementById("NumberOfMonitorsToggled").checked == true) { embed.NumberOfMonitors = document.getElementById("NumberOfMonitors").value; } else { embed.NumberOfMonitors = ""; } - if(document.getElementById("GuestHostNameToggled").checked == true) { embed.GuestHostName = document.getElementById("GuestHostName").value; } else { embed.GuestHostName = ""; } - if(document.getElementById("HotKeyToggled").checked == true) { embed.HotKey = document.getElementById("HotKey").value; } else { embed.HotKey = ""; } - if(document.getElementById("NoTaskMgrExecutionToggled").checked == true) { embed.NoTaskMgrExecution = document.getElementById("NoTaskMgrExecution").checked; } else { embed.NoTaskMgrExecution = ""; } - if(document.getElementById("SendCtrlAltdeleteToggled").checked == true) { embed.SendCtrlAltdelete = document.getElementById("SendCtrlAltdelete").checked; } else { embed.SendCtrlAltDelete = ""; } - if(document.getElementById("UsbListenPortToggled").checked == true) { embed.UsbListenPort = parseInt( document.getElementById("UsbListenPort").value ); } else { embed.UsbListenPort = ""; } - if(document.getElementById("UsbAutoShareToggled").checked == true) { embed.UsbAutoShare = document.getElementById("UsbAutoShare").checked; } else { embed.UsbAutoShare = ""; } - if(document.getElementById("SmartcardToggled").checked == true) { embed.Smartcard = document.getElementById("Smartcard").checked; } else { embed.Smartcard = ""; } - if(document.getElementById("ColorDepthToggled").checked == true) { embed.ColorDepth = document.getElementById("ColorDepth").value; } else { embed.ColorDepth = ""; } - if(document.getElementById("DisableEffectsToggled").checked == true) { embed.DisableEffects = document.getElementById("DisableEffects").value; } else { embed.DisableEffects = ""; } - setUsbFilter() + embed.show(); + log("Show"); } -function show() +function ConnectedStatus() { - embed.show(); - log("Show was called"); + log("Connected status = " + embed.ConnectedStatus()); } -function status() +function toggle(checkboxID) { - var status = embed.ConnectedStatus(); - log("ConnectedStatus = " + status); + var checkbox = document.getElementById(checkboxID); + var toggle = document.getElementById(arguments[1]); + toggle.disabled = !checkbox.checked; } -function toggle(checkboxID) +function setConnectVars() { - var checkbox = document.getElementById(checkboxID); - for (var i = 1; i < arguments.length; i++) - { - var toggle = document.getElementById(arguments[i]); - var updateToggle = checkbox.checked ? toggle.disabled = false : toggle.disabled = true; - } + embed.hostIP = document.getElementById("hostIPToggled").checked ? document.getElementById("hostIP").value : ""; + embed.port = document.getElementById("portToggled").checked ? document.getElementById("port").value : ""; + embed.SecurePort = document.getElementById("SecurePortToggled").checked ? document.getElementById("SecurePort").value : ""; + embed.Password = document.getElementById("PasswordToggled").checked ? document.getElementById("Password").value : ""; + embed.CipherSuite = document.getElementById("CipherSuiteToggled").checked ? document.getElementById("CipherSuite").value : ""; + embed.SSLChannels = document.getElementById("SSLChannelsToggled").checked ? document.getElementById("SSLChannels").value : ""; + embed.HostSubject = document.getElementById("HostSubjectToggled").checked ? document.getElementById("HostSubject").value : ""; + embed.fullScreen = document.getElementById("fullScreenToggled").checked ? document.getElementById("fullScreen").checked : ""; + embed.AdminConsole = document.getElementById("AdminConsoleToggled").checked ? document.getElementById("AdminConsole").checked : ""; + embed.Title = document.getElementById("TitleToggled").checked ? document.getElementById("Title").value : ""; + embed.dynamicMenu = document.getElementById("dynamicMenuToggled").checked ? document.getElementById("dynamicMenu").value : ""; + embed.NumberOfMonitors = document.getElementById("NumberOfMonitorsToggled").checked ? document.getElementById("NumberOfMonitors").value : ""; + embed.GuestHostName = document.getElementById("GuestHostNameToggled").checked ? document.getElementById("GuestHostName").value : ""; + embed.HotKey = document.getElementById("HotKeyToggled").checked ? document.getElementById("HotKey").value : ""; + embed.NoTaskMgrExecution = document.getElementById("NoTaskMgrExecutionToggled").checked ? document.getElementById("NoTaskMgrExecution").checked : ""; + embed.SendCtrlAltDelete = document.getElementById("SendCtrlAltDeleteToggled").checked ? document.getElementById("SendCtrlAltDelete").checked : ""; + embed.UsbListenPort = document.getElementById("UsbListenPortToggled").checked ? document.getElementById("UsbListenPort").value : ""; + embed.UsbAutoShare = document.getElementById("UsbAutoShareToggled").checked ? document.getElementById("UsbAutoShare").checked : ""; + embed.Smartcard = document.getElementById("SmartcardToggled").checked ? document.getElementById("Smartcard").checked : ""; + embed.ColorDepth = document.getElementById("ColorDepthToggled").checked ? document.getElementById("ColorDepth").value : ""; + embed.DisableEffects = document.getElementById("DisableEffectsToggled").checked ? document.getElementById("DisableEffects").value : ""; + embed.TrustStore = document.getElementById("TrustStoreToggled").checked ? document.getElementById("TrustStore").value : ""; } </script> +<center> <table id="values"> <tr> - -<td> -<table> -<tr> -<td><input type="checkbox" id="hostIPToggled" onclick="toggle('hostIPToggled', 'hostIP')" checked /></td> -<td>Host:</td> -<td> <input id="hostIP" type="text" size="30" /></td> +<td><input type="checkbox" id="hostIPToggled" onclick="toggle('hostIPToggled', 'hostIP')" checked/></td> +<td>Host IP</td> +<td><input id="hostIP" type="text" size="30" /></td> </tr> <tr> -<td><input type="checkbox" id="portToggled" onclick="toggle('portToggled', 'port')" checked /></td> -<td>Port:</td> -<td> <input id="port" type="text" size="30" /> </td> +<td><input type="checkbox" id="portToggled" onclick="toggle('portToggled', 'port')" checked/></td> +<td>Port</td> +<td><input id="port" type="text" size="30" /></td> </tr> <tr> <td><input type="checkbox" id="SecurePortToggled" onclick="toggle('SecurePortToggled', 'SecurePort')" /></td> -<td>SecurePort:</td> -<td> <input id="SecurePort" type="text" size="30" disabled /> </td> +<td>Secure Port</td> +<td><input id="SecurePort" type="text" size="30" disabled /></td> </tr> <tr> <td><input type="checkbox" id="PasswordToggled" onclick="toggle('PasswordToggled', 'Password')" /></td> -<td>Password:</td> -<td> <input id="Password" type="text" size="30" disabled /><br /> +<td>Password</td> +<td><input id="Password" type="text" size="30" disabled /></td> </tr> <tr> <td><input type="checkbox" id="CipherSuiteToggled" onclick="toggle('CipherSuiteToggled', 'CipherSuite')" /></td> -<td>Cipher Suite:</td> -<td> <input id="CipherSuite" type="text" size="30" disabled /></td> +<td>Cipher Suite</td> +<td><input id="CipherSuite" type="text" size="30" disabled /></td> </tr> <tr> <td><input type="checkbox" id="SSLChannelsToggled" onclick="toggle('SSLChannelsToggled', 'SSLChannels')" /></td> -<td>Secure Channels:</td> -<td> <input id="SSLChannels" type="text" size="30" disabled /></td> +<td>SSL Channels</td> +<td><input id="SSLChannels" type="text" size="30" disabled /></td> </tr> <tr> <td><input type="checkbox" id="HostSubjectToggled" onclick="toggle('HostSubjectToggled', 'HostSubject')" /></td> -<td>Host Subject:</td> -<td> <input id="HostSubject" type="text" size="30" disabled /></td> +<td>Host Subject</td> +<td><input id="HostSubject" type="text" size="30" disabled /></td> </tr> <tr> <td><input type="checkbox" id="fullScreenToggled" onclick="toggle('fullScreenToggled', 'fullScreen')" /></td> -<td>Full Screen:</td> -<td> <input id="fullScreen" type="checkbox" disabled /> </td> +<td>Full Screen</td> +<td><input id="fullScreen" type="checkbox" size="30" disabled /></td> </tr> <tr> -<td><input type="checkbox" id="AdminConsoleToggled" onclick="toggle('AdminConsoleToggled', 'AdminConsole')" checked /></td> -<td>AdminConsole:</td> -<td> <input id="AdminConsole" type="checkbox" checked /></td> +<td><input type="checkbox" id="AdminConsoleToggled" onclick="toggle('AdminConsoleToggled', 'AdminConsole')" checked/></td> +<td>Admin Console</td> +<td><input id="AdminConsole" type="checkbox" size="30" checked/></td> </tr> <tr> <td><input type="checkbox" id="TitleToggled" onclick="toggle('TitleToggled', 'Title')" /></td> -<td>Title:</td> -<td> <input id="Title" type="text" size="30" disabled /></td> +<td>Title</td> +<td><input id="Title" type="text" size="30" disabled /></td> </tr> <tr> <td><input type="checkbox" id="dynamicMenuToggled" onclick="toggle('dynamicMenuToggled', 'dynamicMenu')" /></td> -<td>Dynamic Menu:</td> -<td> <input id="dynamicMenu" type="text" size="30" disabled /></td> +<td>Dynamic Menu</td> +<td><input id="dynamicMenu" type="text" size="30" disabled /></td> </tr> <tr> <td><input type="checkbox" id="NumberOfMonitorsToggled" onclick="toggle('NumberOfMonitorsToggled', 'NumberOfMonitors')" /></td> -<td>Number of Monitors:</td> -<td> <input id="NumberOfMonitors" type="text" size="30" disabled /></td> +<td>Number Of Monitors</td> +<td><input id="NumberOfMonitors" type="text" size="30" disabled /></td> </tr> <tr> <td><input type="checkbox" id="GuestHostNameToggled" onclick="toggle('GuestHostNameToggled', 'GuestHostName')" /></td> -<td>GuestHostName:</td> -<td> <input id="GuestHostName" type="text" size="30" disabled /></td> +<td>Guest Host Name</td> +<td><input id="GuestHostName" type="text" size="30" disabled /></td> </tr> <tr> -<td><input type="checkbox" id="HotKeyToggled" onclick="toggle('HotKeyToggled', 'HotKey')" checked /></td> -<td>Hot Key:</td> -<td> <input id="HotKey" type="text" size="30" value="toggle-fullscreen=shift+f11,release-cursor=shift+f12,smartcard-insert=shift+f8,smartcard-remove=shift+f9" /></td> +<td><input type="checkbox" id="HotKeyToggled" onclick="toggle('HotKeyToggled', 'HotKey')" checked/></td> +<td>Hot Key</td> +<td><input id="HotKey" type="text" size="30" value="toggle-fullscreen=shift+f11,release-cursor=shift+f12,smartcard-insert=shift+f8,smartcard-remove=shift+f9"/></td> </tr> <tr> <td><input type="checkbox" id="NoTaskMgrExecutionToggled" onclick="toggle('NoTaskMgrExecutionToggled', 'NoTaskMgrExecution')" /></td> -<td title="Suppress launching of task manager when Ctrl+Alt+Del is pressed">NoTaskMgrExecution:</td> -<td> <input id="NoTaskMgrExecution" type="checkbox" disabled /></td> +<td>No Task Mgr Execution</td> +<td><input id="NoTaskMgrExecution" type="checkbox" size="30" disabled /></td> </tr> <tr> -<td><input type="checkbox" id="SendCtrlAltdeleteToggled" onclick="toggle('SendCtrlAltdeleteToggled', 'SendCtrlAltdelete')" /></td> -<td>Send Ctrl+Alt+Delete:</td> -<td> <input id="SendCtrlAltdelete" type="checkbox" disabled /></td> +<td><input type="checkbox" id="SendCtrlAltDeleteToggled" onclick="toggle('SendCtrlAltDeleteToggled', 'SendCtrlAltDelete')" /></td> +<td>Send Ctrl Alt Delete</td> +<td><input id="SendCtrlAltDelete" type="checkbox" size="30" disabled /></td> </tr> <tr> <td><input type="checkbox" id="UsbListenPortToggled" onclick="toggle('UsbListenPortToggled', 'UsbListenPort')" /></td> -<td>USB listen port:</td> -<td> <input id="UsbListenPort" type="text" size="30" value="32023" disabled /></td> +<td>Usb Listen Port</td> +<td><input id="UsbListenPort" type="text" size="30" value="32023"disabled /></td> </tr> <tr> <td><input type="checkbox" id="UsbAutoShareToggled" onclick="toggle('UsbAutoShareToggled', 'UsbAutoShare')" /></td> -<td>USB Auto Share:</td> -<td> <input id="UsbAutoShare" type="checkbox" disabled /></td> +<td>Usb Auto Share</td> +<td><input id="UsbAutoShare" type="checkbox" size="30" disabled /></td> </tr> <tr> -<td><input type="checkbox" id="SmartcardToggled" onclick="toggle('SmartcardToggled', 'Smartcard')" checked /></td> -<td>Smartcard:</td> -<td> <input id="Smartcard" type="checkbox" /></td> +<td><input type="checkbox" id="SmartcardToggled" onclick="toggle('SmartcardToggled', 'Smartcard')" checked/></td> +<td>Smartcard</td> +<td><input id="Smartcard" type="checkbox" size="30" /></td> </tr> <tr> <td><input type="checkbox" id="ColorDepthToggled" onclick="toggle('ColorDepthToggled', 'ColorDepth')" /></td> -<td>Color Depth:</td> -<td> <input id="ColorDepth" type="text" size="30" disabled /></td> +<td>Color Depth</td> +<td><input id="ColorDepth" type="text" size="30" disabled /></td> </tr> <tr> <td><input type="checkbox" id="DisableEffectsToggled" onclick="toggle('DisableEffectsToggled', 'DisableEffects')" /></td> -<td>Disable Effects:</td> -<td> <input id="DisableEffects" type="text" size="30" disabled /></td> +<td>Disable Effects</td> +<td><input id="DisableEffects" type="text" size="30" disabled /></td> </tr> <tr> -<td><input type="checkbox" id="LanguageStringsSectionToggled" onclick="toggle('LanguageStringsSectionToggled', 'LanguageStringsSection')" checked /></td> -<td>*Language Strings - section:</td> -<td> <input id="LanguageStringsSection" type="input" size="30" /></td> +<td><input type="checkbox" id="TrustStoreToggled" onclick="toggle('TrustStoreToggled', 'TrustStore')" /></td> +<td>Trust Store</td> +<td><textarea id="TrustStore" cols="66" rows="33" disabled/></textarea></td> </tr> <tr> -<td><input type="checkbox" id="LanguageStringsLangToggled" onclick="toggle('LanguageStringsLangToggled', 'LanguageStringsLang')" checked /></td> -<td>*Language Strings - lang:</td> -<td> <input id="LanguageStringsLang" type="input" size="30" /></td> +<td><input type="checkbox" id="SetLanguageStringssectionToggled" onclick="toggle('SetLanguageStringssectionToggled', 'SetLanguageStringssection')"checked/></td> +<td>Set Language Strings - Section</td> +<td><input id="SetLanguageStringssection" type="text" size="30" /></td> </tr> <tr> -<td><input type="checkbox" id="UsbFilterToggled" onclick="toggle('UsbFilterToggled', 'UsbFilter')" checked /></td> -<td>**Set USB Filter:</td> -<td><input id="UsbFilter" type="text" size="30" /></td> +<td><input type="checkbox" id="SetLanguageStringslangToggled" onclick="toggle('SetLanguageStringslangToggled', 'SetLanguageStringslang')"checked/></td> +<td>Set Language Strings - Lang</td> +<td><input id="SetLanguageStringslang" type="text" size="30" /></td> </tr> -</table> -</td> - -<td rowspan="21" width="25px" > </td> - -<td> -<table> -<td> <tr> -<td><input type="checkbox" id="TrustStoreToggled" onclick="toggle('TrustStoreToggled', 'TrustStore')" /></td> -<td title="CA Certificate in plain text. For RHEV-M, it can be found in 'http://rhev-m.example.com/ca.crt'">Trust Store:</td> -</tr> -<tr><td colspan="2"><textarea id="TrustStore" cols="66" rows="33" disabled ></textarea></td></tr> -</table> -</td> - +<td><input type="checkbox" id="SetUsbFilterfilterToggled" onclick="toggle('SetUsbFilterfilterToggled', 'SetUsbFilterfilter')"checked/></td> +<td>Set Usb Filter - Filter</td> +<td><input id="SetUsbFilterfilter" type="text" size="30" /></td> </tr> </table> -<input type="button" value="Connect" onclick='connect()' /> -<input type="button" value="Check Status" onclick='status()' /> -<input type="button" value="Show" onclick='show()' /> -<input type="button" value="*Set Language Strings" onclick='setLanguageStrings()' id="LanguageStringsButton" /> -<input type="button" value="**Set Usb Filter" onclick='setUsbFilter()' id="UsbFilterButton" /> -<input type="button" value="Disconnect" onclick='disconnect()' /> +<br/> +<input type="button" value="Connect" style="min-width: 180px" onclick="connect()"/> +<input type="button" value="Show" style="min-width: 180px" onclick="show()"/> +<input type="button" value="Disconnect" style="min-width: 180px" onclick="disconnect()"/> +<br/> +<input type="button" value="Set Language Strings" style="min-width: 180px" onclick="SetLanguageStrings()"/> +<input type="button" value="Set Usb Filter" style="min-width: 180px" onclick="SetUsbFilter()"/> +<input type="button" value="Connected Status" style="min-width: 180px" onclick="ConnectedStatus()"/> </center> -<hr /> -<table style="border: 1px; border-color: black; " > -<caption >log:</caption> -<thead><tr><th style="width: 22em; ">timestamp</th><th>message</th></tr></thead> -<tbody style="font-family: monospace; " id="log"> +<hr/> +<table style="border: 1px; border-color: black;"> +<caption>log:</caption> +<thead><tr><th style="width: 22em;">timestamp</th><th>message</th></tr></thead> +<tbody style="font-family: monospace;" id="log"> </tbody> </table> </body> -- 1.7.10.4 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel