def set_engines(self, engines): self.__model = gtk.TreeStore(gobject.TYPE_PYOBJECT) iter1 = self.__model.append(None) self.__model.set(iter1, 0, 0) lang = {} for e in engines: l = ibus.get_language_name(e.language) if l not in lang: lang[l] = [] lang[l].append(e) keys = lang.keys() keys.sort(locale.strcoll) #add "Others" to the end of the combo box if ibus.get_language_name("Other") in keys: keys.remove(ibus.get_language_name("Other")) keys += [ibus.get_language_name("Other")] 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 locale.strcoll(a.longname, b.longname) return int(b.rank - a.rank) lang[l].sort(cmp_engine) for e in lang[l]: iter2 = self.__model.append(iter1) self.__model.set(iter2, 0, e) self.set_model(self.__model) self.set_active(0)
def __create_im_menu(self): engines = self.__bus.list_active_engines() current_engine = \ (self.__focus_ic != None and self.__focus_ic.get_engine()) or \ (engines and engines[0]) or \ None size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) menu = gtk.Menu() for i, engine in enumerate(engines): lang = ibus.get_language_name(engine.language) item = gtk.ImageMenuItem("%s - %s" % (lang, engine.longname)) if current_engine and current_engine.name == engine.name: for widget in item.get_children(): if isinstance(widget, gtk.Label): widget.set_markup("<b>%s</b>" % widget.get_text()) if engine.icon: item.set_image(_icon.IconWidget(engine.icon, size[0])) else: item.set_image(_icon.IconWidget(ICON_ENGINE, size[0])) item.connect("activate", self.__im_menu_item_activate_cb, engine) menu.add(item) item = gtk.ImageMenuItem(_("Turn off input method")) item.set_image(_icon.IconWidget("gtk-close", size[0])) item.connect("activate", self.__im_menu_item_activate_cb, None) menu.add(item) menu.show_all() menu.set_take_focus(False) return menu
def __fill_text_view(self): text_buffer = self.__text_view.get_buffer() self.__create_tags(text_buffer) iter = text_buffer.get_iter_at_offset(0) text_buffer.insert_with_tags_by_name(iter, "\n ", "left_margin_16") text_buffer.insert_pixbuf(iter, self.__load_icon(self.__engine_desc.icon)) text_buffer.insert_with_tags_by_name( iter, "\n%s\n" % self.__engine_desc.longname, "heading", "left_margin_16") text_buffer.insert_with_tags_by_name( iter, _("Language: %s\n") % ibus.get_language_name(self.__engine_desc.language), "small", "bold", "left_margin_16") text_buffer.insert_with_tags_by_name( iter, _("Keyboard layout: %s\n") % self.__engine_desc.layout, "small", "bold", "left_margin_16") text_buffer.insert_with_tags_by_name( iter, _("Author: %s\n") % self.__engine_desc.author, "small", "bold", "left_margin_16") text_buffer.insert_with_tags_by_name(iter, _("Description:\n"), "small", "bold", "left_margin_16") text_buffer.insert_with_tags_by_name(iter, self.__engine_desc.description, "wrap_text", "left_margin_32")
def __create_im_menu(self): engines = self.__bus.list_active_engines() current_engine = \ (self.__focus_ic != None and self.__focus_ic.get_engine()) or \ (engines and engines[0]) or \ None size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) menu = gtk.Menu() for i, engine in enumerate(engines): lang = ibus.get_language_name(engine.language) item = gtk.ImageMenuItem("%s - %s" % (lang, engine.longname)) if current_engine and current_engine.name == engine.name: for widget in item.get_children(): if isinstance(widget, gtk.Label): widget.set_markup("<b>%s</b>" % widget.get_text()) if engine.icon: item.set_image(_icon.IconWidget(engine.icon, size[0])) else: item.set_image(_icon.IconWidget(ICON_ENGINE, size[0])) item.connect("activate", self.__im_menu_item_activate_cb, engine) menu.add(item) item = gtk.ImageMenuItem(_("Turn off input method")) item.set_image(_icon.IconWidget("gtk-close", size[0])) item.connect("activate", self.__im_menu_item_activate_cb, None) if self.__focus_ic == None or not self.__focus_ic.is_enabled(): item.set_sensitive(False) menu.add(item) menu.show_all() menu.set_take_focus(False) return menu
def __name_cell_data_cb(self, celllayout, renderer, model, iter): engine = self.__model.get_value(iter, 0) renderer.set_property("sensitive", True) language = ibus.get_language_name(engine.language) renderer.set_property("text", "%s - %s" % (language, engine.longname)) if self.__model.get_path(iter)[0] == 0: # default engine renderer.set_property("weight", pango.WEIGHT_BOLD) else: renderer.set_property("weight", pango.WEIGHT_NORMAL)
def __init__(self, engines): super(EngineComboBox, self).__init__() self.__model = gtk.TreeStore(gobject.TYPE_PYOBJECT) iter1 = self.__model.append(None) self.__model.set(iter1, 0, 0) lang = {} for e in engines: l = ibus.get_language_name(e.language) if l not in lang: lang[l] = [] lang[l].append(e) keys = lang.keys() keys.sort() if ibus.get_language_name("Other") in keys: keys.remove( ibus.get_language_name("Other")) keys += [ibus.get_language_name("Other")] for l in keys: iter1 = self.__model.append(None) self.__model.set(iter1, 0, l) for e in lang[l]: iter2 = self.__model.append(iter1) self.__model.set(iter2, 0, e) self.set_model(self.__model) renderer = gtk.CellRendererPixbuf() renderer.set_property("xalign", 0) self.pack_start(renderer, False) self.set_cell_data_func(renderer, self.__icon_cell_data_cb) renderer = gtk.CellRendererText() renderer.set_property("xalign", 0) self.pack_start(renderer, True) self.set_cell_data_func(renderer, self.__name_cell_data_cb) self.set_active(0)
def __create_im_menu(self): menu = gtk.Menu() engines = self.__bus.list_active_engines() tmp = {} for engine in engines: lang = ibus.get_language_name(engine.language) if lang not in tmp: tmp[lang] = [] tmp[lang].append(engine) langs = tmp.keys() other = tmp.get(_("Other"), []) if _("Other") in tmp: langs.remove(_("Other")) langs.append(_("Other")) size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) for lang in langs: if len(tmp[lang]) == 1: engine = tmp[lang][0] item = gtk.ImageMenuItem("%s - %s" % (lang, engine.longname)) if engine.icon: item.set_image(_icon.IconWidget(engine.icon, size[0])) else: item.set_image(_icon.IconWidget(ICON_ENGINE, size[0])) item.connect("activate", self.__im_menu_item_activate_cb, engine) menu.add(item) else: item = gtk.MenuItem(lang) menu.add(item) submenu = gtk.Menu() item.set_submenu(submenu) for engine in tmp[lang]: item = gtk.ImageMenuItem(engine.longname) if engine.icon: item.set_image(_icon.IconWidget(engine.icon, size[0])) else: item.set_image(_icon.IconWidget(ICON_ENGINE, size[0])) item.connect("activate", self.__im_menu_item_activate_cb, engine) submenu.add(item) item = gtk.ImageMenuItem(_("Turn off input method")) item.set_image(_icon.IconWidget("gtk-close", size[0])) item.connect("activate", self.__im_menu_item_activate_cb, None) menu.add(item) menu.show_all() menu.set_take_focus(False) return menu
def __create_im_menu(self): engines = self.__bus.list_active_engines() current_engine = \ (self.__focus_ic != None and self.__focus_ic.get_engine()) or \ (engines and engines[0]) or \ None size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) menu = gtk.Menu() group = None for i, engine in enumerate(engines): lang = ibus.get_language_name(engine.language) if self.__appindicator: item = gtk.RadioMenuItem(group, "%s - %s" % (lang, engine.longname)) if not group: group = item else: item = gtk.ImageMenuItem("%s - %s" % (lang, engine.longname)) if current_engine and current_engine.name == engine.name: if self.__appindicator: item.set_active(True) else: for widget in item.get_children(): if isinstance(widget, gtk.Label): widget.set_markup("<b>%s</b>" % widget.get_text()) if not self.__appindicator: if engine.icon: item.set_image(_icon.IconWidget(engine.icon, size[0])) else: item.set_image(_icon.IconWidget(ICON_ENGINE, size[0])) item.connect("activate", self.__im_menu_item_activate_cb, engine) menu.add(item) if self.__appindicator: item = gtk.RadioMenuItem(group, _("Input method Off")) if self.__focus_ic == None or not self.__focus_ic.is_enabled(): item.set_active(True) item.connect("activate", self.__im_menu_item_activate_cb, None) else: item = gtk.ImageMenuItem(_("Turn off input method")) item.set_image(_icon.IconWidget("gtk-close", size[0])) item.connect("activate", self.__im_menu_item_activate_cb, None) if self.__focus_ic == None or not self.__focus_ic.is_enabled(): item.set_sensitive(False) menu.add(item) return menu
def __init__(self): try: self.bus = ibus.Bus() except: while self.bus == None: pid = os.spawnlp(os.P_NOWAIT, "ibus-daemon", "ibus-daemon", "--xim") os.time.sleep(1) try: self.bus = ibus.Bus() except: continue self.config = self.bus.get_config() self.engines = self.bus.list_engines() self.engineDict = {} self.langWiseList = {} for e in self.engines: self.engineDict[e.name] = e l = ibus.get_language_name(e.language) if l not in self.langWiseList: self.langWiseList[l] = [] self.langWiseList[l].append(e)
def __fill_text_view(self): text_buffer = self.__text_view.get_buffer() self.__create_tags(text_buffer) iter = text_buffer.get_iter_at_offset(0) text_buffer.insert_with_tags_by_name(iter, "\n ", "left_margin_16") text_buffer.insert_pixbuf(iter, self.__load_icon(self.__engine_desc.icon)) text_buffer.insert_with_tags_by_name(iter, "\n%s\n" % self.__engine_desc.longname, "heading", "left_margin_16") text_buffer.insert_with_tags_by_name(iter, _("Language: %s\n") % ibus.get_language_name(self.__engine_desc.language), "small", "bold", "left_margin_16") text_buffer.insert_with_tags_by_name(iter, _("Keyboard layout: %s\n") % self.__engine_desc.layout, "small", "bold", "left_margin_16") text_buffer.insert_with_tags_by_name(iter, _("Author: %s\n") % self.__engine_desc.author, "small", "bold", "left_margin_16") text_buffer.insert_with_tags_by_name(iter, _("Description:\n"), "small", "bold", "left_margin_16") text_buffer.insert_with_tags_by_name(iter, self.__engine_desc.description, "wrap_text", "left_margin_32")
def __name_cell_data_cb(self, celllayout, renderer, model, iter): engine = self.__model.get_value(iter, 0) renderer.set_property("sensitive", True) language = ibus.get_language_name(engine.language) renderer.set_property("text", "%s - %s" % (language, engine.longname))
def __init_config_layouts(self): if not ibusxkb.XKBConfigRegistry.have_xkb(): button = self.__builder.get_object("button_config_layouts") button.hide() return self.__dialog_config_layouts = self.__builder.get_object("dialog_config_layouts") self.__button_config_layouts_cancel = self.__builder.get_object("button_config_layouts_cancel") self.__button_config_layouts_cancel.connect("clicked", self.__button_config_layouts_cancel_cb) self.__button_config_layouts_ok = self.__builder.get_object("button_config_layouts_ok") self.__button_config_layouts_ok.connect("clicked", self.__button_config_layouts_ok_cb) self.__vbox_all_keyboard_layouts = self.__builder.get_object("vbox_all_keyboard_layouts") xkb_engines = self.__get_xkb_engines() if len(xkb_engines) > 0: button = self.__builder.get_object("button_config_layouts") button.connect("clicked", self.__button_config_layouts_cb) button.set_sensitive(True) engine_dict = {} for engine in xkb_engines: if not engine.name.startswith("xkb:layout:"): continue lang = ibus.get_language_name(engine.language) if lang not in engine_dict: engine_dict[lang] = [] engine_dict[lang].append(engine) keys = engine_dict.keys() keys.sort() if ibus.get_language_name("Other") in keys: keys.remove(ibus.get_language_name("Other")) keys += [ibus.get_language_name("Other")] preload_xkb_engines = self.__xkblayoutconfig.get_preload_layouts() for lang in keys: expander = gtk.Expander("") self.__vbox_all_keyboard_layouts.pack_start(expander, True, True, 0) expander.show() label = expander.get_label_widget() label.set_label(lang) align = gtk.Alignment(0, 0, 1, 0) align.set_padding(6, 0, 18, 0) expander.add(align) align.show() vbox = gtk.VBox(False, 0) align.add(vbox) vbox.show() def cmp_engine(a, b): if a.rank == b.rank: return cmp(a.longname, b.longname) return int(b.rank - a.rank) engine_dict[lang].sort(cmp_engine) for engine in engine_dict[lang]: sub_name = engine.name[len("xkb:layout:"):] layout_list = sub_name.split(':') if len(layout_list) > 1: layout = "%s(%s)" % (layout_list[0], layout_list[1]) else: layout = layout_list[0] has_preloaded = False for preload_name in preload_xkb_engines: preload_name = str(preload_name) if len(preload_name) == 0: continue if layout == preload_name: has_preloaded = True break checkbutton = gtk.CheckButton(engine.longname) checkbutton.set_data("layout", layout) if has_preloaded: checkbutton.set_active(True) vbox.pack_start(checkbutton, False, True, 0) checkbutton.show()