def do_authenticate(self):
        if TweakSettings.get_power_user():
            self.__class__.result = 1
            self.emit("changed", 1)
            return
        policykit = self.session_bus.get_object("org.freedesktop.PolicyKit.AuthenticationAgent", "/")
        xid = self.widget.get_toplevel().window.xid

        if self.__class__.result:
            self.emit("changed", 1)
            return

        try:
            granted = policykit.ObtainAuthorization(
                "com.ubuntu-tweak.daemon", dbus.UInt32(xid), dbus.UInt32(os.getpid())
            )
        except dbus.exceptions.DBusException:
            self.emit("changed", 0)
        else:
            self.__class__.result = granted

            if self.__class__.result == 1:
                self.emit("changed", 1)
            else:
                self.emit("changed", 0)
    def setup_window_preference(self):
        table = self.worker.get_object('table1')

        height, width = TweakSettings.get_window_size()

        win_width = WidgetFactory.create('GconfSpinButton',
                                        key = 'window_width', 
                                        min = 640, max = 1280, step = 1)
        win_width.show()
        win_width.connect('value-changed', self.on_value_changed)
        table.attach(win_width, 1, 3, 0, 1)

        win_height = WidgetFactory.create('GconfSpinButton',
                                          key = 'window_height', 
                                          min = 480, max = 1280, step = 1)
        win_height.show()
        win_height.connect('value-changed', self.on_value_changed)
        table.attach(win_height, 1, 3, 1, 2)

        toolbar_size = WidgetFactory.create('GconfSpinButton',
                                            key = 'toolbar_size', 
                                            min = 100, max = 500, step = 1)
        toolbar_size.show()
        toolbar_size.connect('value-changed', self.on_value_changed)
        table.attach(toolbar_size, 1, 3, 2, 3)
    def setup_color_preference(self):
        colorbutton = self.worker.get_object('colorbutton')
        colorbutton.set_color(TweakSettings.get_toolbar_color(True))
        colorbutton.connect('color-set', self.on_color_set)

        reset_button = self.worker.get_object('reset_button')
        set_label_for_stock_button(reset_button, _('Reset'))
        reset_button.connect('clicked', self.on_reset_clicked, colorbutton)

        font_colorbutton = self.worker.get_object('font_colorbutton')
        font_colorbutton.set_color(TweakSettings.get_toolbar_font_color(True))
        font_colorbutton.connect('color-set', self.on_font_color_set)

        font_reset_button = self.worker.get_object('font_reset_button')
        set_label_for_stock_button(font_reset_button, _('Reset'))
        font_reset_button.connect('clicked', self.on_font_reset_clicked, font_colorbutton)
Beispiel #4
0
    def draw_text(self, text):
        if self.type == SHOW_CHILD:
            self.ctr.set_source_rgb (*TweakSettings.get_toolbar_font_color())

        self.ctr.move_to(self.title_x, self.title_y)

        layout = self.ctr.create_layout()
        layout.set_text(text)
        layout.set_font_description(pango.FontDescription(self.font_name))

        self.ctr.show_layout(layout)
    def setup_launch_function(self):
        from mainwindow import MODULES
        from mainwindow import MODULE_ID, MODULE_LOGO, MODULE_TITLE
        function_box = self.worker.get_object('function_box')

        module_list = []
        for module in MODULES:
            if module[-1] == 2:
                module_list.append(module)

        model = gtk.ListStore(
                gobject.TYPE_INT,
                gtk.gdk.Pixbuf,
                gobject.TYPE_STRING)

        iter = model.append(None)
        model.set(iter,
                MODULE_ID, 0,
                MODULE_LOGO, None,
                MODULE_TITLE, _('None')
        )
        for module in module_list:
            icon = gtk.gdk.pixbuf_new_from_file(os.path.join(DATA_DIR, 'pixmaps', module[MODULE_LOGO])).scale_simple(18, 18, gtk.gdk.INTERP_NEAREST)

            iter = model.append(None)

            model.set(iter,
                    MODULE_ID, module[MODULE_ID],
                    MODULE_LOGO, icon,
                    MODULE_TITLE, module[MODULE_TITLE],
            )

        function_box.set_model(model)
        textcell = gtk.CellRendererText()
        pixbufcell = gtk.CellRendererPixbuf()
        function_box.pack_start(pixbufcell, False)
        function_box.pack_start(textcell, True)
        function_box.add_attribute(textcell, 'text', MODULE_TITLE)
        function_box.add_attribute(pixbufcell, 'pixbuf', MODULE_LOGO)
        id = TweakSettings.get_default_launch()
        for i, row in enumerate(model):
            _id = model.get_value(row.iter, MODULE_ID)
            if id == _id:
                function_box.set_active(i)
        function_box.connect('changed', self.on_launch_changed)
    def check_version(self):
        gtk.gdk.threads_enter()

        version = TweakSettings.get_version()
        if version > VERSION:
            dialog = QuestionDialog(_('A newer version: %s is available online.\nWould you like to update?' % version), 
                    title = _('Software Update'))

            update = False

            if dialog.run() == gtk.RESPONSE_YES:
                update = True
            dialog.destroy()

            if update: 
                UpdateManager(self.get_toplevel())

        gtk.gdk.threads_leave()
    def __init__(self):
        TweakPage.__init__(self)

        self.__setting = TweakSettings()

        notify_hbox = self.create_notify_hbox()
        changeicon_hbox = self.create_change_icon_hbox()

        box = ListPack(_("Panel and Menu"), (
                    WidgetFactory.create("GconfCheckButton", 
                                    label = _("Display warning when removing a panel"), 
                                    key = "confirm_panel_remove"),
                    WidgetFactory.create("GconfCheckButton", 
                                    label = _("Complete lockdown of all panels"), 
                                    key = "locked_down"),
                    WidgetFactory.create("GconfCheckButton", 
                                    label = _("Enable panel animations"), 
                                    key = "enable_animations"),
                    WidgetFactory.create("GconfCheckButton", 
                                    label = _("Show Input Method menu on the context menu"), 
                                    key = "show_input_method_menu"),
                    WidgetFactory.create("GconfCheckButton",
                                    label = _("Show Unicode Method menu on the context menu"), 
                                    key = "show_unicode_menu"),
                    changeicon_hbox,
                    notify_hbox,
            ))
        self.pack_start(box, False, False, 0)

        box = ListPack(_("Screensaver"), (
                    WidgetFactory.create("GconfCheckButton", 
                                         label = _("Enable user switching when screen is locked."), 
                                         key = "user_switch_enabled"),
            ))
        self.pack_start(box, False, False, 0)

        self.recently_used = gtk.CheckButton(_('Enable system-wide "Recently Documents" list'))
        self.recently_used.connect('toggled', self.colleague_changed)
        self.recently_used.set_active(self.get_state())
        box = ListPack(_("History"), (
                    self.recently_used,
            ))
        self.pack_start(box, False, False, 0)
    def __init__(self, parent = None):
        gtk.Window.__init__(self)

        self.__settings = TweakSettings()

        self.set_modal(True)
        self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
        self.set_size_request(360, 40)
        self.set_title(_('Update Manager'))
        self.connect('destroy', lambda *w: self.destroy())
        if parent:
            self.set_transient_for(parent)

        self.progress_bar = gtk.ProgressBar()
        self.add(self.progress_bar)
        self.downloader = Downloader()
        self.downloader.connect('downloading', self.on_downloading)

        self.show_all()
        self.start_download(self.__settings.get_url())
class UpdateManager(gtk.Window):
    time_count = 1

    def __init__(self, parent = None):
        gtk.Window.__init__(self)

        self.__settings = TweakSettings()

        self.set_modal(True)
        self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
        self.set_size_request(360, 40)
        self.set_title(_('Update Manager'))
        self.connect('destroy', lambda *w: self.destroy())
        if parent:
            self.set_transient_for(parent)

        self.progress_bar = gtk.ProgressBar()
        self.add(self.progress_bar)
        self.downloader = Downloader()
        self.downloader.connect('downloading', self.on_downloading)

        self.show_all()
        self.start_download(self.__settings.get_url())

    def on_downloading(self, widget):
        percentage = self.downloader.percentage

        if percentage < 1:
            self.progress_bar.set_text(_('Downloading...%d') % int(percentage * 100)+ '%')
            self.progress_bar.set_fraction(percentage)

            return True
        else:
            gobject.timeout_add(1000, self.on_start_install)

    def on_start_install(self):
        thread.start_new_thread(self.start_install, ())

    def start_install(self):
        gtk.gdk.threads_enter()

        os.system('gdebi-gtk %s &' % self.downloader.save_to)
        gtk.main_quit()

        gtk.gdk.threads_leave()

    def start_download(self, url):
        thread.start_new_thread(self.download_thread, (url,))

    def download_thread(self, url):
        self.downloader.start(url)

    def check_percentage(self):
        percentage = self.downloader.percentage

        if percentage < 1:
            self.progress_bar.set_text(_("Downloading...%d") % int(percentage * 100)+ '%')
            self.progress_bar.set_fraction(percentage)

            return True
        else:
            self.progress_bar.set_text(_("Finished"))
            self.progress_bar.set_fraction(1)
            gobject.timeout_add(1000, self.on_start_install)

    def main(self):
        gtk.gdk.threads_enter()
        gtk.main()
        gtk.gdk.threads_leave()
class Gnome(TweakPage):
    """GNOME Settings"""

    def __init__(self):
        TweakPage.__init__(self)

        self.__setting = TweakSettings()

        notify_hbox = self.create_notify_hbox()
        changeicon_hbox = self.create_change_icon_hbox()

        box = ListPack(_("Panel and Menu"), (
                    WidgetFactory.create("GconfCheckButton", 
                                    label = _("Display warning when removing a panel"), 
                                    key = "confirm_panel_remove"),
                    WidgetFactory.create("GconfCheckButton", 
                                    label = _("Complete lockdown of all panels"), 
                                    key = "locked_down"),
                    WidgetFactory.create("GconfCheckButton", 
                                    label = _("Enable panel animations"), 
                                    key = "enable_animations"),
                    WidgetFactory.create("GconfCheckButton", 
                                    label = _("Show Input Method menu on the context menu"), 
                                    key = "show_input_method_menu"),
                    WidgetFactory.create("GconfCheckButton",
                                    label = _("Show Unicode Method menu on the context menu"), 
                                    key = "show_unicode_menu"),
                    changeicon_hbox,
                    notify_hbox,
            ))
        self.pack_start(box, False, False, 0)

        box = ListPack(_("Screensaver"), (
                    WidgetFactory.create("GconfCheckButton", 
                                         label = _("Enable user switching when screen is locked."), 
                                         key = "user_switch_enabled"),
            ))
        self.pack_start(box, False, False, 0)

        self.recently_used = gtk.CheckButton(_('Enable system-wide "Recently Documents" list'))
        self.recently_used.connect('toggled', self.colleague_changed)
        self.recently_used.set_active(self.get_state())
        box = ListPack(_("History"), (
                    self.recently_used,
            ))
        self.pack_start(box, False, False, 0)

    def create_notify_hbox(self):
        hbox = gtk.HBox(False, 10)
        label = gtk.Label(_("Notification-daemon popup location"))
        label.set_alignment(0, 0.5)
        combobox = WidgetFactory.create("GconfComboBox", 
                                  key = "popup_location", 
                                  texts = [_("Top Left"), _("Top Right"), _("Bottom Left"), _("Bottom Right")], 
                                  values= ["top_left", "top_right", "bottom_left", "bottom_right"])
        if combobox:
            hbox.pack_start(label, False, False, 0)
            hbox.pack_start(combobox)

            return hbox
        else:
            return None

    def create_change_icon_hbox(self):
        hbox = gtk.HBox(False, 10)
        label = gtk.Label(_('Click the button to change the menu logo'))
        label.set_alignment(0, 0.5)
        hbox.pack_start(label, False, False, 0)

        button = gtk.Button()
        button.connect('clicked', self.on_change_icon_clicked)
        image = gtk.image_new_from_pixbuf(get_icon_with_name('start-here', 24))
        button.set_image(image)
        hbox.pack_end(button, False, False, 0)

        return hbox

    def on_change_icon_clicked(self, widget):
        dialog = gtk.FileChooserDialog(_('Choose a new logo'),action = gtk.FILE_CHOOSER_ACTION_OPEN, buttons = (gtk.STOCK_REVERT_TO_SAVED, gtk.RESPONSE_DELETE_EVENT, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_ACCEPT))
        filter = gtk.FileFilter()
        filter.set_name(_("PNG image (*.png)"))
        filter.add_mime_type("image/png")
        dialog.set_current_folder(os.path.expanduser('~'))
        dialog.add_filter(filter)

        dest = os.path.expanduser('~/.icons/%s/24x24/places/start-here.png' % self.__setting.get_icon_theme())
        revert_button = dialog.action_area.get_children()[-1]
        if not os.path.exists(dest):
            revert_button.set_sensitive(False)

        filename = ''
        response = dialog.run()
        if response == gtk.RESPONSE_ACCEPT:
            filename = dialog.get_filename()

            if filename:
                pixbuf = gtk.gdk.pixbuf_new_from_file(filename)
                w, h = pixbuf.get_width(), pixbuf.get_height()
                if w != 24 or h != 24:
                    ErrorDialog(_("The size isn't suitable for the panel.\nIt should be 24x24.")).launch()
                else:
                    os.system('mkdir -p %s' % os.path.dirname(dest))
                    os.system('cp %s %s' % (filename, dest))

                    image = gtk.image_new_from_file(dest)
                    widget.set_image(image)
            dialog.destroy()
        elif response == gtk.RESPONSE_DELETE_EVENT:
            os.remove(dest)
            image = gtk.image_new_from_pixbuf(get_icon_with_name('start-here', 24))
            widget.set_image(image)
            dialog.destroy()
        else:
            dialog.destroy()
            return

        dialog = QuestionDialog(_('Do you want your changes to take effect immediately?'))
        if dialog.run() == gtk.RESPONSE_YES:
            os.system('killall gnome-panel')

        dialog.destroy()

    def get_state(self):
        file = os.path.join(os.path.expanduser("~"), ".recently-used.xbel")
        if os.path.exists(file):
            if os.path.isdir(file):
                return False
            elif os.path.isfile(file):
                return True
        else:
            return True

    def colleague_changed(self, widget):
        enabled = self.recently_used.get_active()
        file = os.path.expanduser("~/.recently-used.xbel")
        if enabled:
            os.system('rm -r %s' % file)
            os.system('touch %s' % file)
        else:
            os.system('rm -r %s' % file)
            os.system('mkdir %s' % file)
 def main(self):
     gtk.gdk.threads_enter()
     if TweakSettings.get_check_update():
         os.system("exec python updatemanager.py &")
     gtk.main()
     gtk.gdk.threads_leave()
Beispiel #12
0
 def draw_background(self):
     if self.type == SHOW_CHILD:
         #TODO: the color need to follow the system style
         self.ctr.set_source_rgb (*TweakSettings.get_toolbar_color())
         self.ctr.rectangle(self.x, self.y, self.width, self.height)
         self.ctr.fill()
 def get_gui_state(self):
     self.set_default_size(*TweakSettings.get_window_size())
     self.hpaned.set_position(TweakSettings.get_paned_size())
 def save_gui_state(self):
     if TweakSettings.need_save:
         TweakSettings.set_window_size(*self.get_size())
         TweakSettings.set_paned_size(self.hpaned.get_position())
 def on_never_show(self, widget, action):
     TweakSettings.set_show_donate_notify(False)
    def __init__(self):
        gtk.Window.__init__(self)

        self.connect("destroy", self.destroy)
        self.set_title(APP)
        self.set_default_size(740, 480)
        self.set_position(gtk.WIN_POS_CENTER)
        self.set_border_width(10)
        gtk.window_set_default_icon_from_file(os.path.join(DATA_DIR, 'pixmaps/ubuntu-tweak.png'))

        vbox = gtk.VBox(False, 0)
        self.add(vbox)

        self.hpaned = gtk.HPaned()
        vbox.pack_start(self.hpaned, True, True, 0)

        sw = gtk.ScrolledWindow()
        sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        sw.set_size_request(150, -1)
        self.hpaned.pack1(sw)

        self.model = self.__create_model()
        self.update_model()
        self.treeview = gtk.TreeView(self.model)
        self.__add_columns(self.treeview)
        selection = self.treeview.get_selection()
        selection.connect("changed", self.selection_cb)

        sw.add(self.treeview)

        self.notebook = self.create_notebook()
        self.moduletable = {0: 0}
        self.modules = {}
        self.hpaned.pack2(self.notebook)

        hbox = gtk.HBox(False, 5)
        vbox.pack_start(hbox, False, False, 5)
        button = gtk.Button(stock = gtk.STOCK_ABOUT)
        button.connect("clicked", self.show_about)
        hbox.pack_start(button, False, False, 0)

        d_button = gtk.Button(stock = gtk.STOCK_YES)
        set_label_for_stock_button(d_button, _('_Donate'))
        d_button.connect("clicked", self.on_d_clicked)
        hbox.pack_start(d_button, False, False, 0)

        button = gtk.Button(stock = gtk.STOCK_QUIT)
        button.connect("clicked", self.destroy);
        hbox.pack_end(button, False, False, 0)

        button = gtk.Button(stock = gtk.STOCK_PREFERENCES)
        button.connect('clicked', self.on_preferences_clicked)
        hbox.pack_end(button, False, False, 0)

        self.get_gui_state()
        self.show_all()

#        if TweakSettings.get_show_donate_notify():
#            gobject.timeout_add(3000, self.on_d_timeout, d_button)
        if TweakSettings.get_check_update():
            gobject.timeout_add(8000, self.on_timeout)

        launch = TweakSettings.get_default_launch()
        if launch:
            self.__create_newpage(launch)
 def on_launch_changed(self, widget):
     index = widget.get_active()
     liststore = widget.get_model()
     iter = liststore.get_iter(index)
     id = liststore.get_value(iter, 0)
     TweakSettings.set_default_launch(id)
 def on_reset_clicked(self, widget, colorbutton):
     color = gtk.gdk.Color(32767, 32767, 32767)
     colorbutton.set_color(color)
     TweakSettings.set_toolbar_color(color.to_string())
 def on_font_reset_clicked(self, widget, colorbutton):
     color = gtk.gdk.Color(65535, 65535, 65535)
     colorbutton.set_color(color)
     TweakSettings.set_toolbar_font_color(color.to_string())
 def on_font_color_set(self, widget):
     TweakSettings.set_toolbar_font_color(widget.get_color().to_string())