def __init__(self): # Determine path to system locale-config self.locale_path = '' if os.path.exists('/etc/default/locale'): self.locale_path = '/etc/default/locale' else: self.locale_path = '/etc/locale.conf' # Prepare the APT cache self.cache = apt.Cache() self.cache_updated = False # load our glade ui file in self.builder = Gtk.Builder() self.builder.set_translation_domain("mintlocale") self.builder.add_from_file('/usr/share/linuxmint/mintlocale/im.ui') self.window = self.builder.get_object("main_window") self.window.set_title(_("Input Method")) XApp.set_window_icon_name(self.window, "preferences-desktop-keyboard") self.window.connect("destroy", Gtk.main_quit) self.im_combo = self.builder.get_object("im_combo") model = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING) cell = Gtk.CellRendererText() self.im_combo.pack_start(cell, True) self.im_combo.add_attribute(cell, 'text', IM_NAME) self.im_combo.set_model(model) self.ImConfig = ImConfig() self.im_languages = [] self.im_languages.append( IMLanguage("zh-hans", "fcitx:ibus", self.builder.get_object("button_szh"), self)) self.im_languages.append( IMLanguage("zh-hant", "fcitx:ibus", self.builder.get_object("button_tzh"), self)) self.im_languages.append( IMLanguage("ja", "fcitx:ibus", self.builder.get_object("button_ja"), self)) self.im_languages.append( IMLanguage("th", "fcitx:ibus", self.builder.get_object("button_th"), self)) self.im_languages.append( IMLanguage("vi", "fcitx:ibus", self.builder.get_object("button_vi"), self)) self.im_languages.append( IMLanguage("ko", "fcitx:ibus", self.builder.get_object("button_ko"), self)) self.im_languages.append( IMLanguage("te", "ibus", self.builder.get_object("button_te"), self)) self.im_loaded = False # don't react to im changes until we're fully loaded (we're loading that combo asynchronously) self.im_combo.connect("changed", self.on_combobox_input_method_changed) self.lock_ui() self.check_input_methods() self.window.show_all()
def __init__(self): # load our glade ui file in self.builder = Gtk.Builder() self.builder.set_translation_domain("mintlocale") self.builder.add_from_file( '/usr/lib/linuxmint/mintLocale/mintLocale.ui') self.window = self.builder.get_object("main_window") self.builder.get_object("main_window").connect("destroy", Gtk.main_quit) # set up larger components. self.builder.get_object("main_window").set_title( _("Language Settings")) toolbar = Gtk.Toolbar() toolbar.get_style_context().add_class("primary-toolbar") self.builder.get_object("box1").pack_start(toolbar, False, False, 0) stack = Gtk.Stack() stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT_RIGHT) stack.set_transition_duration(150) self.builder.get_object("box1").pack_start(stack, True, True, 0) stack_switcher = Gtk.StackSwitcher() stack_switcher.set_stack(stack) tool_item = Gtk.ToolItem() tool_item.set_expand(True) tool_item.get_style_context().add_class("raised") toolbar.insert(tool_item, 0) switch_holder = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) switch_holder.set_border_width(1) tool_item.add(switch_holder) switch_holder.pack_start(stack_switcher, True, True, 0) stack_switcher.set_halign(Gtk.Align.CENTER) toolbar.show_all() size_group = Gtk.SizeGroup.new(Gtk.SizeGroupMode.HORIZONTAL) self.locale_button = PictureChooserButton(num_cols=2, button_picture_size=16, has_button_label=True) size_group.add_widget(self.locale_button) self.region_button = PictureChooserButton(num_cols=2, button_picture_size=16, has_button_label=True) size_group.add_widget(self.region_button) self.locale_system_wide_button = Gtk.Button() self.locale_system_wide_button.set_label(_("Apply System-Wide")) self.locale_system_wide_button.connect( "clicked", self.button_system_language_clicked) size_group.add_widget(self.locale_system_wide_button) self.locale_install_button = Gtk.Button() self.locale_install_button.set_label( _("Install / Remove Languages...")) self.locale_install_button.connect("clicked", self.button_install_remove_clicked) size_group.add_widget(self.locale_install_button) self.system_label = Gtk.Label() self.install_label = Gtk.Label() page = SettingsPage() stack.add_titled(page, "language", _("Language")) language_settings = page.add_section(_("Language")) row = SettingsRow(self.locale_button) label = Gtk.Label.new() label.set_markup( "<b>%s</b>\n<small>%s</small>" % (_("Language"), _("Language, interface, date and time..."))) row.add_label(label) language_settings.add_row(row) row = SettingsRow(self.region_button) label = Gtk.Label.new() label.set_markup( "<b>%s</b>\n<small>%s</small>" % (_("Region"), _("Numbers, currency, addresses, measurement..."))) row.add_label(label) language_settings.add_row(row) self.system_row = SettingsRow(self.locale_system_wide_button) self.system_row.add_label(self.system_label) self.system_row.set_no_show_all(True) language_settings.add_row(self.system_row) self.install_row = SettingsRow(self.locale_install_button) self.install_row.add_label(self.install_label) self.install_row.set_no_show_all(True) language_settings.add_row(self.install_row) page = SettingsPage() stack.add_titled(page, "input settings", _("Input method")) size_group = Gtk.SizeGroup.new(Gtk.SizeGroupMode.HORIZONTAL) self.im_combo = Gtk.ComboBox() model = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING) cell = Gtk.CellRendererText() self.im_combo.pack_start(cell, True) self.im_combo.add_attribute(cell, 'text', IM_NAME) self.im_combo.set_model(model) size_group.add_widget(self.im_combo) self.ImConfig = ImConfig() label = Gtk.Label() label.set_markup("<small><i>%s</i></small>" % (_( "Input methods are used to write symbols and characters which are not present on the keyboard. They are useful to write in Chinese, Japanese, Korean, Thai, Vietnamese..." ))) label.set_line_wrap(True) page.add(label) self.input_settings = page.add_section(_("Input method")) row = SettingsRow(self.im_combo) label = Gtk.Label(_("Input method")) row.add_label(label) self.input_settings.add_row(row) self.ibus_label = Gtk.Label() self.ibus_label.set_line_wrap(True) self.ibus_button = Gtk.Button() size_group.add_widget(self.ibus_button) self.ibus_button.connect('clicked', self.install_im, 'ibus') self.ibus_row = SettingsRow(self.ibus_button) self.ibus_row.add_label(self.ibus_label) self.ibus_row.set_no_show_all(True) self.input_settings.add_row(self.ibus_row) self.fcitx_label = Gtk.Label() self.fcitx_label.set_line_wrap(True) self.fcitx_button = Gtk.Button() size_group.add_widget(self.fcitx_button) self.fcitx_button.connect('clicked', self.install_im, 'fcitx') self.fcitx_row = SettingsRow(self.fcitx_button) self.fcitx_row.add_label(self.fcitx_label) self.fcitx_row.set_no_show_all(True) self.input_settings.add_row(self.fcitx_row) self.scim_label = Gtk.Label() self.scim_label.set_line_wrap(True) self.scim_button = Gtk.Button() size_group.add_widget(self.scim_button) self.scim_button.connect('clicked', self.install_im, 'scim') self.scim_row = SettingsRow(self.scim_button) self.scim_row.add_label(self.scim_label) self.scim_row.set_no_show_all(True) self.input_settings.add_row(self.scim_row) self.uim_label = Gtk.Label() self.uim_label.set_line_wrap(True) self.uim_button = Gtk.Button() size_group.add_widget(self.uim_button) self.uim_button.connect('clicked', self.install_im, 'uim') self.uim_row = SettingsRow(self.uim_button) self.uim_row.add_label(self.uim_label) self.uim_row.set_no_show_all(True) self.input_settings.add_row(self.uim_row) self.gcin_label = Gtk.Label() self.gcin_label.set_line_wrap(True) self.gcin_button = Gtk.Button() size_group.add_widget(self.gcin_button) self.gcin_button.connect('clicked', self.install_im, 'gcin') self.gcin_row = SettingsRow(self.gcin_button) self.gcin_row.add_label(self.gcin_label) self.gcin_row.set_no_show_all(True) self.input_settings.add_row(self.gcin_row) self.im_loaded = False # don't react to im changes until we're fully loaded (we're loading that combo asynchronously) self.im_combo.connect("changed", self.on_combobox_input_method_changed) stack.show_all() self.pam_environment_path = os.path.join(GLib.get_home_dir(), ".pam_environment") self.dmrc_path = os.path.join(GLib.get_home_dir(), ".dmrc") self.dmrc = ConfigParser.ConfigParser() self.dmrc.optionxform = str # force case sensitivity on ConfigParser self.dmrc.read(self.dmrc_path) if not self.dmrc.has_section('Desktop'): self.dmrc.add_section('Desktop') current_user = GLib.get_user_name() self.current_language = None dmrc_language = None env_language = os.environ['LANG'] if self.dmrc.has_option('Desktop', 'Language'): dmrc_language = self.dmrc.get('Desktop', 'Language') if dmrc_language is not None: self.current_language = dmrc_language else: self.current_language = env_language print "User language in .dmrc: %s" % dmrc_language print "User language in $LANG: %s" % env_language print "Current language: %s" % self.current_language if 'LC_NUMERIC' in os.environ: self.current_region = os.environ['LC_NUMERIC'] else: self.current_region = self.current_language if os.path.exists(self.pam_environment_path): with open(self.pam_environment_path, 'r') as pam_file: for line in pam_file: line = line.strip() if line.startswith("LC_NUMERIC="): self.current_region = line.split("=")[1].replace( "\"", "").replace("'", "").strip() print "Current region: %s" % self.current_region # Replace utf8 with UTF-8 (lightDM GTK greeter messes that up) self.current_language = self.current_language.replace( ".utf8", ".UTF-8") self.current_region = self.current_region.replace(".utf8", ".UTF-8") self.build_lang_list() self.set_system_locale() self.set_num_installed() self.accountService = AccountsService.UserManager.get_default( ).get_user(current_user) self.accountService.connect('notify::is-loaded', self.accountservice_ready) self.accountService.connect('changed::', self.accountservice_changed) groups = grp.getgrall() for group in groups: (name, pw, gid, mem) = group if name in ("adm", "sudo"): for user in mem: if current_user == user: self.system_row.set_no_show_all(False) self.install_row.set_no_show_all(False) language_settings.show_all() self.ibus_row.set_no_show_all(False) self.fcitx_row.set_no_show_all(False) self.scim_row.set_no_show_all(False) self.uim_row.set_no_show_all(False) self.gcin_row.set_no_show_all(False) self.input_settings.hide() break self.read_im_info() self.check_input_methods()