Merge lp:~kubuntu-packagers/ubuntu-release-upgrader/qt5 into lp:ubuntu-release-upgrader

Proposed by Harald Sitter
Status: Merged
Merged at revision: 2863
Proposed branch: lp:~kubuntu-packagers/ubuntu-release-upgrader/qt5
Merge into: lp:ubuntu-release-upgrader
Diff against target: 2003 lines (+798/-641) (has conflicts)
11 files modified
DistUpgrade/DistUpgradeFetcherKDE.py (+159/-111)
DistUpgrade/DistUpgradeViewKDE.py (+59/-66)
DistUpgrade/QUrlOpener.py (+80/-0)
DistUpgrade/dialog_changes.ui (+107/-133)
DistUpgrade/dialog_error.ui (+70/-88)
DistUpgrade/dialog_release_notes.ui (+24/-20)
DistUpgrade/fetch-progress.ui (+25/-56)
DistUpgrade/window_main.ui (+173/-166)
debian/changelog (+87/-0)
debian/control (+2/-1)
do-release-upgrade (+12/-0)
Text conflict in debian/changelog
To merge this branch: bzr merge lp:~kubuntu-packagers/ubuntu-release-upgrader/qt5
Reviewer Review Type Date Requested Status
Kubuntu Developers Pending
Jonathan Riddell Pending
Review via email: mp+229620@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Rohan Garg (rohangarg) wrote :

Generally looks alright to me.

Revision history for this message
Dmitry Shachnev (mitya57) :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'DistUpgrade/DistUpgradeFetcherKDE.py'
2--- DistUpgrade/DistUpgradeFetcherKDE.py 2014-05-02 13:07:42 +0000
3+++ DistUpgrade/DistUpgradeFetcherKDE.py 2014-08-05 13:50:46 +0000
4@@ -2,6 +2,7 @@
5 # -*- Mode: Python; indent-tabs-mode: nil; tab-width: 4; coding: utf-8 -*-
6 #
7 # Copyright (c) 2008 Canonical Ltd
8+# Copyright (c) 2014 Harald Sitter <apachelogger@kubuntu.org>
9 #
10 # Author: Jonathan Riddell <jriddell@ubuntu.com>
11 #
12@@ -18,58 +19,100 @@
13 # You should have received a copy of the GNU General Public License
14 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15
16-from PyKDE4.kdecore import ki18n, KAboutData, KCmdLineOptions, KCmdLineArgs
17-from PyKDE4.kdeui import KIcon, KMessageBox, KApplication, KStandardGuiItem
18-from PyQt4.QtCore import QDir, QTimer
19-from PyQt4.QtGui import QDialog, QDialogButtonBox
20-from PyQt4 import uic
21+try:
22+ # 14.04 has a broken pyqt5, so don't even try to import it and require
23+ # pyqt4.
24+ # In 14.04 various signals in pyqt5 can not be connected because it thinks
25+ # the signal does not exist or has an incompatible signature. Since this
26+ # potentially renders the GUI entirely broken and pyqt5 was not actively
27+ # used back then it is fair to simply require qt4 on trusty systems.
28+ from .utils import get_dist
29+ if get_dist() == 'trusty':
30+ raise ImportError
31+
32+ from PyQt5 import uic
33+ from PyQt5.QtCore import *
34+ from PyQt5.QtGui import *
35+ from PyQt5.QtWidgets import *
36+except ImportError:
37+ from PyKDE4.kdecore import ki18n, KAboutData, KCmdLineOptions, KCmdLineArgs
38+ from PyKDE4.kdeui import KIcon, KMessageBox, KApplication, KStandardGuiItem
39+ from PyQt4.QtCore import QDir, QTimer
40+ from PyQt4.QtGui import QDialog, QDialogButtonBox
41+ from PyQt4 import uic
42
43 import apt_pkg
44 import sys
45
46-from .utils import inhibit_sleep, allow_sleep
47-from .DistUpgradeFetcherCore import DistUpgradeFetcherCore
48+from DistUpgrade.utils import inhibit_sleep, allow_sleep
49+from DistUpgrade.DistUpgradeFetcherCore import DistUpgradeFetcherCore
50 from gettext import gettext as _
51 from urllib.request import urlopen
52 from urllib.error import HTTPError
53 import os
54
55-from .MetaRelease import MetaReleaseCore
56 import apt
57
58+from .QUrlOpener import QUrlOpener
59+
60+# TODO: uifile resolution is an utter mess and should be revised globally for
61+# both the fetcher and the upgrader GUI.
62+
63+# TODO: make this a singleton
64+# We have no globally constructed QApplication available so we need to
65+# make sure that one is created when needed. Since from a module POV
66+# this can be happening in any order of the two classes this function takes care
67+# of it for the classes, the classes only hold a ref to the qapp returned
68+# to prevent it from getting GC'd, so in essence this is a singleton scoped to
69+# the longest lifetime of an instance from the Qt GUI. Since the lifetime is
70+# pretty much equal to the process' one we might as well singleton up.
71+def _ensureQApplication():
72+ if not QApplication.instance():
73+ app = QApplication(["ubuntu-release-upgrader"])
74+ # Try to load default Qt translations so we don't have to worry about
75+ # QStandardButton translations.
76+ # FIXME: make sure we dep on l10n
77+ translator = QTranslator(app)
78+ if PYQT_VERSION >= 0x50000:
79+ translator.load(QLocale.system(), 'qt', '_', '/usr/share/qt5/translations')
80+ else:
81+ translator.load(QLocale.system(), 'qt', '_', '/usr/share/qt4/translations')
82+ app.installTranslator(translator)
83+ return app
84+ return QApplication.instance()
85+
86+# Qt 5 vs. KDELibs4 compat functions
87+def _warning(text):
88+ if PYQT_VERSION >= 0x50000:
89+ QMessageBox.warning(None, "", text)
90+ else:
91+ KMessageBox.sorry(None, text, "")
92+
93+def _icon(name):
94+ if PYQT_VERSION >= 0x50000:
95+ return QIcon.fromTheme(name)
96+ else:
97+ return KIcon(name)
98
99 class DistUpgradeFetcherKDE(DistUpgradeFetcherCore):
100- """A small application run by Adept to download, verify
101- and run the dist-upgrade tool"""
102-
103- def __init__(self, useDevelopmentRelease=False, useProposed=False):
104- self.useDevelopmentRelease = useDevelopmentRelease
105- self.useProposed = useProposed
106- metaRelease = MetaReleaseCore(useDevelopmentRelease, useProposed)
107- metaRelease.downloaded.wait()
108- if metaRelease.new_dist is None and __name__ == "__main__":
109- sys.exit()
110- elif metaRelease.new_dist is None:
111- return
112-
113- self.progressDialogue = QDialog()
114- if os.path.exists("fetch-progress.ui"):
115- self.APPDIR = QDir.currentPath()
116- else:
117- self.APPDIR = "/usr/share/ubuntu-release-upgrader"
118-
119- uic.loadUi(self.APPDIR + "/fetch-progress.ui", self.progressDialogue)
120- self.progressDialogue.setWindowIcon(KIcon("system-software-update"))
121- self.progressDialogue.setWindowTitle(_("Upgrade"))
122- self.progress = KDEAcquireProgressAdapter(
123- self.progressDialogue.installationProgress,
124- self.progressDialogue.installingLabel,
125- None)
126- DistUpgradeFetcherCore.__init__(self, metaRelease.new_dist,
127- self.progress)
128+
129+ def __init__(self, new_dist, progress, parent, datadir):
130+ DistUpgradeFetcherCore.__init__(self, new_dist, progress)
131+
132+ self.app = _ensureQApplication()
133+ self.app.setWindowIcon(_icon("system-software-update"))
134+
135+ self.datadir = datadir
136+
137+ QUrlOpener().setupUrlHandles()
138+
139+ QApplication.processEvents()
140
141 def error(self, summary, message):
142- KMessageBox.sorry(None, message, summary)
143+ if PYQT_VERSION >= 0x50000:
144+ QMessageBox.critical(None, summary, message)
145+ else:
146+ KMessageBox.sorry(None, message, summary)
147
148 def runDistUpgrader(self):
149 inhibit_sleep()
150@@ -80,73 +123,103 @@
151 self.script + " --frontend=DistUpgradeViewKDE"])
152 else:
153 os.execv(self.script,
154- [self.script] + ["--frontend=DistUpgradeViewKDE"] +
155- self.run_options)
156+ [self.script, "--frontend=DistUpgradeViewKDE" + self.run_options])
157 # we shouldn't come to this point, but if we do, undo our
158 # inhibit sleep
159 allow_sleep()
160
161 def showReleaseNotes(self):
162 # FIXME: care about i18n! (append -$lang or something)
163- self.dialogue = QDialog()
164- uic.loadUi(self.APPDIR + "/dialog_release_notes.ui", self.dialogue)
165- upgradeButton = self.dialogue.buttonBox.button(QDialogButtonBox.Ok)
166- upgradeButton.setText(_("Upgrade"))
167- upgradeButton.setIcon(KIcon("dialog-ok"))
168- cancelButton = self.dialogue.buttonBox.button(QDialogButtonBox.Cancel)
169- cancelButton.setIcon(KIcon("dialog-cancel"))
170- self.dialogue.setWindowTitle(_("Release Notes"))
171- self.dialogue.show()
172- if self.new_dist.releaseNotesURI is not None:
173- uri = self._expandUri(self.new_dist.releaseNotesURI)
174+ # TODO: ^ what is this supposed to mean?
175+ self.dialog = QDialog()
176+ uic.loadUi(self.datadir + "/dialog_release_notes.ui", self.dialog)
177+ upgradeButton = self.dialog.buttonBox.button(QDialogButtonBox.Ok)
178+ upgradeButton.setText(_("&Upgrade"))
179+ upgradeButton.setIcon(_icon("dialog-ok"))
180+ cancelButton = self.dialog.buttonBox.button(QDialogButtonBox.Cancel)
181+ cancelButton.setText(_("&Cancel"))
182+ cancelButton.setIcon(_icon("dialog-cancel"))
183+ self.dialog.setWindowTitle(_("Release Notes"))
184+ self.dialog.show()
185+ if self.new_dist.releaseNotesHtmlUri is not None:
186+ uri = self._expandUri(self.new_dist.releaseNotesHtmlUri)
187 # download/display the release notes
188- # FIXME: add some progress reporting here
189+ # TODO: add some progress reporting here
190 result = None
191 try:
192 release_notes = urlopen(uri)
193 notes = release_notes.read().decode("UTF-8", "replace")
194- self.dialogue.scrolled_notes.setText(notes)
195- result = self.dialogue.exec_()
196+ self.dialog.scrolled_notes.setText(notes)
197+ result = self.dialog.exec_()
198 except HTTPError:
199 primary = "<span weight=\"bold\" size=\"larger\">%s</span>" % \
200 _("Could not find the release notes")
201 secondary = _("The server may be overloaded. ")
202- KMessageBox.sorry(None, primary + "<br />" + secondary, "")
203+ self._warning(primary + "<br />" + secondary)
204 except IOError:
205 primary = "<span weight=\"bold\" size=\"larger\">%s</span>" % \
206 _("Could not download the release notes")
207 secondary = _("Please check your internet connection.")
208- KMessageBox.sorry(None, primary + "<br />" + secondary, "")
209+ self._warning(primary + "<br />" + secondary)
210 # user clicked cancel
211 if result == QDialog.Accepted:
212- self.progressDialogue.show()
213 return True
214- if __name__ == "__main__":
215- KApplication.kApplication().exit(1)
216- if self.useDevelopmentRelease or self.useProposed:
217- #FIXME why does KApplication.kApplication().exit() crash but
218- # this doesn't?
219- sys.exit()
220 return False
221
222+ # FIXME: largely code copy from ReleaseNotesViewer which imports GTK.
223+ @pyqtSlot(QUrl)
224+ def openUrl(self, url):
225+ url = url.toString()
226+ import subprocess
227+ """Open the specified URL in a browser"""
228+ # Find an appropiate browser
229+ if os.path.exists("/usr/bin/kde-open"):
230+ command = ["kde-open", url]
231+ elif os.path.exists("/usr/bin/xdg-open"):
232+ command = ["xdg-open", url]
233+ elif os.path.exists("/usr/bin/exo-open"):
234+ command = ["exo-open", url]
235+ elif os.path.exists('/usr/bin/gnome-open'):
236+ command = ['gnome-open', url]
237+ else:
238+ command = ['x-www-browser', url]
239+ # Avoid to run the browser as user root
240+ if os.getuid() == 0 and 'SUDO_USER' in os.environ:
241+ command = ['sudo', '-u', os.environ['SUDO_USER']] + command
242+ subprocess.Popen(command)
243
244 class KDEAcquireProgressAdapter(apt.progress.base.AcquireProgress):
245- def __init__(self, progress, label, parent):
246- self.progress = progress
247- self.label = label
248- self.parent = parent
249+ def __init__(self, parent, datadir, label):
250+ self.app = _ensureQApplication()
251+ self.dialog = QDialog()
252+
253+ uiFile = os.path.join(datadir, "fetch-progress.ui")
254+ uic.loadUi(uiFile, self.dialog)
255+ self.dialog.setWindowTitle(_("Upgrade"))
256+ self.dialog.installingLabel.setText(label)
257+ self.dialog.buttonBox.rejected.connect(self.abort)
258+
259+ # This variable is used as return value for AcquireProgress pulses.
260+ # Setting it to False will abort the Acquire and consequently the
261+ # entire fetcher.
262+ self._continue = True
263+
264+ QApplication.processEvents()
265+
266+ def abort(self):
267+ self._continue = False
268
269 def start(self):
270- self.label.setText(_("Downloading additional package files..."))
271- self.progress.setValue(0)
272+ self.dialog.installingLabel.setText(_("Downloading additional package files..."))
273+ self.dialog.installationProgress.setValue(0)
274+ self.dialog.show()
275
276 def stop(self):
277- pass
278+ self.dialog.hide()
279
280 def pulse(self, owner):
281 apt.progress.base.AcquireProgress.pulse(self, owner)
282- self.progress.setValue((self.current_bytes + self.current_items) /
283- float(self.total_bytes + self.total_items))
284+ self.dialog.installationProgress.setValue((self.current_bytes + self.current_items) / float(self.total_bytes + self.total_items) * 100)
285 current_item = self.current_items + 1
286 if current_item > self.total_items:
287 current_item = self.total_items
288@@ -158,47 +231,22 @@
289 else:
290 label_text += _("File %s of %s") % (
291 self.current_items, self.total_items)
292- self.label.setText(label_text)
293- KApplication.kApplication().processEvents()
294- return True
295+ self.dialog.installingLabel.setText(label_text)
296+ QApplication.processEvents()
297+ return self._continue
298
299 def mediaChange(self, medium, drive):
300 msg = _("Please insert '%s' into the drive '%s'") % (medium, drive)
301- #change = QMessageBox.question(None, _("Media Change"), msg,
302- # QMessageBox.Ok, QMessageBox.Cancel)
303- change = KMessageBox.questionYesNo(None, _("Media Change"),
304- _("Media Change") + "<br>" + msg,
305- KStandardGuiItem.ok(),
306- KStandardGuiItem.cancel())
307- if change == KMessageBox.Yes:
308- return True
309+ if PYQT_VERSION >= 0x50000:
310+ change = QMessageBox.question(None, _("Media Change"), msg,
311+ QMessageBox.Ok, QMessageBox.Cancel)
312+ if change == QMessageBox.Ok:
313+ return True
314+ else:
315+ change = KMessageBox.questionYesNo(None, _("Media Change"),
316+ _("Media Change") + "<br>" + msg,
317+ KStandardGuiItem.ok(),
318+ KStandardGuiItem.cancel())
319+ if change == KMessageBox.Yes:
320+ return True
321 return False
322-
323-if __name__ == "__main__":
324-
325- appName = "dist-upgrade-fetcher"
326- catalog = ""
327- programName = ki18n("Dist Upgrade Fetcher")
328- version = "0.3.4"
329- description = ki18n("Dist Upgrade Fetcher")
330- license = KAboutData.License_GPL
331- copyright = ki18n("(c) 2008 Canonical Ltd")
332- text = ki18n("none")
333- homePage = "https://launchpad.net/ubuntu-release-upgrader"
334- bugEmail = ""
335-
336- aboutData = KAboutData(appName, catalog, programName, version, description,
337- license, copyright, text, homePage, bugEmail)
338-
339- aboutData.addAuthor(ki18n("Jonathan Riddell"), ki18n("Author"))
340-
341- options = KCmdLineOptions()
342-
343- KCmdLineArgs.init(sys.argv, aboutData)
344- KCmdLineArgs.addCmdLineOptions(options)
345-
346- app = KApplication()
347- fetcher = DistUpgradeFetcherKDE()
348- QTimer.singleShot(10, fetcher.run)
349-
350- app.exec_()
351
352=== modified file 'DistUpgrade/DistUpgradeViewKDE.py'
353--- DistUpgrade/DistUpgradeViewKDE.py 2014-05-02 13:07:42 +0000
354+++ DistUpgrade/DistUpgradeViewKDE.py 2014-08-05 13:50:46 +0000
355@@ -1,9 +1,10 @@
356 # DistUpgradeViewKDE.py
357-#
358+#
359 # Copyright (c) 2007 Canonical Ltd
360-#
361+# Copyright (c) 2014 Harald Sitter <apachelogger@kubuntu.org>
362+#
363 # Author: Jonathan Riddell <jriddell@ubuntu.com>
364-#
365+#
366 # This program is free software; you can redistribute it and/or
367 # modify it under the terms of the GNU General Public License as
368 # published by the Free Software Foundation; either version 2 of the
369@@ -19,13 +20,26 @@
370 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
371 # USA
372
373-from PyQt4.QtCore import QUrl, Qt, SIGNAL, QTimer
374-from PyQt4.QtGui import (
375- QDesktopServices, QDialog, QPixmap, QTreeWidgetItem, QMessageBox,
376- QApplication, QTextEdit, QTextOption, QTextCursor, QPushButton,
377- QWidget, QIcon, QHBoxLayout, QLabel
378- )
379-from PyQt4 import uic
380+try:
381+ # 14.04 has a broken pyqt5, so don't even try to import it and require
382+ # pyqt4.
383+ # In 14.04 various signals in pyqt5 can not be connected because it thinks
384+ # the signal does not exist or has an incompatible signature. Since this
385+ # potentially renders the GUI entirely broken and pyqt5 was not actively
386+ # used back then it is fair to simply require qt4 on trusty systems.
387+ from .utils import get_dist
388+ if get_dist() == 'trusty':
389+ raise ImportError
390+
391+ from PyQt5 import uic
392+ from PyQt5.QtCore import *
393+ from PyQt5.QtGui import *
394+ from PyQt5.QtWidgets import *
395+except ImportError:
396+ from PyQt4 import uic
397+ from PyQt4.QtCore import *
398+ from PyQt4.QtGui import *
399+ # If we still throw an exception, bounce back to Main to try another UI.
400
401 import sys
402 import locale
403@@ -51,14 +65,16 @@
404 from .DistUpgradeGettext import gettext as _
405 from .DistUpgradeGettext import unicode_gettext
406
407+from .QUrlOpener import QUrlOpener
408
409+# FIXME: what's the purpose?
410 def utf8(s, errors="strict"):
411 if isinstance(s, bytes):
412 return s.decode("UTF-8", errors)
413 else:
414 return s
415
416-
417+# FIXME: what's the purpose?
418 def loadUi(file, parent):
419 if os.path.exists(file):
420 uic.loadUi(file, parent)
421@@ -74,6 +90,7 @@
422 QTextEdit.__init__(self, "", parent_frame)
423 self.installProgress = installProgress
424 self.setFontFamily("Monospace")
425+ # FIXME: fixed font size set!!!
426 self.setFontPointSize(8)
427 self.setWordWrapMode(QTextOption.NoWrap)
428 self.setUndoRedoEnabled(False)
429@@ -298,7 +315,8 @@
430 dialogue.textview_error.show()
431 else:
432 dialogue.textview_error.hide()
433- dialogue.connect(dialogue.button_bugreport, SIGNAL("clicked()"), self.parent.reportBug)
434+ # Make sure we have a suitable size depending on whether or not the view is shown
435+ dialogue.adjustSize()
436 dialogue.exec_()
437
438 def conffile(self, current, new):
439@@ -316,7 +334,7 @@
440 self.confDialogue.textview_conffile.hide()
441 #FIXME, below to be tested
442 #self.confDialogue.resize(self.confDialogue.minimumSizeHint())
443- self.confDialogue.connect(self.confDialogue.show_difference_button, SIGNAL("clicked()"), self.showConffile)
444+ self.confDialogue.show_difference_button.clicked.connect(self.showConffile))
445
446 # workaround silly dpkg
447 if not os.path.exists(current):
448@@ -475,18 +493,23 @@
449 except Exception as e:
450 logging.warning("Error setting locales (%s)" % e)
451
452- #about = KAboutData("adept_manager","Upgrader","0.1","Dist Upgrade Tool for Kubuntu",KAboutData.License_GPL,"(c) 2007 Canonical Ltd",
453- #"http://wiki.kubuntu.org/KubuntuUpdateManager", "jriddell@ubuntu.com")
454- #about.addAuthor("Jonathan Riddell", None,"jriddell@ubuntu.com")
455- #about.addAuthor("Michael Vogt", None,"michael.vogt@ubuntu.com")
456- #KCmdLineArgs.init(["./dist-upgrade.py"],about)
457-
458 # we test for DISPLAY here, QApplication does not throw a
459 # exception when run without DISPLAY but dies instead
460 if not "DISPLAY" in os.environ:
461 raise Exception("No DISPLAY in os.environ found")
462 self.app = QApplication(["ubuntu-release-upgrader"])
463
464+ # Try to load default Qt translations so we don't have to worry about
465+ # QStandardButton translations.
466+ translator = QTranslator(self.app)
467+ if PYQT_VERSION >= 0x50000:
468+ translator.load(QLocale.system(), 'qt', '_', '/usr/share/qt5/translations')
469+ else:
470+ translator.load(QLocale.system(), 'qt', '_', '/usr/share/qt4/translations')
471+ self.app.installTranslator(translator)
472+
473+ QUrlOpener().setupUrlHandles()
474+
475 if os.path.exists("/usr/share/icons/oxygen/48x48/apps/system-software-update.png"):
476 messageIcon = QPixmap("/usr/share/icons/oxygen/48x48/apps/system-software-update.png")
477 else:
478@@ -509,30 +532,7 @@
479 sys.excepthook = self._handleException
480
481 self.window_main.showTerminalButton.setEnabled(False)
482- self.app.connect(self.window_main.showTerminalButton, SIGNAL("clicked()"), self.showTerminal)
483-
484- #kdesu requires us to copy the xauthority file before it removes it when Adept is killed
485- fd, copyXauth = tempfile.mkstemp("", "adept")
486- if 'XAUTHORITY' in os.environ and os.environ['XAUTHORITY'] != copyXauth:
487- shutil.copy(os.environ['XAUTHORITY'], copyXauth)
488- os.environ["XAUTHORITY"] = copyXauth
489-
490- # Note that with kdesudo this needs --nonewdcop
491- ## create a new DCOP-Client:
492- #client = DCOPClient()
493- ## connect the client to the local DCOP-server:
494- #client.attach()
495-
496- #for qcstring_app in client.registeredApplications():
497- # app = str(qcstring_app)
498- # if app.startswith("adept"):
499- # adept = DCOPApp(qcstring_app, client)
500- # adeptInterface = adept.object("MainApplication-Interface")
501- # adeptInterface.quit()
502-
503- # This works just as well
504- subprocess.call(["killall", "adept_manager"])
505- subprocess.call(["killall", "adept_updater"])
506+ self.window_main.showTerminalButton.clicked.connect(self.showTerminal)
507
508 # init gettext
509 gettext.bindtextdomain("ubuntu-release-upgrader",localedir)
510@@ -605,24 +605,12 @@
511 dialog = QDialog(self.window_main)
512 loadUi("dialog_error.ui", dialog)
513 self.translate_widget_children(self.dialog)
514- #FIXME make URL work
515- #dialog.connect(dialog.beastie_url, SIGNAL("leftClickedURL(const QString&)"), self.openURL)
516 dialog.crash_detail.setText(tbtext)
517+ # Make sure we have a suitable size depending on whether or not the view is shown
518+ dialogue.adjustSize()
519 dialog.exec_()
520 sys.exit(1)
521
522- def openURL(self, url):
523- """start konqueror"""
524- #need to run this else kdesu can't run Konqueror
525- #subprocess.call(['su', 'ubuntu', 'xhost', '+localhost'])
526- QDesktopServices.openUrl(QUrl(url))
527-
528- def reportBug(self):
529- """start konqueror"""
530- #need to run this else kdesu can't run Konqueror
531- #subprocess.call(['su', 'ubuntu', 'xhost', '+localhost'])
532- QDesktopServices.openUrl(QUrl("https://launchpad.net/ubuntu/+source/ubuntu-release-upgrader/+filebug"))
533-
534 def showTerminal(self):
535 if self.window_main.konsole_frame.isVisible():
536 self.window_main.konsole_frame.hide()
537@@ -708,7 +696,6 @@
538 dialogue.textview_error.show()
539 else:
540 dialogue.textview_error.hide()
541- dialogue.button_bugreport.hide()
542 dialogue.setWindowTitle(_("Information"))
543
544 if os.path.exists("/usr/share/icons/oxygen/48x48/status/dialog-information.png"):
545@@ -718,6 +705,8 @@
546 else:
547 messageIcon = QPixmap("/usr/share/icons/crystalsvg/32x32/actions/messagebox_info.png")
548 dialogue.image.setPixmap(messageIcon)
549+ # Make sure we have a suitable size depending on whether or not the view is shown
550+ dialogue.adjustSize()
551 dialogue.exec_()
552
553 def error(self, summary, msg, extended_msg=None):
554@@ -732,8 +721,6 @@
555 dialogue.textview_error.show()
556 else:
557 dialogue.textview_error.hide()
558- dialogue.button_close.show()
559- self.app.connect(dialogue.button_bugreport, SIGNAL("clicked()"), self.reportBug)
560
561 if os.path.exists("/usr/share/icons/oxygen/48x48/status/dialog-error.png"):
562 messageIcon = QPixmap("/usr/share/icons/oxygen/48x48/status/dialog-error.png")
563@@ -742,6 +729,8 @@
564 else:
565 messageIcon = QPixmap("/usr/share/icons/crystalsvg/32x32/actions/messagebox_critical.png")
566 dialogue.image.setPixmap(messageIcon)
567+ # Make sure we have a suitable size depending on whether or not the view is shown
568+ dialogue.adjustSize()
569 dialogue.exec_()
570
571 return False
572@@ -757,9 +746,11 @@
573 loadUi("dialog_changes.ui", self.changesDialogue)
574
575 self.changesDialogue.treeview_details.hide()
576- self.changesDialogue.connect(self.changesDialogue.show_details_button, SIGNAL("clicked()"), self.showChangesDialogueDetails)
577+ self.changesDialogue.buttonBox.helpRequested.connect(self.showChangesDialogueDetails)
578 self.translate_widget_children(self.changesDialogue)
579- self.changesDialogue.show_details_button.setText(_("Details") + " >>>")
580+ self.changesDialogue.buttonBox.button(QDialogButtonBox.Ok).setText(_("&Start Upgrade"))
581+ self.changesDialogue.buttonBox.button(QDialogButtonBox.Help).setIcon(QIcon())
582+ self.changesDialogue.buttonBox.button(QDialogButtonBox.Help).setText(_("Details") + " >>>")
583 self.changesDialogue.resize(self.changesDialogue.sizeHint())
584
585 if os.path.exists("/usr/share/icons/oxygen/48x48/status/dialog-warning.png"):
586@@ -773,9 +764,9 @@
587
588 if actions != None:
589 cancel = actions[0].replace("_", "")
590- self.changesDialogue.button_cancel_changes.setText(cancel)
591+ self.changesDialogue.buttonBox.button(QDialogButtonBox.Cancel).setText(cancel)
592 confirm = actions[1].replace("_", "")
593- self.changesDialogue.button_confirm_changes.setText(confirm)
594+ self.changesDialogue.buttonBox.button(QDialogButtonBox.Ok).setText(confirm)
595
596 summaryText = "<big><b>%s</b></big>" % summary
597 self.changesDialogue.label_summary.setText(summaryText)
598@@ -804,10 +795,12 @@
599 def showChangesDialogueDetails(self):
600 if self.changesDialogue.treeview_details.isVisible():
601 self.changesDialogue.treeview_details.hide()
602- self.changesDialogue.show_details_button.setText(_("Details") + " >>>")
603+ self.changesDialogue.buttonBox.button(QDialogButtonBox.Help).setText(_("Details") + " >>>")
604+ # Make sure we shrink the dialog otherwise it looks silly
605+ self.changesDialogue.adjustSize()
606 else:
607 self.changesDialogue.treeview_details.show()
608- self.changesDialogue.show_details_button.setText("<<< " + _("Details"))
609+ self.changesDialogue.buttonBox.button(QDialogButtonBox.Help).setText("<<< " + _("Details"))
610 self.changesDialogue.resize(self.changesDialogue.sizeHint())
611
612 def askYesNoQuestion(self, summary, msg, default='No'):
613
614=== added file 'DistUpgrade/QUrlOpener.py'
615--- DistUpgrade/QUrlOpener.py 1970-01-01 00:00:00 +0000
616+++ DistUpgrade/QUrlOpener.py 2014-08-05 13:50:46 +0000
617@@ -0,0 +1,80 @@
618+# QUrlOpener.py
619+# -*- Mode: Python; indent-tabs-mode: nil; tab-width: 4; coding: utf-8 -*-
620+#
621+# Copyright (c) 2014 Harald Sitter <apachelogger@kubuntu.org>
622+#
623+# This program is free software; you can redistribute it and/or
624+# modify it under the terms of the GNU General Public License as
625+# published by the Free Software Foundation; either version 2 of the
626+# License, or (at your option) any later version.
627+#
628+# This program is distributed in the hope that it will be useful,
629+# but WITHOUT ANY WARRANTY; without even the implied warranty of
630+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
631+# GNU General Public License for more details.
632+#
633+# You should have received a copy of the GNU General Public License
634+# along with this program. If not, see <http://www.gnu.org/licenses/>.
635+
636+try:
637+ # 14.04 has a broken pyqt5, so don't even try to import it and require
638+ # pyqt4.
639+ # In 14.04 various signals in pyqt5 can not be connected because it thinks
640+ # the signal does not exist or has an incompatible signature. Since this
641+ # potentially renders the GUI entirely broken and pyqt5 was not actively
642+ # used back then it is fair to simply require qt4 on trusty systems.
643+ from .utils import get_dist
644+ if get_dist() == 'trusty':
645+ raise ImportError
646+
647+ from PyQt5.QtCore import *
648+ from PyQt5.QtGui import *
649+except ImportError:
650+ from PyQt4.QtCore import *
651+ from PyQt4.QtGui import *
652+
653+import os
654+import subprocess
655+
656+def singleton(class_):
657+ instances = {}
658+ def instance(*args, **kwargs):
659+ if class_ not in instances:
660+ instances[class_] = class_(*args, **kwargs)
661+ return instances[class_]
662+ return instance
663+
664+@singleton
665+class QUrlOpener(QObject):
666+ def __init__(self):
667+ QObject.__init__(self)
668+ self.setParent(QCoreApplication.instance())
669+
670+ def setupUrlHandles(self):
671+ # Make sure we don't run a root browser.
672+ # NOTE: Qt native API can set an openUrl handler from a QObject
673+ # function, pyqt in theory also allows an arbitrary callable. Latter has
674+ # been observed to be non-functional so rely on the native handling.
675+ QDesktopServices.setUrlHandler('http', self, 'openUrl')
676+ QDesktopServices.setUrlHandler('https', self, 'openUrl')
677+
678+ # NOTE: largely code copy from ReleaseNotesViewer which imports GTK.
679+ @pyqtSlot(QUrl)
680+ def openUrl(self, url):
681+ url = url.toString()
682+ """Open the specified URL in a browser"""
683+ # Find an appropiate browser
684+ if os.path.exists("/usr/bin/xdg-open"):
685+ command = ["xdg-open", url]
686+ elif os.path.exists("/usr/bin/kde-open"):
687+ command = ["kde-open", url]
688+ elif os.path.exists("/usr/bin/exo-open"):
689+ command = ["exo-open", url]
690+ elif os.path.exists('/usr/bin/gnome-open'):
691+ command = ['gnome-open', url]
692+ else:
693+ command = ['x-www-browser', url]
694+ # Avoid to run the browser as user root
695+ if os.getuid() == 0 and 'SUDO_USER' in os.environ:
696+ command = ['sudo', '-u', os.environ['SUDO_USER']] + command
697+ subprocess.Popen(command)
698
699=== modified file 'DistUpgrade/dialog_changes.ui'
700--- DistUpgrade/dialog_changes.ui 2008-09-12 12:19:10 +0000
701+++ DistUpgrade/dialog_changes.ui 2014-08-05 13:50:46 +0000
702@@ -1,7 +1,8 @@
703-<ui version="4.0" >
704+<?xml version="1.0" encoding="UTF-8"?>
705+<ui version="4.0">
706 <class>dialog_changes</class>
707- <widget class="QDialog" name="dialog_changes" >
708- <property name="geometry" >
709+ <widget class="QDialog" name="dialog_changes">
710+ <property name="geometry">
711 <rect>
712 <x>0</x>
713 <y>0</y>
714@@ -9,58 +10,51 @@
715 <height>417</height>
716 </rect>
717 </property>
718- <property name="sizePolicy" >
719- <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
720+ <property name="sizePolicy">
721+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
722 <horstretch>0</horstretch>
723 <verstretch>0</verstretch>
724 </sizepolicy>
725 </property>
726- <property name="windowTitle" >
727+ <property name="windowTitle">
728 <string>Package Changes</string>
729 </property>
730- <property name="modal" >
731+ <property name="modal">
732 <bool>true</bool>
733 </property>
734- <layout class="QGridLayout" >
735- <item row="3" column="3" >
736- <widget class="QPushButton" name="button_cancel_changes" >
737- <property name="text" >
738- <string>&amp;Cancel</string>
739- </property>
740- </widget>
741- </item>
742- <item row="0" column="0" colspan="4" >
743- <layout class="QHBoxLayout" >
744+ <layout class="QVBoxLayout" name="verticalLayout">
745+ <item>
746+ <layout class="QHBoxLayout">
747 <item>
748- <layout class="QVBoxLayout" >
749+ <layout class="QVBoxLayout">
750 <item>
751- <widget class="QLabel" name="question_pixmap" >
752- <property name="sizePolicy" >
753- <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
754+ <widget class="QLabel" name="question_pixmap">
755+ <property name="sizePolicy">
756+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
757 <horstretch>0</horstretch>
758 <verstretch>0</verstretch>
759 </sizepolicy>
760 </property>
761- <property name="text" >
762+ <property name="text">
763 <string/>
764 </property>
765- <property name="pixmap" >
766+ <property name="pixmap">
767 <pixmap>image0</pixmap>
768 </property>
769- <property name="wordWrap" >
770+ <property name="wordWrap">
771 <bool>false</bool>
772 </property>
773 </widget>
774 </item>
775 <item>
776- <spacer name="spacer6" >
777- <property name="orientation" >
778+ <spacer name="spacer6">
779+ <property name="orientation">
780 <enum>Qt::Vertical</enum>
781 </property>
782- <property name="sizeType" >
783+ <property name="sizeType">
784 <enum>QSizePolicy::Expanding</enum>
785 </property>
786- <property name="sizeHint" stdset="0" >
787+ <property name="sizeHint" stdset="0">
788 <size>
789 <width>20</width>
790 <height>80</height>
791@@ -71,141 +65,121 @@
792 </layout>
793 </item>
794 <item>
795- <layout class="QVBoxLayout" >
796- <item>
797- <widget class="QLabel" name="label_summary" >
798- <property name="text" >
799- <string/>
800- </property>
801- <property name="textFormat" >
802- <enum>Qt::RichText</enum>
803- </property>
804- <property name="alignment" >
805- <set>Qt::AlignVCenter</set>
806- </property>
807- <property name="wordWrap" >
808- <bool>true</bool>
809- </property>
810- </widget>
811- </item>
812- <item>
813- <widget class="QLabel" name="label_changes" >
814- <property name="sizePolicy" >
815- <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
816- <horstretch>0</horstretch>
817- <verstretch>0</verstretch>
818- </sizepolicy>
819- </property>
820- <property name="text" >
821- <string/>
822- </property>
823- <property name="textFormat" >
824- <enum>Qt::RichText</enum>
825- </property>
826- <property name="alignment" >
827- <set>Qt::AlignVCenter</set>
828- </property>
829- <property name="wordWrap" >
830- <bool>true</bool>
831- </property>
832- </widget>
833+ <layout class="QVBoxLayout">
834+ <item>
835+ <widget class="QLabel" name="label_summary">
836+ <property name="sizePolicy">
837+ <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
838+ <horstretch>0</horstretch>
839+ <verstretch>0</verstretch>
840+ </sizepolicy>
841+ </property>
842+ <property name="text">
843+ <string/>
844+ </property>
845+ <property name="textFormat">
846+ <enum>Qt::RichText</enum>
847+ </property>
848+ <property name="alignment">
849+ <set>Qt::AlignVCenter</set>
850+ </property>
851+ <property name="wordWrap">
852+ <bool>true</bool>
853+ </property>
854+ </widget>
855+ </item>
856+ <item>
857+ <widget class="QLabel" name="label_changes">
858+ <property name="sizePolicy">
859+ <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
860+ <horstretch>0</horstretch>
861+ <verstretch>0</verstretch>
862+ </sizepolicy>
863+ </property>
864+ <property name="text">
865+ <string/>
866+ </property>
867+ <property name="textFormat">
868+ <enum>Qt::RichText</enum>
869+ </property>
870+ <property name="alignment">
871+ <set>Qt::AlignVCenter</set>
872+ </property>
873+ <property name="wordWrap">
874+ <bool>true</bool>
875+ </property>
876+ </widget>
877+ </item>
878+ <item>
879+ <spacer name="spacer6_2">
880+ <property name="orientation">
881+ <enum>Qt::Vertical</enum>
882+ </property>
883+ <property name="sizeHint" stdset="0">
884+ <size>
885+ <width>0</width>
886+ <height>0</height>
887+ </size>
888+ </property>
889+ </spacer>
890 </item>
891 </layout>
892 </item>
893 </layout>
894 </item>
895- <item row="1" column="0" >
896- <widget class="QPushButton" name="show_details_button" >
897- <property name="text" >
898- <string>Details >>></string>
899- </property>
900- </widget>
901- </item>
902- <item row="1" column="1" colspan="3" >
903- <spacer name="spacer2" >
904- <property name="orientation" >
905- <enum>Qt::Horizontal</enum>
906- </property>
907- <property name="sizeType" >
908- <enum>QSizePolicy::Expanding</enum>
909- </property>
910- <property name="sizeHint" stdset="0" >
911- <size>
912- <width>341</width>
913- <height>21</height>
914- </size>
915- </property>
916- </spacer>
917- </item>
918- <item row="3" column="2" >
919- <widget class="QPushButton" name="button_confirm_changes" >
920- <property name="text" >
921- <string>_Start Upgrade</string>
922- </property>
923- </widget>
924- </item>
925- <item row="3" column="0" colspan="2" >
926- <spacer name="spacer3" >
927- <property name="orientation" >
928- <enum>Qt::Horizontal</enum>
929- </property>
930- <property name="sizeType" >
931- <enum>QSizePolicy::Expanding</enum>
932- </property>
933- <property name="sizeHint" stdset="0" >
934- <size>
935- <width>161</width>
936- <height>20</height>
937- </size>
938- </property>
939- </spacer>
940- </item>
941- <item row="2" column="0" colspan="4" >
942- <widget class="QTreeWidget" name="treeview_details" >
943- <property name="rootIsDecorated" >
944+ <item>
945+ <widget class="QTreeWidget" name="treeview_details">
946+ <property name="rootIsDecorated">
947 <bool>false</bool>
948 </property>
949 <column>
950- <property name="text" >
951+ <property name="text">
952 <string>1</string>
953 </property>
954 </column>
955 </widget>
956 </item>
957+ <item>
958+ <widget class="QDialogButtonBox" name="buttonBox">
959+ <property name="standardButtons">
960+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok</set>
961+ </property>
962+ </widget>
963+ </item>
964 </layout>
965 </widget>
966- <layoutdefault spacing="6" margin="11" />
967+ <layoutdefault spacing="6" margin="11"/>
968 <resources/>
969 <connections>
970 <connection>
971- <sender>button_confirm_changes</sender>
972- <signal>clicked()</signal>
973+ <sender>buttonBox</sender>
974+ <signal>accepted()</signal>
975 <receiver>dialog_changes</receiver>
976 <slot>accept()</slot>
977 <hints>
978- <hint type="sourcelabel" >
979- <x>20</x>
980- <y>20</y>
981+ <hint type="sourcelabel">
982+ <x>293</x>
983+ <y>163</y>
984 </hint>
985- <hint type="destinationlabel" >
986- <x>20</x>
987- <y>20</y>
988+ <hint type="destinationlabel">
989+ <x>293</x>
990+ <y>208</y>
991 </hint>
992 </hints>
993 </connection>
994 <connection>
995- <sender>button_cancel_changes</sender>
996- <signal>clicked()</signal>
997+ <sender>buttonBox</sender>
998+ <signal>rejected()</signal>
999 <receiver>dialog_changes</receiver>
1000 <slot>reject()</slot>
1001 <hints>
1002- <hint type="sourcelabel" >
1003- <x>20</x>
1004- <y>20</y>
1005+ <hint type="sourcelabel">
1006+ <x>293</x>
1007+ <y>163</y>
1008 </hint>
1009- <hint type="destinationlabel" >
1010- <x>20</x>
1011- <y>20</y>
1012+ <hint type="destinationlabel">
1013+ <x>293</x>
1014+ <y>208</y>
1015 </hint>
1016 </hints>
1017 </connection>
1018
1019=== modified file 'DistUpgrade/dialog_error.ui'
1020--- DistUpgrade/dialog_error.ui 2008-09-12 12:19:10 +0000
1021+++ DistUpgrade/dialog_error.ui 2014-08-05 13:50:46 +0000
1022@@ -1,117 +1,99 @@
1023-<ui version="4.0" >
1024+<?xml version="1.0" encoding="UTF-8"?>
1025+<ui version="4.0">
1026 <class>dialog_error</class>
1027- <widget class="QDialog" name="dialog_error" >
1028- <property name="geometry" >
1029+ <widget class="QDialog" name="dialog_error">
1030+ <property name="geometry">
1031 <rect>
1032 <x>0</x>
1033 <y>0</y>
1034- <width>427</width>
1035- <height>343</height>
1036+ <width>268</width>
1037+ <height>263</height>
1038 </rect>
1039 </property>
1040- <property name="windowTitle" >
1041+ <property name="sizePolicy">
1042+ <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
1043+ <horstretch>0</horstretch>
1044+ <verstretch>0</verstretch>
1045+ </sizepolicy>
1046+ </property>
1047+ <property name="windowTitle">
1048 <string>Error</string>
1049 </property>
1050- <property name="modal" >
1051+ <property name="modal">
1052 <bool>true</bool>
1053 </property>
1054- <layout class="QGridLayout" >
1055- <item row="1" column="0" >
1056- <spacer name="spacer4" >
1057- <property name="orientation" >
1058- <enum>Qt::Vertical</enum>
1059- </property>
1060- <property name="sizeType" >
1061- <enum>QSizePolicy::Expanding</enum>
1062- </property>
1063- <property name="sizeHint" stdset="0" >
1064- <size>
1065- <width>21</width>
1066- <height>161</height>
1067- </size>
1068- </property>
1069- </spacer>
1070- </item>
1071- <item row="3" column="3" >
1072- <widget class="QPushButton" name="button_close" >
1073- <property name="text" >
1074- <string>&amp;Close</string>
1075- </property>
1076- </widget>
1077- </item>
1078- <item row="0" column="0" >
1079- <widget class="QLabel" name="image" >
1080- <property name="sizePolicy" >
1081- <sizepolicy vsizetype="Preferred" hsizetype="Fixed" >
1082- <horstretch>0</horstretch>
1083- <verstretch>0</verstretch>
1084- </sizepolicy>
1085- </property>
1086- <property name="text" >
1087- <string/>
1088- </property>
1089- <property name="pixmap" >
1090- <pixmap>image0</pixmap>
1091- </property>
1092- <property name="wordWrap" >
1093- <bool>false</bool>
1094- </property>
1095- </widget>
1096- </item>
1097- <item row="0" column="1" colspan="3" >
1098- <widget class="QLabel" name="label_error" >
1099- <property name="text" >
1100- <string/>
1101- </property>
1102- <property name="wordWrap" >
1103+ <layout class="QVBoxLayout" name="verticalLayout">
1104+ <item>
1105+ <layout class="QHBoxLayout" name="horizontalLayout">
1106+ <item>
1107+ <widget class="QLabel" name="image">
1108+ <property name="sizePolicy">
1109+ <sizepolicy hsizetype="Fixed" vsizetype="Minimum">
1110+ <horstretch>0</horstretch>
1111+ <verstretch>0</verstretch>
1112+ </sizepolicy>
1113+ </property>
1114+ <property name="text">
1115+ <string/>
1116+ </property>
1117+ <property name="pixmap">
1118+ <pixmap>image0</pixmap>
1119+ </property>
1120+ <property name="wordWrap">
1121+ <bool>false</bool>
1122+ </property>
1123+ </widget>
1124+ </item>
1125+ <item>
1126+ <widget class="QLabel" name="label_error">
1127+ <property name="sizePolicy">
1128+ <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
1129+ <horstretch>0</horstretch>
1130+ <verstretch>0</verstretch>
1131+ </sizepolicy>
1132+ </property>
1133+ <property name="text">
1134+ <string/>
1135+ </property>
1136+ <property name="wordWrap">
1137+ <bool>true</bool>
1138+ </property>
1139+ </widget>
1140+ </item>
1141+ </layout>
1142+ </item>
1143+ <item>
1144+ <widget class="QTextBrowser" name="textview_error">
1145+ <property name="openExternalLinks">
1146 <bool>true</bool>
1147 </property>
1148 </widget>
1149 </item>
1150- <item row="3" column="0" colspan="2" >
1151- <spacer name="spacer5" >
1152- <property name="orientation" >
1153- <enum>Qt::Horizontal</enum>
1154- </property>
1155- <property name="sizeType" >
1156- <enum>QSizePolicy::Expanding</enum>
1157- </property>
1158- <property name="sizeHint" stdset="0" >
1159- <size>
1160- <width>130</width>
1161- <height>21</height>
1162- </size>
1163- </property>
1164- </spacer>
1165- </item>
1166- <item row="3" column="2" >
1167- <widget class="QPushButton" name="button_bugreport" >
1168- <property name="text" >
1169- <string>_Report Bug</string>
1170+ <item>
1171+ <widget class="QDialogButtonBox" name="buttonBox">
1172+ <property name="standardButtons">
1173+ <set>QDialogButtonBox::Close</set>
1174 </property>
1175 </widget>
1176 </item>
1177- <item rowspan="2" row="1" column="1" colspan="3" >
1178- <widget class="QTextEdit" name="textview_error" />
1179- </item>
1180 </layout>
1181 </widget>
1182- <layoutdefault spacing="6" margin="11" />
1183+ <layoutdefault spacing="6" margin="11"/>
1184 <resources/>
1185 <connections>
1186 <connection>
1187- <sender>button_close</sender>
1188- <signal>clicked()</signal>
1189+ <sender>buttonBox</sender>
1190+ <signal>rejected()</signal>
1191 <receiver>dialog_error</receiver>
1192 <slot>close()</slot>
1193 <hints>
1194- <hint type="sourcelabel" >
1195- <x>20</x>
1196- <y>20</y>
1197+ <hint type="sourcelabel">
1198+ <x>182</x>
1199+ <y>274</y>
1200 </hint>
1201- <hint type="destinationlabel" >
1202- <x>20</x>
1203- <y>20</y>
1204+ <hint type="destinationlabel">
1205+ <x>182</x>
1206+ <y>147</y>
1207 </hint>
1208 </hints>
1209 </connection>
1210
1211=== modified file 'DistUpgrade/dialog_release_notes.ui'
1212--- DistUpgrade/dialog_release_notes.ui 2012-06-28 16:12:09 +0000
1213+++ DistUpgrade/dialog_release_notes.ui 2014-08-05 13:50:46 +0000
1214@@ -1,7 +1,8 @@
1215-<ui version="4.0" >
1216+<?xml version="1.0" encoding="UTF-8"?>
1217+<ui version="4.0">
1218 <class>Dialog</class>
1219- <widget class="QDialog" name="Dialog" >
1220- <property name="geometry" >
1221+ <widget class="QDialog" name="Dialog">
1222+ <property name="geometry">
1223 <rect>
1224 <x>0</x>
1225 <y>0</y>
1226@@ -9,27 +10,30 @@
1227 <height>476</height>
1228 </rect>
1229 </property>
1230- <property name="windowTitle" >
1231+ <property name="windowTitle">
1232 <string>Dialog</string>
1233 </property>
1234- <layout class="QGridLayout" name="gridLayout" >
1235- <item row="0" column="0" >
1236- <widget class="QTextEdit" name="scrolled_notes" >
1237- <property name="readOnly" >
1238- <bool>true</bool>
1239- </property>
1240- </widget>
1241- </item>
1242- <item row="1" column="0" >
1243- <widget class="QDialogButtonBox" name="buttonBox" >
1244- <property name="orientation" >
1245+ <layout class="QGridLayout" name="gridLayout">
1246+ <item row="1" column="0">
1247+ <widget class="QDialogButtonBox" name="buttonBox">
1248+ <property name="orientation">
1249 <enum>Qt::Horizontal</enum>
1250 </property>
1251- <property name="standardButtons" >
1252+ <property name="standardButtons">
1253 <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
1254 </property>
1255 </widget>
1256 </item>
1257+ <item row="0" column="0">
1258+ <widget class="QTextBrowser" name="scrolled_notes">
1259+ <property name="readOnly">
1260+ <bool>true</bool>
1261+ </property>
1262+ <property name="openExternalLinks">
1263+ <bool>true</bool>
1264+ </property>
1265+ </widget>
1266+ </item>
1267 </layout>
1268 </widget>
1269 <resources/>
1270@@ -40,11 +44,11 @@
1271 <receiver>Dialog</receiver>
1272 <slot>accept()</slot>
1273 <hints>
1274- <hint type="sourcelabel" >
1275+ <hint type="sourcelabel">
1276 <x>248</x>
1277 <y>254</y>
1278 </hint>
1279- <hint type="destinationlabel" >
1280+ <hint type="destinationlabel">
1281 <x>157</x>
1282 <y>274</y>
1283 </hint>
1284@@ -56,11 +60,11 @@
1285 <receiver>Dialog</receiver>
1286 <slot>reject()</slot>
1287 <hints>
1288- <hint type="sourcelabel" >
1289+ <hint type="sourcelabel">
1290 <x>316</x>
1291 <y>260</y>
1292 </hint>
1293- <hint type="destinationlabel" >
1294+ <hint type="destinationlabel">
1295 <x>286</x>
1296 <y>274</y>
1297 </hint>
1298
1299=== modified file 'DistUpgrade/fetch-progress.ui'
1300--- DistUpgrade/fetch-progress.ui 2012-06-28 16:12:09 +0000
1301+++ DistUpgrade/fetch-progress.ui 2014-08-05 13:50:46 +0000
1302@@ -1,67 +1,36 @@
1303-<ui version="4.0" >
1304+<?xml version="1.0" encoding="UTF-8"?>
1305+<ui version="4.0">
1306 <class>Dialog</class>
1307- <widget class="QDialog" name="Dialog" >
1308- <property name="geometry" >
1309+ <widget class="QDialog" name="Dialog">
1310+ <property name="geometry">
1311 <rect>
1312 <x>0</x>
1313 <y>0</y>
1314- <width>408</width>
1315- <height>129</height>
1316+ <width>409</width>
1317+ <height>93</height>
1318 </rect>
1319 </property>
1320- <property name="windowTitle" >
1321+ <property name="windowTitle">
1322 <string>Dialog</string>
1323 </property>
1324- <layout class="QGridLayout" name="gridLayout_3" >
1325- <item row="4" column="0" >
1326- <widget class="QWidget" native="1" name="installFrame" >
1327- <layout class="QGridLayout" name="gridLayout_2" >
1328- <property name="margin" >
1329- <number>0</number>
1330- </property>
1331- <item row="1" column="0" colspan="2" >
1332- <widget class="QProgressBar" name="installationProgress" >
1333- <property name="value" >
1334- <number>24</number>
1335- </property>
1336- </widget>
1337- </item>
1338- <item row="3" column="0" colspan="2" >
1339- <widget class="QWidget" native="1" name="konsoleFrame" />
1340- </item>
1341- <item row="4" column="0" colspan="2" >
1342- <spacer name="verticalSpacer" >
1343- <property name="orientation" >
1344- <enum>Qt::Vertical</enum>
1345- </property>
1346- <property name="sizeHint" stdset="0" >
1347- <size>
1348- <width>397</width>
1349- <height>5</height>
1350- </size>
1351- </property>
1352- </spacer>
1353- </item>
1354- <item row="0" column="0" colspan="2" >
1355- <widget class="QLabel" name="installingLabel" >
1356- <property name="text" >
1357- <string/>
1358- </property>
1359- </widget>
1360- </item>
1361- </layout>
1362- </widget>
1363- </item>
1364- <item row="0" column="0" >
1365- <widget class="QLabel" name="titleLabel" >
1366- <property name="text" >
1367+ <layout class="QVBoxLayout" name="verticalLayout">
1368+ <item>
1369+ <widget class="QLabel" name="installingLabel">
1370+ <property name="text">
1371 <string/>
1372 </property>
1373 </widget>
1374 </item>
1375- <item row="5" column="0" >
1376- <widget class="QDialogButtonBox" name="buttonBox" >
1377- <property name="standardButtons" >
1378+ <item>
1379+ <widget class="QProgressBar" name="installationProgress">
1380+ <property name="value">
1381+ <number>24</number>
1382+ </property>
1383+ </widget>
1384+ </item>
1385+ <item>
1386+ <widget class="QDialogButtonBox" name="buttonBox">
1387+ <property name="standardButtons">
1388 <set>QDialogButtonBox::Close</set>
1389 </property>
1390 </widget>
1391@@ -76,11 +45,11 @@
1392 <receiver>Dialog</receiver>
1393 <slot>accept()</slot>
1394 <hints>
1395- <hint type="sourcelabel" >
1396+ <hint type="sourcelabel">
1397 <x>271</x>
1398 <y>169</y>
1399 </hint>
1400- <hint type="destinationlabel" >
1401+ <hint type="destinationlabel">
1402 <x>271</x>
1403 <y>94</y>
1404 </hint>
1405@@ -92,11 +61,11 @@
1406 <receiver>Dialog</receiver>
1407 <slot>reject()</slot>
1408 <hints>
1409- <hint type="sourcelabel" >
1410+ <hint type="sourcelabel">
1411 <x>271</x>
1412 <y>169</y>
1413 </hint>
1414- <hint type="destinationlabel" >
1415+ <hint type="destinationlabel">
1416 <x>271</x>
1417 <y>94</y>
1418 </hint>
1419
1420=== modified file 'DistUpgrade/window_main.ui'
1421--- DistUpgrade/window_main.ui 2014-05-02 11:46:02 +0000
1422+++ DistUpgrade/window_main.ui 2014-08-05 13:50:46 +0000
1423@@ -1,7 +1,8 @@
1424-<ui version="4.0" >
1425+<?xml version="1.0" encoding="UTF-8"?>
1426+<ui version="4.0">
1427 <class>window_main</class>
1428- <widget class="QWidget" name="window_main" >
1429- <property name="geometry" >
1430+ <widget class="QWidget" name="window_main">
1431+ <property name="geometry">
1432 <rect>
1433 <x>0</x>
1434 <y>0</y>
1435@@ -9,26 +10,26 @@
1436 <height>294</height>
1437 </rect>
1438 </property>
1439- <property name="windowTitle" >
1440+ <property name="windowTitle">
1441 <string>Distribution Upgrade</string>
1442 </property>
1443- <layout class="QGridLayout" >
1444- <item row="6" column="0" >
1445- <widget class="QPushButton" name="showTerminalButton" >
1446- <property name="text" >
1447- <string>Show Terminal >>></string>
1448+ <layout class="QGridLayout">
1449+ <item row="6" column="0">
1450+ <widget class="QPushButton" name="showTerminalButton">
1451+ <property name="text">
1452+ <string>Show Terminal &gt;&gt;&gt;</string>
1453 </property>
1454 </widget>
1455 </item>
1456- <item row="6" column="1" >
1457- <spacer name="spacer1" >
1458- <property name="orientation" >
1459+ <item row="6" column="1">
1460+ <spacer name="spacer1">
1461+ <property name="orientation">
1462 <enum>Qt::Horizontal</enum>
1463 </property>
1464- <property name="sizeType" >
1465+ <property name="sizeType">
1466 <enum>QSizePolicy::Expanding</enum>
1467 </property>
1468- <property name="sizeHint" stdset="0" >
1469+ <property name="sizeHint" stdset="0">
1470 <size>
1471 <width>302</width>
1472 <height>21</height>
1473@@ -36,25 +37,25 @@
1474 </property>
1475 </spacer>
1476 </item>
1477- <item rowspan="2" row="4" column="0" colspan="4" >
1478- <widget class="QLabel" name="label_status" >
1479- <property name="text" >
1480+ <item row="4" column="0" rowspan="2" colspan="4">
1481+ <widget class="QLabel" name="label_status">
1482+ <property name="text">
1483 <string/>
1484 </property>
1485- <property name="wordWrap" >
1486+ <property name="wordWrap">
1487 <bool>false</bool>
1488 </property>
1489 </widget>
1490 </item>
1491- <item rowspan="2" row="5" column="2" >
1492- <spacer name="spacer3" >
1493- <property name="orientation" >
1494+ <item row="5" column="2" rowspan="2">
1495+ <spacer name="spacer3">
1496+ <property name="orientation">
1497 <enum>Qt::Vertical</enum>
1498 </property>
1499- <property name="sizeType" >
1500+ <property name="sizeType">
1501 <enum>QSizePolicy::Expanding</enum>
1502 </property>
1503- <property name="sizeHint" stdset="0" >
1504+ <property name="sizeHint" stdset="0">
1505 <size>
1506 <width>20</width>
1507 <height>16</height>
1508@@ -62,206 +63,212 @@
1509 </property>
1510 </spacer>
1511 </item>
1512- <item row="2" column="0" colspan="4" >
1513- <widget class="QLabel" name="progress_text" >
1514- <property name="text" >
1515+ <item row="2" column="0" colspan="4">
1516+ <widget class="QLabel" name="progress_text">
1517+ <property name="text">
1518 <string/>
1519 </property>
1520- <property name="wordWrap" >
1521+ <property name="wordWrap">
1522 <bool>false</bool>
1523 </property>
1524 </widget>
1525 </item>
1526- <item row="1" column="0" colspan="4" >
1527- <layout class="QGridLayout" >
1528- <item row="3" column="0" >
1529- <widget class="QLabel" name="image_step4" >
1530- <property name="sizePolicy" >
1531- <sizepolicy vsizetype="Preferred" hsizetype="Maximum" >
1532- <horstretch>0</horstretch>
1533- <verstretch>0</verstretch>
1534- </sizepolicy>
1535- </property>
1536- <property name="text" >
1537- <string/>
1538- </property>
1539- <property name="wordWrap" >
1540- <bool>false</bool>
1541- </property>
1542- </widget>
1543- </item>
1544- <item row="1" column="0" >
1545- <widget class="QLabel" name="image_step2" >
1546- <property name="sizePolicy" >
1547- <sizepolicy vsizetype="Preferred" hsizetype="Maximum" >
1548- <horstretch>0</horstretch>
1549- <verstretch>0</verstretch>
1550- </sizepolicy>
1551- </property>
1552- <property name="text" >
1553- <string/>
1554- </property>
1555- <property name="wordWrap" >
1556- <bool>false</bool>
1557- </property>
1558- </widget>
1559- </item>
1560- <item row="0" column="1" >
1561- <widget class="QLabel" name="label_step1" >
1562- <property name="text" >
1563+ <item row="1" column="0" colspan="4">
1564+ <layout class="QGridLayout">
1565+ <item row="3" column="0">
1566+ <widget class="QLabel" name="image_step4">
1567+ <property name="sizePolicy">
1568+ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
1569+ <horstretch>0</horstretch>
1570+ <verstretch>0</verstretch>
1571+ </sizepolicy>
1572+ </property>
1573+ <property name="text">
1574+ <string/>
1575+ </property>
1576+ <property name="wordWrap">
1577+ <bool>false</bool>
1578+ </property>
1579+ </widget>
1580+ </item>
1581+ <item row="1" column="0">
1582+ <widget class="QLabel" name="image_step2">
1583+ <property name="sizePolicy">
1584+ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
1585+ <horstretch>0</horstretch>
1586+ <verstretch>0</verstretch>
1587+ </sizepolicy>
1588+ </property>
1589+ <property name="text">
1590+ <string/>
1591+ </property>
1592+ <property name="wordWrap">
1593+ <bool>false</bool>
1594+ </property>
1595+ </widget>
1596+ </item>
1597+ <item row="0" column="1">
1598+ <widget class="QLabel" name="label_step1">
1599+ <property name="text">
1600 <string>Preparing to upgrade</string>
1601 </property>
1602- <property name="wordWrap" >
1603- <bool>false</bool>
1604- </property>
1605- </widget>
1606- </item>
1607- <item row="0" column="0" >
1608- <widget class="QLabel" name="image_step1" >
1609- <property name="sizePolicy" >
1610- <sizepolicy vsizetype="Preferred" hsizetype="Maximum" >
1611- <horstretch>0</horstretch>
1612- <verstretch>0</verstretch>
1613- </sizepolicy>
1614- </property>
1615- <property name="text" >
1616- <string/>
1617- </property>
1618- <property name="wordWrap" >
1619- <bool>false</bool>
1620- </property>
1621- </widget>
1622- </item>
1623- <item row="2" column="0" >
1624- <widget class="QLabel" name="image_step3" >
1625- <property name="sizePolicy" >
1626- <sizepolicy vsizetype="Preferred" hsizetype="Maximum" >
1627- <horstretch>0</horstretch>
1628- <verstretch>0</verstretch>
1629- </sizepolicy>
1630- </property>
1631- <property name="text" >
1632- <string/>
1633- </property>
1634- <property name="wordWrap" >
1635- <bool>false</bool>
1636- </property>
1637- </widget>
1638- </item>
1639- <item row="2" column="1" >
1640- <widget class="QLabel" name="label_step3" >
1641- <property name="text" >
1642+ <property name="wordWrap">
1643+ <bool>false</bool>
1644+ </property>
1645+ </widget>
1646+ </item>
1647+ <item row="0" column="0">
1648+ <widget class="QLabel" name="image_step1">
1649+ <property name="sizePolicy">
1650+ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
1651+ <horstretch>0</horstretch>
1652+ <verstretch>0</verstretch>
1653+ </sizepolicy>
1654+ </property>
1655+ <property name="text">
1656+ <string/>
1657+ </property>
1658+ <property name="wordWrap">
1659+ <bool>false</bool>
1660+ </property>
1661+ </widget>
1662+ </item>
1663+ <item row="2" column="0">
1664+ <widget class="QLabel" name="image_step3">
1665+ <property name="sizePolicy">
1666+ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
1667+ <horstretch>0</horstretch>
1668+ <verstretch>0</verstretch>
1669+ </sizepolicy>
1670+ </property>
1671+ <property name="text">
1672+ <string/>
1673+ </property>
1674+ <property name="wordWrap">
1675+ <bool>false</bool>
1676+ </property>
1677+ </widget>
1678+ </item>
1679+ <item row="2" column="1">
1680+ <widget class="QLabel" name="label_step3">
1681+ <property name="text">
1682 <string>Getting new packages</string>
1683 </property>
1684- <property name="wordWrap" >
1685+ <property name="wordWrap">
1686 <bool>false</bool>
1687 </property>
1688 </widget>
1689 </item>
1690- <item row="4" column="1" >
1691- <widget class="QLabel" name="label_step5" >
1692- <property name="text" >
1693+ <item row="4" column="1">
1694+ <widget class="QLabel" name="label_step5">
1695+ <property name="text">
1696 <string>Cleaning up</string>
1697 </property>
1698- <property name="wordWrap" >
1699+ <property name="wordWrap">
1700 <bool>false</bool>
1701 </property>
1702 </widget>
1703 </item>
1704- <item row="3" column="1" >
1705- <widget class="QLabel" name="label_step4" >
1706- <property name="text" >
1707+ <item row="3" column="1">
1708+ <widget class="QLabel" name="label_step4">
1709+ <property name="text">
1710 <string>Installing the upgrades</string>
1711 </property>
1712- <property name="wordWrap" >
1713+ <property name="wordWrap">
1714 <bool>false</bool>
1715 </property>
1716 </widget>
1717 </item>
1718- <item row="1" column="1" >
1719- <widget class="QLabel" name="label_step2" >
1720- <property name="text" >
1721+ <item row="1" column="1">
1722+ <widget class="QLabel" name="label_step2">
1723+ <property name="text">
1724 <string>Setting new software channels</string>
1725 </property>
1726- <property name="wordWrap" >
1727+ <property name="wordWrap">
1728 <bool>false</bool>
1729 </property>
1730 </widget>
1731 </item>
1732- <item row="5" column="1" >
1733- <widget class="QLabel" name="label_step6" >
1734- <property name="text" >
1735+ <item row="5" column="1">
1736+ <widget class="QLabel" name="label_step6">
1737+ <property name="text">
1738 <string>Restarting the computer</string>
1739 </property>
1740- <property name="wordWrap" >
1741- <bool>false</bool>
1742- </property>
1743- </widget>
1744- </item>
1745- <item row="4" column="0" >
1746- <widget class="QLabel" name="image_step5" >
1747- <property name="sizePolicy" >
1748- <sizepolicy vsizetype="Preferred" hsizetype="Maximum" >
1749- <horstretch>0</horstretch>
1750- <verstretch>0</verstretch>
1751- </sizepolicy>
1752- </property>
1753- <property name="text" >
1754- <string/>
1755- </property>
1756- <property name="wordWrap" >
1757- <bool>false</bool>
1758- </property>
1759- </widget>
1760- </item>
1761- <item row="5" column="0" >
1762- <widget class="QLabel" name="image_step6" >
1763- <property name="sizePolicy" >
1764- <sizepolicy vsizetype="Preferred" hsizetype="Maximum" >
1765- <horstretch>0</horstretch>
1766- <verstretch>0</verstretch>
1767- </sizepolicy>
1768- </property>
1769- <property name="text" >
1770- <string/>
1771- </property>
1772- <property name="wordWrap" >
1773+ <property name="wordWrap">
1774+ <bool>false</bool>
1775+ </property>
1776+ </widget>
1777+ </item>
1778+ <item row="4" column="0">
1779+ <widget class="QLabel" name="image_step5">
1780+ <property name="sizePolicy">
1781+ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
1782+ <horstretch>0</horstretch>
1783+ <verstretch>0</verstretch>
1784+ </sizepolicy>
1785+ </property>
1786+ <property name="text">
1787+ <string/>
1788+ </property>
1789+ <property name="wordWrap">
1790+ <bool>false</bool>
1791+ </property>
1792+ </widget>
1793+ </item>
1794+ <item row="5" column="0">
1795+ <widget class="QLabel" name="image_step6">
1796+ <property name="sizePolicy">
1797+ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
1798+ <horstretch>0</horstretch>
1799+ <verstretch>0</verstretch>
1800+ </sizepolicy>
1801+ </property>
1802+ <property name="text">
1803+ <string/>
1804+ </property>
1805+ <property name="wordWrap">
1806 <bool>false</bool>
1807 </property>
1808 </widget>
1809 </item>
1810 </layout>
1811 </item>
1812- <item row="0" column="0" colspan="4" >
1813- <widget class="QLabel" name="label_title" >
1814- <property name="text" >
1815- <string>&lt;b>&lt;big>Upgrading Ubuntu to version 14.10&lt;/big>&lt;/b></string>
1816+ <item row="0" column="0" colspan="4">
1817+ <widget class="QLabel" name="label_title">
1818+ <property name="text">
1819+ <string>&lt;b&gt;&lt;big&gt;Upgrading Ubuntu to version 14.10&lt;/big&gt;&lt;/b&gt;</string>
1820 </property>
1821- <property name="wordWrap" >
1822+ <property name="wordWrap">
1823 <bool>false</bool>
1824 </property>
1825 </widget>
1826 </item>
1827- <item row="7" column="0" colspan="3" >
1828- <widget class="QFrame" name="konsole_frame" >
1829- <property name="frameShape" >
1830+ <item row="7" column="0" colspan="3">
1831+ <widget class="QFrame" name="konsole_frame">
1832+ <property name="frameShape">
1833 <enum>QFrame::StyledPanel</enum>
1834 </property>
1835- <property name="frameShadow" >
1836+ <property name="frameShadow">
1837 <enum>QFrame::Raised</enum>
1838 </property>
1839 </widget>
1840 </item>
1841- <item row="3" column="0" colspan="3" >
1842- <widget class="QProgressBar" name="progressbar_cache" >
1843- <property name="value" >
1844+ <item row="3" column="0" colspan="3">
1845+ <widget class="QProgressBar" name="progressbar_cache">
1846+ <property name="sizePolicy">
1847+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
1848+ <horstretch>0</horstretch>
1849+ <verstretch>0</verstretch>
1850+ </sizepolicy>
1851+ </property>
1852+ <property name="value">
1853 <number>24</number>
1854 </property>
1855 </widget>
1856 </item>
1857 </layout>
1858 </widget>
1859- <layoutdefault spacing="6" margin="11" />
1860+ <layoutdefault spacing="6" margin="11"/>
1861 <resources/>
1862 <connections/>
1863 </ui>
1864
1865=== modified file 'debian/changelog'
1866--- debian/changelog 2014-08-05 06:33:47 +0000
1867+++ debian/changelog 2014-08-05 13:50:46 +0000
1868@@ -1,9 +1,96 @@
1869+<<<<<<< TREE
1870 ubuntu-release-upgrader (1:14.10.6) UNRELEASED; urgency=medium
1871
1872 * check-new-release-gtk: Fix deprecated Gio.Settings constructor invocation.
1873
1874 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 05 Aug 2014 08:33:11 +0200
1875
1876+=======
1877+ubuntu-release-upgrader (1:14.10.6ubuntu1) UNRELEASED; urgency=medium
1878+
1879+ * Port KDE GUIs to native Qt5 versions.
1880+ + pyqt5 is only imported iff the current dist version is not trusty as
1881+ that one had a nasty bug with signals and slots not connecting properly.
1882+ + pyqt4/pykde4 compatibility is retained by fallback handling for the
1883+ pyqt5 import, as well as some version checks switching out kde classes
1884+ for qt classes when using Qt5. Ultimately systems <=utopic will retain
1885+ the same behavior as before.
1886+ + KDE bits replacemed as follows:
1887+ * KIcon -> QIcon::fromTheme
1888+ * KMessageBox -> QMessageBox (using most suitable version from the
1889+ limited feature set of QMB)
1890+ * KApplication -> QApplication
1891+ * i18n -> _()
1892+ * Fix KDE upgrade fetcher GUI
1893+ + Wire up do-release-upgrade with the KDE GUI to actually provide a UI
1894+ when run from a KDE Plasma envrionment
1895+ + Remove all logic that replicated stuff done in do-release-upgrade
1896+ (this primarily includes using MetaRelease to actually conduct the
1897+ version check, the automatic version checks are done by a special
1898+ script that is part of muon, so we do not ever call the fetcher
1899+ manually, and have not done so in at least 5 years)
1900+ + Detangle the Acquire class from the Fetcher class, latter is not
1901+ automatically constructing former any longer but needs to get it
1902+ supplied from the outside (i.e. do-release-upgrade)
1903+ + init arguments of both classes are now alinged with their GTK
1904+ counterparts
1905+ + The designer ui file now uses a QTextBrowser rather than a QTextEdit as
1906+ the user doesn't need to edit anything and the former supports html and
1907+ url opening
1908+ + The fetcher ui file has had all unused widgets removed which makes the
1909+ fetcher dialog have correct spacing
1910+ + The classes now hold a QApp as self.app to reflect the fact that they
1911+ may be constructed in any order and thus may need a QApplication in any
1912+ order. The actually instance is created from a new function that creates
1913+ an instance if there isn't one already. Ultimately this should probably
1914+ become a singleton.
1915+ + The Acquire process can now be aborted properly.
1916+ * Fix translation loading. As all Qt GUIs no prominently feature Qt builtin
1917+ classes with strings (QMessageBox, QButtonBox) we make sure that the
1918+ correct translations are loaded through QTranslator right after creating
1919+ the QApplication instances.
1920+ + ubuntu-release-upgrader-qt now recommends qttranslations5-l10n to
1921+ reflect this on a packaging level
1922+ * Add a new class QUrlOpener to redirect all openUrl calls through sudo -u
1923+ if the GUI is run as root, so that we can start the browsers as the user
1924+ rather than root. This class is used in both the Fetcher and the Upgrader.
1925+ It is a singleton that autoparents to qapp, so a qapp instance needs to be
1926+ available before using the opener.
1927+ * Improve Upgrader GUI
1928+ + Upgrader GUI does not meddle with xauthority anymore and doesn't kill
1929+ adept anymore (mind you, adept hasn't been used in years...)
1930+ Also the meddling seems to have been bugged in one form or the other
1931+ which ultimately prevents us from doing a proper openUrl as the invoking
1932+ user
1933+ + dialog_error.ui has been converted to use QTextBrowser as there is no
1934+ editing need.
1935+ + error dialog size hinting as been adjusted to make sure the window can
1936+ not be resized beyond what is suitable to still display stuff.
1937+ + error dialog window size is adjusted before exec to make sure that
1938+ the window has a suitable default size depending on whether the textview
1939+ is displayed or not
1940+ + dialog_error.ui has had its close button replaced with a standard
1941+ QButtonBox
1942+ + reportBug function has been removed as it is not used anymore (core
1943+ brings up apport regardless and the bug report url is most inconvenient
1944+ and pointless because people will not attach the relevant logs...)
1945+ + openUrl function has been removed as it is not used anymore
1946+ + dialog_changes.ui has had its size hinting adjusted to make sure that
1947+ the window has a suitable default size
1948+ + dialog_changes.ui uses QDialogButtonBox for all buttons now, details is
1949+ derived from Help which is the closest fit as far as standard types are
1950+ concerned
1951+ + The changes dialog now adjusts its size when the details widget is
1952+ hidden, this prevents overly large windows after details was shown once
1953+ + The changes dialog now correctly spaces the labels as well as the icon
1954+ label at the window, this resolves text jumping when showing/hiding the
1955+ details widget which was caused by the labels being pushed towards the
1956+ top to make space for the details, now a space makes that happen all the
1957+ time
1958+
1959+ -- Harald Sitter <apachelogger@kubuntu.org> Tue, 05 Aug 2014 15:20:10 +0200
1960+
1961+>>>>>>> MERGE-SOURCE
1962 ubuntu-release-upgrader (1:14.10.5) utopic; urgency=medium
1963
1964 [ Brian Murray ]
1965
1966=== modified file 'debian/control'
1967--- debian/control 2014-03-13 17:06:03 +0000
1968+++ debian/control 2014-08-05 13:50:46 +0000
1969@@ -67,9 +67,10 @@
1970 Pre-Depends: ${misc:Pre-Depends}
1971 Depends: ${misc:Depends},
1972 ubuntu-release-upgrader-core (= ${source:Version}),
1973- python3-pykde4,
1974+ python3-pyqt5,
1975 kdesudo,
1976 psmisc
1977+Recommends: qttranslations5-l10n
1978 Replaces: update-manager-kde (<< 1:0.165)
1979 Breaks: update-manager-kde (<< 1:0.165)
1980 Description: manage release upgrades
1981
1982=== modified file 'do-release-upgrade'
1983--- do-release-upgrade 2014-03-07 17:00:00 +0000
1984+++ do-release-upgrade 2014-08-05 13:50:46 +0000
1985@@ -33,6 +33,18 @@
1986 progress=progress,
1987 parent=None,
1988 datadir=datadir)
1989+ elif frontend == "DistUpgradeViewKDE":
1990+ print("kde")
1991+ from DistUpgrade.DistUpgradeFetcherKDE import DistUpgradeFetcherKDE
1992+ from DistUpgrade.DistUpgradeFetcherKDE import KDEAcquireProgressAdapter
1993+ progress = KDEAcquireProgressAdapter(
1994+ parent=None,
1995+ datadir=datadir,
1996+ label=_("Downloading the release upgrade tool"))
1997+ return DistUpgradeFetcherKDE(new_dist=new_dist,
1998+ progress=progress,
1999+ parent=None,
2000+ datadir=datadir)
2001 else:
2002 from DistUpgrade.DistUpgradeFetcherCore import DistUpgradeFetcherCore
2003 import apt

Subscribers

People subscribed via source and target branches