本帖最后由 airycanon 于 2011-10-16 15:18:36 编辑

解决方案 »

  1.   


    const AccountsService = imports.gi.AccountsService;
    const DBus = imports.dbus;
    const Gio = imports.gi.Gio;
    const GLib = imports.gi.GLib;
    const Lang = imports.lang;
    const Pango = imports.gi.Pango;
    const Shell = imports.gi.Shell;
    const St = imports.gi.St;
    const Tp = imports.gi.TelepathyGLib;
    const UPowerGlib = imports.gi.UPowerGlib;const GnomeSession = imports.misc.gnomeSession;
    const Main = imports.ui.main;
    const PanelMenu = imports.ui.panelMenu;
    const PopupMenu = imports.ui.popupMenu;
    const ScreenSaver = imports.misc.screenSaver;
    const Util = imports.misc.util;const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
    const DISABLE_USER_SWITCH_KEY = 'disable-user-switching';
    const DISABLE_LOCK_SCREEN_KEY = 'disable-lock-screen';
    const DISABLE_LOG_OUT_KEY = 'disable-log-out';const DIALOG_ICON_SIZE = 64;const IMStatus = {
        AVAILABLE: 0,
        BUSY: 1,
        HIDDEN: 2,
        AWAY: 3,
        IDLE: 4,
        OFFLINE: 5,
        LAST: 6
    };   _onDestroy: function() {
            this._user.disconnect(this._userLoadedId);
            this._user.disconnect(this._userChangedId);
        },    _updateUserName: function() {
            if (this._user.is_loaded)
                this._name.set_text(this._user.get_real_name());
            else
                this._name.set_text("");
        },    _updateSwitchUser: function() {
            let allowSwitch = !this._lockdownSettings.get_boolean(DISABLE_USER_SWITCH_KEY);
            if (allowSwitch && this._userManager.can_switch ())
                this._loginScreenItem.actor.show();
            else
                this._loginScreenItem.actor.hide();
        },    _updateLogout: function() {
            let allowLogout = !this._lockdownSettings.get_boolean(DISABLE_LOG_OUT_KEY);
            if (allowLogout)
                this._logoutItem.actor.show();
            else
                this._logoutItem.actor.hide();
        },    _updateLockScreen: function() {
            let allowLockScreen = !this._lockdownSettings.get_boolean(DISABLE_LOCK_SCREEN_KEY);
            if (allowLockScreen)
                this._lockScreenItem.actor.show();
            else
                this._lockScreenItem.actor.hide();
        },    _updateHaveShutdown: function() {
            this._session.CanShutdownRemote(Lang.bind(this,
                function(result, error) {
                    if (!error) {
                        this._haveShutdown = result;
                        this._updateSuspendOrPowerOff();
                    }
                }));
        },    _updateSuspendOrPowerOff: function() {
            this._haveSuspend = this._upClient.get_can_suspend();        if (!this._suspendOrPowerOffItem)
                return;        if (!this._haveShutdown && !this._haveSuspend)
                this._suspendOrPowerOffItem.actor.hide();
            else
                this._suspendOrPowerOffItem.actor.show();        // If we can't suspend show Power Off... instead
            // and disable the alt key
            if (!this._haveSuspend) {
                this._suspendOrPowerOffItem.updateText(_("Power Off..."), null);
            } else if (!this._haveShutdown) {
                this._suspendOrPowerOffItem.updateText(_("Suspend"), null);
            } else {
                this._suspendOrPowerOffItem.updateText(_("Suspend"), _("Power Off..."));
            }
        },    _updateSwitch: function(presence, status) {
            let active = status == GnomeSession.PresenceStatus.AVAILABLE;
            this._notificationsSwitch.setToggleState(active);
        },    _updatePresenceIcon: function(accountMgr, presence, status, message) {
            if (presence == Tp.ConnectionPresenceType.AVAILABLE)
                this._iconBox.child = this._availableIcon;
            else if (presence == Tp.ConnectionPresenceType.BUSY)
                this._iconBox.child = this._busyIcon;
            else if (presence == Tp.ConnectionPresenceType.HIDDEN)
                this._iconBox.child = this._invisibleIcon;
            else if (presence == Tp.ConnectionPresenceType.AWAY)
                this._iconBox.child = this._awayIcon;
            else if (presence == Tp.ConnectionPresenceType.EXTENDED_AWAY)
                this._iconBox.child = this._idleIcon;
            else
                this._iconBox.child = this._offlineIcon;
        },    _createSubMenu: function() {
            let item;        item = new IMStatusChooserItem();
            item.connect('activate', Lang.bind(this, this._onMyAccountActivate));
            this.menu.addMenuItem(item);
            this._statusChooser = item;        item = new PopupMenu.PopupSwitchMenuItem(_("Notifications"));
            item.connect('activate', Lang.bind(this, this._updatePresenceStatus));
            this.menu.addMenuItem(item);
            this._notificationsSwitch = item;        item = new PopupMenu.PopupSeparatorMenuItem();
            this.menu.addMenuItem(item);        item = new PopupMenu.PopupMenuItem(_("Online Accounts"));
            item.connect('activate', Lang.bind(this, this._onOnlineAccountsActivate));
            this.menu.addMenuItem(item);        item = new PopupMenu.PopupMenuItem(_("System Settings"));
            item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
            this.menu.addMenuItem(item);        item = new PopupMenu.PopupSeparatorMenuItem();
            this.menu.addMenuItem(item);        item = new PopupMenu.PopupMenuItem(_("Lock Screen"));
            item.connect('activate', Lang.bind(this, this._onLockScreenActivate));
            this.menu.addMenuItem(item);
            this._lockScreenItem = item;        item = new PopupMenu.PopupMenuItem(_("Switch User"));
            item.connect('activate', Lang.bind(this, this._onLoginScreenActivate));
            this.menu.addMenuItem(item);
            this._loginScreenItem = item;        item = new PopupMenu.PopupMenuItem(_("Log Out..."));
            item.connect('activate', Lang.bind(this, this._onQuitSessionActivate));
            this.menu.addMenuItem(item);
            this._logoutItem = item;        item = new PopupMenu.PopupSeparatorMenuItem();
            this.menu.addMenuItem(item);        item = new PopupMenu.PopupAlternatingMenuItem(_("Suspend"),
                                                          _("Power Off..."));
            this.menu.addMenuItem(item);
            this._suspendOrPowerOffItem = item;
            item.connect('activate', Lang.bind(this, this._onSuspendOrPowerOffActivate));
            this._updateSuspendOrPowerOff();
        },    _updatePresenceStatus: function(item, event) {
            let status;        if (item.state) {
                status = GnomeSession.PresenceStatus.AVAILABLE;
            } else {
                status = GnomeSession.PresenceStatus.BUSY;            let [presence, s, msg] = this._account_mgr.get_most_available_presence();
                let newPresence = this._statusChooser.getIMPresenceForSessionStatus(status);
                if (newPresence != presence &&
                    newPresence == Tp.ConnectionPresenceType.BUSY)
                    Main.notify(_("Your chat status will be set to busy"),
                                _("Notifications are now disabled, including chat messages. Your online status has been adjusted to let others know that you might not see their messages."));
            }        this._presence.setStatus(status);
        },    _onMyAccountActivate: function() {
            Main.overview.hide();
            let app = Shell.AppSystem.get_default().lookup_setting('gnome-user-accounts-panel.desktop');
            app.activate();
        },    _onOnlineAccountsActivate: function() {
            Main.overview.hide();
            let app = Shell.AppSystem.get_default().lookup_setting('gnome-online-accounts-panel.desktop');
            app.activate(-1);
        },    _onPreferencesActivate: function() {
            Main.overview.hide();
            let app = Shell.AppSystem.get_default().lookup_app('gnome-control-center.desktop');
            app.activate();
        },    _onLockScreenActivate: function() {
            Main.overview.hide();
            this._screenSaverProxy.LockRemote();
        },    _onLoginScreenActivate: function() {
            Main.overview.hide();
            // Ensure we only move to GDM after the screensaver has activated; in some
            // OS configurations, the X server may block event processing on VT switch
            this._screenSaverProxy.SetActiveRemote(true, Lang.bind(this, function() {
                this._userManager.goto_login_session();
            }));
        },    _onQuitSessionActivate: function() {
            Main.overview.hide();
            this._session.LogoutRemote(0);
        },    _onSuspendOrPowerOffActivate: function() {
            Main.overview.hide();        if (this._haveSuspend &&
                this._suspendOrPowerOffItem.state == PopupMenu.PopupAlternatingMenuItemState.DEFAULT) {
                // Ensure we only suspend after the screensaver has activated
                this._screenSaverProxy.SetActiveRemote(true, Lang.bind(this, function() {
                    this._upClient.suspend_sync(null);
                }));
            } else {
                this._session.ShutdownRemote();
            }
        }
    };
      

  2.   

    不是啊,真的是gnome-shell的脚本,很奇怪,就那两个选项,官方的显示中文,自定义的就显示英文……