=== modified file 'usr/lib/ubuntu-mate/mate-menu/plugins/kylinmenu.py'
--- usr/lib/ubuntu-mate/mate-menu/plugins/kylinmenu.py	2014-12-26 05:45:19 +0000
+++ usr/lib/ubuntu-mate/mate-menu/plugins/kylinmenu.py	2014-12-29 03:12:40 +0000
@@ -133,7 +133,8 @@
         self.all_application_list = all_application_list
 
         for app in self.all_application_list:
-            if app['category'] == 'Games' or app['category'] == _('Games'):
+            # TODO: use translation
+            if app['category'] == 'Games' or app['category'] == '游戏':
                 self.application_list_m.append(app)
     
         self.application_list_m += self.autostart_list()
@@ -356,6 +357,7 @@
         self.screen = Wnck.Screen.get_default()
         self.screen.connect('application-opened', self.on_app_opened, None)
         self.recentApp = {}
+        self.updateHistoryBox()
         #feng
 
         #label font 
@@ -733,146 +735,74 @@
         self.all_application_list = self.build_application_list()
         cat = Category(self.all_application_list)
 
-        new_category_list = cat.category_list()
-        added_category_list = [] 
-        removed_category_list = []
+        self.categoryList = cat.category_list()
         self.categorybutton_list = []
 
-        if not self.categoryList:
-            added_category_list = new_category_list
-        else:
-            for item in new_category_list:
-                found = False
-                for item2 in self.categoryList:
-                    if item2['name'] == item['name'] and \
-                       item2['icon'] == item['icon'] and \
-                       item2['tooltip'] == item['tooltip'] :
-                        found = True
-                        break
-                if not found:
-                    added_category_list.append(item)
-
-            for item in self.categoryList:
-                found = False
-                for item2 in new_category_list:
-                    if item2['name'] == item['name'] and \
-                       item2['icon'] == item['icon'] and \
-                       item2['tooltip'] == item['tooltip'] :
-                        found = True
-                        break
-                if not found:
-                    removed_category_list.append(item)
-
         if self.showcategoryicons:
             category_icon_size = self.iconSize
         else:
             category_icon_size = 0
 
-        for item in removed_category_list:
-            try:
-                button = item['button']
-                self.categoryList.remove(item)
-                button.destroy()
-                del item
-            except Exception, e:
-                print e
-
-        if added_category_list:
-            sorted_category_list = []
-            for item in self.categoryList:
-                try:
-                    self.categoriesBox.remove(item['button'])
-                    sorted_category_list.append( ( item['name'].upper(), item['button'] ) )
-                except Exception, e:
-                    print e
-                    
-            for item in added_category_list:
-                try:
-                    item["button"] = CategoryButton( item["icon"], category_icon_size, [ item["name"] ], item["filter"] )
-                    item["button"].rightbox.show_all()
-                    self.categorybutton_list.append(item["button"])
-                    self.mateMenuWin.setTooltip( item["button"], item["tooltip"] )
-    
-#                    if self.categories_mouse_over:
-#                        startId = item["button"].connect( "enter", self.StartFilter, item["filter"] )
-#                        stopId = item["button"].connect( "leave", self.StopFilter )
-#                        item["button"].mouseOverHandlerIds = ( startId, stopId )
-#                    else:
-#                        item["button"].mouseOverHandlerIds = None
-#    
-                    item["button"].connect( "clicked", self.FilterAndClear, item["filter"] )
-#                    item["button"].connect( "focus-in-event", self.categoryBtnFocus, item["filter"] )
-                    item["button"].connect( "focus-in-event", self.scrollItemIntoView )                                    #feng
-                    item["button"].show()
-    
-                    self.categoryList.append( item )
-                    sorted_category_list.append( ( item["name"].upper(), item["button"] ) )
-                except Exception, e:
-                    print e
-    
-            sorted_category_list.sort()
-    
-            for item in sorted_category_list:
-                try:
-                    self.categoriesBox.pack_start( item[1], False, False, 0 )
-                except Exception, e:
-                    print e
-
-        new_application_list = cat.application_list()
-        added_application_list = []
-        removed_application_list = []
-
-        if not self.applicationList:
-            added_application_list = new_application_list
-        else:
-            for item in new_application_list:
-                found = False
-                for item2 in self.applicationList:
-                    if item['desktop_file_path'] == item2['desktop_file_path']:
-                        found = True
-                        break
-                if not found:
-                    added_application_list.append(item)
-
-            key = 0
-            for item in self.applicationList:
-                found = False
-                for item2 in new_application_list:
-                    if item['desktop_file_path'] == item2['desktop_file_path']:
-                        found = True
-                        break
-                if not found:
-                    removed_application_list.append(key)
-                else:
-                    key += 1
-
-        for key in removed_application_list:
-            self.applicationList[key]['button'].destroy()
-            del self.applicationList[key]
-
-        if added_application_list:
-            sorted_application_list = []
-            for item in self.applicationList:
-                self.applicationsBox.remove( item["button"] )
-                sorted_application_list.append( ( item["button"].appName.upper(), item["button"] ) )
-            for item in added_application_list:
-                button = self.build_application_launcher(item, menu_has_changed)
+        for button in self.categoriesBox:
+            try:
+                self.categoriesBox.remove(button)
+            except Exception, e:
+                print e.message
+
+        for button in self.applicationsBox:
+            try:
+                self.applicationsBox.remove(button)
+            except Exception, e:
+                print e.message
+
+        sorted_category_list = []
+        for item in self.categoryList:
+            try:
+                item["button"] = CategoryButton( item["icon"], category_icon_size, [ item["name"] ], item["filter"] )
+                item["button"].rightbox.show_all()
+                self.categorybutton_list.append(item["button"])
+                self.mateMenuWin.setTooltip( item["button"], item["tooltip"] )
+    
+                item["button"].connect( "clicked", self.FilterAndClear, item["filter"] )
+#                item["button"].connect( "focus-in-event", self.categoryBtnFocus, item["filter"] )
+                item["button"].connect( "focus-in-event", self.scrollItemIntoView )                                    #feng
+                item["button"].show()
+    
+                sorted_category_list.append( ( item["name"].upper(), item["button"] ) )
+            except Exception, e:
+                print e.message
+    
+        sorted_category_list.sort()
+
+        for item in sorted_category_list:
+            try:
+                self.categoriesBox.pack_start( item[1], False, False, 0 )
+            except Exception, e:
+                print e.message
+
+        self.applicationList = cat.application_list()
+
+
+        sorted_application_list = []
+        for item in self.applicationList:
+            try:
+                button = self.build_application_launcher(item, False)
                 if button:
                     item["button"] = button
                     item["button"].connect( "focus-in-event", self.scrollItemIntoView )                                    #feng
                     sorted_application_list.append( ( item["button"].appName.upper(), item["button"] ) )
-                    self.applicationList.append( item )
+            except Exception, e:
+                print e.message
 
-            sorted_application_list.sort()
-            launcherNames = [] # Keep track of launcher names so we don't add them twice in the list.
-            for item in sorted_application_list:
-                launcherName = item[0]
-                button = item[1]
-                self.applicationsBox.pack_start( button, False, False, 0 )
-                if launcherName in launcherNames:
-                    button.hide()
-                else:
-                    launcherNames.append(launcherName)
+        sorted_application_list.sort()
+        launcherNames = []
+        for item in sorted_application_list:
+            button = item[1]
+            self.applicationsBox.pack_start( button, False, False, 0 )
+            if item[0] in launcherNames:
+                button.hide()
+            else:
+                launcherNames.append(item[0])
 
         self.uncategorized_list = []
         for item in self.all_application_list:
@@ -906,7 +836,7 @@
 
         sorted_uncategorized_list = []
         for item in self.uncategorized_list:
-            button = self.build_application_launcher(item, menu_has_changed)
+            button = self.build_application_launcher(item, False)
             if button:
                 item['button'] = button
                 sorted_uncategorized_list.append( ( item['button'].appName.upper(), item['button'] ) )
@@ -914,15 +844,14 @@
 
         launcherNames = [] # Keep track of launcher names so we don't add them twice in the list.
         for item in sorted_uncategorized_list:
-            launcherName = item[0]
             button = item[1]
             button.connect( "focus-in-event", self.scrollItemIntoView )                                    #feng
             self.categoriesBox.pack_start( button, False, False, 0 )
             button.show()
-            if launcherName in launcherNames:
+            if item[0] in launcherNames:
                 button.hide()
             else:
-                launcherNames.append(launcherName)
+                launcherNames.append(item[0])
 
         self.rebuildLock = False
 

