diff --git a/usr/lib/linuxmint/mintSources/mintSources.py b/usr/lib/linuxmint/mintSources/mintSources.py index 0fe2af5..d1f284d 100755 --- a/usr/lib/linuxmint/mintSources/mintSources.py +++ b/usr/lib/linuxmint/mintSources/mintSources.py @@ -22,6 +22,7 @@ import mintcommon import glob import gi +from ppa_browser import PPA_Browser gi.require_version('Gtk', '3.0') gi.require_version('GdkX11', '3.0') # Needed to get xid gi.require_version('XApp', '1.0') @@ -1286,7 +1287,7 @@ def examine_ppa(self, widget): architecture = subprocess.getoutput("dpkg --print-architecture") ppa_file = "/var/lib/apt/lists/ppa.launchpad.net_%s_%s_ubuntu_dists_%s_main_binary-%s_Packages" % (ppa_owner, ppa_name, self.config["general"]["base_codename"], architecture) if os.path.exists(ppa_file): - os.system("/usr/lib/linuxmint/mintSources/ppa_browser.py %s %s %s &" % (self.config["general"]["base_codename"], ppa_owner, ppa_name)) + PPA_Browser(self.config["general"]["base_codename"], ppa_owner, ppa_name, self._main_window) else: print ("%s not found!" % ppa_file) self.show_error_dialog(self._main_window, _("The content of this PPA is not available. Please refresh the cache and try again.")) diff --git a/usr/lib/linuxmint/mintSources/ppa_browser.py b/usr/lib/linuxmint/mintSources/ppa_browser.py index ba811b6..96b2190 100755 --- a/usr/lib/linuxmint/mintSources/ppa_browser.py +++ b/usr/lib/linuxmint/mintSources/ppa_browser.py @@ -3,15 +3,13 @@ import sys import apt import gettext -import tempfile import subprocess import mintcommon import platform import locale import gi gi.require_version('Gtk', '3.0') -gi.require_version('GdkX11', '3.0') # Needed to get xid -from gi.repository import Gtk, GdkX11 +from gi.repository import Gtk # i18n APP = 'mintsources' @@ -23,7 +21,7 @@ class PPA_Browser(): - def __init__(self, base_codename, ppa_owner, ppa_name): + def __init__(self, base_codename, ppa_owner, ppa_name, parent_window, standalone=False): if platform.machine() == "X86_64": architecture = "amd64" else: @@ -34,29 +32,33 @@ def __init__(self, base_codename, ppa_owner, ppa_name): if not os.path.exists(ppa_file): print ("%s not found!" % ppa_file) - sys.exit(1) + return + self.is_standalone = standalone self.packages_to_install = [] self.packages_installed_from_ppa = [] glade_file = "/usr/lib/linuxmint/mintSources/mintsources.glade" - self.builder = Gtk.Builder() - self.builder.set_translation_domain("mintsources") - self.builder.add_from_file(glade_file) + builder = Gtk.Builder() + builder.set_translation_domain("mintsources") + builder.add_from_file(glade_file) - self.window = self.builder.get_object("ppa_window") + self.window = builder.get_object("ppa_window") self.window.set_title(_("PPA")) self.window.set_icon_name("software-sources") - self.window.connect("destroy", Gtk.main_quit) - self.builder.get_object("button_cancel").connect("clicked", Gtk.main_quit) - self.install_button = self.builder.get_object("button_install") + self.window.connect("destroy", self.exit) + if parent_window is not None: + self.window.set_transient_for(parent_window) + self.window.set_modal(True) + builder.get_object("button_cancel").connect("clicked", self.exit) + self.install_button = builder.get_object("button_install") self.install_button.connect("clicked", self.install) self.install_button.set_sensitive(False) - self.builder.get_object("label_ppa_name").set_markup("%s/%s" % (ppa_owner, ppa_name)) + builder.get_object("label_ppa_name").set_markup("%s/%s" % (ppa_owner, ppa_name)) self.model = Gtk.ListStore(object, bool, str) - treeview = self.builder.get_object("treeview_ppa_pkgs") + treeview = builder.get_object("treeview_ppa_pkgs") treeview.set_model(self.model) self.model.set_sort_column_id(2, Gtk.SortType.ASCENDING) @@ -73,8 +75,6 @@ def __init__(self, base_codename, ppa_owner, ppa_name): col.set_sort_column_id(2) cache = apt.Cache() - self.apt = mintcommon.APT(self.window) - packages = subprocess.getoutput("grep 'Package:' %s | sort | awk {'print $2;'}" % ppa_file).split("\n") for package in packages: if package in cache: @@ -95,7 +95,6 @@ def __init__(self, base_codename, ppa_owner, ppa_name): self.model.append((pkg, False, "%s\n%s" % (pkg.name, candidate.version))) break - treeview.show() self.window.show_all() def datafunction_checkbox(self, column, cell, model, iter, data): @@ -121,15 +120,24 @@ def toggled (self, renderer, path): self.install_button.set_sensitive(len(self.packages_to_install) > 0) def install (self, button): - self.apt.set_finished_callback(self.exit) - self.apt.install_packages(self.packages_to_install) + apt = mintcommon.APT(self.window) + apt.set_finished_callback(self.exit) + apt.install_packages(self.packages_to_install) def exit(self, transaction=None, exit_state=None): - sys.exit(0) + self.apt = None + self.model = None + self.window.destroy() + self.install_button.destroy() + + self.packages_to_install = [] + self.packages_installed_from_ppa = [] + if self.is_standalone: + sys.exit(0) if __name__ == "__main__": base_codename = sys.argv[1] ppa_owner = sys.argv[2] ppa_name = sys.argv[3] - ppa_browser = PPA_Browser(base_codename, ppa_owner, ppa_name) + PPA_Browser(base_codename, ppa_owner, ppa_name, True) Gtk.main()