diff --git a/po/bn_IN.po b/po/bn_IN.po
index ddb046c..1414155 100644
--- a/po/bn_IN.po
+++ b/po/bn_IN.po
@@ -5,7 +5,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-02 14:20-0400\n"
-"PO-Revision-Date: 2015-09-23 11:55-0400\n"
+"PO-Revision-Date: 2015-09-29 03:28-0400\n"
"Last-Translator: John Sefler <jsefler@redhat.com>\n"
"Language-Team: Bengali (India)\n"
"MIME-Version: 1.0\n"
@@ -2946,7 +2946,7 @@ msgstr ""
#: ../src/subscription_manager/managercli.py:1952
#, python-format
msgid " Available Repositories in %s"
-msgstr " %s-এ উপলব্ধ সংগ্রহস্থল"
+msgstr " %s-এ উপলব্ধ সংগ্রহস্থল"
#: ../src/subscription_manager/managercli.py:1962
msgid "There were no available repositories matching the specified criteria."
diff --git a/po/ko.po b/po/ko.po
index 1d7c226..6d334ba 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -1542,7 +1542,7 @@ msgstr "\n"
#: ../src/subscription_manager/migrate/migrate.py:699
#, python-format
msgid "System '%s' successfully registered.\n"
-msgstr "시스템 '%s'이 성공적으로 등록되었습니다. \n"
+msgstr "시스템 '%s'이 성공적으로 등록되었습니다.\n"
# translation auto-copied from project subscription-manager, version 1.11.X, document keys
#: ../src/subscription_manager/migrate/migrate.py:703
@@ -1610,7 +1610,7 @@ msgstr "서브스크립션 관리자로 등록하는 동안 자동 첨부 (auto-
msgid ""
"service level to follow when attaching subscriptions, for no service level "
"use --servicelevel=\"\""
-msgstr "서브스크립션을 첨부할 때 따라야 할 서비스 레벨, 서비스 레벨이 없는 경우 --servicelevel=\"\" 사용 "
+msgstr "서브스크립션을 첨부할 때 따라야 할 서비스 레벨, 서비스 레벨이 없는 경우 --servicelevel=\"\" 사용"
#: ../src/subscription_manager/migrate/migrate.py:829
msgid "don't use legacy proxy settings with destination server"
@@ -3398,7 +3398,7 @@ msgstr "매니페스트 zip이 잘못되었습니다."
#: ../src/rct/manifest_commands.py:84
#, python-format
msgid "Unable to find file \"%s\" in manifest."
-msgstr "매니페스트에서 파일 \"%s\"를 찾을 수 없습니다. "
+msgstr "매니페스트에서 파일 \"%s\"를 찾을 수 없습니다."
# translation auto-copied from project subscription-manager, version 1.11.X, document keys
#: ../src/rct/manifest_commands.py:108
diff --git a/po/ml.po b/po/ml.po
index 2ae55b1..7defbf8 100644
--- a/po/ml.po
+++ b/po/ml.po
@@ -5,7 +5,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-02 14:20-0400\n"
-"PO-Revision-Date: 2015-09-22 04:48-0400\n"
+"PO-Revision-Date: 2015-09-29 03:19-0400\n"
"Last-Translator: John Sefler <jsefler@redhat.com>\n"
"Language-Team: Malayalam\n"
"MIME-Version: 1.0\n"
@@ -1318,7 +1318,7 @@ msgstr ""
#: ../src/subscription_manager/cli.py:61
#, python-format
msgid "%%prog %s [OPTIONS]"
-msgstr "%%prog %s [ഐച്ഛികങ്ങള്] "
+msgstr "%%prog %s [ഐച്ഛികങ്ങള്]"
# translation auto-copied from project subscription-manager, version 1.11.X, document keys
#: ../src/subscription_manager/cli.py:92
@@ -1341,12 +1341,12 @@ msgstr "മറ്റു് ഘടകങ്ങള്:"
# translation auto-copied from project subscription-manager, version 1.11.X, document keys
#: ../src/subscription_manager/reasons.py:85
msgid "Product "
-msgstr "പ്രൊഡക്ട്"
+msgstr "പ്രൊഡക്ട് "
# translation auto-copied from project subscription-manager, version 1.11.X, document keys
#: ../src/subscription_manager/reasons.py:87
msgid "Subscription "
-msgstr "സബ്സ്ക്രിപ്ഷന്"
+msgstr "സബ്സ്ക്രിപ്ഷന് "
# translation auto-copied from project subscription-manager, version 1.11.X, document keys
#: ../src/subscription_manager/reasons.py:89
@@ -4065,7 +4065,7 @@ msgstr ""
#: ../src/rhsm_debug/debug_commands.py:80
#, python-format
msgid "%%prog %s [OPTIONS] "
-msgstr "%%prog %s [ഐച്ഛികങ്ങള്]"
+msgstr "%%prog %s [ഐച്ഛികങ്ങള്] "
# translation auto-copied from project subscription-manager, version 1.11.X, document keys
#: ../src/rhsm_debug/debug_commands.py:85
diff --git a/po/ta_IN.po b/po/ta_IN.po
index de97c17..3a2d9ec 100644
--- a/po/ta_IN.po
+++ b/po/ta_IN.po
@@ -5,7 +5,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-02 14:20-0400\n"
-"PO-Revision-Date: 2015-09-23 12:35-0400\n"
+"PO-Revision-Date: 2015-09-29 03:15-0400\n"
"Last-Translator: John Sefler <jsefler@redhat.com>\n"
"Language-Team: American English <kde-i18n-doc@kde.org>\n"
"MIME-Version: 1.0\n"
@@ -4640,7 +4640,7 @@ msgstr "எனது சந்தாபடுத்தல்கள் பார
#: ../src/subscription_manager/gui/data/glade/mysubs.glade.h:2
#: ../po/tmp_ui_links/mysubs.ui.glade.h:2
msgid "Remove"
-msgstr "நீக்கவும் "
+msgstr "நீக்கவும்"
# translation auto-copied from project subscription-manager, version 1.11.X, document keys
#: ../src/subscription_manager/gui/data/glade/networkConfig.glade.h:1
@@ -4706,7 +4706,7 @@ msgstr "அங்கீகார சரிபார்க்கும்பெ
#: ../src/subscription_manager/gui/data/glade/networkConfig.glade.h:11
#: ../po/tmp_ui_links/networkConfig.ui.glade.h:17
msgid "Proxy _Username:"
-msgstr "பதிலாள் பயனர்பெயர் (_U): "
+msgstr "பதிலாள் பயனர்பெயர் (_U):"
# translation auto-copied from project subscription-manager, version 1.11.X, document keys
#: ../src/subscription_manager/gui/data/glade/networkConfig.glade.h:12
diff --git a/po/zh_TW.po b/po/zh_TW.po
index ad88430..bca3cb0 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-02 14:20-0400\n"
-"PO-Revision-Date: 2015-09-23 12:02-0400\n"
+"PO-Revision-Date: 2015-09-29 03:29-0400\n"
"Last-Translator: John Sefler <jsefler@redhat.com>\n"
"Language-Team: Chinese (Traditional, Taiwan)\n"
"MIME-Version: 1.0\n"
@@ -2827,7 +2827,7 @@ msgstr "欲停用的軟體庫(可多次指定)。支援萬用字元(* 與
#: ../src/subscription_manager/managercli.py:1952
#, python-format
msgid " Available Repositories in %s"
-msgstr "%s 中的可用軟體庫"
+msgstr " %s 中的可用軟體庫"
#: ../src/subscription_manager/managercli.py:1962
msgid "There were no available repositories matching the specified criteria."
diff --git a/rel-eng/packages/subscription-manager b/rel-eng/packages/subscription-manager
index 85b895f..ba45018 100644
--- a/rel-eng/packages/subscription-manager
+++ b/rel-eng/packages/subscription-manager
@@ -1 +1 @@
-1.15.9-12 ./
+1.15.9-13 ./
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
index 15c98ff..131bc9b 100644
--- 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
@@ -54,7 +54,7 @@ class RHSMSpoke(FirstbootOnlySpokeMixIn, NormalSpoke):
uiFile = "rhsm_gui.ui"
helpFile = "SubscriptionManagerSpoke.xml"
category = SystemCategory
- icon = "face-cool-symbolic"
+ icon = "subscription-manager"
title = "Subscription Manager"
def __init__(self, data, storage, payload, instclass):
@@ -80,7 +80,7 @@ class RHSMSpoke(FirstbootOnlySpokeMixIn, NormalSpoke):
self.register_box = self.builder.get_object("register_box")
self.button_box = self.builder.get_object('navigation_button_box')
self.proceed_button = self.builder.get_object('proceed_button')
- self.cancel_button = self.builder.get_object('cancel_button')
+ self.back_button = self.builder.get_object('cancel_button')
self.register_box.pack_start(self.register_widget.register_widget,
True, True, 0)
@@ -88,7 +88,7 @@ class RHSMSpoke(FirstbootOnlySpokeMixIn, NormalSpoke):
# Hook up the nav buttons in the gui
# TODO: add a 'start over'?
self.proceed_button.connect('clicked', self._on_register_button_clicked)
- self.cancel_button.connect('clicked', self._on_cancel_button_clicked)
+ self.back_button.connect('clicked', self._on_back_button_clicked)
# initial-setup will likely
self.register_widget.connect('finished', self._on_finished)
@@ -204,15 +204,16 @@ class RHSMSpoke(FirstbootOnlySpokeMixIn, NormalSpoke):
pass
- def _on_cancel_button_clicked(self, button):
- """Handler for self.cancel_buttons 'clicked' signal.
+ def _on_back_button_clicked(self, button):
+ """Handler for self.back_buttons 'clicked' signal.
Clear out any user set values and return to the start screen."""
+ self.register_widget.emit('back')
# TODO: clear out settings and restart?
# TODO: attempt to undo the REST api calls we've made?
- self.register_widget.set_initial_screen()
- self.register_widget.clear_screens()
+ #self.register_widget.set_initial_screen()
+ #self.register_widget.clear_screens()
def _on_register_button_clicked(self, button):
"""Handler for self.proceed_buttons 'clicked' signal.
@@ -283,6 +284,7 @@ class RHSMSpoke(FirstbootOnlySpokeMixIn, NormalSpoke):
def _on_register_screen_ready_change(self, obj, value):
ready = self.register_widget.current_screen.get_property('ready')
self.proceed_button.set_sensitive(ready)
+ self.back_button.set_sensitive(ready)
def _on_register_status_change(self, obj, value):
"""Handler for registergui.RegisterInfo's 'register-status' property notifications."""
diff --git a/src/initial-setup/com_redhat_subscription_manager/gui/spokes/rhsm_gui.ui b/src/initial-setup/com_redhat_subscription_manager/gui/spokes/rhsm_gui.ui
index 39c75f1..7541682 100644
--- a/src/initial-setup/com_redhat_subscription_manager/gui/spokes/rhsm_gui.ui
+++ b/src/initial-setup/com_redhat_subscription_manager/gui/spokes/rhsm_gui.ui
@@ -69,11 +69,11 @@
<property name="margin_bottom">4</property>
<child>
<object class="GtkButton" id="cancel_button">
- <property name="label" translatable="yes">Cancel</property>
+ <property name="label">gtk-go-back</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="yalign">0.43999999761581421</property>
+ <property name="use_stock">True</property>
</object>
<packing>
<property name="expand">True</property>
diff --git a/src/subscription_manager/gui/data/glade/register_dialog.glade b/src/subscription_manager/gui/data/glade/register_dialog.glade
index fe76ce1..454d463 100644
--- a/src/subscription_manager/gui/data/glade/register_dialog.glade
+++ b/src/subscription_manager/gui/data/glade/register_dialog.glade
@@ -19,16 +19,16 @@
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
- <object class="GtkButton" id="cancel_button">
- <property name="label">gtk-cancel</property>
+ <object class="GtkButton" id="back_button">
+ <property name="label">gtk-go-back</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
<property name="image_position">right</property>
<child internal-child="accessible">
- <object class="AtkObject" id="cancel_button-atkobject">
- <property name="AtkObject::accessible-name" translatable="yes">cancel_button</property>
+ <object class="AtkObject" id="back_button-atkobject">
+ <property name="AtkObject::accessible-name" translatable="yes">back_button</property>
</object>
</child>
</object>
@@ -74,7 +74,7 @@
</object>
</child>
<action-widgets>
- <action-widget response="0">cancel_button</action-widget>
+ <action-widget response="0">back_button</action-widget>
<action-widget response="0">register_button</action-widget>
</action-widgets>
</object>
diff --git a/src/subscription_manager/gui/data/ui/allsubs.ui b/src/subscription_manager/gui/data/ui/allsubs.ui
index cd409d3..f1b60bb 100644
--- a/src/subscription_manager/gui/data/ui/allsubs.ui
+++ b/src/subscription_manager/gui/data/ui/allsubs.ui
@@ -2,27 +2,13 @@
<!-- Generated with glade 3.18.3 -->
<interface>
<requires lib="gtk+" version="3.0"/>
- <object class="GtkAdjustment" id="subs_vpane_hadj">
- <property name="upper">100</property>
- <property name="step_increment">1</property>
- <property name="page_increment">10</property>
- </object>
- <object class="GtkAdjustment" id="subs_vpane_vadj">
- <property name="upper">100</property>
- <property name="step_increment">1</property>
- <property name="page_increment">10</property>
- </object>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
- <property name="halign">start</property>
- <property name="valign">start</property>
<property name="icon_name">subscription-manager</property>
<child>
<object class="GtkBox" id="content">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="halign">start</property>
- <property name="valign">start</property>
<property name="border_width">12</property>
<property name="orientation">vertical</property>
<property name="spacing">4</property>
@@ -30,16 +16,12 @@
<object class="GtkBox" id="vbox3">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="halign">start</property>
- <property name="valign">start</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkBox" id="hbox3">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="halign">start</property>
- <property name="valign">start</property>
<property name="spacing">6</property>
<child>
<object class="GtkLabel" id="label1">
@@ -134,14 +116,10 @@
<object class="GtkBox" id="hbox2">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="halign">end</property>
- <property name="valign">start</property>
<child>
<object class="GtkLabel" id="edit_quantity_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="halign">end</property>
- <property name="valign">start</property>
<property name="label" translatable="yes">* Click to Adjust Quantity</property>
<property name="use_markup">True</property>
<property name="xalign">0.99000000953674316</property>
@@ -173,18 +151,15 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="orientation">vertical</property>
+ <property name="position">2</property>
<property name="position_set">True</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow">
+ <property name="height_request">125</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="valign">start</property>
<property name="border_width">1</property>
- <property name="hadjustment">subs_vpane_hadj</property>
- <property name="vadjustment">subs_vpane_vadj</property>
- <property name="shadow_type">etched-out</property>
- <property name="min_content_width">240</property>
- <property name="min_content_height">120</property>
+ <property name="shadow_type">etched-in</property>
</object>
<packing>
<property name="resize">True</property>
@@ -195,7 +170,7 @@
<object class="GtkBox" id="details_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="valign">end</property>
+ <property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
@@ -216,13 +191,10 @@
<object class="GtkBox" id="hbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="halign">end</property>
- <property name="valign">start</property>
<child>
<object class="GtkButtonBox" id="subscribe_button_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="valign">start</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="subscribe_button">
diff --git a/src/subscription_manager/gui/data/ui/register_dialog.ui b/src/subscription_manager/gui/data/ui/register_dialog.ui
index 22fb3c5..3099ddc 100644
--- a/src/subscription_manager/gui/data/ui/register_dialog.ui
+++ b/src/subscription_manager/gui/data/ui/register_dialog.ui
@@ -32,15 +32,15 @@
<property name="margin_bottom">4</property>
<property name="hexpand">True</property>
<child>
- <object class="GtkButton" id="cancel_button">
- <property name="label">gtk-cancel</property>
+ <object class="GtkButton" id="back_button">
+ <property name="label">gtk-go-back</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
<child internal-child="accessible">
- <object class="AtkObject" id="cancel_button-atkobject">
- <property name="AtkObject::accessible-name">cancel_button</property>
+ <object class="AtkObject" id="back_button-atkobject">
+ <property name="AtkObject::accessible-name">back_button</property>
</object>
</child>
</object>
diff --git a/src/subscription_manager/gui/mysubstab.py b/src/subscription_manager/gui/mysubstab.py
index 4eb3e2c..178d59c 100644
--- a/src/subscription_manager/gui/mysubstab.py
+++ b/src/subscription_manager/gui/mysubstab.py
@@ -153,7 +153,7 @@ class MySubscriptionsTab(widgets.SubscriptionManagerTab):
# unregistered, just delete the certs directly
action = EntCertDeleteAction(self.entitlement_dir)
action.perform([serial])
- self.update_subscriptions()
+ self.update_subscriptions()
def unsubscribe_button_clicked(self, widget):
selection = widgets.SelectionWrapper(self.top_view.get_selection(), self.store)
diff --git a/src/subscription_manager/gui/registergui.py b/src/subscription_manager/gui/registergui.py
index ed5213c..a07a646 100644
--- a/src/subscription_manager/gui/registergui.py
+++ b/src/subscription_manager/gui/registergui.py
@@ -28,7 +28,7 @@ from subscription_manager.ga import GObject as ga_GObject
import rhsm.config as config
from rhsm.utils import ServerUrlParseError
-from rhsm.connection import GoneException
+from rhsm.connection import GoneException, RestlibException
from subscription_manager.branding import get_branding
from subscription_manager.action_client import ActionClient
@@ -109,6 +109,35 @@ def reset_resolver():
pass
+# FIXME: TODO: subclass collections.MutableSequence
+class UniqueList(object):
+ def __init__(self):
+ self._list = []
+
+ def append(self, item):
+ if item in self._list:
+ self._list.remove(item)
+ return self._list.append(item)
+
+ def __repr__(self):
+ list_buf = ','.join([repr(a) for a in self._list])
+ buf = "<UniqueList [%s] >" % list_buf
+ return buf
+
+ def remove(self, value):
+ return self._list.remove(value)
+
+ def last(self):
+ return self._list[-1]
+
+ def pop(self, index=None):
+ # list.pop() has a odd not quite a keyword optional arg
+ if index:
+ p = self._list.pop(index)
+ p = self._list.pop()
+ return p
+
+
class RegisterInfo(ga_GObject.GObject):
"""GObject holding registration info and state.
@@ -170,6 +199,8 @@ class RegisterWidget(widgets.SubmanBaseWidget):
__gsignals__ = {'proceed': (ga_GObject.SignalFlags.RUN_FIRST,
None, []),
+ 'back': (ga_GObject.SignalFlags.RUN_FIRST,
+ None, []),
'register-message': (ga_GObject.SignalFlags.RUN_FIRST,
None, (ga_GObject.TYPE_PYOBJECT,
ga_GObject.TYPE_PYOBJECT)),
@@ -230,6 +261,8 @@ class RegisterWidget(widgets.SubmanBaseWidget):
# expect this to be driving from the parent dialog
self.proceed_handler = self.connect('proceed',
self._on_proceed)
+ self.back_handler = self.connect('back',
+ self._on_back)
# FIXME: change glade name
self.details_label = self.register_details_label
@@ -255,6 +288,8 @@ class RegisterWidget(widgets.SubmanBaseWidget):
# Track screens we "show" so we can choose a reasonable error screen
self.screen_history = []
+ self.uniq_screen_history = UniqueList()
+ self.applied_screen_history = UniqueList()
# FIXME: modify property instead
self.callbacks = []
@@ -311,8 +346,7 @@ class RegisterWidget(widgets.SubmanBaseWidget):
any parent dialogs for example)."""
# return to the last gui screen we showed.
- self._go_back_to_last_screen()
-
+ self._pop_last_screen()
# FIXME: we have more info here, but we need a good 'blurb'
# for the status message.
msg = _("Error during registration.")
@@ -320,7 +354,7 @@ class RegisterWidget(widgets.SubmanBaseWidget):
def do_register_message(self, msg, msg_type=None):
# NOTE: we ignore msg_type here
- self._go_back_to_last_screen()
+ self._pop_last_screen()
self.info.set_property('register-status', msg)
def do_register_finished(self):
@@ -339,9 +373,10 @@ class RegisterWidget(widgets.SubmanBaseWidget):
# close the window have something to display.
self.done()
- def _go_back_to_last_screen(self):
+ def _pop_last_screen(self):
try:
- self._set_screen(self.screen_history[-1])
+ last = self.applied_screen_history.pop()
+ self._set_screen(last)
except IndexError:
pass
@@ -391,7 +426,6 @@ class RegisterWidget(widgets.SubmanBaseWidget):
This also represents screens that allow the user to potentially correct
an error, so we track the history of these screens so errors can go to
a useful screen."""
- self.screen_history.append(current_screen.screens_index)
self._set_screen(self._current_screen)
# TODO: replace most of the gui flow logic in the Screen subclasses with
@@ -444,6 +478,13 @@ class RegisterWidget(widgets.SubmanBaseWidget):
def apply_current_screen(self):
"""Extract any info from the widgets and call the screens apply()."""
+ #self._screen_history_append(self.current_screen.screens_index)
+
+ # The apply can emit a move to page signal, changing current_page
+ # So save current screen index first.
+ current_screen_index = self.current_screen.screens_index
+ self.applied_screen_history.append(current_screen_index)
+
self.current_screen.apply()
# FIXME: figure out to determine we are on first screen, then this
@@ -452,6 +493,9 @@ class RegisterWidget(widgets.SubmanBaseWidget):
def _on_proceed(self, obj):
self.apply_current_screen()
+ def _on_back(self, obj):
+ self._pop_last_screen()
+
# switch-page should be after the current screen is reset
def _on_switch_page(self, notebook, page, page_num):
if self.current_screen.button_label:
@@ -536,8 +580,10 @@ class RegisterWidget(widgets.SubmanBaseWidget):
if ready:
self.handler_unblock(self.proceed_handler)
+ self.handler_unblock(self.back_handler)
else:
self.handler_block(self.proceed_handler)
+ self.handler_block(self.back_handler)
# HMMM: If the connect/backend/async, and the auth info is composited into
# the same GObject, these could be class closure handlers
@@ -597,7 +643,7 @@ class RegisterDialog(widgets.SubmanBaseWidget):
widget_names = ['register_dialog', 'register_dialog_main_vbox',
'register_details_label',
- 'cancel_button', 'register_button', 'progress_label',
+ 'back_button', 'register_button', 'progress_label',
'dialog_vbox6']
gui_file = "register_dialog"
@@ -642,7 +688,7 @@ class RegisterDialog(widgets.SubmanBaseWidget):
#self.register_widget.initialize()
self.register_button.connect('clicked', self._on_register_button_clicked)
- self.cancel_button.connect('clicked', self.cancel)
+ self.back_button.connect('clicked', self._on_back_button_clicked)
# update window title on register state changes
self.reg_info.connect('notify::register-state',
@@ -701,9 +747,13 @@ class RegisterDialog(widgets.SubmanBaseWidget):
def error_dialog(self, obj, msg):
gui_utils.show_error_window(msg)
+ def _on_back_button_clicked(self, obj):
+ self.register_widget.emit('back')
+
def _on_register_screen_ready_change(self, obj, value):
ready = self.register_widget.current_screen.get_property('ready')
self.register_button.set_sensitive(ready)
+ self.back_button.set_sensitive(ready)
def _on_register_button_clicked(self, button):
self.register_widget.emit('proceed')
@@ -812,7 +862,7 @@ class Screen(widgets.SubmanBaseWidget):
# do whatever the screen indicates, and emit any signals indicating where
# to move to next. apply() should not return anything.
def apply(self):
- pass
+ return True
def post(self):
pass
@@ -872,6 +922,7 @@ class NoGuiScreen(ga_GObject.GObject):
def apply(self):
self.emit('move-to-screen')
+ return True
def post(self):
pass
@@ -897,6 +948,7 @@ class PerformRegisterScreen(NoGuiScreen):
if error is not None:
self.emit('register-error', REGISTER_ERROR, error)
# TODO: register state
+ self.pre_done()
return
try:
@@ -904,6 +956,7 @@ class PerformRegisterScreen(NoGuiScreen):
except Exception, e:
# hint: register error, back to creds?
self.emit('register-error', REGISTER_ERROR, e)
+ self.pre_done()
return
# trigger a id cert reload
@@ -1006,6 +1059,7 @@ class ConfirmSubscriptionsScreen(Screen):
def apply(self):
self.emit('move-to-screen', PERFORM_SUBSCRIBE_PAGE)
+ return True
def set_model(self):
dry_run_result = self.info.get_property('dry-run-result')
@@ -1082,6 +1136,7 @@ class SelectSLAScreen(Screen):
def apply(self):
self.emit('move-to-screen', CONFIRM_SUBS_PAGE)
+ return True
def clear(self):
child_widgets = self.sla_radio_container.get_children()
@@ -1138,10 +1193,22 @@ class SelectSLAScreen(Screen):
self.emit('register-error', msg, None)
self.pre_done()
return
- # TODO: where we should go from here?
+ elif isinstance(error[1], RestlibException) and error[1].code == "401":
+ # If we get here with a 401, we are using consumer cert auth
+ # so that means we are likely connecting to the wrong server
+ # url, since unregistered consumers talking to the correct
+ # serverurl would 410. Short of changing serverurl or re-registering
+ # there isn't much we can do to fix that.
+ msg = error[1].error_msg
+ # TODO: Provide a better error message reflecting above comment
+ self.emit('register-error', msg, None)
+ self.emit('attach-finished')
+ self.pre_done()
+ return
else:
log.exception(error)
self.emit('register-error', _("Error subscribing"), error)
+ self.emit('attach-finished')
self.pre_done()
return
@@ -1264,6 +1331,7 @@ class EnvironmentScreen(Screen):
model, tree_iter = self.environment_treeview.get_selection().get_selected()
self.set_environment(model.get_value(tree_iter, 0))
self.emit('move-to-screen', PERFORM_REGISTER_PAGE)
+ return True
def set_environment(self, environment):
self.info.set_property('environment', environment)
@@ -1336,6 +1404,7 @@ class OrganizationScreen(Screen):
owner_key = model.get_value(tree_iter, 0)
self.info.set_property('owner-key', owner_key)
self.emit('move-to-screen', ENVIRONMENT_SELECT_PAGE)
+ return True
def set_model(self, owners):
owner_model = ga_Gtk.ListStore(str, str)
@@ -1428,10 +1497,10 @@ class CredentialsScreen(Screen):
skip_auto_bind = self.skip_auto_bind.get_active()
if not self._validate_consumername(consumername):
- return
+ return False
if not self._validate_account():
- return
+ return False
self.info.set_property('username', username)
self.info.set_property('password', password)
@@ -1439,6 +1508,7 @@ class CredentialsScreen(Screen):
self.info.set_property('consumername', consumername)
self.emit('move-to-screen', OWNER_SELECT_PAGE)
+ return True
def clear(self):
self.account_login.set_text("")
@@ -1472,19 +1542,20 @@ class ActivationKeyScreen(Screen):
consumername = self.consumer_entry.get_text().strip()
if not self._validate_owner_key(owner_key):
- return
+ return False
if not self._validate_activation_keys(activation_keys):
- return
+ return False
if not self._validate_consumername(consumername):
- return
+ return False
self.info.set_property('consumername', consumername)
self.info.set_property('owner-key', owner_key)
self.info.set_property('activation-keys', activation_keys)
self.emit('move-to-screen', PERFORM_REGISTER_PAGE)
+ return True
def _split_activation_keys(self, entry):
keys = re.split(',\s*|\s+', entry)
@@ -1626,19 +1697,19 @@ class ChooseServerScreen(Screen):
_("Unable to reach the server at %s:%s%s") %
(hostname, port, prefix),
None)
- return
+ return False
except MissingCaCertException:
self.emit('register-error',
_("CA certificate for subscription service has not been installed."),
None)
- return
+ return False
except ServerUrlParseError:
self.emit('register-error',
_("Please provide a hostname with optional port and/or prefix: "
"hostname[:port][/prefix]"),
None)
- return
+ return False
CFG.save()
@@ -1648,11 +1719,11 @@ class ChooseServerScreen(Screen):
if self.activation_key_checkbox.get_active():
self.emit('move-to-screen', ACTIVATION_KEY_PAGE)
- return
+ return True
else:
self.emit('move-to-screen', CREDENTIALS_PAGE)
- return
+ return True
def set_server_entry(self, hostname, port, prefix):
# No need to show port and prefix for hosted:
@@ -1995,10 +2066,11 @@ class InfoScreen(Screen):
self.stay()
if self.register_radio.get_active():
self.emit('move-to-screen', CHOOSE_SERVER_PAGE)
- return
+ return True
else:
self.emit('move-to-screen', FINISH)
+ return True
def _on_why_register_button_clicked(self, button):
self.why_register_dialog.show()
diff --git a/subscription-manager.spec b/subscription-manager.spec
index 9a62cdf..63e7a50 100644
--- a/subscription-manager.spec
+++ b/subscription-manager.spec
@@ -49,7 +49,7 @@
Name: subscription-manager
Version: 1.15.9
-Release: 12%{?dist}
+Release: 13%{?dist}
Summary: Tools and libraries for subscription and repository management
Group: System Environment/Base
License: GPLv2
@@ -542,6 +542,16 @@ fi
%endif
%changelog
+* Wed Sep 30 2015 Chris Rog <crog@redhat.com> 1.15.9-13
+- 1266480: Refresh TreeView selection after subscriptions are removed.
+ (awood@redhat.com)
+- 1267034: Handle 401 with cert based auth (alikins@redhat.com)
+- Allow 'back' to go back multiple times. (alikins@redhat.com)
+- 1262075,1267179,1243707: Fix back/cancel nav (alikins@redhat.com)
+- 1267287: Fix allsubs tab ui regression (alikins@redhat.com)
+- 1266994: Use our icon for initial-setup spoke icon (alikins@redhat.com)
+- 1265347, 1265371: More translations whitespace corrections (crog@redhat.com)
+
* Mon Sep 28 2015 Chris Rog <crog@redhat.com> 1.15.9-12
- 1261006: Handle multiple nav button clicks (alikins@redhat.com)
- 1242998, 1254550: Fix "already reg'ed" in initial-setup (alikins@redhat.com)
diff --git a/test/test_registrationgui.py b/test/test_registrationgui.py
index 6ccd89b..6e99e6e 100644
--- a/test/test_registrationgui.py
+++ b/test/test_registrationgui.py
@@ -33,6 +33,7 @@ class RegisterWidgetTests(SubManFixture):
self.rs._screens[CHOOSE_SERVER_PAGE] = Mock()
self.rs._screens[CHOOSE_SERVER_PAGE].index = 0
+ self.rs._screens[CHOOSE_SERVER_PAGE].screens_index = 0
self.rs._screens[CHOOSE_SERVER_PAGE].button_label = "Dummy"
self.rs._screens[CHOOSE_SERVER_PAGE].apply.return_value = \
CREDENTIALS_PAGE