1
diff -uNr -x .pc ibus-1.3.7.orig//ui/gtk/panel.py ibus-1.3.7.1104//ui/gtk/panel.py
2
--- ibus-1.3.7.orig//ui/gtk/panel.py 2010-11-15 12:39:28.000000000 +0100
3
+++ ibus-1.3.7.1104//ui/gtk/panel.py 2010-11-15 12:45:09.000000000 +0100
14
self.__config = self.__bus.get_config()
15
self.__focus_ic = None
16
- self.__setup_pid = 0
17
+ self.__setup_pid = None
18
self.__prefix = os.getenv("IBUS_PREFIX")
19
self.__data_dir = path.join(self.__prefix, "share", "ibus")
20
# self.__icons_dir = path.join(self.__data_dir, "icons")
21
self.__setup_cmd = path.join(self.__prefix, "bin", "ibus-setup")
24
- signal.signal(signal.SIGCHLD, self.__sigchld_cb)
27
self.__config.connect("value-changed", self.__config_value_changed_cb)
28
self.__config.connect("reloaded", self.__config_reloaded_cb)
31
print >> sys.stderr, "Unknown command %s" % command
33
- def __sigchld_cb(self, sig, sf):
35
- pid, status = os.wait()
36
- if self.__setup_pid == pid:
37
- self.__setup_pid = 0
40
+ def __child_watch_cb(self, pid, status):
41
+ self.__setup_pid.close()
42
+ self.__setup_pid = None
44
def __start_setup(self):
45
- if self.__setup_pid != 0:
46
- pid, state = os.waitpid(self.__setup_pid, os.P_NOWAIT)
47
- if pid != self.__setup_pid:
48
- os.kill(self.__setup_pid, signal.SIGUSR1)
50
- self.__setup_pid = 0
51
- self.__setup_pid = os.spawnl(os.P_NOWAIT, self.__setup_cmd, "ibus-setup")
52
+ if self.__setup_pid:
53
+ # if setup dialog is running, bring the dialog to front by SIGUSR1
54
+ self.__setup_pid.close()
55
+ self.__setup_pid = None
58
+ pid = glib.spawn_async(argv=[self.__setup_cmd], flags=glib.SPAWN_DO_NOT_REAP_CHILD)[0]
59
+ self.__setup_pid = pid
60
+ glib.child_watch_add(self.__setup_pid, self.__child_watch_cb)