ccsm: Changes to 'upstream-unstable'
Rebased ref, commits from common ancestor:
commit cb1268cb2a6728d2f0dcc21d417b3b2c13d729e6
Author: Silvia Dobrota <silvia.dobrota09@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.spilsbury@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 <joe@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 <marex@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 <marex@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 <marex@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 <smspillaz@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 <smspillaz@gmail.com>)
Development release.
Updated Tango Icons by coz_
+
+Release 0.9.2.1 (2010-11-06 Sam Spilsbury <sam.spilsbury@canonical.com>)
+========================================================================
+Bugfix release.
+
commit b803c08b84a3cf4eac8b85a72b05722fad814dc8
Author: Sam Spilsbury <smspillaz@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 <smspillaz@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 <smspillaz@gmail.com>)
+Release 0.9.2 (2010-10-24 Sam Spilsbury <smspillaz@gmail.com>)
==============================================================
Development release.
commit 2d3673f917544434d54229f7f900adc059866e0d
Author: Sam Spilsbury <smspillaz@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 <smspillaz@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 <smspillaz@gmail.com>)
+==============================================================
+Development release.
+
+Updated Tango Icons by coz_
commit e884cdaea2a81a5c6ed1fcebe5622e24f12a5764
Author: Sam Spilsbury <smspillaz@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;}
Reply to: