Rebased ref, commits from common ancestor: commit cb1268cb2a6728d2f0dcc21d417b3b2c13d729e6 Author: Silvia Dobrota <silvia.dobrot...@imperial.ac.uk> Date: Thu Feb 24 12:24:46 2011 +0800
[PATCH] Focus filter entry on return to main page diff --git a/ccm/Window.py b/ccm/Window.py index 9478f34..1b57fcf 100644 --- a/ccm/Window.py +++ b/ccm/Window.py @@ -96,6 +96,7 @@ class MainWin(gtk.Window): def BackToMain(self, widget): self.SetPage(self.MainPage) + self.MainPage.filterEntry.grab_focus() def RefreshPage(self, updatedPlugin): currentPage = self.CurrentPage commit 407bc8674877adf4042691a0408779fe84aad268 Author: Sam Spilsbury <sam.spilsb...@canonical.com> Date: Wed Feb 23 01:18:16 2011 +0800 Explcitly convert list items to str for now diff --git a/ccm/Settings.py b/ccm/Settings.py index 787461f..6dfcdb9 100644 --- a/ccm/Settings.py +++ b/ccm/Settings.py @@ -755,8 +755,13 @@ class BaseListSetting(Setting): def _Read(self): self.Store.clear() + # FIXME: The list types are being defined as all str + # in self.Widgets (which goes to self.Store) - this + # is a problem since values can be of other types, + # however explicitly converting to a string seems to + # work here for values in zip(*[w.GetForRenderer() for w in self.Widgets]): - self.Store.append(values) + self.Store.append([str (x) for x in values]) def OnDestroy(self, widget): for w in self.Widgets: @@ -1452,6 +1457,7 @@ def MakeSetting(setting, List=False): t = setting.Type stype = SettingTypeDict.get(t, None) + if not stype: return commit 821087d360e4525a70dce778502fa22034ddaae4 Author: Joe Rusbasan <j...@rbasn.us> Date: Tue Feb 22 01:42:40 2011 -0500 Fix typo diff --git a/ccm/Pages.py b/ccm/Pages.py index 2349dfe..0bbf30a 100644 --- a/ccm/Pages.py +++ b/ccm/Pages.py @@ -716,7 +716,7 @@ class ProfileBackendPage(object): for i, name in enumerate(self.Context.Backends): backend = self.Context.Backends[name] backendBox.append_text(backend.ShortDesc) - if name == self.CurrentBackend.Name: + if name == self.Context.CurrentBackend.Name: active = i backendBox.set_active(active) backendBox.connect("changed", self.BackendChangedAddTimeout) commit 632c982318d74f9db693ebdcc3154e83f41ce83c Author: Patrick Niklaus <ma...@compiz-fusion.org> Date: Sat Feb 12 19:24:14 2011 +0100 Replaced libsexy code with gtk entry diff --git a/ccm/Pages.py b/ccm/Pages.py index ff7ef54..2349dfe 100644 --- a/ccm/Pages.py +++ b/ccm/Pages.py @@ -76,7 +76,7 @@ class PluginPage(GenericPage): filterLabel = Label() filterLabel.set_markup(HeaderMarkup % (_("Filter"))) filterLabel.connect("style-set", self.HeaderStyleSet) - self.FilterEntry = gtk.Entry() + self.FilterEntry = ClearEntry() self.FilterEntry.connect("changed", self.FilterChanged) self.LeftWidget.pack_start(pluginImg, False, False) @@ -256,15 +256,10 @@ class FilterPage(GenericPage): self.LeftWidget.pack_start(filterLabel, False, False) # Entry FIXME find a solution with std gtk - """ - self.FilterEntry = sexy.IconEntry() - self.FilterEntry.add_clear_button() - keyboardImage = Image("input-keyboard", ImageThemed, 16) - self.FilterEntry.set_icon(sexy.ICON_ENTRY_PRIMARY, keyboardImage) - self.FilterEntry.set_icon_highlight(sexy.ICON_ENTRY_PRIMARY, True) - self.FilterEntry.connect('icon-pressed', self.GrabKey) - """ - self.FilterEntry = gtk.Entry() + self.FilterEntry = ClearEntry() + self.FilterEntry.set_icon_from_icon_name(gtk.ENTRY_ICON_PRIMARY, "input-keyboard") + self.FilterEntry.set_icon_tooltip_text(gtk.ENTRY_ICON_PRIMARY, _("Grab Keys")) + self.FilterEntry.connect('icon-press', self.GrabKey) self.FilterEntry.set_tooltip_text(_("Enter a filter.\nClick the keyboard image to grab a key for which to search.")) self.FilterEntry.connect("changed", self.FilterChanged) @@ -434,16 +429,15 @@ class FilterPage(GenericPage): self.FilterValueCheck.set_active(True) self.FilterEntry.set_text(new) - # FIXME find a way to reuse this function - """ - def GrabKey(self, widget, pos, button): + def GrabKey(self, widget, pos, event): + if pos != gtk.ENTRY_ICON_PRIMARY: + return grabber = KeyGrabber(label = _("Grab key combination")) self.LeftWidget.pack_start(grabber, False, False) grabber.hide() grabber.set_no_show_all(True) grabber.connect('changed', self.GotKey) grabber.begin_key_grab(None) - """ def ShowFilterError(self, text): @@ -1191,7 +1185,7 @@ class MainPage(object): filterLabel.set_markup(HeaderMarkup % (_("Filter"))) filterLabel.connect("style-set", self.HeaderStyleSet) filterLabel.props.xalign = 0.1 - filterEntry = gtk.Entry() + filterEntry = ClearEntry() filterEntry.set_tooltip_text(_("Filter your Plugin list")) filterEntry.connect("changed", self.FilterChanged) self.filterEntry = filterEntry diff --git a/ccm/Widgets.py b/ccm/Widgets.py index 67eff6f..e5696ea 100644 --- a/ccm/Widgets.py +++ b/ccm/Widgets.py @@ -46,6 +46,17 @@ _ = gettext.gettext # Try to use gtk like coding style for consistency # +class ClearEntry(gtk.Entry): + def __init__(self): + gtk.Entry.__init__(self) + self.set_icon_from_stock(gtk.ENTRY_ICON_SECONDARY, gtk.STOCK_CLEAR) + self.set_icon_tooltip_text(gtk.ENTRY_ICON_SECONDARY, _("Clear")) + self.connect('icon-press', self._clear_pressed) + + def _clear_pressed(self, widget, pos, event): + if pos == gtk.ENTRY_ICON_SECONDARY: + self.set_text("") + # Cell Renderer for MultiList class CellRendererColor(gtk.GenericCellRenderer): commit 0e70c436d24442af37087a6e13496ab9dfdf4cb3 Author: Patrick Niklaus <ma...@compiz-fusion.org> Date: Sat Feb 12 18:45:47 2011 +0100 Removed the libsexy import diff --git a/ccm/Constants.py.in b/ccm/Constants.py.in index a2934e6..05120a0 100644 --- a/ccm/Constants.py.in +++ b/ccm/Constants.py.in @@ -24,14 +24,6 @@ import pygtk import gtk import gtk.gdk -# Optional Imports -# -try: - import sexy - has_sexy = True -except ImportError: - has_sexy = False - # Current Screen # CurrentScreenNum = gtk.gdk.display_get_default().get_default_screen().get_number() commit 690bf9be1d70a4751eaf53216b2e785d529b1986 Author: Patrick Niklaus <ma...@compiz-fusion.org> Date: Sat Feb 12 18:37:09 2011 +0100 Python 3 syntax and minor cleanup Removed functions that are deprecated in python 3.x, renamed variables to not overwrite buildin functions, removed libsexy code and some other minor cleanups. diff --git a/ccm/Conflicts.py b/ccm/Conflicts.py index abe3a40..2b08ba8 100644 --- a/ccm/Conflicts.py +++ b/ccm/Conflicts.py @@ -85,7 +85,8 @@ class ActionConflict (Conflict): # actions from the same plugin. If it is global, include all actions. if not settings: - for plugin in self.Setting.Plugin.Context.Plugins.values (): + for n in self.Setting.Plugin.Context.Plugins: + plugin = self.Setting.Plugin.Context.Plugins[n] if plugin.Enabled: pluginActions = GetSettings(plugin, types=self.ActionTypes) diff --git a/ccm/Pages.py b/ccm/Pages.py index 3689d7c..ff7ef54 100644 --- a/ccm/Pages.py +++ b/ccm/Pages.py @@ -76,11 +76,7 @@ class PluginPage(GenericPage): filterLabel = Label() filterLabel.set_markup(HeaderMarkup % (_("Filter"))) filterLabel.connect("style-set", self.HeaderStyleSet) - if has_sexy: - self.FilterEntry = sexy.IconEntry() - self.FilterEntry.add_clear_button() - else: - self.FilterEntry = gtk.Entry() + self.FilterEntry = gtk.Entry() self.FilterEntry.connect("changed", self.FilterChanged) self.LeftWidget.pack_start(pluginImg, False, False) @@ -259,16 +255,16 @@ class FilterPage(GenericPage): self.LeftWidget.pack_start(filterImg, False, False) self.LeftWidget.pack_start(filterLabel, False, False) - # Entry - if has_sexy: - self.FilterEntry = sexy.IconEntry() - self.FilterEntry.add_clear_button() - keyboardImage = Image("input-keyboard", ImageThemed, 16) - self.FilterEntry.set_icon(sexy.ICON_ENTRY_PRIMARY, keyboardImage) - self.FilterEntry.set_icon_highlight(sexy.ICON_ENTRY_PRIMARY, True) - self.FilterEntry.connect('icon-pressed', self.GrabKey) - else: - self.FilterEntry = gtk.Entry() + # Entry FIXME find a solution with std gtk + """ + self.FilterEntry = sexy.IconEntry() + self.FilterEntry.add_clear_button() + keyboardImage = Image("input-keyboard", ImageThemed, 16) + self.FilterEntry.set_icon(sexy.ICON_ENTRY_PRIMARY, keyboardImage) + self.FilterEntry.set_icon_highlight(sexy.ICON_ENTRY_PRIMARY, True) + self.FilterEntry.connect('icon-pressed', self.GrabKey) + """ + self.FilterEntry = gtk.Entry() self.FilterEntry.set_tooltip_text(_("Enter a filter.\nClick the keyboard image to grab a key for which to search.")) self.FilterEntry.connect("changed", self.FilterChanged) @@ -386,17 +382,17 @@ class FilterPage(GenericPage): length = len(context.Plugins) - for index, (plugin, Plugin) in enumerate(context.Plugins.items()): - + for index, n in enumerate(context.Plugins): + plugin = context.Plugins[n] bar.set_fraction((index+1)/float(length)) - label.set_markup("<i>%s</i>" %protect_pango_markup(Plugin.ShortDesc)) + label.set_markup("<i>%s</i>" %protect_pango_markup(plugin.ShortDesc)) gtk_process_events() groups = [] - sortedGroups = sorted(Plugin.Groups.items(), key=GroupIndexKeyFunc) + sortedGroups = sorted(plugin.Groups.items(), key=GroupIndexKeyFunc) for (name, (groupIndex, group)) in sortedGroups: groups.append((name, GroupPage(name or _('General'), group))) - self.GroupPages[plugin] = groups + self.GroupPages[n] = groups self.Level = FilterName | FilterLongDesc @@ -420,7 +416,8 @@ class FilterPage(GenericPage): def Filter(self, text, level=FilterAll): text = text.lower() - for plugin, groups in self.GroupPages.items(): + for plugin in self.GroupPages: + groups = self.GroupPages[plugin] results = dict((n, sg) for (n, sg) in groups if sg.Filter(text, level=level)) if results: yield plugin, results @@ -437,15 +434,16 @@ class FilterPage(GenericPage): self.FilterValueCheck.set_active(True) self.FilterEntry.set_text(new) + # FIXME find a way to reuse this function + """ def GrabKey(self, widget, pos, button): - if not has_sexy or pos != sexy.ICON_ENTRY_PRIMARY: - return grabber = KeyGrabber(label = _("Grab key combination")) self.LeftWidget.pack_start(grabber, False, False) grabber.hide() grabber.set_no_show_all(True) grabber.connect('changed', self.GotKey) grabber.begin_key_grab(None) + """ def ShowFilterError(self, text): @@ -675,16 +673,15 @@ class ProfileBackendPage(object): self.ProfileComboBox = gtk.combo_box_new_text() self.ProfileComboBox.set_sensitive(self.Context.CurrentBackend.ProfileSupport) self.ProfileComboBox.append_text(_("Default")) - for profile in self.Context.Profiles.values(): + active = -1 + for i, name in enumerate(self.Context.Profiles): + profile = self.Context.Profiles[name] self.ProfileComboBox.append_text(profile.Name) + if name == self.Context.CurrentProfile.Name: + active = i self.ProfileHandler = self.ProfileComboBox.connect("changed", self.ProfileChangedAddTimeout) - name = self.Context.CurrentProfile.Name - if name in self.Context.Profiles: - index = self.Context.Profiles.values().index(self.Context.Profiles[name]) - self.ProfileComboBox.set_active(index+1) - else: - self.ProfileComboBox.set_active(0) + self.ProfileComboBox.set_active(active+1) profileAdd.connect("clicked", self.AddProfile) profileRemove.connect("clicked", self.RemoveProfile) profileBox.pack_start(self.ProfileComboBox, True, True) @@ -721,11 +718,13 @@ class ProfileBackendPage(object): # Backends backendBox = gtk.combo_box_new_text() - for backend in self.Context.Backends.values(): + active = 0 + for i, name in enumerate(self.Context.Backends): + backend = self.Context.Backends[name] backendBox.append_text(backend.ShortDesc) - name = self.Context.CurrentBackend.Name - index = self.Context.Backends.values().index(self.Context.Backends[name]) - backendBox.set_active(index) + if name == self.CurrentBackend.Name: + active = i + backendBox.set_active(active) backendBox.connect("changed", self.BackendChangedAddTimeout) backendLabel = Label() backendLabel.set_markup(HeaderMarkup % (_("Backend"))) @@ -812,7 +811,6 @@ class ProfileBackendPage(object): chooser.add_filter(filter) def ResetProfile(self, widget): - for plugin in self.Context.Plugins.values(): settings = GetSettings(plugin) for setting in settings: @@ -924,7 +922,7 @@ class ProfileBackendPage(object): self.Context.CurrentBackend = self.Context.Backends[name] self.UpdateProfiles() else: - raise Exception, _("Backend not found.") + raise Exception(_("Backend not found.")) self.ProfileComboBox.set_sensitive(self.Context.CurrentBackend.ProfileSupport) self.IntegrationButton.set_sensitive(self.Context.CurrentBackend.IntegrationSupport) @@ -1193,11 +1191,7 @@ class MainPage(object): filterLabel.set_markup(HeaderMarkup % (_("Filter"))) filterLabel.connect("style-set", self.HeaderStyleSet) filterLabel.props.xalign = 0.1 - if has_sexy: - filterEntry = sexy.IconEntry() - filterEntry.add_clear_button() - else: - filterEntry = gtk.Entry() + filterEntry = gtk.Entry() filterEntry.set_tooltip_text(_("Filter your Plugin list")) filterEntry.connect("changed", self.FilterChanged) self.filterEntry = filterEntry diff --git a/ccm/Settings.py b/ccm/Settings.py index 619b1f5..787461f 100644 --- a/ccm/Settings.py +++ b/ccm/Settings.py @@ -94,7 +94,7 @@ class Setting(object): 'class': self} value = message % msg_dict - raise PureVirtualError, value + raise PureVirtualError(value) def _Init(self): self.PureVirtual('_Init') @@ -367,11 +367,11 @@ class RestrictedStringSetting(StockSetting): # if current value is not provided by any restricted string extension, # insert an N/A item at the beginning - if not self.ItemsByValue.has_key(self.OriginalValue): + if self.OriginalValue not in self.ItemsByValue: self.NAItemShift = 1 self.Combo.insert_text(0, NAItemText) - if self.ItemsByValue.has_key(value): + if value in self.ItemsByValue: self.Combo.set_active(self.ItemsByValue[self.Get()][1] + \ self.NAItemShift) else: @@ -621,15 +621,15 @@ class BaseListSetting(Setting): self.Settings[0].Plugin.Context.Write() def Delete(self, *args): - model, iter = self.Select.get_selected() - if iter is not None: - path = model.get_path(iter) + model, it = self.Select.get_selected() + if it is not None: + path = model.get_path(it) if path is not None: row = path[0] else: return - model.remove(iter) + model.remove(it) self._Delete(row) @@ -649,9 +649,9 @@ class BaseListSetting(Setting): return dlg def Edit(self, widget): - model, iter = self.Select.get_selected() - if iter: - path = model.get_path(iter) + model, it = self.Select.get_selected() + if it: + path = model.get_path(it) if path is not None: row = path[0] else: @@ -681,9 +681,9 @@ class BaseListSetting(Setting): self.Read() def Move(self, widget, direction): - model, iter = self.Select.get_selected() - if iter is not None: - path = model.get_path(iter) + model, it = self.Select.get_selected() + if it is not None: + path = model.get_path(it) if path is not None: row = path[0] else: @@ -697,7 +697,7 @@ class BaseListSetting(Setting): self.Settings[0].Plugin.Context.Write() - order = range(len(model)) + order = list(range(len(model))) order.insert(dest, order.pop(row)) model.reorder(order) @@ -705,13 +705,13 @@ class BaseListSetting(Setting): def SelectionChanged(self, selection): - model, iter = selection.get_selected() + model, it = selection.get_selected() for widget in (self.Buttons[gtk.STOCK_EDIT], self.Buttons[gtk.STOCK_DELETE], self.PopupItems[gtk.STOCK_EDIT], self.PopupItems[gtk.STOCK_DELETE]): - widget.set_sensitive(iter is not None) + widget.set_sensitive(it is not None) - if iter is not None: - path = model.get_path(iter) + if it is not None: + path = model.get_path(it) if path is not None: row = path[0] self.Buttons[gtk.STOCK_GO_UP].set_sensitive(row > 0) @@ -732,25 +732,25 @@ class BaseListSetting(Setting): def KeyPressEvent(self, treeview, event): if gtk.gdk.keyval_name(event.keyval) == "Delete": - model, iter = treeview.get_selection().get_selected() - if iter is not None: - path = model.get_path(iter) + model, it = treeview.get_selection().get_selected() + if it is not None: + path = model.get_path(it) if path is not None: row = path[0] - model.remove(iter) + model.remove(it) self._Delete(row) return True def ListInfo(self): types = [] cols = [] - for i, (setting, widget) in enumerate(zip(self.Settings, self.Widgets)): - type, col = widget.GetColumn(i) - types.append(type) + for i, widget in enumerate(self.Widgets): + t, col = widget.GetColumn(i) + types.append(t) cols.append(col) return types, cols - def Activated(self, object, path, col): + def Activated(self, obj, path, col): self._Edit(path[0]) def _Read(self): @@ -867,7 +867,7 @@ class RestrictedStringFlagsSetting(Setting): for key, box in self.Checks: box.set_active(False) for setVal in self.Setting.Value: - if self.ItemsByValue.has_key(setVal): + if setVal in self.ItemsByValue: self.Checks[self.ItemsByValue[setVal][1]][1].set_active(True) def _Changed(self): @@ -1136,7 +1136,7 @@ class ButtonSetting (EditableActionSetting): def ReorderButtonString (self, old): new = "" - edges = map (lambda e: "%sEdge" % e, Edges) + edges = ["%sEdge" % e for e in Edges] for s in edges + KeyModifier: if "<%s>" % s in old: new += "<%s>" % s @@ -1332,7 +1332,7 @@ class EdgeSetting (EditableActionSetting): label = self.current if len (self.current): edges = self.current.split ("|") - edges = map (lambda s: _(s), edges) + edges = [_(s) for s in edges] label = ", ".join (edges) else: label = _("None") @@ -1447,11 +1447,11 @@ SettingTypeDict = { def MakeSetting(setting, List=False): if List: - type = setting.Info[0] + t = setting.Info[0] else: - type = setting.Type + t = setting.Type - stype = SettingTypeDict.get(type, None) + stype = SettingTypeDict.get(t, None) if not stype: return diff --git a/ccm/Utils.py b/ccm/Utils.py index cf62548..2a4f04e 100644 --- a/ccm/Utils.py +++ b/ccm/Utils.py @@ -62,7 +62,7 @@ def getDefaultScreen(): return display.get_default_screen().get_number() def protect_markup_dict (dict_): - return dict((k, protect_pango_markup (v)) for (k, v) in dict_.iteritems()) + return dict((k, protect_pango_markup (v)) for (k, v) in dict_.items()) class Image (gtk.Image): @@ -103,7 +103,7 @@ class Image (gtk.Image): elif type == ImageStock: self.set_from_stock (name, size) - except gobject.GError, e: + except gobject.GError as e: self.set_from_stock (gtk.STOCK_MISSING_IMAGE, gtk.ICON_SIZE_BUTTON) class ActionImage (gtk.Alignment): @@ -230,8 +230,8 @@ class IdleSettingsParser: self.Main = main self.PluginList = [p for p in self.Context.Plugins.items() if FilterPlugin(p[1])] nCategories = len (main.MainPage.RightWidget._boxes) - self.CategoryLoadIconsList = range (3, nCategories) # Skip the first 3 - print 'Loading icons...' + self.CategoryLoadIconsList = list(range(3, nCategories)) # Skip the first 3 + print('Loading icons...') gobject.timeout_add (150, self.Wait) @@ -394,9 +394,9 @@ def GetSettings(group, types=None): yield setting if types: - screen = TypeFilter(group.Screen.itervalues(), types) + screen = TypeFilter(iter(group.Screen.values()), types) else: - screen = group.Screen.itervalues() + screen = iter(group.Screen.values()) return screen diff --git a/ccm/Widgets.py b/ccm/Widgets.py index ff61628..67eff6f 100644 --- a/ccm/Widgets.py +++ b/ccm/Widgets.py @@ -421,7 +421,7 @@ class ModifierSelector (gtk.DrawingArea): self.redraw (queue = True) def get_current (self): - return "|".join (filter (lambda s: len (s) > 0, self._current)) + return "|".join ([s for s in self._current if len (s) > 0]) current = property (get_current, set_current) def draw (self, cr, width, height): @@ -761,7 +761,7 @@ class SingleEdgeSelector (EdgeSelector): self.redraw (queue = True) def get_current (self): - return "|".join (filter (lambda s: len (s) > 0, self._current)) + return "|".join ([s for s in self._current if len (s) > 0]) current = property (get_current, set_current) def set_fill_color (self, cr, edge): @@ -835,7 +835,7 @@ class GlobalEdgeSelector(EdgeSelector): def filter_settings(plugin): if plugin.Enabled: settings = sorted (GetSettings(plugin), key=SettingKeyFunc) - settings = filter (lambda s: s.Type == 'Edge', settings) + settings = [s for s in settings if s.Type == 'Edge'] return settings return [] @@ -855,13 +855,13 @@ class GlobalEdgeSelector(EdgeSelector): value = setting.Value.split ("|") if edge in value: value.remove(edge) - value = "|".join (filter (lambda s: len (s) > 0, value)) + value = "|".join ([s for s in value if len (s) > 0]) setting.Value = value else: value = setting.Value.split ("|") if not edge in value: value.append (edge) - value = "|".join (filter (lambda s: len (s) > 0, value)) + value = "|".join ([s for s in value if len (s) > 0]) conflict = EdgeConflict (setting, value, settings = self._settings, autoResolve = True) if conflict.Resolve (GlobalUpdater): @@ -1102,11 +1102,11 @@ class MatchButton(gtk.Button): value_widget.set_text(value) - def generate_match (self, type, value, relation, invert): + def generate_match (self, t, value, relation, invert): match = "" text = self.match - prefix = self.prefix[type] + prefix = self.prefix[t] symbol = self.symbols[relation] # check if the current match needs some brackets @@ -1151,8 +1151,8 @@ class MatchButton(gtk.Button): # Type label = Label (_("Type")) type_chooser = gtk.combo_box_new_text () - for type in self.prefix.keys (): - type_chooser.append_text (type) + for t in self.prefix: + type_chooser.append_text (t) type_chooser.set_active (0) rows.append ((label, type_chooser)) @@ -1171,7 +1171,7 @@ class MatchButton(gtk.Button): # Relation label = Label (_("Relation")) relation_chooser = gtk.combo_box_new_text () - for relation in self.symbols.keys (): + for relation in self.symbols: relation_chooser.append_text (relation) relation_chooser.set_active (0) rows.append ((label, relation_chooser)) @@ -1194,11 +1194,11 @@ class MatchButton(gtk.Button): response = dlg.run () dlg.hide () if response == gtk.RESPONSE_OK: - type = type_chooser.get_active_text () + t = type_chooser.get_active_text () value = entry.get_text () relation = relation_chooser.get_active_text () invert = check.get_active () - self.generate_match (type, value, relation, invert) + self.generate_match (t, value, relation, invert) dlg.destroy () @@ -1590,7 +1590,7 @@ class PluginWindow(gtk.ScrolledWindow): self._categories = {} self._boxes = [] self._context = context - pool = plugins or self._context.Plugins.values() + pool = plugins or list(self._context.Plugins.values()) if len (categories): for plugin in pool: category = plugin.Category @@ -1690,7 +1690,7 @@ class PluginWindow(gtk.ScrolledWindow): last_box = box def get_categories (self): - return self._categories.keys () + return list(self._categories) def show_plugin_page (self, widget): plugin = widget.get_plugin () diff --git a/ccsm b/ccsm index f46be37..a112f2d 100755 --- a/ccsm +++ b/ccsm @@ -41,9 +41,9 @@ def try_register_dbus (): except ImportError: return - # rely on a reasonably new dbus-python - if dbus.version < (0, 80, 0): - return + # rely on a reasonably new dbus-python + if dbus.version < (0, 80, 0): + return class CCSMObject(dbus.service.Object): main_window = None @@ -78,7 +78,7 @@ def try_register_dbus (): display = gtk.gdk.display_get_default() startup_id = gtk.gdk.x11_display_get_startup_notification_id(display) obj.present(startup_id or "") - print 'Another CCSM instance already running' + print('Another CCSM instance already running') sys.exit(0) except dbus.DBusException: # error on present call so pretend it doesn't exist and start up normally @@ -86,13 +86,6 @@ def try_register_dbus (): dbusObj = try_register_dbus() -try: - import sexy - has_sexy = True -except ImportError: - print "Info: No sexy-python package found, don't worry it's optional." - has_sexy = False - if gtk.pygtk_version < (2,12,0): raise SystemExit("PyGtk 2.12.0 or later required") @@ -115,7 +108,7 @@ parser.add_option("-v", "--version", dest = "version", help = "Version") (options, args) = parser.parse_args() if options.version: - print "CCSM %s" % Version + print("CCSM %s" % Version) sys.exit(0) if options.plugin: plugin = options.plugin commit 3400d3c836a88b7806eea79e4f6011bef3cff87b Author: Sam Spilsbury <smspil...@gmail.com> Date: Sat Nov 6 20:49:12 2010 +0800 Update NEWS for 0.9.2.1 Release diff --git a/NEWS b/NEWS index 504e004..1bb34d1 100644 --- a/NEWS +++ b/NEWS @@ -9,3 +9,8 @@ Release 0.9.2 (2010-10-24 Sam Spilsbury <smspil...@gmail.com>) Development release. Updated Tango Icons by coz_ + +Release 0.9.2.1 (2010-11-06 Sam Spilsbury <sam.spilsb...@canonical.com>) +======================================================================== +Bugfix release. + commit b803c08b84a3cf4eac8b85a72b05722fad814dc8 Author: Sam Spilsbury <smspil...@gmail.com> Date: Sat Nov 6 20:40:58 2010 +0800 Update to 0.9.2.1 diff --git a/VERSION b/VERSION index f626ec2..5d08606 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -VERSION=0.9.0 +VERSION=0.9.2.1 commit a7a828af40903943ef33684c431bb62c6970713b Author: Sam Spilsbury <smspil...@gmail.com> Date: Sun Oct 24 22:51:58 2010 +0800 Fix date on NEWS diff --git a/NEWS b/NEWS index 5ae86cb..504e004 100644 --- a/NEWS +++ b/NEWS @@ -4,7 +4,7 @@ Development release. Added new Tango Icons by coz_ -Release 0.9.2 (2010-07-03 Sam Spilsbury <smspil...@gmail.com>) +Release 0.9.2 (2010-10-24 Sam Spilsbury <smspil...@gmail.com>) ============================================================== Development release. commit 2d3673f917544434d54229f7f900adc059866e0d Author: Sam Spilsbury <smspil...@gmail.com> Date: Sun Oct 24 22:24:51 2010 +0800 Update NEWS for 0.9.2 diff --git a/NEWS b/NEWS index 27785f3..5ae86cb 100644 --- a/NEWS +++ b/NEWS @@ -2,4 +2,10 @@ Release 0.9.0 (2010-07-03 Sam Spilsbury <smspil...@gmail.com>) ============================================================== Development release. -Added new Tango Icons by coz_ \ No newline at end of file +Added new Tango Icons by coz_ + +Release 0.9.2 (2010-07-03 Sam Spilsbury <smspil...@gmail.com>) +============================================================== +Development release. + +Updated Tango Icons by coz_ commit e884cdaea2a81a5c6ed1fcebe5622e24f12a5764 Author: Sam Spilsbury <smspil...@gmail.com> Date: Sun Oct 24 22:11:50 2010 +0800 0.9.2 icons refresh diff --git a/README b/README deleted file mode 100644 index e69de29..0000000 diff --git a/images/22x22/apps/ccsm.svg b/images/22x22/apps/ccsm.svg old mode 100755 new mode 100644 diff --git a/images/scalable/apps/ccsm.svg b/images/scalable/apps/ccsm.svg old mode 100755 new mode 100644 diff --git a/images/scalable/apps/plugin-3d.svg b/images/scalable/apps/plugin-3d.svg old mode 100755 new mode 100644 diff --git a/images/scalable/apps/plugin-addhelper.svg b/images/scalable/apps/plugin-addhelper.svg old mode 100755 new mode 100644 diff --git a/images/scalable/apps/plugin-anaglyph.svg b/images/scalable/apps/plugin-anaglyph.svg old mode 100755 new mode 100644 diff --git a/images/scalable/apps/plugin-animation.svg b/images/scalable/apps/plugin-animation.svg old mode 100755 new mode 100644 diff --git a/images/scalable/apps/plugin-animationaddon.svg b/images/scalable/apps/plugin-animationaddon.svg old mode 100755 new mode 100644 diff --git a/images/scalable/apps/plugin-animationjc.svg b/images/scalable/apps/plugin-animationjc.svg new file mode 100644 index 0000000..a46e330 --- /dev/null +++ b/images/scalable/apps/plugin-animationjc.svg @@ -0,0 +1,341 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- made by Andy, It's public domain, yeah why not--> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.0" + width="48" + height="48" + id="svg4895" + sodipodi:version="0.32" + inkscape:version="0.47 r22583" + sodipodi:docname="testtube.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="C:\joanna\Gfx\drawings_vector\pitr_icons\test_tube_2_in_Andy_style.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <metadata + id="metadata77"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview + inkscape:window-height="980" + inkscape:window-width="1280" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + guidetolerance="10.0" + gridtolerance="10.0" + objecttolerance="10.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" + showgrid="false" + inkscape:zoom="10.488751" + inkscape:cx="24" + inkscape:cy="24" + inkscape:window-x="0" + inkscape:window-y="24" + inkscape:current-layer="svg4895" + inkscape:window-maximized="1" /> + <defs + id="defs3"> + <linearGradient + inkscape:collect="always" + id="linearGradient8301"> + <stop + style="stop-color: rgb(255, 255, 255); stop-opacity: 1;" + offset="0" + id="stop8303" /> + <stop + style="stop-color: rgb(255, 255, 255); stop-opacity: 0;" + offset="1" + id="stop8305" /> + </linearGradient> + <linearGradient + id="linearGradient8200"> + <stop + style="stop-color: rgb(0, 192, 192); stop-opacity: 0.752941;" + offset="0" + id="stop8202" /> + <stop + style="stop-color: rgb(128, 245, 245); stop-opacity: 0.301961;" + offset="1" + id="stop8204" /> + </linearGradient> + <!-- --> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient8200" + id="radialGradient3750" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.17632967,2.1025919,-0.92741946,0.07777823,-90.861805,-2596.8793)" + cx="1227.3593" + cy="63.768734" + fx="1227.3593" + fy="63.768734" + r="55.412727" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient8301" + id="linearGradient3752" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.99701828,-0.07716018,-0.07716018,0.99701828,146.00861,-16.401468)" + x1="41.589245" + y1="47.516582" + x2="57.072311" + y2="67.268402" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient8301" + id="linearGradient3754" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.54143726,-1.6783455,1.7248963,-0.87760529,-66.008989,208.85195)" + x1="49.242207" + y1="57.609703" + x2="56.435417" + y2="65.985397" /> + </defs> + <style + type="text/css" + id="style31"> + /* Specular Highlighting */ + .low-specularity {opacity:0.25;} + .specularity {opacity:0.5;} + .high-specularity {opacity:0.75;} -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/e1pw23m-0000p7...@alioth.debian.org