Blame SOURCES/subscription-manager-1.15.9-13-to-subscription-manager-1.15.9-14.patch

d88f46
diff --git a/rel-eng/packages/subscription-manager b/rel-eng/packages/subscription-manager
d88f46
index ba45018..25c7507 100644
d88f46
--- a/rel-eng/packages/subscription-manager
d88f46
+++ b/rel-eng/packages/subscription-manager
d88f46
@@ -1 +1 @@
d88f46
-1.15.9-13 ./
d88f46
+1.15.9-14 ./
d88f46
diff --git a/src/initial-setup/com_redhat_subscription_manager/gui/spokes/rhsm_gui.py b/src/initial-setup/com_redhat_subscription_manager/gui/spokes/rhsm_gui.py
d88f46
index 131bc9b..0f96db5 100644
d88f46
--- a/src/initial-setup/com_redhat_subscription_manager/gui/spokes/rhsm_gui.py
d88f46
+++ b/src/initial-setup/com_redhat_subscription_manager/gui/spokes/rhsm_gui.py
d88f46
@@ -73,6 +73,8 @@ class RHSMSpoke(FirstbootOnlySpokeMixIn, NormalSpoke):
d88f46
 
d88f46
         backend = managergui.Backend()
d88f46
         self.info = registergui.RegisterInfo()
d88f46
+        # BZ 1267322 Set the registration status message
d88f46
+        self._status_message = self.info.get_registration_status()
d88f46
         self.register_widget = registergui.RegisterWidget(backend, facts,
d88f46
                                                           reg_info=self.info,
d88f46
                                                           parent_window=self.main_window)
d88f46
diff --git a/src/subscription_manager/gui/data/glade/register_dialog.glade b/src/subscription_manager/gui/data/glade/register_dialog.glade
d88f46
index 454d463..04b49b5 100644
d88f46
--- a/src/subscription_manager/gui/data/glade/register_dialog.glade
d88f46
+++ b/src/subscription_manager/gui/data/glade/register_dialog.glade
d88f46
@@ -19,6 +19,25 @@
d88f46
             <property name="can_focus">False</property>
d88f46
             <property name="layout_style">end</property>
d88f46
             <child>
d88f46
+              <object class="GtkButton" id="cancel_button">
d88f46
+                <property name="label" translatable="yes">Close</property>
d88f46
+                <property name="visible">True</property>
d88f46
+                <property name="can_focus">True</property>
d88f46
+                <property name="receives_default">True</property>
d88f46
+                <child internal-child="accessible">
d88f46
+                  <object class="AtkObject" id="close_button-atkobject">
d88f46
+                    <property name="AtkObject::accessible-name" translatable="yes">close_button</property>
d88f46
+                  </object>
d88f46
+                </child>
d88f46
+              </object>
d88f46
+              <packing>
d88f46
+                <property name="expand">False</property>
d88f46
+                <property name="fill">False</property>
d88f46
+                <property name="position">0</property>
d88f46
+                <property name="secondary">True</property>
d88f46
+              </packing>
d88f46
+            </child>
d88f46
+            <child>
d88f46
               <object class="GtkButton" id="back_button">
d88f46
                 <property name="label">gtk-go-back</property>
d88f46
                 <property name="visible">True</property>
d88f46
@@ -35,7 +54,7 @@
d88f46
               <packing>
d88f46
                 <property name="expand">False</property>
d88f46
                 <property name="fill">False</property>
d88f46
-                <property name="position">0</property>
d88f46
+                <property name="position">1</property>
d88f46
               </packing>
d88f46
             </child>
d88f46
             <child>
d88f46
@@ -57,7 +76,7 @@
d88f46
               <packing>
d88f46
                 <property name="expand">False</property>
d88f46
                 <property name="fill">False</property>
d88f46
-                <property name="position">1</property>
d88f46
+                <property name="position">2</property>
d88f46
               </packing>
d88f46
             </child>
d88f46
           </object>
d88f46
@@ -74,6 +93,7 @@
d88f46
       </object>
d88f46
     </child>
d88f46
     <action-widgets>
d88f46
+      <action-widget response="0">cancel_button</action-widget>
d88f46
       <action-widget response="0">back_button</action-widget>
d88f46
       <action-widget response="0">register_button</action-widget>
d88f46
     </action-widgets>
d88f46
diff --git a/src/subscription_manager/gui/data/ui/register_dialog.ui b/src/subscription_manager/gui/data/ui/register_dialog.ui
d88f46
index 3099ddc..0730800 100644
d88f46
--- a/src/subscription_manager/gui/data/ui/register_dialog.ui
d88f46
+++ b/src/subscription_manager/gui/data/ui/register_dialog.ui
d88f46
@@ -27,10 +27,30 @@
d88f46
             <property name="visible">True</property>
d88f46
             <property name="can_focus">False</property>
d88f46
             <property name="margin_left">4</property>
d88f46
-            <property name="margin_right">5</property>
d88f46
+            <property name="margin_right">4</property>
d88f46
             <property name="margin_top">4</property>
d88f46
             <property name="margin_bottom">4</property>
d88f46
             <property name="hexpand">True</property>
d88f46
+            <property name="layout_style">end</property>
d88f46
+            <child>
d88f46
+              <object class="GtkButton" id="cancel_button">
d88f46
+                <property name="label" translatable="yes">Close</property>
d88f46
+                <property name="visible">True</property>
d88f46
+                <property name="can_focus">True</property>
d88f46
+                <property name="receives_default">True</property>
d88f46
+                <child internal-child="accessible">
d88f46
+                  <object class="AtkObject" id="close_button-atkobject">
d88f46
+                    <property name="AtkObject::accessible-name" translatable="yes">close_button</property>
d88f46
+                  </object>
d88f46
+                </child>
d88f46
+              </object>
d88f46
+              <packing>
d88f46
+                <property name="expand">False</property>
d88f46
+                <property name="fill">True</property>
d88f46
+                <property name="position">0</property>
d88f46
+                <property name="secondary">True</property>
d88f46
+              </packing>
d88f46
+            </child>
d88f46
             <child>
d88f46
               <object class="GtkButton" id="back_button">
d88f46
                 <property name="label">gtk-go-back</property>
d88f46
@@ -47,7 +67,7 @@
d88f46
               <packing>
d88f46
                 <property name="expand">False</property>
d88f46
                 <property name="fill">True</property>
d88f46
-                <property name="position">0</property>
d88f46
+                <property name="position">1</property>
d88f46
               </packing>
d88f46
             </child>
d88f46
             <child>
d88f46
@@ -58,7 +78,6 @@
d88f46
                 <property name="can_default">True</property>
d88f46
                 <property name="has_default">True</property>
d88f46
                 <property name="receives_default">True</property>
d88f46
-                <property name="image_position">right</property>
d88f46
                 <child internal-child="accessible">
d88f46
                   <object class="AtkObject" id="register_button-atkobject">
d88f46
                     <property name="AtkObject::accessible-name" translatable="yes">register_button</property>
d88f46
@@ -69,7 +88,7 @@
d88f46
               <packing>
d88f46
                 <property name="expand">False</property>
d88f46
                 <property name="fill">True</property>
d88f46
-                <property name="position">1</property>
d88f46
+                <property name="position">2</property>
d88f46
               </packing>
d88f46
             </child>
d88f46
             <child internal-child="accessible">
d88f46
diff --git a/src/subscription_manager/gui/data/ui/selectsla.ui b/src/subscription_manager/gui/data/ui/selectsla.ui
d88f46
index 5093209..cce6375 100644
d88f46
--- a/src/subscription_manager/gui/data/ui/selectsla.ui
d88f46
+++ b/src/subscription_manager/gui/data/ui/selectsla.ui
d88f46
@@ -1,22 +1,22 @@
d88f46
-
d88f46
+
d88f46
+
d88f46
 <interface>
d88f46
-  <object class="GtkTextBuffer" id="textbuffer1">
d88f46
-    <property name="text">Your installed products could be covered using one of multiple service levels.</property>
d88f46
-  </object>
d88f46
-  
d88f46
-  
d88f46
+  <requires lib="gtk+" version="3.0"/>
d88f46
   <object class="GtkBox" id="container">
d88f46
-    <property name="orientation">vertical</property>
d88f46
     <property name="visible">True</property>
d88f46
     <property name="can_focus">False</property>
d88f46
-    <property name="spacing">7</property>
d88f46
+    <property name="orientation">vertical</property>
d88f46
     <child>
d88f46
       <object class="GtkLabel" id="label3">
d88f46
         <property name="visible">True</property>
d88f46
         <property name="can_focus">False</property>
d88f46
-        <property name="xalign">0</property>
d88f46
+        <property name="halign">start</property>
d88f46
         <property name="label" translatable="yes"><b>Select Service Level</b></property>
d88f46
         <property name="use_markup">True</property>
d88f46
+        <property name="wrap">True</property>
d88f46
+        <property name="ellipsize">end</property>
d88f46
+        <property name="max_width_chars">64</property>
d88f46
+        <property name="xalign">0</property>
d88f46
       </object>
d88f46
       <packing>
d88f46
         <property name="expand">False</property>
d88f46
@@ -26,25 +26,32 @@
d88f46
     </child>
d88f46
     <child>
d88f46
       <object class="GtkBox" id="vbox2">
d88f46
-        <property name="orientation">vertical</property>
d88f46
         <property name="visible">True</property>
d88f46
         <property name="can_focus">False</property>
d88f46
-        <property name="spacing">12</property>
d88f46
+        <property name="hexpand">False</property>
d88f46
+        <property name="vexpand">False</property>
d88f46
+        <property name="orientation">vertical</property>
d88f46
         <child>
d88f46
-          <object class="GtkTextView" id="detection_label">
d88f46
+          <object class="GtkLabel" id="label1">
d88f46
             <property name="visible">True</property>
d88f46
-            <property name="sensitive">False</property>
d88f46
             <property name="can_focus">False</property>
d88f46
-            <property name="editable">False</property>
d88f46
-            <property name="wrap_mode">word</property>
d88f46
-            <property name="left_margin">10</property>
d88f46
-            <property name="right_margin">10</property>
d88f46
-            <property name="cursor_visible">False</property>
d88f46
-            <property name="accepts_tab">False</property>
d88f46
-            <property name="buffer">textbuffer1</property>
d88f46
+            <property name="margin_left">8</property>
d88f46
+            <property name="margin_right">8</property>
d88f46
+            <property name="margin_top">4</property>
d88f46
+            <property name="margin_bottom">4</property>
d88f46
+            <property name="label" translatable="yes">Your installed products could be covered using one of multiple service levels.</property>
d88f46
+            <property name="wrap">True</property>
d88f46
+            <property name="ellipsize">end</property>
d88f46
+            <property name="max_width_chars">64</property>
d88f46
+            <property name="lines">4</property>
d88f46
+            <property name="xalign">0</property>
d88f46
+            <property name="yalign">0</property>
d88f46
+            <attributes>
d88f46
+              <attribute name="background" value="#ffffffffffff"/>
d88f46
+            </attributes>
d88f46
           </object>
d88f46
           <packing>
d88f46
-            <property name="expand">False</property>
d88f46
+            <property name="expand">True</property>
d88f46
             <property name="fill">True</property>
d88f46
             <property name="position">0</property>
d88f46
           </packing>
d88f46
@@ -53,111 +60,88 @@
d88f46
           <object class="GtkLabel" id="detected_products_label">
d88f46
             <property name="visible">True</property>
d88f46
             <property name="can_focus">False</property>
d88f46
-            <property name="xalign">0</property>
d88f46
-            <property name="yalign">0</property>
d88f46
+            <property name="halign">start</property>
d88f46
+            <property name="valign">start</property>
d88f46
             <property name="xpad">10</property>
d88f46
             <property name="label" translatable="yes"><b>Installed products:</b></property>
d88f46
             <property name="use_markup">True</property>
d88f46
+            <property name="wrap">True</property>
d88f46
+            <property name="ellipsize">middle</property>
d88f46
+            <property name="max_width_chars">64</property>
d88f46
+            <property name="xalign">0</property>
d88f46
+            <property name="yalign">0</property>
d88f46
           </object>
d88f46
           <packing>
d88f46
             <property name="expand">False</property>
d88f46
             <property name="fill">False</property>
d88f46
-            <property name="position">1</property>
d88f46
+            <property name="position">2</property>
d88f46
           </packing>
d88f46
         </child>
d88f46
         <child>
d88f46
           <object class="GtkLabel" id="product_list_label">
d88f46
             <property name="visible">True</property>
d88f46
             <property name="can_focus">False</property>
d88f46
-            <property name="xalign">0</property>
d88f46
-            <property name="yalign">0</property>
d88f46
+            <property name="margin_top">4</property>
d88f46
+            <property name="margin_bottom">4</property>
d88f46
             <property name="xpad">25</property>
d88f46
-            <property name="label" translatable="yes">prod 1, prod2, prod 3, prod 4, prod 5, prod 6, prod 7, prod 8</property>
d88f46
+            <property name="label" translatable="yes">Awesome OS 14, Awesome OS 14 Super Edition, Awesome Middle Ware For Awesome App Platform Awesome Developer Editition</property>
d88f46
             <property name="use_markup">True</property>
d88f46
             <property name="wrap">True</property>
d88f46
+            <property name="max_width_chars">64</property>
d88f46
+            <property name="xalign">0</property>
d88f46
+            <property name="yalign">0</property>
d88f46
           </object>
d88f46
           <packing>
d88f46
             <property name="expand">False</property>
d88f46
             <property name="fill">False</property>
d88f46
-            <property name="position">2</property>
d88f46
+            <property name="position">3</property>
d88f46
           </packing>
d88f46
         </child>
d88f46
+      </object>
d88f46
+      <packing>
d88f46
+        <property name="expand">False</property>
d88f46
+        <property name="fill">True</property>
d88f46
+        <property name="position">1</property>
d88f46
+      </packing>
d88f46
+    </child>
d88f46
+    <child>
d88f46
+      <object class="GtkGrid" id="grid2">
d88f46
+        <property name="visible">True</property>
d88f46
+        <property name="can_focus">False</property>
d88f46
         <child>
d88f46
-          <object class="GtkLabel" id="subscribe_all_as_label">
d88f46
+          <object class="GtkComboBox" id="sla_combobox">
d88f46
             <property name="visible">True</property>
d88f46
             <property name="can_focus">False</property>
d88f46
-            <property name="xalign">0</property>
d88f46
-            <property name="yalign">0</property>
d88f46
-            <property name="xpad">10</property>
d88f46
-            <property name="label" translatable="yes"><b>Select a common service level for this system's subscriptions:</b></property>
d88f46
-            <property name="use_markup">True</property>
d88f46
           </object>
d88f46
           <packing>
d88f46
-            <property name="expand">False</property>
d88f46
-            <property name="fill">False</property>
d88f46
-            <property name="position">3</property>
d88f46
+            <property name="left_attach">1</property>
d88f46
+            <property name="top_attach">0</property>
d88f46
           </packing>
d88f46
         </child>
d88f46
         <child>
d88f46
-          <object class="GtkScrolledWindow" id="scrolledwindow1">
d88f46
+          <object class="GtkLabel" id="subscribe_all_as_label">
d88f46
             <property name="visible">True</property>
d88f46
-            <property name="can_focus">True</property>
d88f46
-            <property name="hscrollbar_policy">automatic</property>
d88f46
-            <property name="vscrollbar_policy">automatic</property>
d88f46
-            <child>
d88f46
-              <object class="GtkViewport" id="viewport1">
d88f46
-                <property name="visible">True</property>
d88f46
-                <property name="can_focus">False</property>
d88f46
-                <property name="resize_mode">queue</property>
d88f46
-                <property name="shadow_type">none</property>
d88f46
-                <child>
d88f46
-                  <object class="GtkBox" id="sla_radio_container">
d88f46
-                    <property name="orientation">vertical</property>
d88f46
-                    <property name="visible">True</property>
d88f46
-                    <property name="can_focus">False</property>
d88f46
-                    <property name="border_width">4</property>
d88f46
-                    <child>
d88f46
-                      <object class="GtkLabel" id="label1">
d88f46
-                        <property name="visible">True</property>
d88f46
-                        <property name="can_focus">False</property>
d88f46
-                        <property name="xalign">0</property>
d88f46
-                        <property name="label" translatable="yes">label</property>
d88f46
-                      </object>
d88f46
-                      <packing>
d88f46
-                        <property name="expand">False</property>
d88f46
-                        <property name="fill">False</property>
d88f46
-                        <property name="position">0</property>
d88f46
-                      </packing>
d88f46
-                    </child>
d88f46
-                    <child>
d88f46
-                      <object class="GtkLabel" id="label2">
d88f46
-                        <property name="visible">True</property>
d88f46
-                        <property name="can_focus">False</property>
d88f46
-                        <property name="xalign">0</property>
d88f46
-                        <property name="label" translatable="yes">label</property>
d88f46
-                      </object>
d88f46
-                      <packing>
d88f46
-                        <property name="expand">False</property>
d88f46
-                        <property name="fill">False</property>
d88f46
-                        <property name="position">1</property>
d88f46
-                      </packing>
d88f46
-                    </child>
d88f46
-                  </object>
d88f46
-                </child>
d88f46
-              </object>
d88f46
-            </child>
d88f46
+            <property name="can_focus">False</property>
d88f46
+            <property name="halign">start</property>
d88f46
+            <property name="valign">start</property>
d88f46
+            <property name="xpad">10</property>
d88f46
+            <property name="label" translatable="yes"><b>Select a common service level for this system's subscriptions:</b></property>
d88f46
+            <property name="use_markup">True</property>
d88f46
+            <property name="wrap">True</property>
d88f46
+            <property name="max_width_chars">32</property>
d88f46
+            <property name="xalign">0</property>
d88f46
+            <property name="yalign">0</property>
d88f46
           </object>
d88f46
           <packing>
d88f46
-            <property name="expand">True</property>
d88f46
-            <property name="fill">True</property>
d88f46
-            <property name="position">4</property>
d88f46
+            <property name="left_attach">0</property>
d88f46
+            <property name="top_attach">0</property>
d88f46
           </packing>
d88f46
         </child>
d88f46
       </object>
d88f46
       <packing>
d88f46
-        <property name="expand">True</property>
d88f46
+        <property name="expand">False</property>
d88f46
         <property name="fill">True</property>
d88f46
-        <property name="position">1</property>
d88f46
+        <property name="position">2</property>
d88f46
       </packing>
d88f46
     </child>
d88f46
   </object>
d88f46
diff --git a/src/subscription_manager/gui/managergui.py b/src/subscription_manager/gui/managergui.py
d88f46
index 8f3ddb4..8a0498e 100644
d88f46
--- a/src/subscription_manager/gui/managergui.py
d88f46
+++ b/src/subscription_manager/gui/managergui.py
d88f46
@@ -359,9 +359,20 @@ class MainWindow(widgets.SubmanBaseWidget):
d88f46
 
d88f46
     def _register_item_clicked(self, widget):
d88f46
         registration_dialog = registergui.RegisterDialog(self.backend, self.facts)
d88f46
+        registration_dialog.register_dialog.connect('destroy',
d88f46
+                                                    self._on_dialog_destroy,
d88f46
+                                                    widget)
d88f46
+
d88f46
+        if registration_dialog and widget:
d88f46
+            widget.set_sensitive(False)
d88f46
+
d88f46
         registration_dialog.initialize()
d88f46
         registration_dialog.show()
d88f46
 
d88f46
+    def _on_dialog_destroy(self, obj, widget):
d88f46
+        widget.set_sensitive(True)
d88f46
+        return False
d88f46
+
d88f46
     def _preferences_item_clicked(self, widget):
d88f46
         try:
d88f46
             self.preferences_dialog.show()
d88f46
@@ -425,8 +436,14 @@ class MainWindow(widgets.SubmanBaseWidget):
d88f46
         self.import_sub_dialog.show()
d88f46
 
d88f46
     def _update_certificates_button_clicked(self, widget):
d88f46
-        autobind_wizard = registergui.AutobindWizardDialog(self.backend,
d88f46
-                                                           self.facts)
d88f46
+        autobind_wizard = registergui.AutobindWizardDialog(self.backend, self.facts)
d88f46
+        autobind_wizard.register_dialog.connect('destroy',
d88f46
+                                                self._on_dialog_destroy,
d88f46
+                                                widget)
d88f46
+
d88f46
+        if autobind_wizard and widget:
d88f46
+            widget.set_sensitive(False)
d88f46
+
d88f46
         autobind_wizard.initialize()
d88f46
         autobind_wizard.show()
d88f46
 
d88f46
diff --git a/src/subscription_manager/gui/registergui.py b/src/subscription_manager/gui/registergui.py
d88f46
index a07a646..5dc5676 100644
d88f46
--- a/src/subscription_manager/gui/registergui.py
d88f46
+++ b/src/subscription_manager/gui/registergui.py
d88f46
@@ -190,6 +190,12 @@ class RegisterInfo(ga_GObject.GObject):
d88f46
         self.set_property('port', CFG.get('server', 'port'))
d88f46
         self.set_property('prefix', CFG.get('server', 'prefix'))
d88f46
 
d88f46
+    def get_registration_status(self):
d88f46
+        msg = _("This system is currently not registered.")
d88f46
+        if self.identity and self.identity.is_valid():
d88f46
+            msg = _("System Already Registered")
d88f46
+        return msg
d88f46
+
d88f46
 
d88f46
 class RegisterWidget(widgets.SubmanBaseWidget):
d88f46
     gui_file = "registration"
d88f46
@@ -358,7 +364,7 @@ class RegisterWidget(widgets.SubmanBaseWidget):
d88f46
         self.info.set_property('register-status', msg)
d88f46
 
d88f46
     def do_register_finished(self):
d88f46
-        msg = _("The system has been registered with ID: %s ") % self.info.identity.uuid
d88f46
+        msg = _("System '%s' successfully registered.\n") % self.info.identity.name
d88f46
         self.info.set_property('register-status', msg)
d88f46
 
d88f46
     def do_finished(self):
d88f46
@@ -402,6 +408,8 @@ class RegisterWidget(widgets.SubmanBaseWidget):
d88f46
 
d88f46
         if self.info.identity.is_valid():
d88f46
             self.emit('register-finished')
d88f46
+            msg = _("System '%s' successfully registered.\n") % self.info.identity.name
d88f46
+            self.info.set_property('register-status', msg.rstrip())
d88f46
             # We are done if auto bind is being skipped ("Manually attach
d88f46
             # to subscriptions" is clicked in the gui)
d88f46
             if self.info.get_property('skip-auto-bind'):
d88f46
@@ -409,7 +417,8 @@ class RegisterWidget(widgets.SubmanBaseWidget):
d88f46
             self.current_screen.emit('move-to-screen', SELECT_SLA_PAGE)
d88f46
             self.register_widget.show_all()
d88f46
             return False
d88f46
-
d88f46
+        msg = _("This system is currently not registered.")
d88f46
+        self.info.set_property('register-status', msg)
d88f46
         self.current_screen.stay()
d88f46
         self.register_widget.show_all()
d88f46
         return False
d88f46
@@ -643,7 +652,8 @@ class RegisterDialog(widgets.SubmanBaseWidget):
d88f46
 
d88f46
     widget_names = ['register_dialog', 'register_dialog_main_vbox',
d88f46
                     'register_details_label',
d88f46
-                    'back_button', 'register_button', 'progress_label',
d88f46
+                    'back_button', 'register_button',
d88f46
+                    'cancel_button', 'progress_label',
d88f46
                     'dialog_vbox6']
d88f46
 
d88f46
     gui_file = "register_dialog"
d88f46
@@ -690,6 +700,9 @@ class RegisterDialog(widgets.SubmanBaseWidget):
d88f46
         self.register_button.connect('clicked', self._on_register_button_clicked)
d88f46
         self.back_button.connect('clicked', self._on_back_button_clicked)
d88f46
 
d88f46
+        # TODO: Hook this up to a RegisterWidget 'cancel' handler, when there is one
d88f46
+        self.cancel_button.connect('clicked', self.cancel)
d88f46
+
d88f46
         # update window title on register state changes
d88f46
         self.reg_info.connect('notify::register-state',
d88f46
                                self._on_register_state_change)
d88f46
@@ -718,8 +731,8 @@ class RegisterDialog(widgets.SubmanBaseWidget):
d88f46
         self.register_dialog.show()
d88f46
 
d88f46
     def cancel(self, button):
d88f46
-        self.register_dialog.hide()
d88f46
-        return True
d88f46
+        self.register_dialog.destroy()
d88f46
+        return False
d88f46
 
d88f46
     def on_register_message(self, obj, msg, msg_type=None):
d88f46
         # NOTE: We ignore the message type here, but initial-setup wont.
d88f46
@@ -972,11 +985,24 @@ class PerformRegisterScreen(NoGuiScreen):
d88f46
         # Done with the registration stuff, now on to attach
d88f46
         self.emit('register-finished')
d88f46
 
d88f46
+        # Having activation-keys means the 'skip-auto-bind' wasn't an
d88f46
+        # option. So 'skip-auto-bind' and 'activation-keys' are
d88f46
+        # exclusive in practice.
d88f46
         if self.info.get_property('activation-keys'):
d88f46
             self.emit('move-to-screen', REFRESH_SUBSCRIPTIONS_PAGE)
d88f46
-        else:
d88f46
-            self.emit('move-to-screen', SELECT_SLA_PAGE)
d88f46
+            self.pre_done()
d88f46
+            return
d88f46
 
d88f46
+        if self.info.get_property('skip-auto-bind'):
d88f46
+            # We are done at this point basically. The handler for 'register-finished'
d88f46
+            # will take care of going to the done screen. This is just to avoid starting
d88f46
+            # select sla page's pre(). In the future it may make sense to have a 'screen'
d88f46
+            # after this that just does the logic in these if statements in a non-async pre()
d88f46
+            # so we could potentially block on it.
d88f46
+            self.pre_done()
d88f46
+            return
d88f46
+
d88f46
+        self.emit('move-to-screen', SELECT_SLA_PAGE)
d88f46
         self.pre_done()
d88f46
         return
d88f46
 
d88f46
@@ -1092,7 +1118,7 @@ class SelectSLAScreen(Screen):
d88f46
     """
d88f46
     screen_enum = SELECT_SLA_PAGE
d88f46
     widget_names = Screen.widget_names + ['product_list_label',
d88f46
-                                          'sla_radio_container',
d88f46
+                                          'sla_combobox',
d88f46
                                           'owner_treeview']
d88f46
     gui_file = "selectsla"
d88f46
 
d88f46
@@ -1102,53 +1128,41 @@ class SelectSLAScreen(Screen):
d88f46
         self.pre_message = _("Finding suitable service levels")
d88f46
         self.button_label = _("Next")
d88f46
 
d88f46
+        self.list_store = ga_Gtk.ListStore(str, ga_GObject.TYPE_PYOBJECT)
d88f46
+        self.sla_combobox.set_model(self.list_store)
d88f46
+
d88f46
+        self.sla_combobox.connect('changed', self._on_sla_combobox_changed)
d88f46
+
d88f46
+        renderer_text = ga_Gtk.CellRendererText()
d88f46
+        self.sla_combobox.pack_start(renderer_text, True)
d88f46
+        self.sla_combobox.add_attribute(renderer_text, 'text', 0)
d88f46
+
d88f46
+    def _on_sla_combobox_changed(self, combobox):
d88f46
+        tree_iter = combobox.get_active_iter()
d88f46
+        if tree_iter is not None:
d88f46
+            model = combobox.get_model()
d88f46
+            sla, sla_data_map = model[tree_iter][:2]
d88f46
+            self.info.set_property('dry-run-result',
d88f46
+                                   sla_data_map[sla])
d88f46
+
d88f46
     def set_model(self, unentitled_prod_certs, sla_data_map):
d88f46
         self.product_list_label.set_text(
d88f46
                 self._format_prods(unentitled_prod_certs))
d88f46
-        group = None
d88f46
 
d88f46
-        # The sla the user or kickstart requested
d88f46
-        preferred_sla = self.info.get_property('preferred_sla')
d88f46
-
d88f46
-        # reverse iterate the list as that will most likely put 'None' last.
d88f46
-        # then pack_start so we don't end up with radio buttons at the bottom
d88f46
-        # of the screen.
d88f46
-        chose_default = False
d88f46
+        self.list_store.clear()
d88f46
         for sla in reversed(sla_data_map.keys()):
d88f46
-            radio = ga_Gtk.RadioButton(group=group, label=sla)
d88f46
-            radio.connect("toggled",
d88f46
-                          self._radio_clicked,
d88f46
-                          (sla, sla_data_map))
d88f46
-            # Use the user preferred sla as the default
d88f46
-            # May need to handle preferred_sla not being in the suggested slas
d88f46
-            if preferred_sla and preferred_sla == sla:
d88f46
-                radio.set_active(True)
d88f46
-                chose_default = True
d88f46
-
d88f46
-            self.sla_radio_container.pack_start(radio, expand=False,
d88f46
-                                                fill=False, padding=0)
d88f46
-            radio.show()
d88f46
-            group = radio
d88f46
-
d88f46
-        if not chose_default:
d88f46
-            # set the initial radio button as default selection.
d88f46
-            group.set_active(True)
d88f46
+            self.list_store.append([sla, sla_data_map])
d88f46
+
d88f46
+        self.sla_combobox.set_model(self.list_store)
d88f46
+        self.sla_combobox.set_active(0)
d88f46
 
d88f46
     def apply(self):
d88f46
         self.emit('move-to-screen', CONFIRM_SUBS_PAGE)
d88f46
         return True
d88f46
 
d88f46
     def clear(self):
d88f46
-        child_widgets = self.sla_radio_container.get_children()
d88f46
-        for child in child_widgets:
d88f46
-            self.sla_radio_container.remove(child)
d88f46
-
d88f46
-    def _radio_clicked(self, button, data):
d88f46
-        sla, sla_data_map = data
d88f46
-
d88f46
-        if button.get_active():
d88f46
-            self.info.set_property('dry-run-result',
d88f46
-                                   sla_data_map[sla])
d88f46
+        self.list_store.clear()
d88f46
+        self.sla_combobox.set_model(self.list_store)
d88f46
 
d88f46
     def _format_prods(self, prod_certs):
d88f46
         prod_str = ""
d88f46
@@ -2031,6 +2045,11 @@ class DoneScreen(Screen):
d88f46
         super(DoneScreen, self).__init__(reg_info, async_backend, facts, parent_window)
d88f46
         self.pre_message = "We are done."
d88f46
 
d88f46
+    def pre(self):
d88f46
+        # TODO: We could start cleanup tasks here.
d88f46
+        self.pre_done()
d88f46
+        return False
d88f46
+
d88f46
 
d88f46
 class InfoScreen(Screen):
d88f46
     """
d88f46
diff --git a/subscription-manager.spec b/subscription-manager.spec
d88f46
index 63e7a50..aaec788 100644
d88f46
--- a/subscription-manager.spec
d88f46
+++ b/subscription-manager.spec
d88f46
@@ -49,7 +49,7 @@
d88f46
 
d88f46
 Name: subscription-manager
d88f46
 Version: 1.15.9
d88f46
-Release: 13%{?dist}
d88f46
+Release: 14%{?dist}
d88f46
 Summary: Tools and libraries for subscription and repository management
d88f46
 Group:   System Environment/Base
d88f46
 License: GPLv2
d88f46
@@ -542,6 +542,14 @@ fi
d88f46
 %endif
d88f46
 
d88f46
 %changelog
d88f46
+* Wed Oct 07 2015 Chris Rog <crog@redhat.com> 1.15.9-14
d88f46
+- 1268102: Stop main window from opening duplicate dialogs. (awood@redhat.com)
d88f46
+- 1268088: Changes the rhsm spoke display message to end with "registered"
d88f46
+  (csnyder@redhat.com)
d88f46
+- 1268095: Replace SLA radio buttons w/ combobox (alikins@redhat.com)
d88f46
+- 1268028: Fix skipped auto attach in registergui (alikins@redhat.com)
d88f46
+- 1268060: Add 'cancel' back to s-m-gui register. (alikins@redhat.com)
d88f46
+
d88f46
 * Wed Sep 30 2015 Chris Rog <crog@redhat.com> 1.15.9-13
d88f46
 - 1266480: Refresh TreeView selection after subscriptions are removed.
d88f46
   (awood@redhat.com)