2312 lines
93 KiB
JavaScript
2312 lines
93 KiB
JavaScript
|
/* ========================================================================================================
|
||
|
* prefs.js - preferences
|
||
|
* --------------------------------------------------------------------------------------------------------
|
||
|
* CREDITS: This code was copied from the dash-to-dock extension https://github.com/micheleg/dash-to-dock
|
||
|
* and modified to create a workspaces dock. Many thanks to michele_g for a great extension.
|
||
|
* ========================================================================================================
|
||
|
*/
|
||
|
|
||
|
const Gio = imports.gi.Gio;
|
||
|
const GLib = imports.gi.GLib;
|
||
|
const GObject = imports.gi.GObject;
|
||
|
const Gtk = imports.gi.Gtk;
|
||
|
const Gdk = imports.gi.Gdk;
|
||
|
const Lang = imports.lang;
|
||
|
|
||
|
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
||
|
const Convenience = Me.imports.convenience;
|
||
|
|
||
|
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
|
||
|
const _ = Gettext.gettext;
|
||
|
|
||
|
|
||
|
const WorkspacesToDockPreferencesWidget = new GObject.Class({
|
||
|
Name: 'workspacesToDock.WorkspacesToDockPreferencesWidget',
|
||
|
GTypeName: 'WorkspacesToDockPreferencesWidget',
|
||
|
Extends: Gtk.Box,
|
||
|
|
||
|
_init: function(params) {
|
||
|
let self = this;
|
||
|
this.parent(params);
|
||
|
this.settings = Convenience.getSettings('org.gnome.shell.extensions.workspaces-to-dock');
|
||
|
this._rtl = Gtk.Widget.get_default_direction() == Gtk.TextDirection.RTL;
|
||
|
|
||
|
let notebook = new Gtk.Notebook();
|
||
|
|
||
|
|
||
|
/* ================================================*/
|
||
|
/* NOTEBOOK - GENERAL SETTINGS PAGE */
|
||
|
/* ------------------------------------------------*/
|
||
|
|
||
|
let notebookAppearanceSettings = new Gtk.Box({
|
||
|
orientation: Gtk.Orientation.VERTICAL,
|
||
|
margin_left: 10,
|
||
|
margin_right: 10,
|
||
|
margin_bottom: 20
|
||
|
});
|
||
|
|
||
|
let notebookAppearanceSettingsTitle = new Gtk.Label({
|
||
|
label: _("General"),
|
||
|
use_markup: true,
|
||
|
xalign: 0
|
||
|
});
|
||
|
|
||
|
|
||
|
/* TITLE: POSITION */
|
||
|
|
||
|
let dockPositionTitle = new Gtk.Label({
|
||
|
label: _("<b>Position</b>"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_top: 15,
|
||
|
margin_bottom: 5
|
||
|
});
|
||
|
|
||
|
|
||
|
/* MONITOR WIDGETS */
|
||
|
|
||
|
this._monitors = [];
|
||
|
let dockMonitorLabel = new Gtk.Label({label: _("Show the dock on the following monitor (if attached)"), hexpand:true, xalign:0});
|
||
|
let dockMonitorCombo = new Gtk.ComboBoxText({halign:Gtk.Align.END});
|
||
|
let gdkNMonitors = Gdk.Screen.get_default().get_n_monitors();
|
||
|
let gdkPrimaryMonitor = Gdk.Screen.get_default().get_primary_monitor();
|
||
|
// NOTE: we use gdk to get the primary monitor here which is always 0
|
||
|
|
||
|
// Add primary monitor
|
||
|
dockMonitorCombo.append_text(_('Primary Monitor'));
|
||
|
this._monitors.push(0);
|
||
|
|
||
|
// Add connected monitors
|
||
|
let ctr = 0;
|
||
|
for (let i = 0; i < gdkNMonitors; i++) {
|
||
|
if (i !== gdkPrimaryMonitor) {
|
||
|
ctr++;
|
||
|
this._monitors.push(ctr);
|
||
|
dockMonitorCombo.append_text(_('Secondary Monitor ') + ctr);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
let monitor = this.settings.get_int('preferred-monitor');
|
||
|
|
||
|
// If one of the external monitor is set as preferred, show it even if not attached
|
||
|
if ((monitor >= gdkNMonitors) && (monitor !== gdkPrimaryMonitor)) {
|
||
|
this._monitors.push(monitor)
|
||
|
dockMonitorCombo.append_text(_('Secondary Monitor ') + ++ctr);
|
||
|
}
|
||
|
|
||
|
dockMonitorCombo.set_active(this._monitors.indexOf(monitor));
|
||
|
dockMonitorCombo.connect('changed', Lang.bind (this, function(widget) {
|
||
|
let active = this._monitors[widget.get_active()];
|
||
|
this.settings.set_int('preferred-monitor', active);
|
||
|
}));
|
||
|
|
||
|
// Add to layout
|
||
|
let dockMonitorControlGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0,
|
||
|
margin_left: 0
|
||
|
});
|
||
|
dockMonitorControlGrid.attach(dockMonitorLabel, 0, 0, 1, 1);
|
||
|
dockMonitorControlGrid.attach(dockMonitorCombo, 1, 0, 1, 1);
|
||
|
|
||
|
|
||
|
/* POSITION WIDGETS */
|
||
|
|
||
|
let dockPositionLabel = new Gtk.Label({label: _("Show the dock at the following screen position"), hexpand:true, xalign:0});
|
||
|
let dockPositionCombo = new Gtk.ComboBoxText({halign:Gtk.Align.END});
|
||
|
// NOTE: Left and right are reversed in RTL languages
|
||
|
|
||
|
dockPositionCombo.append_text(_("Top"));
|
||
|
|
||
|
if (Gtk.Widget.get_default_direction() == Gtk.TextDirection.RTL) {
|
||
|
dockPositionCombo.append_text(_("Left"));
|
||
|
} else {
|
||
|
dockPositionCombo.append_text(_("Right"));
|
||
|
}
|
||
|
|
||
|
dockPositionCombo.append_text(_("Bottom"));
|
||
|
|
||
|
if (Gtk.Widget.get_default_direction() == Gtk.TextDirection.RTL) {
|
||
|
dockPositionCombo.append_text(_("Right"));
|
||
|
} else {
|
||
|
dockPositionCombo.append_text(_("Left"));
|
||
|
}
|
||
|
|
||
|
let position = this.settings.get_enum('dock-position');
|
||
|
dockPositionCombo.set_active(position);
|
||
|
dockPositionCombo.connect('changed', Lang.bind (this, function(widget) {
|
||
|
this.settings.set_enum('dock-position', widget.get_active());
|
||
|
}));
|
||
|
|
||
|
let hideDashButton = new Gtk.CheckButton({
|
||
|
label: _("Hide the Gnome Shell Dash"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
hideDashButton.set_active(this.settings.get_boolean('hide-dash'));
|
||
|
hideDashButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('hide-dash', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let hideWorkspaceSwitcherButton = new Gtk.CheckButton({
|
||
|
label: _("Hide the Gnome Shell Workspace Switcher Popup"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
hideWorkspaceSwitcherButton.set_active(this.settings.get_boolean('hide-workspace-switcher-popup'));
|
||
|
hideWorkspaceSwitcherButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('hide-workspace-switcher-popup', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let horizontalSwitchingButton = new Gtk.CheckButton({
|
||
|
label: _("Use horizontal switching when the dock is positioned horizontally"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
horizontalSwitchingButton.set_active(this.settings.get_boolean('horizontal-workspace-switching'));
|
||
|
horizontalSwitchingButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('horizontal-workspace-switching', check.get_active());
|
||
|
}));
|
||
|
|
||
|
// Add to layout
|
||
|
let dockPositionControlGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0,
|
||
|
margin_left: 0
|
||
|
});
|
||
|
dockPositionControlGrid.attach(dockPositionLabel, 0, 0, 1, 1);
|
||
|
dockPositionControlGrid.attach(dockPositionCombo, 1, 0, 1, 1);
|
||
|
dockPositionControlGrid.attach(hideDashButton, 0, 1, 1, 1);
|
||
|
dockPositionControlGrid.attach(hideWorkspaceSwitcherButton, 0, 2, 1, 1);
|
||
|
dockPositionControlGrid.attach(horizontalSwitchingButton, 0, 3, 1, 1);
|
||
|
|
||
|
|
||
|
/* TITLE: HEIGHT */
|
||
|
|
||
|
let dockHeightTitle = new Gtk.Label({
|
||
|
label: _("<b>Height (Width when positioned horizontally)</b>"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_top: 25,
|
||
|
margin_bottom: 5
|
||
|
});
|
||
|
|
||
|
|
||
|
/* HEIGHT WIDGETS */
|
||
|
|
||
|
let customizeHeightLabel = new Gtk.Label({
|
||
|
label: _("Customize the height (width) of the dock"),
|
||
|
xalign: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let customizeHeightSwitch = new Gtk.Switch ({
|
||
|
halign: Gtk.Align.END
|
||
|
});
|
||
|
customizeHeightSwitch.set_active(this.settings.get_boolean('customize-height'));
|
||
|
customizeHeightSwitch.connect('notify::active', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('customize-height', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let customizeHeightAutosize = new Gtk.RadioButton({
|
||
|
label: _("Autosize the dock based on thumbnails and favorites"),
|
||
|
margin_top: 0
|
||
|
});
|
||
|
|
||
|
let customizeHeightExtend = new Gtk.RadioButton({
|
||
|
label: _("Extend the dock to fill the screen"),
|
||
|
group: customizeHeightAutosize,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
|
||
|
let customizeHeightOption = this.settings.get_int('customize-height-option');
|
||
|
switch (customizeHeightOption) {
|
||
|
case 0:
|
||
|
customizeHeightAutosize.set_active(true); // autosize
|
||
|
break;
|
||
|
case 1:
|
||
|
customizeHeightExtend.set_active(true); // extend
|
||
|
break;
|
||
|
default:
|
||
|
customizeHeightAutosize.set_active(true); // default - autosize
|
||
|
}
|
||
|
|
||
|
customizeHeightAutosize.connect('toggled', Lang.bind(this, function(check){
|
||
|
if (check.get_active()) this.settings.set_int('customize-height-option', 0);
|
||
|
}));
|
||
|
customizeHeightExtend.connect('toggled', Lang.bind(this, function(check){
|
||
|
if (check.get_active()) this.settings.set_int('customize-height-option', 1);
|
||
|
}));
|
||
|
|
||
|
let centerThumbnails = new Gtk.CheckButton({
|
||
|
label: _("Center the dock (thumbnails and favorites if dock is extended)"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
centerThumbnails.set_active(this.settings.get_boolean('center-thumbnails-on-dock'));
|
||
|
centerThumbnails.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('center-thumbnails-on-dock', check.get_active());
|
||
|
}));
|
||
|
|
||
|
|
||
|
let centerThumbnailsIndependently = new Gtk.RadioButton({
|
||
|
label: _("Center thumbnails and favorites individually on dock"),
|
||
|
margin_top: 0,
|
||
|
margin_left: 40
|
||
|
});
|
||
|
|
||
|
let centerThumbnailsJointly = new Gtk.RadioButton({
|
||
|
label: _("Combine thumbnails and favorites then center on dock"),
|
||
|
group: centerThumbnailsIndependently,
|
||
|
margin_top: 0,
|
||
|
margin_left: 40
|
||
|
});
|
||
|
|
||
|
let centerThumbnailsOption = this.settings.get_int('center-thumbnails-option');
|
||
|
switch (centerThumbnailsOption) {
|
||
|
case 0:
|
||
|
centerThumbnailsIndependently.set_active(true); // independently
|
||
|
break;
|
||
|
case 1:
|
||
|
centerThumbnailsJointly.set_active(true); // jointly
|
||
|
break;
|
||
|
default:
|
||
|
centerThumbnailsIndependently.set_active(true); // default - independently
|
||
|
}
|
||
|
|
||
|
centerThumbnailsIndependently.connect('toggled', Lang.bind(this, function(check){
|
||
|
if (check.get_active()) this.settings.set_int('center-thumbnails-option', 0);
|
||
|
}));
|
||
|
centerThumbnailsJointly.connect('toggled', Lang.bind(this, function(check){
|
||
|
if (check.get_active()) this.settings.set_int('center-thumbnails-option', 1);
|
||
|
}));
|
||
|
|
||
|
let topMarginLabel = new Gtk.Label({
|
||
|
label: _("Top margin (Left when positioned horizontally)"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let topMarginSpinner = new Gtk.SpinButton();
|
||
|
topMarginSpinner.set_range(0, 25);
|
||
|
topMarginSpinner.set_value(this.settings.get_double('top-margin') * 100);
|
||
|
topMarginSpinner.set_digits(1);
|
||
|
topMarginSpinner.set_increments(.5, 1);
|
||
|
topMarginSpinner.set_size_request(120, -1);
|
||
|
topMarginSpinner.connect('value-changed', Lang.bind(this, function(button) {
|
||
|
let s = button.get_value() / 100;
|
||
|
this.settings.set_double('top-margin', s);
|
||
|
}));
|
||
|
topMarginSpinner.connect('output', function(button, data) {
|
||
|
var val = button.get_value().toFixed(1);
|
||
|
button.set_text(val + "%");
|
||
|
return true;
|
||
|
});
|
||
|
|
||
|
let bottomMarginLabel = new Gtk.Label({
|
||
|
label: _("Bottom margin (Right when positioned horizontally)"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let bottomMarginSpinner = new Gtk.SpinButton();
|
||
|
bottomMarginSpinner.set_range(0, 25);
|
||
|
bottomMarginSpinner.set_value(this.settings.get_double('bottom-margin') * 100);
|
||
|
bottomMarginSpinner.set_digits(1);
|
||
|
bottomMarginSpinner.set_increments(.5, 1);
|
||
|
bottomMarginSpinner.set_size_request(120, -1);
|
||
|
bottomMarginSpinner.connect('value-changed', Lang.bind(this, function(button) {
|
||
|
let s = button.get_value() / 100;
|
||
|
this.settings.set_double('bottom-margin', s);
|
||
|
}));
|
||
|
bottomMarginSpinner.connect('output', function(button, data) {
|
||
|
var val = button.get_value().toFixed(1);
|
||
|
button.set_text(val + "%");
|
||
|
return true;
|
||
|
});
|
||
|
|
||
|
let screenEdgePaddingLabel = new Gtk.Label({
|
||
|
label: _("Padding between dock (when fully shown) and edge of screen"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let screenEdgePaddingSpinner = new Gtk.SpinButton();
|
||
|
screenEdgePaddingSpinner.set_range(0, 200);
|
||
|
screenEdgePaddingSpinner.set_value(this.settings.get_double('screen-edge-padding') * 1);
|
||
|
screenEdgePaddingSpinner.set_digits(0);
|
||
|
screenEdgePaddingSpinner.set_increments(1, 10);
|
||
|
screenEdgePaddingSpinner.set_size_request(120, -1);
|
||
|
screenEdgePaddingSpinner.connect('value-changed', Lang.bind(this, function(button) {
|
||
|
let s = button.get_value() / 1;
|
||
|
this.settings.set_double('screen-edge-padding', s);
|
||
|
}));
|
||
|
|
||
|
// Add to layout
|
||
|
let dockHeightControlGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0,
|
||
|
margin_left: 0
|
||
|
});
|
||
|
let dockHeightContainerGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0,
|
||
|
margin_left: 10
|
||
|
});
|
||
|
dockHeightControlGrid.attach(customizeHeightLabel, 0, 0, 1, 1);
|
||
|
dockHeightControlGrid.attach(customizeHeightSwitch, 1, 0, 1, 1);
|
||
|
dockHeightContainerGrid.attach(customizeHeightAutosize, 0, 0, 1, 1);
|
||
|
dockHeightContainerGrid.attach(customizeHeightExtend, 0, 1, 1, 1);
|
||
|
dockHeightContainerGrid.attach(centerThumbnails, 0, 2, 1, 1);
|
||
|
dockHeightContainerGrid.attach(centerThumbnailsIndependently, 0, 3, 1, 1);
|
||
|
dockHeightContainerGrid.attach(centerThumbnailsJointly, 0, 4, 1, 1);
|
||
|
dockHeightContainerGrid.attach(topMarginLabel, 0, 5, 1, 1);
|
||
|
dockHeightContainerGrid.attach(topMarginSpinner, 1, 5, 1, 1);
|
||
|
dockHeightContainerGrid.attach(bottomMarginLabel, 0, 6, 1, 1);
|
||
|
dockHeightContainerGrid.attach(bottomMarginSpinner, 1, 6, 1, 1);
|
||
|
dockHeightContainerGrid.attach(screenEdgePaddingLabel, 0, 7, 1, 1);
|
||
|
dockHeightContainerGrid.attach(screenEdgePaddingSpinner, 1, 7, 1, 1);
|
||
|
|
||
|
// Bind interactions
|
||
|
this.settings.bind('customize-height', dockHeightContainerGrid, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
this.settings.bind('center-thumbnails-on-dock', centerThumbnailsIndependently, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
this.settings.bind('center-thumbnails-on-dock', centerThumbnailsJointly, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
|
||
|
|
||
|
/* TITLE: APPEARANCE */
|
||
|
|
||
|
let appearanceTitle = new Gtk.Label({
|
||
|
label: _("<b>Appearance</b>"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_top: 15,
|
||
|
margin_bottom: 5
|
||
|
});
|
||
|
|
||
|
|
||
|
/* OPAQUE LAYER WIDGETS */
|
||
|
|
||
|
let opaqueLayerLabel = new Gtk.Label({
|
||
|
label: _("Customize the dock background opacity"),
|
||
|
xalign: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let opaqueLayerSwitch = new Gtk.Switch ({
|
||
|
halign: Gtk.Align.END
|
||
|
});
|
||
|
opaqueLayerSwitch.set_active(this.settings.get_boolean('opaque-background'));
|
||
|
opaqueLayerSwitch.connect('notify::active', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('opaque-background', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let layerOpacityLabel = new Gtk.Label({
|
||
|
label: _("Opacity"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
});
|
||
|
|
||
|
let layerOpacityScaler = new Gtk.Scale({
|
||
|
orientation: Gtk.Orientation.HORIZONTAL,
|
||
|
valuePos: Gtk.PositionType.RIGHT,
|
||
|
halign: Gtk.Align.START,
|
||
|
margin_left: 20
|
||
|
});
|
||
|
layerOpacityScaler.set_range(0, 100);
|
||
|
layerOpacityScaler.set_value(this.settings.get_double('background-opacity') * 100);
|
||
|
layerOpacityScaler.set_digits(0);
|
||
|
layerOpacityScaler.set_increments(5, 5);
|
||
|
layerOpacityScaler.set_size_request(200, -1);
|
||
|
layerOpacityScaler.connect('value-changed', Lang.bind(this, function(button) {
|
||
|
let s = button.get_value() / 100;
|
||
|
this.settings.set_double('background-opacity', s);
|
||
|
}));
|
||
|
|
||
|
// Add to layout
|
||
|
let backgroundControlGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_left: 0
|
||
|
});
|
||
|
let backgroundContainerGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_left: 10
|
||
|
});
|
||
|
backgroundControlGrid.attach(opaqueLayerLabel, 0, 0, 1, 1);
|
||
|
backgroundControlGrid.attach(opaqueLayerSwitch, 1, 0, 1, 1);
|
||
|
backgroundContainerGrid.attach(layerOpacityLabel, 0, 0, 1, 1);
|
||
|
backgroundContainerGrid.attach(layerOpacityScaler, 1, 0, 1, 1);
|
||
|
|
||
|
// Bind interactions
|
||
|
this.settings.bind('opaque-background', backgroundContainerGrid, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
|
||
|
|
||
|
/* FORCE STRAIGHT CORNERS */
|
||
|
let forceStraightCornersButton = new Gtk.CheckButton({
|
||
|
label: _("Force straight corners"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 15
|
||
|
});
|
||
|
forceStraightCornersButton.set_active(this.settings.get_boolean('straight-corners'));
|
||
|
forceStraightCornersButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('straight-corners', check.get_active());
|
||
|
}));
|
||
|
|
||
|
|
||
|
|
||
|
/* ADD TO NOTEBOOK PAGE */
|
||
|
notebookAppearanceSettings.add(dockPositionTitle);
|
||
|
notebookAppearanceSettings.add(dockMonitorControlGrid);
|
||
|
notebookAppearanceSettings.add(dockPositionControlGrid);
|
||
|
notebookAppearanceSettings.add(dockHeightTitle);
|
||
|
notebookAppearanceSettings.add(dockHeightControlGrid);
|
||
|
notebookAppearanceSettings.add(dockHeightContainerGrid);
|
||
|
notebookAppearanceSettings.add(appearanceTitle);
|
||
|
notebookAppearanceSettings.add(backgroundControlGrid);
|
||
|
notebookAppearanceSettings.add(backgroundContainerGrid);
|
||
|
notebookAppearanceSettings.add(forceStraightCornersButton);
|
||
|
notebook.append_page(notebookAppearanceSettings, notebookAppearanceSettingsTitle);
|
||
|
|
||
|
|
||
|
/* ================================================*/
|
||
|
/* NOTEBOOK - BEHAVIOR SETTINGS PAGE */
|
||
|
/* ------------------------------------------------*/
|
||
|
|
||
|
let notebookBehaviorSettings = new Gtk.Box({
|
||
|
orientation: Gtk.Orientation.VERTICAL,
|
||
|
margin_left: 10,
|
||
|
margin_right: 10
|
||
|
});
|
||
|
|
||
|
let notebookBehaviorSettingsTitle = new Gtk.Label({
|
||
|
label: _("Behavior"),
|
||
|
use_markup: true,
|
||
|
xalign: 0
|
||
|
});
|
||
|
|
||
|
|
||
|
/* TOGGLE OVERVIEW WIDGETS */
|
||
|
let toggleOverviewButton = new Gtk.CheckButton({
|
||
|
label: _("Toggle Gnome Shell's overview mode with right click"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 15
|
||
|
});
|
||
|
toggleOverviewButton.set_active(this.settings.get_boolean('toggle-overview'));
|
||
|
toggleOverviewButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('toggle-overview', check.get_active());
|
||
|
}));
|
||
|
|
||
|
|
||
|
/* SCROLL WITH TOUCHPAD */
|
||
|
let scrollWithTouchpadButton = new Gtk.CheckButton({
|
||
|
label: _("Prevent multiple workspace switching when using touchpad to scroll"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 10
|
||
|
});
|
||
|
scrollWithTouchpadButton.set_active(this.settings.get_boolean('scroll-with-touchpad'));
|
||
|
scrollWithTouchpadButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('scroll-with-touchpad', check.get_active());
|
||
|
}));
|
||
|
|
||
|
|
||
|
/* TITLE: INTELLIGENT HIDING */
|
||
|
|
||
|
let visibilityTitle = new Gtk.Label({
|
||
|
label: _("<b>Intelligent Hiding</b>"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_top: 15,
|
||
|
margin_bottom: 5
|
||
|
});
|
||
|
|
||
|
|
||
|
/* ALWAYS VISIBLE WIDGETS */
|
||
|
|
||
|
let alwaysVisibleLabel = new Gtk.Label({
|
||
|
label: _("Turn on intelligent hiding otherwise dock is fixed and always visible"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_top: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let alwaysVisibleSwitch = new Gtk.Switch ({
|
||
|
halign: Gtk.Align.END,
|
||
|
margin_top: 15
|
||
|
});
|
||
|
alwaysVisibleSwitch.set_active(!this.settings.get_boolean('dock-fixed'));
|
||
|
alwaysVisibleSwitch.connect("notify::active", Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('dock-fixed', !check.get_active());
|
||
|
}));
|
||
|
|
||
|
// Add to layout
|
||
|
let visibilityControlGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false
|
||
|
});
|
||
|
let visibilityContainerBox = new Gtk.Box({
|
||
|
orientation: Gtk.Orientation.VERTICAL,
|
||
|
spacing: 0,
|
||
|
homogeneous: false,
|
||
|
margin_left: 10,
|
||
|
margin_top: 0,
|
||
|
margin_bottom: 10,
|
||
|
margin_right: 0
|
||
|
});
|
||
|
visibilityControlGrid.attach(alwaysVisibleLabel, 0, 0, 1, 1);
|
||
|
visibilityControlGrid.attach(alwaysVisibleSwitch, 1, 0, 1, 1);
|
||
|
|
||
|
// Bind interactions
|
||
|
this.settings.bind('dock-fixed', visibilityContainerBox, 'sensitive', Gio.SettingsBindFlags.INVERT_BOOLEAN);
|
||
|
|
||
|
|
||
|
/* TIMING WIDGETS */
|
||
|
|
||
|
let timingLabel = new Gtk.Label({
|
||
|
label: _("<b>Timing</b> : Adjust animation, show delay, and hide delay timing"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
hexpand: true,
|
||
|
margin_top: 10
|
||
|
});
|
||
|
|
||
|
let timingOptionsButton = new Gtk.Button({
|
||
|
label: _("Timing Options .."),
|
||
|
margin_top: 10,
|
||
|
halign: Gtk.Align.START
|
||
|
});
|
||
|
timingOptionsButton.connect("clicked", Lang.bind(this, function() {
|
||
|
let dialog = new Gtk.Dialog({ title: _("Timing Options"),
|
||
|
transient_for: notebook.get_toplevel(),
|
||
|
use_header_bar: true,
|
||
|
modal: true });
|
||
|
|
||
|
|
||
|
/* TIMING OPTIONS DIALOG */
|
||
|
|
||
|
let animationTimeLabel = new Gtk.Label({
|
||
|
label: _("Animation time [ms]"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
hexpand: true,
|
||
|
margin_right: 5,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
|
||
|
let animationTimeSpinner = new Gtk.SpinButton({
|
||
|
halign: Gtk.Align.END,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
animationTimeSpinner.set_sensitive(true);
|
||
|
animationTimeSpinner.set_range(0, 5000);
|
||
|
animationTimeSpinner.set_value(this.settings.get_double("animation-time") * 1000);
|
||
|
animationTimeSpinner.set_increments(50, 100);
|
||
|
animationTimeSpinner.connect("value-changed", Lang.bind(this, function(button) {
|
||
|
let s = button.get_value_as_int() / 1000;
|
||
|
this.settings.set_double("animation-time", s);
|
||
|
}));
|
||
|
|
||
|
let showDelayLabel = new Gtk.Label({
|
||
|
label: _("Show delay [ms]"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let showDelaySpinner = new Gtk.SpinButton({
|
||
|
halign: Gtk.Align.END
|
||
|
});
|
||
|
showDelaySpinner.set_sensitive(true);
|
||
|
showDelaySpinner.set_range(0, 5000);
|
||
|
showDelaySpinner.set_value(this.settings.get_double("show-delay") * 1000);
|
||
|
showDelaySpinner.set_increments(50, 100);
|
||
|
showDelaySpinner.connect("value-changed", Lang.bind(this, function(button) {
|
||
|
let s = button.get_value_as_int() / 1000;
|
||
|
this.settings.set_double("show-delay", s);
|
||
|
}));
|
||
|
|
||
|
let hideDelayLabel = new Gtk.Label({
|
||
|
label: _("Hide delay [ms]"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let hideDelaySpinner = new Gtk.SpinButton({
|
||
|
halign: Gtk.Align.END
|
||
|
});
|
||
|
hideDelaySpinner.set_sensitive(true);
|
||
|
hideDelaySpinner.set_range(0, 5000);
|
||
|
hideDelaySpinner.set_value(this.settings.get_double("hide-delay") * 1000);
|
||
|
hideDelaySpinner.set_increments(50, 100);
|
||
|
hideDelaySpinner.connect("value-changed", Lang.bind(this, function(button) {
|
||
|
let s = button.get_value_as_int() / 1000;
|
||
|
this.settings.set_double("hide-delay", s);
|
||
|
}));
|
||
|
|
||
|
// Add to layout
|
||
|
let timingDialogGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
timingDialogGrid.attach(animationTimeLabel, 0, 1, 1, 1);
|
||
|
timingDialogGrid.attach(animationTimeSpinner, 1, 1, 1, 1);
|
||
|
timingDialogGrid.attach(showDelayLabel, 0, 2, 1, 1);
|
||
|
timingDialogGrid.attach(showDelaySpinner, 1, 2, 1, 1);
|
||
|
timingDialogGrid.attach(hideDelayLabel, 0, 3, 1, 1);
|
||
|
timingDialogGrid.attach(hideDelaySpinner, 1, 3, 1, 1);
|
||
|
|
||
|
// Add to dialog
|
||
|
let timingDialogContainerBox = new Gtk.Box({
|
||
|
orientation: Gtk.Orientation.VERTICAL,
|
||
|
spacing: 0,
|
||
|
homogeneous: false,
|
||
|
margin_left: 10,
|
||
|
margin_top: 20,
|
||
|
margin_bottom: 20,
|
||
|
margin_right: 10
|
||
|
});
|
||
|
timingDialogContainerBox.add(timingDialogGrid);
|
||
|
dialog.get_content_area().add(timingDialogContainerBox);
|
||
|
dialog.show_all();
|
||
|
}));
|
||
|
|
||
|
// Add to layout
|
||
|
let timingGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
timingGrid.attach(timingLabel, 0, 0, 1, 1);
|
||
|
timingGrid.attach(timingOptionsButton, 0, 1, 1, 1);
|
||
|
|
||
|
visibilityContainerBox.add(timingGrid);
|
||
|
|
||
|
|
||
|
/* AUTOHIDE WIDGETS */
|
||
|
|
||
|
let autohideLabel = new Gtk.Label({
|
||
|
label: _("<b>Autohide</b> : Show the dock on mouse hover"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
hexpand: true,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
|
||
|
let autohideSwitch = new Gtk.Switch ({
|
||
|
halign: Gtk.Align.END,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
autohideSwitch.set_active(this.settings.get_boolean('autohide'));
|
||
|
autohideSwitch.connect("notify::active", Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('autohide', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let autohideOptionsButton = new Gtk.Button({
|
||
|
label: _("Autohide Options .."),
|
||
|
margin_top: 10,
|
||
|
halign: Gtk.Align.START
|
||
|
});
|
||
|
autohideOptionsButton.connect("clicked", Lang.bind(this, function() {
|
||
|
let dialog = new Gtk.Dialog({ title: _("Autohide Options"),
|
||
|
transient_for: notebook.get_toplevel(),
|
||
|
use_header_bar: true,
|
||
|
modal: true });
|
||
|
|
||
|
|
||
|
/* AUTOHIDE OPTIONS DIALOG */
|
||
|
|
||
|
let enableInFullscreenButton = new Gtk.CheckButton({
|
||
|
label: _("Enable autohide in fullscreen"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
enableInFullscreenButton.set_active(this.settings.get_boolean('autohide-in-fullscreen'));
|
||
|
enableInFullscreenButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('autohide-in-fullscreen', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let requireClickButton = new Gtk.CheckButton({
|
||
|
label: _("Require click to show the dock when window maximized"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
requireClickButton.set_active(this.settings.get_boolean('require-click-to-show'));
|
||
|
requireClickButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('require-click-to-show', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let requirePressureButton = new Gtk.CheckButton({
|
||
|
label: _("Require pressure to show the dock"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
requirePressureButton.set_active(this.settings.get_boolean('require-pressure-to-show'));
|
||
|
requirePressureButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('require-pressure-to-show', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let pressureThresholdLabel = new Gtk.Label({
|
||
|
label: _("Pressure threshold [px]"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_left: 25,
|
||
|
margin_top: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let pressureThresholdSpinner = new Gtk.SpinButton({
|
||
|
halign: Gtk.Align.END,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
pressureThresholdSpinner.set_sensitive(true);
|
||
|
pressureThresholdSpinner.set_range(10, 1000);
|
||
|
pressureThresholdSpinner.set_value(this.settings.get_double("pressure-threshold") * 1);
|
||
|
pressureThresholdSpinner.set_increments(10, 20);
|
||
|
pressureThresholdSpinner.connect("value-changed", Lang.bind(this, function(button) {
|
||
|
let s = button.get_value_as_int() / 1;
|
||
|
this.settings.set_double("pressure-threshold", s);
|
||
|
}));
|
||
|
|
||
|
let speedLimitButton = new Gtk.CheckButton({
|
||
|
label: _("Limit pressure sense to slow mouse speeds"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
speedLimitButton.set_active(this.settings.get_boolean('use-pressure-speed-limit'));
|
||
|
speedLimitButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('use-pressure-speed-limit', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let speedLimitLabel = new Gtk.Label({
|
||
|
label: _("Maximum speed [px]"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_left: 25,
|
||
|
margin_top: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let speedLimitSpinner = new Gtk.SpinButton({
|
||
|
halign: Gtk.Align.END,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
speedLimitSpinner.set_sensitive(true);
|
||
|
speedLimitSpinner.set_range(10, 1000);
|
||
|
speedLimitSpinner.set_value(this.settings.get_double("pressure-speed-limit") * 1);
|
||
|
speedLimitSpinner.set_increments(10, 20);
|
||
|
speedLimitSpinner.connect("value-changed", Lang.bind(this, function(button) {
|
||
|
let s = button.get_value_as_int() / 1;
|
||
|
this.settings.set_double("pressure-speed-limit", s);
|
||
|
}));
|
||
|
|
||
|
let speedLimitDescription = new Gtk.Label({
|
||
|
label: _("NOTE: For dual monitor setups. Allows the mouse to pass through \nthe barrier by attacking the edge of the screen with a quick stroke."),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_left: 25,
|
||
|
margin_top: 0,
|
||
|
hexpand: false
|
||
|
})
|
||
|
|
||
|
// Add to layout
|
||
|
let autohideOptionsDialogGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false
|
||
|
});
|
||
|
|
||
|
autohideOptionsDialogGrid.attach(enableInFullscreenButton, 0, 0, 2, 1);
|
||
|
autohideOptionsDialogGrid.attach(requireClickButton, 0, 1, 2, 1);
|
||
|
autohideOptionsDialogGrid.attach(requirePressureButton, 0, 2, 2, 1);
|
||
|
autohideOptionsDialogGrid.attach(pressureThresholdLabel, 0, 3, 1, 1);
|
||
|
autohideOptionsDialogGrid.attach(pressureThresholdSpinner, 1, 3, 1, 1);
|
||
|
autohideOptionsDialogGrid.attach(speedLimitButton, 0, 4, 2, 1);
|
||
|
autohideOptionsDialogGrid.attach(speedLimitLabel, 0, 5, 1, 1);
|
||
|
autohideOptionsDialogGrid.attach(speedLimitSpinner, 1, 5, 1, 1);
|
||
|
autohideOptionsDialogGrid.attach(speedLimitDescription, 0, 6, 2, 1);
|
||
|
|
||
|
// Bind interactions
|
||
|
this.settings.bind('require-pressure-to-show', pressureThresholdLabel, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
this.settings.bind('require-pressure-to-show', pressureThresholdSpinner, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
this.settings.bind('use-pressure-speed-limit', speedLimitLabel, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
this.settings.bind('use-pressure-speed-limit', speedLimitSpinner, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
this.settings.bind('use-pressure-speed-limit', speedLimitDescription, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
|
||
|
// Add to dialog
|
||
|
let autohideOptionsDialogContainerBox = new Gtk.Box({
|
||
|
orientation: Gtk.Orientation.VERTICAL,
|
||
|
spacing: 0,
|
||
|
homogeneous: false,
|
||
|
margin_left: 10,
|
||
|
margin_top: 20,
|
||
|
margin_bottom: 20,
|
||
|
margin_right: 10
|
||
|
});
|
||
|
autohideOptionsDialogContainerBox.add(autohideOptionsDialogGrid);
|
||
|
dialog.get_content_area().add(autohideOptionsDialogContainerBox);
|
||
|
dialog.show_all();
|
||
|
}));
|
||
|
|
||
|
// Add to layout
|
||
|
let autohideControlGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 10
|
||
|
});
|
||
|
let autohideContainerGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false
|
||
|
});
|
||
|
autohideControlGrid.attach(autohideLabel, 0, 0, 1, 1);
|
||
|
autohideControlGrid.attach(autohideSwitch, 1, 0, 1, 1);
|
||
|
autohideContainerGrid.attach(autohideOptionsButton, 0, 0, 1, 1);
|
||
|
|
||
|
visibilityContainerBox.add(autohideControlGrid);
|
||
|
visibilityContainerBox.add(autohideContainerGrid);
|
||
|
|
||
|
// Bind interactions
|
||
|
this.settings.bind('autohide', autohideContainerGrid, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
|
||
|
|
||
|
/* INTELLIHIDE WIDGETS */
|
||
|
|
||
|
let intellihideLabel = new Gtk.Label({
|
||
|
label: _("<b>Intellihide</b> : Show the dock unless a window overlaps"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
hexpand: true,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
|
||
|
let intellihideSwitch = new Gtk.Switch ({
|
||
|
halign: Gtk.Align.END,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
intellihideSwitch.set_active(this.settings.get_boolean('intellihide'));
|
||
|
intellihideSwitch.connect("notify::active", Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('intellihide', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let intellihideOptionsButton = new Gtk.Button({
|
||
|
label: _("Intellihide Dodging Options .."),
|
||
|
margin_top: 10,
|
||
|
halign: Gtk.Align.START
|
||
|
});
|
||
|
intellihideOptionsButton.connect("clicked", Lang.bind(this, function() {
|
||
|
let dialog = new Gtk.Dialog({ title: _("Intellihide Options"),
|
||
|
transient_for: notebook.get_toplevel(),
|
||
|
use_header_bar: true,
|
||
|
modal: true });
|
||
|
|
||
|
|
||
|
/* INTELLIHIDE OPTIONS DIALOG */
|
||
|
|
||
|
let intellihideNormal = new Gtk.RadioButton({
|
||
|
label: _("Dodge all windows"),
|
||
|
margin_top: 0
|
||
|
});
|
||
|
|
||
|
let intellihideFocusApp = new Gtk.RadioButton({
|
||
|
label: _("Dodge all instances of focused app"),
|
||
|
group: intellihideNormal,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
|
||
|
let intellihideTopWindow = new Gtk.RadioButton({
|
||
|
label: _("Dodge only top instance of focused app"),
|
||
|
group: intellihideNormal,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
|
||
|
let intellihideOption = this.settings.get_int('intellihide-option');
|
||
|
switch (intellihideOption) {
|
||
|
case 0:
|
||
|
intellihideNormal.set_active(true); // any window .. normal mode
|
||
|
break;
|
||
|
case 1:
|
||
|
intellihideFocusApp.set_active(true); // focused application windows mode
|
||
|
break;
|
||
|
case 2:
|
||
|
intellihideTopWindow.set_active(true); // top focused application window mode
|
||
|
break;
|
||
|
default:
|
||
|
intellihideNormal.set_active(true); // default .. any window
|
||
|
}
|
||
|
|
||
|
intellihideNormal.connect('toggled', Lang.bind(this, function(check){
|
||
|
if (check.get_active()) this.settings.set_int('intellihide-option', 0);
|
||
|
}));
|
||
|
|
||
|
intellihideFocusApp.connect('toggled', Lang.bind(this, function(check){
|
||
|
if (check.get_active()) this.settings.set_int('intellihide-option', 1);
|
||
|
}));
|
||
|
|
||
|
intellihideTopWindow.connect('toggled', Lang.bind(this, function(check){
|
||
|
if (check.get_active()) this.settings.set_int('intellihide-option', 2);
|
||
|
}));
|
||
|
|
||
|
let ignoreTopPanelButton = new Gtk.CheckButton({
|
||
|
label: _("Ignore top panel menus"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
ignoreTopPanelButton.set_active(this.settings.get_boolean('ignore-top-panel'));
|
||
|
ignoreTopPanelButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('ignore-top-panel', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let ignoreContextMenusButton = new Gtk.CheckButton({
|
||
|
label: _("Ignore application context menus"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
ignoreContextMenusButton.set_active(this.settings.get_boolean('ignore-context-menus'));
|
||
|
ignoreContextMenusButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('ignore-context-menus', check.get_active());
|
||
|
}));
|
||
|
|
||
|
// Add to layout
|
||
|
let intellihideOptionsDialogGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false
|
||
|
});
|
||
|
intellihideOptionsDialogGrid.attach(intellihideNormal, 0, 0, 1, 1);
|
||
|
intellihideOptionsDialogGrid.attach(intellihideFocusApp, 0, 1, 1, 1);
|
||
|
intellihideOptionsDialogGrid.attach(intellihideTopWindow, 0, 2, 1, 1);
|
||
|
intellihideOptionsDialogGrid.attach(ignoreTopPanelButton, 0, 3, 1, 1);
|
||
|
intellihideOptionsDialogGrid.attach(ignoreContextMenusButton, 0, 4, 1, 1);
|
||
|
|
||
|
// Add to dialog
|
||
|
let intellihideOptionsDialogContainerBox = new Gtk.Box({
|
||
|
orientation: Gtk.Orientation.VERTICAL,
|
||
|
spacing: 0,
|
||
|
homogeneous: false,
|
||
|
margin_left: 10,
|
||
|
margin_top: 20,
|
||
|
margin_bottom: 20,
|
||
|
margin_right: 10
|
||
|
});
|
||
|
intellihideOptionsDialogContainerBox.add(intellihideOptionsDialogGrid);
|
||
|
dialog.get_content_area().add(intellihideOptionsDialogContainerBox);
|
||
|
dialog.show_all();
|
||
|
}));
|
||
|
|
||
|
// Add to layout
|
||
|
let intellihideControlGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 10
|
||
|
});
|
||
|
let intellihideContainerGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false
|
||
|
});
|
||
|
intellihideControlGrid.attach(intellihideLabel, 0, 0, 1, 1);
|
||
|
intellihideControlGrid.attach(intellihideSwitch, 1, 0, 1, 1);
|
||
|
intellihideContainerGrid.attach(intellihideOptionsButton, 0, 0, 1, 1);
|
||
|
|
||
|
visibilityContainerBox.add(intellihideControlGrid);
|
||
|
visibilityContainerBox.add(intellihideContainerGrid);
|
||
|
|
||
|
// Bind interactions
|
||
|
this.settings.bind('intellihide', intellihideContainerGrid, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
this.settings.bind('intellihide', intellihideContainerGrid, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
|
||
|
|
||
|
/* TITLE: ADDITIONAL HIDE-SHOW OPTIONS */
|
||
|
|
||
|
let miscOptionsTitle = new Gtk.Label({
|
||
|
label: _("<b>Additional Options</b>"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
hexpand: true,
|
||
|
margin_top: 15,
|
||
|
margin_bottom: 5
|
||
|
});
|
||
|
|
||
|
|
||
|
/* ADDITIONAL HIDE-SHOW OPTIONS WIDGETS */
|
||
|
|
||
|
let miscOptionsButton = new Gtk.Button({
|
||
|
label: _("Additional Hiding & Showing Options .."),
|
||
|
margin_top: 10,
|
||
|
halign: Gtk.Align.START
|
||
|
});
|
||
|
miscOptionsButton.connect("clicked", Lang.bind(this, function() {
|
||
|
let dialog = new Gtk.Dialog({ title: _("Additional Options"),
|
||
|
transient_for: notebook.get_toplevel(),
|
||
|
use_header_bar: true,
|
||
|
modal: true });
|
||
|
|
||
|
|
||
|
/* ADDITIONAL HIDE-SHOW OPTIONS DIALOG */
|
||
|
|
||
|
let leaveVisibleButton = new Gtk.CheckButton({
|
||
|
label: _("Leave a visible edge when dock is hidden"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
leaveVisibleButton.set_active(this.settings.get_boolean('dock-edge-visible'));
|
||
|
leaveVisibleButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('dock-edge-visible', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let disableScrollButton = new Gtk.CheckButton({
|
||
|
label: _("Disable scroll when dock is hidden to prevent workspace switching"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
disableScrollButton.set_active(this.settings.get_boolean('disable-scroll'));
|
||
|
disableScrollButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('disable-scroll', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let dashToDockHoverButton = new Gtk.CheckButton({
|
||
|
label: _("Show the dock when hovering over Dash-To-Dock extension"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
dashToDockHoverButton.set_active(this.settings.get_boolean('dashtodock-hover'));
|
||
|
dashToDockHoverButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('dashtodock-hover', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let quickShowButton = new Gtk.CheckButton({
|
||
|
label: _("Show the dock temporarily when switching workspaces"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
quickShowButton.set_active(this.settings.get_boolean('quick-show-on-workspace-change'));
|
||
|
quickShowButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('quick-show-on-workspace-change', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let quickShowLabel = new Gtk.Label({
|
||
|
label: _("Length of time shown [ms]"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_left: 25,
|
||
|
margin_top: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let quickShowSpinner = new Gtk.SpinButton({
|
||
|
halign: Gtk.Align.END,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
quickShowSpinner.set_sensitive(true);
|
||
|
quickShowSpinner.set_range(100, 3000);
|
||
|
quickShowSpinner.set_value(this.settings.get_double("quick-show-timeout") * 1);
|
||
|
quickShowSpinner.set_increments(100, 1000);
|
||
|
quickShowSpinner.connect("value-changed", Lang.bind(this, function(button) {
|
||
|
let s = button.get_value_as_int() / 1;
|
||
|
this.settings.set_double("quick-show-timeout", s);
|
||
|
}));
|
||
|
|
||
|
let toggleDockShortcutButton = new Gtk.CheckButton({
|
||
|
label: _("Toggle the dock with a keyboard shortcut"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
toggleDockShortcutButton.set_active(this.settings.get_boolean('toggle-dock-with-keyboard-shortcut'));
|
||
|
toggleDockShortcutButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('toggle-dock-with-keyboard-shortcut', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let toggleDockShortcutLabel = new Gtk.Label({
|
||
|
label: _("Keyboard shortcut"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_left: 25,
|
||
|
margin_top: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let toggleDockShortcutEntry = new Gtk.Entry({
|
||
|
margin_top: 0,
|
||
|
margin_left: 5,
|
||
|
margin_right: 0,
|
||
|
halign: Gtk.Align.END
|
||
|
});
|
||
|
toggleDockShortcutEntry.set_width_chars(20);
|
||
|
toggleDockShortcutEntry.set_text(this.settings.get_strv('dock-keyboard-shortcut')[0]);
|
||
|
toggleDockShortcutEntry.connect('changed', Lang.bind(this, function(entry) {
|
||
|
let [key, mods] = Gtk.accelerator_parse(entry.get_text());
|
||
|
if(Gtk.accelerator_valid(key, mods)) {
|
||
|
toggleDockShortcutEntry["secondary-icon-name"] = null;
|
||
|
toggleDockShortcutEntry["secondary-icon-tooltip-text"] = null;
|
||
|
let shortcut = Gtk.accelerator_name(key, mods);
|
||
|
this.settings.set_strv('dock-keyboard-shortcut', [shortcut]);
|
||
|
} else {
|
||
|
toggleDockShortcutEntry["secondary-icon-name"] = "dialog-warning-symbolic";
|
||
|
toggleDockShortcutEntry["secondary-icon-tooltip-text"] = _("Invalid accelerator. Try F12, <Super>space, <Ctrl><Alt><Shift>w, etc.");
|
||
|
}
|
||
|
}));
|
||
|
|
||
|
let toggleDockShortcutTimeoutLabel = new Gtk.Label({
|
||
|
label: _("Timeout before dock is hidden again [s]"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_left: 25,
|
||
|
margin_top: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let toggleDockShortcutTimeoutSpinner = new Gtk.SpinButton({
|
||
|
halign: Gtk.Align.END,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
toggleDockShortcutTimeoutSpinner.set_range(1, 10);
|
||
|
toggleDockShortcutTimeoutSpinner.set_value(this.settings.get_double('keyboard-toggle-timeout') * 1);
|
||
|
toggleDockShortcutTimeoutSpinner.set_increments(1, 10);
|
||
|
toggleDockShortcutTimeoutSpinner.connect('value-changed', Lang.bind(this, function(button) {
|
||
|
let s = button.get_value() / 1;
|
||
|
this.settings.set_double('keyboard-toggle-timeout', s);
|
||
|
}));
|
||
|
|
||
|
// Add to layout
|
||
|
let additionalHideShowOptionsDialogGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false
|
||
|
});
|
||
|
additionalHideShowOptionsDialogGrid.attach(miscOptionsTitle, 0, 0, 2, 1);
|
||
|
additionalHideShowOptionsDialogGrid.attach(leaveVisibleButton, 0, 1, 2, 1);
|
||
|
additionalHideShowOptionsDialogGrid.attach(disableScrollButton, 0, 2, 2, 1);
|
||
|
additionalHideShowOptionsDialogGrid.attach(dashToDockHoverButton, 0, 3, 2, 1);
|
||
|
additionalHideShowOptionsDialogGrid.attach(quickShowButton, 0, 4, 2, 1);
|
||
|
additionalHideShowOptionsDialogGrid.attach(quickShowLabel, 0, 5, 1, 1);
|
||
|
additionalHideShowOptionsDialogGrid.attach(quickShowSpinner, 1, 5, 1, 1);
|
||
|
additionalHideShowOptionsDialogGrid.attach(toggleDockShortcutButton, 0, 6, 2, 1);
|
||
|
additionalHideShowOptionsDialogGrid.attach(toggleDockShortcutLabel, 0, 7, 1, 1);
|
||
|
additionalHideShowOptionsDialogGrid.attach(toggleDockShortcutEntry, 1, 7, 1, 1);
|
||
|
additionalHideShowOptionsDialogGrid.attach(toggleDockShortcutTimeoutLabel, 0, 8, 1, 1);
|
||
|
additionalHideShowOptionsDialogGrid.attach(toggleDockShortcutTimeoutSpinner, 1, 8, 1, 1);
|
||
|
|
||
|
/* Bind interactions */
|
||
|
this.settings.bind('toggle-dock-with-keyboard-shortcut', toggleDockShortcutLabel, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
this.settings.bind('toggle-dock-with-keyboard-shortcut', toggleDockShortcutEntry, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
this.settings.bind('toggle-dock-with-keyboard-shortcut', toggleDockShortcutTimeoutLabel, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
this.settings.bind('toggle-dock-with-keyboard-shortcut', toggleDockShortcutTimeoutSpinner, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
this.settings.bind('quick-show-on-workspace-change', quickShowLabel, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
this.settings.bind('quick-show-on-workspace-change', quickShowSpinner, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
|
||
|
// Add to dialog
|
||
|
let additionalHideShowOptionsDialogContainerBox = new Gtk.Box({
|
||
|
orientation: Gtk.Orientation.VERTICAL,
|
||
|
spacing: 0,
|
||
|
homogeneous: false,
|
||
|
margin_left: 10,
|
||
|
margin_top: 20,
|
||
|
margin_bottom: 20,
|
||
|
margin_right: 10
|
||
|
});
|
||
|
additionalHideShowOptionsDialogContainerBox.add(additionalHideShowOptionsDialogGrid);
|
||
|
dialog.get_content_area().add(additionalHideShowOptionsDialogContainerBox);
|
||
|
dialog.show_all();
|
||
|
}));
|
||
|
|
||
|
visibilityContainerBox.add(miscOptionsTitle);
|
||
|
visibilityContainerBox.add(miscOptionsButton);
|
||
|
|
||
|
|
||
|
/* PARTIAL DOCK OPTIONS */
|
||
|
|
||
|
let partialActionTitle = new Gtk.Label({
|
||
|
label: _("<b>Partial Dock</b>"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_top: 15,
|
||
|
margin_bottom: 5
|
||
|
});
|
||
|
|
||
|
let intellhideActionLabel = new Gtk.Label({label: _("What should we do with the dock when not dodging windows?"),
|
||
|
hexpand:true,
|
||
|
xalign:0
|
||
|
});
|
||
|
let intellhideActionCombo = new Gtk.ComboBoxText({
|
||
|
margin_left: 10,
|
||
|
halign:Gtk.Align.END
|
||
|
});
|
||
|
intellhideActionCombo.append_text(_('Show Full'));
|
||
|
intellhideActionCombo.append_text(_('Show Partial'));
|
||
|
intellhideActionCombo.append_text(_('Show Partial Fixed'));
|
||
|
|
||
|
let intellhideAction = this.settings.get_enum('intellihide-action');
|
||
|
intellhideActionCombo.set_active(intellhideAction);
|
||
|
intellhideActionCombo.connect('changed', Lang.bind (this, function(widget) {
|
||
|
this.settings.set_enum('intellihide-action', widget.get_active());
|
||
|
}));
|
||
|
|
||
|
// Add to layout
|
||
|
let intellhideActionGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0,
|
||
|
margin_left: 0
|
||
|
});
|
||
|
intellhideActionGrid.attach(intellhideActionLabel, 0, 0, 1, 1);
|
||
|
intellhideActionGrid.attach(intellhideActionCombo, 1, 0, 1, 1);
|
||
|
this.settings.bind('intellihide', intellhideActionGrid, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
|
||
|
let overviewActionLabel = new Gtk.Label({label: _("What should we do with the dock in overview mode?"),
|
||
|
hexpand:true,
|
||
|
xalign:0
|
||
|
});
|
||
|
let overviewActionCombo = new Gtk.ComboBoxText({
|
||
|
margin_left: 10,
|
||
|
halign:Gtk.Align.END
|
||
|
});
|
||
|
overviewActionCombo.append_text(_('Show Full'));
|
||
|
overviewActionCombo.append_text(_('Hide'));
|
||
|
overviewActionCombo.append_text(_('Show Partial'));
|
||
|
|
||
|
let overviewAction = this.settings.get_enum('overview-action');
|
||
|
overviewActionCombo.set_active(overviewAction);
|
||
|
overviewActionCombo.connect('changed', Lang.bind (this, function(widget) {
|
||
|
this.settings.set_enum('overview-action', widget.get_active());
|
||
|
}));
|
||
|
|
||
|
// Add to layout
|
||
|
let overviewActionGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0,
|
||
|
margin_left: 0,
|
||
|
margin_bottom: 15
|
||
|
});
|
||
|
|
||
|
overviewActionGrid.attach(overviewActionLabel, 0, 0, 1, 1);
|
||
|
overviewActionGrid.attach(overviewActionCombo, 1, 0, 1, 1);
|
||
|
|
||
|
visibilityContainerBox.add(partialActionTitle);
|
||
|
visibilityContainerBox.add(intellhideActionGrid);
|
||
|
visibilityContainerBox.add(overviewActionGrid);
|
||
|
|
||
|
|
||
|
/* ADD TO NOTEBOOK PAGE */
|
||
|
notebookBehaviorSettings.add(toggleOverviewButton);
|
||
|
notebookBehaviorSettings.add(scrollWithTouchpadButton);
|
||
|
notebookBehaviorSettings.add(visibilityTitle);
|
||
|
notebookBehaviorSettings.add(visibilityControlGrid);
|
||
|
notebookBehaviorSettings.add(visibilityContainerBox);
|
||
|
notebook.append_page(notebookBehaviorSettings, notebookBehaviorSettingsTitle);
|
||
|
|
||
|
|
||
|
/* ================================================*/
|
||
|
/* NOTEBOOK - THUMBNAILS SETTINGS PAGE */
|
||
|
/* ------------------------------------------------*/
|
||
|
|
||
|
let notebookWorkspacesSettings = new Gtk.Box({
|
||
|
orientation: Gtk.Orientation.VERTICAL,
|
||
|
margin_left: 10,
|
||
|
margin_right: 10
|
||
|
});
|
||
|
|
||
|
let notebookWorkspacesSettingsTitle = new Gtk.Label({
|
||
|
label: _("Thumbnails"),
|
||
|
use_markup: true,
|
||
|
xalign: 0
|
||
|
});
|
||
|
|
||
|
|
||
|
/* TITLE: THUMBNAILS */
|
||
|
|
||
|
let customizeThumbnailTitle = new Gtk.Label({
|
||
|
label: _("<b>Thumbnail Size</b>"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_top: 15,
|
||
|
margin_bottom: 5
|
||
|
});
|
||
|
|
||
|
|
||
|
/* THUMBNAIL SIZE WIDGETS */
|
||
|
|
||
|
let customizeThumbnailLabel = new Gtk.Label({
|
||
|
label: _("Customize the workspace thumbnail size"),
|
||
|
xalign: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let customizeThumbnailSwitch = new Gtk.Switch ({
|
||
|
halign: Gtk.Align.END
|
||
|
});
|
||
|
customizeThumbnailSwitch.set_active(this.settings.get_boolean('customize-thumbnail'));
|
||
|
customizeThumbnailSwitch.connect('notify::active', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('customize-thumbnail', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let thumbnailSizeLabel = new Gtk.Label({
|
||
|
label: _("Thumbnail size"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let thumbnailSizeSpinner = new Gtk.SpinButton();
|
||
|
thumbnailSizeSpinner.set_range(5, 25);
|
||
|
thumbnailSizeSpinner.set_value(this.settings.get_double('thumbnail-size') * 100);
|
||
|
thumbnailSizeSpinner.set_digits(1);
|
||
|
thumbnailSizeSpinner.set_increments(.5, 1);
|
||
|
thumbnailSizeSpinner.set_size_request(120, -1);
|
||
|
thumbnailSizeSpinner.connect('value-changed', Lang.bind(this, function(button) {
|
||
|
let s = button.get_value() / 100;
|
||
|
this.settings.set_double('thumbnail-size', s);
|
||
|
}));
|
||
|
thumbnailSizeSpinner.connect('output', function(button, data) {
|
||
|
var val = button.get_value().toFixed(1);
|
||
|
button.set_text(val + "%");
|
||
|
return true;
|
||
|
});
|
||
|
|
||
|
// Add to layout
|
||
|
let customizeThumbnailControlGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0,
|
||
|
margin_left: 0
|
||
|
});
|
||
|
let customizeThumbnailContainerGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0,
|
||
|
margin_left: 10
|
||
|
});
|
||
|
customizeThumbnailControlGrid.attach(customizeThumbnailLabel, 0, 0, 1, 1);
|
||
|
customizeThumbnailControlGrid.attach(customizeThumbnailSwitch, 1, 0, 1, 1);
|
||
|
customizeThumbnailContainerGrid.attach(thumbnailSizeLabel, 0, 0, 1, 1);
|
||
|
customizeThumbnailContainerGrid.attach(thumbnailSizeSpinner, 1, 0, 1, 1);
|
||
|
|
||
|
// Bind interactions
|
||
|
this.settings.bind('customize-thumbnail', customizeThumbnailContainerGrid, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
|
||
|
|
||
|
/* THUMBNAIL VISIBLE WIDTH */
|
||
|
|
||
|
let customizeThumbnailVisibleWidthLabel = new Gtk.Label({
|
||
|
label: _("Customize the visible width (height) for intellihide show-partial"),
|
||
|
xalign: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let customizeThumbnailVisibleWidthSwitch = new Gtk.Switch ({
|
||
|
halign: Gtk.Align.END
|
||
|
});
|
||
|
customizeThumbnailVisibleWidthSwitch.set_active(this.settings.get_boolean('customize-thumbnail-visible-width'));
|
||
|
customizeThumbnailVisibleWidthSwitch.connect('notify::active', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('customize-thumbnail-visible-width', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let thumbnailVisibleWidthLabel = new Gtk.Label({
|
||
|
label: _("Visible width (height when positioned horizontally)"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let thumbnailVisibleWidthSpinner = new Gtk.SpinButton();
|
||
|
thumbnailVisibleWidthSpinner.set_range(10, 60);
|
||
|
thumbnailVisibleWidthSpinner.set_value(this.settings.get_double('thumbnail-visible-width') * 1);
|
||
|
thumbnailVisibleWidthSpinner.set_digits(0);
|
||
|
thumbnailVisibleWidthSpinner.set_increments(1, 10);
|
||
|
thumbnailVisibleWidthSpinner.set_size_request(120, -1);
|
||
|
thumbnailVisibleWidthSpinner.connect('value-changed', Lang.bind(this, function(button) {
|
||
|
let s = button.get_value() / 1;
|
||
|
this.settings.set_double('thumbnail-visible-width', s);
|
||
|
}));
|
||
|
|
||
|
|
||
|
// Add to layout
|
||
|
let customizeThumbnailVisibleWidthControlGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0,
|
||
|
margin_left: 0
|
||
|
});
|
||
|
let customizeThumbnailVisibleWidthContainerGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0,
|
||
|
margin_left: 10
|
||
|
});
|
||
|
customizeThumbnailVisibleWidthControlGrid.attach(customizeThumbnailVisibleWidthLabel, 0, 0, 1, 1);
|
||
|
customizeThumbnailVisibleWidthControlGrid.attach(customizeThumbnailVisibleWidthSwitch, 1, 0, 1, 1);
|
||
|
customizeThumbnailVisibleWidthContainerGrid.attach(thumbnailVisibleWidthLabel, 0, 0, 1, 1);
|
||
|
customizeThumbnailVisibleWidthContainerGrid.attach(thumbnailVisibleWidthSpinner, 1, 0, 1, 1);
|
||
|
|
||
|
|
||
|
// Bind interactions
|
||
|
this.settings.bind('customize-thumbnail-visible-width', customizeThumbnailVisibleWidthContainerGrid, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
|
||
|
|
||
|
/* TITLE: THUMBNAIL CAPTIONS */
|
||
|
|
||
|
let workspaceCaptionsTitle = new Gtk.Label({
|
||
|
label: _("<b>Thumbnail Captions</b>"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_top: 15,
|
||
|
margin_bottom: 5
|
||
|
});
|
||
|
|
||
|
let icon_previous, icon_next;
|
||
|
if (this._rtl) {
|
||
|
icon_previous = "go-next";
|
||
|
icon_next = "go-previous";
|
||
|
} else {
|
||
|
icon_previous = "go-previous";
|
||
|
icon_next = "go-next";
|
||
|
}
|
||
|
|
||
|
|
||
|
/* THUMBNAIL CAPTIONS WIDGETS */
|
||
|
|
||
|
let workspaceCaptionsLabel = new Gtk.Label({
|
||
|
label: _("Add captions to workspace thumbnails"),
|
||
|
xalign: 0,
|
||
|
hexpand: true,
|
||
|
margin_left: 0
|
||
|
});
|
||
|
|
||
|
let workspaceCaptionsSwitch = new Gtk.Switch ({
|
||
|
halign: Gtk.Align.END
|
||
|
});
|
||
|
workspaceCaptionsSwitch.set_active(this.settings.get_boolean('workspace-captions'));
|
||
|
workspaceCaptionsSwitch.connect('notify::active', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('workspace-captions', check.get_active());
|
||
|
}));
|
||
|
|
||
|
// Workspace Caption - Position
|
||
|
let wsCaptionPositionLabel = new Gtk.Label({label: _("Show the caption at the following position"), hexpand:true, xalign:0});
|
||
|
let wsCaptionPositionCombo = new Gtk.ComboBoxText({halign:Gtk.Align.END});
|
||
|
wsCaptionPositionCombo.append_text(_("Bottom"));
|
||
|
wsCaptionPositionCombo.append_text(_("Top"));
|
||
|
|
||
|
let captionPosition = this.settings.get_enum('workspace-caption-position');
|
||
|
wsCaptionPositionCombo.set_active(captionPosition);
|
||
|
wsCaptionPositionCombo.connect('changed', Lang.bind (this, function(widget) {
|
||
|
this.settings.set_enum('workspace-caption-position', widget.get_active());
|
||
|
}));
|
||
|
|
||
|
// Workspace Captions - Height
|
||
|
let wsCaptionHeightLabel = new Gtk.Label({
|
||
|
label: _("Caption height [px]"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let wsCaptionHeightSpinner = new Gtk.SpinButton({
|
||
|
halign: Gtk.Align.END,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
wsCaptionHeightSpinner.set_sensitive(true);
|
||
|
wsCaptionHeightSpinner.set_range(10, 50);
|
||
|
wsCaptionHeightSpinner.set_value(this.settings.get_double("workspace-caption-height") * 1);
|
||
|
wsCaptionHeightSpinner.set_increments(1, 5);
|
||
|
wsCaptionHeightSpinner.connect("value-changed", Lang.bind(this, function(button) {
|
||
|
let s = button.get_value_as_int() / 1;
|
||
|
this.settings.set_double("workspace-caption-height", s);
|
||
|
}));
|
||
|
|
||
|
// Workspace Captions - Window Apps (taskbar) tooltips
|
||
|
let wsCaptionWindowAppsTitleTooltipButton = new Gtk.CheckButton({
|
||
|
label: _("Show Taskbar tooltips"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0,
|
||
|
margin_bottom: 10,
|
||
|
});
|
||
|
wsCaptionWindowAppsTitleTooltipButton.set_active(this.settings.get_boolean('workspace-caption-taskbar-tooltips'));
|
||
|
wsCaptionWindowAppsTitleTooltipButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('workspace-caption-taskbar-tooltips', check.get_active());
|
||
|
}));
|
||
|
|
||
|
// Workspace Captions - Window Apps (taskbar) Icon Size
|
||
|
let wsCaptionWindowAppsIconSizeLabel = new Gtk.Label({
|
||
|
label: _("Taskbar icon size [px]"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let wsCaptionWindowAppsIconSizeSpinner = new Gtk.SpinButton({
|
||
|
halign: Gtk.Align.END,
|
||
|
margin_top: 0,
|
||
|
margin_bottom: 0
|
||
|
});
|
||
|
wsCaptionWindowAppsIconSizeSpinner.set_sensitive(true);
|
||
|
wsCaptionWindowAppsIconSizeSpinner.set_range(10, 50);
|
||
|
wsCaptionWindowAppsIconSizeSpinner.set_value(this.settings.get_double("workspace-caption-taskbar-icon-size") * 1);
|
||
|
wsCaptionWindowAppsIconSizeSpinner.set_increments(1, 5);
|
||
|
wsCaptionWindowAppsIconSizeSpinner.connect("value-changed", Lang.bind(this, function(button) {
|
||
|
let s = button.get_value_as_int() / 1;
|
||
|
this.settings.set_double("workspace-caption-taskbar-icon-size", s);
|
||
|
}));
|
||
|
|
||
|
// Workspace captions - Popupmenu Icon Size
|
||
|
let wsCaptionMenuIconSizeLabel = new Gtk.Label({
|
||
|
label: _("Caption popup menu icon size [px]"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_top: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let wsCaptionMenuIconSizeSpinner = new Gtk.SpinButton({
|
||
|
halign: Gtk.Align.END,
|
||
|
margin_top: 0,
|
||
|
margin_bottom: 0
|
||
|
});
|
||
|
wsCaptionMenuIconSizeSpinner.set_sensitive(true);
|
||
|
wsCaptionMenuIconSizeSpinner.set_range(10, 50);
|
||
|
wsCaptionMenuIconSizeSpinner.set_value(this.settings.get_double("workspace-caption-menu-icon-size") * 1);
|
||
|
wsCaptionMenuIconSizeSpinner.set_increments(1, 5);
|
||
|
wsCaptionMenuIconSizeSpinner.connect("value-changed", Lang.bind(this, function(button) {
|
||
|
let s = button.get_value_as_int() / 1;
|
||
|
this.settings.set_double("workspace-caption-menu-icon-size", s);
|
||
|
}));
|
||
|
|
||
|
|
||
|
/* CAPTION ITEMS WIDGETS */
|
||
|
|
||
|
let workspaceCaptionItemsTitle = new Gtk.Label({
|
||
|
label: _("<b>Caption Items</b> : Customize the items on the caption"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_top: 5,
|
||
|
margin_bottom: 5
|
||
|
});
|
||
|
|
||
|
|
||
|
let workspaceCaptionItemsButton = new Gtk.Button({
|
||
|
label: _("Caption Items .."),
|
||
|
margin_top: 10,
|
||
|
halign: Gtk.Align.START
|
||
|
});
|
||
|
workspaceCaptionItemsButton.connect("clicked", Lang.bind(this, function() {
|
||
|
let dialog = new Gtk.Dialog({ title: _("Caption Items"),
|
||
|
transient_for: notebook.get_toplevel(),
|
||
|
use_header_bar: true,
|
||
|
modal: true });
|
||
|
|
||
|
|
||
|
/* CAPTION ITEMS DIALOG */
|
||
|
|
||
|
// Workspace Captions - Number
|
||
|
let wsCaptionNumberButton = new Gtk.CheckButton({
|
||
|
label: _("Show workspace number"),
|
||
|
hexpand: true
|
||
|
});
|
||
|
wsCaptionNumberButton.set_active(this._getItemExists('number'));
|
||
|
wsCaptionNumberButton.connect('toggled', Lang.bind(this, function(check){
|
||
|
if (check.get_active()) {
|
||
|
this._addItem('number', wsCaptionNumberExpand.get_active());
|
||
|
} else {
|
||
|
this._removeItem('number');
|
||
|
}
|
||
|
}));
|
||
|
let wsCaptionNumberExpand = new Gtk.CheckButton({
|
||
|
label: _("Expand"),
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
wsCaptionNumberExpand.set_active(this._getItemExpanded('number'));
|
||
|
wsCaptionNumberExpand.connect('toggled', Lang.bind(this, function(check){
|
||
|
this._setItemExpanded('number', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let wsCaptionNumber_MoveLeftButton = new Gtk.Button({
|
||
|
image: new Gtk.Image({
|
||
|
icon_name: icon_previous
|
||
|
})
|
||
|
});
|
||
|
wsCaptionNumber_MoveLeftButton.connect('clicked', function(){
|
||
|
self._moveItem('number', 1);
|
||
|
});
|
||
|
let wsCaptionNumber_MoveRightButton = new Gtk.Button({
|
||
|
image: new Gtk.Image({
|
||
|
icon_name: icon_next
|
||
|
})
|
||
|
});
|
||
|
wsCaptionNumber_MoveRightButton.connect('clicked', function(){
|
||
|
self._moveItem('number', -1);
|
||
|
});
|
||
|
|
||
|
// Workspace Captions - Name
|
||
|
let wsCaptionNameButton = new Gtk.CheckButton({
|
||
|
label: _("Show workspace name"),
|
||
|
hexpand: true
|
||
|
});
|
||
|
wsCaptionNameButton.set_active(this._getItemExists('name'));
|
||
|
wsCaptionNameButton.connect('toggled', Lang.bind(this, function(check){
|
||
|
if (check.get_active()) {
|
||
|
this._addItem('name', wsCaptionNameExpand.get_active());
|
||
|
} else {
|
||
|
this._removeItem('name');
|
||
|
}
|
||
|
}));
|
||
|
|
||
|
let wsCaptionNameExpand = new Gtk.CheckButton({
|
||
|
label: _("Expand"),
|
||
|
hexpand: true
|
||
|
});
|
||
|
wsCaptionNameExpand.set_active(this._getItemExpanded('name'));
|
||
|
wsCaptionNameExpand.connect('toggled', Lang.bind(this, function(check){
|
||
|
this._setItemExpanded('name', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let wsCaptionName_MoveLeftButton = new Gtk.Button({
|
||
|
image: new Gtk.Image({
|
||
|
icon_name: icon_previous
|
||
|
})
|
||
|
});
|
||
|
wsCaptionName_MoveLeftButton.connect('clicked', function(){
|
||
|
self._moveItem('name', 1);
|
||
|
});
|
||
|
let wsCaptionName_MoveRightButton = new Gtk.Button({
|
||
|
image: new Gtk.Image({
|
||
|
icon_name: icon_next
|
||
|
})
|
||
|
});
|
||
|
wsCaptionName_MoveRightButton.connect('clicked', function(){
|
||
|
self._moveItem('name', -1);
|
||
|
});
|
||
|
|
||
|
// Workspace Captions - Window Count
|
||
|
let wsCaptionWindowCount = new Gtk.CheckButton({
|
||
|
label: _("Show workspace window count"),
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
wsCaptionWindowCount.set_active(this._getItemExists('windowcount'));
|
||
|
wsCaptionWindowCount.connect('toggled', Lang.bind(this, function(check){
|
||
|
if (check.get_active()) {
|
||
|
this._addItem('windowcount', wsCaptionWindowCountExpand.get_active());
|
||
|
} else {
|
||
|
this._removeItem('windowcount');
|
||
|
}
|
||
|
}));
|
||
|
|
||
|
let wsCaptionWindowCountUseImage = new Gtk.CheckButton({
|
||
|
label: _("Use image"),
|
||
|
hexpand: true
|
||
|
});
|
||
|
wsCaptionWindowCountUseImage.set_active(this.settings.get_boolean('workspace-caption-windowcount-image'));
|
||
|
wsCaptionWindowCountUseImage.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('workspace-caption-windowcount-image', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let wsCaptionWindowCountExpand = new Gtk.CheckButton({
|
||
|
label: _("Expand"),
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
wsCaptionWindowCountExpand.set_active(this._getItemExpanded('windowcount'));
|
||
|
wsCaptionWindowCountExpand.connect('toggled', Lang.bind(this, function(check){
|
||
|
this._setItemExpanded('windowcount', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let wsCaptionWindowCount_MoveLeftButton = new Gtk.Button({
|
||
|
image: new Gtk.Image({
|
||
|
icon_name: icon_previous
|
||
|
})
|
||
|
});
|
||
|
wsCaptionWindowCount_MoveLeftButton.connect('clicked', function(){
|
||
|
self._moveItem('windowcount', 1);
|
||
|
});
|
||
|
let wsCaptionWindowCount_MoveRightButton = new Gtk.Button({
|
||
|
image: new Gtk.Image({
|
||
|
icon_name: icon_next
|
||
|
})
|
||
|
});
|
||
|
wsCaptionWindowCount_MoveRightButton.connect('clicked', function(){
|
||
|
self._moveItem('windowcount', -1);
|
||
|
});
|
||
|
|
||
|
// Workspace Captions - Window Apps (taskbar)
|
||
|
let wsCaptionWindowApps = new Gtk.CheckButton({
|
||
|
label: _("Show workspace taskbar (apps)"),
|
||
|
hexpand: true
|
||
|
});
|
||
|
wsCaptionWindowApps.set_active(this._getItemExists('windowapps'));
|
||
|
wsCaptionWindowApps.connect('toggled', Lang.bind(this, function(check){
|
||
|
if (check.get_active()) {
|
||
|
this._addItem('windowapps', wsCaptionWindowAppsExpand.get_active());
|
||
|
} else {
|
||
|
this._removeItem('windowapps');
|
||
|
}
|
||
|
}));
|
||
|
|
||
|
let wsCaptionWindowAppsExpand = new Gtk.CheckButton({
|
||
|
label: _("Expand"),
|
||
|
hexpand: true
|
||
|
});
|
||
|
wsCaptionWindowAppsExpand.set_active(this._getItemExpanded('windowapps'));
|
||
|
wsCaptionWindowAppsExpand.connect('toggled', Lang.bind(this, function(check){
|
||
|
this._setItemExpanded('windowapps', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let wsCaptionWindowApps_MoveLeftButton = new Gtk.Button({
|
||
|
image: new Gtk.Image({
|
||
|
icon_name: icon_previous
|
||
|
})
|
||
|
});
|
||
|
wsCaptionWindowApps_MoveLeftButton.connect('clicked', function(){
|
||
|
self._moveItem('windowapps', 1);
|
||
|
});
|
||
|
let wsCaptionWindowApps_MoveRightButton = new Gtk.Button({
|
||
|
image: new Gtk.Image({
|
||
|
icon_name: icon_next
|
||
|
})
|
||
|
});
|
||
|
wsCaptionWindowApps_MoveRightButton.connect('clicked', function(){
|
||
|
self._moveItem('windowapps', -1);
|
||
|
});
|
||
|
|
||
|
// Workspace Captions - Spacer
|
||
|
let wsCaptionSpacer = new Gtk.CheckButton({
|
||
|
label: _("Show a spacer/filler"),
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
wsCaptionSpacer.set_active(this._getItemExists('spacer'));
|
||
|
wsCaptionSpacer.connect('toggled', Lang.bind(this, function(check){
|
||
|
if (check.get_active()) {
|
||
|
this._addItem('spacer', wsCaptionSpacerExpand.get_active());
|
||
|
} else {
|
||
|
this._removeItem('spacer');
|
||
|
}
|
||
|
}));
|
||
|
|
||
|
let wsCaptionSpacerExpand = new Gtk.CheckButton({
|
||
|
label: _("Expand"),
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
wsCaptionSpacerExpand.set_active(this._getItemExpanded('spacer'));
|
||
|
wsCaptionSpacerExpand.connect('toggled', Lang.bind(this, function(check){
|
||
|
this._setItemExpanded('spacer', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let wsCaptionSpacer_MoveLeftButton = new Gtk.Button({
|
||
|
image: new Gtk.Image({
|
||
|
icon_name: icon_previous
|
||
|
})
|
||
|
});
|
||
|
wsCaptionSpacer_MoveLeftButton.connect('clicked', function(){
|
||
|
self._moveItem('spacer', 1);
|
||
|
});
|
||
|
let wsCaptionSpacer_MoveRightButton = new Gtk.Button({
|
||
|
image: new Gtk.Image({
|
||
|
icon_name: icon_next
|
||
|
})
|
||
|
});
|
||
|
wsCaptionSpacer_MoveRightButton.connect('clicked', function(){
|
||
|
self._moveItem('spacer', -1);
|
||
|
});
|
||
|
|
||
|
|
||
|
// Add to layout
|
||
|
let workspaceCaptionsDialogGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false
|
||
|
});
|
||
|
|
||
|
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionNumberButton, 0, 5, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionNumberExpand, 2, 5, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionNumber_MoveLeftButton, 3, 5, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionNumber_MoveRightButton, 4, 5, 1, 1);
|
||
|
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionNameButton, 0, 6, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionNameExpand, 2, 6, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionName_MoveLeftButton, 3, 6, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionName_MoveRightButton, 4, 6, 1, 1);
|
||
|
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionWindowCount, 0, 7, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionWindowCountUseImage, 1, 7, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionWindowCountExpand, 2, 7, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionWindowCount_MoveLeftButton, 3, 7, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionWindowCount_MoveRightButton, 4, 7, 1, 1);
|
||
|
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionWindowApps, 0, 8, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionWindowAppsExpand, 2, 8, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionWindowApps_MoveLeftButton, 3, 8, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionWindowApps_MoveRightButton, 4, 8, 1, 1);
|
||
|
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionSpacer, 0, 9, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionSpacerExpand, 2, 9, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionSpacer_MoveLeftButton, 3, 9, 1, 1);
|
||
|
workspaceCaptionsDialogGrid.attach(wsCaptionSpacer_MoveRightButton, 4, 9, 1, 1);
|
||
|
|
||
|
// Add to dialog
|
||
|
let workspaceCaptionsDialogContainerBox = new Gtk.Box({
|
||
|
orientation: Gtk.Orientation.VERTICAL,
|
||
|
spacing: 0,
|
||
|
homogeneous: false,
|
||
|
margin_left: 10,
|
||
|
margin_top: 20,
|
||
|
margin_bottom: 20,
|
||
|
margin_right: 10
|
||
|
});
|
||
|
workspaceCaptionsDialogContainerBox.add(workspaceCaptionsDialogGrid);
|
||
|
dialog.get_content_area().add(workspaceCaptionsDialogContainerBox);
|
||
|
dialog.show_all();
|
||
|
}));
|
||
|
|
||
|
// Add to layout
|
||
|
let workspaceCaptionsControlGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0,
|
||
|
margin_left: 0
|
||
|
});
|
||
|
let workspaceCaptionsContainerGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0,
|
||
|
margin_left: 10
|
||
|
});
|
||
|
|
||
|
workspaceCaptionsControlGrid.attach(workspaceCaptionsLabel, 0, 0, 1, 1);
|
||
|
workspaceCaptionsControlGrid.attach(workspaceCaptionsSwitch, 1, 0, 1, 1);
|
||
|
|
||
|
workspaceCaptionsContainerGrid.attach(wsCaptionPositionLabel, 0, 2, 1, 1);
|
||
|
workspaceCaptionsContainerGrid.attach(wsCaptionPositionCombo, 1, 2, 3, 1);
|
||
|
|
||
|
workspaceCaptionsContainerGrid.attach(wsCaptionHeightLabel, 0, 3, 1, 1);
|
||
|
workspaceCaptionsContainerGrid.attach(wsCaptionHeightSpinner, 1, 3, 3, 1);
|
||
|
|
||
|
workspaceCaptionsContainerGrid.attach(wsCaptionMenuIconSizeLabel, 0, 4, 1, 1);
|
||
|
workspaceCaptionsContainerGrid.attach(wsCaptionMenuIconSizeSpinner, 1, 4, 3, 1);
|
||
|
|
||
|
workspaceCaptionsContainerGrid.attach(wsCaptionWindowAppsIconSizeLabel, 0, 5, 1, 1);
|
||
|
workspaceCaptionsContainerGrid.attach(wsCaptionWindowAppsIconSizeSpinner, 1, 5, 3, 1);
|
||
|
|
||
|
workspaceCaptionsContainerGrid.attach(wsCaptionWindowAppsTitleTooltipButton, 0, 6, 1, 1);
|
||
|
|
||
|
workspaceCaptionsContainerGrid.attach(workspaceCaptionItemsTitle, 0, 7, 1, 1);
|
||
|
workspaceCaptionsContainerGrid.attach(workspaceCaptionItemsButton, 0, 8, 1, 1);
|
||
|
|
||
|
// Bind interactions
|
||
|
this.settings.bind('workspace-captions', workspaceCaptionsContainerGrid, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/* TITLE: MISC OPTIONS */
|
||
|
|
||
|
let workspaceOptionsTitle = new Gtk.Label({
|
||
|
label: _("<b>Miscellaneous Options</b>"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_top: 15,
|
||
|
margin_bottom: 5
|
||
|
});
|
||
|
|
||
|
/* MISC OPTIONS WIDGETS */
|
||
|
|
||
|
let thumbnailCaptionPopupMenuHideShortcutsPanel = new Gtk.CheckButton({
|
||
|
label: _("Hide the favorite shortcuts panel when a popup menu is shown"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
thumbnailCaptionPopupMenuHideShortcutsPanel.set_active(this.settings.get_boolean('thumbnails-popupmenu-hide-shortcuts'));
|
||
|
thumbnailCaptionPopupMenuHideShortcutsPanel.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('thumbnails-popupmenu-hide-shortcuts', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let thumbnailCaptionPopupMenuHideShortcutsPanelNote = new Gtk.Label({
|
||
|
label: _("NOTE: Only applies when the shortcuts panel is set to inside orientation"),
|
||
|
xalign: 0,
|
||
|
margin_left: 25,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
|
||
|
// Add to layout
|
||
|
let workspaceOptionsControlGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0,
|
||
|
margin_left: 0,
|
||
|
margin_bottom: 20
|
||
|
});
|
||
|
workspaceOptionsControlGrid.attach(thumbnailCaptionPopupMenuHideShortcutsPanel, 0, 0, 1, 1);
|
||
|
workspaceOptionsControlGrid.attach(thumbnailCaptionPopupMenuHideShortcutsPanelNote, 0, 1, 1, 1);
|
||
|
|
||
|
|
||
|
/* ADD TO NOTEBOOK PAGE */
|
||
|
notebookWorkspacesSettings.add(customizeThumbnailTitle);
|
||
|
notebookWorkspacesSettings.add(customizeThumbnailControlGrid);
|
||
|
notebookWorkspacesSettings.add(customizeThumbnailContainerGrid);
|
||
|
notebookWorkspacesSettings.add(customizeThumbnailVisibleWidthControlGrid);
|
||
|
notebookWorkspacesSettings.add(customizeThumbnailVisibleWidthContainerGrid);
|
||
|
notebookWorkspacesSettings.add(workspaceCaptionsTitle);
|
||
|
notebookWorkspacesSettings.add(workspaceCaptionsControlGrid);
|
||
|
notebookWorkspacesSettings.add(workspaceCaptionsContainerGrid);
|
||
|
// notebookWorkspacesSettings.add(workspaceOptionsTitle);
|
||
|
// notebookWorkspacesSettings.add(workspaceOptionsControlGrid);
|
||
|
notebook.append_page(notebookWorkspacesSettings, notebookWorkspacesSettingsTitle);
|
||
|
|
||
|
|
||
|
/* ================================================*/
|
||
|
/* NOTEBOOK - FAVORITES SETTINGS PAGE */
|
||
|
/* ------------------------------------------------*/
|
||
|
|
||
|
let notebookDashSettings = new Gtk.Box({
|
||
|
orientation: Gtk.Orientation.VERTICAL,
|
||
|
margin_left: 10,
|
||
|
margin_right: 10
|
||
|
});
|
||
|
|
||
|
let notebookDashSettingsTitle = new Gtk.Label({
|
||
|
label: _("Favorites"),
|
||
|
use_markup: true,
|
||
|
xalign: 0
|
||
|
});
|
||
|
|
||
|
|
||
|
/* TITLE: FAVORITE SHORTCUTS PANEL */
|
||
|
|
||
|
let shortcutsPanelTitle = new Gtk.Label({
|
||
|
label: _("<b>Favorite Shortcuts Panel</b>"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_top: 15,
|
||
|
margin_bottom: 5
|
||
|
});
|
||
|
|
||
|
|
||
|
/* SHORTCUTS PANEL WIDGETS */
|
||
|
|
||
|
let shortcutsPanelLabel = new Gtk.Label({
|
||
|
label: _("Show a favorite shortcuts panel"),
|
||
|
xalign: 0,
|
||
|
hexpand: true,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
|
||
|
let shortcutsPanelSwitch = new Gtk.Switch ({
|
||
|
halign: Gtk.Align.END,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
shortcutsPanelSwitch.set_active(this.settings.get_boolean('show-shortcuts-panel'));
|
||
|
shortcutsPanelSwitch.connect('notify::active', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('show-shortcuts-panel', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let shortcutsPanelOrientationLabel = new Gtk.Label({label: _("Shortcuts panel orientation in reference to the thumbnails"),
|
||
|
hexpand:true,
|
||
|
xalign:0
|
||
|
});
|
||
|
let shortcutsPanelOrientationCombo = new Gtk.ComboBoxText({
|
||
|
halign:Gtk.Align.END
|
||
|
});
|
||
|
shortcutsPanelOrientationCombo.append_text(_('Outside'));
|
||
|
shortcutsPanelOrientationCombo.append_text(_('Inside'));
|
||
|
|
||
|
let orientation = this.settings.get_enum('shortcuts-panel-orientation');
|
||
|
if (orientation > 1)
|
||
|
orientation = 0;
|
||
|
|
||
|
shortcutsPanelOrientationCombo.set_active(orientation);
|
||
|
shortcutsPanelOrientationCombo.connect('changed', Lang.bind (this, function(widget) {
|
||
|
this.settings.set_enum('shortcuts-panel-orientation', widget.get_active());
|
||
|
}));
|
||
|
|
||
|
let shortcutsPanelIconSizeLabel = new Gtk.Label({
|
||
|
label: _("Shortcuts panel icon size [px]"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
hexpand: true
|
||
|
});
|
||
|
|
||
|
let shortcutsPanelIconSizeSpinner = new Gtk.SpinButton({
|
||
|
halign: Gtk.Align.END,
|
||
|
margin_top: 0,
|
||
|
margin_bottom: 0
|
||
|
});
|
||
|
shortcutsPanelIconSizeSpinner.set_sensitive(true);
|
||
|
shortcutsPanelIconSizeSpinner.set_range(12, 64);
|
||
|
shortcutsPanelIconSizeSpinner.set_value(this.settings.get_double("shortcuts-panel-icon-size") * 1);
|
||
|
shortcutsPanelIconSizeSpinner.set_increments(1, 5);
|
||
|
shortcutsPanelIconSizeSpinner.connect("value-changed", Lang.bind(this, function(button) {
|
||
|
let s = button.get_value_as_int() / 1;
|
||
|
this.settings.set_double("shortcuts-panel-icon-size", s);
|
||
|
}));
|
||
|
|
||
|
let setSwarmAnimationButton = new Gtk.CheckButton({
|
||
|
label: _("Use the Apps button as the source of the swarm animation"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
setSwarmAnimationButton.set_active(this.settings.get_boolean('shortcuts-panel-appsbutton-animation'));
|
||
|
setSwarmAnimationButton.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('shortcuts-panel-appsbutton-animation', check.get_active());
|
||
|
}));
|
||
|
|
||
|
|
||
|
/* TITLE: MISC OPTIONS */
|
||
|
|
||
|
let shortcutsPanelOptionsTitle = new Gtk.Label({
|
||
|
label: _("<b>Miscellaneous Options</b>"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_top: 15,
|
||
|
margin_bottom: 5
|
||
|
});
|
||
|
|
||
|
|
||
|
/* MISC OPTIONS WIDGETS */
|
||
|
|
||
|
let shortcutsPanelShowRunning = new Gtk.CheckButton({
|
||
|
label: _("Show running applications"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
shortcutsPanelShowRunning.set_active(this.settings.get_boolean('shortcuts-panel-show-running'));
|
||
|
shortcutsPanelShowRunning.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('shortcuts-panel-show-running', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let shortcutsPanelShowPlaces = new Gtk.CheckButton({
|
||
|
label: _("Show places"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
shortcutsPanelShowPlaces.set_active(this.settings.get_boolean('shortcuts-panel-show-places'));
|
||
|
shortcutsPanelShowPlaces.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('shortcuts-panel-show-places', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let shortcutsPanelShowWindowCount = new Gtk.CheckButton({
|
||
|
label: _("Show application window count indicators"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
shortcutsPanelShowWindowCount.set_active(this.settings.get_boolean('shortcuts-panel-show-window-count-indicators'));
|
||
|
shortcutsPanelShowWindowCount.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('shortcuts-panel-show-window-count-indicators', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let shortcutsPanelAppsbuttonAtBottom = new Gtk.CheckButton({
|
||
|
label: _("Set the Apps button at the bottom"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
shortcutsPanelAppsbuttonAtBottom.set_active(this.settings.get_boolean('shortcuts-panel-appsbutton-at-bottom'));
|
||
|
shortcutsPanelAppsbuttonAtBottom.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('shortcuts-panel-appsbutton-at-bottom', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let shortcutsPanelPopupMenuArrowAtTop = new Gtk.CheckButton({
|
||
|
label: _("Set the menu context arrow at the top of the popup menu dialog"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
shortcutsPanelPopupMenuArrowAtTop.set_active(this.settings.get_boolean('shortcuts-panel-popupmenu-arrow-at-top'));
|
||
|
shortcutsPanelPopupMenuArrowAtTop.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('shortcuts-panel-popupmenu-arrow-at-top', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let shortcutsPanelPopupMenuHideThumbnails = new Gtk.CheckButton({
|
||
|
label: _("Hide thumbnails when a popup menu dialog is shown"),
|
||
|
margin_left: 0,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
shortcutsPanelPopupMenuHideThumbnails.set_active(this.settings.get_boolean('shortcuts-panel-popupmenu-hide-thumbnails'));
|
||
|
shortcutsPanelPopupMenuHideThumbnails.connect('toggled', Lang.bind(this, function(check) {
|
||
|
this.settings.set_boolean('shortcuts-panel-popupmenu-hide-thumbnails', check.get_active());
|
||
|
}));
|
||
|
|
||
|
let shortcutsPanelPopupMenuHideThumbnailsNote = new Gtk.Label({
|
||
|
label: _("NOTE: Only applies when the shortcuts panel is set to outside orientation"),
|
||
|
use_markup: true,
|
||
|
xalign: 0,
|
||
|
margin_left: 25,
|
||
|
margin_top: 0
|
||
|
});
|
||
|
|
||
|
// Add to layout
|
||
|
let shortcutsPanelControlGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0,
|
||
|
margin_left: 0
|
||
|
});
|
||
|
let shortcutsPanelContainerGrid = new Gtk.Grid({
|
||
|
row_homogeneous: false,
|
||
|
column_homogeneous: false,
|
||
|
margin_top: 0,
|
||
|
margin_left: 10,
|
||
|
margin_bottom: 10
|
||
|
});
|
||
|
shortcutsPanelControlGrid.attach(shortcutsPanelLabel, 0, 1, 1, 1);
|
||
|
shortcutsPanelControlGrid.attach(shortcutsPanelSwitch, 1, 1, 1, 1);
|
||
|
shortcutsPanelContainerGrid.attach(shortcutsPanelOrientationLabel, 0, 0, 1, 1);
|
||
|
shortcutsPanelContainerGrid.attach(shortcutsPanelOrientationCombo, 1, 0, 1, 1);
|
||
|
shortcutsPanelContainerGrid.attach(shortcutsPanelIconSizeLabel, 0, 1, 1, 1);
|
||
|
shortcutsPanelContainerGrid.attach(shortcutsPanelIconSizeSpinner, 1, 1, 1, 1);
|
||
|
shortcutsPanelContainerGrid.attach(setSwarmAnimationButton, 0, 2, 1, 1);
|
||
|
shortcutsPanelContainerGrid.attach(shortcutsPanelOptionsTitle, 0, 3, 1, 1);
|
||
|
shortcutsPanelContainerGrid.attach(shortcutsPanelShowRunning, 0, 4, 1, 1);
|
||
|
shortcutsPanelContainerGrid.attach(shortcutsPanelShowPlaces, 0, 5, 1, 1);
|
||
|
shortcutsPanelContainerGrid.attach(shortcutsPanelShowWindowCount, 0, 6, 1, 1);
|
||
|
shortcutsPanelContainerGrid.attach(shortcutsPanelAppsbuttonAtBottom, 0, 7, 1, 1);
|
||
|
shortcutsPanelContainerGrid.attach(shortcutsPanelPopupMenuArrowAtTop, 0, 8, 1, 1);
|
||
|
shortcutsPanelContainerGrid.attach(shortcutsPanelPopupMenuHideThumbnails, 0, 9, 2, 1);
|
||
|
shortcutsPanelContainerGrid.attach(shortcutsPanelPopupMenuHideThumbnailsNote, 0, 10, 2, 1);
|
||
|
|
||
|
// Bind interactions
|
||
|
this.settings.bind('show-shortcuts-panel', shortcutsPanelContainerGrid, 'sensitive', Gio.SettingsBindFlags.DEFAULT);
|
||
|
|
||
|
|
||
|
/* ADD TO NOTEBOOK PAGE */
|
||
|
notebookDashSettings.add(shortcutsPanelTitle);
|
||
|
notebookDashSettings.add(shortcutsPanelControlGrid);
|
||
|
notebookDashSettings.add(shortcutsPanelContainerGrid);
|
||
|
notebook.append_page(notebookDashSettings, notebookDashSettingsTitle);
|
||
|
|
||
|
|
||
|
|
||
|
this.add(notebook);
|
||
|
|
||
|
},
|
||
|
|
||
|
_getItemExists: function(item) {
|
||
|
let currentItems = this.settings.get_strv('workspace-caption-items');
|
||
|
let items = currentItems.map(function(el) {
|
||
|
return el.split(':')[0];
|
||
|
});
|
||
|
|
||
|
let index = items.indexOf(item);
|
||
|
|
||
|
if (index == -1)
|
||
|
return false;
|
||
|
|
||
|
return true;
|
||
|
},
|
||
|
|
||
|
_getItemExpanded: function(item) {
|
||
|
let currentItems = this.settings.get_strv('workspace-caption-items');
|
||
|
let items = currentItems.map(function(el) {
|
||
|
return el.split(':')[0];
|
||
|
});
|
||
|
|
||
|
let index = items.indexOf(item);
|
||
|
|
||
|
if (index == -1)
|
||
|
return false;
|
||
|
|
||
|
let currentItem = currentItems[index];
|
||
|
let expandState = currentItem.split(':')[1];
|
||
|
|
||
|
if (expandState == "false")
|
||
|
return false
|
||
|
|
||
|
return true;
|
||
|
},
|
||
|
|
||
|
_setItemExpanded: function(item, expandState) {
|
||
|
let currentItems = this.settings.get_strv('workspace-caption-items');
|
||
|
let items = currentItems.map(function(el) {
|
||
|
return el.split(':')[0];
|
||
|
});
|
||
|
|
||
|
let index = items.indexOf(item);
|
||
|
|
||
|
if (index == -1)
|
||
|
return false;
|
||
|
|
||
|
currentItems[index] = item + ":" + expandState;
|
||
|
this.settings.set_strv('workspace-caption-items', currentItems);
|
||
|
return true;
|
||
|
},
|
||
|
|
||
|
_addItem: function(item, expandState) {
|
||
|
let currentItems = this.settings.get_strv('workspace-caption-items');
|
||
|
let items = currentItems.map(function(el) {
|
||
|
return el.split(':')[0];
|
||
|
});
|
||
|
|
||
|
let index = items.indexOf(item);
|
||
|
|
||
|
if (index != -1)
|
||
|
return false;
|
||
|
|
||
|
let newitem = item + ":" + expandState;
|
||
|
|
||
|
currentItems.push(newitem);
|
||
|
this.settings.set_strv('workspace-caption-items', currentItems);
|
||
|
return true;
|
||
|
},
|
||
|
|
||
|
_removeItem: function(item) {
|
||
|
let currentItems = this.settings.get_strv('workspace-caption-items');
|
||
|
let items = currentItems.map(function(el) {
|
||
|
return el.split(':')[0];
|
||
|
});
|
||
|
|
||
|
let index = items.indexOf(item);
|
||
|
|
||
|
if (index < 0)
|
||
|
return false;
|
||
|
|
||
|
currentItems.splice(index, 1);
|
||
|
this.settings.set_strv('workspace-caption-items', currentItems);
|
||
|
return true;
|
||
|
},
|
||
|
|
||
|
_moveItem: function(item, delta) {
|
||
|
let currentItems = this.settings.get_strv('workspace-caption-items');
|
||
|
let items = currentItems.map(function(el) {
|
||
|
return el.split(':')[0];
|
||
|
});
|
||
|
|
||
|
let index = items.indexOf(item);
|
||
|
|
||
|
if (index < 0)
|
||
|
return false;
|
||
|
|
||
|
let newIndex = index + delta;
|
||
|
if (newIndex < 0 || newIndex >= currentItems.length || newIndex == index) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
currentItems.splice(newIndex, 0, currentItems.splice(index, 1)[0]);
|
||
|
this.settings.set_strv('workspace-caption-items', currentItems);
|
||
|
return true;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
function init() {
|
||
|
Convenience.initTranslations();
|
||
|
}
|
||
|
|
||
|
function buildPrefsWidget() {
|
||
|
let widget = new WorkspacesToDockPreferencesWidget({
|
||
|
orientation: Gtk.Orientation.VERTICAL,
|
||
|
spacing: 5,
|
||
|
border_width: 5
|
||
|
});
|
||
|
widget.show_all();
|
||
|
|
||
|
return widget;
|
||
|
}
|