diff -Nru ibus-1.3.7/debian/changelog ibus-1.3.7/debian/changelog --- ibus-1.3.7/debian/changelog 2010-08-20 14:52:58.000000000 +0000 +++ ibus-1.3.7/debian/changelog 2010-10-25 09:24:05.000000000 +0000 @@ -1,3 +1,18 @@ +ibus (1.3.7-1ubuntu5) maverick; urgency=low + + * debian/patches/03_fix1104.patch: added. + - http://code.google.com/p/ibus/issues/detail?id=1104 + - This patch fixed lp: #637671 finally. + + -- Ikuya Awashiro Mon, 25 Oct 2010 09:20:42 +0000 + +ibus (1.3.7-1ubuntu4) maverick; urgency=low + + * Fixed strange python 100% cpu usage bug from sigchld_cb in panel.py + ubuntu bug# 637671 + + -- Karl Lattimer Tue, 12 Oct 2010 16:15:02 +0100 + ibus (1.3.7-1ubuntu3) maverick; urgency=low * debian/patches/05_appindicator.patch: diff -Nru ibus-1.3.7/debian/patches/03_fix1104.patch ibus-1.3.7/debian/patches/03_fix1104.patch --- ibus-1.3.7/debian/patches/03_fix1104.patch 1970-01-01 00:00:00.000000000 +0000 +++ ibus-1.3.7/debian/patches/03_fix1104.patch 2010-10-25 09:19:14.000000000 +0000 @@ -0,0 +1,69 @@ +diff -ur ibus-1.3.7.orig/client/gtk2/ibusimcontext.c ibus-1.3.7/client/gtk2/ibusimcontext.c +--- ibus-1.3.7.orig/client/gtk2/ibusimcontext.c 2010-10-25 09:03:24.404727427 +0000 ++++ ibus-1.3.7/client/gtk2/ibusimcontext.c 2010-10-25 09:07:51.032712672 +0000 +@@ -698,6 +698,12 @@ + + IBusIMContext *ibusimcontext = IBUS_IM_CONTEXT (context); + ++ if (ibusimcontext->cursor_area.x == area->x && ++ ibusimcontext->cursor_area.y == area->y && ++ ibusimcontext->cursor_area.width == area->width && ++ ibusimcontext->cursor_area.height == area->height) { ++ return; ++ } + if(ibusimcontext->ibuscontext) { + if (use_preedit) { + ibusimcontext->caps |= IBUS_CAP_PREEDIT_TEXT; +diff -ur ibus-1.3.7.orig/ui/gtk/panel.py ibus-1.3.7/ui/gtk/panel.py +--- ibus-1.3.7.orig/ui/gtk/panel.py 2010-08-03 08:59:09.000000000 +0000 ++++ ibus-1.3.7/ui/gtk/panel.py 2010-10-25 09:11:08.908717070 +0000 +@@ -22,6 +22,7 @@ + + import gtk + import gtk.gdk as gdk ++import glib + import gobject + import ibus + import icon as _icon +@@ -63,7 +64,7 @@ + self.__bus = bus + self.__config = self.__bus.get_config() + self.__focus_ic = None +- self.__setup_pid = 0 ++ self.__setup_pid = None + self.__prefix = os.getenv("IBUS_PREFIX") + self.__data_dir = path.join(self.__prefix, "share", "ibus") + # self.__icons_dir = path.join(self.__data_dir, "icons") +@@ -501,20 +502,18 @@ + else: + print >> sys.stderr, "Unknown command %s" % command + +- def __sigchld_cb(self, sig, sf): +- try: +- pid, status = os.wait() +- if self.__setup_pid == pid: +- self.__setup_pid = 0 +- except: +- pass ++ def __child_watch_cb(self, pid, status): ++ self.__setup_pid.close() ++ self.__setup_pid = None + + def __start_setup(self): +- if self.__setup_pid != 0: +- pid, state = os.waitpid(self.__setup_pid, os.P_NOWAIT) +- if pid != self.__setup_pid: +- os.kill(self.__setup_pid, signal.SIGUSR1) +- return +- self.__setup_pid = 0 +- self.__setup_pid = os.spawnl(os.P_NOWAIT, self.__setup_cmd, "ibus-setup") ++ if self.__setup_pid != None: ++ # if setup dialog is running, bring the dialog to front by SIGUSR1 ++ os.kill(self.__setup_pid, signal.SIGUSR1) ++ return ++ ++ pid = glib.spawn_async(argv=[self.__setup_cmd, "ibus-setup"], ++ flags=glib.SPAWN_DO_NOT_REAP_CHILD)[0] ++ self.__setup_pid = pid ++ glib.child_watch_add(self.__setup_pid, self.__child_watch_cb) + diff -Nru ibus-1.3.7/debian/patches/05_appindicator.patch ibus-1.3.7/debian/patches/05_appindicator.patch --- ibus-1.3.7/debian/patches/05_appindicator.patch 2010-08-20 12:18:42.000000000 +0000 +++ ibus-1.3.7/debian/patches/05_appindicator.patch 2010-10-12 15:14:43.000000000 +0000 @@ -1,6 +1,6 @@ -diff -uNr ibus-1.3.7.orig/ui/gtk/main.py ibus-1.3.7/ui/gtk/main.py ---- ibus-1.3.7.orig/ui/gtk/main.py 2010-08-20 11:54:10.439738002 +0100 -+++ ibus-1.3.7/ui/gtk/main.py 2010-08-20 10:50:35.000000000 +0100 +diff -x .pc -uNr ibus-1.3.7.orig/ui/gtk/main.py ibus-1.3.7/ui/gtk/main.py +--- ibus-1.3.7.orig/ui/gtk/main.py 2010-10-12 11:16:26.000000000 +0100 ++++ ibus-1.3.7/ui/gtk/main.py 2010-10-12 16:12:23.000000000 +0100 @@ -58,9 +58,11 @@ "Please restart ibus input platform."), \ "ibus") @@ -16,9 +16,9 @@ def __restart_cb(self, notify, action, data): if action == "restart": -diff -uNr ibus-1.3.7.orig/ui/gtk/panel.py ibus-1.3.7/ui/gtk/panel.py ---- ibus-1.3.7.orig/ui/gtk/panel.py 2010-08-20 11:54:10.429738002 +0100 -+++ ibus-1.3.7/ui/gtk/panel.py 2010-08-20 12:11:38.339738002 +0100 +diff -x .pc -uNr ibus-1.3.7.orig/ui/gtk/panel.py ibus-1.3.7/ui/gtk/panel.py +--- ibus-1.3.7.orig/ui/gtk/panel.py 2010-10-12 11:16:26.000000000 +0100 ++++ ibus-1.3.7/ui/gtk/panel.py 2010-10-12 16:11:22.000000000 +0100 @@ -34,6 +34,11 @@ from candidatepanel import CandidatePanel from engineabout import EngineAbout @@ -26,21 +26,25 @@ +try: + import appindicator +except: -+ pass ++ appindicator = None + from gettext import dgettext _ = lambda a : dgettext("ibus", a) N_ = lambda a : a -@@ -68,7 +73,7 @@ +@@ -68,9 +73,10 @@ self.__data_dir = path.join(self.__prefix, "share", "ibus") # self.__icons_dir = path.join(self.__data_dir, "icons") self.__setup_cmd = path.join(self.__prefix, "bin", "ibus-setup") - + # hanlder signal - signal.signal(signal.SIGCHLD, self.__sigchld_cb) - -@@ -106,12 +111,22 @@ +- signal.signal(signal.SIGCHLD, self.__sigchld_cb) ++ if not appindicator: ++ signal.signal(signal.SIGCHLD, self.__sigchld_cb) + + # connect bus signal + self.__config.connect("value-changed", self.__config_value_changed_cb) +@@ -106,12 +112,22 @@ lambda widget, index, button, state: self.candidate_clicked(index, button, state)) @@ -69,7 +73,7 @@ self.__config_load_lookup_table_orientation() self.__config_load_show() -@@ -188,10 +203,13 @@ +@@ -188,10 +204,13 @@ if not icon_name: icon_name = ICON_ENGINE self.__language_bar.set_im_icon(icon_name) @@ -86,7 +90,7 @@ def __set_im_name(self, name): self.__language_bar.set_im_name(name) -@@ -214,6 +232,9 @@ +@@ -214,6 +233,9 @@ self.__set_im_icon(ICON_KEYBOARD) self.__set_im_name(None) self.__language_bar.focus_in() @@ -96,7 +100,7 @@ def focus_out(self, ic): self.reset() -@@ -290,7 +311,13 @@ +@@ -290,7 +312,13 @@ def __config_load_show_icon_on_systray(self): value = self.__config.get_value("panel", "show_icon_on_systray", True) @@ -111,7 +115,7 @@ def __config_load_show_im_name(self): value = self.__config.get_value("panel", "show_im_name", False) -@@ -317,8 +344,7 @@ +@@ -317,8 +345,7 @@ def __config_reloaded_cb(self, bus): pass @@ -121,7 +125,7 @@ item = gtk.ImageMenuItem(gtk.STOCK_PREFERENCES) item.connect("activate", self.__sys_menu_item_activate_cb, gtk.STOCK_PREFERENCES) -@@ -337,8 +363,6 @@ +@@ -337,8 +364,6 @@ self.__sys_menu_item_activate_cb, gtk.STOCK_QUIT) menu.add(item) @@ -130,7 +134,7 @@ return menu # def __create_im_menu(self): -@@ -401,33 +425,47 @@ +@@ -401,33 +426,47 @@ size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) menu = gtk.Menu() @@ -194,7 +198,7 @@ return menu def __show_engine_about_cb(self, langagebar): -@@ -444,7 +482,12 @@ +@@ -444,7 +483,12 @@ self.__config.set_value("panel", "y", y) def __status_icon_popup_menu_cb(self, status_icon, button, active_time): @@ -208,7 +212,7 @@ menu.popup(None, None, gtk.status_icon_position_menu, button, -@@ -458,23 +501,50 @@ +@@ -458,23 +502,49 @@ size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) item.set_image(_icon.IconWidget("gtk-info", size[0])) menu.add(item) @@ -227,7 +231,6 @@ + def __appindicator_update_menu(self): + if not self.__appindicator: + return -+ + if not self.__previous_focus_ic: + menu = gtk.Menu() + item = gtk.ImageMenuItem(_("No input window")) diff -Nru ibus-1.3.7/debian/patches/06_show_menuitem.patch ibus-1.3.7/debian/patches/06_show_menuitem.patch --- ibus-1.3.7/debian/patches/06_show_menuitem.patch 2010-08-13 11:51:45.000000000 +0000 +++ ibus-1.3.7/debian/patches/06_show_menuitem.patch 2010-10-25 09:19:40.000000000 +0000 @@ -1,5 +1,7 @@ ---- merge-dir/ui/gtk/menu.py 2010-08-06 10:11:40.000000000 +0800 -+++ merge-dir-patch/ui/gtk/menu.py 2010-08-06 19:23:37.000000000 +0800 +Index: ibus-1.3.7/ui/gtk/menu.py +=================================================================== +--- ibus-1.3.7.orig/ui/gtk/menu.py 2010-07-23 03:35:15.000000000 +0000 ++++ ibus-1.3.7/ui/gtk/menu.py 2010-10-25 09:18:53.000000000 +0000 @@ -59,7 +59,7 @@ item = SeparatorMenuItem() radio_group = None diff -Nru ibus-1.3.7/debian/patches/series ibus-1.3.7/debian/patches/series --- ibus-1.3.7/debian/patches/series 2010-08-20 14:51:57.000000000 +0000 +++ ibus-1.3.7/debian/patches/series 2010-10-25 09:19:31.000000000 +0000 @@ -2,4 +2,4 @@ 02_title_update.patch 05_appindicator.patch 06_show_menuitem.patch - +03_fix1104.patch