Пример #1
0
def enable_plugin():
    global menuitem1, menuitem2, enabled, initialized
    if initialized == False:
        debug.dprint(plugin_name + " enable_plugin: not initialized!")
        return False
    elif not is_installed:
        debug.dprint(plugin_name +
                     " enable_plugin: target command not installed.")
        return False
    debug.dprint(plugin_name + " enable_plugin: generating new menuitem")
    if is_root():
        menuitem1 = manager.new_menuitem(_("Profuse"))
        debug.dprint(plugin_name +
                     " enabling plugin to run_as_user user='******'")
        menuitem1.connect("activate", run_as_user)
    elif privileges.can_su:
        menuitem1 = manager.new_menuitem(_("Profuse"))
        debug.dprint(plugin_name +
                     " enabling plugin to run_as_root, user='******'")
        menuitem1.connect("activate", run_as_root)
    else:
        menuitem1 = manager.new_menuitem(_("Profuse (user mode)"))
        debug.dprint(plugin_name +
                     " enabling plugin to run_as_user, user='******'")
        menuitem1.connect("activate", run_as_user)
        menuitem2 = manager.new_menuitem(_("Profuse (su mode)"))
        debug.dprint(plugin_name +
                     " enabling plugin to run_as_root, user='******'")
        menuitem2.connect("activate", run_as_root)
    enabled = True
    return True
Пример #2
0
 def notebook_changed(self, widget, pointer, index):
     """Catch when the user changes the notebook"""
     package = self.package
     debug.dprint("PackageNotebook notebook_changed(); self.summary.ebuild " +self.summary.ebuild +
                                 " self.loaded_version['deps'] : " + str(self.loaded_version["deps"]))
     if index == 1:
         if  self.loaded_version["deps"] != self.summary.ebuild or not self.loaded["deps"]:
             debug.dprint("PackageNotebook notebook_changed(); fill the deps view!")
             self.deps_view.fill_depends_tree(self.deps_view, package, self.summary.ebuild)
             self.loaded["deps"] = True
             self.loaded_version["deps"] = self.summary.ebuild
     elif index == 2:
         if not self.loaded["changelog"]:
             # fill in the change log
             #load_textfile(self.changelog, package, "changelog")
             self.changelog.update(self.summary.ebuild, True)
             self.loaded["changelog"] = True
     elif index == 3:
         debug.dprint("PackageNotebook notebook_changed(); load installed files for: " + str(self.summary.ebuild))
         if not self.loaded["installed"] or self.loaded_version["installed"] != self.summary.ebuild:
             # load list of installed files
             load_installed_files(self.installed_window, self.installed_files, package, self.summary.ebuild )
             self.loaded["installed"] = True
             self.loaded_version["installed"] = self.summary.ebuild
     elif index == 4:
         debug.dprint("PackageNotebook notebook_changed(); self.summary.ebuild = " + str(self.summary.ebuild))
         if not self.loaded["ebuild"] or self.loaded_version["ebuild"] != self.summary.ebuild:
             #load_textfile(self.ebuild, package, "best_ebuild")
             #load_textfile(self.ebuild, package, "version_ebuild", self.summary.ebuild)
             self.ebuild.update(self.summary.ebuild, True)
             self.loaded["ebuild"] = True
             self.loaded_version["ebuild"] = self.summary.ebuild
     elif index == 5:
         debug.dprint("PackageNotebook notebook_changed(); self.summary.ebuild = " + str(self.summary.ebuild))
         child = self.use_flag_page.child
         if not child is None:
            debug.dprint("PackageNotebook: removing use_view_widget")
            self.use_flag_page.remove(child)
         frame = gtk.VBox()
         ebuild = self.summary.ebuild
         props = self.summary.package.get_properties(ebuild)
         use_flags = props.get_use_flags()
         self.use_flag_view = UseFlagWidget(use_flags, ebuild)
         self.use_flag_view.show()
         frame.pack_start(self.use_flag_view)
         if utils.is_root() or utils.can_gksu():
             button = gtk.Button("Save USE Flags")
             button.connect('clicked', self.save_use_flags_clicked)
             button.set_size_request(100,50)
             button.show()
         frame.pack_end(button,expand=False,fill=False);
         frame.show()
         self.use_flag_page.add_with_viewport(frame)
         self.use_flag_page.show()
     else:
         for i in self.plugin_package_tabs:
             #Search through the plugins dictionary and select the correct one.
             if self.plugin_package_tabs[i][2] == index:
                 self.plugin_package_tabs[i][0]( package )
Пример #3
0
def disable_plugin():
    global manager, enabled
    if initialized == False:
        return
    if is_root():
        manager.del_menuitem(menuitem1)
    else:
        manager.del_menuitem(menuitem1)
        manager.del_menuitem(menuitem2)
    enabled = False
Пример #4
0
 def emerge_package(self, package, sudo=False):
     """Emerge the package."""
     if (sudo or (not utils.is_root() and utils.can_sudo())) \
             and not config.Prefs.emerge.pretend:
         self.setup_command(
             package.get_name(), 'sudo -p "Password: "******"emerge" +
             config.Prefs.emerge.get_string() + package.full_name)
Пример #5
0
 def sync_tree(self, *widget):
     """Sync the portage tree and reload it when done."""
     sync = config.Prefs.globals.Sync
     if config.Prefs.emerge.verbose:
         sync += " --verbose"
     if config.Prefs.emerge.nospinner:
         sync += " --nospinner "
     if utils.is_root():
         self.setup_command("Sync Portage Tree", sync)
     elif utils.can_sudo():
         self.setup_command("Sync Portage Tree",
                            'sudo -p "Password: " ' + sync)
     else:
         self.check_for_root()
Пример #6
0
def enable_plugin():
    global menuitem1, menuitem2, enabled, initialized
    if initialized == False:
        debug.dprint(plugin_name + " enable_plugin: not initialized!")
        return False
    elif not is_installed:
        debug.dprint(plugin_name + " enable_plugin: target command not installed.")
        return False
    debug.dprint(plugin_name + " enable_plugin: generating new menuitem")
    menuitem1 = manager.new_menuitem(_("Etc-Proposals"))
    if is_root():
        debug.dprint(plugin_name + " enabling plugin to run_as_user")
        menuitem1.connect("activate", run_as_user)
    else:
        debug.dprint(plugin_name + " enabling plugin to run_as_root")
        menuitem1.connect("activate", run_as_root)
    enabled = True
    return True
Пример #7
0
 def upgrades_loaded_dialog_response(self, widget, response):
     """ Get and parse user's response """
     if response == 0:  # Yes was selected; upgrade all
         #self.load_upgrades_list()
         #self.loaded_callback["Upgradable"] = self.upgrade_packages
         if not utils.is_root() and utils.can_sudo() \
                 and not config.Prefs.emerge.pretend:
             self.setup_command(
                 'world', 'sudo -p "Password: "******"emerge --update" +
                 config.Prefs.emerge.get_string() + 'world')
     else:
         # load the upgrades view to select which packages
         self.widget["view_filter"].set_active(SHOW_UPGRADE)
     # get rid of the dialog
     self.upgrades_loaded_dialog.destroy()
Пример #8
0
def enable_plugin():
    global menuitem1, menuitem2, enabled, initialized
    if initialized == False:
        debug.dprint(plugin_name + " enable_plugin: not initialized!")
        return False
    elif not is_installed:
        debug.dprint(plugin_name + " enable_plugin: target command not installed.")
        return False
    debug.dprint(plugin_name + " enable_plugin: generating new menuitem")
    menuitem1 = manager.new_menuitem(_("Gpytage"))
    #config_path = os.path.join(portage_lib.settings.config_root, portage_lib.settings.user_config_dir)
    #if os.access(config_path, os.W_OK):
    if is_root():
        debug.dprint(plugin_name + " enabling plugin to run_as_user")
        menuitem1.connect("activate", run_as_user)
    else:
        debug.dprint(plugin_name + " enabling plugin to run_as_root")
        menuitem1.connect("activate", run_as_root)
    enabled = True
    return True
Пример #9
0
    try:
        import portage
        import portage_const
        import portage_manifest as manifest
        PORTAGE22 = False
    except ImportError:
        exit(_('Could not find portage module.\n'
             'Are you sure this is a Gentoo system?'))
print >>stderr, ("PORTAGELIB: portage version = " + portage.VERSION)

#thread_id = os.getpid()
thread_id = thread.get_ident()



if is_root(): # then import some modules and run it directly
    import set_config

def get_user_config(file, name=None, ebuild=None):
    """ depricated function. this is now part of the db.user_configs module
    Function for parsing package.use, package.mask, package.unmask
    and package.keywords.
    
    Returns /etc/portage/<file> as a dictionary of ebuilds, with
    dict[ebuild] = list of flags.
    If name is given, it will be parsed for ebuilds with xmatch('match-all'),
    and only those ebuilds will be returned in dict.
    
    If <ebuild> is given, it will be matched against each line in <file>.
    For package.use/keywords, a list of applicable flags is returned.
    For package.mask/unmask, a list containing the matching lines is returned.
Пример #10
0
    def _clicked(self, treeview, *args):
        """ Handles treeview clicks """
        debug.dprint("VIEWS: Package view _clicked() signal caught")
        # get the selection
        package = utils.get_treeview_selection(treeview, MODEL_ITEM["package"])
        #debug.dprint("VIEWS: package = %s" % package.full_name)
        if (not package and not self.toggle) or package.full_name == _("None"):
            self.mainwindow_callback("package changed", {
                'package': None,
                'caller': 'VIEWS: Package view _clicked()'
            })
            return False
        if self.toggle != None:  # for upgrade view
            iter = self.get_model().get_iter(self.toggle)
            check = self.view_model[MODEL_NAMES[self.current_view]].get_value(
                iter, MODEL_ITEM["checkbox"])
            check = not check
            self.view_model[MODEL_NAMES[self.current_view]].set_value(
                iter, MODEL_ITEM["checkbox"], check)
            package.is_checked = check
            #~ if self.view_model[MODEL_NAMES[self.current_view]].get_value(iter, MODEL_ITEM["package"]) == None:
            #~ #debug.dprint("VIEWS: _clicked(): Toggling all upgradable deps")
            #~ # package == None for "Upgradable Dependencies" row
            #~ # so select or deselect all deps
            #~ iter = self.view_model[MODEL_NAMES[self.current_view]].iter_children(iter)
            #~ while iter:
            #~ self.view_model[MODEL_NAMES[self.current_view]].set_value(iter, MODEL_ITEM["checkbox"], check)
            #~ iter = self.view_model[MODEL_NAMES[self.current_view]].iter_next(iter)
            self.dopopup = False  # don't popup menu if clicked on checkbox
            self.toggle = None
            return True  # we've got it sorted
        else:
            self.mainwindow_callback("package changed", {
                'package': package,
                'caller': 'VIEWS: Package view _clicked()'
            })
        self._last_selected = package.full_name

        #pop up menu if was rmb-click
        if self.dopopup:
            if utils.is_root():
                if package.get_best_ebuild() != package.get_latest_ebuild(
                ):  # i.e. no ~arch keyword
                    self.popup_menuitems["add-keyword"].show()
                else:
                    self.popup_menuitems["add-keyword"].hide()
                installed = package.get_installed()
                havebest = False
                if installed:
                    self.popup_menuitems["unmerge"].show()
                    if package.get_best_ebuild() in installed:
                        havebest = True
                else:
                    self.popup_menuitems["unmerge"].hide()
                if havebest:
                    self.popup_menuitems["emerge"].hide()
                    self.popup_menuitems["pretend-emerge"].hide()
                else:
                    self.popup_menuitems["emerge"].show()
                    self.popup_menuitems["pretend-emerge"].show()
                self.popup_menuitems["sudo-emerge"].hide()
                self.popup_menuitems["sudo-unmerge"].hide()
            else:
                self.popup_menuitems["emerge"].hide()
                self.popup_menuitems["unmerge"].hide()
                if utils.can_gksu() and \
                        (package.get_best_ebuild() != package.get_latest_ebuild()):
                    self.popup_menuitems["add-keyword"].show()
                else:
                    self.popup_menuitems["add-keyword"].hide()
                installed = package.get_installed()
                havebest = False
                if installed and utils.can_sudo():
                    self.popup_menuitems["sudo-unmerge"].show()
                    if package.get_best_ebuild() in installed:
                        havebest = True
                else:
                    self.popup_menuitems["sudo-unmerge"].hide()
                if havebest:
                    self.popup_menuitems["sudo-emerge"].hide()
                    self.popup_menuitems["pretend-emerge"].hide()
                else:
                    if utils.can_sudo():
                        self.popup_menuitems["sudo-emerge"].show()
                    else:
                        self.popup_menuitems["sudo-emerge"].hide()
                    self.popup_menuitems["pretend-emerge"].show()
            self.popup_menu.popup(None, None, None, None, self.event.button,
                                  self.event.time)
            self.dopopup = False
            self.event = None
            return True
Пример #11
0
    def do_table_popup(self, eventbox, event):
        self.selected_ebuild = eventbox.ebuild
        self.selected_arch = eventbox.arch

        # inteligently show/hide keywords submenu archs
        self.do_keyword_menuitems(eventbox.ebuild)

        # moved these from is_root bit as we can sudo them now
        if utils.is_root() or utils.can_gksu():
            if '~' in eventbox.text:
                self.popup_menuitems["add-keyword"].show()
                self.popup_menuitems["add-ebuild-keyword"].show()
            else:
                self.popup_menuitems["add-keyword"].hide()
                self.popup_menuitems["add-ebuild-keyword"].hide()
            if '(+)' in eventbox.text:
                self.popup_menuitems["remove-keyword"].show()
                # get the config entry and convert it to string for easier searching
                config_entry = str(
                    db.userconfigs.get_atom('KEYWORDS', None, eventbox.ebuild))
                debug.dprint("SUMMARY: do_table_popup(); ebuild = %s, in config_entry = %s : %s" \
                                    %(eventbox.ebuild, config_entry, str(eventbox.ebuild in config_entry)))
                if eventbox.ebuild in config_entry:
                    self.popup_menuitems["remove-keyword-ebuild"].show()
                else:
                    self.popup_menuitems["remove-keyword-ebuild"].hide()
            else:
                self.popup_menuitems["remove-keyword"].hide()
                self.popup_menuitems["remove-keyword-ebuild"].hide()
            if 'M' in eventbox.text:
                self.popup_menuitems["package-unmask"].show()
            else:
                self.popup_menuitems["package-unmask"].hide()
            if '[' in eventbox.text:
                self.popup_menuitems["un-package-unmask"].show()
                self.popup_menuitems["package-mask"].hide()
            else:
                self.popup_menuitems["un-package-unmask"].hide()
                self.popup_menuitems["package-mask"].show()
        else:
            self.popup_menuitems["add-keyword"].hide()
            self.popup_menuitems["add-ebuild-keyword"].hide()
            self.popup_menuitems["remove-keyword"].hide()
            self.popup_menuitems["remove-keyword-ebuild"].hide()
            self.popup_menuitems["package-unmask"].hide()
            self.popup_menuitems["un-package-unmask"].hide()
        if utils.is_root():
            #if '~' in eventbox.text:
            #    self.popup_menuitems["add-keyword"].show()
            #else: self.popup_menuitems["add-keyword"].hide()
            #if '(+)' in eventbox.text:
            #    self.popup_menuitems["remove-keyword"].show()
            #else: self.popup_menuitems["remove-keyword"].hide()
            #if 'M' in eventbox.text:
            #    self.popup_menuitems["package-unmask"].show()
            #else: self.popup_menuitems["package-unmask"].hide()
            #if '[' in eventbox.text:
            #    self.popup_menuitems["un-package-unmask"].show()
            #else: self.popup_menuitems["un-package-unmask"].hide()
            if eventbox.ebuild in self.installed:
                self.popup_menuitems["unmerge"].show()
                self.popup_menuitems["emerge"].hide()
                self.popup_menuitems["pretend-emerge"].hide()
            else:
                self.popup_menuitems["unmerge"].hide()
                self.popup_menuitems["emerge"].show()
                self.popup_menuitems["pretend-emerge"].show()
            self.popup_menuitems["sudo-emerge"].hide()
            self.popup_menuitems["sudo-unmerge"].hide()
        else:
            self.popup_menuitems["emerge"].hide()
            self.popup_menuitems["unmerge"].hide()
            #self.popup_menuitems["add-keyword"].hide()
            #self.popup_menuitems["remove-keyword"].hide()
            #self.popup_menuitems["package-unmask"].hide()
            #self.popup_menuitems["un-package-unmask"].hide()
            if eventbox.ebuild in self.installed:
                if utils.can_sudo():
                    self.popup_menuitems["sudo-unmerge"].show()
                else:
                    self.popup_menuitems["sudo-unmerge"].hide()
                self.popup_menuitems["sudo-emerge"].hide()
                self.popup_menuitems["pretend-emerge"].hide()
            else:
                self.popup_menuitems["sudo-unmerge"].hide()
                if utils.can_sudo():
                    self.popup_menuitems["sudo-emerge"].show()
                else:
                    self.popup_menuitems["sudo-emerge"].hide()
                self.popup_menuitems["pretend-emerge"].show()
        self.popup_menu.popup(None, None, None, event.button, event.time)
        # de-select the table cell. Would be nice to leave it selected,
        # but it doesn't get de-selected when the menu is closed.
        eventbox.emit("leave-notify-event",
                      gtk.gdk.Event(gtk.gdk.LEAVE_NOTIFY))
        return True
Пример #12
0
    def __init__(self):
        debug.dprint("MAINWINDOW: process id = %d ****************" %
                     os.getpid())

        # set unfinished items to not be sensitive
        #self.wtree.get_widget("contents2").set_sensitive(False)
        # self.wtree.get_widget("btn_help").set_sensitive(False)

        # Initialize our subclasses
        PluginHandler.__init__(self)

        self.status = StatusHandler(self.wtree.get_widget("statusbar2"),
                                    self.wtree.get_widget("progressbar1"),
                                    self.category_view, self.package_view,
                                    self.current_pkg_path,
                                    self.current_pkg_cursor, self.plugin_views)

        # get an empty tooltip
        ##self.synctooltip = gtk.Tooltips()
        self.sync_tip = _(
            " Synchronise Package Database \n The last sync was done:\n")
        # set the sync label to the saved one set in the options
        self.widget["btn_sync"].set_label(config.Prefs.globals.Sync_label)
        self.widget["view_refresh"].set_sensitive(False)
        # restore last window width/height
        if config.Prefs.main.xpos and config.Prefs.main.ypos:
            self.mainwindow.move(config.Prefs.main.xpos,
                                 config.Prefs.main.ypos)
        self.mainwindow.resize(config.Prefs.main.width,
                               config.Prefs.main.height)
        # connect gtk callback for window movement and resize events
        self.mainwindow.connect("configure-event", self.size_update)
        # restore maximized state and set window-state-event
        # handler to keep track of it
        if config.Prefs.main.maximized:
            self.mainwindow.maximize()
        self.mainwindow.connect("window-state-event",
                                self.on_window_state_event)
        # move horizontal and vertical panes
        #debug.dprint("MAINWINDOW: __init__() before hpane; " +
        #"%d, vpane; %d"
        #%(config.Prefs.main.hpane, config.Prefs.main.vpane))
        self.hpane = self.wtree.get_widget("hpane")
        self.hpane.set_position(config.Prefs.main.hpane)
        self.hpane.connect("notify", self.on_pane_notify)
        self.vpane = self.wtree.get_widget("vpane")
        self.vpane.set_position(config.Prefs.main.vpane)
        self.vpane.connect("notify", self.on_pane_notify)
        # Intercept the window delete event signal
        self.mainwindow.connect('delete-event', self.confirm_delete)
        # initialize some variable to fix the hpane jump bug
        #self.hpane_bug_count = 0
        #self.hpane_bug = True
        # initialize now so that the update_db_callback doesn't puke
        self.status.set_statusbar2("Starting")
        # set if we are root or not
        self.is_root = utils.is_root()
        debug.dprint("MAINWINDOW: __init__(); is_root = " + str(self.is_root))
        if config.Prefs.main.show_nag_dialog:
            # let the user know if he can emerge or not
            self.check_for_root()
        self.toolbar_expander = self.wtree.get_widget("toolbar_expander")
        # This should be set in the glade file, but doesn't seem to work ?
        self.toolbar_expander.set_expand(True)
        # populate the view_filter menu
        self.widget["view_filter_list"] = gtk.ListStore(str)
        for i in [
                _("All Packages"),
                _("Installed Packages"),
                _("Search Results"),
                _("Upgradable Packages"),
                _("Deprecated Packages"),
                _("Sets")
        ]:
            self.widget["view_filter_list"].append([i])
        self.widget["view_filter"].set_model(self.widget["view_filter_list"])
        self.widget["view_filter"].set_active(SHOW_ALL)
        self.setup_plugins()

        callbacks = {
            "action_callback": self.action_callback,
            "re_init_portage": self.re_init_portage,
            "set_package_actions_sensitive": self.set_package_actions_sensitive
        }
        self.assign_packagebook(self.wtree, callbacks,
                                self.plugin_package_tabs)
        # initialize our data
        self.init_data()
        self.search_dispatcher = Dispatcher(self.search_done)
        debug.dprint("MAINWINDOW: Showing main window")
        self.mainwindow.show_all()
        if self.is_root:
            # hide warning toolbar widget
            debug.dprint("MAINWINDOW: __init__(); hiding btn_root_warning")
            self.wtree.get_widget("btn_root_warning").hide()
Пример #13
0
    def _clicked(self, treeview, *args):
        """ Handle treeview clicks """
        name, package = self.get_selected()
        # has the selection really changed?
        if name != self._last_selected:
            debug.dprint("DependsView: dependency change detected")
            # then call the callback if it exists!
            if self._depend_changed:
                self._last_selected = name
                self._depend_changed(package)
        # save current selection as last selected
        self._last_selected = name

        #pop up menu if was rmb-click and have a valid package
        if self.dopopup and package:
            if utils.is_root():
                if package.get_best_ebuild() != package.get_latest_ebuild(
                ):  # i.e. no ~arch keyword
                    self.popup_menuitems["add-keyword"].show()
                else:
                    self.popup_menuitems["add-keyword"].hide()
                installed = package.get_installed()
                havebest = False
                if installed:
                    #self.popup_menuitems["unmerge"].show()
                    if package.get_best_ebuild() in installed:
                        havebest = True
                else:
                    pass
                    #self.popup_menuitems["unmerge"].hide()
                if havebest:
                    self.popup_menuitems["emerge --oneshot"].hide()
                    self.popup_menuitems["pretend-emerge"].hide()
                else:
                    self.popup_menuitems["emerge --oneshot"].show()
                    self.popup_menuitems["pretend-emerge"].show()
                self.popup_menuitems["sudo-emerge --oneshot"].hide()
                #self.popup_menuitems["sudo-unmerge"].hide()
            else:
                self.popup_menuitems["emerge --oneshot"].hide()
                #self.popup_menuitems["unmerge"].hide()
                if utils.can_gksu() and \
                        (package.get_best_ebuild() != package.get_latest_ebuild()):
                    self.popup_menuitems["add-keyword"].show()
                else:
                    self.popup_menuitems["add-keyword"].hide()
                installed = package.get_installed()
                havebest = False
                if installed and utils.can_sudo():
                    #self.popup_menuitems["sudo-unmerge"].show()
                    if package.get_best_ebuild() in installed:
                        havebest = True
                else:
                    pass
                    #self.popup_menuitems["sudo-unmerge"].hide()
                if havebest:
                    self.popup_menuitems["sudo-emerge --oneshot"].hide()
                    self.popup_menuitems["pretend-emerge"].hide()
                else:
                    if utils.can_sudo():
                        self.popup_menuitems["sudo-emerge --oneshot"].show()
                    else:
                        self.popup_menuitems["sudo-emerge --oneshot"].hide()
                    self.popup_menuitems["pretend-emerge"].show()
            self.popup_menu.popup(None, None, None, self.event.button,
                                  self.event.time)
            self.dopopup = False
            self.event = None
            return True
Пример #14
0
    def __init__(self, package, setup_command, re_init_portage):
        """ Initialize Advanced Emerge Dialog window """
        # Preserve passed parameters
        self.package = package
        self.setup_command = setup_command
        self.re_init_portage = re_init_portage
        self.arch = backends.portage_lib.get_arch()
        self.system_use_flags = backends.portage_lib.settings.SystemUseFlags
        self.emerge_unmerge = "emerge"
        self.is_root = utils.is_root()
        self.package_use_flags = db.userconfigs.get_user_config(
            'USE', package.full_name)
        self.current_verInfo = None

        # Parse glade file
        self.gladefile = config.Prefs.DATA_PATH + "glade/advemerge.glade"
        self.wtree = Gtk.Builder()
        self.wtree.add_from_file(self.gladefile)
        self.wtree.set_translation_domain(config.Prefs.APP)

        # register callbacks
        callbacks = {
            "on_ok_clicked":
            self.ok_clicked,
            "on_help_clicked":
            self.help_clicked,
            "on_cancel_clicked":
            self.cancel_clicked,
            #"on_cbAsk_clicked": self.Ask_clicked,
            "on_cbOnlyDeps_clicked":
            (self.set_one_of, 'cbOnlyDeps', 'cbNoDeps'),
            "on_cbNoDeps_clicked": (self.set_one_of, 'cbNoDeps', 'cbOnlyDeps'),
            "on_cbQuiet_clicked": (self.set_one_of, 'cbQuiet', 'cbVerbose'),
            "on_cbVerbose_clicked": (self.set_one_of, 'cbVerbose', 'cbQuiet'),
            "on_cbBuildPkg_clicked":
            (self.set_one_of, 'cbBuildPkg', 'cbBuildPkgOnly'),
            "on_cbBuildPkgOnly_clicked":
            (self.set_one_of, 'cbBuildPkgOnly', 'cbBuildPkg'),
            "on_cbUsePkg_clicked":
            (self.set_one_of, 'cbUsePkg', 'cbUsePkgOnly'),
            "on_cbUsePkgOnly_clicked": (self.set_one_of, 'cbUsePkgOnly',
                                        'cbUsePkg'),
            "on_cmbVersion_changed":
            self.version_changed,
            "on_cmbEmerge_changed":
            self.emerge_changed,
            "on_btnPkgUse_clicked":
            self.on_package_use_commit,
            "on_btnMakeConf_clicked":
            self.on_make_conf_commit,
            "on_btnPkgKeywords_clicked":
            self.on_package_keywords_commit,
            "on_cbColorY_clicked": (self.set_one_of, 'cbColorY', 'cbColorN'),
            "on_cbColorN_clicked": (self.set_one_of, 'cbColorN', 'cbColorY'),
            "on_cbColumns_clicked": (self.set_all, 'cbColumns', 'cbPretend'),
            'on_cbWithBDepsY_clicked': (self.set_one_of, 'cbWithBDepsY',
                                        'cbWithBDepsN'),
            'on_cbWithBDepsN_clicked': (self.set_one_of, 'cbWithBDepsN',
                                        'cbWithBDepsY'),
            'on_cbGetBinPkg_clicked': (self.set_one_of, 'cbGetBinPkg',
                                       'cbGetBinPkgOnly'),
            'on_cbGetBinPkgOnly_clicked': (self.set_one_of, 'cbGetBinPkgOnly',
                                           'cbGetBinPkg'),
            "on_toggled":
            self.on_toggled
        }

        self.wtree.connect_signals(callbacks)
        self.window = self.wtree.get_object("adv_emerge_dialog")
        self.use_flags_frame = self.wtree.get_object("frameUseFlags")
        self.keywords_frame = self.wtree.get_object("frameKeywords")
        self.window.set_title(
            _("Advanced Emerge Settings for %s") % package.full_name)

        self.command_textview = self.wtree.get_object("command_textview")
        self.command_buffer = self.command_textview.get_buffer()
        style = self.keywords_frame.get_style().copy()
        # Fixme needs porting ???
        # <<<<<<< ours
        # #self.bgcolor = style.bg[Gtk.StateType.NORMAL]
        # self.bgcolor = style.bg[Gladeui.PropertyState.NORMAL]
        # #self.command_textview.modify_base(Gtk.StateType.NORMAL, self.bgcolor)
        # self.command_textview.modify_base(Gladeui.PropertyState.NORMAL, self.bgcolor)

        # =======
        # self.bgcolor = style.bg[Gladeui.PropertyState.NORMAL]
        # self.command_textview.modify_base(Gladeui.PropertyState.NORMAL, self.bgcolor)

        # >>>>>>> theirs
        self.btnMakeConf = self.wtree.get_object("btnMakeConf")
        self.btnPkgUse = self.wtree.get_object("btnPkgUse")
        self.btnPkgKeywords = self.wtree.get_object("btnPkgKeywords")
        if not self.is_root and not utils.can_gksu():
            debug.dprint("ADVEMERGE: self.is_root = %s, utils.can_gksu = %s" %
                         (self.is_root, utils.can_gksu))
            self.btnMakeConf.hide()
            self.btnPkgUse.hide()
            self.btnPkgKeywords.hide()

        # Connect option toggles to on_toggled
        for checkbutton in self.wtree.get_object("table2").get_children():
            if isinstance(checkbutton, Gtk.CheckButton):
                checkbutton.connect("toggled", self.on_toggled)
            #else:
            #    debug.dprint("ADVEMERGE: table2 has child not of type Gtk.CheckButton")
            #    debug.dprint(checkbutton)

        if not config.Prefs.advemerge.showuseflags:
            self.use_flags_frame.hide()
        if not config.Prefs.advemerge.showkeywords:
            self.keywords_frame.hide()

        # Make tool tips available
        #self.tooltips = Gtk.Tooltips()

        # Build version combo list
        self.get_versions()

        # Build a formatted combo list from the versioninfo list
        self.comboList = Gtk.ListStore(str)
        index = 0
        for x in range(len(self.verList)):
            ver = self.verList[x]
            info = ver["number"]
            slot = ver["slot"]
            if slot != '0':
                info += ''.join(['   [', _('Slot:%s') % slot, ']'])
            if not ver["available"]:
                info += _('   {unavailable}')
            elif not ver["stable"]:
                info += _('   (unstable)')
            if ver["hard_masked"]:
                info += _('   [MASKED]')
            if ver["best"]:
                if ver["best_downgrades"]:
                    info += _('   (recommended) (downgrade)')
                else:
                    info += _('   (recommended)')
                index = x
            if ver["installed"]:
                info += _('   [installed]')

            self.comboList.append([info])

        # Build version combobox
        self.combobox = self.wtree.get_object("cmbVersion")
        self.combobox.set_model(self.comboList)
        cell = Gtk.CellRendererText()
        self.combobox.pack_start(cell, True)
        self.combobox.add_attribute(cell, 'text', 0)
        self.combobox.set_active(
            index)  # select "recommended" ebuild by default

        # emerge / unmerge combobox:
        self.emerge_combolist = Gtk.ListStore(str)
        iter = self.emerge_combolist.append(["emerge"])
        self.emerge_combolist.append(["unmerge"])
        self.emerge_combobox = self.wtree.get_object("cmbEmerge")
        self.emerge_combobox.set_model(self.emerge_combolist)
        cell = Gtk.CellRendererText()
        self.emerge_combobox.pack_start(cell, True)
        self.emerge_combobox.add_attribute(cell, 'text', 0)
        self.emerge_combobox.set_active_iter(iter)

        # Set any emerge options the user wants defaulted
        if config.Prefs.emerge.pretend:
            self.wtree.get_object("cbPretend").set_active(True)
        if config.Prefs.emerge.verbose:
            self.wtree.get_object("cbVerbose").set_active(True)
        ## this now just references --update, which is probably not the desired behaviour.
        ## perhaps the current version should be indicated somewhere in the dialog
        #if config.Prefs.emerge.upgradeonly:
        #    self.wtree.get_object("cbUpgradeOnly").set_active(True)
        if config.Prefs.emerge.fetch:
            self.wtree.get_object("cbFetchOnly").set_active(True)
        if config.Prefs.emerge.nospinner:
            self.wtree.get_object("cbNoSpinner").set_active(True)

        # show command in command_label
        self.display_emerge_command()