mirror of
https://github.com/virt-manager/virt-manager.git
synced 2026-08-08 20:18:09 -05:00
Move shared graphics editing UI to gfxdetails.py
Fixes a couple UI bugs: https://bugzilla.redhat.com/show_bug.cgi?id=696217 https://bugzilla.redhat.com/show_bug.cgi?id=875403
This commit is contained in:
@@ -205,7 +205,7 @@
|
||||
<graphics type='vnc' listen="1.2.3.4" keymap="fi"/>
|
||||
<graphics type='vnc' port="5903" passwd="foobar"/>
|
||||
<graphics type='rdp'/>
|
||||
<graphics type='spice'/>
|
||||
<graphics type='spice' autoport='yes' passwd=''/>
|
||||
<graphics type="spice" passwd="newpass" port="6000" tlsPort="6001" listen="1.2.3.4">
|
||||
<channel name="inputs" mode="secure"/>
|
||||
<channel name="main" mode="any"/>
|
||||
|
||||
+2
-254
@@ -17,20 +17,6 @@
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment4">
|
||||
<property name="lower">5900</property>
|
||||
<property name="upper">5999</property>
|
||||
<property name="value">5901</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment5">
|
||||
<property name="lower">5900</property>
|
||||
<property name="upper">5999</property>
|
||||
<property name="value">5900</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
@@ -567,249 +553,11 @@
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkGrid" id="table38">
|
||||
<object class="GtkAlignment" id="graphics-align">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="row_spacing">6</property>
|
||||
<property name="column_spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="graphics-type">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<signal name="changed" handler="on_graphics_type_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="graphics-password-box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="graphics-password-chk">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<signal name="toggled" handler="on_graphics_use_password" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="graphics-password">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="visibility">False</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label429">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">_Type:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="mnemonic_widget">graphics-type</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label430">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">_Address:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="mnemonic_widget">graphics-address</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label432">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">Pa_ssword:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="mnemonic_widget">graphics-password</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label431">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">_Port:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="mnemonic_widget">graphics-port</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="graphics-port-auto">
|
||||
<property name="label" translatable="yes">A_utomatically allocated</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<signal name="toggled" handler="on_graphics_port_auto_toggled" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="graphics-port-box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="graphics-port">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="adjustment">adjustment5</property>
|
||||
<property name="climb_rate">1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
<property name="update_policy">if-valid</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="graphics-tlsport-box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label29">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">_TLS port:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="mnemonic_widget">graphics-port</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="graphics-tls-port">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="adjustment">adjustment4</property>
|
||||
<property name="climb_rate">1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
<property name="update_policy">if-valid</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="graphics-address">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
|
||||
+2
-276
@@ -4294,287 +4294,13 @@
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="shadow_type">none</property>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment153">
|
||||
<object class="GtkAlignment" id="graphics-align">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="top_padding">3</property>
|
||||
<property name="left_padding">12</property>
|
||||
<child>
|
||||
<object class="GtkGrid" id="graphics-table">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">3</property>
|
||||
<property name="row_spacing">4</property>
|
||||
<property name="column_spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="gfx-port">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label">label401</property>
|
||||
<property name="selectable">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="gfx-address">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label">label401</property>
|
||||
<property name="selectable">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="gfx-port-title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">Port:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="gfx-address-title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">Address:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="gfx-password-title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="yalign">0</property>
|
||||
<property name="label" translatable="yes">_Password:</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="gfx-keymap-title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">_Keymap:</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="gfx-display-title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label">Display:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="gfx-display">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">label</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="gfx-password-box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="gfx-use-password">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<signal name="toggled" handler="on_vnc_use_password_toggled" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="gfx-password">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="visibility">False</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<signal name="changed" handler="on_vnc_password_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="gfx-tlsport">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label">label</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="gfx-type-title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">Type:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="gfx-tlsport-title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">TLS Port:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="gfx-xauth">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">label</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="gfx-xauth-title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label">XAuth:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="gfx-type">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="has_entry">True</property>
|
||||
<signal name="changed" handler="on_gfx_type_combo_changed" swapped="no"/>
|
||||
<child internal-child="entry">
|
||||
<object class="GtkEntry" id="combobox-entry10">
|
||||
<property name="can_focus">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="gfx-keymap">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="has_entry">True</property>
|
||||
<signal name="changed" handler="on_vnc_keymap_combo_changed" swapped="no"/>
|
||||
<child internal-child="entry">
|
||||
<object class="GtkEntry" id="combobox-entry11">
|
||||
<property name="can_focus">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -0,0 +1,397 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.16.1 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.10"/>
|
||||
<object class="GtkAdjustment" id="adjustment4">
|
||||
<property name="lower">5900</property>
|
||||
<property name="upper">50000</property>
|
||||
<property name="value">5901</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment5">
|
||||
<property name="lower">5900</property>
|
||||
<property name="upper">50000</property>
|
||||
<property name="value">5900</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkGrid" id="graphics-box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="row_spacing">6</property>
|
||||
<property name="column_spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="graphics-password-box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="graphics-password-chk">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.56999999284744263</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<signal name="toggled" handler="on_graphics_use_password" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="graphics-password">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="visibility">False</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<signal name="changed" handler="on_graphics_password_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label429">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">_Type:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="mnemonic_widget">graphics-type</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label430">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">_Address:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="mnemonic_widget">graphics-address</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label432">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">Pa_ssword:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="mnemonic_widget">graphics-password</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label431">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">_Port:</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">False</property>
|
||||
<property name="vexpand">False</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label29">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">_TLS port:</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="graphics-tlsport-box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="graphics-tlsport-auto">
|
||||
<property name="label" translatable="yes">Aut_o</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<signal name="toggled" handler="on_graphics_tlsport_auto_toggled" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="graphics-tlsport">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="text" translatable="yes">5901</property>
|
||||
<property name="adjustment">adjustment4</property>
|
||||
<property name="climb_rate">1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
<property name="update_policy">if-valid</property>
|
||||
<property name="value">5901</property>
|
||||
<signal name="changed" handler="on_graphics_tlsport_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label12">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">_Keymap:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="mnemonic_widget">graphics-keymap</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="graphics-keymap">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="hexpand">False</property>
|
||||
<property name="has_entry">True</property>
|
||||
<signal name="changed" handler="on_graphics_keymap_changed" swapped="no"/>
|
||||
<child internal-child="entry">
|
||||
<object class="GtkEntry" id="combobox-entry">
|
||||
<property name="can_focus">True</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="hexpand">False</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="graphics-port-box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="graphics-port-auto">
|
||||
<property name="label" translatable="yes">A_uto</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<signal name="toggled" handler="on_graphics_port_auto_toggled" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="graphics-port">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="text" translatable="yes">5900</property>
|
||||
<property name="adjustment">adjustment5</property>
|
||||
<property name="climb_rate">1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
<property name="update_policy">if-valid</property>
|
||||
<property name="value">5900</property>
|
||||
<signal name="changed" handler="on_graphics_port_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">Display:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">XAuth:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="graphics-display">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">label</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="graphics-xauth">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">label</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="graphics-address">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="has_entry">True</property>
|
||||
<signal name="changed" handler="on_graphics_address_changed" swapped="no"/>
|
||||
<child internal-child="entry">
|
||||
<object class="GtkEntry" id="combobox-entry2">
|
||||
<property name="can_focus">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="graphics-type">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="has_entry">True</property>
|
||||
<signal name="changed" handler="on_graphics_type_changed" swapped="no"/>
|
||||
<child internal-child="entry">
|
||||
<object class="GtkEntry" id="combobox-entry3">
|
||||
<property name="can_focus">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
+17
-87
@@ -36,6 +36,7 @@ from virtinst import VirtualController
|
||||
|
||||
from virtManager import uiutil
|
||||
from virtManager.fsdetails import vmmFSDetails
|
||||
from virtManager.gfxdetails import vmmGraphicsDetails
|
||||
from virtManager.netlist import vmmNetworkList
|
||||
from virtManager.asyncjob import vmmAsyncJob
|
||||
from virtManager.storagebrowse import vmmStorageBrowser
|
||||
@@ -72,7 +73,11 @@ class vmmAddHardware(vmmGObjectUI):
|
||||
|
||||
self._dev = None
|
||||
|
||||
self.fsDetails = vmmFSDetails(vm, self.builder, self.topwin)
|
||||
self.gfxdetails = vmmGraphicsDetails(
|
||||
self.vm, self.builder, self.topwin)
|
||||
self.widget("graphics-align").add(self.gfxdetails.top_box)
|
||||
|
||||
self.fsDetails = vmmFSDetails(self.vm, self.builder, self.topwin)
|
||||
self.widget("fs-box").add(self.fsDetails.top_box)
|
||||
|
||||
self.netlist = vmmNetworkList(self.conn, self.builder, self.topwin)
|
||||
@@ -95,10 +100,6 @@ class vmmAddHardware(vmmGObjectUI):
|
||||
|
||||
"on_mac_address_clicked" : self.change_macaddr_use,
|
||||
|
||||
"on_graphics_type_changed": self.change_graphics_type,
|
||||
"on_graphics_port_auto_toggled": self.change_port_auto,
|
||||
"on_graphics_use_password": self.change_password_chk,
|
||||
|
||||
"on_char_device_type_changed": self.change_char_device_type,
|
||||
"on_char_target_name_changed": self.change_char_target_name,
|
||||
"on_char_auto_socket_toggled": self.change_char_auto_socket,
|
||||
@@ -141,6 +142,8 @@ class vmmAddHardware(vmmGObjectUI):
|
||||
self.storage_browser.cleanup()
|
||||
self.storage_browser = None
|
||||
|
||||
self.gfxdetails.cleanup()
|
||||
self.gfxdetails = None
|
||||
self.fsDetails.cleanup()
|
||||
self.fsDetails = None
|
||||
self.netlist.cleanup()
|
||||
@@ -223,17 +226,6 @@ class vmmAddHardware(vmmGObjectUI):
|
||||
input_list.set_model(input_model)
|
||||
uiutil.set_combo_text_column(input_list, 0)
|
||||
|
||||
# Graphics type
|
||||
graphics_list = self.widget("graphics-type")
|
||||
graphics_model = Gtk.ListStore(str, str)
|
||||
graphics_list.set_model(graphics_model)
|
||||
uiutil.set_combo_text_column(graphics_list, 0)
|
||||
|
||||
# Graphics address
|
||||
# [label, value]
|
||||
self.widget("graphics-address").set_model(Gtk.ListStore(str, str))
|
||||
uiutil.set_combo_text_column(self.widget("graphics-address"), 0)
|
||||
|
||||
# Sound model list
|
||||
sound_list = self.widget("sound-model")
|
||||
self.build_sound_combo(self.vm, sound_list)
|
||||
@@ -417,22 +409,7 @@ class vmmAddHardware(vmmGObjectUI):
|
||||
input_box.set_active(0)
|
||||
|
||||
# Graphics init
|
||||
graphics_box = self.widget("graphics-type")
|
||||
self.populate_graphics_model(graphics_box.get_model())
|
||||
graphics_box.set_active(0)
|
||||
|
||||
model = self.widget("graphics-address").get_model()
|
||||
model.clear()
|
||||
model.append([_("Hypervisor default"), None])
|
||||
model.append([_("Localhost only"), "127.0.0.1"])
|
||||
model.append([_("All interfaces"), "0.0.0.0"])
|
||||
self.widget("graphics-address").set_active(0)
|
||||
|
||||
self.change_port_auto()
|
||||
self.widget("graphics-port-auto").set_active(True)
|
||||
self.widget("graphics-password").set_text("")
|
||||
self.widget("graphics-password").set_sensitive(False)
|
||||
self.widget("graphics-password-chk").set_active(False)
|
||||
self.gfxdetails.reset_state()
|
||||
|
||||
# Sound init
|
||||
sound_box = self.widget("sound-model")
|
||||
@@ -827,11 +804,6 @@ class vmmAddHardware(vmmGObjectUI):
|
||||
model.append([_("EvTouch USB Graphics Tablet"), "tablet", "usb"])
|
||||
model.append([_("Generic USB Mouse"), "mouse", "usb"])
|
||||
|
||||
def populate_graphics_model(self, model):
|
||||
model.clear()
|
||||
model.append([_("Spice server"), "spice"])
|
||||
model.append([_("VNC server"), "vnc"])
|
||||
|
||||
def populate_host_device_model(self, devtype, devcap, subtype, subcap):
|
||||
devlist = self.widget("host-device")
|
||||
model = devlist.get_model()
|
||||
@@ -956,28 +928,6 @@ class vmmAddHardware(vmmGObjectUI):
|
||||
row = uiutil.get_list_selection(self.widget("input-type"))
|
||||
return row[1], row[2]
|
||||
|
||||
# Graphics getters
|
||||
def get_config_graphics(self):
|
||||
return uiutil.get_list_selection(self.widget("graphics-type"), 1)
|
||||
|
||||
def get_config_graphics_ports(self):
|
||||
if self.widget("graphics-port-auto").get_active():
|
||||
return -1, -1
|
||||
|
||||
port = self.widget("graphics-port").get_value()
|
||||
tlsport = self.widget("graphics-tls-port").get_value()
|
||||
if not self.widget("graphics-tls-port").get_visible():
|
||||
tlsport = -1
|
||||
return int(port), int(tlsport)
|
||||
|
||||
def get_config_graphics_address(self):
|
||||
return uiutil.get_list_selection(self.widget("graphics-address"), 1)
|
||||
|
||||
def get_config_graphics_password(self):
|
||||
if not self.widget("graphics-password-chk").get_active():
|
||||
return None
|
||||
return self.widget("graphics-password").get_text()
|
||||
|
||||
# Network getters
|
||||
def get_config_net_model(self):
|
||||
return uiutil.get_list_selection(self.widget("net-model"))[0]
|
||||
@@ -1154,27 +1104,6 @@ class vmmAddHardware(vmmGObjectUI):
|
||||
else:
|
||||
self.widget("create-mac-address").set_sensitive(False)
|
||||
|
||||
# Graphics listeners
|
||||
def change_graphics_type(self, ignore=None):
|
||||
self.change_port_auto()
|
||||
|
||||
def change_port_auto(self, ignore=None):
|
||||
gtype = self.get_config_graphics()
|
||||
is_auto = self.widget("graphics-port-auto").get_active()
|
||||
is_spice = (gtype == "spice")
|
||||
|
||||
uiutil.set_grid_row_visible(self.widget("graphics-port-box"),
|
||||
not is_auto)
|
||||
self.widget("graphics-port-box").set_visible(not is_auto)
|
||||
self.widget("graphics-tlsport-box").set_visible(is_spice)
|
||||
|
||||
def change_password_chk(self, ignore=None):
|
||||
if self.widget("graphics-password-chk").get_active():
|
||||
self.widget("graphics-password").set_sensitive(True)
|
||||
else:
|
||||
self.widget("graphics-password").set_text("")
|
||||
self.widget("graphics-password").set_sensitive(False)
|
||||
|
||||
# Char device listeners
|
||||
def get_char_type(self):
|
||||
row = self.get_hw_selection()
|
||||
@@ -1585,17 +1514,18 @@ class vmmAddHardware(vmmGObjectUI):
|
||||
self._dev = dev
|
||||
|
||||
def validate_page_graphics(self):
|
||||
gtype = self.get_config_graphics()
|
||||
|
||||
try:
|
||||
port, tlsport = self.get_config_graphics_ports()
|
||||
(gtype, port,
|
||||
tlsport, addr, passwd, keymap) = self.gfxdetails.get_values()
|
||||
|
||||
self._dev = virtinst.VirtualGraphics(self.conn.get_backend())
|
||||
self._dev.type = gtype
|
||||
self._dev.port = port
|
||||
self._dev.passwd = self.get_config_graphics_password()
|
||||
self._dev.listen = self.get_config_graphics_address()
|
||||
if gtype == "spice":
|
||||
self._dev.tlsPort = tlsport
|
||||
self._dev.passwd = passwd
|
||||
self._dev.listen = addr
|
||||
self._dev.tlsPort = tlsport
|
||||
if keymap:
|
||||
self._dev.keymap = keymap
|
||||
except ValueError, e:
|
||||
self.err.val_err(_("Graphics device parameter error"), e)
|
||||
|
||||
|
||||
+34
-98
@@ -35,6 +35,7 @@ from virtManager.baseclass import vmmGObjectUI
|
||||
from virtManager.addhardware import vmmAddHardware
|
||||
from virtManager.choosecd import vmmChooseCD
|
||||
from virtManager.fsdetails import vmmFSDetails
|
||||
from virtManager.gfxdetails import vmmGraphicsDetails
|
||||
from virtManager.netlist import vmmNetworkList
|
||||
from virtManager.snapshots import vmmSnapshotPage
|
||||
from virtManager.storagebrowse import vmmStorageBrowser
|
||||
@@ -83,9 +84,11 @@ EDIT_NET_VPORT,
|
||||
EDIT_NET_SOURCE,
|
||||
|
||||
EDIT_GFX_PASSWD,
|
||||
EDIT_GFX_USE_PASSWD,
|
||||
EDIT_GFX_TYPE,
|
||||
EDIT_GFX_KEYMAP,
|
||||
EDIT_GFX_ADDRESS,
|
||||
EDIT_GFX_TLSPORT,
|
||||
EDIT_GFX_PORT,
|
||||
|
||||
EDIT_VIDEO_MODEL,
|
||||
|
||||
@@ -97,7 +100,7 @@ EDIT_CONTROLLER_MODEL,
|
||||
EDIT_TPM_TYPE,
|
||||
|
||||
EDIT_FS,
|
||||
) = range(1, 39)
|
||||
) = range(1, 41)
|
||||
|
||||
|
||||
# Columns in hw list model
|
||||
@@ -387,6 +390,22 @@ class vmmDetails(vmmGObjectUI):
|
||||
self.fsDetails.connect("changed",
|
||||
lambda *x: self.enable_apply(x, EDIT_FS))
|
||||
|
||||
self.gfxdetails = vmmGraphicsDetails(
|
||||
self.vm, self.builder, self.topwin)
|
||||
self.widget("graphics-align").add(self.gfxdetails.top_box)
|
||||
self.gfxdetails.connect("changed-type",
|
||||
lambda *x: self.enable_apply(x, EDIT_GFX_TYPE))
|
||||
self.gfxdetails.connect("changed-port",
|
||||
lambda *x: self.enable_apply(x, EDIT_GFX_PORT))
|
||||
self.gfxdetails.connect("changed-tlsport",
|
||||
lambda *x: self.enable_apply(x, EDIT_GFX_TLSPORT))
|
||||
self.gfxdetails.connect("changed-address",
|
||||
lambda *x: self.enable_apply(x, EDIT_GFX_ADDRESS))
|
||||
self.gfxdetails.connect("changed-keymap",
|
||||
lambda *x: self.enable_apply(x, EDIT_GFX_KEYMAP))
|
||||
self.gfxdetails.connect("changed-password",
|
||||
lambda *x: self.enable_apply(x, EDIT_GFX_PASSWD))
|
||||
|
||||
self.netlist = vmmNetworkList(self.conn, self.builder, self.topwin)
|
||||
self.widget("network-source-label-align").add(self.netlist.top_label)
|
||||
self.widget("network-source-ui-align").add(self.netlist.top_box)
|
||||
@@ -499,13 +518,6 @@ class vmmDetails(vmmGObjectUI):
|
||||
|
||||
"on_network_model_combo_changed": lambda *x: self.enable_apply(x, EDIT_NET_MODEL),
|
||||
|
||||
"on_gfx_type_combo_changed": lambda *x: self.enable_apply(x, EDIT_GFX_TYPE),
|
||||
"on_vnc_keymap_combo_changed": lambda *x: self.enable_apply(x,
|
||||
EDIT_GFX_KEYMAP),
|
||||
|
||||
"on_vnc_use_password_toggled": lambda *x: self.control_gfx_use_passwd(x),
|
||||
"on_vnc_password_changed": lambda *x: self.enable_apply(x, EDIT_GFX_PASSWD),
|
||||
|
||||
"on_sound_model_combo_changed": lambda *x: self.enable_apply(x,
|
||||
EDIT_SOUND_MODEL),
|
||||
|
||||
@@ -579,6 +591,8 @@ class vmmDetails(vmmGObjectUI):
|
||||
self.conn = None
|
||||
self.addhwmenu = None
|
||||
|
||||
self.gfxdetails.cleanup()
|
||||
self.gfxdetails = None
|
||||
self.fsDetails.cleanup()
|
||||
self.fsDetails = None
|
||||
self.netlist.cleanup()
|
||||
@@ -930,20 +944,6 @@ class vmmDetails(vmmGObjectUI):
|
||||
net_model = self.widget("network-model")
|
||||
vmmAddHardware.build_network_model_combo(self.vm, net_model)
|
||||
|
||||
# Graphics type
|
||||
gfx_type = self.widget("gfx-type")
|
||||
model = Gtk.ListStore(str, str)
|
||||
gfx_type.set_model(model)
|
||||
uiutil.set_combo_text_column(gfx_type, 1)
|
||||
model.append([virtinst.VirtualGraphics.TYPE_VNC, "VNC"])
|
||||
model.append([virtinst.VirtualGraphics.TYPE_SPICE, "Spice"])
|
||||
gfx_type.set_active(-1)
|
||||
|
||||
# Graphics keymap
|
||||
gfx_keymap = self.widget("gfx-keymap")
|
||||
vmmAddHardware.build_graphics_keymap_combo(self.vm, gfx_keymap,
|
||||
no_default=no_default)
|
||||
|
||||
# Sound model
|
||||
sound_dev = self.widget("sound-model")
|
||||
vmmAddHardware.build_sound_combo(self.vm, sound_dev,
|
||||
@@ -1355,14 +1355,6 @@ class vmmDetails(vmmGObjectUI):
|
||||
self.vm.has_spicevmc_type_redirdev())
|
||||
self.widget("details-menu-usb-redirection").set_sensitive(can_usb)
|
||||
|
||||
def control_gfx_use_passwd(self, x):
|
||||
passwd_widget = self.widget("gfx-password")
|
||||
sensitive = self.widget("gfx-use-password").get_active()
|
||||
if not sensitive:
|
||||
passwd_widget.set_text("")
|
||||
passwd_widget.set_sensitive(sensitive)
|
||||
self.enable_apply(x, EDIT_GFX_USE_PASSWD)
|
||||
|
||||
def control_vm_run(self, src_ignore):
|
||||
self.emit("action-run-domain",
|
||||
self.vm.conn.get_uri(), self.vm.get_uuid())
|
||||
@@ -2102,23 +2094,25 @@ class vmmDetails(vmmGObjectUI):
|
||||
def config_graphics_apply(self, dev_id_info):
|
||||
df, da, add_define, hf, ha, add_hotplug = self.make_apply_data()
|
||||
|
||||
if self.edited(EDIT_GFX_PASSWD) or self.edited(EDIT_GFX_USE_PASSWD):
|
||||
use_passwd = self.widget("gfx-use-password").get_active()
|
||||
if use_passwd:
|
||||
passwd = self.get_text("gfx-password", strip=False) or ""
|
||||
else:
|
||||
passwd = None
|
||||
(gtype, port,
|
||||
tlsport, addr, passwd, keymap) = self.gfxdetails.get_values()
|
||||
|
||||
if self.edited(EDIT_GFX_PASSWD):
|
||||
add_define(self.vm.define_graphics_password, dev_id_info, passwd)
|
||||
add_hotplug(self.vm.hotplug_graphics_password, dev_id_info,
|
||||
passwd)
|
||||
|
||||
if self.edited(EDIT_GFX_ADDRESS):
|
||||
add_define(self.vm.define_graphics_address, dev_id_info, addr)
|
||||
if self.edited(EDIT_GFX_KEYMAP):
|
||||
keymap = uiutil.get_combo_entry(self.widget("gfx-keymap"))
|
||||
add_define(self.vm.define_graphics_keymap, dev_id_info, keymap)
|
||||
if self.edited(EDIT_GFX_PORT):
|
||||
add_define(self.vm.define_graphics_port, dev_id_info, port)
|
||||
if self.edited(EDIT_GFX_TLSPORT):
|
||||
add_define(self.vm.define_graphics_tlsport, dev_id_info, tlsport)
|
||||
|
||||
# Do this last since it can change graphics unique ID
|
||||
if self.edited(EDIT_GFX_TYPE):
|
||||
gtype = uiutil.get_combo_entry(self.widget("gfx-type"))
|
||||
add_define(self.vm.define_graphics_type, dev_id_info, gtype)
|
||||
|
||||
return self._change_config_helper(df, da, hf, ha)
|
||||
@@ -2669,67 +2663,9 @@ class vmmDetails(vmmGObjectUI):
|
||||
if not gfx:
|
||||
return
|
||||
|
||||
table = self.widget("graphics-table")
|
||||
table.foreach(lambda w, ignore: w.hide(), ())
|
||||
|
||||
def show_row(name):
|
||||
uiutil.set_grid_row_visible(self.widget(name), True)
|
||||
|
||||
def port_to_string(port):
|
||||
if port is None:
|
||||
return "-"
|
||||
return (port == -1 and _("Automatically allocated") or str(port))
|
||||
|
||||
gtype = gfx.type
|
||||
is_vnc = (gtype == "vnc")
|
||||
is_sdl = (gtype == "sdl")
|
||||
is_spice = (gtype == "spice")
|
||||
is_other = not (True in [is_vnc, is_sdl, is_spice])
|
||||
|
||||
title = (_("%(graphicstype)s Server") %
|
||||
{"graphicstype" : gfx.pretty_type_simple(gtype)})
|
||||
|
||||
settype = ""
|
||||
if is_vnc or is_spice:
|
||||
use_passwd = gfx.passwd is not None
|
||||
|
||||
show_row("gfx-password-box")
|
||||
show_row("gfx-address")
|
||||
show_row("gfx-port")
|
||||
show_row("gfx-keymap")
|
||||
|
||||
self.widget("gfx-port").set_text(port_to_string(gfx.port))
|
||||
self.widget("gfx-address").set_text(gfx.listen or "127.0.0.1")
|
||||
uiutil.set_combo_entry(self.widget("gfx-keymap"), gfx.keymap or None)
|
||||
|
||||
self.widget("gfx-password").set_text(gfx.passwd or "")
|
||||
self.widget("gfx-use-password").set_active(use_passwd)
|
||||
self.widget("gfx-password").set_sensitive(use_passwd)
|
||||
|
||||
settype = gtype
|
||||
|
||||
if is_spice:
|
||||
show_row("gfx-tlsport")
|
||||
self.widget("gfx-tlsport").set_text(port_to_string(gfx.tlsPort))
|
||||
|
||||
if is_sdl:
|
||||
title = _("Local SDL Window")
|
||||
|
||||
show_row("gfx-display")
|
||||
show_row("gfx-xauth")
|
||||
self.widget("gfx-display").set_text(gfx.display or _("Unknown"))
|
||||
self.widget("gfx-xauth").set_text(gfx.xauth or _("Unknown"))
|
||||
|
||||
if is_other:
|
||||
settype = gfx.pretty_type_simple(gtype)
|
||||
|
||||
if settype:
|
||||
show_row("gfx-type")
|
||||
uiutil.set_combo_entry(self.widget("gfx-type"), gtype)
|
||||
|
||||
title = self.gfxdetails.set_dev(gfx)
|
||||
self.widget("graphics-title").set_markup("<b>%s</b>" % title)
|
||||
|
||||
|
||||
def refresh_sound_page(self):
|
||||
sound = self.get_hw_selection(HW_LIST_COL_DEVICE)
|
||||
if not sound:
|
||||
|
||||
+13
-1
@@ -739,9 +739,21 @@ class vmmDomain(vmmLibvirtObject):
|
||||
return self._redefine_device(change, devobj)
|
||||
|
||||
# Graphics define methods
|
||||
def define_graphics_address(self, devobj, newval):
|
||||
def change(editdev):
|
||||
editdev.listen = newval
|
||||
return self._redefine_device(change, devobj)
|
||||
def define_graphics_port(self, devobj, newval):
|
||||
def change(editdev):
|
||||
editdev.port = newval
|
||||
return self._redefine_device(change, devobj)
|
||||
def define_graphics_tlsport(self, devobj, newval):
|
||||
def change(editdev):
|
||||
editdev.tlsPort = newval
|
||||
return self._redefine_device(change, devobj)
|
||||
def define_graphics_password(self, devobj, newval):
|
||||
def change(editdev):
|
||||
editdev.passwd = newval or None
|
||||
editdev.passwd = newval
|
||||
return self._redefine_device(change, devobj)
|
||||
def define_graphics_keymap(self, devobj, newval):
|
||||
def change(editdev):
|
||||
|
||||
@@ -0,0 +1,260 @@
|
||||
#
|
||||
# Copyright (C) 2006-2007, 2013, 2014 Red Hat, Inc.
|
||||
# Copyright (C) 2006 Hugh O. Brock <hbrock@redhat.com>
|
||||
# Copyright (C) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
# MA 02110-1301 USA.
|
||||
#
|
||||
|
||||
# pylint: disable=E0611
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import GObject
|
||||
# pylint: enable=E0611
|
||||
|
||||
import virtinst
|
||||
from virtManager import uiutil
|
||||
from virtManager.baseclass import vmmGObjectUI
|
||||
|
||||
|
||||
class vmmGraphicsDetails(vmmGObjectUI):
|
||||
__gsignals__ = {
|
||||
"changed-password": (GObject.SignalFlags.RUN_FIRST, None, []),
|
||||
"changed-port": (GObject.SignalFlags.RUN_FIRST, None, []),
|
||||
"changed-tlsport": (GObject.SignalFlags.RUN_FIRST, None, []),
|
||||
"changed-type": (GObject.SignalFlags.RUN_FIRST, None, []),
|
||||
"changed-address": (GObject.SignalFlags.RUN_FIRST, None, []),
|
||||
"changed-keymap": (GObject.SignalFlags.RUN_FIRST, None, []),
|
||||
}
|
||||
|
||||
def __init__(self, vm, builder, topwin):
|
||||
vmmGObjectUI.__init__(self, "gfxdetails.ui",
|
||||
None, builder=builder, topwin=topwin)
|
||||
self.vm = vm
|
||||
self.conn = vm.conn
|
||||
|
||||
self.builder.connect_signals({
|
||||
"on_graphics_type_changed": self._change_graphics_type,
|
||||
"on_graphics_port_auto_toggled": self._change_port_auto,
|
||||
"on_graphics_tlsport_auto_toggled": self._change_tlsport_auto,
|
||||
"on_graphics_use_password": self._change_password_chk,
|
||||
|
||||
"on_graphics_password_changed": lambda ignore: self.emit("changed-password"),
|
||||
"on_graphics_address_changed": lambda ignore: self.emit("changed-address"),
|
||||
"on_graphics_tlsport_changed": lambda ignore: self.emit("changed-tlsport"),
|
||||
"on_graphics_port_changed": lambda ignore: self.emit("changed-port"),
|
||||
"on_graphics_keymap_changed": lambda ignore: self.emit("changed-keymap"),
|
||||
})
|
||||
|
||||
self._init_ui()
|
||||
self.top_box = self.widget("graphics-box")
|
||||
|
||||
def _cleanup(self):
|
||||
self.vm = None
|
||||
self.conn = None
|
||||
|
||||
##########################
|
||||
# Initialization methods #
|
||||
##########################
|
||||
|
||||
def _init_ui(self):
|
||||
graphics_list = self.widget("graphics-type")
|
||||
graphics_model = Gtk.ListStore(str, str)
|
||||
graphics_list.set_model(graphics_model)
|
||||
uiutil.set_combo_text_column(graphics_list, 1)
|
||||
graphics_model.clear()
|
||||
graphics_model.append(["spice", _("Spice server")])
|
||||
graphics_model.append(["vnc", _("VNC server")])
|
||||
|
||||
self.widget("graphics-address").set_model(Gtk.ListStore(str, str))
|
||||
uiutil.set_combo_text_column(self.widget("graphics-address"), 1)
|
||||
|
||||
model = self.widget("graphics-address").get_model()
|
||||
model.clear()
|
||||
model.append([None, _("Hypervisor default")])
|
||||
model.append(["127.0.0.1", _("Localhost only")])
|
||||
model.append(["0.0.0.0", _("All interfaces")])
|
||||
|
||||
# Keymap
|
||||
combo = self.widget("graphics-keymap")
|
||||
model = Gtk.ListStore(str, str)
|
||||
combo.set_model(model)
|
||||
uiutil.set_combo_text_column(combo, 1)
|
||||
|
||||
model.append(["auto", "Auto"])
|
||||
model.append([virtinst.VirtualGraphics.KEYMAP_LOCAL,
|
||||
"Copy local keymap"])
|
||||
for k in virtinst.VirtualGraphics.valid_keymaps():
|
||||
model.append([k, k])
|
||||
|
||||
def _get_config_graphics_ports(self):
|
||||
port = uiutil.spin_get_helper(self.widget("graphics-port"))
|
||||
tlsport = uiutil.spin_get_helper(self.widget("graphics-tlsport"))
|
||||
gtype = uiutil.get_list_selection(self.widget("graphics-type"), 0)
|
||||
|
||||
if self.widget("graphics-port-auto").get_active():
|
||||
port = -1
|
||||
if self.widget("graphics-tlsport-auto").get_active():
|
||||
tlsport = -1
|
||||
|
||||
if gtype != "spice":
|
||||
tlsport = None
|
||||
return port, tlsport
|
||||
|
||||
|
||||
##############
|
||||
# Public API #
|
||||
##############
|
||||
|
||||
def reset_state(self):
|
||||
uiutil.set_grid_row_visible(self.widget("graphics-display"), False)
|
||||
uiutil.set_grid_row_visible(self.widget("graphics-xauth"), False)
|
||||
|
||||
self.widget("graphics-type").set_active(0)
|
||||
self.widget("graphics-address").set_active(0)
|
||||
self.widget("graphics-keymap").set_active(0)
|
||||
|
||||
self._change_ports()
|
||||
self.widget("graphics-port-auto").set_active(True)
|
||||
self.widget("graphics-tlsport-auto").set_active(True)
|
||||
self.widget("graphics-password").set_text("")
|
||||
self.widget("graphics-password").set_sensitive(False)
|
||||
self.widget("graphics-password-chk").set_active(False)
|
||||
|
||||
def get_values(self):
|
||||
gtype = uiutil.get_list_selection(self.widget("graphics-type"), 0)
|
||||
port, tlsport = self._get_config_graphics_ports()
|
||||
addr = uiutil.get_list_selection(self.widget("graphics-address"), 0)
|
||||
keymap = uiutil.get_combo_entry(self.widget("graphics-keymap"), 0)
|
||||
if keymap == "auto":
|
||||
keymap = None
|
||||
|
||||
passwd = self.widget("graphics-password").get_text()
|
||||
if not self.widget("graphics-password-chk").get_active():
|
||||
passwd = None
|
||||
|
||||
return gtype, port, tlsport, addr, passwd, keymap
|
||||
|
||||
def set_dev(self, gfx):
|
||||
self.reset_state()
|
||||
|
||||
def set_port(basename, val):
|
||||
auto = self.widget(basename + "-auto")
|
||||
widget = self.widget(basename)
|
||||
if val == -1 or gfx.autoport:
|
||||
auto.set_active(True)
|
||||
elif val is None:
|
||||
auto.set_inconsistent(True)
|
||||
else:
|
||||
auto.set_active(False)
|
||||
widget.set_value(val)
|
||||
|
||||
gtype = gfx.type
|
||||
is_vnc = (gtype == "vnc")
|
||||
is_sdl = (gtype == "sdl")
|
||||
is_spice = (gtype == "spice")
|
||||
is_other = not (True in [is_vnc, is_sdl, is_spice])
|
||||
|
||||
title = (_("%(graphicstype)s Server") %
|
||||
{"graphicstype" : gfx.pretty_type_simple(gtype)})
|
||||
|
||||
settype = ""
|
||||
if is_vnc or is_spice:
|
||||
use_passwd = gfx.passwd is not None
|
||||
|
||||
set_port("graphics-port", gfx.port)
|
||||
uiutil.set_combo_entry(
|
||||
self.widget("graphics-address"), gfx.listen, 0)
|
||||
uiutil.set_combo_entry(
|
||||
self.widget("graphics-keymap"), gfx.keymap or None, 0)
|
||||
|
||||
self.widget("graphics-password").set_text(gfx.passwd or "")
|
||||
self.widget("graphics-password-chk").set_active(use_passwd)
|
||||
self.widget("graphics-password").set_sensitive(use_passwd)
|
||||
|
||||
settype = gtype
|
||||
|
||||
if is_spice:
|
||||
set_port("graphics-tlsport", gfx.tlsPort)
|
||||
|
||||
if is_sdl:
|
||||
title = _("Local SDL Window")
|
||||
|
||||
self.widget("graphics-display").set_text(
|
||||
gfx.display or _("Unknown"))
|
||||
self.widget("graphics-xauth").set_text(
|
||||
gfx.xauth or _("Unknown"))
|
||||
|
||||
if is_other:
|
||||
settype = gfx.pretty_type_simple(gtype)
|
||||
|
||||
uiutil.set_combo_entry(self.widget("graphics-type"), gtype, 0)
|
||||
return title
|
||||
|
||||
|
||||
#############
|
||||
# Listeners #
|
||||
#############
|
||||
|
||||
def _show_rows_from_type(self):
|
||||
hide_all = ["graphics-xauth", "graphics-display", "graphics-address",
|
||||
"graphics-password-box", "graphics-keymap", "graphics-port-box",
|
||||
"graphics-tlsport-box"]
|
||||
|
||||
gtype = uiutil.get_list_selection(self.widget("graphics-type"), 0)
|
||||
sdl_rows = ["graphics-xauth", "graphics-display"]
|
||||
vnc_rows = ["graphics-password-box", "graphics-address",
|
||||
"graphics-port-box", "graphics-keymap"]
|
||||
spice_rows = vnc_rows[:] + ["graphics-tlsport-box"]
|
||||
|
||||
rows = []
|
||||
if gtype == "sdl":
|
||||
rows = sdl_rows
|
||||
elif gtype == "vnc":
|
||||
rows = vnc_rows
|
||||
elif gtype == "spice":
|
||||
rows = spice_rows
|
||||
|
||||
for row in hide_all:
|
||||
uiutil.set_grid_row_visible(self.widget(row), row in rows)
|
||||
|
||||
def _change_graphics_type(self, ignore):
|
||||
self._show_rows_from_type()
|
||||
self.emit("changed-type")
|
||||
|
||||
def _change_port_auto(self, ignore):
|
||||
self._change_ports()
|
||||
self.emit("changed-port")
|
||||
|
||||
def _change_tlsport_auto(self, ignore):
|
||||
self._change_ports()
|
||||
self.emit("changed-tlsport")
|
||||
|
||||
def _change_ports(self):
|
||||
is_auto = (self.widget("graphics-port-auto").get_active() or
|
||||
self.widget("graphics-port-auto").get_inconsistent())
|
||||
is_tlsauto = (self.widget("graphics-tlsport-auto").get_active() or
|
||||
self.widget("graphics-tlsport-auto").get_inconsistent())
|
||||
|
||||
self.widget("graphics-port").set_visible(not is_auto)
|
||||
self.widget("graphics-tlsport").set_visible(not is_tlsauto)
|
||||
|
||||
def _change_password_chk(self, ignore=None):
|
||||
if self.widget("graphics-password-chk").get_active():
|
||||
self.widget("graphics-password").set_sensitive(True)
|
||||
else:
|
||||
self.widget("graphics-password").set_text("")
|
||||
self.widget("graphics-password").set_sensitive(False)
|
||||
self.emit("changed-password")
|
||||
@@ -122,15 +122,15 @@ def set_row_selection(listwidget, prevkey):
|
||||
selection.emit("changed")
|
||||
|
||||
|
||||
def set_combo_entry(combo, value):
|
||||
def set_combo_entry(combo, value, rowidx=0):
|
||||
"""
|
||||
Search the passed combobox for value, comparing against the
|
||||
first item in each row. If found, select it. If not found, and
|
||||
Search the passed combobox for value, comparing againt
|
||||
rowidx. If found, select it. If not found, and
|
||||
the combobox has a text entry, stick the value in their and
|
||||
select it.
|
||||
"""
|
||||
idx = -1
|
||||
model_list = [x[0] for x in combo.get_model()]
|
||||
model_list = [x[rowidx] for x in combo.get_model()]
|
||||
model_in_list = (value in model_list)
|
||||
if model_in_list:
|
||||
idx = model_list.index(value)
|
||||
@@ -140,12 +140,12 @@ def set_combo_entry(combo, value):
|
||||
combo.get_child().set_text(value or "")
|
||||
|
||||
|
||||
def get_combo_entry(combo):
|
||||
def get_combo_entry(combo, rowidx=0):
|
||||
"""
|
||||
Helper to get the value specified in a combo box, with or
|
||||
without and entry
|
||||
"""
|
||||
ret = get_list_selection(combo, 0)
|
||||
ret = get_list_selection(combo, rowidx)
|
||||
if ret:
|
||||
return ret
|
||||
if not combo.get_has_entry():
|
||||
|
||||
@@ -149,7 +149,7 @@ class VirtualGraphics(VirtualDevice):
|
||||
# old libvirt that didn't support 'autoport'
|
||||
if self.type != "spice":
|
||||
return None
|
||||
if (self.port == -1 or self.tlsPort == -1):
|
||||
if (self.port == -1 and self.tlsPort == -1):
|
||||
return True
|
||||
return None
|
||||
port = XMLProperty("./@port", is_int=True,
|
||||
|
||||
Reference in New Issue
Block a user