| OLD | NEW |
| 1 # vim:set et sts=4 sw=4: | 1 # vim:set et sts=4 sw=4: |
| 2 # | 2 # |
| 3 # ibus - The Input Bus | 3 # ibus - The Input Bus |
| 4 # | 4 # |
| 5 # Copyright(c) 2007-2010 Peng Huang <shawn.p.huang@gmail.com> | 5 # Copyright(c) 2007-2010 Peng Huang <shawn.p.huang@gmail.com> |
| 6 # Copyright(c) 2007-2010 Red Hat, Inc. | 6 # Copyright(c) 2007-2010 Red Hat, Inc. |
| 7 # | 7 # |
| 8 # This library is free software; you can redistribute it and/or | 8 # This library is free software; you can redistribute it and/or |
| 9 # modify it under the terms of the GNU Lesser General Public | 9 # modify it under the terms of the GNU Lesser General Public |
| 10 # License as published by the Free Software Foundation; either | 10 # License as published by the Free Software Foundation; either |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 def __init__(self, bus): | 61 def __init__(self, bus): |
| 62 super(Panel, self).__init__(bus) | 62 super(Panel, self).__init__(bus) |
| 63 self.__bus = bus | 63 self.__bus = bus |
| 64 self.__config = self.__bus.get_config() | 64 self.__config = self.__bus.get_config() |
| 65 self.__focus_ic = None | 65 self.__focus_ic = None |
| 66 self.__setup_pid = 0 | 66 self.__setup_pid = 0 |
| 67 self.__prefix = os.getenv("IBUS_PREFIX") | 67 self.__prefix = os.getenv("IBUS_PREFIX") |
| 68 self.__data_dir = path.join(self.__prefix, "share", "ibus") | 68 self.__data_dir = path.join(self.__prefix, "share", "ibus") |
| 69 # self.__icons_dir = path.join(self.__data_dir, "icons") | 69 # self.__icons_dir = path.join(self.__data_dir, "icons") |
| 70 self.__setup_cmd = path.join(self.__prefix, "bin", "ibus-setup") | 70 self.__setup_cmd = path.join(self.__prefix, "bin", "ibus-setup") |
| 71 self.__setxkbmap_cmd = path.join(self.__prefix, "bin", "setxkbmap") |
| 72 self.__current_xkb_layout = "" |
| 73 self.__default_xkb_layout = "us" |
| 74 if bus.get_use_sys_layout(): |
| 75 self.__set_xkb_layout(self.__default_xkb_layout) |
| 71 | 76 |
| 72 # hanlder signal | 77 # hanlder signal |
| 73 signal.signal(signal.SIGCHLD, self.__sigchld_cb) | 78 signal.signal(signal.SIGCHLD, self.__sigchld_cb) |
| 74 | 79 |
| 75 # connect bus signal | 80 # connect bus signal |
| 76 self.__config.connect("value-changed", self.__config_value_changed_cb) | 81 self.__config.connect("value-changed", self.__config_value_changed_cb) |
| 77 self.__config.connect("reloaded", self.__config_reloaded_cb) | 82 self.__config.connect("reloaded", self.__config_reloaded_cb) |
| 78 # self.__bus.config_add_watch("panel") | 83 # self.__bus.config_add_watch("panel") |
| 79 | 84 |
| 80 # add icon search path | 85 # add icon search path |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 | 203 |
| 199 def focus_in(self, ic): | 204 def focus_in(self, ic): |
| 200 self.reset() | 205 self.reset() |
| 201 self.__focus_ic = ibus.InputContext(self.__bus, ic) | 206 self.__focus_ic = ibus.InputContext(self.__bus, ic) |
| 202 enabled = self.__focus_ic.is_enabled() | 207 enabled = self.__focus_ic.is_enabled() |
| 203 self.__language_bar.set_enabled(enabled) | 208 self.__language_bar.set_enabled(enabled) |
| 204 | 209 |
| 205 if not enabled: | 210 if not enabled: |
| 206 self.__set_im_icon(ICON_KEYBOARD) | 211 self.__set_im_icon(ICON_KEYBOARD) |
| 207 self.__set_im_name(None) | 212 self.__set_im_name(None) |
| 213 if self.__bus.get_use_sys_layout(): |
| 214 self.__set_xkb_layout(self.__default_xkb_layout) |
| 208 else: | 215 else: |
| 209 engine = self.__focus_ic.get_engine() | 216 engine = self.__focus_ic.get_engine() |
| 210 if engine: | 217 if engine: |
| 211 self.__set_im_icon(engine.icon) | 218 self.__set_im_icon(engine.icon) |
| 212 self.__set_im_name(engine.longname) | 219 self.__set_im_name(engine.longname) |
| 220 if self.__bus.get_use_sys_layout(): |
| 221 self.__set_xkb_layout(engine.layout) |
| 213 else: | 222 else: |
| 214 self.__set_im_icon(ICON_KEYBOARD) | 223 self.__set_im_icon(ICON_KEYBOARD) |
| 215 self.__set_im_name(None) | 224 self.__set_im_name(None) |
| 225 if self.__bus.get_use_sys_layout(): |
| 226 self.__set_xkb_layout(self.__default_xkb_layout) |
| 216 self.__language_bar.focus_in() | 227 self.__language_bar.focus_in() |
| 217 | 228 |
| 218 def focus_out(self, ic): | 229 def focus_out(self, ic): |
| 219 self.reset() | 230 self.reset() |
| 220 self.__focus_ic = None | 231 self.__focus_ic = None |
| 221 self.__language_bar.set_enabled(False) | 232 self.__language_bar.set_enabled(False) |
| 222 self.__language_bar.focus_out() | 233 self.__language_bar.focus_out() |
| 223 self.__set_im_icon(ICON_KEYBOARD) | 234 self.__set_im_icon(ICON_KEYBOARD) |
| 224 self.__set_im_name(None) | 235 self.__set_im_name(None) |
| 236 if self.__bus.get_use_sys_layout(): |
| 237 self.__set_xkb_layout(self.__default_xkb_layout) |
| 225 | 238 |
| 226 def state_changed(self): | 239 def state_changed(self): |
| 227 if not self.__focus_ic: | 240 if not self.__focus_ic: |
| 228 return | 241 return |
| 229 | 242 |
| 230 enabled = self.__focus_ic.is_enabled() | 243 enabled = self.__focus_ic.is_enabled() |
| 231 self.__language_bar.set_enabled(enabled) | 244 self.__language_bar.set_enabled(enabled) |
| 232 | 245 |
| 233 if enabled == False: | 246 if enabled == False: |
| 234 self.reset() | 247 self.reset() |
| 235 self.__set_im_icon(ICON_KEYBOARD) | 248 self.__set_im_icon(ICON_KEYBOARD) |
| 236 self.__set_im_name(None) | 249 self.__set_im_name(None) |
| 250 if self.__bus.get_use_sys_layout(): |
| 251 self.__set_xkb_layout(self.__default_xkb_layout) |
| 237 else: | 252 else: |
| 238 engine = self.__focus_ic.get_engine() | 253 engine = self.__focus_ic.get_engine() |
| 239 if engine: | 254 if engine: |
| 240 self.__set_im_icon(engine.icon) | 255 self.__set_im_icon(engine.icon) |
| 241 self.__set_im_name(engine.longname) | 256 self.__set_im_name(engine.longname) |
| 257 if self.__bus.get_use_sys_layout(): |
| 258 self.__set_xkb_layout(engine.layout) |
| 242 else: | 259 else: |
| 243 self.__set_im_icon(ICON_KEYBOARD) | 260 self.__set_im_icon(ICON_KEYBOARD) |
| 244 self.__set_im_name(None) | 261 self.__set_im_name(None) |
| 245 | 262 if self.__bus.get_use_sys_layout(): |
| 263 self.__set_xkb_layout(self.__default_xkb_layout) |
| 246 | 264 |
| 247 def reset(self): | 265 def reset(self): |
| 248 self.__candidate_panel.reset() | 266 self.__candidate_panel.reset() |
| 249 self.__language_bar.reset() | 267 self.__language_bar.reset() |
| 250 | 268 |
| 251 def start_setup(self): | 269 def start_setup(self): |
| 252 self.__start_setup() | 270 self.__start_setup() |
| 253 | 271 |
| 254 def do_destroy(self): | 272 def do_destroy(self): |
| 255 gtk.main_quit() | 273 gtk.main_quit() |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 511 | 529 |
| 512 def __start_setup(self): | 530 def __start_setup(self): |
| 513 if self.__setup_pid != 0: | 531 if self.__setup_pid != 0: |
| 514 pid, state = os.waitpid(self.__setup_pid, os.P_NOWAIT) | 532 pid, state = os.waitpid(self.__setup_pid, os.P_NOWAIT) |
| 515 if pid != self.__setup_pid: | 533 if pid != self.__setup_pid: |
| 516 os.kill(self.__setup_pid, signal.SIGUSR1) | 534 os.kill(self.__setup_pid, signal.SIGUSR1) |
| 517 return | 535 return |
| 518 self.__setup_pid = 0 | 536 self.__setup_pid = 0 |
| 519 self.__setup_pid = os.spawnl(os.P_NOWAIT, self.__setup_cmd, "ibus-setup"
) | 537 self.__setup_pid = os.spawnl(os.P_NOWAIT, self.__setup_cmd, "ibus-setup"
) |
| 520 | 538 |
| 539 def __set_xkb_layout(self, layout): |
| 540 # if it's not a us keyboard layout, then we need to load us layout |
| 541 # into the second group. Otherwise applications' key bindings may |
| 542 # not work correctly. |
| 543 if layout != "us" and not layout.startswith("us("): |
| 544 layout = layout + ",us" |
| 545 |
| 546 if self.__current_xkb_layout == layout: |
| 547 return; |
| 548 |
| 549 self.__current_xkb_layout = layout |
| 550 |
| 551 # FIXME: It's an ugly hack. libxklavier might be used to make it more |
| 552 # reliable. |
| 553 try: |
| 554 os.spawnv(os.P_WAIT, self.__setxkbmap_cmd, |
| 555 [ "setxkbmap", "-layout", layout ] ) |
| 556 except: |
| 557 print >> sys.stderr, "Failed to run %s" % self.__setxkbmap_cmd |
| OLD | NEW |