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)
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()
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())