changes for the current iso

This commit is contained in:
Tio 2021-04-12 23:48:16 +02:00
parent 97f2070a7d
commit 4dc2310ed1
327 changed files with 6367 additions and 3074 deletions

View File

@ -52,7 +52,6 @@ ffmpegthumbnailer
linux510-headers linux510-headers
gnome-firmware gnome-firmware
manjaro-printer manjaro-printer
linux-latest
rebuild-detector rebuild-detector
@ -102,7 +101,6 @@ gnome-font-viewer
gnome-keyring gnome-keyring
fprintd #need for finger id reader fprintd #need for finger id reader
gnome-session gnome-session
gnome-initial-setup
gnome-settings-daemon gnome-settings-daemon
gnome-shell gnome-shell
gnome-system-log gnome-system-log

View File

@ -0,0 +1,60 @@
GRUB_DEFAULT=saved
GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=hidden
GRUB_DISTRIBUTOR="TROMjaro"
GRUB_CMDLINE_LINUX_DEFAULT="quiet udev.log_priority=3"
GRUB_CMDLINE_LINUX=""
# If you want to enable the save default function, uncomment the following
# line, and set GRUB_DEFAULT to saved.
GRUB_SAVEDEFAULT=true
# Preload both GPT and MBR modules so that they are not missed
GRUB_PRELOAD_MODULES="part_gpt part_msdos"
# Uncomment to enable booting from LUKS encrypted devices
#GRUB_ENABLE_CRYPTODISK=y
# Uncomment to use basic console
GRUB_TERMINAL_INPUT=console
# Uncomment to disable graphical terminal
#GRUB_TERMINAL_OUTPUT=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command 'videoinfo'
GRUB_GFXMODE=auto
# Uncomment to allow the kernel use the same resolution used by grub
GRUB_GFXPAYLOAD_LINUX=keep
# Uncomment if you want GRUB to pass to the Linux kernel the old parameter
# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx"
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_RECOVERY=true
# Uncomment this option to enable os-prober execution in the grub-mkconfig command
GRUB_DISABLE_OS_PROBER=false
# Uncomment and set to the desired menu colors. Used by normal and wallpaper
# modes only. Entries specified as foreground/background.
GRUB_COLOR_NORMAL="light-gray/black"
GRUB_COLOR_HIGHLIGHT="green/black"
# Uncomment one of them for the gfx desired, a image background or a gfxtheme
#GRUB_BACKGROUND="/usr/share/grub/background.png"
#GRUB_THEME="/path/to/gfxtheme"
# Uncomment to get a beep at GRUB start
#GRUB_INIT_TUNE="480 440 1"
# Uncomment to ensure that the root filesystem is mounted read-only so that
# systemd-fsck can run the check automatically. We use 'fsck' by default, which
# needs 'rw' as boot parameter, to avoid delay in boot-time. 'fsck' needs to be
# removed from 'mkinitcpio.conf' to make 'systemd-fsck' work.
# See also Arch-Wiki: https://wiki.archlinux.org/index.php/Fsck#Boot_time_checking
#GRUB_ROOT_FS_RO=true

View File

@ -23,13 +23,162 @@ const { Atk, St, GObject, GLib } = imports.gi;
const Gvc = imports.gi.Gvc; const Gvc = imports.gi.Gvc;
const ExtensionUtils = imports.misc.extensionUtils; const ExtensionUtils = imports.misc.extensionUtils;
const Config = imports.misc.config;
const Me = ExtensionUtils.getCurrentExtension(); const Me = ExtensionUtils.getCurrentExtension();
const Lib = Me.imports.convenience; const Lib = Me.imports.convenience;
const _d = Lib._log; const _d = Lib._log;
const Prefs = Me.imports.prefs; const Prefs = Me.imports.prefs;
const SignalManager = Lib.SignalManager; const SignalManager = Lib.SignalManager;
let maxId = -1; function _isDeviceInValid(uidevice) {
return (!uidevice || (uidevice.description != null && uidevice.description.match(/Dummy\s+(Output|Input)/gi)));
}
function getMixerControl() {
return VolumeMenu.getMixerControl();
}
var ProfileMenuItem = class ProfileMenuItem
extends PopupMenu.PopupMenuItem {
constructor(id, title, profileName, callback) {
super(title);
this._init(id, title, profileName, callback);
}
_init(id, title, profileName, callback) {
if (super._init) {
super._init(title);
}
_d("ProfileMenuItem: _init:" + title);
this.id = id;
this.profileName = profileName;
this._ornamentLabel.set_style("min-width: 3em;margin-left: 3em;");
this.setProfileActive(false);
this.connect('activate', () => {
_d("Activating Profile:" + id + profileName);
callback(this.id, this.profileName);
});
}
setProfileActive(active) {
if (active) {
this.setOrnament(PopupMenu.Ornament.DOT);
// this._ornamentLabel.text = "\u2727";
this._ornamentLabel.text = "\u266A";
if (this.add_style_pseudo_class) {
this.remove_style_pseudo_class('insensitive');
}
else {
this.actor.remove_style_pseudo_class('insensitive');
}
}
else {
this.setOrnament(PopupMenu.Ornament.NONE);
if (this.add_style_pseudo_class) {
this.add_style_pseudo_class('insensitive');
}
else {
this.actor.add_style_pseudo_class('insensitive');
}
}
}
setVisibility(visibility) {
this.actor.visible = visibility;
}
}
var SoundDeviceMenuItem = class SoundDeviceMenuItem extends PopupMenu.PopupImageMenuItem {
constructor(id, title, icon_name, profiles, callback, profileCallback) {
super(title, icon_name);
this._init(id, title, icon_name, profiles, callback, profileCallback);
}
_init(id, title, icon_name, profiles, callback, profileCallback) {
if (super._init) {
super._init(title, icon_name);
}
_d("SoundDeviceMenuItem: _init:" + title);
this.id = id;
this.title = title;
this.icon_name = icon_name;
this.profiles = (profiles) ? profiles : [];
this.profilesitems = new Map();
for (let profile of this.profiles) {
if (!this.profilesitems.has(profile.name)) {
this.profilesitems.set(profile.name, new ProfileMenuItem(id, "Profile: " + profile.human_name, profile.name, profileCallback));
}
}
this.connect('activate', () => {
_d("Device Change request for " + id);
callback(this.id);
});
this.available = true;
this.activeProfile = "";
this.activeDevice = false;
this.visible = false;
}
isAvailable() {
return this.available;
}
setAvailable(_ac) {
this.available = _ac;
}
setActiveProfile(_p) {
if (_p && this.activeProfile != _p) {
if (this.profilesitems.has(this.activeProfile)) {
this.profilesitems.get(this.activeProfile).setProfileActive(false);
}
this.activeProfile = _p;
if (this.profilesitems.has(_p)) {
this.profilesitems.get(_p).setProfileActive(true);
}
}
}
setVisibility(_v) {
this.actor.visible = _v;
if (!_v) {
this.profilesitems.forEach((p) => p.setVisibility(false));
}
this.visible = _v;
};
isVisible() {
return this.visible;
}
setActiveDevice(_a) {
this.activeDevice = _a;
if (!_a) {
this.setOrnament(PopupMenu.Ornament.NONE);
}
else {
this.setOrnament(PopupMenu.Ornament.CHECK);
this._ornamentLabel.text = '\u266B';
}
}
setProfileVisibility(_v) {
this.profilesitems.forEach(p =>
p.setVisibility(_v && this.canShowProfile()));
}
canShowProfile() {
return (this.isVisible() && this.profilesitems.size > 1);
}
}
if (parseFloat(Config.PACKAGE_VERSION) >= 3.34) {
ProfileMenuItem = GObject.registerClass({ GTypeName: 'ProfileMenuItem' }, ProfileMenuItem);
SoundDeviceMenuItem = GObject.registerClass({ GTypeName: 'SoundDeviceMenuItem' }, SoundDeviceMenuItem);
}
var SoundDeviceChooserBase = class SoundDeviceChooserBase { var SoundDeviceChooserBase = class SoundDeviceChooserBase {
@ -37,37 +186,35 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
_d("SDC: init"); _d("SDC: init");
this.menuItem = new PopupMenu.PopupSubMenuMenuItem('Extension initialising...', true); this.menuItem = new PopupMenu.PopupSubMenuMenuItem('Extension initialising...', true);
this.deviceType = deviceType; this.deviceType = deviceType;
this._devices = {}; this._devices = new Map();
this._cards = []; let _control = this._getMixerControl();
this._availableDevicesIds = {};
this._control = VolumeMenu.getMixerControl();
this._settings = Lib.getSettings(Prefs.SETTINGS_SCHEMA); this._settings = Lib.getSettings(Prefs.SETTINGS_SCHEMA);
_d("Constructor" + deviceType); _d("Constructor:" + deviceType);
this._setLog(); this._setLog();
this._signalManager = new SignalManager(); this._signalManager = new SignalManager();
this._signalManager.addSignal(this._settings, "changed::" + Prefs.ENABLE_LOG, this._setLog.bind(this)); this._signalManager.addSignal(this._settings, "changed::" + Prefs.ENABLE_LOG, this._setLog.bind(this));
if (this._control.get_state() == Gvc.MixerControlState.READY) { if (_control.get_state() == Gvc.MixerControlState.READY) {
this._onControlStateChanged(); this._onControlStateChanged(_control);
} }
else { else {
this._controlStateChangeSignal = this._signalManager.addSignal(this._control, "state-changed", this._onControlStateChanged.bind(this)); this._controlStateChangeSignal = this._signalManager.addSignal(_control, "state-changed", this._onControlStateChanged.bind(this));
} }
} }
_getMixerControl() { return getMixerControl(); }
_setLog() { Lib.setLog(this._settings.get_boolean(Prefs.ENABLE_LOG)); } _setLog() { Lib.setLog(this._settings.get_boolean(Prefs.ENABLE_LOG)); }
_onControlStateChanged() { _onControlStateChanged(control) {
if (this._control.get_state() == Gvc.MixerControlState.READY) { if (control.get_state() == Gvc.MixerControlState.READY) {
if (!this._initialised) { if (!this._initialised) {
this._initialised = true; this._initialised = true;
this._signalManager.addSignal(this._control, this.deviceType + "-added", this._deviceAdded.bind(this)); this._signalManager.addSignal(control, this.deviceType + "-added", this._deviceAdded.bind(this));
this._signalManager.addSignal(this._control, this.deviceType + "-removed", this._deviceRemoved.bind(this)); this._signalManager.addSignal(control, this.deviceType + "-removed", this._deviceRemoved.bind(this));
this._signalManager.addSignal(this._control, "active-" + this.deviceType + "-update", this._deviceActivated.bind(this)); this._signalManager.addSignal(control, "active-" + this.deviceType + "-update", this._deviceActivated.bind(this));
this._signalManager.addSignal(this._control, "card-removed", this._updateCards.bind(this));
this._signalManager.addSignal(this._control, "card-added", this._updateCards.bind(this));
this._signalManager.addSignal(this._settings, "changed::" + Prefs.HIDE_ON_SINGLE_DEVICE, this._setChooserVisibility.bind(this)); this._signalManager.addSignal(this._settings, "changed::" + Prefs.HIDE_ON_SINGLE_DEVICE, this._setChooserVisibility.bind(this));
this._signalManager.addSignal(this._settings, "changed::" + Prefs.SHOW_PROFILES, this._setProfileVisibility.bind(this)); this._signalManager.addSignal(this._settings, "changed::" + Prefs.SHOW_PROFILES, this._setProfileVisibility.bind(this));
@ -79,7 +226,6 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
this._signalManager.addSignal(this._settings, "changed::" + this._show_device_signal, this._setVisibility.bind(this)); this._signalManager.addSignal(this._settings, "changed::" + this._show_device_signal, this._setVisibility.bind(this));
//this._portsSettings = JSON.parse(this._settings.get_string(Prefs.PORT_SETTINGS));
this._portsSettings = Prefs.getPortsFromSettings(this._settings); this._portsSettings = Prefs.getPortsFromSettings(this._settings);
/** /**
@ -91,33 +237,25 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
*/ */
let id = 0; let id = 0;
if (maxId < 0) {
let dummyDevice = new Gvc.MixerUIDevice(); let dummyDevice = new Gvc.MixerUIDevice();
maxId = dummyDevice.get_id(); let maxId = dummyDevice.get_id();
}
_d("Max Id:" + maxId); _d("Max Id:" + maxId);
let defaultDevice = this.getDefaultDevice();
while (++id < maxId) { while (++id < maxId) {
let uidevice = this._deviceAdded(this._control, id); this._deviceAdded(control, id);
if (uidevice) { }
let stream = this._control.get_stream_from_device(uidevice); let defaultStream = this.getDefaultStream(control);
if (stream) { if (defaultStream) {
let stream_port = stream.get_port(); let defaultDevice = control.lookup_device_from_stream(defaultStream);
let uidevice_port = uidevice.get_port(); if (defaultDevice) {
this._deviceActivated(control, defaultDevice.get_id());
}
}
if (((!stream_port && !uidevice_port) || let profileVisibility = this._settings.get_boolean(Prefs.SHOW_PROFILES);
(stream_port && stream_port.port === uidevice_port)) && this._setProfileTimer(profileVisibility);
stream == defaultDevice) {
this._deviceActivated(this._control, id);
}
}
}
}
//We dont have any way to understand that the profile has changed in the settings
//Just an useless workaround and potentially crashes shell
this.activeProfileTimeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 2000,
this._setActiveProfile.bind(this));
if (this._controlStateChangeSignal) { if (this._controlStateChangeSignal) {
this._controlStateChangeSignal.disconnect(); this._controlStateChangeSignal.disconnect();
@ -128,197 +266,131 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
} }
} }
_updateCards(control, cardId) { _setProfileTimer(v) {
this._cards = []; //We dont have any way to understand that the profile has changed in the settings
let cards = this._control.get_cards(); //Just an useless workaround
for (let card of cards) { if (v) {
this._cards.push(card.index); if (!this.activeProfileTimeout) {
this.activeProfileTimeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 2000,
this._setActiveProfile.bind(this));
} }
} }
else {
if (this.activeProfileTimeout) {
GLib.source_remove(this.activeProfileTimeout);
this.activeProfileTimeout = null;
}
}
}
_deviceAdded(control, id, dontcheck) { _deviceAdded(control, id, dontcheck) {
let obj = this._devices[id]; let obj = this._devices.get(id);
let uidevice = null; let uidevice = this.lookupDeviceById(control, id);
_d("Added - "+ id); _d("Added - " + id);
if (!obj) { if (!obj) {
uidevice = this.lookupDeviceById(id); if (_isDeviceInValid(uidevice)) {
if (!uidevice || uidevice.description.match(/Dummy\s+(Output|Input)/gi)) {
return null; return null;
} }
obj = new Object(); let title = uidevice.description;
obj.id = id;
obj.uidevice = uidevice;
obj.text = uidevice.description;
if (uidevice.origin != "") if (uidevice.origin != "")
obj.text += " - " + uidevice.origin; title += " - " + uidevice.origin;
/*
* obj.item = this.menu.addAction( obj.text, function() {
* this.changeDevice(uidevice); }.bind(this)); let icon =
* uidevice.get_icon_name(); if(icon == null || icon.trim() == "")
* icon = this.getDefaultIcon(); obj.item._icon = new St.Icon({
* style_class: 'popup-menu-icon', icon_name: this._getIcon(icon)});
* obj.item.actor.insert_child_at_index(obj.item._icon,1);
*/
let icon = uidevice.get_icon_name(); let icon = uidevice.get_icon_name();
if (icon == null || icon.trim() == "") if (icon == null || icon.trim() == "")
icon = this.getDefaultIcon(); icon = this.getDefaultIcon();
let icon_name = this._getIcon(icon); icon = this._getIcon(icon);
obj.item = this.menuItem.menu.addAction(obj.text, function() { obj = new SoundDeviceMenuItem(id, title, icon, Lib.getProfiles(control, uidevice), this._changeDeviceBase.bind(this), this._profileChangeCallback.bind(this));
_d("Device Change request");
this.changeDevice(uidevice);
}.bind(this), icon_name);
if (!obj.profiles) { this.menuItem.menu.addMenuItem(obj);
obj.profiles = Lib.getProfiles(control, uidevice); obj.profilesitems.forEach(i => this.menuItem.menu.addMenuItem(i));
this._devices.set(id, obj);
} }
else if (obj.isAvailable()) {
if (!obj.profilesitems) { return //uidevice;
obj.profilesitems = [];
}
this._devices[id] = obj;
} }
else { else {
uidevice = obj.uidevice; obj.setAvailable(true);
} }
_d("Device Name:" + obj.text); _d("Device Name:" + obj.title);
if (obj.profiles) {
for (let profile of obj.profiles) {
_d("Profile:" + profile.name);
}
}
if (obj.active) {
return uidevice;
}
_d("Added: " + id + ":" + uidevice.description + ":" + uidevice.port_name + ":" + uidevice.origin); _d("Added: " + id + ":" + uidevice.description + ":" + uidevice.port_name + ":" + uidevice.origin);
if (!this._availableDevicesIds[id]) {
this._availableDevicesIds[id] = 0;
}
this._availableDevicesIds[id]++;
obj.active = true; let stream = control.get_stream_from_device(uidevice);
let stream = this._control.get_stream_from_device(uidevice);
if (stream) { if (stream) {
obj.activeProfile = uidevice.get_active_profile(); obj.setActiveProfile(uidevice.get_active_profile());
} }
else {
obj.activeProfile = "";
}
//let showProfiles = this._settings.get_boolean(Prefs.SHOW_PROFILES);
if (obj.profiles) {
for (let profile of obj.profiles) {
let profileItem = obj.profilesitems[profile.name];
if (!profileItem) {
let profileName = profile.name;
profileItem = this.menuItem.menu.addAction("Profile: " + profile.human_name, function() {
_d("i am setting profile, " + profile.human_name + ":" + uidevice.description + ":" + uidevice.port_name);
let stream = this._control.get_stream_from_device(uidevice);
//No Active stream probably inactive port
if (!stream) {
return;
}
if (this._activeDevice && this._activeDevice.uidevice !== uidevice) {
_d("Changing active device to " + uidevice.description + ":" + uidevice.port_name);
this.changeDevice(uidevice);
}
this._control.change_profile_on_selected_device(uidevice, profileName);
this._setDeviceActiveProfile(obj);
}.bind(this));
obj.profilesitems[profileName] = profileItem; if (!dontcheck && !this._canShowDevice(control, uidevice, uidevice.port_available)) {
profileItem.setProfileActive = function(active) {
if (active) {
// this._ornamentLabel.text = "\u2727";
this._ornamentLabel.text = "\u266A";
if (this.add_style_pseudo_class) {
this.add_style_pseudo_class('checked');
this.remove_style_pseudo_class('insensitive');
}
else {
this.actor.add_style_pseudo_class('checked');
this.actor.remove_style_pseudo_class('insensitive');
}
}
else {
this._ornamentLabel.text = "";
if (this.add_style_pseudo_class) {
this.remove_style_pseudo_class('checked');
this.add_style_pseudo_class('insensitive');
}
else {
this.actor.remove_style_pseudo_class('checked');
this.actor.add_style_pseudo_class('insensitive');
}
}
};
// profileItem._ornamentLabel.width = "500em";
profileItem._ornamentLabel.set_style("min-width: 3em;margin-left: 3em;");
}
profileItem.setProfileActive(obj.activeProfile == profile.name);
}
}
if (!dontcheck && !this._canShowDevice(uidevice, uidevice.port_available)) {
this._deviceRemoved(control, id, true); this._deviceRemoved(control, id, true);
} }
this._setChooserVisibility(); this._setChooserVisibility();
this._setVisibility(); this._setVisibility();
return uidevice; return //uidevice;
}
_profileChangeCallback(id, profileName) {
let control = this._getMixerControl();
let uidevice = this.lookupDeviceById(control, id);
if (!uidevice) {
this._deviceRemoved(control, id);
}
else {
_d("i am setting profile, " + profileName + ":" + uidevice.description + ":" + uidevice.port_name);
if (id != this._activeDeviceId) {
_d("Changing active device to " + uidevice.description + ":" + uidevice.port_name);
this._changeDeviceBase(id, control);
}
control.change_profile_on_selected_device(uidevice, profileName);
this._setDeviceActiveProfile(control, this._devices.get(id));
}
} }
_deviceRemoved(control, id, dontcheck) { _deviceRemoved(control, id, dontcheck) {
let obj = this._devices[id]; let obj = this._devices.get(id);
//delete this._devices[id]; //let uidevice = this.lookupDeviceById(control,id);
if (obj && obj.active) { if (obj && obj.isAvailable()) {
_d("Removed: " + id + ":" + obj.uidevice.description + ":" + obj.uidevice.port_name + ":" + obj.uidevice.origin); _d("Removed: " + id + ":" + obj.title);
if (!dontcheck && this._canShowDevice(obj.uidevice, false)) { /*
if (!dontcheck && this._canShowDevice(control, uidevice, false)) {
_d('Device removed, but not hiding as its set to be shown always'); _d('Device removed, but not hiding as its set to be shown always');
return; return;
} }*/
delete this._availableDevicesIds[id]; obj.setVisibility(false);
obj.item.actor.visible = false; obj.setAvailable(false);
obj.active = false;
if (obj.profiles) {
for (let profile of obj.profiles) {
let profileItem = obj.profilesitems[profile.name];
if (profileItem) {
profileItem.actor.visible = false;
}
}
}
/*
if (this.deviceRemovedTimout) { if (this.deviceRemovedTimout) {
GLib.source_remove(this.deviceRemovedTimout); GLib.source_remove(this.deviceRemovedTimout);
this.deviceRemovedTimout = null; this.deviceRemovedTimout = null;
} }
*/
/** /**
* If the active uidevice is removed, then need to activate the * If the active uidevice is removed, then need to activate the
* first available uidevice. However for some cases like Headphones, * first available uidevice. However for some cases like Headphones,
* when the uidevice is removed, Speakers are automatically * when the uidevice is removed, Speakers are automatically
* activated. So, lets wait for sometime before activating. * activated. So, lets wait for sometime before activating.
*/ */
/* THIS MAY NOT BE NEEDED AS SHELL SEEMS TO ACTIVATE NEXT DEVICE
this.deviceRemovedTimout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 1500, function() { this.deviceRemovedTimout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 1500, function() {
_d("Device Removed timeout"); _d("Device Removed timeout");
if (obj === this._activeDevice) { if (obj === this._activeDevice) {
for (let id in this._devices) { let device = Object.keys(this._devices).map((id) => this._devices[id]).find(({active}) => active === true);
let device = this._devices[id]; if(device){
if (device.active == true) { this._changeDeviceBase(this._getMixerControl(), device.id);
this.changeDevice(device.uidevice);
break;
}
} }
} }
this.deviceRemovedTimout = null; this.deviceRemovedTimout = null;
return false; return false;
}.bind(this)); }.bind(this));
*/
this._setChooserVisibility(); this._setChooserVisibility();
this._setVisibility(); this._setVisibility();
} }
@ -326,76 +398,77 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
_deviceActivated(control, id) { _deviceActivated(control, id) {
_d("Activated:- " + id); _d("Activated:- " + id);
let obj = this._devices[id]; let obj = this._devices.get(id);
if (obj && obj !== this._activeDevice) { if (!obj) {
_d("Activated: " + id + ":" + obj.uidevice.description + ":" + obj.uidevice.port_name + ":" + obj.uidevice.origin); _d("Activated device not found in the list of devices, try to add");
if (this._activeDevice) { this._deviceAdded(control, id);
this._activeDevice.item.setOrnament(PopupMenu.Ornament.NONE); obj = this._devices.get(id);
if (this._activeDevice.item.remove_style_pseudo_class) {
this._activeDevice.item.remove_style_pseudo_class('checked');
} }
else { if (obj && id != this._activeDeviceId) {
this._activeDevice.item.actor.remove_style_pseudo_class('checked'); _d("Activated: " + id + ":" + obj.title);
} if (this._activeDeviceId) {
} this._devices.get(this._activeDeviceId).setActiveDevice(false);
this._activeDevice = obj;
obj.item.setOrnament(PopupMenu.Ornament.CHECK);
if (obj.item.add_style_pseudo_class) {
obj.item.add_style_pseudo_class('checked');
}
else {
obj.item.actor.add_style_pseudo_class('checked');
} }
this._activeDeviceId = id;
obj.setActiveDevice(true);
obj.item._ornamentLabel.text = '\u266B'; this.menuItem.label.text = obj.title;
this.menuItem.label.text = obj.text;
if (!this._settings.get_boolean(Prefs.HIDE_MENU_ICONS)) { if (!this._settings.get_boolean(Prefs.HIDE_MENU_ICONS)) {
let icon = obj.uidevice.get_icon_name(); this.menuItem.icon.icon_name = obj.icon_name;
if (icon == null || icon.trim() == "")
icon = this.getDefaultIcon();
this.menuItem.icon.icon_name = this._getIcon(icon);
} else { } else {
this.menuItem.icon.gicon = null; this.menuItem.icon.gicon = null;
} }
} }
} }
_changeDeviceBase(id, control) {
if (!control) {
control = this._getMixerControl();
}
let uidevice = this.lookupDeviceById(control, id);
if (uidevice) {
this.changeDevice(control, uidevice);
}
else {
this._deviceRemoved(control, id);
}
}
_setActiveProfile() { _setActiveProfile() {
if (!this.menuItem._getOpenState()) {
return;
}
let control = this._getMixerControl();
//_d("Setting Active Profile"); //_d("Setting Active Profile");
/*for (let id in this._devices) { this._devices.forEach(device => {
let device = this._devices[id]; if (device.isAvailable()) {
if (device.active) { this._setDeviceActiveProfile(control, device);
this._setDeviceActiveProfile(device);
}
}*/
if(this._activeDevice){
this._setDeviceActiveProfile(this._activeDevice);
} }
});
return true; return true;
} }
_setDeviceActiveProfile(device) { _setDeviceActiveProfile(control, device) {
if (!device.uidevice.port_name || !this._availableDevicesIds[device.id]) { if (!device || !device.isAvailable()) {
return; return;
} }
let stream = this._control.get_stream_from_device(device.uidevice);
if (stream) { let uidevice = this.lookupDeviceById(control, device.id);
return; if (!uidevice) {
} this._deviceRemoved(control, device.id);
let activeProfile = device.uidevice.get_active_profile();
if (activeProfile && device.activeProfile != activeProfile) {
device.activeProfile = activeProfile;
for (let profile of device.profiles) {
device.profilesitems[profile.name].setProfileActive(profile.name == device.activeProfile);
} }
else {
let activeProfile = uidevice.get_active_profile();
_d("Active Profile:" + activeProfile);
device.setActiveProfile(activeProfile);
} }
} }
_getDeviceVisibility() { _getDeviceVisibility() {
let hideChooser = this._settings.get_boolean(Prefs.HIDE_ON_SINGLE_DEVICE); let hideChooser = this._settings.get_boolean(Prefs.HIDE_ON_SINGLE_DEVICE);
if (hideChooser) { if (hideChooser) {
return (Object.keys(this._availableDevicesIds).length > 1); return (Array.from(this._devices.values()).filter(x => x.isAvailable()).length > 1);
} }
else { else {
return true; return true;
@ -404,24 +477,16 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
_setChooserVisibility() { _setChooserVisibility() {
let visibility = this._getDeviceVisibility(); let visibility = this._getDeviceVisibility();
for (let id in this._availableDevicesIds) { Array.from(this._devices.values()).filter(x => x.isAvailable()).forEach(x => x.setVisibility(visibility))
this._devices[id].item.actor.visible = visibility;
}
this.menuItem._triangleBin.visible = visibility; this.menuItem._triangleBin.visible = visibility;
this._setProfileVisibility(); this._setProfileVisibility();
} }
_setProfileVisibility() { _setProfileVisibility() {
let visibility = this._settings.get_boolean(Prefs.SHOW_PROFILES); let visibility = this._settings.get_boolean(Prefs.SHOW_PROFILES);
for (let id in this._availableDevicesIds) { Array.from(this._devices.values()).filter(x => x.isAvailable()).forEach(device => device.setProfileVisibility(visibility));
let device = this._devices[id]; this._setProfileTimer(visibility);
if (device.profiles) {
for (let profile of device.profiles) {
device.profilesitems[profile.name].actor.visible =
(visibility && device.item.actor.visible && Object.keys(device.profilesitems).length > 1);
}
}
}
} }
_getIcon(name) { _getIcon(name) {
@ -432,40 +497,39 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
case Prefs.ICON_THEME_MONOCHROME: case Prefs.ICON_THEME_MONOCHROME:
return name + "-symbolic"; return name + "-symbolic";
default: default:
return "none"; //return "none";
return null;
} }
} }
_setIcons() { _setIcons() {
// Set the icons in the selection list // Set the icons in the selection list
for (let id in this._devices) { let control = this._getMixerControl();
let device = this._devices[id]; this._devices.forEach((device, id) => {
let icon = device.uidevice.get_icon_name(); let uidevice = this.lookupDeviceById(control, id);
if (uidevice) {
let icon = uidevice.get_icon_name();
if (icon == null || icon.trim() == "") if (icon == null || icon.trim() == "")
icon = this.getDefaultIcon(); icon = this.getDefaultIcon();
// device.item._icon.icon_name = this._getIcon(icon); _d(icon + " _setIcons")
device.item.setIcon(this._getIcon(icon)); device.setIcon(this._getIcon(icon));
} }
});
// These indicate the active device, which is displayed directly in the // These indicate the active device, which is displayed directly in the
// Gnome menu, not in the list. // Gnome menu, not in the list.
if (!this._settings.get_boolean(Prefs.HIDE_MENU_ICONS)) { if (!this._settings.get_boolean(Prefs.HIDE_MENU_ICONS)) {
let icon = this._activeDevice.uidevice.get_icon_name(); this.menuItem.icon.icon_name = this._getIcon(this._devices.get(this._activeDeviceId).icon_name);
if (icon == null || icon.trim() == "")
icon = this.getDefaultIcon();
this.menuItem.icon.icon_name = this._getIcon(icon);
} else { } else {
this.menuItem.icon.gicon = null; this.menuItem.icon.icon_name = null;
} }
} }
_canShowDevice(control, uidevice, defaultValue) {
_canShowDevice(uidevice, defaultValue) {
if (!uidevice || !this._portsSettings || uidevice.port_name == null || uidevice.description == null) { if (!uidevice || !this._portsSettings || uidevice.port_name == null || uidevice.description == null) {
return defaultValue; return defaultValue;
} }
let stream = this._control.get_stream_from_device(uidevice); let stream = control.get_stream_from_device(uidevice);
let cardName = null; let cardName = null;
if (stream) { if (stream) {
let cardId = stream.get_card_index(); let cardId = stream.get_card_index();
@ -489,10 +553,8 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
switch (port.display_option) { switch (port.display_option) {
case 1: case 1:
return true; return true;
case 2: case 2:
return false; return false;
default: default:
return defaultValue; return defaultValue;
} }
@ -504,23 +566,24 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
_resetDevices() { _resetDevices() {
//this._portsSettings = JSON.parse(this._settings.get_string(Prefs.PORT_SETTINGS)); //this._portsSettings = JSON.parse(this._settings.get_string(Prefs.PORT_SETTINGS));
this._portsSettings = Prefs.getPortsFromSettings(this._settings); this._portsSettings = Prefs.getPortsFromSettings(this._settings);
for (let id in this._devices) { let control = this._getMixerControl();
let device = this._devices[id]; for (let id of this._devices.keys()) {
let uidevice = device.uidevice; let uidevice = this.lookupDeviceById(control, id);
if (uidevice.port_name == null || uidevice.description == null) { if (_isDeviceInValid(uidevice)) {
_d("Device port_name null or description null"); _d("Device is invalid");
continue;
} }
switch (this._canShowDevice(uidevice, uidevice.port_available)) { else {
switch (this._canShowDevice(control, uidevice, uidevice.port_available)) {
case true: case true:
this._deviceAdded(this._control, uidevice.get_id(), true); this._deviceAdded(control, id, true);
break; break;
case false: case false:
this._deviceRemoved(this._control, uidevice.get_id(), true); this._deviceRemoved(control, id, true);
break; break;
} }
} }
} }
}
_setVisibility() { _setVisibility() {
if (!this._settings.get_boolean(this._show_device_signal)) if (!this._settings.get_boolean(this._show_device_signal))
@ -528,7 +591,7 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
else else
// if setting says to show device, check for any device, otherwise // if setting says to show device, check for any device, otherwise
// hide the "actor" // hide the "actor"
this.menuItem.actor.visible = (Object.keys(this._availableDevicesIds).length > 0); this.menuItem.actor.visible = (Array.from(this._devices.values()).some(x => x.isAvailable()));
} }
destroy() { destroy() {

View File

@ -40,12 +40,12 @@ else {
* @schema: (optional): the GSettings schema id Builds and return a GSettings * @schema: (optional): the GSettings schema id Builds and return a GSettings
* schema for * schema for
* @schema, using schema files in extensions dir/schemas. If * @schema, using schema files in extensions dir/schemas. If
* @schema is not provided, it is taken from metadata['settings-schema']. * @schema is not provided, it is taken from metadata["settings-schema"].
*/ */
function getSettings(schema) { function getSettings(schema) {
// let extension = ExtensionUtils.getCurrentExtension(); // let extension = ExtensionUtils.getCurrentExtension();
schema = schema || Me.metadata['settings-schema']; schema = schema || Me.metadata["settings-schema"];
const GioSSS = Gio.SettingsSchemaSource; const GioSSS = Gio.SettingsSchemaSource;
@ -54,7 +54,7 @@ function getSettings(schema) {
// otherwise assume that extension has been installed in the // otherwise assume that extension has been installed in the
// same prefix as gnome-shell (and therefore schemas are available // same prefix as gnome-shell (and therefore schemas are available
// in the standard folders) // in the standard folders)
let schemaDir = Me.dir.get_child('schemas'); let schemaDir = Me.dir.get_child("schemas");
let schemaSource; let schemaSource;
if (schemaDir.query_exists(null)) if (schemaDir.query_exists(null))
schemaSource = GioSSS.new_from_directory(schemaDir.get_path(), GioSSS.get_default(), false); schemaSource = GioSSS.new_from_directory(schemaDir.get_path(), GioSSS.get_default(), false);
@ -63,8 +63,8 @@ function getSettings(schema) {
let schemaObj = schemaSource.lookup(schema, true); let schemaObj = schemaSource.lookup(schema, true);
if (!schemaObj) if (!schemaObj)
throw new Error('Schema ' + schema + ' could not be found for extension ' throw new Error("Schema " + schema + " could not be found for extension "
+ Me.metadata.uuid + '. Please check your installation.'); + Me.metadata.uuid + ". Please check your installation.");
let _settings = new Gio.Settings({ settings_schema: schemaObj }); let _settings = new Gio.Settings({ settings_schema: schemaObj });
return _settings; return _settings;
@ -83,7 +83,7 @@ function getCardByName(card_name) {
if (!cards || Object.keys(cards).length == 0) { if (!cards || Object.keys(cards).length == 0) {
refreshCards(); refreshCards();
} }
return Object.keys(cards).map((index) => cards[index]).find(({name}) => name === card_name) return Object.keys(cards).map((index) => cards[index]).find(({ name }) => name === card_name);
} }
function getProfiles(control, uidevice) { function getProfiles(control, uidevice) {
@ -95,22 +95,25 @@ function getProfiles(control, uidevice) {
if (cards && cards[stream.card_index]) { if (cards && cards[stream.card_index]) {
_log("Getting profile form stream id " + uidevice.port_name); _log("Getting profile form stream id " + uidevice.port_name);
return getProfilesForPort(uidevice.port_name, cards[stream.card_index]); let profiles;
if ((profiles = getProfilesForPort(uidevice.port_name, cards[stream.card_index]))) {
return profiles;
}
} }
} }
else { else {
/* Device is not active device, lets try match with port name */ /* Device is not active device, lets try match with port name */
refreshCards(); refreshCards();
for (let id in cards) { for(let card of Object.values(cards)) {
let profiles; let profiles;
_log("Getting profile from cards " + uidevice.port_name + " for card id " + id); _log("Getting profile from cards " + uidevice.port_name + " for card id " + card.id);
if ((profiles = getProfilesForPort(uidevice.port_name, cards[id]))) { if ((profiles = getProfilesForPort(uidevice.port_name, card))) {
return profiles; return profiles;
} }
} }
} }
return null; return [];
} }
let ports; let ports;
@ -127,7 +130,7 @@ function isCmdFound(cmd) {
return true; return true;
} }
catch (e) { catch (e) {
_log('ERROR: ' + cmd + ' execution failed. ' + e); _log("ERROR: " + cmd + " execution failed. " + e);
return false; return false;
} }
} }
@ -141,18 +144,18 @@ function refreshCards() {
let newProfLogic = _settings.get_boolean(Prefs.NEW_PROFILE_ID); let newProfLogic = _settings.get_boolean(Prefs.NEW_PROFILE_ID);
if (newProfLogic) { if (newProfLogic) {
_log("New logic"); _log("New logic");
let pyLocation = Me.dir.get_child('utils/pa_helper.py').get_path(); let pyLocation = Me.dir.get_child("utils/pa_helper.py").get_path();
let pythonExec = ['python', 'python3', 'python2'].find(cmd => isCmdFound(cmd)); let pythonExec = ["python", "python3", "python2"].find(cmd => isCmdFound(cmd));
if (!pythonExec) { if (!pythonExec) {
_log('ERROR: Python not found. fallback to default mode'); _log("ERROR: Python not found. fallback to default mode");
_settings.set_boolean(Prefs.NEW_PROFILE_ID, false); _settings.set_boolean(Prefs.NEW_PROFILE_ID, false);
Gio.Settings.sync(); Gio.Settings.sync();
newProfLogic = false; newProfLogic = false;
} }
else { else {
try { try {
_log('Python found.' + pythonExec); _log("Python found." + pythonExec);
let [result, out, err, exit_code] = GLib.spawn_command_line_sync(pythonExec + ' ' + pyLocation); let [result, out, err, exit_code] = GLib.spawn_command_line_sync(pythonExec + " " + pyLocation);
// _log("result" + result +" out"+out + " exit_code" + // _log("result" + result +" out"+out + " exit_code" +
// exit_code + "err" +err); // exit_code + "err" +err);
if (result && !exit_code) { if (result && !exit_code) {
@ -160,13 +163,13 @@ function refreshCards() {
out = ByteArray.toString(out); out = ByteArray.toString(out);
} }
let obj = JSON.parse(out); let obj = JSON.parse(out);
cards = obj['cards']; cards = obj["cards"];
ports = obj['ports']; ports = obj["ports"];
} }
} }
catch (e) { catch (e) {
error = true; error = true;
_log('ERROR: Python execution failed. fallback to default mode' + e); _log("ERROR: Python execution failed. fallback to default mode" + e);
_settings.set_boolean(Prefs.NEW_PROFILE_ID, false); _settings.set_boolean(Prefs.NEW_PROFILE_ID, false);
Gio.Settings.sync(); Gio.Settings.sync();
} }
@ -176,13 +179,16 @@ function refreshCards() {
if (!newProfLogic || error) { if (!newProfLogic || error) {
_log("Old logic"); _log("Old logic");
try { try {
let [result, out, err, exit_code] = GLib.spawn_command_line_sync('pactl list cards'); let env = GLib.get_environ();
env = GLib.environ_setenv(env, "LANG", "C", true);
let [result, out, err, exit_code] = GLib.spawn_sync(null, ["pactl", "list", "cards"], env, GLib.SpawnFlags.SEARCH_PATH, null);
//_log(result+"--"+out+"--"+ err+"--"+ exit_code)
if (result && !exit_code) { if (result && !exit_code) {
parseOutput(out); parseOutput(out);
} }
} }
catch (e) { catch (e) {
_log('ERROR: pactl execution failed. No ports/profiles will be displayed'); _log("ERROR: pactl execution failed. No ports/profiles will be displayed." + e);
} }
} }
//_log(Array.isArray(cards)); //_log(Array.isArray(cards));
@ -194,9 +200,9 @@ function refreshCards() {
function parseOutput(out) { function parseOutput(out) {
let lines; let lines;
if (out instanceof Uint8Array) { if (out instanceof Uint8Array) {
lines = ByteArray.toString(out).split('\n'); lines = ByteArray.toString(out).split("\n");
} else { } else {
lines = out.toString().split('\n'); lines = out.toString().split("\n");
} }
let cardIndex; let cardIndex;
@ -210,7 +216,7 @@ function parseOutput(out) {
if ((matches = /^Card\s#(\d+)$/.exec(line))) { if ((matches = /^Card\s#(\d+)$/.exec(line))) {
cardIndex = matches[1]; cardIndex = matches[1];
if (!cards[cardIndex]) { if (!cards[cardIndex]) {
cards[cardIndex] = { 'index': cardIndex, 'profiles': [], 'ports': [] }; cards[cardIndex] = { "index": cardIndex, "profiles": [], "ports": [] };
} }
} }
else if ((matches = /^\t*Name:\s+(.*?)$/.exec(line)) && cards[cardIndex]) { else if ((matches = /^\t*Name:\s+(.*?)$/.exec(line)) && cards[cardIndex]) {
@ -232,30 +238,35 @@ function parseOutput(out) {
if ((matches = /alsa\.card_name\s+=\s+"(.*?)"/.exec(line))) { if ((matches = /alsa\.card_name\s+=\s+"(.*?)"/.exec(line))) {
cards[cardIndex].alsa_name = matches[1]; cards[cardIndex].alsa_name = matches[1];
} }
else if((matches = /device\.description\s+=\s+"(.*?)"/.exec(line))) { else if ((matches = /device\.description\s+=\s+"(.*?)"/.exec(line))) {
cards[cardIndex].card_description = matches[1]; cards[cardIndex].card_description = matches[1];
} }
break; break;
case "PROFILES": case "PROFILES":
if ((matches = /.*?((?:output|input)[^+]*?):\s(.*?)\s\(sinks:/.exec(line))) { if ((matches = /.*?((?:output|input)[^+]*?):\s(.*?)\s\(sinks:/.exec(line))) {
cards[cardIndex].profiles.push({ 'name': matches[1], 'human_name': matches[2] }); cards[cardIndex].profiles.push({ "name": matches[1], "human_name": matches[2] });
} }
break; break;
case "PORTS": case "PORTS":
if ((matches = /\t*(.*?):\s(.*)\s\(.*?priority:/.exec(line))) { if ((matches = /\t*(.*?):\s(.*)\s\(.*?priority:/.exec(line))) {
port = { 'name': matches[1], 'human_name': matches[2], 'card_name': cards[cardIndex].name, 'card_description' : cards[cardIndex].card_description }; port = { "name": matches[1], "human_name": matches[2], "card_name": cards[cardIndex].name, "card_description": cards[cardIndex].card_description };
cards[cardIndex].ports.push(port); cards[cardIndex].ports.push(port);
ports.push(port); ports.push(port);
} }
else if (port && (matches = /\t*Part of profile\(s\):\s(.*)/.exec(line))) { else if (port && (matches = /\t*Part of profile\(s\):\s(.*)/.exec(line))) {
let profileStr = matches[1]; let profileStr = matches[1];
port.profiles = profileStr.split(', '); port.profiles = profileStr.split(", ");
port = null; port = null;
} }
break; break;
} }
} }
} }
if (ports) {
ports.forEach(p => {
p.direction = p.profiles.filter(pr => pr.indexOf("+input:") == -1).some(pr => (pr.indexOf("output:") >= 0)) ? "Output" : "Input";
});
}
} }
var Signal = class Signal { var Signal = class Signal {
@ -280,8 +291,7 @@ var Signal = class Signal {
var SignalManager = class SignalManager { var SignalManager = class SignalManager {
constructor() { constructor() {
this._signals = []; this._signalsBySource = new Map();
this._signalsBySource = {};
} }
addSignal(signalSource, signalName, callback) { addSignal(signalSource, signalName, callback) {
@ -289,51 +299,42 @@ var SignalManager = class SignalManager {
if (signalSource && signalName && callback) { if (signalSource && signalName && callback) {
obj = new Signal(signalSource, signalName, callback); obj = new Signal(signalSource, signalName, callback);
obj.connect(); obj.connect();
this._signals.push(obj);
let sourceSignals = this._signalsBySource[signalSource] if (!this._signalsBySource.has(signalSource)) {
if (!sourceSignals) { this._signalsBySource.set(signalSource, []);
sourceSignals = [];
this._signalsBySource[signalSource] = sourceSignals;
} }
// this._signalsBySource[signalSource].push(obj) this._signalsBySource.get(signalSource).push(obj)
sourceSignals.push(obj); //_log(this._signalsBySource.get(signalSource).length + "Signal length");
} }
return obj; return obj;
} }
disconnectAll() { disconnectAll() {
for (let signal of this._signals) { this._signalsBySource.forEach(signals => this._disconnectSignals(signals));
signal.disconnect();
}
} }
disconnectBySource(signalSource) { disconnectBySource(signalSource) {
if (this._signalsBySource[signalSource]) { if (this._signalsBySource.has(signalSource)) {
for (let signal of this._signalsBySource[signalSource]) { this._disconnectSignals(this._signalsBySource.get(signalSource));
signal.disconnect();
} }
} }
_disconnectSignals(signals) {
while (signals.length) {
var signal = signals.shift();
signal.disconnect();
signal = null;
}
} }
} }
function getProfilesForPort(portName, card) { function getProfilesForPort(portName, card) {
if (card.ports) { if (card.ports) {
for (let port of card.ports) { let port = card.ports.find(port => (portName === port.name));
if (portName === port.name) { if (port) {
let profiles = [];
if (port.profiles) { if (port.profiles) {
for (let profile of port.profiles) { return card.profiles.filter(profile => (profile.name.indexOf("+input:") == -1 && port.profiles.includes(profile.name)))
if (profile.indexOf('+input:') == -1) {
for (let cardProfile of card.profiles) {
if (profile === cardProfile.name) {
profiles.push(cardProfile);
}
}
}
}
}
return profiles;
} }
} }
} }

View File

@ -16,7 +16,7 @@
******************************************************************************/ ******************************************************************************/
/* jshint moz:true */ /* jshint moz:true */
const {GObject} = imports.gi; const { GObject } = imports.gi;
const ExtensionUtils = imports.misc.extensionUtils; const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension(); const Me = ExtensionUtils.getCurrentExtension();
const Base = Me.imports.base; const Base = Me.imports.base;
@ -27,51 +27,46 @@ const Prefs = Me.imports.prefs;
const Main = imports.ui.main; const Main = imports.ui.main;
var SoundOutputDeviceChooser = class SoundOutputDeviceChooser var SoundOutputDeviceChooser = class SoundOutputDeviceChooser
extends Base.SoundDeviceChooserBase { extends Base.SoundDeviceChooserBase {
constructor() { constructor() {
super("output"); super("output");
} }
lookupDeviceById(id) { lookupDeviceById(control, id) {
return this._control.lookup_output_id(id); return control.lookup_output_id(id);
} }
changeDevice(uidevice) { changeDevice(control, uidevice) {
this._control.change_output(uidevice); control.change_output(uidevice);
} }
getDefaultDevice() { getDefaultStream(control) {
return this._control.get_default_sink(); return control.get_default_sink();
} }
getDefaultIcon() { getDefaultIcon() {
return "audio-card"; return "audio-card";
} }
getStreams() {
return this._control.get_sinks();
}
}; };
var SoundInputDeviceChooser = class SoundInputDeviceChooser var SoundInputDeviceChooser = class SoundInputDeviceChooser
extends Base.SoundDeviceChooserBase { extends Base.SoundDeviceChooserBase {
constructor() { constructor() {
super("input"); super("input");
} }
lookupDeviceById(id) { lookupDeviceById(control, id) {
return this._control.lookup_input_id(id); return control.lookup_input_id(id);
} }
changeDevice(uidevice) { changeDevice(control, uidevice) {
this._control.change_input(uidevice); control.change_input(uidevice);
} }
getDefaultDevice() { getDefaultStream(control) {
return this._control.get_default_source(); return control.get_default_source();
} }
getDefaultIcon() { getDefaultIcon() {
return "audio-input-microphone"; return "audio-input-microphone";
} }
getStreams() {
return this._control.get_sources();
}
}; };
var InputSliderInstance = class InputSliderInstance { var InputSliderInstance = class InputSliderInstance {
constructor(volumeMenu, settings ) { constructor(volumeMenu, settings) {
this._input = volumeMenu._input; this._input = volumeMenu._input;
this._settings = settings; this._settings = settings;
this._signalManager = new SignalManager(); this._signalManager = new SignalManager();
@ -104,18 +99,18 @@ var InputSliderInstance = class InputSliderInstance {
}; };
var SDCInstance = class SDCInstance { var SDCInstance = class SDCInstance {
constructor(){ constructor() {
this._settings = Lib.getSettings(Prefs.SETTINGS_SCHEMA); this._settings = Lib.getSettings(Prefs.SETTINGS_SCHEMA);
this._aggregateMenu = Main.panel.statusArea.aggregateMenu; this._aggregateMenu = Main.panel.statusArea.aggregateMenu;
this._volumeMenu = this._aggregateMenu._volume._volumeMenu; this._volumeMenu = this._aggregateMenu._volume._volumeMenu;
this._aggregateLayout = this._aggregateMenu.menu.box.get_layout_manager(); this._aggregateLayout = this._aggregateMenu.menu.box.get_layout_manager();
} }
enable(){ enable() {
let theme = imports.gi.Gtk.IconTheme.get_default(); let theme = imports.gi.Gtk.IconTheme.get_default();
if(theme != null) { if (theme != null) {
let iconPath = Me.dir.get_child('icons'); let iconPath = Me.dir.get_child('icons');
if (iconPath != null && iconPath.query_exists(null)){ if (iconPath != null && iconPath.query_exists(null)) {
theme.append_search_path(iconPath.get_path()); theme.append_search_path(iconPath.get_path());
} }
} }
@ -139,13 +134,11 @@ var SDCInstance = class SDCInstance {
this._expandVolMenu(); this._expandVolMenu();
} }
_addMenuItem(_volumeMenu, checkItem, menuItem){ _addMenuItem(_volumeMenu, checkItem, menuItem) {
let menuItems = _volumeMenu._getMenuItems(); let menuItems = _volumeMenu._getMenuItems();
let i = 0; let i = menuItems.findIndex(elem => elem === checkItem);
for (; i < menuItems.length; i++) { if (i < 0) {
if (menuItems[i] === checkItem) { i = menuItems.length;
break;
}
} }
_volumeMenu.addMenuItem(menuItem, ++i); _volumeMenu.addMenuItem(menuItem, ++i);
} }
@ -163,15 +156,21 @@ var SDCInstance = class SDCInstance {
this._aggregateLayout.layout_changed(); this._aggregateLayout.layout_changed();
} }
disable(){ disable() {
this._revertVolMenuChanges(); this._revertVolMenuChanges();
if (this._outputInstance) {
this._outputInstance.destroy(); this._outputInstance.destroy();
this._outputInstance = null; this._outputInstance = null;
}
if (this._inputInstance) {
this._inputInstance.destroy(); this._inputInstance.destroy();
this._inputInstance = null; this._inputInstance = null;
}
if (this._inputSliderInstance) {
this._inputSliderInstance.destroy(); this._inputSliderInstance.destroy();
this._inputSliderInstance = null; this._inputSliderInstance = null;
if(this._expSignalId) { }
if (this._expSignalId) {
this._settings.disconnect(this._expSignalId); this._settings.disconnect(this._expSignalId);
this._expSignalId = null; this._expSignalId = null;
} }

View File

@ -7,9 +7,10 @@
"3.34", "3.34",
"3.32", "3.32",
"3.36", "3.36",
"3.38" "3.38",
"40"
], ],
"url": "https://github.com/kgshank/gse-sound-output-device-chooser", "url": "https://github.com/kgshank/gse-sound-output-device-chooser",
"uuid": "sound-output-device-chooser@kgshank.net", "uuid": "sound-output-device-chooser@kgshank.net",
"version": 34 "version": 38
} }

View File

@ -28,7 +28,7 @@ const _d = Lib._log;
const SignalManager = Lib.SignalManager; const SignalManager = Lib.SignalManager;
const Gettext = imports.gettext; const Gettext = imports.gettext;
Gettext.bindtextdomain("sound-output-device-chooser", Me.path + '/locale'); Gettext.bindtextdomain("sound-output-device-chooser", Me.path + "/locale");
const _ = Gettext.gettext; const _ = Gettext.gettext;
var SETTINGS_SCHEMA = "org.gnome.shell.extensions.sound-output-device-chooser"; var SETTINGS_SCHEMA = "org.gnome.shell.extensions.sound-output-device-chooser";
@ -64,8 +64,8 @@ function getPortsFromSettings(_settings) {
return obj.ports; return obj.ports;
} }
function setPortsSettings(ports,_settings) { function setPortsSettings(ports, _settings) {
let settingsObj = { 'version': PORT_SETTINGS_VERSION }; let settingsObj = { "version": PORT_SETTINGS_VERSION };
settingsObj.ports = ports; settingsObj.ports = ports;
//_d(JSON.stringify(settingsObj)); //_d(JSON.stringify(settingsObj));
_settings.set_string(PORT_SETTINGS, JSON.stringify(settingsObj)); _settings.set_string(PORT_SETTINGS, JSON.stringify(settingsObj));
@ -97,45 +97,52 @@ function migratePortSettings(currVersion, currSettings, _settings) {
} }
break; break;
} }
return setPortsSettings(ports,_settings); return setPortsSettings(ports, _settings);
} }
const SDCSettingsWidget = new GObject.Class({ const SDCSettingsWidget = new GObject.Class({
Name: 'SDC.Prefs.Widget', Name: "SDC.Prefs.Widget",
GTypeName: 'SDCSettingsWidget', GTypeName: "SDCSettingsWidget",
Extends: Gtk.Box, Extends: Gtk.Box,
_init: function(params) { _init: function(params) {
this.parent(params); this.parent(params);
this.orientation = Gtk.Orientation.VERTICAL; this.orientation = Gtk.Orientation.VERTICAL;
this.spacing = 0; this.spacing = 0;
let uiFileSuffix = "";
if (Gtk.get_major_version() >= "4") {
uiFileSuffix = "40";
this.__addFn = this.append;
this.__showFn = this.show;
}
else {
this.__addFn = x => this.pack_start(x, true, true, 0);
this.__showFn = this.show_all;
}
// creates the settings // creates the settings
this._settings = Lib.getSettings(SETTINGS_SCHEMA); this._settings = Lib.getSettings(SETTINGS_SCHEMA);
Lib.setLog(this._settings.get_boolean(ENABLE_LOG)); Lib.setLog(this._settings.get_boolean(ENABLE_LOG));
// creates the ui builder and add the main resource file // creates the ui builder and add the main resource file
let uiFilePath = Me.path + "/ui/prefs-dialog.gtkbuilder"; let uiFilePath = Me.path + "/ui/prefs-dialog" +uiFileSuffix +".glade";
let builder = new Gtk.Builder(); let builder = new Gtk.Builder();
builder.set_translation_domain('sound-output-device-chooser'); builder.set_translation_domain("sound-output-device-chooser");
if (builder.add_from_file(uiFilePath) == 0) { if (builder.add_from_file(uiFilePath) == 0) {
_d("JS LOG: could not load the ui file: %s".format(uiFilePath)); _d("JS LOG: could not load the ui file: %s".format(uiFilePath));
let label = new Gtk.Label({ let label = new Gtk.Label({
label: _("Could not load the preferences UI file"), label: _("Could not load the preferences UI file"),
vexpand: true vexpand: true
}); });
this.__addFn(label);
this.pack_start(label, true, true, 0);
} else { } else {
_d('JS LOG:_UI file receive and load: ' + uiFilePath); _d("JS LOG:_UI file receive and load: " + uiFilePath);
let mainContainer = builder.get_object("main-container"); let mainContainer = builder.get_object("main-container");
this.pack_start(mainContainer, true, true, 0); this.__addFn(mainContainer);
this._signalManager = new SignalManager(); this._signalManager = new SignalManager();
@ -179,9 +186,9 @@ const SDCSettingsWidget = new GObject.Class({
_populatePorts: function() { _populatePorts: function() {
let ports = Lib.getPorts(true); let ports = Lib.getPorts(true);
for (let port of ports) { ports.sort((a, b) => (b.direction.localeCompare(a.direction)) || getPortDisplayName(a).localeCompare(getPortDisplayName(b))).forEach(port => {
this._portsStore.set(this._portsStore.append(), [0, 1, 2, 3, 4, 5, 6, 7], [port.human_name, false, false, true, port.name, 3, port.card_name, getPortDisplayName(port)]); this._portsStore.set(this._portsStore.append(), [0, 1, 2, 3, 4, 5, 6, 7, 8], [port.human_name, false, false, true, port.name, 3, port.card_name, getPortDisplayName(port), port.direction]);
} });
}, },
_showAlwaysToggleRenderCallback: function(widget, path) { _showAlwaysToggleRenderCallback: function(widget, path) {
@ -207,7 +214,7 @@ const SDCSettingsWidget = new GObject.Class({
} }
/*Dont support non-pci cards for show always*/ /*Dont support non-pci cards for show always*/
let card_name = this._portsStore.get_value(iter, 6); let card_name = this._portsStore.get_value(iter, 6);
if(!/\.pci-/.exec(card_name) && activeCol == 1){ if (!/\.pci-/.exec(card_name) && activeCol == 1) {
this._toggleCallback(widget, path, 3, [1, 2]); this._toggleCallback(widget, path, 3, [1, 2]);
return; return;
} }
@ -222,20 +229,21 @@ const SDCSettingsWidget = new GObject.Class({
_commitSettings: function() { _commitSettings: function() {
let ports = []; let ports = [];
let [success, iter] = this._portsStore.get_iter_first(); let [success, iter] = this._portsStore.get_iter_first();
while (iter && success) { while (iter && success) {
if (!this._portsStore.get_value(iter, 3)) { if (!this._portsStore.get_value(iter, 3)) {
let display_option = this._portsStore.get_value(iter, 5);
if (display_option != 3) {//Dont store default value
ports.push({ ports.push({
human_name: this._portsStore.get_value(iter, 0), human_name: this._portsStore.get_value(iter, 0),
name: this._portsStore.get_value(iter, 4), name: this._portsStore.get_value(iter, 4),
display_option: this._portsStore.get_value(iter, 5), display_option: display_option,
card_name: this._portsStore.get_value(iter, 6), card_name: this._portsStore.get_value(iter, 6),
display_name: this._portsStore.get_value(iter, 7) display_name: this._portsStore.get_value(iter, 7)
}); });
} }
}
success = this._portsStore.iter_next(iter); success = this._portsStore.iter_next(iter);
} }
setPortsSettings(ports, this._settings); setPortsSettings(ports, this._settings);
}, },
@ -268,8 +276,8 @@ const SDCSettingsWidget = new GObject.Class({
if (!found) { if (!found) {
iter = this._portsStore.append(); iter = this._portsStore.append();
this._portsStore.set(iter, [0, 1, 2, 3, 4, 5, 6, 7], this._portsStore.set(iter, [0, 1, 2, 3, 4, 5, 6, 7, 8],
[port.human_name, false, false, false, port.name, port.display_option, port.card_name, port.display_name]); [port.human_name, false, false, false, port.name, port.display_option, port.card_name, port.display_name, ""]);
this._portsStore.set_value(iter, port.display_option, true); this._portsStore.set_value(iter, port.display_option, true);
} }
} }
@ -279,7 +287,7 @@ const SDCSettingsWidget = new GObject.Class({
function buildPrefsWidget() { function buildPrefsWidget() {
let _settingsWidget = new SDCSettingsWidget(); let _settingsWidget = new SDCSettingsWidget();
_settingsWidget.show_all(); _settingsWidget.__showFn();
return _settingsWidget; return _settingsWidget;
} }

View File

@ -0,0 +1,808 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkListStore" id="icon-theme-store">
<columns>
<!-- column-name Key -->
<column type="gchararray"/>
<!-- column-name Value -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0">monochrome</col>
<col id="1" translatable="yes">Monochrome</col>
</row>
<row>
<col id="0">colored</col>
<col id="1" translatable="yes">Colored</col>
</row>
<row>
<col id="0">none</col>
<col id="1" translatable="yes">None</col>
</row>
</data>
</object>
<object class="GtkListStore" id="ports-store">
<columns>
<!-- column-name Port -->
<column type="gchararray"/>
<!-- column-name ShowAlways -->
<column type="gboolean"/>
<!-- column-name HideAlways -->
<column type="gboolean"/>
<!-- column-name ShowOnActive -->
<column type="gboolean"/>
<!-- column-name PortRealName -->
<column type="gchararray"/>
<!-- column-name SelectedColumn -->
<column type="gint"/>
<!-- column-name CardName -->
<column type="gchararray"/>
<!-- column-name DisplayName -->
<column type="gchararray"/>
<!-- column-name DeviceType -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkBox" id="main-container">
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="label-xalign">0.029999999329447746</property>
<property name="shadow-type">out</property>
<child>
<object class="GtkListBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="selection-mode">none</property>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Hide selector if there's only one device</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="single-device">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="halign">end</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Display audio profiles for selection</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="show-profile">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="halign">end</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Extend Volume Menu to fit device names</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="expand-volume-menu">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="halign">end</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">General Settings</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="label-xalign">0.029999999329447746</property>
<property name="shadow-type">out</property>
<child>
<object class="GtkListBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">center</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Show output devices</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="show-output-devices">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="halign">end</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Output Devices</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="label-xalign">0.029999999329447746</property>
<property name="shadow-type">out</property>
<child>
<object class="GtkListBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="selection-mode">none</property>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="hexpand">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">center</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Show input devices</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="show-input-devices">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="halign">end</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="valign">center</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Show volume control for default device</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="show-input-slider">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="halign">end</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Input Devices</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="label-xalign">0.029999999329447746</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkListBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="selection-mode">none</property>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="name">6</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Icon Theme</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="icon-theme">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="model">icon-theme-store</property>
<property name="id-column">0</property>
<child>
<object class="GtkCellRendererText" id="Text"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Display icons only in selection list</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="hide-menu-icons">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Icons</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="label-xalign">0.029999999329447746</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkListBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="selection-mode">none</property>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="name">6</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Enable Log messages</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="enable-log">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Enable new profile identification </property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="new-profile-identification">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Miscellaneous</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="vexpand">True</property>
<property name="label-xalign">0.029999999329447746</property>
<property name="shadow-type">out</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-bottom">4</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="opacity">0.9999999986588954</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="resize-mode">queue</property>
<property name="shadow-type">in</property>
<property name="min-content-width">500</property>
<child>
<object class="GtkTreeView" id="port-treeview">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="vexpand">True</property>
<property name="model">ports-store</property>
<property name="headers-clickable">False</property>
<property name="enable-grid-lines">both</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="PortNameColumn">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="min-width">100</property>
<property name="title" translatable="yes">Name</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText" id="PortNameRenderer"/>
<attributes>
<attribute name="text">7</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="DeviceTypeColumn">
<property name="sizing">autosize</property>
<property name="min-width">100</property>
<property name="title" translatable="yes">Device Type</property>
<property name="expand">True</property>
<property name="sort-order">descending</property>
<child>
<object class="GtkCellRendererText" id="DeviceTypeRenderer"/>
<attributes>
<attribute name="text">8</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="ShowAlwaysColumn">
<property name="visible">False</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Show</property>
<child>
<object class="GtkCellRendererToggle" id="ShowAlwaysToggleRender">
<property name="radio">True</property>
</object>
<attributes>
<attribute name="active">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="HideAlwaysColumn">
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Hide</property>
<child>
<object class="GtkCellRendererToggle" id="HideAlwaysToggleRender">
<property name="radio">True</property>
</object>
<attributes>
<attribute name="active">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="ShowOnActiveColumn">
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Default</property>
<child>
<object class="GtkCellRendererToggle" id="ShowActiveToggleRender">
<property name="radio">True</property>
</object>
<attributes>
<attribute name="active">3</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Port Settings</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</interface>

View File

@ -1,835 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.16"/>
<object class="GtkListStore" id="icon-theme-store">
<columns>
<!-- column-name Key -->
<column type="gchararray"/>
<!-- column-name Value -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0">monochrome</col>
<col id="1" translatable="yes">Monochrome</col>
</row>
<row>
<col id="0">colored</col>
<col id="1" translatable="yes">Colored</col>
</row>
<row>
<col id="0">none</col>
<col id="1" translatable="yes">None</col>
</row>
</data>
</object>
<object class="GtkListStore" id="ports-store">
<columns>
<!-- column-name Port -->
<column type="gchararray"/>
<!-- column-name ShowAlways -->
<column type="gboolean"/>
<!-- column-name HideAlways -->
<column type="gboolean"/>
<!-- column-name ShowOnActive -->
<column type="gboolean"/>
<!-- column-name PortRealName -->
<column type="gchararray"/>
<!-- column-name SelectedColumn -->
<column type="gint"/>
<!-- column-name CardName -->
<column type="gchararray"/>
<!-- column-name DisplayName -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkBox" id="main-container">
<property name="can-focus">False</property>
<property name="margin-left">6</property>
<property name="margin-right">6</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">12</property>
<property name="margin-right">6</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0</property>
<property name="shadow-type">out</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkListBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="selection-mode">none</property>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="margin-left">5</property>
<property name="label" translatable="yes">Hide selector if there's only one device</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="single-device">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="halign">end</property>
<property name="margin-right">5</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="margin-left">5</property>
<property name="label" translatable="yes">Display audio profiles for selection</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="show-profile">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="halign">end</property>
<property name="margin-right">5</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="margin-left">5</property>
<property name="margin-right">20</property>
<property name="label" translatable="yes">Extend Volume Menu to fit device names</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="expand-volume-menu">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="halign">end</property>
<property name="margin-right">5</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">General Settings</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0</property>
<property name="shadow-type">out</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkListBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">center</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="margin-left">5</property>
<property name="label" translatable="yes">Show output devices</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="show-output-devices">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="halign">end</property>
<property name="margin-right">5</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Output Devices</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0</property>
<property name="shadow-type">out</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkListBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="selection-mode">none</property>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="hexpand">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">center</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="margin-left">5</property>
<property name="label" translatable="yes">Show input devices</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="show-input-devices">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="halign">end</property>
<property name="margin-right">5</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="valign">center</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="margin-left">5</property>
<property name="label" translatable="yes">Show volume control for default device</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="show-input-slider">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="halign">end</property>
<property name="margin-right">5</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Input Devices</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkListBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="selection-mode">none</property>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="name">6</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="margin-left">5</property>
<property name="label" translatable="yes">Icon Theme</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="icon-theme">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-right">5</property>
<property name="model">icon-theme-store</property>
<property name="id-column">0</property>
<child>
<object class="GtkCellRendererText" id="Text"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="margin-left">5</property>
<property name="label" translatable="yes">Display icons only in selection list</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="hide-menu-icons">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="margin-right">5</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Icons</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkListBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="selection-mode">none</property>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="name">6</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="margin-left">5</property>
<property name="label" translatable="yes">Enable Log messages</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="enable-log">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="margin-left">5</property>
<property name="label" translatable="yes">Enable new profile identification </property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="new-profile-identification">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Miscellaneous</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">6</property>
<property name="margin-right">12</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="vexpand">True</property>
<property name="label-xalign">0</property>
<property name="shadow-type">out</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">4</property>
<property name="margin-right">4</property>
<property name="margin-bottom">4</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="opacity">0.9999999986588954</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="resize-mode">queue</property>
<property name="shadow-type">in</property>
<property name="min-content-width">500</property>
<child>
<object class="GtkTreeView" id="port-treeview">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="vexpand">True</property>
<property name="model">ports-store</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="PortNameColumn">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="min-width">100</property>
<property name="title" translatable="yes">Name</property>
<property name="expand">True</property>
<property name="sort-order">descending</property>
<child>
<object class="GtkCellRendererText" id="PortNameRenderer"/>
<attributes>
<attribute name="text">7</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="ShowAlwaysColumn">
<property name="visible">False</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Show</property>
<child>
<object class="GtkCellRendererToggle" id="ShowAlwaysToggleRender">
<property name="radio">True</property>
</object>
<attributes>
<attribute name="active">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="HideAlwaysColumn">
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Hide</property>
<child>
<object class="GtkCellRendererToggle" id="HideAlwaysToggleRender">
<property name="radio">True</property>
</object>
<attributes>
<attribute name="active">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="ShowOnActiveColumn">
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Default</property>
<child>
<object class="GtkCellRendererToggle" id="ShowActiveToggleRender">
<property name="radio">True</property>
</object>
<attributes>
<attribute name="active">3</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Port Settings</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</interface>

View File

@ -0,0 +1,538 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="4.0"/>
<object class="GtkListStore" id="icon-theme-store">
<columns>
<!-- column-name Key -->
<column type="gchararray"/>
<!-- column-name Value -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0">monochrome</col>
<col id="1" translatable="yes">Monochrome</col>
</row>
<row>
<col id="0">colored</col>
<col id="1" translatable="yes">Colored</col>
</row>
<row>
<col id="0">none</col>
<col id="1" translatable="yes">None</col>
</row>
</data>
</object>
<object class="GtkListStore" id="ports-store">
<columns>
<!-- column-name Port -->
<column type="gchararray"/>
<!-- column-name ShowAlways -->
<column type="gboolean"/>
<!-- column-name HideAlways -->
<column type="gboolean"/>
<!-- column-name ShowOnActive -->
<column type="gboolean"/>
<!-- column-name PortRealName -->
<column type="gchararray"/>
<!-- column-name SelectedColumn -->
<column type="gint"/>
<!-- column-name CardName -->
<column type="gchararray"/>
<!-- column-name DisplayName -->
<column type="gchararray"/>
<!-- column-name DeviceType -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkBox" id="main-container">
<property name="visible">1</property>
<property name="margin-start">6</property>
<property name="margin-end">6</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
<object class="GtkBox">
<property name="can-focus">0</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<property name="homogeneous">1</property>
<child>
<object class="GtkBox">
<property name="margin-start">12</property>
<property name="margin-end">6</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkFrame">
<property name="can-focus">0</property>
<child>
<object class="GtkListBox">
<property name="can-focus">0</property>
<property name="selection-mode">none</property>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="child">
<object class="GtkBox">
<property name="can-focus">0</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="hexpand">1</property>
<property name="halign">start</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Hide selector if there&apos;s only one device</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="single-device">
<property name="halign">end</property>
<property name="margin-end">5</property>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="hexpand">1</property>
<property name="halign">start</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Display audio profiles for selection</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="show-profile">
<property name="halign">end</property>
<property name="margin-end">5</property>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="hexpand">1</property>
<property name="halign">start</property>
<property name="margin-start">5</property>
<property name="margin-end">20</property>
<property name="label" translatable="yes">Extend Volume Menu to fit device names</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="expand-volume-menu">
<property name="halign">end</property>
<property name="margin-end">5</property>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="label" translatable="yes">General Settings</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
</object>
</child>
<child>
<object class="GtkFrame">
<child>
<object class="GtkListBox">
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="child">
<object class="GtkBox">
<property name="valign">center</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="hexpand">1</property>
<property name="halign">start</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Show output devices</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="show-output-devices">
<property name="halign">end</property>
<property name="margin-end">5</property>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="label" translatable="yes">Output Devices</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
</object>
</child>
<child>
<object class="GtkFrame">
<child>
<object class="GtkListBox">
<property name="selection-mode">none</property>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="hexpand">1</property>
<property name="child">
<object class="GtkBox">
<property name="valign">center</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="hexpand">1</property>
<property name="halign">start</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Show input devices</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="show-input-devices">
<property name="halign">end</property>
<property name="margin-end">5</property>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="valign">center</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="hexpand">1</property>
<property name="halign">start</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Show volume control for default device</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="show-input-slider">
<property name="halign">end</property>
<property name="margin-end">5</property>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="label" translatable="yes">Input Devices</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
</object>
</child>
<child>
<object class="GtkFrame">
<child>
<object class="GtkListBox">
<property name="selection-mode">none</property>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="child">
<object class="GtkBox">
<property name="name">6</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="hexpand">1</property>
<property name="halign">start</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Icon Theme</property>
</object>
</child>
<child>
<object class="GtkComboBox" id="icon-theme">
<property name="width-request">100</property>
<property name="margin-end">5</property>
<property name="model">icon-theme-store</property>
<property name="id-column">0</property>
<child>
<object class="GtkCellRendererText" id="Text" />
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="hexpand">1</property>
<property name="halign">start</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Display icons only in selection list</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="hide-menu-icons">
<property name="margin-end">5</property>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="label" translatable="yes">Icons</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
</object>
</child>
<child>
<object class="GtkFrame">
<child>
<object class="GtkListBox">
<property name="selection-mode">none</property>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="child">
<object class="GtkBox">
<property name="name">6</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="hexpand">1</property>
<property name="halign">start</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Enable Log messages</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="enable-log" />
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width-request">100</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkLabel">
<property name="hexpand">1</property>
<property name="halign">start</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Enable new profile identification</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="new-profile-identification">
<property name="active">1</property>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
>
</child>
<child type="label">
<object class="GtkLabel">
<property name="label" translatable="yes">Miscellaneous</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox">
<property name="margin-start">6</property>
<property name="margin-end">12</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkFrame">
<property name="vexpand">1</property>
<property name="child">
<object class="GtkBox">
<property name="margin-start">4</property>
<property name="margin-end">4</property>
<property name="margin-bottom">4</property>
<property name="vexpand">1</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="opacity">0.9999999986588954</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<property name="min-content-width">500</property>
<property name="child">
<object class="GtkTreeView" id="port-treeview">
<property name="vexpand">1</property>
<property name="model">ports-store</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1" />
</child>
<child>
<object class="GtkTreeViewColumn" id="PortNameColumn">
<property name="resizable">1</property>
<property name="sizing">autosize</property>
<property name="min-width">100</property>
<property name="title" translatable="yes">Name</property>
<property name="expand">1</property>
<property name="sort-order">descending</property>
<child>
<object class="GtkCellRendererText" id="PortNameRenderer" />
<attributes>
<attribute name="text">7</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="ShowAlwaysColumn">
<property name="visible">1</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Show</property>
<child>
<object class="GtkCellRendererToggle" id="ShowAlwaysToggleRender">
<property name="radio">1</property>
</object>
<attributes>
<attribute name="active">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="HideAlwaysColumn">
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Hide</property>
<child>
<object class="GtkCellRendererToggle" id="HideAlwaysToggleRender">
<property name="radio">1</property>
</object>
<attributes>
<attribute name="active">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="ShowOnActiveColumn">
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Default</property>
<child>
<object class="GtkCellRendererToggle" id="ShowActiveToggleRender">
<property name="radio">1</property>
</object>
<attributes>
<attribute name="active">3</attribute>
</attributes>
</child>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
</property>
<child type="label">
<object class="GtkLabel">
<property name="label" translatable="yes">Port Settings</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>

View File

@ -33,11 +33,6 @@
import ctypes import ctypes
from ctypes.util import find_library from ctypes.util import find_library
c_int128 = ctypes.c_ubyte*16 c_int128 = ctypes.c_ubyte*16
c_uint128 = c_int128 c_uint128 = c_int128
void = None void = None
@ -498,7 +493,8 @@ pa_proplist_to_string.argtypes = [POINTER_T(struct_pa_proplist)]
pa_proplist_gets = _libraries['libpulse.so'].pa_proplist_gets pa_proplist_gets = _libraries['libpulse.so'].pa_proplist_gets
pa_proplist_gets.restype = POINTER_T(ctypes.c_char) pa_proplist_gets.restype = POINTER_T(ctypes.c_char)
pa_proplist_gets.argtypes = [POINTER_T(struct_pa_proplist), POINTER_T(ctypes.c_char)] pa_proplist_gets.argtypes = [POINTER_T(struct_pa_proplist), POINTER_T(ctypes.c_char)]
PA_DIRECTION_OUTPUT = 0x0001
PA_DIRECTION_INPUT = 0x0002
__all__ = \ __all__ = \
@ -545,4 +541,4 @@ __all__ = \
'struct_pa_mainloop_api', 'struct_pa_operation', 'struct_pa_mainloop_api', 'struct_pa_operation',
'struct_pa_proplist', 'struct_pa_sample_spec', 'struct_pa_proplist', 'struct_pa_sample_spec',
'struct_pa_spawn_api', 'struct_pa_time_event', 'struct_pollfd', 'struct_pa_spawn_api', 'struct_pa_time_event', 'struct_pollfd',
'struct_timeval', 'uint32_t','pa_proplist_to_string','pa_proplist_gets'] 'struct_timeval', 'uint32_t','pa_proplist_to_string','pa_proplist_gets','PA_DIRECTION_OUTPUT', 'PA_DIRECTION_INPUT']

View File

@ -57,8 +57,6 @@ class PAHelper():
self._pa_card_info_cb_t , None) self._pa_card_info_cb_t , None)
pa.pa_mainloop_iterate(self.mainloop, 0, byref(retVal)) pa.pa_mainloop_iterate(self.mainloop, 0, byref(retVal))
print(dumps({'cards': self._cards, 'ports':self._ports}, indent = 5)) print(dumps({'cards': self._cards, 'ports':self._ports}, indent = 5))
try: try:
@ -105,7 +103,7 @@ class PAHelper():
obj = {} obj = {}
obj['name'] = port.name.decode('utf8') if port.name else '' obj['name'] = port.name.decode('utf8') if port.name else ''
obj['human_name'] = port.description.decode('utf8') if port.description else '' obj['human_name'] = port.description.decode('utf8') if port.description else ''
obj['direction'] = port.direction obj['direction'] = 'Output' if (port.direction & pa.PA_DIRECTION_OUTPUT) else 'Input'
obj['available'] = port.available obj['available'] = port.available
obj['n_profiles'] = port.n_profiles obj['n_profiles'] = port.n_profiles
obj['profiles'] = [] obj['profiles'] = []

View File

@ -1,5 +1,5 @@
// tweaks-system-menu - Put Gnome Tweaks in the system menu. // tweaks-system-menu - Put Gnome Tweaks in the system menu.
// Copyright (C) 2019, 2020 Philippe Troin (F-i-f on Github) // Copyright (C) 2019-2021 Philippe Troin (F-i-f on Github)
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -14,6 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
const Lang = imports.lang;
const BoxPointer = imports.ui.boxpointer; const BoxPointer = imports.ui.boxpointer;
const Main = imports.ui.main; const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
@ -34,6 +35,45 @@ const TweaksSystemMenuExtension = class TweaksSystemMenuExtension {
this._positionSettingChangedConnection = null; this._positionSettingChangedConnection = null;
this._systemMenu = null; this._systemMenu = null;
this._applications = {
'tweaks': {
appName: 'org.gnome.tweaks.desktop',
check: Lang.bind(this, function() {
return true;
}),
getDefaultPosition: Lang.bind(this, function() {
return this._findMenuItemPosition(this._systemMenu._settingsItem)+1;
}),
preUpdatePosition: Lang.bind(this, function () {
if (this._applications['extensions'].menuItem !== undefined) {
this._moveMenuItemToEnd(this._applications['extensions'].menuItem);
}
}),
postUpdatePosition: Lang.bind(this, function () {
if (this._applications['extensions'].menuItem !== undefined) {
this._on_position_change('extensions');
}
})
},
'extensions': {
appName: 'org.gnome.Extensions.desktop',
check: Lang.bind(this, function() {
let gnome_shell_version = imports.misc.config.PACKAGE_VERSION;
let gnome_shell_major = /^([0-9]+)\.([0-9]+)(\.([0-9]+)(\..*)?)?$/.exec(gnome_shell_version)[1];
return gnome_shell_major >= 40;
}),
getDefaultPosition: Lang.bind(this, function() {
if (this._applications['tweaks'].menuItem !== undefined) {
return this._findMenuItemPosition(this._applications['tweaks'].menuItem)+1;
} else {
return this._applications['tweaks'].getDefaultPosition();
}
}),
preUpdatePosition: Lang.bind(this, function () { return; }),
postUpdatePosition: Lang.bind(this, function () { return; })
}
};
this._tweaksApp = null; this._tweaksApp = null;
this._tweaksItem = null; this._tweaksItem = null;
this._tweaksActivateConnection = null; this._tweaksActivateConnection = null;
@ -52,6 +92,18 @@ const TweaksSystemMenuExtension = class TweaksSystemMenuExtension {
return null; return null;
} }
_moveMenuItemToEnd(item) {
this._systemMenu.menu.moveMenuItem(item, this._systemMenu.menu._getMenuItems().length-1);
}
_getEnableSettingsName(appKey) {
return appKey+'-enable';
}
_getPositionSettingsName(appKey) {
return appKey+'-position';
}
// Enable/disable // Enable/disable
enable() { enable() {
this._logger = new Logger.Logger('Tweaks-System-Menu'); this._logger = new Logger.Logger('Tweaks-System-Menu');
@ -63,26 +115,43 @@ const TweaksSystemMenuExtension = class TweaksSystemMenuExtension {
this._debugSettingChangedConnection = this._settings.connect('changed::debug', this._debugSettingChangedConnection = this._settings.connect('changed::debug',
this._on_debug_change.bind(this)); this._on_debug_change.bind(this));
this._positionSettingChangedConnection = this._settings.connect('changed::position',
this._on_position_change.bind(this));
this._systemMenu = Main.panel.statusArea.aggregateMenu._system; this._systemMenu = Main.panel.statusArea.aggregateMenu._system;
this._showItem();
for (let appKey in this._applications) {
this._enableApp(appKey);
}
this._logger.log_debug('extension enabled'); this._logger.log_debug('extension enabled');
} }
_enableApp(appKey) {
let appData = this._applications[appKey];
if (! appData.check()) return;
this._logger.log_debug('_enableApp('+appKey+')');
appData.enableSettingChangedConnection = this._settings.connect('changed::'+this._getEnableSettingsName(appKey),
Lang.bind(this, function() {
this._on_enable_change(appKey);
}));
appData.positionSettingChangedConnection = this._settings.connect('changed::'+this._getPositionSettingsName(appKey),
Lang.bind(this, function() {
this._on_position_change(appKey);
}));
if (this._settings.get_boolean(this._getEnableSettingsName(appKey))) {
this._showItem(appKey);
}
}
disable() { disable() {
this._logger.log_debug('disable()'); this._logger.log_debug('disable()');
this._hideItem(); for (let appKey in this._applications) {
this._disableApp(appKey);
}
this._systemMenu = null; this._systemMenu = null;
this._settings.disconnect(this._debugSettingChangedConnection); this._settings.disconnect(this._debugSettingChangedConnection);
this._debugSettingChangedConnection = null; this._debugSettingChangedConnection = null;
this._settings.disconnect(this._positionSettingChangedConnection);
this._positionSettingChangedConnection = null;
this._settings = null; this._settings = null;
@ -90,34 +159,50 @@ const TweaksSystemMenuExtension = class TweaksSystemMenuExtension {
this._logger = null; this._logger = null;
} }
_disableApp(appKey) {
let appData = this._applications[appKey];
if (! appData.check()) return;
this._logger.log_debug('_disableApp('+appKey+')');
this._hideItem(appKey);
if (appData.enableSettingChangedConnection !== undefined) {
this._settings.disconnect(appData.enableSettingChangedConnection);
delete appData.enableSettingChangedConnection;
}
if (appData.positionSettingChangedConnection !== undefined) {
this._settings.disconnect(appData.positionSettingChangedConnection);
delete appData.positionSettingChangedConnection;
}
}
// Show/hide item // Show/hide item
_showItem() { _showItem(appKey) {
this._logger.log_debug('_showItem()'); this._logger.log_debug('_showItem('+appKey+')');
let appData = this._applications[appKey];
this._tweaksApp = Shell.AppSystem.get_default().lookup_app('org.gnome.tweaks.desktop'); appData.appInfo = Shell.AppSystem.get_default().lookup_app(appData.appName);
if (this._tweaksApp) { if (appData.appInfo) {
let [icon, name] = [this._tweaksApp.app_info.get_icon().names[0], let name = appData.appInfo.get_name();
this._tweaksApp.get_name()]; let icon = appData.appInfo.app_info.get_icon().names[0];
this._tweaksItem = new PopupMenu.PopupImageMenuItem(name, icon); appData.menuItem = new PopupMenu.PopupImageMenuItem(name, icon);
this._tweaksActivateConnection = this._tweaksItem.connect('activate', this._on_activate.bind(this)); appData.activateConnection = appData.menuItem.connect('activate', Lang.bind(this, function() {
this._systemMenu.menu.addMenuItem(this._tweaksItem); this._on_activate(appKey);
this._on_position_change(); }));
this._systemMenu.menu.addMenuItem(appData.menuItem);
this._on_position_change(appKey);
} else { } else {
this._logger.log('Missing Gnome Tweaks, expect trouble…'); this._logger.log(appData.appName+' is missing');
} }
} }
_hideItem() { _hideItem(appKey) {
this._logger.log_debug('_hideItem()'); this._logger.log_debug('_hideItem('+appKey+')');
if (this._tweaksItem !== null) { let appData = this._applications[appKey];
this._tweaksItem.disconnect(this._tweaksActivateConnection); if (appData.menuItem !== undefined) {
this._tweaksActivateConnection = null; appData.menuItem.disconnect(appData.activateConnection);
delete appData.activateConnection;
this._systemMenu.menu._getMenuItems().splice(this._findMenuItemPosition(this._tweaksItem), 1); this._systemMenu.menu._getMenuItems().splice(this._findMenuItemPosition(appData.menuItem), 1);
this._tweaksItem.destroy(); appData.menuItem.destroy();
this._tweaksItem = null; delete appData.menuItem;
} }
this._tweaksApp = null;
} }
// Event handlers // Event handlers
@ -126,25 +211,42 @@ const TweaksSystemMenuExtension = class TweaksSystemMenuExtension {
this._logger.log_debug('debug = '+this._logger.get_debug()); this._logger.log_debug('debug = '+this._logger.get_debug());
} }
_on_position_change() { _on_enable_change(appKey) {
let position = this._settings.get_int('position'); let appData = this._applications[appKey];
this._logger.log_debug('_on_position_change(): settings position=' + position); let enable = this._settings.get_boolean(this._getEnableSettingsName(appKey));
if (position == -1) { this._logger.log_debug('_on_enable_change('+appKey+'): enable=' + enable);
position = this._findMenuItemPosition(this._systemMenu._settingsItem); if (enable) {
let tweaksPosition = this._findMenuItemPosition(this._tweaksItem); this._showItem(appKey);
if (tweaksPosition > position) { } else {
position += 1; this._hideItem(appKey);
} }
this._logger.log_debug('_on_position_change(): automatic position=' + position);
}
this._systemMenu.menu.moveMenuItem(this._tweaksItem, position);
} }
_on_activate() { _on_position_change(appKey) {
this._logger.log_debug('_on_activate()'); let appData = this._applications[appKey];
let position = this._settings.get_int(this._getPositionSettingsName(appKey));
this._logger.log_debug('_on_position_change('+appKey+'): settings position=' + position);
this._moveMenuItemToEnd(appData.menuItem);
appData.preUpdatePosition();
if (position == -1) {
position = appData.getDefaultPosition();
this._logger.log_debug('_on_position_change('+appKey+'): automatic position=' + position);
}
// let curPosition = this._findMenuItemPosition(appData.menuItem);
// if (curPosition < position) {
// position -= 1;
// }
// this._logger.log_debug('_on_position_change('+appKey+'): ajusted position=' + position);
this._systemMenu.menu.moveMenuItem(appData.menuItem, position);
appData.postUpdatePosition();
}
_on_activate(appKey) {
let appData = this._applications[appKey];
this._logger.log_debug('_on_activate('+appKey+')');
this._systemMenu.menu.itemActivated(BoxPointer.PopupAnimation.NONE); this._systemMenu.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
Main.overview.hide(); Main.overview.hide();
this._tweaksApp.activate(); appData.appInfo.activate();
} }
}; };

View File

@ -1,5 +1,5 @@
// meson-gse - Library for gnome-shell extensions // meson-gse - Library for gnome-shell extensions
// Copyright (C) 2019 Philippe Troin (F-i-f on Github) // Copyright (C) 2019-2021 Philippe Troin (F-i-f on Github)
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -38,13 +38,23 @@ var Logger = class MesonGseLogger {
if (gnomeShellVersion != undefined) { if (gnomeShellVersion != undefined) {
msg += ' on Gnome-Shell ' + gnomeShellVersion; msg += ' on Gnome-Shell ' + gnomeShellVersion;
} }
let gjsVersion = imports.system.version;
if (gjsVersion != undefined) {
let gjsVersionMajor = Math.floor(gjsVersion / 10000);
let gjsVersionMinor = Math.floor((gjsVersion % 10000) / 100);
let gjsVersionPatch = gjsVersion % 100;
msg +=( ' / gjs ' + gjsVersionMajor
+ '.' +gjsVersionMinor
+ '.' +gjsVersionPatch
+ ' ('+gjsVersion+')');
}
let sessionType = GLib.getenv('XDG_SESSION_TYPE'); let sessionType = GLib.getenv('XDG_SESSION_TYPE');
if (sessionType != undefined) { if (sessionType != undefined) {
msg += ' / ' + sessionType; msg += ' / ' + sessionType;
} }
this.log(msg); this.log(msg);
} }
global.log(''+this._title+': '+text); log(''+this._title+': '+text);
} }
log_debug(text) { log_debug(text) {

View File

@ -1,16 +1,17 @@
{ {
"_generated": "Generated by SweetTooth, do not edit", "_generated": "Generated by SweetTooth, do not edit",
"description": "Put Gnome Tweaks in the System menu. Optionally, collapse Settings and Tweaks into a single button.", "description": "Put Gnome Tweaks and Extensions (on Shell 40 and later) in the System menu.",
"gettext-domain": "tweaks-system-menu", "gettext-domain": "tweaks-system-menu",
"name": "Tweaks in System Menu", "name": "Tweaks & Extensions in System Menu",
"settings-schema": "org.gnome.shell.extensions.tweaks-system-menu", "settings-schema": "org.gnome.shell.extensions.tweaks-system-menu",
"shell-version": [ "shell-version": [
"3.36", "3.36",
"3.35.92", "3.35.92",
"3.38" "3.38",
"40.0"
], ],
"url": "https://github.com/F-i-f/tweaks-system-menu", "url": "https://github.com/F-i-f/tweaks-system-menu",
"uuid": "tweaks-system-menu@extensions.gnome-shell.fifi.org", "uuid": "tweaks-system-menu@extensions.gnome-shell.fifi.org",
"vcs_revision": "v11-0-ga9fac83", "vcs_revision": "v15-0-ge3b04c7",
"version": 11 "version": 15
} }

View File

@ -1,5 +1,5 @@
// Tweaks-system-menu - Put Gnome Tweaks in the system menu. // Tweaks-system-menu - Put Gnome Tweaks in the system menu.
// Copyright (C) 2019, 2020 Philippe Troin (F-i-f on Github) // Copyright (C) 2019-2021 Philippe Troin (F-i-f on Github)
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -14,6 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
const Lang = imports.lang;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GObject = imports.gi.GObject; const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
@ -29,7 +30,61 @@ const Logger = Me.imports.logger;
const TweaksSystemMenuSettings = GObject.registerClass(class TweaksSystemMenuSettings extends Gtk.Grid { const TweaksSystemMenuSettings = GObject.registerClass(class TweaksSystemMenuSettings extends Gtk.Grid {
_addEntry(ypos, setting_prefix, enable_label_val, position_label_val) {
let enable_setting = setting_prefix + '-enable';
let enable_sschema = this._settings.settings_schema.get_key(enable_setting);
let descr = _(enable_sschema.get_description());
let enable_label = new Gtk.Label({
label: enable_label_val,
halign: Gtk.Align.START
});
enable_label.set_tooltip_text(descr);
let enable_control = new Gtk.Switch({halign: Gtk.Align.END});
enable_control.set_tooltip_text(descr);
this.attach(enable_label, 1, ypos, 1, 1);
this.attach(enable_control, 2, ypos, 1, 1);
this._settings.bind(enable_setting, enable_control,
'active', Gio.SettingsBindFlags.DEFAULT);
ypos += 1
let position_setting = setting_prefix + '-position';
let position_sschema = this._settings.settings_schema.get_key(position_setting);
descr = _(position_sschema.get_description());
let position_label = new Gtk.Label({
label: position_label_val,
halign: Gtk.Align.START,
margin_start: 25
});
position_label.set_tooltip_text(descr);
let position_range = position_sschema.get_range().deep_unpack()[1].deep_unpack()
let position_control = new Gtk.SpinButton({
adjustment: new Gtk.Adjustment({
lower: position_range[0],
upper: position_range[1],
step_increment: 1
}),
halign: Gtk.Align.END
});
position_control.set_tooltip_text(descr);
this.attach(position_label, 1, ypos, 1, 1);
this.attach(position_control, 2, ypos, 1, 1);
this._settings.bind(position_setting, position_control,
'value', Gio.SettingsBindFlags.DEFAULT);
ypos += 1
this._settings.connect('changed::'+enable_setting, Lang.bind(this, function(settings, name) {
let val = settings.get_boolean(name);
position_label.set_sensitive(val);
position_control.set_sensitive(val);
}));
return ypos;
}
setup() { setup() {
let gnome_shell_version = imports.misc.config.PACKAGE_VERSION;
let gnome_shell_major = /^([0-9]+)\.([0-9]+)(\.([0-9]+)(\..*)?)?$/.exec(gnome_shell_version)[1];
this.margin_top = 12; this.margin_top = 12;
this.margin_bottom = this.margin_top; this.margin_bottom = this.margin_top;
this.margin_start = 48; this.margin_start = 48;
@ -48,7 +103,7 @@ const TweaksSystemMenuSettings = GObject.registerClass(class TweaksSystemMenuSet
this.title_label = new Gtk.Label({ this.title_label = new Gtk.Label({
use_markup: true, use_markup: true,
label: '<span size="large" weight="heavy">' label: '<span size="large" weight="heavy">'
+_('Tweaks in System Menu')+'</span>', +_('Tweaks &amp; Extensions in System Menu')+'</span>',
hexpand: true, hexpand: true,
halign: Gtk.Align.CENTER halign: Gtk.Align.CENTER
}); });
@ -79,29 +134,10 @@ const TweaksSystemMenuSettings = GObject.registerClass(class TweaksSystemMenuSet
ypos += 1; ypos += 1;
let sschema = this._settings.settings_schema.get_key('position'); ypos = this._addEntry(ypos, 'tweaks', _("Show Tweaks:"), _("Tweaks position:"));
descr = _(sschema.get_description()); if (gnome_shell_major >= 40) {
this.position_label = new Gtk.Label({ ypos = this._addEntry(ypos, 'extensions', _("Show Extensions:"), _("Extensions position:"));
label: _("Menu position:"), }
halign: Gtk.Align.START
});
this.position_label.set_tooltip_text(descr);
let position_range = sschema.get_range().deep_unpack()[1].deep_unpack()
this.position_control = new Gtk.SpinButton({
adjustment: new Gtk.Adjustment({
lower: position_range[0],
upper: position_range[1],
step_increment: 1
}),
halign: Gtk.Align.END
});
this.position_control.set_tooltip_text(descr);
this.attach(this.position_label, 1, ypos, 1, 1);
this.attach(this.position_control, 2, ypos, 1, 1);
this._settings.bind('position', this.position_control,
'value', Gio.SettingsBindFlags.DEFAULT);
ypos += 1;
descr = _(this._settings.settings_schema.get_key('debug').get_description()); descr = _(this._settings.settings_schema.get_key('debug').get_description());
this.debug_label = new Gtk.Label({label: _("Debug:"), halign: Gtk.Align.START}); this.debug_label = new Gtk.Label({label: _("Debug:"), halign: Gtk.Align.START});
@ -117,7 +153,7 @@ const TweaksSystemMenuSettings = GObject.registerClass(class TweaksSystemMenuSet
this.copyright_label = new Gtk.Label({ this.copyright_label = new Gtk.Label({
use_markup: true, use_markup: true,
label: '<span size="small">' label: '<span size="small">'
+ _('Copyright © 2019, 2020 Philippe Troin (<a href="https://github.com/F-i-f">F-i-f</a> on GitHub)') + _('Copyright © 2019-2021 Philippe Troin (<a href="https://github.com/F-i-f">F-i-f</a> on GitHub)')
+ '</span>', + '</span>',
hexpand: true, hexpand: true,
halign: Gtk.Align.CENTER, halign: Gtk.Align.CENTER,
@ -136,7 +172,10 @@ function init() {
function buildPrefsWidget() { function buildPrefsWidget() {
let widget = new TweaksSystemMenuSettings(); let widget = new TweaksSystemMenuSettings();
widget.setup(); widget.setup();
// show_all() is only available/necessary on GTK < 4.0.
if (widget.show_all !== undefined) {
widget.show_all(); widget.show_all();
}
return widget; return widget;
} }

View File

@ -1,13 +1,34 @@
<schemalist gettext-domain="tweaks-system-menu"> <schemalist gettext-domain="tweaks-system-menu">
<schema id="org.gnome.shell.extensions.tweaks-system-menu" path="/org/gnome/shell/extensions/tweaks-system-menu/"> <schema id="org.gnome.shell.extensions.tweaks-system-menu" path="/org/gnome/shell/extensions/tweaks-system-menu/">
<key name="position" type="i"> <key name="tweaks-enable" type="b">
<default>true</default>
<summary>Tweaks should be shown.</summary>
<description>If set, the Gnome Tweaks button is
shown.</description>
</key>
<key name="tweaks-position" type="i">
<default>-1</default> <default>-1</default>
<range min="-1" max="99"/> <range min="-1" max="99"/>
<summary>Position of the button.</summary> <summary>Position of the Tweaks button.</summary>
<description>If set to -1, the position is automatic: Tweaks <description>If set to -1, the position is automatic: Tweaks
will show up after Settings. If set to zero or more, the actual will show up after Settings. If set to zero or more, the actual
launcher position on the system menu.</description> launcher position on the system menu.</description>
</key> </key>
<key name="extensions-enable" type="b">
<default>true</default>
<summary>Extensions should be shown.</summary>
<description>If set, the Shell Extensions button is
shown.</description>
</key>
<key name="extensions-position" type="i">
<default>-1</default>
<range min="-1" max="99"/>
<summary>Position of the Extensions button.</summary>
<description>If set to -1, the position is automatic: Extensions
will show up after Tweaks (if shown), or Settings. If set to
zero or more, the actual launcher position on the system
menu.</description>
</key>
<key name="debug" type="b"> <key name="debug" type="b">
<default>false</default> <default>false</default>
<summary>Debugging.</summary> <summary>Debugging.</summary>

View File

@ -0,0 +1 @@
var VERSION = parseInt(imports.misc.config.PACKAGE_VERSION.replace(/^3\./, '').split('.')[0])

View File

@ -9,7 +9,8 @@ const SETTINGS = Convenience.getSettings()
const WM_PREFS = Convenience.getPreferences() const WM_PREFS = Convenience.getPreferences()
const USER_CONFIG = GLib.get_user_config_dir() const USER_CONFIG = GLib.get_user_config_dir()
const USER_STYLES = `${USER_CONFIG}/gtk-3.0/gtk.css` const USER_STYLES_GTK3 = `${USER_CONFIG}/gtk-3.0/gtk.css`
const USER_STYLES_GTK4 = `${USER_CONFIG}/gtk-4.0/gtk.css`
function fileExists(path) { function fileExists(path) {
return GLib.file_test(path, GLib.FileTest.EXISTS) return GLib.file_test(path, GLib.FileTest.EXISTS)
@ -33,16 +34,21 @@ function getFileContents(path) {
} }
function setFileContents(path, contents) { function setFileContents(path, contents) {
if (!fileExists(path)) {
const dirname = GLib.path_get_dirname(path)
GLib.mkdir_with_parents(dirname, parseInt('0700', 8))
}
GLib.file_set_contents(path, contents) GLib.file_set_contents(path, contents)
} }
function resetGtkStyles() { function resetGtkStyles(filepath) {
let style = getFileContents(USER_STYLES) let style = getFileContents(filepath)
style = style.replace(/\/\* UNITE ([\s\S]*?) UNITE \*\/\n/g, '') style = style.replace(/\/\* UNITE ([\s\S]*?) UNITE \*\/\n/g, '')
style = style.replace(/@import.*unite@hardpixel\.eu.*css['"]\);\n/g, '') style = style.replace(/@import.*unite@hardpixel\.eu.*css['"]\);\n/g, '')
setFileContents(USER_STYLES, style) setFileContents(filepath, style)
} }
var Signals = class Signals { var Signals = class Signals {
@ -154,22 +160,23 @@ var WidgetStyle = class WidgetStyle {
} }
var GtkStyle = class GtkStyle { var GtkStyle = class GtkStyle {
constructor(name, contents) { constructor(filepath, name, contents) {
this.filepath = filepath
this.contents = `/* UNITE ${name} */\n${contents}\n/* ${name} UNITE */\n` this.contents = `/* UNITE ${name} */\n${contents}\n/* ${name} UNITE */\n`
} }
get existing() { get existing() {
return getFileContents(USER_STYLES) return getFileContents(this.filepath)
} }
load() { load() {
const style = this.contents + this.existing const style = this.contents + this.existing
setFileContents(USER_STYLES, style) setFileContents(this.filepath, style)
} }
unload() { unload() {
const style = this.existing.replace(this.contents, '') const style = this.existing.replace(this.contents, '')
setFileContents(USER_STYLES, style) setFileContents(this.filepath, style)
} }
} }
@ -214,9 +221,14 @@ var Styles = class Styles {
this.setStyle(name, WidgetStyle, widget, styles) this.setStyle(name, WidgetStyle, widget, styles)
} }
addGtkStyle(name, contents) { addGtk3Style(name, contents) {
this.deleteStyle(name) this.deleteStyle(name)
this.setStyle(name, GtkStyle, name, contents) this.setStyle(name, GtkStyle, USER_STYLES_GTK3, name, contents)
}
addGtk4Style(name, contents) {
this.deleteStyle(name)
this.setStyle(name, GtkStyle, USER_STYLES_GTK4, name, contents)
} }
removeAll() { removeAll() {
@ -226,4 +238,5 @@ var Styles = class Styles {
} }
} }
resetGtkStyles() resetGtkStyles(USER_STYLES_GTK3)
resetGtkStyles(USER_STYLES_GTK4)

View File

@ -3,13 +3,11 @@ const St = imports.gi.St
const Clutter = imports.gi.Clutter const Clutter = imports.gi.Clutter
const GtkSettings = imports.gi.Gtk.Settings.get_default() const GtkSettings = imports.gi.Gtk.Settings.get_default()
const Main = imports.ui.main const Main = imports.ui.main
const Config = imports.misc.config
const Unite = imports.misc.extensionUtils.getCurrentExtension() const Unite = imports.misc.extensionUtils.getCurrentExtension()
const AppMenu = Main.panel.statusArea.appMenu const AppMenu = Main.panel.statusArea.appMenu
const AggMenu = Main.panel.statusArea.aggregateMenu const AggMenu = Main.panel.statusArea.aggregateMenu
const Handlers = Unite.imports.handlers const Handlers = Unite.imports.handlers
const VERSION = Unite.imports.constants.VERSION
const VERSION = parseInt(Config.PACKAGE_VERSION.split('.')[1])
function actorHasClass(actor, name) { function actorHasClass(actor, name) {
return actor.has_style_class_name && actor.has_style_class_name(name) return actor.has_style_class_name && actor.has_style_class_name(name)
@ -81,6 +79,7 @@ var LayoutManager = GObject.registerClass(
'hide-app-menu-icon', this._onHideAppMenuIcon.bind(this) 'hide-app-menu-icon', this._onHideAppMenuIcon.bind(this)
) )
if (VERSION < 40) {
this.settings.connect( this.settings.connect(
'hide-app-menu-arrow', this._onHideAppMenuArrow.bind(this) 'hide-app-menu-arrow', this._onHideAppMenuArrow.bind(this)
) )
@ -92,16 +91,17 @@ var LayoutManager = GObject.registerClass(
this.settings.connect( this.settings.connect(
'hide-dropdown-arrows', this._onHideDropdownArrows.bind(this) 'hide-dropdown-arrows', this._onHideDropdownArrows.bind(this)
) )
}
this.settings.connect(
'use-system-fonts', this._onChangeStyles.bind(this)
)
this.settings.connect( this.settings.connect(
'reduce-panel-spacing', this._onChangeStyles.bind(this) 'reduce-panel-spacing', this._onChangeStyles.bind(this)
) )
if (VERSION < 36) { if (VERSION < 36) {
this.settings.connect(
'use-system-fonts', this._onChangeStyles.bind(this)
)
this.signals.connect( this.signals.connect(
GtkSettings, 'notify::gtk-font-name', this._onChangeStyles.bind(this) GtkSettings, 'notify::gtk-font-name', this._onChangeStyles.bind(this)
) )
@ -245,18 +245,26 @@ var LayoutManager = GObject.registerClass(
activate() { activate() {
this._onNotificationsChange() this._onNotificationsChange()
this._onHideAppMenuIcon() this._onHideAppMenuIcon()
if (VERSION < 40) {
this._onHideAppMenuArrow() this._onHideAppMenuArrow()
this._onHideAggMenuArrow() this._onHideAggMenuArrow()
this._onHideDropdownArrows() this._onHideDropdownArrows()
}
this._onChangeStyles() this._onChangeStyles()
} }
destroy() { destroy() {
this._resetNotifications() this._resetNotifications()
this._resetAppMenuIcon() this._resetAppMenuIcon()
if (VERSION < 40) {
this._resetAppMenuArrow() this._resetAppMenuArrow()
this._resetAggMenuArrow() this._resetAggMenuArrow()
this._resetDropdownArrows() this._resetDropdownArrows()
}
this._resetStyles() this._resetStyles()
this._syncStyles() this._syncStyles()

View File

@ -8,9 +8,10 @@
"3.34", "3.34",
"3.32", "3.32",
"3.36", "3.36",
"3.38" "3.38",
"40.0"
], ],
"url": "https://github.com/hardpixel/unite-shell", "url": "https://github.com/hardpixel/unite-shell",
"uuid": "unite@hardpixel.eu", "uuid": "unite@hardpixel.eu",
"version": 45 "version": 48
} }

View File

@ -10,14 +10,12 @@ const Shell = imports.gi.Shell
const AppSystem = imports.gi.Shell.AppSystem.get_default() const AppSystem = imports.gi.Shell.AppSystem.get_default()
const WinTracker = imports.gi.Shell.WindowTracker.get_default() const WinTracker = imports.gi.Shell.WindowTracker.get_default()
const Main = imports.ui.main const Main = imports.ui.main
const Config = imports.misc.config
const Unite = imports.misc.extensionUtils.getCurrentExtension() const Unite = imports.misc.extensionUtils.getCurrentExtension()
const AppMenu = Main.panel.statusArea.appMenu const AppMenu = Main.panel.statusArea.appMenu
const Activities = Main.panel.statusArea.activities const Activities = Main.panel.statusArea.activities
const Buttons = Unite.imports.buttons const Buttons = Unite.imports.buttons
const Handlers = Unite.imports.handlers const Handlers = Unite.imports.handlers
const VERSION = Unite.imports.constants.VERSION
const VERSION = parseInt(Config.PACKAGE_VERSION.split('.')[1])
var PanelExtension = class PanelExtension { var PanelExtension = class PanelExtension {
constructor(settings, key, callback) { constructor(settings, key, callback) {

View File

@ -1,10 +1,9 @@
const GObject = imports.gi.GObject const GObject = imports.gi.GObject
const Gtk = imports.gi.Gtk const Gtk = imports.gi.Gtk
const Config = imports.misc.config
const Unite = imports.misc.extensionUtils.getCurrentExtension() const Unite = imports.misc.extensionUtils.getCurrentExtension()
const Convenience = Unite.imports.convenience const Convenience = Unite.imports.convenience
const VERSION = Unite.imports.constants.VERSION
const VERSION = parseInt(Config.PACKAGE_VERSION.split('.')[1]) const TEMPLATE = VERSION < 40 ? 'settings-gtk3.ui' : 'settings-gtk4.ui'
var PrefsWidget = GObject.registerClass( var PrefsWidget = GObject.registerClass(
class UnitePrefsWidget extends Gtk.Box { class UnitePrefsWidget extends Gtk.Box {
@ -13,17 +12,14 @@ var PrefsWidget = GObject.registerClass(
super._init(params) super._init(params)
this._buildable = new Gtk.Builder() this._buildable = new Gtk.Builder()
this._buildable.add_from_file(`${Unite.path}/settings.ui`) this._buildable.add_from_file(`${Unite.path}/${TEMPLATE}`)
this._container = this._getWidget('prefs_widget') this._container = this._getWidget('prefs_widget')
if (VERSION < 40) {
this.add(this._container) this.add(this._container)
} else {
if (VERSION >= 36) { this.append(this._container)
const fonts = this._getWidget('use_system_fonts_section')
fonts.set_no_show_all(true)
fonts.set_visible(false)
fonts.set_sensitive(false)
} }
this._bindStrings() this._bindStrings()
@ -33,11 +29,37 @@ var PrefsWidget = GObject.registerClass(
this._bindIntegers() this._bindIntegers()
} }
startup() {
if (VERSION < 40) {
this.show_all()
}
if (VERSION >= 36) {
this._hideSetting('use-system-fonts')
}
if (VERSION >= 40) {
this._disableSetting('hide-dropdown-arrows')
this._disableSetting('hide-aggregate-menu-arrow')
this._disableSetting('hide-app-menu-arrow')
}
}
_getWidget(name) { _getWidget(name) {
let widgetName = name.replace(/-/g, '_') let widgetName = name.replace(/-/g, '_')
return this._buildable.get_object(widgetName) return this._buildable.get_object(widgetName)
} }
_hideSetting(name) {
const widget = this._getWidget(`${name}_section`)
widget.set_visible(false)
}
_disableSetting(name) {
const widget = this._getWidget(`${name}_section`)
widget.set_sensitive(false)
}
_bindInput(setting, prop) { _bindInput(setting, prop) {
let widget = this._getWidget(setting) let widget = this._getWidget(setting)
this._settings.bind(setting, widget, prop, this._settings.DEFAULT_BINDING) this._settings.bind(setting, widget, prop, this._settings.DEFAULT_BINDING)
@ -85,7 +107,7 @@ function init() {
function buildPrefsWidget() { function buildPrefsWidget() {
let widget = new PrefsWidget() let widget = new PrefsWidget()
widget.show_all() widget.startup()
return widget return widget
} }

View File

@ -21,6 +21,8 @@
<value value="18" nick="breeze" /> <value value="18" nick="breeze" />
<value value="19" nick="prof-gnome" /> <value value="19" nick="prof-gnome" />
<value value="20" nick="flat-remix" /> <value value="20" nick="flat-remix" />
<value value="21" nick="adwaita-dark" />
<value value="22" nick="canta" />
</enum> </enum>
<enum id="org.gnome.shell.extensions.unite.hideTitlebars"> <enum id="org.gnome.shell.extensions.unite.hideTitlebars">

View File

@ -47,11 +47,12 @@
<object class="GtkSwitch" id="extend_left_box"> <object class="GtkSwitch" id="extend_left_box">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="active">True</property> <property name="active">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -86,11 +87,12 @@
<object class="GtkSwitch" id="autofocus_windows"> <object class="GtkSwitch" id="autofocus_windows">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="active">True</property> <property name="active">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -125,11 +127,12 @@
<object class="GtkSwitch" id="show_legacy_tray"> <object class="GtkSwitch" id="show_legacy_tray">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="active">True</property> <property name="active">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -164,11 +167,12 @@
<object class="GtkSwitch" id="show_desktop_name"> <object class="GtkSwitch" id="show_desktop_name">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="active">True</property> <property name="active">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -203,11 +207,12 @@
<object class="GtkSwitch" id="enable_titlebar_actions"> <object class="GtkSwitch" id="enable_titlebar_actions">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="active">True</property> <property name="active">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -242,11 +247,12 @@
<object class="GtkSwitch" id="restrict_to_primary_screen"> <object class="GtkSwitch" id="restrict_to_primary_screen">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="active">True</property> <property name="active">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -282,6 +288,7 @@
<property name="width-request">170</property> <property name="width-request">170</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="halign">end</property>
<property name="active-id">1</property> <property name="active-id">1</property>
<items> <items>
<item id="0" translatable="yes">Never</item> <item id="0" translatable="yes">Never</item>
@ -290,7 +297,7 @@
</items> </items>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -326,6 +333,7 @@
<property name="width-request">170</property> <property name="width-request">170</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="halign">end</property>
<property name="active-id">2</property> <property name="active-id">2</property>
<items> <items>
<item id="0" translatable="yes">Never</item> <item id="0" translatable="yes">Never</item>
@ -336,7 +344,7 @@
</items> </items>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -372,6 +380,7 @@
<property name="width-request">170</property> <property name="width-request">170</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="halign">end</property>
<property name="active-id">2</property> <property name="active-id">2</property>
<items> <items>
<item id="0" translatable="yes">Never</item> <item id="0" translatable="yes">Never</item>
@ -382,7 +391,7 @@
</items> </items>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -418,6 +427,7 @@
<property name="width-request">170</property> <property name="width-request">170</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="halign">end</property>
<property name="active-id">2</property> <property name="active-id">2</property>
<items> <items>
<item id="0" translatable="yes">Never</item> <item id="0" translatable="yes">Never</item>
@ -428,7 +438,7 @@
</items> </items>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -464,6 +474,7 @@
<property name="width-request">170</property> <property name="width-request">170</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="halign">end</property>
<property name="active-id">2</property> <property name="active-id">2</property>
<items> <items>
<item id="0" translatable="yes">Center</item> <item id="0" translatable="yes">Center</item>
@ -472,7 +483,7 @@
</items> </items>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -486,19 +497,14 @@
</packing> </packing>
</child> </child>
</object> </object>
<packing>
<property name="tab-expand">True</property>
</packing>
</child> </child>
<child type="tab"> <child type="tab">
<object class="GtkLabel" id="general_label"> <object class="GtkLabel" id="general_label">
<property name="hexpand">True</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">General</property> <property name="label" translatable="yes">General</property>
</object> </object>
<packing>
<property name="tab-fill">False</property>
</packing>
</child> </child>
<child> <child>
<object class="GtkBox" id="appearance_prefs"> <object class="GtkBox" id="appearance_prefs">
@ -534,11 +540,12 @@
<object class="GtkSwitch" id="use_system_fonts"> <object class="GtkSwitch" id="use_system_fonts">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="active">True</property> <property name="active">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -573,10 +580,11 @@
<object class="GtkSwitch" id="greyscale_tray_icons"> <object class="GtkSwitch" id="greyscale_tray_icons">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property> <property name="valign">center</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -611,11 +619,12 @@
<object class="GtkSwitch" id="hide_dropdown_arrows"> <object class="GtkSwitch" id="hide_dropdown_arrows">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="active">True</property> <property name="active">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -650,10 +659,11 @@
<object class="GtkSwitch" id="hide_aggregate_menu_arrow"> <object class="GtkSwitch" id="hide_aggregate_menu_arrow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property> <property name="valign">center</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -688,11 +698,12 @@
<object class="GtkSwitch" id="hide_app_menu_arrow"> <object class="GtkSwitch" id="hide_app_menu_arrow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="active">True</property> <property name="active">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -727,11 +738,12 @@
<object class="GtkSwitch" id="hide_app_menu_icon"> <object class="GtkSwitch" id="hide_app_menu_icon">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="active">True</property> <property name="active">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -766,11 +778,12 @@
<object class="GtkSwitch" id="reduce_panel_spacing"> <object class="GtkSwitch" id="reduce_panel_spacing">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="active">True</property> <property name="active">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -806,10 +819,11 @@
<property name="width-request">170</property> <property name="width-request">170</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">end</property>
<property name="text" translatable="yes">GNOME Desktop</property> <property name="text" translatable="yes">GNOME Desktop</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -844,11 +858,12 @@
<property name="width-request">170</property> <property name="width-request">170</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">end</property>
<property name="text" translatable="yes">0</property> <property name="text" translatable="yes">0</property>
<property name="adjustment">maxwidth_appmenu_adjustment</property> <property name="adjustment">maxwidth_appmenu_adjustment</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -883,6 +898,7 @@
<property name="width-request">170</property> <property name="width-request">170</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="halign">end</property>
<property name="active-id">2</property> <property name="active-id">2</property>
<items> <items>
<item id="0" translatable="yes">Start</item> <item id="0" translatable="yes">Start</item>
@ -891,7 +907,7 @@
</items> </items>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -908,7 +924,6 @@
<object class="GtkBox" id="window_buttons_placement_section"> <object class="GtkBox" id="window_buttons_placement_section">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="no-show-all">True</property>
<property name="spacing">50</property> <property name="spacing">50</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
@ -928,6 +943,7 @@
<property name="width-request">170</property> <property name="width-request">170</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="halign">end</property>
<property name="active-id">auto</property> <property name="active-id">auto</property>
<items> <items>
<item id="auto" translatable="yes">Auto</item> <item id="auto" translatable="yes">Auto</item>
@ -938,7 +954,7 @@
</items> </items>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -955,7 +971,6 @@
<object class="GtkBox" id="window_buttons_theme_section"> <object class="GtkBox" id="window_buttons_theme_section">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="no-show-all">True</property>
<property name="spacing">50</property> <property name="spacing">50</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
@ -975,6 +990,7 @@
<property name="width-request">170</property> <property name="width-request">170</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="halign">end</property>
<property name="active-id">0</property> <property name="active-id">0</property>
<items> <items>
<item id="0" translatable="yes">Default Dark</item> <item id="0" translatable="yes">Default Dark</item>
@ -998,10 +1014,12 @@
<item id="18" translatable="yes">Breeze</item> <item id="18" translatable="yes">Breeze</item>
<item id="19" translatable="yes">Prof-Gnome</item> <item id="19" translatable="yes">Prof-Gnome</item>
<item id="20" translatable="yes">Flat Remix</item> <item id="20" translatable="yes">Flat Remix</item>
<item id="21" translatable="yes">Adwaita Dark</item>
<item id="22" translatable="yes">Canta</item>
</items> </items>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
@ -1015,21 +1033,14 @@
</packing> </packing>
</child> </child>
</object> </object>
<packing>
<property name="position">1</property>
<property name="tab-expand">True</property>
</packing>
</child> </child>
<child type="tab"> <child type="tab">
<object class="GtkLabel" id="appearance_label"> <object class="GtkLabel" id="appearance_label">
<property name="hexpand">True</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">Appearance</property> <property name="label" translatable="yes">Appearance</property>
</object> </object>
<packing>
<property name="position">1</property>
<property name="tab-fill">False</property>
</packing>
</child> </child>
</object> </object>
</interface> </interface>

View File

@ -0,0 +1,618 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="unite">
<requires lib="gtk" version="4.0"/>
<object class="GtkAdjustment" id="maxwidth_appmenu_adjustment">
<property name="upper">1000</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkNotebook" id="prefs_widget">
<property name="hexpand">1</property>
<property name="show-border">0</property>
<property name="scrollable">1</property>
<child>
<object class="GtkNotebookPage">
<property name="child">
<object class="GtkBox" id="general_prefs">
<property name="can-focus">0</property>
<property name="valign">start</property>
<property name="margin-start">20</property>
<property name="margin-end">20</property>
<property name="margin-top">20</property>
<property name="margin-bottom">20</property>
<property name="orientation">vertical</property>
<property name="spacing">15</property>
<property name="homogeneous">1</property>
<child>
<object class="GtkBox" id="extend_left_box_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Extend top bar left box</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="extend_left_box">
<property name="hexpand">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="active">1</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="autofocus_windows_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Auto focus new windows</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="autofocus_windows">
<property name="hexpand">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="active">1</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="show_legacy_tray_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Show system tray in top bar</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="show_legacy_tray">
<property name="hexpand">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="active">1</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="show_desktop_name_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Show desktop name in top bar</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="show_desktop_name">
<property name="hexpand">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="active">1</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="enable_titlebar_actions_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Enable titlebar actions on top bar click</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="enable_titlebar_actions">
<property name="hexpand">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="active">1</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="restrict_to_primary_screen_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Restrict functionalities to the primary screen</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="restrict_to_primary_screen">
<property name="hexpand">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="active">1</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="hide_activities_button_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Hide activities button</property>
</object>
</child>
<child>
<object class="GtkComboBoxText" id="hide_activities_button">
<property name="hexpand">1</property>
<property name="width-request">170</property>
<property name="can-focus">0</property>
<property name="halign">end</property>
<property name="active-id">1</property>
<items>
<item id="0" translatable="yes">Never</item>
<item id="1" translatable="yes">Auto</item>
<item id="2" translatable="yes">Always</item>
</items>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="hide_window_titlebars_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Hide window titlebars</property>
</object>
</child>
<child>
<object class="GtkComboBoxText" id="hide_window_titlebars">
<property name="hexpand">1</property>
<property name="width-request">170</property>
<property name="can-focus">0</property>
<property name="halign">end</property>
<property name="active-id">2</property>
<items>
<item id="0" translatable="yes">Never</item>
<item id="1" translatable="yes">Tiled</item>
<item id="2" translatable="yes">Maximized</item>
<item id="3" translatable="yes">Both</item>
<item id="4" translatable="yes">Always</item>
</items>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="show_window_title_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Show window title in app menu</property>
</object>
</child>
<child>
<object class="GtkComboBoxText" id="show_window_title">
<property name="hexpand">1</property>
<property name="width-request">170</property>
<property name="can-focus">0</property>
<property name="halign">end</property>
<property name="active-id">2</property>
<items>
<item id="0" translatable="yes">Never</item>
<item id="1" translatable="yes">Tiled</item>
<item id="2" translatable="yes">Maximized</item>
<item id="3" translatable="yes">Both</item>
<item id="4" translatable="yes">Always</item>
</items>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="show_window_buttons_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Show window buttons in top bar</property>
</object>
</child>
<child>
<object class="GtkComboBoxText" id="show_window_buttons">
<property name="hexpand">1</property>
<property name="width-request">170</property>
<property name="can-focus">0</property>
<property name="halign">end</property>
<property name="active-id">2</property>
<items>
<item id="0" translatable="yes">Never</item>
<item id="1" translatable="yes">Tiled</item>
<item id="2" translatable="yes">Maximized</item>
<item id="3" translatable="yes">Both</item>
<item id="4" translatable="yes">Always</item>
</items>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="notifications_position_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Notification messages position</property>
</object>
</child>
<child>
<object class="GtkComboBoxText" id="notifications_position">
<property name="hexpand">1</property>
<property name="width-request">170</property>
<property name="can-focus">0</property>
<property name="halign">end</property>
<property name="active-id">2</property>
<items>
<item id="0" translatable="yes">Center</item>
<item id="1" translatable="yes">Left</item>
<item id="2" translatable="yes">Right</item>
</items>
</object>
</child>
</object>
</child>
</object>
</property>
<property name="tab">
<object class="GtkLabel" id="general_label">
<property name="hexpand">1</property>
<property name="can-focus">0</property>
<property name="label" translatable="yes">General</property>
</object>
</property>
</object>
</child>
<child>
<object class="GtkNotebookPage">
<property name="child">
<object class="GtkBox" id="appearance_prefs">
<property name="can-focus">0</property>
<property name="valign">start</property>
<property name="margin-start">20</property>
<property name="margin-end">20</property>
<property name="margin-top">20</property>
<property name="margin-bottom">20</property>
<property name="orientation">vertical</property>
<property name="spacing">15</property>
<property name="homogeneous">1</property>
<child>
<object class="GtkBox" id="use_system_fonts_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Apply system fonts to shell theme</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="use_system_fonts">
<property name="hexpand">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="active">1</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="greyscale_tray_icons_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Convert tray icons to greyscale</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="greyscale_tray_icons">
<property name="hexpand">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="hide_dropdown_arrows_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Hide top bar dropdown arrows</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="hide_dropdown_arrows">
<property name="hexpand">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="active">1</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="hide_aggregate_menu_arrow_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Hide aggregate menu dropdown arrow</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="hide_aggregate_menu_arrow">
<property name="hexpand">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="hide_app_menu_arrow_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Hide app menu dropdown arrow</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="hide_app_menu_arrow">
<property name="hexpand">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="active">1</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="hide_app_menu_icon_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Hide app menu application icon</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="hide_app_menu_icon">
<property name="hexpand">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="active">1</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="reduce_panel_spacing_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Reduce top bar items spacing</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="reduce_panel_spacing">
<property name="hexpand">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="active">1</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="desktop_name_text_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Top bar desktop name text</property>
</object>
</child>
<child>
<object class="GtkEntry" id="desktop_name_text">
<property name="hexpand">1</property>
<property name="width-request">170</property>
<property name="halign">end</property>
<property name="text" translatable="yes">GNOME Desktop</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="app_menu_max_width_section">
<property name="can-focus">0</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Max width for the app menu</property>
</object>
</child>
<child>
<object class="GtkSpinButton" id="app_menu_max_width">
<property name="hexpand">1</property>
<property name="width-request">170</property>
<property name="halign">end</property>
<property name="text" translatable="yes">0</property>
<property name="adjustment">maxwidth_appmenu_adjustment</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="app_menu_ellipsize_mode_section">
<property name="can-focus">0</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Ellipsis mode for app menu</property>
</object>
</child>
<child>
<object class="GtkComboBoxText" id="app_menu_ellipsize_mode">
<property name="hexpand">1</property>
<property name="width-request">170</property>
<property name="can-focus">0</property>
<property name="halign">end</property>
<property name="active-id">2</property>
<items>
<item id="0" translatable="yes">Start</item>
<item id="1" translatable="yes">Middle</item>
<item id="2" translatable="yes">End</item>
</items>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="window_buttons_placement_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Top bar window buttons position</property>
</object>
</child>
<child>
<object class="GtkComboBoxText" id="window_buttons_placement">
<property name="hexpand">1</property>
<property name="width-request">170</property>
<property name="can-focus">0</property>
<property name="halign">end</property>
<property name="active-id">auto</property>
<items>
<item id="auto" translatable="yes">Auto</item>
<item id="left" translatable="yes">Left</item>
<item id="right" translatable="yes">Right</item>
<item id="first" translatable="yes">First</item>
<item id="last" translatable="yes">Last</item>
</items>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="window_buttons_theme_section">
<property name="can-focus">0</property>
<property name="spacing">50</property>
<child>
<object class="GtkLabel">
<property name="can-focus">0</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Top bar window buttons theme</property>
</object>
</child>
<child>
<object class="GtkComboBoxText" id="window_buttons_theme">
<property name="hexpand">1</property>
<property name="width-request">170</property>
<property name="can-focus">0</property>
<property name="halign">end</property>
<property name="active-id">0</property>
<items>
<item id="0" translatable="yes">Default Dark</item>
<item id="1" translatable="yes">Default Light</item>
<item id="2" translatable="yes">Ambiance</item>
<item id="3" translatable="yes">Radiance</item>
<item id="4" translatable="yes">Arc Dark</item>
<item id="5" translatable="yes">Arc Light</item>
<item id="6" translatable="yes">United Dark</item>
<item id="7" translatable="yes">United Light</item>
<item id="8" translatable="yes">Materia Dark</item>
<item id="9" translatable="yes">Materia Light</item>
<item id="10" translatable="yes">OSX Arc</item>
<item id="11" translatable="yes">Vertex</item>
<item id="12" translatable="yes">Pop Dark</item>
<item id="13" translatable="yes">Pop Light</item>
<item id="14" translatable="yes">Vimix</item>
<item id="15" translatable="yes">Yaru</item>
<item id="16" translatable="yes">Arrongin</item>
<item id="17" translatable="yes">Telinkrin</item>
<item id="18" translatable="yes">Breeze</item>
<item id="19" translatable="yes">Prof-Gnome</item>
<item id="20" translatable="yes">Flat Remix</item>
<item id="21" translatable="yes">Adwaita Dark</item>
<item id="22" translatable="yes">Canta</item>
</items>
</object>
</child>
</object>
</child>
</object>
</property>
<property name="tab">
<object class="GtkLabel" id="appearance_label">
<property name="hexpand">1</property>
<property name="can-focus">0</property>
<property name="label" translatable="yes">Appearance</property>
</object>
</property>
</object>
</child>
</object>
</interface>

View File

@ -3,10 +3,10 @@ window .titlebar:not(.selection-mode) {
padding-left: 0; padding-left: 0;
} }
window headerbar ~ headerbar:not(.selection-mode), window headerbar ~ headerbar:not(.selection-mode):not(.windowhandle),
window headerbar ~ .titlebar:not(.selection-mode), window headerbar ~ .titlebar:not(.selection-mode):not(.windowhandle),
window .titlebar ~ .titlebar:not(.selection-mode), window .titlebar ~ .titlebar:not(.selection-mode):not(.windowhandle),
window .titlebar ~ headerbar:not(.selection-mode) { window .titlebar ~ headerbar:not(.selection-mode):not(.windowhandle) {
padding-left: 6px; padding-left: 6px;
} }

View File

@ -3,10 +3,10 @@
padding-left: 0; padding-left: 0;
} }
.maximized headerbar ~ headerbar:not(.selection-mode), .maximized headerbar ~ headerbar:not(.selection-mode):not(.windowhandle),
.maximized headerbar ~ .titlebar:not(.selection-mode), .maximized headerbar ~ .titlebar:not(.selection-mode):not(.windowhandle),
.maximized .titlebar ~ .titlebar:not(.selection-mode), .maximized .titlebar ~ .titlebar:not(.selection-mode):not(.windowhandle),
.maximized .titlebar ~ headerbar:not(.selection-mode) { .maximized .titlebar ~ headerbar:not(.selection-mode):not(.windowhandle) {
padding-left: 6px; padding-left: 6px;
} }

View File

@ -3,10 +3,10 @@
padding-left: 0; padding-left: 0;
} }
.tiled headerbar ~ headerbar:not(.selection-mode), .tiled headerbar ~ headerbar:not(.selection-mode):not(.windowhandle),
.tiled headerbar ~ .titlebar:not(.selection-mode), .tiled headerbar ~ .titlebar:not(.selection-mode):not(.windowhandle),
.tiled .titlebar ~ .titlebar:not(.selection-mode), .tiled .titlebar ~ .titlebar:not(.selection-mode):not(.windowhandle),
.tiled .titlebar ~ headerbar:not(.selection-mode) { .tiled .titlebar ~ headerbar:not(.selection-mode):not(.windowhandle) {
padding-left: 6px; padding-left: 6px;
} }

View File

@ -4,7 +4,8 @@ window > headerbar > headerbar:not(.selection-mode),
window > .titlebar > .titlebar:not(.selection-mode), window > .titlebar > .titlebar:not(.selection-mode),
window > .titlebar > stack > headerbar:not(.selection-mode), window > .titlebar > stack > headerbar:not(.selection-mode),
window headerbar:last-child:not(.selection-mode), window headerbar:last-child:not(.selection-mode),
window .titlebar:last-child:not(.selection-mode) { window .titlebar:last-child:not(.selection-mode),
window .windowhandle:not(.selection-mode) {
padding-right: 0; padding-right: 0;
} }

View File

@ -4,7 +4,8 @@
.maximized > .titlebar > .titlebar:not(.selection-mode), .maximized > .titlebar > .titlebar:not(.selection-mode),
.maximized > .titlebar > stack > headerbar:not(.selection-mode), .maximized > .titlebar > stack > headerbar:not(.selection-mode),
.maximized headerbar:last-child:not(.selection-mode), .maximized headerbar:last-child:not(.selection-mode),
.maximized .titlebar:last-child:not(.selection-mode) { .maximized .titlebar:last-child:not(.selection-mode),
.maximized .windowhandle:not(.selection-mode) {
padding-right: 0; padding-right: 0;
} }

View File

@ -4,7 +4,8 @@
.tiled > .titlebar > .titlebar:not(.selection-mode), .tiled > .titlebar > .titlebar:not(.selection-mode),
.tiled > .titlebar > stack > headerbar:not(.selection-mode), .tiled > .titlebar > stack > headerbar:not(.selection-mode),
.tiled headerbar:last-child:not(.selection-mode), .tiled headerbar:last-child:not(.selection-mode),
.tiled .titlebar:last-child:not(.selection-mode) { .tiled .titlebar:last-child:not(.selection-mode),
.tiled .windowhandle:not(.selection-mode) {
padding-right: 0; padding-right: 0;
} }

View File

@ -0,0 +1,13 @@
window headerbar windowhandle {
margin-left: -6px;
}
window headerbar windowcontrols.start {
margin: 0 0 0 -200px;
opacity: 0;
}
window .titlebar.default-decoration {
margin: -200px 0 0;
opacity: 0;
}

View File

@ -0,0 +1,13 @@
.maximized headerbar windowhandle {
margin-left: -6px;
}
.maximized headerbar windowcontrols.start {
margin: 0 0 0 -200px;
opacity: 0;
}
.maximized .titlebar.default-decoration {
margin: -200px 0 0;
opacity: 0;
}

View File

@ -0,0 +1,13 @@
.tiled headerbar windowhandle {
margin-left: -6px;
}
.tiled headerbar windowcontrols.start {
margin: 0 0 0 -200px;
opacity: 0;
}
.tiled .titlebar.default-decoration {
margin: -200px 0 0;
opacity: 0;
}

View File

@ -0,0 +1,13 @@
window headerbar windowhandle {
margin-right: -6px;
}
window headerbar windowcontrols.end {
margin: 0 -200px 0 0;
opacity: 0;
}
window .titlebar.default-decoration {
margin: -200px 0 0;
opacity: 0;
}

View File

@ -0,0 +1,13 @@
.maximized headerbar windowhandle {
margin-right: -6px;
}
.maximized headerbar windowcontrols.end {
margin: 0 -200px 0 0;
opacity: 0;
}
.maximized .titlebar.default-decoration {
margin: -200px 0 0;
opacity: 0;
}

View File

@ -0,0 +1,13 @@
.tiled headerbar windowhandle {
margin-right: -6px;
}
.tiled headerbar windowcontrols.end {
margin: 0 -200px 0 0;
opacity: 0;
}
.tiled .titlebar.default-decoration {
margin: -200px 0 0;
opacity: 0;
}

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" xmlns:v="https://vecta.io/nano"><defs><linearGradient y2="2.4013" x2="16.02" y1="15.5601" x1="16.02" id="A" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1d1d1d" stop-opacity="0"/><stop offset="1" stop-opacity=".2008"/></linearGradient></defs><g transform="matrix(.73333333 0 0 .73333333 .26666748 .26666666)"><circle cx="16" cy="16" r="14.5" fill="#0e0e0e" stroke="#1d1d1d"/><path d="M2.4992 16a13.5008 13.5008 0 0 1 27.0015 0" fill="none" stroke="url(#A)"/></g><path d="M8.2857 7.384l.4654.0005c.255.011.4397.1993.6177.3833l2.6345 2.6323 2.6656-2.6334c.266-.231.3764-.3769.6174-.3839l.4346.0004.0002 1.0347c0 .286-.1047-.1208-.3207.0792l-2.6346 2.6354 2.6035 2.6033c.188.188.3513.3837.3513.6487l.0002.9342-.4344.0002c-.265 0-.4589-.6645-.6479-.8525l-2.6345-2.6343-2.635 2.6339c-.1932.1851-.3814.8569-.6488.8525l-.4344.0006.0002-.935c.0001-.265.1636-.4594.3516-.6484l2.6351-2.6039L8.639 8.4975c-.205-.1929-.3804.2016-.3532-.0786z" fill="#070707"/><path d="M8.2861 8.2841l.4653.0005c.255.011.4397.1993.6177.3833l2.6343 2.6323 2.6654-2.6334c.266-.231.3764-.3769.6174-.3839l.4345.0004.0002.4347c0 .286-.1047.4793-.3207.6793l-2.6344 2.6354 2.6033 2.6033c.188.188.3513.3837.3513.6487l.0002.4339-.4344.0002c-.265 0-.4588-.1642-.6478-.3522l-2.6343-2.6343-2.6349 2.6339c-.1931.1851-.3813.3566-.6488.3522l-.4344.0006.0002-.4347c.0001-.265.1636-.4594.3516-.6484l2.6349-2.6039-2.6333-2.6343c-.205-.1929-.3804-.3986-.3532-.6788z" fill="#eeeeec"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" xmlns:v="https://vecta.io/nano"><defs><linearGradient y2="-23.604" x2="45.021" y1="-9.472" x1="45.021" id="A" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1d1d1d" stop-opacity="0"/><stop offset="1"/></linearGradient><linearGradient y2="-4.599" x2="45.02" y1="8.56" x1="45.02" id="B" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1d1d1d" stop-opacity="0"/><stop offset="1" stop-color="#737373" stop-opacity=".322"/></linearGradient></defs><g transform="matrix(.733292 0 0 .733292 -20.998122 5.400376)"><circle cx="45" cy="9" r="14.501" fill="#373737" stroke="#1d1d1d"/><g fill="none"><path d="M31.498 9a13.502 13.502 0 1 1 27.003 0" stroke="url(#B)"/><path d="M30.501-9c0-8.007 6.491-14.499 14.499-14.499A14.5 14.5 0 0 1 59.499-9" transform="scale(1 -1)" stroke="url(#A)" stroke-width="1.002"/></g></g><path d="M8.286 7.384l.465.001c.255.011.44.199.618.383l2.634 2.632 2.666-2.633c.266-.231.376-.377.617-.384h.435v1.035c0 .286-.105-.121-.321.079l-2.635 2.635 2.603 2.603c.188.188.351.384.351.649v.934h-.434c-.265 0-.459-.664-.648-.852l-2.634-2.634-2.635 2.634c-.193.185-.381.857-.649.852h-.434v-.935c0-.265.164-.459.352-.648l2.635-2.604-2.633-2.634c-.205-.193-.38.202-.353-.079z" fill="#070707"/><path d="M8.286 8.284l.465.001c.255.011.44.199.618.383l2.634 2.632 2.665-2.633c.266-.231.376-.377.617-.384h.435v.435c0 .286-.105.479-.321.679l-2.634 2.635 2.603 2.603c.188.188.351.384.351.649v.434h-.434c-.265 0-.459-.164-.648-.352l-2.634-2.634-2.635 2.634c-.193.185-.381.357-.649.352l-.434.001v-.435c0-.265.164-.459.352-.648l2.635-2.604-2.633-2.634c-.205-.193-.38-.399-.353-.679z" fill="#eeeeec"/></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" xmlns:v="https://vecta.io/nano"><path d="M8.2857 7.384l.4654.0005c.255.011.4397.1993.6177.3833l2.6345 2.6323 2.6656-2.6334c.266-.231.3764-.3769.6174-.3839l.4346.0004.0002 1.0347c0 .286-.1047-.1208-.3207.0792l-2.6346 2.6354 2.6035 2.6033c.188.188.3513.3837.3513.6487l.0002.9342-.4344.0002c-.265 0-.4589-.6645-.6479-.8525l-2.6345-2.6343-2.635 2.6339c-.1932.1851-.3814.8569-.6488.8525l-.4344.0006.0002-.935c.0001-.265.1636-.4594.3516-.6484l2.6351-2.6039L8.639 8.4975c-.205-.1929-.3804.2016-.3532-.0786z" fill="#070707"/><path d="M8.2861 8.2841l.4653.0005c.255.011.4397.1993.6177.3833l2.6343 2.6323 2.6654-2.6334c.266-.231.3764-.3769.6174-.3839l.4345.0004.0002.4347c0 .286-.1047.4793-.3207.6793l-2.6344 2.6354 2.6033 2.6033c.188.188.3513.3837.3513.6487l.0002.4339-.4344.0002c-.265 0-.4588-.1642-.6478-.3522l-2.6343-2.6343-2.6349 2.6339c-.1931.1851-.3813.3566-.6488.3522l-.4344.0006.0002-.4347c.0001-.265.1636-.4594.3516-.6484l2.6349-2.6039-2.6333-2.6343c-.205-.1929-.3804-.3986-.3532-.6788z" fill="#eeeeec"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" xmlns:v="https://vecta.io/nano"><defs><linearGradient y2="2.401" x2="16.02" y1="15.56" x1="16.02" id="A" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1d1d1d" stop-opacity="0"/><stop offset="1" stop-opacity=".201"/></linearGradient></defs><g transform="matrix(.733333 0 0 .733333 .266667 .266667)"><circle cx="16" cy="16" r="14.5" fill="#0e0e0e" stroke="#1d1d1d"/><path d="M2.499 16a13.501 13.501 0 0 1 27.002 0" fill="none" stroke="url(#A)"/></g><path d="M8 7v8h8V7zm1 1h6v6H9z" fill="#070707"/><path d="M8 8v8h8V8zm1 1h6v6H9z" fill="#eeeeec"/></svg>

After

Width:  |  Height:  |  Size: 630 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" xmlns:v="https://vecta.io/nano"><defs><linearGradient y2="-23.604" x2="45.021" y1="-9.472" x1="45.021" id="A" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1d1d1d" stop-opacity="0"/><stop offset="1"/></linearGradient><linearGradient y2="-4.599" x2="45.02" y1="8.56" x1="45.02" id="B" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1d1d1d" stop-opacity="0"/><stop offset="1" stop-color="#737373" stop-opacity=".322"/></linearGradient></defs><g transform="matrix(.733292 0 0 .733292 -20.998122 5.400376)"><circle cx="45" cy="9" r="14.501" fill="#373737" stroke="#1d1d1d"/><g fill="none"><path d="M31.498 9a13.502 13.502 0 1 1 27.003 0" stroke="url(#B)"/><path d="M30.501-9c0-8.007 6.491-14.499 14.499-14.499A14.5 14.5 0 0 1 59.499-9" transform="scale(1 -1)" stroke="url(#A)" stroke-width="1.002"/></g></g><path d="M8 7v8h8V7zm1 1h6v6H9z" fill="#070707"/><path d="M8 8v8h8V8zm1 1h6v6H9z" fill="#eeeeec"/></svg>

After

Width:  |  Height:  |  Size: 1000 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" xmlns:v="https://vecta.io/nano"><path d="M8 7v8h8V7zm1 1h6v6H9z" fill="#070707"/><path d="M8 8v8h8V8zm1 1h6v6H9z" fill="#eeeeec"/></svg>

After

Width:  |  Height:  |  Size: 200 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" xmlns:v="https://vecta.io/nano"><defs><linearGradient y2="2.4013" x2="16.02" y1="15.5601" x1="16.02" id="A" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1d1d1d" stop-opacity="0"/><stop offset="1" stop-opacity=".2008"/></linearGradient></defs><g transform="matrix(.73333333 0 0 .73333333 .26666748 .26666666)"><circle cx="16" cy="16" r="14.5" fill="#0e0e0e" stroke="#1d1d1d"/><path d="M2.4992 16a13.5008 13.5008 0 0 1 27.0015 0" fill="none" stroke="url(#A)"/></g><g fill-rule="evenodd"><path d="M8 14h8v1H8z" fill="#070707"/><path d="M8 15h8v1H8z" fill="#eeeeec"/></g></svg>

After

Width:  |  Height:  |  Size: 653 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" xmlns:v="https://vecta.io/nano"><defs><linearGradient y2="-23.604" x2="45.0214" y1="-9.4725" x1="45.0214" id="A" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1d1d1d" stop-opacity="0"/><stop offset="1"/></linearGradient><linearGradient y2="-4.5994" x2="45.02" y1="8.56" x1="45.02" id="B" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1d1d1d" stop-opacity="0"/><stop offset="1" stop-color="#737373" stop-opacity=".3216"/></linearGradient></defs><g transform="matrix(.73329161 0 0 .73329161 -20.998122 5.4003755)"><circle cx="45" cy="9" r="14.5009" fill="#373737" stroke="#1d1d1d"/><g fill="none"><path d="M31.4985 9a13.5015 13.5015 0 1 1 27.0031 0" stroke="url(#B)"/><path d="M30.5011-9c0-8.0075 6.4914-14.4989 14.4989-14.4989A14.499 14.499 0 0 1 59.4989-9" transform="scale(1 -1)" stroke="url(#A)" stroke-width="1.0023"/></g></g><g fill-rule="evenodd"><path d="M8 14h8v1H8z" fill="#070707"/><path d="M8 15h8v1H8z" fill="#eeeeec"/></g></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill-rule="evenodd" xmlns:v="https://vecta.io/nano"><path d="M8 14h8v1H8z" fill="#070707"/><path d="M8 15h8v1H8z" fill="#eeeeec"/></svg>

After

Width:  |  Height:  |  Size: 200 B

View File

@ -0,0 +1,40 @@
.window-button .icon {
width: 24px;
height: 24px;
}
.close .icon {
background-image: url("close.svg");
}
.close:hover .icon {
background-image: url("close-hover.svg");
}
.close:active .icon {
background-image: url("close-active.svg");
}
.minimize .icon {
background-image: url("minimize.svg");
}
.minimize:hover .icon {
background-image: url("minimize-hover.svg");
}
.minimize:active .icon {
background-image: url("minimize-active.svg");
}
.maximize .icon {
background-image: url("maximize.svg");
}
.maximize:hover .icon {
background-image: url("maximize-hover.svg");
}
.maximize:active .icon {
background-image: url("maximize-active.svg");
}

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 4.233 4.233"><g style="display:inline"><g transform="matrix(.26458 0 0 .26458 -342.37 -65.352)" style="display:inline;opacity:1"><circle style="display:inline;opacity:.95;fill:#dc9a00;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" cx="1302" cy="255" r="7"/></g><path d="M91.626-150.638h.774a.778.778 0 0 1 .515.235l1.711 1.71 1.735-1.71c.199-.173.335-.23.515-.235h.75v.75c0 .215-.026.413-.187.563l-1.711 1.71 1.687 1.688a.76.76 0 0 1 .211.54v.75h-.75a.761.761 0 0 1-.539-.212l-1.71-1.71-1.712 1.71a.761.761 0 0 1-.539.211h-.75v-.75c0-.199.07-.398.211-.539l1.711-1.687-1.71-1.711a.681.681 0 0 1-.212-.563v-.75z" style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Andale Mono';-inkscape-font-specification:'Andale Mono';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:.65;fill:#000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78125;marker:none;enable-background:new" transform="matrix(.26458 0 0 .26458 -22.92 41.18)"/><path style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0" d="M86.625-155.638h16v16h-16z" transform="matrix(.26458 0 0 .26458 -22.92 41.18)"/></g></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 4.233 4.233"><defs><linearGradient id="a"><stop stop-color="#FFAC00"/></linearGradient><linearGradient xlink:href="#a" id="b" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.16667 0 0 1.16667 -217 -42.5)" x1="1296" y1="255" x2="1308" y2="255"/></defs><g style="display:inline"><g style="display:inline;opacity:1" transform="matrix(.26458 0 0 .26458 -342.37 -65.352)"><circle cy="255" cx="1302" style="display:inline;opacity:.95;fill:url(#b);fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" r="7"/></g><path style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Andale Mono';-inkscape-font-specification:'Andale Mono';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:.5;fill:#000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78125;marker:none;enable-background:new" d="M91.626-150.638h.774a.778.778 0 0 1 .515.235l1.711 1.71 1.735-1.71c.199-.173.335-.23.515-.235h.75v.75c0 .215-.026.413-.187.563l-1.711 1.71 1.687 1.688a.76.76 0 0 1 .211.54v.75h-.75a.761.761 0 0 1-.539-.212l-1.71-1.71-1.712 1.71a.761.761 0 0 1-.539.211h-.75v-.75c0-.199.07-.398.211-.539l1.711-1.687-1.71-1.711a.681.681 0 0 1-.212-.563v-.75z" transform="matrix(.26458 0 0 .26458 -22.92 41.18)"/><path style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0" d="M86.625-155.638h16v16h-16z" transform="matrix(.26458 0 0 .26458 -22.92 41.18)"/></g></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 4.233 4.233"><defs><linearGradient id="a"><stop stop-color="#FFAC00"/></linearGradient><linearGradient xlink:href="#a" id="b" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.16667 0 0 1.16667 -217 -42.5)" x1="1296" y1="255" x2="1308" y2="255"/></defs><g style="display:inline"><g transform="matrix(.26458 0 0 .26458 -342.37 -65.352)" style="display:inline;opacity:1"><circle style="display:inline;opacity:.95;fill:url(#b);fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" cx="1302" cy="255" r="7"/></g><path style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0" d="M86.625-155.638h16v16h-16z" transform="matrix(.26458 0 0 .26458 -22.92 41.18)"/></g></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 4.233 4.233"><g style="display:inline"><g style="display:inline;opacity:1" transform="matrix(.26458 0 0 .26458 -342.37 -65.352)"><circle cy="255" cx="1302" style="display:inline;opacity:.95;fill:#999;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" r="7"/><g style="fill:#c0e3ff;fill-opacity:1"><g style="display:inline;fill:#c0e3ff;fill-opacity:1"><path d="M87.8 972h3.381c.45 0 .817.368.82.819v3.382zm2.407 6.007h-3.395a.821.821 0 0 1-.819-.819v-3.395l4.214 4.214" style="opacity:.65;fill:#000;fill-opacity:1;fill-rule:evenodd;stroke:none" transform="translate(1213 -720)"/></g></g></g><path style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0" d="M513-185.638h16v16h-16z" transform="matrix(.26458 0 0 .26458 -135.731 49.117)"/></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 4.233 4.233"><g style="display:inline"><g transform="matrix(.26458 0 0 .26458 -342.37 -65.352)" style="display:inline;opacity:1"><circle style="display:inline;opacity:.95;fill:#b2b2b2;fill-opacity:.968379;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" cx="1302" cy="255" r="7"/><g style="fill:#c0e3ff;fill-opacity:1"><g style="display:inline;fill:#c0e3ff;fill-opacity:1"><path style="opacity:.5;fill:#000;fill-opacity:1;fill-rule:evenodd;stroke:none" d="M87.8 972h3.381c.45 0 .817.368.82.819v3.382zm2.407 6.007h-3.395a.821.821 0 0 1-.819-.819v-3.395l4.214 4.214" transform="translate(1213 -720)"/></g></g></g><path style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0" d="M513-185.638h16v16h-16z" transform="matrix(.26458 0 0 .26458 -135.731 49.117)"/></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 4.233 4.233"><g style="display:inline"><g style="display:inline;opacity:1" transform="matrix(.26458 0 0 .26458 -342.37 -65.352)"><circle cy="255" cx="1302" style="display:inline;opacity:.95;fill:#b2b2b2;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" r="7"/></g><path style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0" d="M513-185.638h16v16h-16z" transform="matrix(.26458 0 0 .26458 -135.731 49.117)"/></g></svg>

After

Width:  |  Height:  |  Size: 759 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 4.233 4.233"><g style="display:inline"><g style="display:inline;opacity:1" transform="matrix(.26458 0 0 .26458 -334.698 -65.352)"><circle cy="255" cx="1273" style="display:inline;opacity:.95;fill:#999;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" r="7"/><g style="display:inline;opacity:1;fill:#c0e3ff;fill-opacity:1"><g style="display:inline;fill:#c0e3ff;fill-opacity:1"><path style="color:#000;font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:.65;fill:#000;fill-opacity:1;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" d="M86 974v2h6v-2z" transform="translate(1184 -720)"/></g></g></g><path style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0" d="M484-185.638h16v16h-16z" transform="matrix(.26458 0 0 .26458 -128.058 49.117)"/></g></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 4.233 4.233"><g style="display:inline"><g transform="matrix(.26458 0 0 .26458 -334.698 -65.352)" style="display:inline;opacity:1"><circle style="display:inline;opacity:.95;fill:#b2b2b2;fill-opacity:.968379;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" cx="1273" cy="255" r="7"/><g style="display:inline;opacity:1;fill:#c0e3ff;fill-opacity:1"><g style="display:inline;fill:#c0e3ff;fill-opacity:1"><path d="M86 974v2h6v-2z" style="color:#000;font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:.5;fill:#000;fill-opacity:1;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" transform="translate(1184 -720)"/></g></g></g><path style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0" d="M484-185.638h16v16h-16z" transform="matrix(.26458 0 0 .26458 -128.058 49.117)"/></g></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 4.233 4.233"><g style="display:inline"><g style="display:inline;opacity:1" transform="matrix(.26458 0 0 .26458 -334.698 -65.352)"><circle cy="255" cx="1273" style="display:inline;opacity:.95;fill:#b2b2b2;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" r="7"/></g><path style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0" d="M484-185.638h16v16h-16z" transform="matrix(.26458 0 0 .26458 -128.058 49.117)"/></g></svg>

After

Width:  |  Height:  |  Size: 760 B

View File

@ -0,0 +1,40 @@
.window-button .icon {
width: 24px;
height: 24px;
}
.close .icon {
background-image: url("close.svg");
}
.close:hover .icon {
background-image: url("close-hover.svg");
}
.close:active .icon {
background-image: url("close-active.svg");
}
.minimize .icon {
background-image: url("minimize.svg");
}
.minimize:hover .icon {
background-image: url("minimize-hover.svg");
}
.minimize:active .icon {
background-image: url("minimize-active.svg");
}
.maximize .icon {
background-image: url("maximize.svg");
}
.maximize:hover .icon {
background-image: url("maximize-hover.svg");
}
.maximize:active .icon {
background-image: url("maximize-active.svg");
}

View File

@ -4,13 +4,11 @@ const GObject = imports.gi.GObject
const Meta = imports.gi.Meta const Meta = imports.gi.Meta
const WinTracker = imports.gi.Shell.WindowTracker.get_default() const WinTracker = imports.gi.Shell.WindowTracker.get_default()
const Main = imports.ui.main const Main = imports.ui.main
const Config = imports.misc.config
const Util = imports.misc.util const Util = imports.misc.util
const Unite = imports.misc.extensionUtils.getCurrentExtension() const Unite = imports.misc.extensionUtils.getCurrentExtension()
const AppMenu = Main.panel.statusArea.appMenu const AppMenu = Main.panel.statusArea.appMenu
const Handlers = Unite.imports.handlers const Handlers = Unite.imports.handlers
const VERSION = Unite.imports.constants.VERSION
const VERSION = parseInt(Config.PACKAGE_VERSION.split('.')[1])
const VALID_TYPES = [ const VALID_TYPES = [
Meta.WindowType.NORMAL, Meta.WindowType.NORMAL,
@ -25,6 +23,14 @@ const MOTIF_HINTS = '_MOTIF_WM_HINTS'
const _SHOW_FLAGS = ['0x2', '0x0', '0x1', '0x0', '0x0'] const _SHOW_FLAGS = ['0x2', '0x0', '0x1', '0x0', '0x0']
const _HIDE_FLAGS = ['0x2', '0x0', '0x2', '0x0', '0x0'] const _HIDE_FLAGS = ['0x2', '0x0', '0x2', '0x0', '0x0']
function safeSpawn(command) {
try {
return GLib.spawn_command_line_sync(command)
} catch (e) {
return [false, Bytes.fromString('')]
}
}
function isValid(win) { function isValid(win) {
return win && VALID_TYPES.includes(win.window_type) return win && VALID_TYPES.includes(win.window_type)
} }
@ -41,7 +47,7 @@ function getXid(win) {
} }
function getHint(xid, name, fallback) { function getHint(xid, name, fallback) {
const result = GLib.spawn_command_line_sync(`xprop -id ${xid} ${name}`) const result = safeSpawn(`xprop -id ${xid} ${name}`)
const string = Bytes.toString(result[1]) const string = Bytes.toString(result[1])
if (!string.match(/=/)) { if (!string.match(/=/)) {
@ -381,7 +387,7 @@ var WindowManager = GObject.registerClass(
) )
this.settings.connect( this.settings.connect(
'window-buttons-position', this._onStylesChange.bind(this) 'button-layout', this._onStylesChange.bind(this)
) )
if (VERSION < 36) { if (VERSION < 36) {
@ -470,12 +476,14 @@ var WindowManager = GObject.registerClass(
_onStylesChange() { _onStylesChange() {
if (this.hideTitlebars != 'never') { if (this.hideTitlebars != 'never') {
const variant = this.settings.get('window-buttons-position') const variant = this.settings.get('window-buttons-position')
const folder = `${Unite.path}/styles/buttons-${variant}` const folder = path => `${Unite.path}/styles/${path}/buttons-${variant}`
const content = `@import url('${folder}/${this.hideTitlebars}.css');` const content = path => `@import url('${folder(path)}/${this.hideTitlebars}.css');`
this.styles.addGtkStyle('windowDecorations', content) this.styles.addGtk3Style('windowDecorationsGTK3', content('gtk3'))
this.styles.addGtk4Style('windowDecorationsGTK4', content('gtk4'))
} else { } else {
this.styles.deleteStyle('windowDecorations') this.styles.deleteStyle('windowDecorationsGTK3')
this.styles.deleteStyle('windowDecorationsGTK4')
} }
} }

View File

@ -1 +0,0 @@
firefox.settings.services.mozilla.com:HSTS 0 18700 1647218225303,1,0,2

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"version":1,"listeners":{"remote-settings/monitor_changes":{"version":"\"1615665497160\"","sourceInfo":{"moduleURI":"resource://services-settings/remote-settings.js","symbolName":"remoteSettingsBroadcastHandler"}}}} {"version":1,"listeners":{"remote-settings/monitor_changes":{"version":"\"1617989709562\"","sourceInfo":{"moduleURI":"resource://services-settings/remote-settings.js","symbolName":"remoteSettingsBroadcastHandler"}}}}

View File

@ -1,5 +1,5 @@
[Compatibility] [Compatibility]
LastVersion=86.0.1_20210313191229/20210313191229 LastVersion=87.0_20210322115435/20210322115435
LastOSABI=Linux_x86_64-gcc3 LastOSABI=Linux_x86_64-gcc3
LastPlatformDir=/usr/lib/firefox LastPlatformDir=/usr/lib/firefox
LastAppDir=/usr/lib/firefox/browser LastAppDir=/usr/lib/firefox/browser

View File

@ -1 +1 @@
{"chrome-gnome-shell@gnome.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"wayback_machine@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"{9350bc42-47fb-4598-ae0f-825e3dd9ceba}":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"jid1-MnnxcxisBPnSXQ@jetpack":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"yayanotherspeeddial@bakadev.fr":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"uBlock0@raymondhill.net":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"formautofill@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"screenshots@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"webcompat@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"fxmonitor@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"default-theme@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"amazondotcom@search.mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"bing@search.mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"google@search.mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"twitter@search.mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"wikipedia@search.mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"ddg@search.mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"doh-rollout@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"ebay@search.mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"reset-search-defaults@mozilla.com":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]}} {"chrome-gnome-shell@gnome.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"wayback_machine@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"{9350bc42-47fb-4598-ae0f-825e3dd9ceba}":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"jid1-MnnxcxisBPnSXQ@jetpack":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"yayanotherspeeddial@bakadev.fr":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"uBlock0@raymondhill.net":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"formautofill@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"screenshots@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"webcompat@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"fxmonitor@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"default-theme@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"bing@search.mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"google@search.mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"twitter@search.mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"wikipedia@search.mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"ddg@search.mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"doh-rollout@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"ebay@search.mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"reset-search-defaults@mozilla.com":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"amazon@search.mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]}}

View File

@ -1 +1 @@
{"version":2,"prefs":{"websites.hyperlinkAuditingEnabled":{"initialValue":{},"precedenceList":[{"id":"jid1-MnnxcxisBPnSXQ@jetpack","installDate":1542628050000,"value":false,"enabled":true},{"id":"uBlock0@raymondhill.net","installDate":1542627999000,"value":false,"enabled":true}]},"network.networkPredictionEnabled":{"initialValue":{},"precedenceList":[{"id":"jid1-MnnxcxisBPnSXQ@jetpack","installDate":1542628050000,"value":false,"enabled":true},{"id":"uBlock0@raymondhill.net","installDate":1542627999000,"value":false,"enabled":true}]},"homepage_override":{"initialValue":{},"precedenceList":[{"id":"yayanotherspeeddial@bakadev.fr","installDate":1552785444000,"value":"moz-extension://f393b4c4-359a-4d1e-b377-fd4b41112e16/index.html","enabled":true}]}},"url_overrides":{"newTabURL":{"initialValue":"about:newtab","precedenceList":[{"id":"yayanotherspeeddial@bakadev.fr","installDate":1552785444000,"value":"moz-extension://f393b4c4-359a-4d1e-b377-fd4b41112e16/index.html","enabled":true},{"id":"michal.simonfy@gmail.com","installDate":1542628426000,"value":"moz-extension://981c6be9-159a-4b60-a87e-0e77059e9e1a/newtab.html","enabled":false}]}},"default_search":{"engineAdded":{"precedenceList":[{"id":"ddg@search.mozilla.org","installDate":1569709371053,"value":"DuckDuckGo","enabled":true},{"id":"wikipedia@search.mozilla.org","installDate":1569709371001,"value":"Wikipedia (en)","enabled":true},{"id":"google@search.mozilla.org","installDate":1569709370845,"value":"Google","enabled":true},{"id":"bing@search.mozilla.org","installDate":1569709370787,"value":"Bing","enabled":true},{"id":"amazondotcom@search.mozilla.org","installDate":1569709370692,"value":"Amazon.com","enabled":true}]}},"commands":{},"newTabNotification":{"yayanotherspeeddial@bakadev.fr":{"initialValue":false,"precedenceList":[{"id":"yayanotherspeeddial@bakadev.fr","installDate":1552785444000,"value":true,"enabled":true}]}},"homepageNotification":{},"tabHideNotification":{}} {"version":2,"prefs":{"websites.hyperlinkAuditingEnabled":{"initialValue":{},"precedenceList":[{"id":"jid1-MnnxcxisBPnSXQ@jetpack","installDate":1542628050000,"value":false,"enabled":true},{"id":"uBlock0@raymondhill.net","installDate":1542627999000,"value":false,"enabled":true}]},"network.networkPredictionEnabled":{"initialValue":{},"precedenceList":[{"id":"jid1-MnnxcxisBPnSXQ@jetpack","installDate":1542628050000,"value":false,"enabled":true},{"id":"uBlock0@raymondhill.net","installDate":1542627999000,"value":false,"enabled":true}]},"homepage_override":{"initialValue":{},"precedenceList":[{"id":"yayanotherspeeddial@bakadev.fr","installDate":1552785444000,"value":"moz-extension://f393b4c4-359a-4d1e-b377-fd4b41112e16/index.html","enabled":true}]}},"url_overrides":{"newTabURL":{"initialValue":"about:newtab","precedenceList":[{"id":"yayanotherspeeddial@bakadev.fr","installDate":1552785444000,"value":"moz-extension://f393b4c4-359a-4d1e-b377-fd4b41112e16/index.html","enabled":true},{"id":"michal.simonfy@gmail.com","installDate":1542628426000,"value":"moz-extension://981c6be9-159a-4b60-a87e-0e77059e9e1a/newtab.html","enabled":false}]}},"default_search":{"engineAdded":{"precedenceList":[{"id":"ddg@search.mozilla.org","installDate":1569709371053,"value":"DuckDuckGo","enabled":true},{"id":"wikipedia@search.mozilla.org","installDate":1569709371001,"value":"Wikipedia (en)","enabled":true},{"id":"google@search.mozilla.org","installDate":1569709370845,"value":"Google","enabled":true},{"id":"bing@search.mozilla.org","installDate":1569709370787,"value":"Bing","enabled":true}]}},"commands":{},"newTabNotification":{"yayanotherspeeddial@bakadev.fr":{"initialValue":false,"precedenceList":[{"id":"yayanotherspeeddial@bakadev.fr","installDate":1552785444000,"value":true,"enabled":true}]}},"homepageNotification":{},"tabHideNotification":{}}

View File

@ -19,16 +19,16 @@ user_pref("app.normandy.startupRolloutPrefs.doh-rollout.profileCreationThreshold
user_pref("app.normandy.startupRolloutPrefs.services.sync.bookmarks.buffer.enabled", true); user_pref("app.normandy.startupRolloutPrefs.services.sync.bookmarks.buffer.enabled", true);
user_pref("app.normandy.user_id", "f6151ad0-fece-4d81-9d5c-67449843ccf0"); user_pref("app.normandy.user_id", "f6151ad0-fece-4d81-9d5c-67449843ccf0");
user_pref("app.shield.optoutstudies.enabled", false); user_pref("app.shield.optoutstudies.enabled", false);
user_pref("app.update.lastUpdateTime.addon-background-update-timer", 1613762580); user_pref("app.update.lastUpdateTime.addon-background-update-timer", 1618001917);
user_pref("app.update.lastUpdateTime.blocklist-background-update-timer", 1588540518); user_pref("app.update.lastUpdateTime.blocklist-background-update-timer", 1588540518);
user_pref("app.update.lastUpdateTime.browser-cleanup-thumbnails", 1615682011); user_pref("app.update.lastUpdateTime.browser-cleanup-thumbnails", 1615682011);
user_pref("app.update.lastUpdateTime.recipe-client-addon-run", 1615681985); user_pref("app.update.lastUpdateTime.recipe-client-addon-run", 1617984710);
user_pref("app.update.lastUpdateTime.region-update-timer", 1613761980); user_pref("app.update.lastUpdateTime.region-update-timer", 1618002157);
user_pref("app.update.lastUpdateTime.rs-experiment-loader-timer", 1608565076); user_pref("app.update.lastUpdateTime.rs-experiment-loader-timer", 1608565076);
user_pref("app.update.lastUpdateTime.search-engine-update-timer", 1615682131); user_pref("app.update.lastUpdateTime.search-engine-update-timer", 1615682131);
user_pref("app.update.lastUpdateTime.services-settings-poll-changes", 1613762220); user_pref("app.update.lastUpdateTime.services-settings-poll-changes", 1618001797);
user_pref("app.update.lastUpdateTime.telemetry_modules_ping", 1573002408); user_pref("app.update.lastUpdateTime.telemetry_modules_ping", 1573002408);
user_pref("app.update.lastUpdateTime.xpi-signature-verification", 1613762700); user_pref("app.update.lastUpdateTime.xpi-signature-verification", 1618002037);
user_pref("browser.bookmarks.defaultLocation", "unfiled"); user_pref("browser.bookmarks.defaultLocation", "unfiled");
user_pref("browser.bookmarks.restore_default_bookmarks", false); user_pref("browser.bookmarks.restore_default_bookmarks", false);
user_pref("browser.cache.disk.amount_written", 1754406); user_pref("browser.cache.disk.amount_written", 1754406);
@ -48,44 +48,45 @@ user_pref("browser.engagement.library-button.has-used", true);
user_pref("browser.laterrun.bookkeeping.profileCreationTime", 1542627881); user_pref("browser.laterrun.bookkeeping.profileCreationTime", 1542627881);
user_pref("browser.laterrun.bookkeeping.sessionCount", 51); user_pref("browser.laterrun.bookkeeping.sessionCount", 51);
user_pref("browser.messaging-system.whatsNewPanel.enabled", false); user_pref("browser.messaging-system.whatsNewPanel.enabled", false);
user_pref("browser.migration.version", 104); user_pref("browser.migration.version", 107);
user_pref("browser.newtab.extensionControlled", true); user_pref("browser.newtab.extensionControlled", true);
user_pref("browser.newtab.privateAllowed", true); user_pref("browser.newtab.privateAllowed", true);
user_pref("browser.newtabpage.activity-stream.impressionId", "{7b66b9fa-c166-4db7-9cd2-1f61e10923fd}"); user_pref("browser.newtabpage.activity-stream.impressionId", "{7b66b9fa-c166-4db7-9cd2-1f61e10923fd}");
user_pref("browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts.havePinned", "google"); user_pref("browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts.havePinned", "google,amazon");
user_pref("browser.newtabpage.activity-stream.migrationExpired", true); user_pref("browser.newtabpage.activity-stream.migrationExpired", true);
user_pref("browser.newtabpage.activity-stream.migrationLastShownDate", 1542582000); user_pref("browser.newtabpage.activity-stream.migrationLastShownDate", 1542582000);
user_pref("browser.newtabpage.activity-stream.migrationRemainingDays", 3); user_pref("browser.newtabpage.activity-stream.migrationRemainingDays", 3);
user_pref("browser.newtabpage.pinned", "[{\"url\":\"https://google.com\",\"label\":\"@google\",\"searchTopSite\":true}]"); user_pref("browser.newtabpage.pinned", "[{\"url\":\"https://google.com\",\"label\":\"@google\",\"searchTopSite\":true},{\"url\":\"https://amazon.com\",\"label\":\"@amazon\",\"searchTopSite\":true}]");
user_pref("browser.newtabpage.storageVersion", 1); user_pref("browser.newtabpage.storageVersion", 1);
user_pref("browser.pageActions.persistedActions", "{\"version\":1,\"ids\":[\"bookmark\",\"bookmarkSeparator\",\"copyURL\",\"emailLink\",\"addSearchEngine\",\"screenshots_mozilla_org\",\"pinTab\"],\"idsInUrlbar\":[\"bookmark\"]}"); user_pref("browser.pageActions.persistedActions", "{\"version\":1,\"ids\":[\"bookmark\",\"bookmarkSeparator\",\"copyURL\",\"emailLink\",\"addSearchEngine\",\"screenshots_mozilla_org\",\"pinTab\"],\"idsInUrlbar\":[\"bookmark\"]}");
user_pref("browser.pagethumbnails.storage_version", 3); user_pref("browser.pagethumbnails.storage_version", 3);
user_pref("browser.region.update.first-seen", 1613761980); user_pref("browser.region.update.first-seen", 1613761980);
user_pref("browser.region.update.region", "GB"); user_pref("browser.region.update.region", "GB");
user_pref("browser.region.update.updated", 1613761980); user_pref("browser.region.update.updated", 1618002158);
user_pref("browser.rights.3.shown", true); user_pref("browser.rights.3.shown", true);
user_pref("browser.safebrowsing.provider.google4.lastupdatetime", "1613763738699"); user_pref("browser.safebrowsing.provider.google4.lastupdatetime", "1618003568665");
user_pref("browser.safebrowsing.provider.google4.nextupdatetime", "1613765555699"); user_pref("browser.safebrowsing.provider.google4.nextupdatetime", "1618005341665");
user_pref("browser.safebrowsing.provider.mozilla.lastupdatetime", "1615681989433"); user_pref("browser.safebrowsing.provider.mozilla.lastupdatetime", "1617984718577");
user_pref("browser.safebrowsing.provider.mozilla.nextupdatetime", "1615703589433"); user_pref("browser.safebrowsing.provider.mozilla.nextupdatetime", "1618006318577");
user_pref("browser.search.region", "ES"); user_pref("browser.search.region", "GB");
user_pref("browser.sessionstore.upgradeBackup.latestBuildID", "20210313191229"); user_pref("browser.sessionstore.upgradeBackup.latestBuildID", "20210322115435");
user_pref("browser.shell.checkDefaultBrowser", true); user_pref("browser.shell.checkDefaultBrowser", true);
user_pref("browser.shell.didSkipDefaultBrowserCheckOnFirstRun", true); user_pref("browser.shell.didSkipDefaultBrowserCheckOnFirstRun", true);
user_pref("browser.shell.mostRecentDateSetAsDefault", "1615682225"); user_pref("browser.shell.mostRecentDateSetAsDefault", "1618001768");
user_pref("browser.slowStartup.averageTime", 2467); user_pref("browser.slowStartup.averageTime", 1565);
user_pref("browser.slowStartup.samples", 4); user_pref("browser.slowStartup.samples", 1);
user_pref("browser.startup.homepage", "moz-extension://f393b4c4-359a-4d1e-b377-fd4b41112e16/index.html"); user_pref("browser.startup.homepage", "moz-extension://f393b4c4-359a-4d1e-b377-fd4b41112e16/index.html");
user_pref("browser.startup.homepage_override.buildID", "20210313191229"); user_pref("browser.startup.homepage_override.buildID", "20210322115435");
user_pref("browser.startup.homepage_override.extensionControlled", true); user_pref("browser.startup.homepage_override.extensionControlled", true);
user_pref("browser.startup.homepage_override.mstone", "86.0.1"); user_pref("browser.startup.homepage_override.mstone", "87.0");
user_pref("browser.startup.homepage_override.privateAllowed", true); user_pref("browser.startup.homepage_override.privateAllowed", true);
user_pref("browser.startup.lastColdStartupCheck", 1615682224); user_pref("browser.startup.lastColdStartupCheck", 1618001768);
user_pref("browser.startup.page", 3); user_pref("browser.startup.page", 3);
user_pref("browser.tabs.drawInTitlebar", false); user_pref("browser.tabs.drawInTitlebar", false);
user_pref("browser.tabs.extraDragSpace", true); user_pref("browser.tabs.extraDragSpace", true);
user_pref("browser.uiCustomization.state", "{\"placements\":{\"widget-overflow-fixed-list\":[\"browser-mon_xdman_sourceforge_net-browser-action\",\"_dda50e18-7461-4146-b781-2594b84c65d3_-browser-action\",\"_be4c6348-e64f-4ff9-9e48-47468de8aa64_-browser-action\",\"_f209234a-76f0-4735-9920-eb62507a54cd_-browser-action\",\"_471e7731-bf47-4ec7-afbc-053e98433943_-browser-action\",\"keepassxc-browser_keepassxc_org-browser-action\",\"_b9db16a4-6edc-47ec-a1f4-b86292ed211d_-browser-action\",\"ublock0_raymondhill_net-browser-action\",\"michal_simonfy_gmail_com-browser-action\",\"iridium_particlecore_github_io-browser-action\",\"https-everywhere_eff_org-browser-action\",\"jid1-bofifl9vbdl2zq_jetpack-browser-action\",\"jid1-mnnxcxisbpnsxq_jetpack-browser-action\",\"jid1-f9uj2thwoam5gq_jetpack-browser-action\",\"_9350bc42-47fb-4598-ae0f-825e3dd9ceba_-browser-action\"],\"nav-bar\":[\"sidebar-button\",\"back-button\",\"forward-button\",\"stop-reload-button\",\"urlbar-container\",\"downloads-button\",\"library-button\",\"add-ons-button\",\"chrome-gnome-shell_gnome_org-browser-action\",\"_a655a6b2-69a5-40de-a3b8-3f7f200c95a7_-browser-action\",\"aleks-v97_ro_ru-browser-action\",\"_b7f9d2cd-d772-4302-8c3f-eb941af36f76_-browser-action\",\"_5173bfae-59df-4a20-a9dd-0ab3e8c82e36_-browser-action\",\"wayback_machine_mozilla_org-browser-action\"],\"toolbar-menubar\":[\"menubar-items\"],\"TabsToolbar\":[\"tabbrowser-tabs\",\"new-tab-button\",\"alltabs-button\"],\"PersonalToolbar\":[\"personal-bookmarks\",\"managed-bookmarks\"]},\"seen\":[\"developer-button\",\"ublock0_raymondhill_net-browser-action\",\"keepassxc-browser_keepassxc_org-browser-action\",\"jid1-mnnxcxisbpnsxq_jetpack-browser-action\",\"_9350bc42-47fb-4598-ae0f-825e3dd9ceba_-browser-action\",\"jid1-bofifl9vbdl2zq_jetpack-browser-action\",\"chrome-gnome-shell_gnome_org-browser-action\",\"https-everywhere_eff_org-browser-action\",\"webide-button\",\"iridium_particlecore_github_io-browser-action\",\"_2e5ff8c8-32fe-46d0-9fc8-6b8986621f3c_-browser-action\",\"michal_simonfy_gmail_com-browser-action\",\"wayback_machine_mozilla_org-browser-action\",\"_a655a6b2-69a5-40de-a3b8-3f7f200c95a7_-browser-action\",\"_b9db16a4-6edc-47ec-a1f4-b86292ed211d_-browser-action\",\"feed-button\",\"jid1-f9uj2thwoam5gq_jetpack-browser-action\",\"yayanotherspeeddial_bakadev_fr-browser-action\",\"_be4c6348-e64f-4ff9-9e48-47468de8aa64_-browser-action\",\"_f209234a-76f0-4735-9920-eb62507a54cd_-browser-action\",\"browser-mon_xdman_sourceforge_net-browser-action\",\"_471e7731-bf47-4ec7-afbc-053e98433943_-browser-action\",\"aleks-v97_ro_ru-browser-action\",\"_dda50e18-7461-4146-b781-2594b84c65d3_-browser-action\",\"_af37054b-3ace-46a2-ac59-709e4412bec6_-browser-action\",\"_b7f9d2cd-d772-4302-8c3f-eb941af36f76_-browser-action\",\"_5173bfae-59df-4a20-a9dd-0ab3e8c82e36_-browser-action\"],\"dirtyAreaCache\":[\"PersonalToolbar\",\"nav-bar\",\"toolbar-menubar\",\"TabsToolbar\",\"widget-overflow-fixed-list\"],\"currentVersion\":16,\"newElementCount\":20}"); user_pref("browser.uiCustomization.state", "{\"placements\":{\"widget-overflow-fixed-list\":[\"browser-mon_xdman_sourceforge_net-browser-action\",\"_dda50e18-7461-4146-b781-2594b84c65d3_-browser-action\",\"_be4c6348-e64f-4ff9-9e48-47468de8aa64_-browser-action\",\"_f209234a-76f0-4735-9920-eb62507a54cd_-browser-action\",\"_471e7731-bf47-4ec7-afbc-053e98433943_-browser-action\",\"keepassxc-browser_keepassxc_org-browser-action\",\"_b9db16a4-6edc-47ec-a1f4-b86292ed211d_-browser-action\",\"ublock0_raymondhill_net-browser-action\",\"michal_simonfy_gmail_com-browser-action\",\"iridium_particlecore_github_io-browser-action\",\"https-everywhere_eff_org-browser-action\",\"jid1-bofifl9vbdl2zq_jetpack-browser-action\",\"jid1-mnnxcxisbpnsxq_jetpack-browser-action\",\"jid1-f9uj2thwoam5gq_jetpack-browser-action\",\"_9350bc42-47fb-4598-ae0f-825e3dd9ceba_-browser-action\"],\"nav-bar\":[\"sidebar-button\",\"back-button\",\"forward-button\",\"stop-reload-button\",\"urlbar-container\",\"downloads-button\",\"library-button\",\"add-ons-button\",\"chrome-gnome-shell_gnome_org-browser-action\",\"_a655a6b2-69a5-40de-a3b8-3f7f200c95a7_-browser-action\",\"aleks-v97_ro_ru-browser-action\",\"_b7f9d2cd-d772-4302-8c3f-eb941af36f76_-browser-action\",\"_5173bfae-59df-4a20-a9dd-0ab3e8c82e36_-browser-action\",\"wayback_machine_mozilla_org-browser-action\"],\"toolbar-menubar\":[\"menubar-items\"],\"TabsToolbar\":[\"tabbrowser-tabs\",\"new-tab-button\",\"alltabs-button\"],\"PersonalToolbar\":[\"personal-bookmarks\",\"managed-bookmarks\"]},\"seen\":[\"developer-button\",\"ublock0_raymondhill_net-browser-action\",\"keepassxc-browser_keepassxc_org-browser-action\",\"jid1-mnnxcxisbpnsxq_jetpack-browser-action\",\"_9350bc42-47fb-4598-ae0f-825e3dd9ceba_-browser-action\",\"jid1-bofifl9vbdl2zq_jetpack-browser-action\",\"chrome-gnome-shell_gnome_org-browser-action\",\"https-everywhere_eff_org-browser-action\",\"webide-button\",\"iridium_particlecore_github_io-browser-action\",\"_2e5ff8c8-32fe-46d0-9fc8-6b8986621f3c_-browser-action\",\"michal_simonfy_gmail_com-browser-action\",\"wayback_machine_mozilla_org-browser-action\",\"_a655a6b2-69a5-40de-a3b8-3f7f200c95a7_-browser-action\",\"_b9db16a4-6edc-47ec-a1f4-b86292ed211d_-browser-action\",\"feed-button\",\"jid1-f9uj2thwoam5gq_jetpack-browser-action\",\"yayanotherspeeddial_bakadev_fr-browser-action\",\"_be4c6348-e64f-4ff9-9e48-47468de8aa64_-browser-action\",\"_f209234a-76f0-4735-9920-eb62507a54cd_-browser-action\",\"browser-mon_xdman_sourceforge_net-browser-action\",\"_471e7731-bf47-4ec7-afbc-053e98433943_-browser-action\",\"aleks-v97_ro_ru-browser-action\",\"_dda50e18-7461-4146-b781-2594b84c65d3_-browser-action\",\"_af37054b-3ace-46a2-ac59-709e4412bec6_-browser-action\",\"_b7f9d2cd-d772-4302-8c3f-eb941af36f76_-browser-action\",\"_5173bfae-59df-4a20-a9dd-0ab3e8c82e36_-browser-action\"],\"dirtyAreaCache\":[\"PersonalToolbar\",\"nav-bar\",\"toolbar-menubar\",\"TabsToolbar\",\"widget-overflow-fixed-list\"],\"currentVersion\":16,\"newElementCount\":20}");
user_pref("browser.uidensity", 2); user_pref("browser.uidensity", 2);
user_pref("browser.urlbar.resultBuckets", "{\"children\":[{\"maxResultCount\":1,\"children\":[{\"group\":\"heuristicTest\"},{\"group\":\"heuristicExtension\"},{\"group\":\"heuristicSearchTip\"},{\"group\":\"heuristicOmnibox\"},{\"group\":\"heuristicUnifiedComplete\"},{\"group\":\"heuristicAutofill\"},{\"group\":\"heuristicTokenAliasEngine\"},{\"group\":\"heuristicFallback\"}]},{\"group\":\"extension\",\"maxResultCount\":5},{\"flexChildren\":true,\"children\":[{\"flexChildren\":true,\"children\":[{\"flex\":2,\"group\":\"formHistory\"},{\"flex\":4,\"group\":\"remoteSuggestion\"},{\"flex\":0,\"group\":\"tailSuggestion\"}],\"flex\":2},{\"group\":\"general\",\"flex\":1}]}]}");
user_pref("browser.urlbar.suggest.topsites", false); user_pref("browser.urlbar.suggest.topsites", false);
user_pref("browser.urlbar.timesBeforeHidingSuggestionsHint", 0); user_pref("browser.urlbar.timesBeforeHidingSuggestionsHint", 0);
user_pref("datareporting.healthreport.uploadEnabled", false); user_pref("datareporting.healthreport.uploadEnabled", false);
@ -102,7 +103,7 @@ user_pref("devtools.toolsidebar-width.inspector.splitsidebar", 350);
user_pref("devtools.webextensions.https-everywhere@eff.org.enabled", true); user_pref("devtools.webextensions.https-everywhere@eff.org.enabled", true);
user_pref("distribution.Manjaro.bookmarksProcessed", true); user_pref("distribution.Manjaro.bookmarksProcessed", true);
user_pref("distribution.archlinux.bookmarksProcessed", true); user_pref("distribution.archlinux.bookmarksProcessed", true);
user_pref("distribution.iniFile.exists.appversion", "86.0.1"); user_pref("distribution.iniFile.exists.appversion", "87.0");
user_pref("distribution.iniFile.exists.value", true); user_pref("distribution.iniFile.exists.value", true);
user_pref("distribution.manjaro.bookmarksProcessed", true); user_pref("distribution.manjaro.bookmarksProcessed", true);
user_pref("doh-rollout.balrog-migration-done", true); user_pref("doh-rollout.balrog-migration-done", true);
@ -110,7 +111,7 @@ user_pref("doh-rollout.doneFirstRun", true);
user_pref("doh-rollout.doorhanger-decision", "UIOk"); user_pref("doh-rollout.doorhanger-decision", "UIOk");
user_pref("doh-rollout.mode", 2); user_pref("doh-rollout.mode", 2);
user_pref("doh-rollout.self-enabled", true); user_pref("doh-rollout.self-enabled", true);
user_pref("dom.push.userAgentID", "abe24c5a23784d76ac28f48d28cf81ab"); user_pref("dom.push.userAgentID", "014c400361cf45dc864c5f3d35de5bb3");
user_pref("dom.security.https_only_mode", true); user_pref("dom.security.https_only_mode", true);
user_pref("dom.security.https_only_mode_ever_enabled", true); user_pref("dom.security.https_only_mode_ever_enabled", true);
user_pref("extensions.activeThemeID", "default-theme@mozilla.org"); user_pref("extensions.activeThemeID", "default-theme@mozilla.org");
@ -118,18 +119,19 @@ user_pref("extensions.blocklist.lastModified", "Sat, 09 Nov 2019 17:49:50 GMT");
user_pref("extensions.blocklist.pingCountTotal", 34); user_pref("extensions.blocklist.pingCountTotal", 34);
user_pref("extensions.blocklist.pingCountVersion", -1); user_pref("extensions.blocklist.pingCountVersion", -1);
user_pref("extensions.databaseSchema", 33); user_pref("extensions.databaseSchema", 33);
user_pref("extensions.getAddons.cache.lastUpdate", 1613762581); user_pref("extensions.getAddons.cache.lastUpdate", 1618001918);
user_pref("extensions.getAddons.databaseSchema", 6); user_pref("extensions.getAddons.databaseSchema", 6);
user_pref("extensions.htmlaboutaddons.recommendations.enabled", false); user_pref("extensions.htmlaboutaddons.recommendations.enabled", false);
user_pref("extensions.incognito.migrated", true); user_pref("extensions.incognito.migrated", true);
user_pref("extensions.lastAppBuildId", "20210313191229"); user_pref("extensions.lastAppBuildId", "20210322115435");
user_pref("extensions.lastAppVersion", "86.0.1"); user_pref("extensions.lastAppVersion", "87.0");
user_pref("extensions.lastPlatformVersion", "86.0.1"); user_pref("extensions.lastPlatformVersion", "87.0");
user_pref("extensions.pendingOperations", false); user_pref("extensions.pendingOperations", false);
user_pref("extensions.pocket.enabled", false); user_pref("extensions.pocket.enabled", false);
user_pref("extensions.pocket.settings.test.panelSignUp", "control"); user_pref("extensions.pocket.settings.test.panelSignUp", "control");
user_pref("extensions.reset_default_search.runonce.1", true); user_pref("extensions.reset_default_search.runonce.1", true);
user_pref("extensions.systemAddonSet", "{\"schema\":1,\"addons\":{}}"); user_pref("extensions.reset_default_search.runonce.3", false);
user_pref("extensions.systemAddonSet", "{\"schema\":1,\"directory\":\"{6d47fd85-d9b2-4d7f-ad25-67b50b8330f5}\",\"addons\":{\"reset-search-defaults@mozilla.com\":{\"version\":\"1.0.6\"}}}");
user_pref("extensions.ui.dictionary.hidden", true); user_pref("extensions.ui.dictionary.hidden", true);
user_pref("extensions.ui.extension.hidden", false); user_pref("extensions.ui.extension.hidden", false);
user_pref("extensions.ui.lastCategory", "addons://list/extension"); user_pref("extensions.ui.lastCategory", "addons://list/extension");
@ -149,7 +151,7 @@ user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.{5173bfae-59df-
user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.{9350bc42-47fb-4598-ae0f-825e3dd9ceba}", true); user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.{9350bc42-47fb-4598-ae0f-825e3dd9ceba}", true);
user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.{b7f9d2cd-d772-4302-8c3f-eb941af36f76}", true); user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.{b7f9d2cd-d772-4302-8c3f-eb941af36f76}", true);
user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.{b9db16a4-6edc-47ec-a1f4-b86292ed211d}", true); user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.{b9db16a4-6edc-47ec-a1f4-b86292ed211d}", true);
user_pref("extensions.webextensions.uuids", "{\"formautofill@mozilla.org\":\"a4d7ec28-e851-41cc-919e-4b6abfc4ac31\",\"webcompat@mozilla.org\":\"67be70b1-004e-4ced-a5cb-abcdb80ecc30\",\"screenshots@mozilla.org\":\"8889019e-8528-4d46-b076-7c13a2232811\",\"uBlock0@raymondhill.net\":\"90be17cd-7169-4943-9a04-3cd8bf7fec41\",\"jid1-MnnxcxisBPnSXQ@jetpack\":\"d439fe79-e9bd-449b-b9ec-cc2b271f80c0\",\"{9350bc42-47fb-4598-ae0f-825e3dd9ceba}\":\"dbb00a92-98b5-481a-8acc-56821f5c1539\",\"chrome-gnome-shell@gnome.org\":\"256c7ceb-2fd8-4e47-bdc3-cb06c28a2511\",\"wayback_machine@mozilla.org\":\"2f4890c9-7ffb-4c51-a3fe-9d7425f7ed15\",\"webcompat-reporter@mozilla.org\":\"2e83e420-d979-4787-9557-97f647d6315f\",\"fxmonitor@mozilla.org\":\"bd2839c5-8e0a-4e41-8c53-eefcc4875ae8\",\"yayanotherspeeddial@bakadev.fr\":\"f393b4c4-359a-4d1e-b377-fd4b41112e16\",\"baidu-code-update@mozillaonline.com\":\"f61cd0cf-a1d5-4113-8587-06e29e05637e\",\"default-theme@mozilla.org\":\"d2155536-c685-43df-be0f-018f123a12ed\",\"amazondotcom@search.mozilla.org\":\"8c0e7741-4192-47e1-9708-c9e259d0eaca\",\"bing@search.mozilla.org\":\"f5fe6ae3-339f-451e-984b-978668f8d2c4\",\"google@search.mozilla.org\":\"67356cdf-8ebd-41fd-b1cf-1c7c9584f8cc\",\"twitter@search.mozilla.org\":\"428eea81-75ef-4cb4-a60c-214f60fd583a\",\"wikipedia@search.mozilla.org\":\"8fa903b1-4c90-43ff-b079-874114d35423\",\"ddg@search.mozilla.org\":\"99023558-25b2-45f6-80b1-163f50505cd4\",\"doh-rollout@mozilla.org\":\"e6166d48-3218-457c-98d3-9b70f0b85e32\",\"{b9db16a4-6edc-47ec-a1f4-b86292ed211d}\":\"26d6ad01-a771-4b46-9e35-342122037141\",\"ebay@search.mozilla.org\":\"868d2b79-8a51-44b4-9543-d98ddc3608d7\",\"{b7f9d2cd-d772-4302-8c3f-eb941af36f76}\":\"c4a416bf-fe77-41cc-92a4-402cc6c6f9c9\",\"{5173bfae-59df-4a20-a9dd-0ab3e8c82e36}\":\"5fa9f4d9-b1b6-436a-976d-16c0d1f6a207\",\"keepassxc-browser@keepassxc.org\":\"ac01c99c-ee6d-49f3-bbce-5ef76b0c7c04\",\"reset-search-defaults@mozilla.com\":\"624a06c5-a250-496d-a0ac-dab6e94b4ce6\"}"); user_pref("extensions.webextensions.uuids", "{\"formautofill@mozilla.org\":\"a4d7ec28-e851-41cc-919e-4b6abfc4ac31\",\"webcompat@mozilla.org\":\"67be70b1-004e-4ced-a5cb-abcdb80ecc30\",\"screenshots@mozilla.org\":\"8889019e-8528-4d46-b076-7c13a2232811\",\"uBlock0@raymondhill.net\":\"90be17cd-7169-4943-9a04-3cd8bf7fec41\",\"jid1-MnnxcxisBPnSXQ@jetpack\":\"d439fe79-e9bd-449b-b9ec-cc2b271f80c0\",\"{9350bc42-47fb-4598-ae0f-825e3dd9ceba}\":\"dbb00a92-98b5-481a-8acc-56821f5c1539\",\"chrome-gnome-shell@gnome.org\":\"256c7ceb-2fd8-4e47-bdc3-cb06c28a2511\",\"wayback_machine@mozilla.org\":\"2f4890c9-7ffb-4c51-a3fe-9d7425f7ed15\",\"webcompat-reporter@mozilla.org\":\"2e83e420-d979-4787-9557-97f647d6315f\",\"fxmonitor@mozilla.org\":\"bd2839c5-8e0a-4e41-8c53-eefcc4875ae8\",\"yayanotherspeeddial@bakadev.fr\":\"f393b4c4-359a-4d1e-b377-fd4b41112e16\",\"baidu-code-update@mozillaonline.com\":\"f61cd0cf-a1d5-4113-8587-06e29e05637e\",\"default-theme@mozilla.org\":\"d2155536-c685-43df-be0f-018f123a12ed\",\"bing@search.mozilla.org\":\"f5fe6ae3-339f-451e-984b-978668f8d2c4\",\"google@search.mozilla.org\":\"67356cdf-8ebd-41fd-b1cf-1c7c9584f8cc\",\"twitter@search.mozilla.org\":\"428eea81-75ef-4cb4-a60c-214f60fd583a\",\"wikipedia@search.mozilla.org\":\"8fa903b1-4c90-43ff-b079-874114d35423\",\"ddg@search.mozilla.org\":\"99023558-25b2-45f6-80b1-163f50505cd4\",\"doh-rollout@mozilla.org\":\"e6166d48-3218-457c-98d3-9b70f0b85e32\",\"{b9db16a4-6edc-47ec-a1f4-b86292ed211d}\":\"26d6ad01-a771-4b46-9e35-342122037141\",\"ebay@search.mozilla.org\":\"868d2b79-8a51-44b4-9543-d98ddc3608d7\",\"{b7f9d2cd-d772-4302-8c3f-eb941af36f76}\":\"c4a416bf-fe77-41cc-92a4-402cc6c6f9c9\",\"{5173bfae-59df-4a20-a9dd-0ab3e8c82e36}\":\"5fa9f4d9-b1b6-436a-976d-16c0d1f6a207\",\"keepassxc-browser@keepassxc.org\":\"ac01c99c-ee6d-49f3-bbce-5ef76b0c7c04\",\"reset-search-defaults@mozilla.com\":\"624a06c5-a250-496d-a0ac-dab6e94b4ce6\",\"amazon@search.mozilla.org\":\"4ea06089-15aa-499a-af68-ad01c328549d\"}");
user_pref("fission.experiment.max-origins.last-disqualified", 0); user_pref("fission.experiment.max-origins.last-disqualified", 0);
user_pref("fission.experiment.max-origins.last-qualified", 1615681990); user_pref("fission.experiment.max-origins.last-qualified", 1615681990);
user_pref("fission.experiment.max-origins.qualified", true); user_pref("fission.experiment.max-origins.qualified", true);
@ -161,15 +163,15 @@ user_pref("gfx.blacklist.layers.opengl", 4);
user_pref("gfx.blacklist.layers.opengl.failureid", "FEATURE_FAILURE_SOFTWARE_GL"); user_pref("gfx.blacklist.layers.opengl.failureid", "FEATURE_FAILURE_SOFTWARE_GL");
user_pref("identity.fxaccounts.enabled", false); user_pref("identity.fxaccounts.enabled", false);
user_pref("identity.fxaccounts.toolbar.accessed", true); user_pref("identity.fxaccounts.toolbar.accessed", true);
user_pref("idle.lastDailyNotification", 1613762080); user_pref("idle.lastDailyNotification", 1618001939);
user_pref("lightweightThemes.usedThemes", "[]"); user_pref("lightweightThemes.usedThemes", "[]");
user_pref("media.benchmark.vp9.fps", 102); user_pref("media.benchmark.vp9.fps", 102);
user_pref("media.benchmark.vp9.versioncheck", 5); user_pref("media.benchmark.vp9.versioncheck", 5);
user_pref("media.gmp-gmpopenh264.abi", "x86_64-gcc3"); user_pref("media.gmp-gmpopenh264.abi", "x86_64-gcc3");
user_pref("media.gmp-gmpopenh264.lastUpdate", 1572996640); user_pref("media.gmp-gmpopenh264.lastUpdate", 1572996640);
user_pref("media.gmp-gmpopenh264.version", "1.8.1.1"); user_pref("media.gmp-gmpopenh264.version", "1.8.1.1");
user_pref("media.gmp-manager.buildID", "20210210003430"); user_pref("media.gmp-manager.buildID", "20210322115435");
user_pref("media.gmp-manager.lastCheck", 1613761988); user_pref("media.gmp-manager.lastCheck", 1618001900);
user_pref("media.gmp.storage.version.observed", 1); user_pref("media.gmp.storage.version.observed", 1);
user_pref("network.cookie.cookieBehavior", 5); user_pref("network.cookie.cookieBehavior", 5);
user_pref("network.dns.disablePrefetch", true); user_pref("network.dns.disablePrefetch", true);
@ -182,14 +184,14 @@ user_pref("pdfjs.enabledCache.state", true);
user_pref("pdfjs.migrationVersion", 2); user_pref("pdfjs.migrationVersion", 2);
user_pref("pdfjs.previousHandler.alwaysAskBeforeHandling", true); user_pref("pdfjs.previousHandler.alwaysAskBeforeHandling", true);
user_pref("pdfjs.previousHandler.preferredAction", 4); user_pref("pdfjs.previousHandler.preferredAction", 4);
user_pref("places.database.lastMaintenance", 1613762080); user_pref("places.database.lastMaintenance", 1618001939);
user_pref("places.history.expiration.transient_current_max_pages", 112348); user_pref("places.history.expiration.transient_current_max_pages", 112348);
user_pref("plugin.disable_full_page_plugin_for_types", "application/pdf"); user_pref("plugin.disable_full_page_plugin_for_types", "application/pdf");
user_pref("privacy.annotate_channels.strict_list.enabled", true); user_pref("privacy.annotate_channels.strict_list.enabled", true);
user_pref("privacy.cpd.offlineApps", true); user_pref("privacy.cpd.offlineApps", true);
user_pref("privacy.cpd.siteSettings", true); user_pref("privacy.cpd.siteSettings", true);
user_pref("privacy.purge_trackers.date_in_cookie_database", "0"); user_pref("privacy.purge_trackers.date_in_cookie_database", "0");
user_pref("privacy.purge_trackers.last_purge", "1613762080553"); user_pref("privacy.purge_trackers.last_purge", "1618001939340");
user_pref("privacy.sanitize.pending", "[]"); user_pref("privacy.sanitize.pending", "[]");
user_pref("privacy.sanitize.timeSpan", 0); user_pref("privacy.sanitize.timeSpan", 0);
user_pref("privacy.trackingprotection.enabled", true); user_pref("privacy.trackingprotection.enabled", true);
@ -198,40 +200,41 @@ user_pref("security.remote_settings.crlite_filters.checked", 1613762220);
user_pref("security.remote_settings.intermediates.checked", 1613762220); user_pref("security.remote_settings.intermediates.checked", 1613762220);
user_pref("security.sandbox.content.tempDirSuffix", "62ec57d4-3516-41bf-957e-19cd307d5b61"); user_pref("security.sandbox.content.tempDirSuffix", "62ec57d4-3516-41bf-957e-19cd307d5b61");
user_pref("security.sandbox.plugin.tempDirSuffix", "851284ee-3855-4de7-86af-976adc3a2c11"); user_pref("security.sandbox.plugin.tempDirSuffix", "851284ee-3855-4de7-86af-976adc3a2c11");
user_pref("services.blocklist.addons-mlbf.checked", 1615682676); user_pref("services.blocklist.addons-mlbf.checked", 1618001769);
user_pref("services.blocklist.addons.checked", 1598664411); user_pref("services.blocklist.addons.checked", 1598664411);
user_pref("services.blocklist.gfx.checked", 1615682676); user_pref("services.blocklist.gfx.checked", 1618001769);
user_pref("services.blocklist.onecrl.checked", 1565793602); user_pref("services.blocklist.onecrl.checked", 1565793602);
user_pref("services.blocklist.pinning.checked", 1613762220); user_pref("services.blocklist.pinning.checked", 1613762220);
user_pref("services.blocklist.plugins.checked", 1615682676); user_pref("services.blocklist.plugins.checked", 1618001769);
user_pref("services.settings.clock_skew_seconds", -693); user_pref("services.settings.clock_skew_seconds", -1170);
user_pref("services.settings.last_etag", "\"1615665497160\""); user_pref("services.settings.last_etag", "\"1617989709562\"");
user_pref("services.settings.last_update_seconds", 1615682676); user_pref("services.settings.last_update_seconds", 1618002966);
user_pref("services.settings.main.anti-tracking-url-decoration.last_check", 1615682676); user_pref("services.settings.main.anti-tracking-url-decoration.last_check", 1618001769);
user_pref("services.settings.main.cfr-fxa.last_check", 1615682676); user_pref("services.settings.main.cfr-fxa.last_check", 1618001769);
user_pref("services.settings.main.cfr.last_check", 1615682676); user_pref("services.settings.main.cfr.last_check", 1618001769);
user_pref("services.settings.main.fxmonitor-breaches.last_check", 1615682676); user_pref("services.settings.main.fxmonitor-breaches.last_check", 1618001769);
user_pref("services.settings.main.hijack-blocklists.last_check", 1615682676); user_pref("services.settings.main.hijack-blocklists.last_check", 1618001769);
user_pref("services.settings.main.language-dictionaries.last_check", 1615682676); user_pref("services.settings.main.language-dictionaries.last_check", 1618001769);
user_pref("services.settings.main.message-groups.last_check", 1615682676); user_pref("services.settings.main.message-groups.last_check", 1618001769);
user_pref("services.settings.main.messaging-experiments.last_check", 1604995344); user_pref("services.settings.main.messaging-experiments.last_check", 1604995344);
user_pref("services.settings.main.nimbus-desktop-experiments.last_check", 1615682676); user_pref("services.settings.main.nimbus-desktop-experiments.last_check", 1618001769);
user_pref("services.settings.main.normandy-recipes-capabilities.last_check", 1615682676); user_pref("services.settings.main.normandy-recipes-capabilities.last_check", 1618001769);
user_pref("services.settings.main.normandy-recipes.last_check", 1573409021); user_pref("services.settings.main.normandy-recipes.last_check", 1573409021);
user_pref("services.settings.main.onboarding.last_check", 1565793602); user_pref("services.settings.main.onboarding.last_check", 1565793602);
user_pref("services.settings.main.partitioning-exempt-urls.last_check", 1615682676); user_pref("services.settings.main.partitioning-exempt-urls.last_check", 1618001769);
user_pref("services.settings.main.password-recipes.last_check", 1615682676); user_pref("services.settings.main.password-recipes.last_check", 1618001769);
user_pref("services.settings.main.pioneer-study-addons-v1.last_check", 1615682676); user_pref("services.settings.main.pioneer-study-addons-v1.last_check", 1618001769);
user_pref("services.settings.main.pioneer-study-addons.last_check", 1615682676); user_pref("services.settings.main.pioneer-study-addons.last_check", 1618001769);
user_pref("services.settings.main.public-suffix-list.last_check", 1615682676); user_pref("services.settings.main.public-suffix-list.last_check", 1618001769);
user_pref("services.settings.main.search-config.last_check", 1615682676); user_pref("services.settings.main.search-config.last_check", 1618001769);
user_pref("services.settings.main.search-default-override-allowlist.last_check", 1615682676); user_pref("services.settings.main.search-default-override-allowlist.last_check", 1618001769);
user_pref("services.settings.main.search-telemetry.last_check", 1615682676); user_pref("services.settings.main.search-telemetry.last_check", 1618001769);
user_pref("services.settings.main.sites-classification.last_check", 1615682676); user_pref("services.settings.main.sites-classification.last_check", 1618001769);
user_pref("services.settings.main.tippytop.last_check", 1615682676); user_pref("services.settings.main.tippytop.last_check", 1618001769);
user_pref("services.settings.main.top-sites.last_check", 1615682676); user_pref("services.settings.main.top-sites.last_check", 1618001769);
user_pref("services.settings.main.url-classifier-skip-urls.last_check", 1615682676); user_pref("services.settings.main.url-classifier-skip-urls.last_check", 1618001769);
user_pref("services.settings.main.whats-new-panel.last_check", 1615682676); user_pref("services.settings.main.websites-with-shared-credential-backends.last_check", 1618001769);
user_pref("services.settings.main.whats-new-panel.last_check", 1618001769);
user_pref("services.settings.security.onecrl.checked", 1613762220); user_pref("services.settings.security.onecrl.checked", 1613762220);
user_pref("services.sync.clients.lastSync", "0"); user_pref("services.sync.clients.lastSync", "0");
user_pref("services.sync.declinedEngines", ""); user_pref("services.sync.declinedEngines", "");
@ -241,8 +244,8 @@ user_pref("services.sync.tabs.lastSync", "0");
user_pref("signon.importedFromSqlite", true); user_pref("signon.importedFromSqlite", true);
user_pref("signon.usage.hasEntry", false); user_pref("signon.usage.hasEntry", false);
user_pref("storage.vacuum.last.index", 0); user_pref("storage.vacuum.last.index", 0);
user_pref("storage.vacuum.last.places.sqlite", 1613762080); user_pref("storage.vacuum.last.places.sqlite", 1618001939);
user_pref("toolkit.startup.last_success", 1615682223); user_pref("toolkit.startup.last_success", 1618001766);
user_pref("toolkit.telemetry.archive.enabled", false); user_pref("toolkit.telemetry.archive.enabled", false);
user_pref("toolkit.telemetry.bhrPing.enabled", false); user_pref("toolkit.telemetry.bhrPing.enabled", false);
user_pref("toolkit.telemetry.cachedClientID", "c0ffeec0-ffee-c0ff-eec0-ffeec0ffeec0"); user_pref("toolkit.telemetry.cachedClientID", "c0ffeec0-ffee-c0ff-eec0-ffeec0ffeec0");

Some files were not shown because too many files have changed in this diff Show More