Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
GNOME:STABLE:45
gnome-shell
gnome-shell-gdm-login-applet.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File gnome-shell-gdm-login-applet.patch of Package gnome-shell
Index: gnome-shell-45.3/js/js-resources.gresource.xml =================================================================== --- gnome-shell-45.3.orig/js/js-resources.gresource.xml +++ gnome-shell-45.3/js/js-resources.gresource.xml @@ -42,6 +42,7 @@ <file>misc/util.js</file> <file>misc/weather.js</file> + <file>ui/aboutMenu.js</file> <file>ui/accessDialog.js</file> <file>ui/altTab.js</file> <file>ui/animation.js</file> Index: gnome-shell-45.3/js/ui/panel.js =================================================================== --- gnome-shell-45.3.orig/js/ui/panel.js +++ gnome-shell-45.3/js/ui/panel.js @@ -36,6 +36,7 @@ import * as ThunderboltStatus from './st import * as AutoRotateStatus from './status/autoRotate.js'; import * as BackgroundAppsStatus from './status/backgroundApps.js'; +import {AboutMenuButton} from './aboutMenu.js'; import {DateMenuButton} from './dateMenu.js'; import {ATIndicator} from './status/accessibility.js'; import {InputSourceIndicator} from './status/keyboard.js'; @@ -633,6 +634,7 @@ class QuickSettings extends PanelMenu.Bu }); const PANEL_ITEM_IMPLEMENTATIONS = { + 'aboutMenu': AboutMenuButton, 'activities': ActivitiesButton, 'appMenu': AppMenuButton, 'quickSettings': QuickSettings, Index: gnome-shell-45.3/js/ui/sessionMode.js =================================================================== --- gnome-shell-45.3.orig/js/ui/sessionMode.js +++ gnome-shell-45.3/js/ui/sessionMode.js @@ -60,7 +60,7 @@ const _modes = { ? ['networkAgent', 'polkitAgent'] : ['polkitAgent'], panel: { - left: [], + left: ['aboutMenu'], center: ['dateMenu'], right: ['dwellClick', 'a11y', 'keyboard', 'quickSettings'], }, Index: gnome-shell-45.3/js/ui/aboutMenu.js =================================================================== --- /dev/null +++ gnome-shell-45.3/js/ui/aboutMenu.js @@ -0,0 +1,144 @@ +// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- + +import GLib from 'gi://GLib'; +import Gio from 'gi://Gio'; +import Clutter from 'gi://Clutter'; +import St from 'gi://St'; +import GObject from 'gi://GObject'; + +import * as PanelMenu from './panelMenu.js'; + +export const AboutMenuButton = GObject.registerClass( +class AboutMenuButton extends PanelMenu.Button { + _init() { + super._init(0.5); + + this._hostname = null; + this._updateHostnameId = 0; + this._ticket = 1; + + let hbox; + let vbox; + + 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.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 _os_release = Gio.File.new_for_path('/etc/os-release'); + let [success_, contents] = _os_release.load_contents(null); + + let osReleaseContentStr = new TextDecoder().decode(contents); + 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.hide(); + + this._updateHostnameId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, + this._ticket, + ()=> { + if (this._ticket < 60*60) + this._ticket *= 2; + this._updateHostnameId = 0; + this._updateHostname(); + return GLib.SOURCE_REMOVE; + }); + + return; + } + + _updateHostname(){ + 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.show(); + } + this._updateHostnameId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, + this._ticket, + ()=> { + if (this._ticket < 60*60) + this._ticket *= 2; + this._updateHostnameId = 0; + this._updateHostname(); + return GLib.SOURCE_REMOVE; + }); + } + + _destroy() { + 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), + reply_type: null, + flags: Gio.DBusCallFlags.NONE, + timeout_msec: -1, + cancellable: null, + }; + + try { + let dbusConnection = Gio.bus_get_sync(Gio.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; +}
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor