initial commit

This commit is contained in:
2022-01-12 14:55:33 -03:00
commit c968bf909f
330 changed files with 61257 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
const { GObject, Gtk } = imports.gi;
const ExtensionUtils = imports.misc.extensionUtils;
const getSettings = ExtensionUtils.getSettings;
var AppChooser = GObject.registerClass(
class AppChooser extends Gtk.AppChooserDialog {
_init(parent) {
super._init({
transient_for: parent,
modal: true,
});
this._widget = this.get_widget();
this._widget.set({
show_all: true,
show_other: true,
});
this._widget.connect(
"application-selected",
this._updateSensitivity.bind(this)
);
this.connect("response", this._onResponse.bind(this));
this._updateSensitivity();
}
_updateSensitivity() {
const apps = JSON.parse(getSettings().get_string("applications"));
const appInfo = this._widget.get_app_info();
this.set_response_sensitive(
Gtk.ResponseType.OK,
appInfo && !apps.some((app) => app.id.startsWith(appInfo.get_id()))
);
}
_onResponse(dlg, id) {
const appInfo =
id === Gtk.ResponseType.OK ? this._widget.get_app_info() : null;
if (appInfo) {
let apps = JSON.parse(getSettings().get_string("applications"));
apps = [
...apps,
{
id: appInfo.get_id(),
},
];
getSettings().set_string("applications", JSON.stringify(apps));
}
this.destroy();
}
}
);

View File

@@ -0,0 +1,54 @@
const { GObject, Gtk, Gio } = imports.gi;
const ExtensionUtils = imports.misc.extensionUtils;
const getSettings = ExtensionUtils.getSettings;
const Me = ExtensionUtils.getCurrentExtension();
var AppRow = GObject.registerClass(
{
GTypeName: "AppRow",
Template: Me.dir.get_child("preferences/AppRow.xml").get_uri(),
InternalChildren: ["icon", "label", "revealButton", "revealer", "hidden"],
},
class AppRow extends Gtk.ListBoxRow {
_init(app) {
super._init();
this._appInfo = Gio.DesktopAppInfo.new(app.id);
this._settings = getSettings();
this._icon.gicon = this._appInfo.get_icon();
this._label.label = this._appInfo.get_display_name();
this._hidden.set_active(app.hidden);
this._hidden.connect("state-set", () => {
this._updateApp();
});
this.appId = this._appInfo.get_id();
}
toggleSettingsVisibility() {
this._revealer.reveal_child = !this._revealer.reveal_child;
if (this._revealer.reveal_child) {
this._revealButton.get_style_context().add_class("expanded");
} else {
this._revealButton.get_style_context().remove_class("expanded");
}
}
removeRow() {
const current = JSON.parse(this._settings.get_string("applications"));
const updated = current.filter((app) => app.id !== this.appId);
this._settings.set_string("applications", JSON.stringify(updated));
}
_updateApp() {
let apps = JSON.parse(this._settings.get_string("applications"));
const index = apps.findIndex((app) => app.id == this.appId);
apps[index] = {
id: this.appId,
hidden: this._hidden.get_active(),
};
this._settings.set_string("applications", JSON.stringify(apps));
}
}
);

View File

@@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class="AppRow" parent="GtkListBoxRow">
<property name="selectable">false</property>
<property name="activatable">false</property>
<child>
<object class="GtkGrid">
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkImage" id="icon">
<property name="pixel-size">32</property>
</object>
</child>
<child>
<object class="GtkLabel" id="label">
<property name="halign">start</property>
<property name="hexpand">true</property>
</object>
</child>
<child>
<object class="GtkButton" id="remove-button">
<property name="tooltip-text" translatable="yes">Remove</property>
<property name="halign">center</property>
<property name="valign">center</property>
<signal name="clicked" handler="removeRow" swapped="no" />
<child>
<object class="GtkImage">
<property name="icon-name">user-trash-symbolic</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkSeparator"/>
</child>
<child>
<object class="GtkButton" id="revealButton">
<property name="valign">center</property>
<property name="has-frame">false</property>
<property name="icon-name">pan-end-symbolic</property>
<signal name="clicked" handler="toggleSettingsVisibility" swapped="no" />
<style>
<class name="reveal-button"/>
</style>
</object>
</child>
<child>
<object class="GtkRevealer" id="revealer">
<child>
<object class="GtkListBox">
<property name="margin-top">8</property>
<child>
<object class="GtkListBoxRow">
<property name="selectable">false</property>
<property name="activatable">false</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Hidden</property>
<property name="halign">start</property>
<property name="hexpand">true</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="hidden">
<property name="halign">end</property>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
</child>
<layout>
<property name="column">0</property>
<property name="row">1</property>
<property name="column-span">5</property>
</layout>
</object>
</child>
</object>
</child>
</template>
</interface>

View File

@@ -0,0 +1,6 @@
.reveal-button image {
transition: 250ms;
}
.reveal-button--expanded image {
-gtk-icon-transform: rotate(0.25turn);
}

View File

@@ -0,0 +1,124 @@
const { GObject, Gtk, Gio, Gdk } = imports.gi;
const ExtensionUtils = imports.misc.extensionUtils;
const getSettings = ExtensionUtils.getSettings;
const Me = ExtensionUtils.getCurrentExtension();
const AppRow = Me.imports.preferences.AppRow.AppRow;
const AppChooser = Me.imports.preferences.AppChooser.AppChooser;
const schemaNames = [
"tray-position",
"position-weight",
"tray-margin-left",
"tray-margin-right",
"icons-limit",
"icon-size",
"icon-margin-vertical",
"icon-margin-horizontal",
"icon-padding-vertical",
"icon-padding-horizontal",
"icon-saturation",
"icon-contrast",
"icon-brightness",
"invoke-to-workspace",
"wine-behavior",
];
const settingIds = schemaNames.map(function (name) {
return name.replaceAll("-", "_");
});
var Prefs = GObject.registerClass(
{
GTypeName: "Prefs",
Template: Me.dir.get_child("preferences/Prefs.xml").get_uri(),
InternalChildren: ["headerBar", "appList", ...settingIds],
},
class Prefs extends Gtk.Box {
_init(params = {}) {
super._init(params);
this._bindSettings(schemaNames);
this.connect("realize", () => {
const window = this.get_root();
window.set_titlebar(this._headerBar);
});
let provider = new Gtk.CssProvider();
provider.load_from_file(
Gio.File.new_for_uri(
Me.dir.get_child("preferences/Prefs.css").get_uri()
)
);
Gtk.StyleContext.add_provider_for_display(
Gdk.Display.get_default(),
provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
);
this._settings = getSettings();
this._changeId = this._settings.connect(
"changed::applications",
this._syncAppsRows.bind(this)
);
this._syncAppsRows();
}
showAppChooser() {
const dialog = new AppChooser(this.get_root());
dialog.show();
}
_syncAppsRows() {
this._settings.block_signal_handler(this._changeId);
const oldApps = [...this._appList].filter((row) => !!row.appId);
const newApps = JSON.parse(
this._settings.get_string("applications")
).filter((app) => !!app);
newApps.forEach((appInfo, index) => {
if (!oldApps.some((row) => row.appId == appInfo.id)) {
const appRow = new AppRow(appInfo);
this._appList.insert(appRow, index);
if (this._notFirstSync) {
appRow.toggleSettingsVisibility();
}
}
});
oldApps.forEach((row, index) => {
if (!newApps.some((app) => row.appId == app.id)) {
this._appList.remove(row);
}
});
this._notFirstSync = true;
this._settings.unblock_signal_handler(this._changeId);
}
_bindSettings(settings) {
settings.forEach((name) => {
let obj = eval("this._" + name.replaceAll("-", "_"));
let valueType;
switch (obj.css_name) {
case "combobox":
valueType = "active-id";
break;
case "switch":
valueType = "active";
break;
default:
valueType = "value";
}
getSettings().bind(name, obj, valueType, Gio.SettingsBindFlags.DEFAULT);
});
}
}
);

View File

@@ -0,0 +1,566 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<object class="GtkHeaderBar" id="headerBar">
<property name="title-widget">
<object class="GtkStackSwitcher">
<property name="stack">stack</property>
</object>
</property>
</object>
<template class="Prefs" parent="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="GtkStack" id="stack">
<property name="transition-type">slide-left-right</property>
<child>
<object class="GtkStackPage">
<property name="title">General</property>
<property name="child">
<object class="GtkScrolledWindow">
<property name="vscrollbar-policy">never</property>
<property name="hscrollbar-policy">never</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="valign">start</property>
<property name="halign">center</property>
<property name="width-request">630</property>
<property name="margin-top">24</property>
<property name="margin-bottom">24</property>
<property name="margin-start">24</property>
<property name="margin-end">24</property>
<child>
<object class="GtkFrame">
<property name="child">
<object class="GtkListBox">
<child>
<object class="GtkListBoxRow">
<property name="selectable">0</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="spacing">12</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Tray position</property>
<property name="halign">start</property>
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkComboBoxText" id="tray_position">
<property name="halign">end</property>
<items>
<item translatable="yes" id="left">Left</item>
<item translatable="yes" id="center">Center</item>
<item translatable="yes" id="right">Right</item>
</items>
</object>
</child>
<child>
<object class="GtkAdjustment" id="adjustment-position-weight">
<property name="step-increment">1</property>
<property name="lower">-99</property>
<property name="upper">99</property>
</object>
<object class="GtkSpinButton" id="position_weight">
<property name="tooltip-text" translatable="yes">Position weight</property>
<property name="halign">end</property>
<property name="adjustment">adjustment-position-weight</property>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="selectable">0</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Tray icons limit</property>
<property name="halign">start</property>
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkAdjustment" id="adjustment-icons-limit">
<property name="step-increment">1</property>
<property name="lower">1</property>
<property name="upper">16</property>
</object>
<object class="GtkSpinButton" id="icons_limit">
<property name="halign">end</property>
<property name="adjustment">adjustment-icons-limit</property>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="selectable">0</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Icon size</property>
<property name="halign">start</property>
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkAdjustment" id="adjustment-icon-size">
<property name="step-increment">1</property>
<property name="lower">16</property>
<property name="upper">32</property>
</object>
<object class="GtkSpinButton" id="icon_size">
<property name="halign">end</property>
<property name="adjustment">adjustment-icon-size</property>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Colors</property>
<property name="halign">start</property>
<property name="margin-top">24</property>
<property name="margin-bottom">8</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkFrame">
<property name="child">
<object class="GtkListBox">
<child>
<object class="GtkListBoxRow">
<property name="selectable">0</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Icon saturation</property>
<property name="halign">start</property>
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkAdjustment" id="adjustment-icon-saturation">
<property name="step-increment">10</property>
<property name="page-size">20</property>
<property name="upper">100</property>
</object>
<object class="GtkSpinButton" id="icon_saturation">
<property name="halign">end</property>
<property name="adjustment">adjustment-icon-saturation</property>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="selectable">0</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Icon contrast</property>
<property name="halign">start</property>
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkAdjustment" id="adjustment-icon-contrast">
<property name="step-increment">10</property>
<property name="page-size">20</property>
<property name="lower">-100</property>
<property name="upper">100</property>
</object>
<object class="GtkSpinButton" id="icon_contrast">
<property name="halign">end</property>
<property name="adjustment">adjustment-icon-contrast</property>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="selectable">0</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Icon brightness</property>
<property name="halign">start</property>
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkAdjustment" id="adjustment-icon-brightness">
<property name="step-increment">10</property>
<property name="page-size">20</property>
<property name="lower">-100</property>
<property name="upper">100</property>
</object>
<object class="GtkSpinButton" id="icon_brightness">
<property name="halign">end</property>
<property name="adjustment">adjustment-icon-brightness</property>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Spacing</property>
<property name="halign">start</property>
<property name="margin-top">24</property>
<property name="margin-bottom">8</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkFrame">
<property name="child">
<object class="GtkListBox">
<child>
<object class="GtkListBoxRow">
<property name="selectable">0</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="spacing">12</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Tray margin</property>
<property name="halign">start</property>
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkAdjustment" id="adjustment-tray-margin-left">
<property name="step-increment">1</property>
<property name="upper">24</property>
</object>
<object class="GtkSpinButton" id="tray_margin_left">
<property name="halign">center</property>
<property name="adjustment">adjustment-tray-margin-left</property>
<property name="tooltip-text" translatable="yes">Left margin</property>
</object>
</child>
<child>
<object class="GtkAdjustment" id="adjustment-tray-margin-right">
<property name="step-increment">1</property>
<property name="upper">24</property>
</object>
<object class="GtkSpinButton" id="tray_margin_right">
<property name="halign">end</property>
<property name="adjustment">adjustment-tray-margin-right</property>
<property name="tooltip-text" translatable="yes">Right margin</property>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="selectable">0</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="spacing">12</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Icon margin</property>
<property name="halign">start</property>
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkAdjustment" id="adjustment-icon-margin-vertical">
<property name="step-increment">1</property>
<property name="upper">24</property>
</object>
<object class="GtkSpinButton" id="icon_margin_vertical">
<property name="halign">center</property>
<property name="adjustment">adjustment-icon-margin-vertical</property>
<property name="tooltip-text" translatable="yes">Vertical icon margin. NOTE: May not update in real time</property>
</object>
</child>
<child>
<object class="GtkAdjustment" id="adjustment-icon-margin-horizontal">
<property name="step-increment">1</property>
<property name="upper">24</property>
</object>
<object class="GtkSpinButton" id="icon_margin_horizontal">
<property name="halign">end</property>
<property name="adjustment">adjustment-icon-margin-horizontal</property>
<property name="tooltip-text" translatable="yes">Horizontal icon margin</property>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="selectable">0</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="spacing">12</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Icon padding</property>
<property name="halign">start</property>
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkAdjustment" id="adjustment-icon-padding-vertical">
<property name="step-increment">1</property>
<property name="upper">24</property>
</object>
<object class="GtkSpinButton" id="icon_padding_vertical">
<property name="valign">center</property>
<property name="halign">center</property>
<property name="adjustment">adjustment-icon-padding-vertical</property>
<property name="tooltip-text" translatable="yes">Vertical icon padding</property>
</object>
</child>
<child>
<object class="GtkAdjustment" id="adjustment-icon-padding-horizontal">
<property name="step-increment">1</property>
<property name="upper">24</property>
</object>
<object class="GtkSpinButton" id="icon_padding_horizontal">
<property name="tooltip-text" translatable="yes">Horizontal icon padding</property>
<property name="valign">center</property>
<property name="halign">end</property>
<property name="adjustment">adjustment-icon-padding-horizontal</property>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Behavior</property>
<property name="halign">start</property>
<property name="margin-top">24</property>
<property name="margin-bottom">8</property>
<attributes>
<attribute name="weight" value="bold"></attribute>
</attributes>
</object>
</child>
<child>
<object class="GtkFrame">
<property name="child">
<object class="GtkListBox">
<child>
<object class="GtkListBoxRow">
<property name="selectable">0</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Invoke windows to current workspace</property>
<property name="halign">start</property>
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="invoke_to_workspace">
<property name="halign">end</property>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="selectable">0</property>
<property name="child">
<object class="GtkBox">
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Modify Wine apps behavior</property>
<property name="halign">start</property>
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="wine_behavior">
<property name="halign">end</property>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkGrid">
<property name="margin-top">16</property>
<property name="valign">start</property>
<property name="halign">center</property>
<child>
<object class="GtkLinkButton">
<property name="label">GitHub</property>
<property name="uri">https://github.com/MartinPL/Tray-Icons-Reloaded</property>
<property name="halign">start</property>
<layout>
<property name="row">0</property>
<property name="column">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkLinkButton">
<property name="label">Donate</property>
<property name="uri">https://revolut.me/martinpl</property>
<property name="halign">end</property>
<layout>
<property name="row">0</property>
<property name="column">2</property>
</layout>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkStackPage">
<property name="title">Applications</property>
<property name="child">
<object class="GtkScrolledWindow">
<property name="propagate-natural-height">1</property>
<property name="hscrollbar-policy">never</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="valign">start</property>
<property name="halign">center</property>
<property name="width-request">630</property>
<property name="margin-top">24</property>
<property name="margin-bottom">24</property>
<property name="margin-start">24</property>
<property name="margin-end">24</property>
<child>
<object class="GtkFrame">
<property name="child">
<object class="GtkListBox" id="appList">
<child>
<object class="GtkListBoxRow">
<property name="height-request">50</property>
<property name="selectable">false</property>
<property name="activatable">false</property>
<child>
<object class="GtkButton">
<property name="receives_default">True</property>
<signal name="clicked" handler="showAppChooser" swapped="no" />
<child>
<object class="GtkImage" id="add-button">
<property name="icon-name">list-add-symbolic</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
</child>
</template>
</interface>