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
gnome-firmware
manjaro-printer
linux-latest
rebuild-detector
@ -102,7 +101,6 @@ gnome-font-viewer
gnome-keyring
fprintd #need for finger id reader
gnome-session
gnome-initial-setup
gnome-settings-daemon
gnome-shell
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 ExtensionUtils = imports.misc.extensionUtils;
const Config = imports.misc.config;
const Me = ExtensionUtils.getCurrentExtension();
const Lib = Me.imports.convenience;
const _d = Lib._log;
const Prefs = Me.imports.prefs;
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 {
@ -37,37 +186,35 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
_d("SDC: init");
this.menuItem = new PopupMenu.PopupSubMenuMenuItem('Extension initialising...', true);
this.deviceType = deviceType;
this._devices = {};
this._cards = [];
this._availableDevicesIds = {};
this._control = VolumeMenu.getMixerControl();
this._devices = new Map();
let _control = this._getMixerControl();
this._settings = Lib.getSettings(Prefs.SETTINGS_SCHEMA);
_d("Constructor" + deviceType);
_d("Constructor:" + deviceType);
this._setLog();
this._signalManager = new SignalManager();
this._signalManager.addSignal(this._settings, "changed::" + Prefs.ENABLE_LOG, this._setLog.bind(this));
if (this._control.get_state() == Gvc.MixerControlState.READY) {
this._onControlStateChanged();
if (_control.get_state() == Gvc.MixerControlState.READY) {
this._onControlStateChanged(_control);
}
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)); }
_onControlStateChanged() {
if (this._control.get_state() == Gvc.MixerControlState.READY) {
_onControlStateChanged(control) {
if (control.get_state() == Gvc.MixerControlState.READY) {
if (!this._initialised) {
this._initialised = true;
this._signalManager.addSignal(this._control, this.deviceType + "-added", this._deviceAdded.bind(this));
this._signalManager.addSignal(this._control, this.deviceType + "-removed", this._deviceRemoved.bind(this));
this._signalManager.addSignal(this._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(control, this.deviceType + "-added", this._deviceAdded.bind(this));
this._signalManager.addSignal(control, this.deviceType + "-removed", this._deviceRemoved.bind(this));
this._signalManager.addSignal(control, "active-" + this.deviceType + "-update", this._deviceActivated.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));
@ -79,7 +226,6 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
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);
/**
@ -91,33 +237,25 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
*/
let id = 0;
if (maxId < 0) {
let dummyDevice = new Gvc.MixerUIDevice();
maxId = dummyDevice.get_id();
}
_d("Max Id:" + maxId);
let defaultDevice = this.getDefaultDevice();
while (++id < maxId) {
let uidevice = this._deviceAdded(this._control, id);
if (uidevice) {
let stream = this._control.get_stream_from_device(uidevice);
if (stream) {
let stream_port = stream.get_port();
let uidevice_port = uidevice.get_port();
if (((!stream_port && !uidevice_port) ||
(stream_port && stream_port.port === uidevice_port)) &&
stream == defaultDevice) {
this._deviceActivated(this._control, id);
}
}
let dummyDevice = new Gvc.MixerUIDevice();
let maxId = dummyDevice.get_id();
_d("Max Id:" + maxId);
while (++id < maxId) {
this._deviceAdded(control, id);
}
let defaultStream = this.getDefaultStream(control);
if (defaultStream) {
let defaultDevice = control.lookup_device_from_stream(defaultStream);
if (defaultDevice) {
this._deviceActivated(control, defaultDevice.get_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));
let profileVisibility = this._settings.get_boolean(Prefs.SHOW_PROFILES);
this._setProfileTimer(profileVisibility);
if (this._controlStateChangeSignal) {
this._controlStateChangeSignal.disconnect();
@ -128,197 +266,131 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
}
}
_updateCards(control, cardId) {
this._cards = [];
let cards = this._control.get_cards();
for (let card of cards) {
this._cards.push(card.index);
_setProfileTimer(v) {
//We dont have any way to understand that the profile has changed in the settings
//Just an useless workaround
if (v) {
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) {
let obj = this._devices[id];
let uidevice = null;
_d("Added - "+ id);
let obj = this._devices.get(id);
let uidevice = this.lookupDeviceById(control, id);
_d("Added - " + id);
if (!obj) {
uidevice = this.lookupDeviceById(id);
if (!uidevice || uidevice.description.match(/Dummy\s+(Output|Input)/gi)) {
if (_isDeviceInValid(uidevice)) {
return null;
}
obj = new Object();
obj.id = id;
obj.uidevice = uidevice;
obj.text = uidevice.description;
let title = uidevice.description;
if (uidevice.origin != "")
obj.text += " - " + 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);
*/
title += " - " + uidevice.origin;
let icon = uidevice.get_icon_name();
if (icon == null || icon.trim() == "")
icon = this.getDefaultIcon();
let icon_name = this._getIcon(icon);
icon = this._getIcon(icon);
obj.item = this.menuItem.menu.addAction(obj.text, function() {
_d("Device Change request");
this.changeDevice(uidevice);
}.bind(this), icon_name);
obj = new SoundDeviceMenuItem(id, title, icon, Lib.getProfiles(control, uidevice), this._changeDeviceBase.bind(this), this._profileChangeCallback.bind(this));
if (!obj.profiles) {
obj.profiles = Lib.getProfiles(control, uidevice);
}
this.menuItem.menu.addMenuItem(obj);
obj.profilesitems.forEach(i => this.menuItem.menu.addMenuItem(i));
if (!obj.profilesitems) {
obj.profilesitems = [];
}
this._devices[id] = obj;
this._devices.set(id, obj);
}
else if (obj.isAvailable()) {
return //uidevice;
}
else {
uidevice = obj.uidevice;
obj.setAvailable(true);
}
_d("Device Name:" + obj.text);
if (obj.profiles) {
for (let profile of obj.profiles) {
_d("Profile:" + profile.name);
}
}
if (obj.active) {
return uidevice;
}
_d("Device Name:" + obj.title);
_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 = this._control.get_stream_from_device(uidevice);
let stream = control.get_stream_from_device(uidevice);
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;
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)) {
if (!dontcheck && !this._canShowDevice(control, uidevice, uidevice.port_available)) {
this._deviceRemoved(control, id, true);
}
this._setChooserVisibility();
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) {
let obj = this._devices[id];
//delete this._devices[id];
if (obj && obj.active) {
_d("Removed: " + id + ":" + obj.uidevice.description + ":" + obj.uidevice.port_name + ":" + obj.uidevice.origin);
if (!dontcheck && this._canShowDevice(obj.uidevice, false)) {
let obj = this._devices.get(id);
//let uidevice = this.lookupDeviceById(control,id);
if (obj && obj.isAvailable()) {
_d("Removed: " + id + ":" + obj.title);
/*
if (!dontcheck && this._canShowDevice(control, uidevice, false)) {
_d('Device removed, but not hiding as its set to be shown always');
return;
}
delete this._availableDevicesIds[id];
obj.item.actor.visible = 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;
}
}
}
}*/
obj.setVisibility(false);
obj.setAvailable(false);
/*
if (this.deviceRemovedTimout) {
GLib.source_remove(this.deviceRemovedTimout);
this.deviceRemovedTimout = null;
}
*/
/**
* If the active uidevice is removed, then need to activate the
* first available uidevice. However for some cases like Headphones,
* when the uidevice is removed, Speakers are automatically
* activated. So, lets wait for sometime before activating.
*/
this.deviceRemovedTimout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 1500, function() {
_d("Device Removed timeout");
if (obj === this._activeDevice) {
for (let id in this._devices) {
let device = this._devices[id];
if (device.active == true) {
this.changeDevice(device.uidevice);
break;
}
}
}
this.deviceRemovedTimout = null;
return false;
}.bind(this));
/* THIS MAY NOT BE NEEDED AS SHELL SEEMS TO ACTIVATE NEXT DEVICE
this.deviceRemovedTimout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 1500, function() {
_d("Device Removed timeout");
if (obj === this._activeDevice) {
let device = Object.keys(this._devices).map((id) => this._devices[id]).find(({active}) => active === true);
if(device){
this._changeDeviceBase(this._getMixerControl(), device.id);
}
}
this.deviceRemovedTimout = null;
return false;
}.bind(this));
*/
this._setChooserVisibility();
this._setVisibility();
}
@ -326,76 +398,77 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
_deviceActivated(control, id) {
_d("Activated:- " + id);
let obj = this._devices[id];
if (obj && obj !== this._activeDevice) {
_d("Activated: " + id + ":" + obj.uidevice.description + ":" + obj.uidevice.port_name + ":" + obj.uidevice.origin);
if (this._activeDevice) {
this._activeDevice.item.setOrnament(PopupMenu.Ornament.NONE);
if (this._activeDevice.item.remove_style_pseudo_class) {
this._activeDevice.item.remove_style_pseudo_class('checked');
}
else {
this._activeDevice.item.actor.remove_style_pseudo_class('checked');
}
}
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');
let obj = this._devices.get(id);
if (!obj) {
_d("Activated device not found in the list of devices, try to add");
this._deviceAdded(control, id);
obj = this._devices.get(id);
}
if (obj && id != this._activeDeviceId) {
_d("Activated: " + id + ":" + obj.title);
if (this._activeDeviceId) {
this._devices.get(this._activeDeviceId).setActiveDevice(false);
}
this._activeDeviceId = id;
obj.setActiveDevice(true);
obj.item._ornamentLabel.text = '\u266B';
this.menuItem.label.text = obj.text;
this.menuItem.label.text = obj.title;
if (!this._settings.get_boolean(Prefs.HIDE_MENU_ICONS)) {
let icon = obj.uidevice.get_icon_name();
if (icon == null || icon.trim() == "")
icon = this.getDefaultIcon();
this.menuItem.icon.icon_name = this._getIcon(icon);
this.menuItem.icon.icon_name = obj.icon_name;
} else {
this.menuItem.icon.gicon = null;
}
}
}
_setActiveProfile() {
//_d("Setting Active Profile");
/*for (let id in this._devices) {
let device = this._devices[id];
if (device.active) {
this._setDeviceActiveProfile(device);
}
}*/
if(this._activeDevice){
this._setDeviceActiveProfile(this._activeDevice);
_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() {
if (!this.menuItem._getOpenState()) {
return;
}
let control = this._getMixerControl();
//_d("Setting Active Profile");
this._devices.forEach(device => {
if (device.isAvailable()) {
this._setDeviceActiveProfile(control, device);
}
});
return true;
}
_setDeviceActiveProfile(device) {
if (!device.uidevice.port_name || !this._availableDevicesIds[device.id]) {
_setDeviceActiveProfile(control, device) {
if (!device || !device.isAvailable()) {
return;
}
let stream = this._control.get_stream_from_device(device.uidevice);
if (stream) {
return;
let uidevice = this.lookupDeviceById(control, device.id);
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() {
let hideChooser = this._settings.get_boolean(Prefs.HIDE_ON_SINGLE_DEVICE);
if (hideChooser) {
return (Object.keys(this._availableDevicesIds).length > 1);
return (Array.from(this._devices.values()).filter(x => x.isAvailable()).length > 1);
}
else {
return true;
@ -404,24 +477,16 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
_setChooserVisibility() {
let visibility = this._getDeviceVisibility();
for (let id in this._availableDevicesIds) {
this._devices[id].item.actor.visible = visibility;
}
Array.from(this._devices.values()).filter(x => x.isAvailable()).forEach(x => x.setVisibility(visibility))
this.menuItem._triangleBin.visible = visibility;
this._setProfileVisibility();
}
_setProfileVisibility() {
let visibility = this._settings.get_boolean(Prefs.SHOW_PROFILES);
for (let id in this._availableDevicesIds) {
let device = this._devices[id];
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);
}
}
}
Array.from(this._devices.values()).filter(x => x.isAvailable()).forEach(device => device.setProfileVisibility(visibility));
this._setProfileTimer(visibility);
}
_getIcon(name) {
@ -432,40 +497,39 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
case Prefs.ICON_THEME_MONOCHROME:
return name + "-symbolic";
default:
return "none";
//return "none";
return null;
}
}
_setIcons() {
// Set the icons in the selection list
for (let id in this._devices) {
let device = this._devices[id];
let icon = device.uidevice.get_icon_name();
if (icon == null || icon.trim() == "")
icon = this.getDefaultIcon();
// device.item._icon.icon_name = this._getIcon(icon);
device.item.setIcon(this._getIcon(icon));
}
let control = this._getMixerControl();
this._devices.forEach((device, id) => {
let uidevice = this.lookupDeviceById(control, id);
if (uidevice) {
let icon = uidevice.get_icon_name();
if (icon == null || icon.trim() == "")
icon = this.getDefaultIcon();
_d(icon + " _setIcons")
device.setIcon(this._getIcon(icon));
}
});
// These indicate the active device, which is displayed directly in the
// Gnome menu, not in the list.
if (!this._settings.get_boolean(Prefs.HIDE_MENU_ICONS)) {
let icon = this._activeDevice.uidevice.get_icon_name();
if (icon == null || icon.trim() == "")
icon = this.getDefaultIcon();
this.menuItem.icon.icon_name = this._getIcon(icon);
this.menuItem.icon.icon_name = this._getIcon(this._devices.get(this._activeDeviceId).icon_name);
} else {
this.menuItem.icon.gicon = null;
this.menuItem.icon.icon_name = null;
}
}
_canShowDevice(uidevice, defaultValue) {
_canShowDevice(control, uidevice, defaultValue) {
if (!uidevice || !this._portsSettings || uidevice.port_name == null || uidevice.description == null) {
return defaultValue;
}
let stream = this._control.get_stream_from_device(uidevice);
let stream = control.get_stream_from_device(uidevice);
let cardName = null;
if (stream) {
let cardId = stream.get_card_index();
@ -489,10 +553,8 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
switch (port.display_option) {
case 1:
return true;
case 2:
return false;
default:
return defaultValue;
}
@ -504,20 +566,21 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
_resetDevices() {
//this._portsSettings = JSON.parse(this._settings.get_string(Prefs.PORT_SETTINGS));
this._portsSettings = Prefs.getPortsFromSettings(this._settings);
for (let id in this._devices) {
let device = this._devices[id];
let uidevice = device.uidevice;
if (uidevice.port_name == null || uidevice.description == null) {
_d("Device port_name null or description null");
continue;
let control = this._getMixerControl();
for (let id of this._devices.keys()) {
let uidevice = this.lookupDeviceById(control, id);
if (_isDeviceInValid(uidevice)) {
_d("Device is invalid");
}
switch (this._canShowDevice(uidevice, uidevice.port_available)) {
case true:
this._deviceAdded(this._control, uidevice.get_id(), true);
break;
case false:
this._deviceRemoved(this._control, uidevice.get_id(), true);
break;
else {
switch (this._canShowDevice(control, uidevice, uidevice.port_available)) {
case true:
this._deviceAdded(control, id, true);
break;
case false:
this._deviceRemoved(control, id, true);
break;
}
}
}
}
@ -528,7 +591,7 @@ var SoundDeviceChooserBase = class SoundDeviceChooserBase {
else
// if setting says to show device, check for any device, otherwise
// 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() {

View File

@ -40,12 +40,12 @@ else {
* @schema: (optional): the GSettings schema id Builds and return a GSettings
* schema for
* @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) {
// let extension = ExtensionUtils.getCurrentExtension();
schema = schema || Me.metadata['settings-schema'];
schema = schema || Me.metadata["settings-schema"];
const GioSSS = Gio.SettingsSchemaSource;
@ -54,7 +54,7 @@ function getSettings(schema) {
// otherwise assume that extension has been installed in the
// same prefix as gnome-shell (and therefore schemas are available
// in the standard folders)
let schemaDir = Me.dir.get_child('schemas');
let schemaDir = Me.dir.get_child("schemas");
let schemaSource;
if (schemaDir.query_exists(null))
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);
if (!schemaObj)
throw new Error('Schema ' + schema + ' could not be found for extension '
+ Me.metadata.uuid + '. Please check your installation.');
throw new Error("Schema " + schema + " could not be found for extension "
+ Me.metadata.uuid + ". Please check your installation.");
let _settings = new Gio.Settings({ settings_schema: schemaObj });
return _settings;
@ -83,7 +83,7 @@ function getCardByName(card_name) {
if (!cards || Object.keys(cards).length == 0) {
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) {
@ -95,22 +95,25 @@ function getProfiles(control, uidevice) {
if (cards && cards[stream.card_index]) {
_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 {
/* Device is not active device, lets try match with port name */
refreshCards();
for (let id in cards) {
for(let card of Object.values(cards)) {
let profiles;
_log("Getting profile from cards " + uidevice.port_name + " for card id " + id);
if ((profiles = getProfilesForPort(uidevice.port_name, cards[id]))) {
_log("Getting profile from cards " + uidevice.port_name + " for card id " + card.id);
if ((profiles = getProfilesForPort(uidevice.port_name, card))) {
return profiles;
}
}
}
return null;
return [];
}
let ports;
@ -127,7 +130,7 @@ function isCmdFound(cmd) {
return true;
}
catch (e) {
_log('ERROR: ' + cmd + ' execution failed. ' + e);
_log("ERROR: " + cmd + " execution failed. " + e);
return false;
}
}
@ -141,18 +144,18 @@ function refreshCards() {
let newProfLogic = _settings.get_boolean(Prefs.NEW_PROFILE_ID);
if (newProfLogic) {
_log("New logic");
let pyLocation = Me.dir.get_child('utils/pa_helper.py').get_path();
let pythonExec = ['python', 'python3', 'python2'].find(cmd => isCmdFound(cmd));
let pyLocation = Me.dir.get_child("utils/pa_helper.py").get_path();
let pythonExec = ["python", "python3", "python2"].find(cmd => isCmdFound(cmd));
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);
Gio.Settings.sync();
newProfLogic = false;
}
else {
try {
_log('Python found.' + pythonExec);
let [result, out, err, exit_code] = GLib.spawn_command_line_sync(pythonExec + ' ' + pyLocation);
_log("Python found." + pythonExec);
let [result, out, err, exit_code] = GLib.spawn_command_line_sync(pythonExec + " " + pyLocation);
// _log("result" + result +" out"+out + " exit_code" +
// exit_code + "err" +err);
if (result && !exit_code) {
@ -160,13 +163,13 @@ function refreshCards() {
out = ByteArray.toString(out);
}
let obj = JSON.parse(out);
cards = obj['cards'];
ports = obj['ports'];
cards = obj["cards"];
ports = obj["ports"];
}
}
catch (e) {
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);
Gio.Settings.sync();
}
@ -176,13 +179,16 @@ function refreshCards() {
if (!newProfLogic || error) {
_log("Old logic");
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) {
parseOutput(out);
}
}
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));
@ -194,9 +200,9 @@ function refreshCards() {
function parseOutput(out) {
let lines;
if (out instanceof Uint8Array) {
lines = ByteArray.toString(out).split('\n');
lines = ByteArray.toString(out).split("\n");
} else {
lines = out.toString().split('\n');
lines = out.toString().split("\n");
}
let cardIndex;
@ -210,7 +216,7 @@ function parseOutput(out) {
if ((matches = /^Card\s#(\d+)$/.exec(line))) {
cardIndex = matches[1];
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]) {
@ -232,30 +238,35 @@ function parseOutput(out) {
if ((matches = /alsa\.card_name\s+=\s+"(.*?)"/.exec(line))) {
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];
}
break;
case "PROFILES":
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;
case "PORTS":
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);
ports.push(port);
}
else if (port && (matches = /\t*Part of profile\(s\):\s(.*)/.exec(line))) {
let profileStr = matches[1];
port.profiles = profileStr.split(', ');
port.profiles = profileStr.split(", ");
port = null;
}
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 {
@ -280,8 +291,7 @@ var Signal = class Signal {
var SignalManager = class SignalManager {
constructor() {
this._signals = [];
this._signalsBySource = {};
this._signalsBySource = new Map();
}
addSignal(signalSource, signalName, callback) {
@ -289,29 +299,31 @@ var SignalManager = class SignalManager {
if (signalSource && signalName && callback) {
obj = new Signal(signalSource, signalName, callback);
obj.connect();
this._signals.push(obj);
let sourceSignals = this._signalsBySource[signalSource]
if (!sourceSignals) {
sourceSignals = [];
this._signalsBySource[signalSource] = sourceSignals;
if (!this._signalsBySource.has(signalSource)) {
this._signalsBySource.set(signalSource, []);
}
// this._signalsBySource[signalSource].push(obj)
sourceSignals.push(obj);
this._signalsBySource.get(signalSource).push(obj)
//_log(this._signalsBySource.get(signalSource).length + "Signal length");
}
return obj;
}
disconnectAll() {
for (let signal of this._signals) {
signal.disconnect();
}
this._signalsBySource.forEach(signals => this._disconnectSignals(signals));
}
disconnectBySource(signalSource) {
if (this._signalsBySource[signalSource]) {
for (let signal of this._signalsBySource[signalSource]) {
signal.disconnect();
}
if (this._signalsBySource.has(signalSource)) {
this._disconnectSignals(this._signalsBySource.get(signalSource));
}
}
_disconnectSignals(signals) {
while (signals.length) {
var signal = signals.shift();
signal.disconnect();
signal = null;
}
}
}
@ -319,21 +331,10 @@ var SignalManager = class SignalManager {
function getProfilesForPort(portName, card) {
if (card.ports) {
for (let port of card.ports) {
if (portName === port.name) {
let profiles = [];
if (port.profiles) {
for (let profile of port.profiles) {
if (profile.indexOf('+input:') == -1) {
for (let cardProfile of card.profiles) {
if (profile === cardProfile.name) {
profiles.push(cardProfile);
}
}
}
}
}
return profiles;
let port = card.ports.find(port => (portName === port.name));
if (port) {
if (port.profiles) {
return card.profiles.filter(profile => (profile.name.indexOf("+input:") == -1 && port.profiles.includes(profile.name)))
}
}
}
@ -356,7 +357,7 @@ function dump(obj) {
for (var propName in obj) {
try {
propValue = obj[propName];
_log(propName + "=" + propValue);
_log(propName + "=" + propValue);
}
catch (e) { _log(propName + "!!!Error!!!"); }
}

View File

@ -16,7 +16,7 @@
******************************************************************************/
/* jshint moz:true */
const {GObject} = imports.gi;
const { GObject } = imports.gi;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Base = Me.imports.base;
@ -26,64 +26,59 @@ const SignalManager = Lib.SignalManager;
const Prefs = Me.imports.prefs;
const Main = imports.ui.main;
var SoundOutputDeviceChooser = class SoundOutputDeviceChooser
extends Base.SoundDeviceChooserBase {
var SoundOutputDeviceChooser = class SoundOutputDeviceChooser
extends Base.SoundDeviceChooserBase {
constructor() {
super("output");
}
lookupDeviceById(id) {
return this._control.lookup_output_id(id);
lookupDeviceById(control, id) {
return control.lookup_output_id(id);
}
changeDevice(uidevice) {
this._control.change_output(uidevice);
changeDevice(control, uidevice) {
control.change_output(uidevice);
}
getDefaultDevice() {
return this._control.get_default_sink();
getDefaultStream(control) {
return control.get_default_sink();
}
getDefaultIcon() {
return "audio-card";
}
getStreams() {
return this._control.get_sinks();
}
};
var SoundInputDeviceChooser = class SoundInputDeviceChooser
extends Base.SoundDeviceChooserBase {
var SoundInputDeviceChooser = class SoundInputDeviceChooser
extends Base.SoundDeviceChooserBase {
constructor() {
super("input");
}
lookupDeviceById(id) {
return this._control.lookup_input_id(id);
lookupDeviceById(control, id) {
return control.lookup_input_id(id);
}
changeDevice(uidevice) {
this._control.change_input(uidevice);
changeDevice(control, uidevice) {
control.change_input(uidevice);
}
getDefaultDevice() {
return this._control.get_default_source();
getDefaultStream(control) {
return control.get_default_source();
}
getDefaultIcon() {
return "audio-input-microphone";
}
getStreams() {
return this._control.get_sources();
}
};
var InputSliderInstance = class InputSliderInstance {
constructor(volumeMenu, settings ) {
constructor(volumeMenu, settings) {
this._input = volumeMenu._input;
this._settings = settings;
this._signalManager = new SignalManager();
this._signalManager.addSignal(this._settings, "changed::"
+ Prefs.SHOW_INPUT_SLIDER, this._setSliderVisiblity.bind(this));
+ Prefs.SHOW_INPUT_SLIDER, this._setSliderVisiblity.bind(this));
this._overrideFunction();
this._setSliderVisiblity();
}
_overrideFunction() {
this._input._shouldBeVisibleOriginal = this._input._shouldBeVisible;
this._input._shouldBeVisibleCustom = function() {
return this._stream != null;
return this._stream != null;
};
}
_setSliderVisiblity() {
@ -104,22 +99,22 @@ var InputSliderInstance = class InputSliderInstance {
};
var SDCInstance = class SDCInstance {
constructor(){
constructor() {
this._settings = Lib.getSettings(Prefs.SETTINGS_SCHEMA);
this._aggregateMenu = Main.panel.statusArea.aggregateMenu;
this._volumeMenu = this._aggregateMenu._volume._volumeMenu;
this._aggregateLayout = this._aggregateMenu.menu.box.get_layout_manager();
}
enable(){
enable() {
let theme = imports.gi.Gtk.IconTheme.get_default();
if(theme != null) {
if (theme != null) {
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());
}
}
if (this._outputInstance == null) {
this._outputInstance = new SoundOutputDeviceChooser();
}
@ -135,17 +130,15 @@ var SDCInstance = class SDCInstance {
this._addMenuItem(this._volumeMenu, this._volumeMenu._input.item, this._inputInstance.menuItem);
this._expSignalId = this._settings.connect("changed::" + Prefs.EXPAND_VOL_MENU, this._expandVolMenu.bind(this));
this._expandVolMenu();
}
_addMenuItem(_volumeMenu, checkItem, menuItem){
_addMenuItem(_volumeMenu, checkItem, menuItem) {
let menuItems = _volumeMenu._getMenuItems();
let i = 0;
for (; i < menuItems.length; i++) {
if (menuItems[i] === checkItem) {
break;
}
let i = menuItems.findIndex(elem => elem === checkItem);
if (i < 0) {
i = menuItems.length;
}
_volumeMenu.addMenuItem(menuItem, ++i);
}
@ -163,15 +156,21 @@ var SDCInstance = class SDCInstance {
this._aggregateLayout.layout_changed();
}
disable(){
disable() {
this._revertVolMenuChanges();
this._outputInstance.destroy();
this._outputInstance = null;
this._inputInstance.destroy();
this._inputInstance = null;
this._inputSliderInstance.destroy();
this._inputSliderInstance = null;
if(this._expSignalId) {
if (this._outputInstance) {
this._outputInstance.destroy();
this._outputInstance = null;
}
if (this._inputInstance) {
this._inputInstance.destroy();
this._inputInstance = null;
}
if (this._inputSliderInstance) {
this._inputSliderInstance.destroy();
this._inputSliderInstance = null;
}
if (this._expSignalId) {
this._settings.disconnect(this._expSignalId);
this._expSignalId = null;
}

View File

@ -7,9 +7,10 @@
"3.34",
"3.32",
"3.36",
"3.38"
"3.38",
"40"
],
"url": "https://github.com/kgshank/gse-sound-output-device-chooser",
"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 Gettext = imports.gettext;
Gettext.bindtextdomain("sound-output-device-chooser", Me.path + '/locale');
Gettext.bindtextdomain("sound-output-device-chooser", Me.path + "/locale");
const _ = Gettext.gettext;
var SETTINGS_SCHEMA = "org.gnome.shell.extensions.sound-output-device-chooser";
@ -64,8 +64,8 @@ function getPortsFromSettings(_settings) {
return obj.ports;
}
function setPortsSettings(ports,_settings) {
let settingsObj = { 'version': PORT_SETTINGS_VERSION };
function setPortsSettings(ports, _settings) {
let settingsObj = { "version": PORT_SETTINGS_VERSION };
settingsObj.ports = ports;
//_d(JSON.stringify(settingsObj));
_settings.set_string(PORT_SETTINGS, JSON.stringify(settingsObj));
@ -97,46 +97,53 @@ function migratePortSettings(currVersion, currSettings, _settings) {
}
break;
}
return setPortsSettings(ports,_settings);
return setPortsSettings(ports, _settings);
}
const SDCSettingsWidget = new GObject.Class({
Name: 'SDC.Prefs.Widget',
GTypeName: 'SDCSettingsWidget',
Name: "SDC.Prefs.Widget",
GTypeName: "SDCSettingsWidget",
Extends: Gtk.Box,
_init: function(params) {
this.parent(params);
this.orientation = Gtk.Orientation.VERTICAL;
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
this._settings = Lib.getSettings(SETTINGS_SCHEMA);
Lib.setLog(this._settings.get_boolean(ENABLE_LOG));
// 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();
builder.set_translation_domain('sound-output-device-chooser');
builder.set_translation_domain("sound-output-device-chooser");
if (builder.add_from_file(uiFilePath) == 0) {
_d("JS LOG: could not load the ui file: %s".format(uiFilePath));
let label = new Gtk.Label({
label: _("Could not load the preferences UI file"),
vexpand: true
});
this.pack_start(label, true, true, 0);
this.__addFn(label);
} 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");
this.pack_start(mainContainer, true, true, 0);
this.__addFn(mainContainer);
this._signalManager = new SignalManager();
let showProfileSwitch = builder.get_object("show-profile");
@ -179,9 +186,9 @@ const SDCSettingsWidget = new GObject.Class({
_populatePorts: function() {
let ports = Lib.getPorts(true);
for (let port of ports) {
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)]);
}
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, 8], [port.human_name, false, false, true, port.name, 3, port.card_name, getPortDisplayName(port), port.direction]);
});
},
_showAlwaysToggleRenderCallback: function(widget, path) {
@ -207,7 +214,7 @@ const SDCSettingsWidget = new GObject.Class({
}
/*Dont support non-pci cards for show always*/
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]);
return;
}
@ -222,20 +229,21 @@ const SDCSettingsWidget = new GObject.Class({
_commitSettings: function() {
let ports = [];
let [success, iter] = this._portsStore.get_iter_first();
while (iter && success) {
if (!this._portsStore.get_value(iter, 3)) {
ports.push({
human_name: this._portsStore.get_value(iter, 0),
name: this._portsStore.get_value(iter, 4),
display_option: this._portsStore.get_value(iter, 5),
card_name: this._portsStore.get_value(iter, 6),
display_name: this._portsStore.get_value(iter, 7)
});
let display_option = this._portsStore.get_value(iter, 5);
if (display_option != 3) {//Dont store default value
ports.push({
human_name: this._portsStore.get_value(iter, 0),
name: this._portsStore.get_value(iter, 4),
display_option: display_option,
card_name: this._portsStore.get_value(iter, 6),
display_name: this._portsStore.get_value(iter, 7)
});
}
}
success = this._portsStore.iter_next(iter);
}
setPortsSettings(ports, this._settings);
},
@ -268,8 +276,8 @@ const SDCSettingsWidget = new GObject.Class({
if (!found) {
iter = this._portsStore.append();
this._portsStore.set(iter, [0, 1, 2, 3, 4, 5, 6, 7],
[port.human_name, false, false, false, port.name, port.display_option, port.card_name, port.display_name]);
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, ""]);
this._portsStore.set_value(iter, port.display_option, true);
}
}
@ -279,7 +287,7 @@ const SDCSettingsWidget = new GObject.Class({
function buildPrefsWidget() {
let _settingsWidget = new SDCSettingsWidget();
_settingsWidget.show_all();
_settingsWidget.__showFn();
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
from ctypes.util import find_library
c_int128 = ctypes.c_ubyte*16
c_uint128 = c_int128
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.restype = 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__ = \
@ -545,4 +541,4 @@ __all__ = \
'struct_pa_mainloop_api', 'struct_pa_operation',
'struct_pa_proplist', 'struct_pa_sample_spec',
'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,9 +57,7 @@ class PAHelper():
self._pa_card_info_cb_t , None)
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:
if operation:
@ -105,7 +103,7 @@ class PAHelper():
obj = {}
obj['name'] = port.name.decode('utf8') if port.name 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['n_profiles'] = port.n_profiles
obj['profiles'] = []

View File

@ -1,5 +1,5 @@
// 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
// 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
// along with this program. If not, see <https://www.gnu.org/licenses/>.
const Lang = imports.lang;
const BoxPointer = imports.ui.boxpointer;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
@ -34,6 +35,45 @@ const TweaksSystemMenuExtension = class TweaksSystemMenuExtension {
this._positionSettingChangedConnection = 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._tweaksItem = null;
this._tweaksActivateConnection = null;
@ -52,6 +92,18 @@ const TweaksSystemMenuExtension = class TweaksSystemMenuExtension {
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() {
this._logger = new Logger.Logger('Tweaks-System-Menu');
@ -63,26 +115,43 @@ const TweaksSystemMenuExtension = class TweaksSystemMenuExtension {
this._debugSettingChangedConnection = this._settings.connect('changed::debug',
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._showItem();
for (let appKey in this._applications) {
this._enableApp(appKey);
}
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() {
this._logger.log_debug('disable()');
this._hideItem();
for (let appKey in this._applications) {
this._disableApp(appKey);
}
this._systemMenu = null;
this._settings.disconnect(this._debugSettingChangedConnection);
this._debugSettingChangedConnection = null;
this._settings.disconnect(this._positionSettingChangedConnection);
this._positionSettingChangedConnection = null;
this._settings = null;
@ -90,34 +159,50 @@ const TweaksSystemMenuExtension = class TweaksSystemMenuExtension {
this._logger = null;
}
// Show/hide item
_showItem() {
this._logger.log_debug('_showItem()');
this._tweaksApp = Shell.AppSystem.get_default().lookup_app('org.gnome.tweaks.desktop');
if (this._tweaksApp) {
let [icon, name] = [this._tweaksApp.app_info.get_icon().names[0],
this._tweaksApp.get_name()];
this._tweaksItem = new PopupMenu.PopupImageMenuItem(name, icon);
this._tweaksActivateConnection = this._tweaksItem.connect('activate', this._on_activate.bind(this));
this._systemMenu.menu.addMenuItem(this._tweaksItem);
this._on_position_change();
} else {
this._logger.log('Missing Gnome Tweaks, expect trouble…');
_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;
}
}
_hideItem() {
this._logger.log_debug('_hideItem()');
if (this._tweaksItem !== null) {
this._tweaksItem.disconnect(this._tweaksActivateConnection);
this._tweaksActivateConnection = null;
this._systemMenu.menu._getMenuItems().splice(this._findMenuItemPosition(this._tweaksItem), 1);
this._tweaksItem.destroy();
this._tweaksItem = null;
// Show/hide item
_showItem(appKey) {
this._logger.log_debug('_showItem('+appKey+')');
let appData = this._applications[appKey];
appData.appInfo = Shell.AppSystem.get_default().lookup_app(appData.appName);
if (appData.appInfo) {
let name = appData.appInfo.get_name();
let icon = appData.appInfo.app_info.get_icon().names[0];
appData.menuItem = new PopupMenu.PopupImageMenuItem(name, icon);
appData.activateConnection = appData.menuItem.connect('activate', Lang.bind(this, function() {
this._on_activate(appKey);
}));
this._systemMenu.menu.addMenuItem(appData.menuItem);
this._on_position_change(appKey);
} else {
this._logger.log(appData.appName+' is missing');
}
}
_hideItem(appKey) {
this._logger.log_debug('_hideItem('+appKey+')');
let appData = this._applications[appKey];
if (appData.menuItem !== undefined) {
appData.menuItem.disconnect(appData.activateConnection);
delete appData.activateConnection;
this._systemMenu.menu._getMenuItems().splice(this._findMenuItemPosition(appData.menuItem), 1);
appData.menuItem.destroy();
delete appData.menuItem;
}
this._tweaksApp = null;
}
// Event handlers
@ -126,25 +211,42 @@ const TweaksSystemMenuExtension = class TweaksSystemMenuExtension {
this._logger.log_debug('debug = '+this._logger.get_debug());
}
_on_position_change() {
let position = this._settings.get_int('position');
this._logger.log_debug('_on_position_change(): settings position=' + position);
if (position == -1) {
position = this._findMenuItemPosition(this._systemMenu._settingsItem);
let tweaksPosition = this._findMenuItemPosition(this._tweaksItem);
if (tweaksPosition > position) {
position += 1;
}
this._logger.log_debug('_on_position_change(): automatic position=' + position);
_on_enable_change(appKey) {
let appData = this._applications[appKey];
let enable = this._settings.get_boolean(this._getEnableSettingsName(appKey));
this._logger.log_debug('_on_enable_change('+appKey+'): enable=' + enable);
if (enable) {
this._showItem(appKey);
} else {
this._hideItem(appKey);
}
this._systemMenu.menu.moveMenuItem(this._tweaksItem, position);
}
_on_activate() {
this._logger.log_debug('_on_activate()');
_on_position_change(appKey) {
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);
Main.overview.hide();
this._tweaksApp.activate();
appData.appInfo.activate();
}
};

View File

@ -1,5 +1,5 @@
// 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
// it under the terms of the GNU General Public License as published by
@ -37,14 +37,24 @@ var Logger = class MesonGseLogger {
let gnomeShellVersion = imports.misc.config.PACKAGE_VERSION;
if (gnomeShellVersion != undefined) {
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');
if (sessionType != undefined) {
msg += ' / ' + sessionType;
}
if (sessionType != undefined) {
msg += ' / ' + sessionType;
}
this.log(msg);
}
global.log(''+this._title+': '+text);
log(''+this._title+': '+text);
}
log_debug(text) {

View File

@ -1,16 +1,17 @@
{
"_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",
"name": "Tweaks in System Menu",
"name": "Tweaks & Extensions in System Menu",
"settings-schema": "org.gnome.shell.extensions.tweaks-system-menu",
"shell-version": [
"3.36",
"3.35.92",
"3.38"
"3.38",
"40.0"
],
"url": "https://github.com/F-i-f/tweaks-system-menu",
"uuid": "tweaks-system-menu@extensions.gnome-shell.fifi.org",
"vcs_revision": "v11-0-ga9fac83",
"version": 11
"vcs_revision": "v15-0-ge3b04c7",
"version": 15
}

View File

@ -1,5 +1,5 @@
// 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
// 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
// along with this program. If not, see <https://www.gnu.org/licenses/>.
const Lang = imports.lang;
const Gio = imports.gi.Gio;
const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
@ -29,7 +30,61 @@ const Logger = Me.imports.logger;
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() {
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_bottom = this.margin_top;
this.margin_start = 48;
@ -48,7 +103,7 @@ const TweaksSystemMenuSettings = GObject.registerClass(class TweaksSystemMenuSet
this.title_label = new Gtk.Label({
use_markup: true,
label: '<span size="large" weight="heavy">'
+_('Tweaks in System Menu')+'</span>',
+_('Tweaks &amp; Extensions in System Menu')+'</span>',
hexpand: true,
halign: Gtk.Align.CENTER
});
@ -79,29 +134,10 @@ const TweaksSystemMenuSettings = GObject.registerClass(class TweaksSystemMenuSet
ypos += 1;
let sschema = this._settings.settings_schema.get_key('position');
descr = _(sschema.get_description());
this.position_label = new Gtk.Label({
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;
ypos = this._addEntry(ypos, 'tweaks', _("Show Tweaks:"), _("Tweaks position:"));
if (gnome_shell_major >= 40) {
ypos = this._addEntry(ypos, 'extensions', _("Show Extensions:"), _("Extensions position:"));
}
descr = _(this._settings.settings_schema.get_key('debug').get_description());
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({
use_markup: true,
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>',
hexpand: true,
halign: Gtk.Align.CENTER,
@ -136,7 +172,10 @@ function init() {
function buildPrefsWidget() {
let widget = new TweaksSystemMenuSettings();
widget.setup();
widget.show_all();
// show_all() is only available/necessary on GTK < 4.0.
if (widget.show_all !== undefined) {
widget.show_all();
}
return widget;
}

View File

@ -1,13 +1,34 @@
<schemalist gettext-domain="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>
<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
will show up after Settings. If set to zero or more, the actual
launcher position on the system menu.</description>
</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">
<default>false</default>
<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 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) {
return GLib.file_test(path, GLib.FileTest.EXISTS)
@ -33,16 +34,21 @@ function getFileContents(path) {
}
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)
}
function resetGtkStyles() {
let style = getFileContents(USER_STYLES)
function resetGtkStyles(filepath) {
let style = getFileContents(filepath)
style = style.replace(/\/\* UNITE ([\s\S]*?) UNITE \*\/\n/g, '')
style = style.replace(/@import.*unite@hardpixel\.eu.*css['"]\);\n/g, '')
setFileContents(USER_STYLES, style)
setFileContents(filepath, style)
}
var Signals = class Signals {
@ -154,22 +160,23 @@ var WidgetStyle = class WidgetStyle {
}
var GtkStyle = class GtkStyle {
constructor(name, contents) {
constructor(filepath, name, contents) {
this.filepath = filepath
this.contents = `/* UNITE ${name} */\n${contents}\n/* ${name} UNITE */\n`
}
get existing() {
return getFileContents(USER_STYLES)
return getFileContents(this.filepath)
}
load() {
const style = this.contents + this.existing
setFileContents(USER_STYLES, style)
setFileContents(this.filepath, style)
}
unload() {
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)
}
addGtkStyle(name, contents) {
addGtk3Style(name, contents) {
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() {
@ -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 GtkSettings = imports.gi.Gtk.Settings.get_default()
const Main = imports.ui.main
const Config = imports.misc.config
const Unite = imports.misc.extensionUtils.getCurrentExtension()
const AppMenu = Main.panel.statusArea.appMenu
const AggMenu = Main.panel.statusArea.aggregateMenu
const Handlers = Unite.imports.handlers
const VERSION = parseInt(Config.PACKAGE_VERSION.split('.')[1])
const VERSION = Unite.imports.constants.VERSION
function actorHasClass(actor, name) {
return actor.has_style_class_name && actor.has_style_class_name(name)
@ -81,27 +79,29 @@ var LayoutManager = GObject.registerClass(
'hide-app-menu-icon', this._onHideAppMenuIcon.bind(this)
)
this.settings.connect(
'hide-app-menu-arrow', this._onHideAppMenuArrow.bind(this)
)
if (VERSION < 40) {
this.settings.connect(
'hide-app-menu-arrow', this._onHideAppMenuArrow.bind(this)
)
this.settings.connect(
'hide-aggregate-menu-arrow', this._onHideAggMenuArrow.bind(this)
)
this.settings.connect(
'hide-aggregate-menu-arrow', this._onHideAggMenuArrow.bind(this)
)
this.settings.connect(
'hide-dropdown-arrows', this._onHideDropdownArrows.bind(this)
)
this.settings.connect(
'use-system-fonts', this._onChangeStyles.bind(this)
)
this.settings.connect(
'hide-dropdown-arrows', this._onHideDropdownArrows.bind(this)
)
}
this.settings.connect(
'reduce-panel-spacing', this._onChangeStyles.bind(this)
)
if (VERSION < 36) {
this.settings.connect(
'use-system-fonts', this._onChangeStyles.bind(this)
)
this.signals.connect(
GtkSettings, 'notify::gtk-font-name', this._onChangeStyles.bind(this)
)
@ -245,18 +245,26 @@ var LayoutManager = GObject.registerClass(
activate() {
this._onNotificationsChange()
this._onHideAppMenuIcon()
this._onHideAppMenuArrow()
this._onHideAggMenuArrow()
this._onHideDropdownArrows()
if (VERSION < 40) {
this._onHideAppMenuArrow()
this._onHideAggMenuArrow()
this._onHideDropdownArrows()
}
this._onChangeStyles()
}
destroy() {
this._resetNotifications()
this._resetAppMenuIcon()
this._resetAppMenuArrow()
this._resetAggMenuArrow()
this._resetDropdownArrows()
if (VERSION < 40) {
this._resetAppMenuArrow()
this._resetAggMenuArrow()
this._resetDropdownArrows()
}
this._resetStyles()
this._syncStyles()

View File

@ -8,9 +8,10 @@
"3.34",
"3.32",
"3.36",
"3.38"
"3.38",
"40.0"
],
"url": "https://github.com/hardpixel/unite-shell",
"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 WinTracker = imports.gi.Shell.WindowTracker.get_default()
const Main = imports.ui.main
const Config = imports.misc.config
const Unite = imports.misc.extensionUtils.getCurrentExtension()
const AppMenu = Main.panel.statusArea.appMenu
const Activities = Main.panel.statusArea.activities
const Buttons = Unite.imports.buttons
const Handlers = Unite.imports.handlers
const VERSION = parseInt(Config.PACKAGE_VERSION.split('.')[1])
const VERSION = Unite.imports.constants.VERSION
var PanelExtension = class PanelExtension {
constructor(settings, key, callback) {

View File

@ -1,10 +1,9 @@
const GObject = imports.gi.GObject
const Gtk = imports.gi.Gtk
const Config = imports.misc.config
const Unite = imports.misc.extensionUtils.getCurrentExtension()
const Convenience = Unite.imports.convenience
const VERSION = parseInt(Config.PACKAGE_VERSION.split('.')[1])
const VERSION = Unite.imports.constants.VERSION
const TEMPLATE = VERSION < 40 ? 'settings-gtk3.ui' : 'settings-gtk4.ui'
var PrefsWidget = GObject.registerClass(
class UnitePrefsWidget extends Gtk.Box {
@ -13,17 +12,14 @@ var PrefsWidget = GObject.registerClass(
super._init(params)
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.add(this._container)
if (VERSION >= 36) {
const fonts = this._getWidget('use_system_fonts_section')
fonts.set_no_show_all(true)
fonts.set_visible(false)
fonts.set_sensitive(false)
if (VERSION < 40) {
this.add(this._container)
} else {
this.append(this._container)
}
this._bindStrings()
@ -33,11 +29,37 @@ var PrefsWidget = GObject.registerClass(
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) {
let widgetName = name.replace(/-/g, '_')
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) {
let widget = this._getWidget(setting)
this._settings.bind(setting, widget, prop, this._settings.DEFAULT_BINDING)
@ -85,7 +107,7 @@ function init() {
function buildPrefsWidget() {
let widget = new PrefsWidget()
widget.show_all()
widget.startup()
return widget
}

View File

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

View File

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

View File

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

View File

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

View File

@ -4,7 +4,8 @@ window > headerbar > headerbar:not(.selection-mode),
window > .titlebar > .titlebar:not(.selection-mode),
window > .titlebar > stack > headerbar: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;
}

View File

@ -4,7 +4,8 @@
.maximized > .titlebar > .titlebar:not(.selection-mode),
.maximized > .titlebar > stack > headerbar: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;
}

View File

@ -4,7 +4,8 @@
.tiled > .titlebar > .titlebar:not(.selection-mode),
.tiled > .titlebar > stack > headerbar: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;
}

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 WinTracker = imports.gi.Shell.WindowTracker.get_default()
const Main = imports.ui.main
const Config = imports.misc.config
const Util = imports.misc.util
const Unite = imports.misc.extensionUtils.getCurrentExtension()
const AppMenu = Main.panel.statusArea.appMenu
const Handlers = Unite.imports.handlers
const VERSION = parseInt(Config.PACKAGE_VERSION.split('.')[1])
const VERSION = Unite.imports.constants.VERSION
const VALID_TYPES = [
Meta.WindowType.NORMAL,
@ -25,6 +23,14 @@ const MOTIF_HINTS = '_MOTIF_WM_HINTS'
const _SHOW_FLAGS = ['0x2', '0x0', '0x1', '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) {
return win && VALID_TYPES.includes(win.window_type)
}
@ -41,7 +47,7 @@ function getXid(win) {
}
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])
if (!string.match(/=/)) {
@ -381,7 +387,7 @@ var WindowManager = GObject.registerClass(
)
this.settings.connect(
'window-buttons-position', this._onStylesChange.bind(this)
'button-layout', this._onStylesChange.bind(this)
)
if (VERSION < 36) {
@ -470,12 +476,14 @@ var WindowManager = GObject.registerClass(
_onStylesChange() {
if (this.hideTitlebars != 'never') {
const variant = this.settings.get('window-buttons-position')
const folder = `${Unite.path}/styles/buttons-${variant}`
const content = `@import url('${folder}/${this.hideTitlebars}.css');`
const folder = path => `${Unite.path}/styles/${path}/buttons-${variant}`
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 {
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]
LastVersion=86.0.1_20210313191229/20210313191229
LastVersion=87.0_20210322115435/20210322115435
LastOSABI=Linux_x86_64-gcc3
LastPlatformDir=/usr/lib/firefox
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.user_id", "f6151ad0-fece-4d81-9d5c-67449843ccf0");
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.browser-cleanup-thumbnails", 1615682011);
user_pref("app.update.lastUpdateTime.recipe-client-addon-run", 1615681985);
user_pref("app.update.lastUpdateTime.region-update-timer", 1613761980);
user_pref("app.update.lastUpdateTime.recipe-client-addon-run", 1617984710);
user_pref("app.update.lastUpdateTime.region-update-timer", 1618002157);
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.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.xpi-signature-verification", 1613762700);
user_pref("app.update.lastUpdateTime.xpi-signature-verification", 1618002037);
user_pref("browser.bookmarks.defaultLocation", "unfiled");
user_pref("browser.bookmarks.restore_default_bookmarks", false);
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.sessionCount", 51);
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.privateAllowed", true);
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.migrationLastShownDate", 1542582000);
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.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.region.update.first-seen", 1613761980);
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.safebrowsing.provider.google4.lastupdatetime", "1613763738699");
user_pref("browser.safebrowsing.provider.google4.nextupdatetime", "1613765555699");
user_pref("browser.safebrowsing.provider.mozilla.lastupdatetime", "1615681989433");
user_pref("browser.safebrowsing.provider.mozilla.nextupdatetime", "1615703589433");
user_pref("browser.search.region", "ES");
user_pref("browser.sessionstore.upgradeBackup.latestBuildID", "20210313191229");
user_pref("browser.safebrowsing.provider.google4.lastupdatetime", "1618003568665");
user_pref("browser.safebrowsing.provider.google4.nextupdatetime", "1618005341665");
user_pref("browser.safebrowsing.provider.mozilla.lastupdatetime", "1617984718577");
user_pref("browser.safebrowsing.provider.mozilla.nextupdatetime", "1618006318577");
user_pref("browser.search.region", "GB");
user_pref("browser.sessionstore.upgradeBackup.latestBuildID", "20210322115435");
user_pref("browser.shell.checkDefaultBrowser", true);
user_pref("browser.shell.didSkipDefaultBrowserCheckOnFirstRun", true);
user_pref("browser.shell.mostRecentDateSetAsDefault", "1615682225");
user_pref("browser.slowStartup.averageTime", 2467);
user_pref("browser.slowStartup.samples", 4);
user_pref("browser.shell.mostRecentDateSetAsDefault", "1618001768");
user_pref("browser.slowStartup.averageTime", 1565);
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_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.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.lastColdStartupCheck", 1615682224);
user_pref("browser.startup.lastColdStartupCheck", 1618001768);
user_pref("browser.startup.page", 3);
user_pref("browser.tabs.drawInTitlebar", false);
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.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.timesBeforeHidingSuggestionsHint", 0);
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("distribution.Manjaro.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.manjaro.bookmarksProcessed", 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.mode", 2);
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_ever_enabled", true);
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.pingCountVersion", -1);
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.htmlaboutaddons.recommendations.enabled", false);
user_pref("extensions.incognito.migrated", true);
user_pref("extensions.lastAppBuildId", "20210313191229");
user_pref("extensions.lastAppVersion", "86.0.1");
user_pref("extensions.lastPlatformVersion", "86.0.1");
user_pref("extensions.lastAppBuildId", "20210322115435");
user_pref("extensions.lastAppVersion", "87.0");
user_pref("extensions.lastPlatformVersion", "87.0");
user_pref("extensions.pendingOperations", false);
user_pref("extensions.pocket.enabled", false);
user_pref("extensions.pocket.settings.test.panelSignUp", "control");
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.extension.hidden", false);
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.{b7f9d2cd-d772-4302-8c3f-eb941af36f76}", 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-qualified", 1615681990);
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("identity.fxaccounts.enabled", false);
user_pref("identity.fxaccounts.toolbar.accessed", true);
user_pref("idle.lastDailyNotification", 1613762080);
user_pref("idle.lastDailyNotification", 1618001939);
user_pref("lightweightThemes.usedThemes", "[]");
user_pref("media.benchmark.vp9.fps", 102);
user_pref("media.benchmark.vp9.versioncheck", 5);
user_pref("media.gmp-gmpopenh264.abi", "x86_64-gcc3");
user_pref("media.gmp-gmpopenh264.lastUpdate", 1572996640);
user_pref("media.gmp-gmpopenh264.version", "1.8.1.1");
user_pref("media.gmp-manager.buildID", "20210210003430");
user_pref("media.gmp-manager.lastCheck", 1613761988);
user_pref("media.gmp-manager.buildID", "20210322115435");
user_pref("media.gmp-manager.lastCheck", 1618001900);
user_pref("media.gmp.storage.version.observed", 1);
user_pref("network.cookie.cookieBehavior", 5);
user_pref("network.dns.disablePrefetch", true);
@ -182,14 +184,14 @@ user_pref("pdfjs.enabledCache.state", true);
user_pref("pdfjs.migrationVersion", 2);
user_pref("pdfjs.previousHandler.alwaysAskBeforeHandling", true);
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("plugin.disable_full_page_plugin_for_types", "application/pdf");
user_pref("privacy.annotate_channels.strict_list.enabled", true);
user_pref("privacy.cpd.offlineApps", true);
user_pref("privacy.cpd.siteSettings", true);
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.timeSpan", 0);
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.sandbox.content.tempDirSuffix", "62ec57d4-3516-41bf-957e-19cd307d5b61");
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.gfx.checked", 1615682676);
user_pref("services.blocklist.gfx.checked", 1618001769);
user_pref("services.blocklist.onecrl.checked", 1565793602);
user_pref("services.blocklist.pinning.checked", 1613762220);
user_pref("services.blocklist.plugins.checked", 1615682676);
user_pref("services.settings.clock_skew_seconds", -693);
user_pref("services.settings.last_etag", "\"1615665497160\"");
user_pref("services.settings.last_update_seconds", 1615682676);
user_pref("services.settings.main.anti-tracking-url-decoration.last_check", 1615682676);
user_pref("services.settings.main.cfr-fxa.last_check", 1615682676);
user_pref("services.settings.main.cfr.last_check", 1615682676);
user_pref("services.settings.main.fxmonitor-breaches.last_check", 1615682676);
user_pref("services.settings.main.hijack-blocklists.last_check", 1615682676);
user_pref("services.settings.main.language-dictionaries.last_check", 1615682676);
user_pref("services.settings.main.message-groups.last_check", 1615682676);
user_pref("services.blocklist.plugins.checked", 1618001769);
user_pref("services.settings.clock_skew_seconds", -1170);
user_pref("services.settings.last_etag", "\"1617989709562\"");
user_pref("services.settings.last_update_seconds", 1618002966);
user_pref("services.settings.main.anti-tracking-url-decoration.last_check", 1618001769);
user_pref("services.settings.main.cfr-fxa.last_check", 1618001769);
user_pref("services.settings.main.cfr.last_check", 1618001769);
user_pref("services.settings.main.fxmonitor-breaches.last_check", 1618001769);
user_pref("services.settings.main.hijack-blocklists.last_check", 1618001769);
user_pref("services.settings.main.language-dictionaries.last_check", 1618001769);
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.nimbus-desktop-experiments.last_check", 1615682676);
user_pref("services.settings.main.normandy-recipes-capabilities.last_check", 1615682676);
user_pref("services.settings.main.nimbus-desktop-experiments.last_check", 1618001769);
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.onboarding.last_check", 1565793602);
user_pref("services.settings.main.partitioning-exempt-urls.last_check", 1615682676);
user_pref("services.settings.main.password-recipes.last_check", 1615682676);
user_pref("services.settings.main.pioneer-study-addons-v1.last_check", 1615682676);
user_pref("services.settings.main.pioneer-study-addons.last_check", 1615682676);
user_pref("services.settings.main.public-suffix-list.last_check", 1615682676);
user_pref("services.settings.main.search-config.last_check", 1615682676);
user_pref("services.settings.main.search-default-override-allowlist.last_check", 1615682676);
user_pref("services.settings.main.search-telemetry.last_check", 1615682676);
user_pref("services.settings.main.sites-classification.last_check", 1615682676);
user_pref("services.settings.main.tippytop.last_check", 1615682676);
user_pref("services.settings.main.top-sites.last_check", 1615682676);
user_pref("services.settings.main.url-classifier-skip-urls.last_check", 1615682676);
user_pref("services.settings.main.whats-new-panel.last_check", 1615682676);
user_pref("services.settings.main.partitioning-exempt-urls.last_check", 1618001769);
user_pref("services.settings.main.password-recipes.last_check", 1618001769);
user_pref("services.settings.main.pioneer-study-addons-v1.last_check", 1618001769);
user_pref("services.settings.main.pioneer-study-addons.last_check", 1618001769);
user_pref("services.settings.main.public-suffix-list.last_check", 1618001769);
user_pref("services.settings.main.search-config.last_check", 1618001769);
user_pref("services.settings.main.search-default-override-allowlist.last_check", 1618001769);
user_pref("services.settings.main.search-telemetry.last_check", 1618001769);
user_pref("services.settings.main.sites-classification.last_check", 1618001769);
user_pref("services.settings.main.tippytop.last_check", 1618001769);
user_pref("services.settings.main.top-sites.last_check", 1618001769);
user_pref("services.settings.main.url-classifier-skip-urls.last_check", 1618001769);
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.sync.clients.lastSync", "0");
user_pref("services.sync.declinedEngines", "");
@ -241,8 +244,8 @@ user_pref("services.sync.tabs.lastSync", "0");
user_pref("signon.importedFromSqlite", true);
user_pref("signon.usage.hasEntry", false);
user_pref("storage.vacuum.last.index", 0);
user_pref("storage.vacuum.last.places.sqlite", 1613762080);
user_pref("toolkit.startup.last_success", 1615682223);
user_pref("storage.vacuum.last.places.sqlite", 1618001939);
user_pref("toolkit.startup.last_success", 1618001766);
user_pref("toolkit.telemetry.archive.enabled", false);
user_pref("toolkit.telemetry.bhrPing.enabled", false);
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