Sort engines in setup ui.
authorPeng Huang <shawn.p.huang@gmail.com>
Thu, 24 Dec 2009 06:18:20 +0000 (14:18 +0800)
committerPeng Huang <shawn.p.huang@gmail.com>
Thu, 24 Dec 2009 06:18:20 +0000 (14:18 +0800)
ibus/enginedesc.py
setup/enginecombobox.py
src/ibusenginedesc.c

index 9f40c05..eba67ed 100644 (file)
@@ -31,7 +31,7 @@ from serializable import *
 class EngineDesc(Serializable):
     __gtype_name__ = "PYIBusEngineDesc"
     __NAME__ = "IBusEngineDesc"
-    def __init__ (self, name="", longname="", description="", language="", license="", author="", icon="", layout=""):
+    def __init__ (self, name="", longname="", description="", language="", license="", author="", icon="", layout="", rank=0):
         super(EngineDesc, self).__init__()
         self.__name = name
         self.__longname = longname
@@ -41,6 +41,7 @@ class EngineDesc(Serializable):
         self.__author = author
         self.__icon = icon
         self.__layout = layout
+        self.__rank = rank;
 
     def get_name(self):
         return self.__name
@@ -66,6 +67,9 @@ class EngineDesc(Serializable):
     def get_layout(self):
         return self.__layout
 
+    def get_rank(self):
+        return self.__rank
+
     name        = property(get_name)
     longname    = property(get_longname)
     description = property(get_description)
@@ -74,6 +78,7 @@ class EngineDesc(Serializable):
     author      = property(get_author)
     icon        = property(get_icon)
     layout      = property(get_layout)
+    rank        = property(get_rank)
 
     def serialize(self, struct):
         super(EngineDesc, self).serialize(struct)
@@ -85,6 +90,7 @@ class EngineDesc(Serializable):
         struct.append (dbus.String(self.__author))
         struct.append (dbus.String(self.__icon))
         struct.append (dbus.String(self.__layout))
+        struct.append (dbus.UInt(self.__rank))
 
     def deserialize(self, struct):
         super(EngineDesc, self).deserialize(struct)
@@ -96,6 +102,7 @@ class EngineDesc(Serializable):
         self.__author = struct.pop(0)
         self.__icon = struct.pop(0)
         self.__layout = struct.pop(0)
+        self.__rank = struct.pop(0)
 
 def test():
     engine = EngineDesc("Hello", "", "", "", "", "", "", "")
index 842273c..043a2fc 100644 (file)
@@ -76,6 +76,11 @@ class EngineComboBox(gtk.ComboBox):
         for l in keys:
             iter1 = self.__model.append(None)
             self.__model.set(iter1, 0, l)
+            def cmp_engine(a, b):
+                if a.rank == b.rank:
+                    return cmp(a.longname, b.longname)
+                return int(-a.rank + b.rank)
+            lang[l].sort(cmp_engine)
             for e in lang[l]:
                 iter2 = self.__model.append(iter1)
                 self.__model.set(iter2, 0, e)
index e3d9abd..089e023 100644 (file)
@@ -95,7 +95,7 @@ ibus_engine_desc_class_init (IBusEngineDescClass *klass)
     serializable_class->deserialize = (IBusSerializableDeserializeFunc) ibus_engine_desc_deserialize;
     serializable_class->copy        = (IBusSerializableCopyFunc) ibus_engine_desc_copy;
 
-    g_string_append (serializable_class->signature, "ssssssss");
+    g_string_append (serializable_class->signature, "ssssssssu");
 }
 
 static void
@@ -161,6 +161,9 @@ ibus_engine_desc_serialize (IBusEngineDesc  *desc,
     retval = ibus_message_iter_append (iter, G_TYPE_STRING, &desc->layout);
     g_return_val_if_fail (retval, FALSE);
 
+    retval = ibus_message_iter_append (iter, G_TYPE_UINT, &desc->rank);
+    g_return_val_if_fail (retval, FALSE);
+
     return TRUE;
 }
 
@@ -214,6 +217,10 @@ ibus_engine_desc_deserialize (IBusEngineDesc  *desc,
     ibus_message_iter_next (iter);
     desc->layout = g_strdup (str);
 
+    retval = ibus_message_iter_get (iter, G_TYPE_UINT, &desc->rank);
+    g_return_val_if_fail (retval, FALSE);
+    ibus_message_iter_next (iter);
+
     return TRUE;
 }