gnome-shell/aboutMenu.js
Bjørn Lie b9543d1153 Accepting request 503995 from home:xiaoguang_wang:branches:GNOME:Factory
SLE sync

- Drop gnome-shell-774381-app-window-overlay-app-list.patch:
  Fixed upstream.
- Add gnome-shell-774381-app-window-overlay-app-list.patch:
  Fix app windows overlay app list in overview screen (bsc#1008539,
  bgo#774381).

- Add SUSE logo on lock screen for GNOME theme (bsc#1007468):
  + gnome-shell-1007468-lock-screen-SUSE-logo-missing.patch
  + sle-background.png

- Drop gnome-shell-sle-theme.patch (bsc#999592): the patch is
  included in gnome-shell-gdm-login-applet.patch.
- Drop source SLE-theme.tar.gz: SLE12SP2 doesn't use this source
  any more.
- Update gnome-shell-gdm-login-applet.patch:
  + Use dbus function to get hostname
- Add aboutMenu.js: Create from gnome-shell-gdm-login-applet.patch

OBS-URL: https://build.opensuse.org/request/show/503995
OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gnome-shell?expand=0&rev=305
2017-06-20 16:51:00 +00:00

151 lines
5.2 KiB
JavaScript

// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Clutter = imports.gi.Clutter;
const St = imports.gi.St;
const DBus = imports.gi.DBus;
const PanelMenu = imports.ui.panelMenu;
const AboutMenuButton = new Lang.Class({
Name: 'AboutMenuButton',
Extends: PanelMenu.Button,
_init: function() {
this._hostname = null;
this._updateHostnameId = 0;
this._ticket = 1;
let hbox;
let vbox;
let menuAlignment = 0.25;
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
menuAlignment = 1.0 - menuAlignment;
this.parent(menuAlignment, 'About Me');
this.about_hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' });
this.hostname_label = new St.Label({y_align: Clutter.ActorAlign.CENTER});
this.about_hbox.add_child(this.hostname_label);
this.actor.add_child(this.about_hbox);
hbox = new St.BoxLayout({ name: 'aboutArea' });
this.menu.box.add_child(hbox);
vbox = new St.BoxLayout({vertical: true});
hbox.add(vbox);
///// Section: read '/etc/os-release' to get pretty name
//
// Note: previously this is defaulted to 'SUSE Linux Enterprise', now
// let's use a "safer" option.
let sysinfo_text = 'SUSE Linux';
try {
let success, contents, tag;
let _os_release = Gio.File.new_for_path('/etc/os-release');
[success, contents, tag] = _os_release.load_contents(null);
let osReleaseContentStr = contents.toString();
let prettyNameReg = /^PRETTY_NAME="(.+)"/;
let match = null;
for (let line of osReleaseContentStr.split('\n')) {
match = prettyNameReg.exec(line);
if (match) {
sysinfo_text = match[1];
}
}
}
catch (e) {
// NOTE soft fail, 'sysinfo_text' is the default
warn('ERROR: fail to read /etc/os-release');
}
this._sysinfo = new St.Label({ text: sysinfo_text, can_focus: true });
vbox.add(this._sysinfo);
this.actor.hide();
this._updateHostnameId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
this._ticket,
Lang.bind(this, function() {
if (this._ticket < 60*60)
this._ticket *= 2;
this._updateHostnameId = 0;
this._updateHostname();
return false;
}));
return;
},
_updateHostname: function(){
let hostname_text = get_hostname();
if ((this._hostname == null) || (this._hostname != hostname_text)) {
this._ticket = 1;
this._hostname = hostname_text;
this.hostname_label.set_text(this._hostname);
this.actor.show();
}
this._updateHostnameId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT,
this._ticket,
Lang.bind(this, function() {
if (this._ticket < 60*60)
this._ticket *= 2;
this._updateHostnameId = 0;
this._updateHostname();
return false;
}));
},
_destroy: function() {
this._ticket = 1;
if (this._updateHostnameId) {
GLib.source_remove (this._updateHostnameId);
this._updateHostnameId = 0;
}
},
});
function get_hostname() {
let hostname;
let interface_name = [GLib.Variant.new_string('org.freedesktop.hostname1'),
GLib.Variant.new_string('Hostname')];
let call = {
bus_name: 'org.freedesktop.hostname1',
object_path: '/org/freedesktop/hostname1',
interface_name: 'org.freedesktop.DBus.Properties',
method_name: 'Get',
parameters: GLib.Variant.new_tuple(interface_name, 2),
reply_type: null,
flags: Gio.DBusCallFlags.NONE,
timeout_msec: -1,
cancellable: null,
};
try {
let dbusConnection = Gio.bus_get_sync(DBus.BusType.SYSTEM, null);
let message = dbusConnection.call_sync(
call.bus_name,
call.object_path,
call.interface_name,
call.method_name,
call.parameters,
call.reply_type,
call.flags,
call.timeout_msec,
call.cancellable
);
hostname = message.get_child_value(0).get_variant().get_string()[0];
} catch(e) {
hostname = 'localhost';
}
return hostname;
}