diff --git a/resources/schemas/org.gnome.shell.extensions.tilingshell.gschema.xml b/resources/schemas/org.gnome.shell.extensions.tilingshell.gschema.xml
index 196aeb3..5037aa3 100644
--- a/resources/schemas/org.gnome.shell.extensions.tilingshell.gschema.xml
+++ b/resources/schemas/org.gnome.shell.extensions.tilingshell.gschema.xml
@@ -32,16 +32,49 @@
Shows indicator
Shows an indicator on top panel.
-
+
+
+ 16
+ Inner top gap
+ Gap at the top between windows
+
+
+ 16
+ Inner bottom gap
+ Gap at the bottom between windows
+
+
+ 16
+ Inner left gap
+ Gap on the left side between windows
+
+
16
- Inner gaps
- Internal gaps between tiles in a layout.
+ Inner right gap
+ Gap on the right side between windows
-
+
+
8
- Outer gaps
- External gaps between the layout and the monitor borders.
+ Outer top gap
+ Gap between windows and top monitor border
+
+ 8
+ Outer bottom gap
+ Gap between windows and bottom monitor border
+
+
+ 8
+ Outer left gap
+ Gap between windows and left monitor border
+
+
+ 8
+ Outer right gap
+ Gap between windows and right monitor border
+
+
true
Span multiple tiles
diff --git a/src/prefs.ts b/src/prefs.ts
index 748f813..0c947db 100644
--- a/src/prefs.ts
+++ b/src/prefs.ts
@@ -60,20 +60,82 @@ export default class TilingShellExtensionPreferences extends ExtensionPreference
);
appearenceGroup.add(showIndicatorRow);
- const innerGapsRow = this._buildSpinButtonRow(
- Settings.KEY_INNER_GAPS,
- _('Inner gaps'),
- _('Gaps between windows'),
- );
+ // Expandable inner gaps row (dropdown)
+ const innerGapsRow = new Adw.ExpanderRow({
+ title: _('Inner gaps'),
+ subtitle: _('Gaps between windows'),
+ });
appearenceGroup.add(innerGapsRow);
- const outerGapsRow = this._buildSpinButtonRow(
- Settings.KEY_OUTER_GAPS,
- _('Outer gaps'),
- _('Gaps between a window and the monitor borders'),
+ // Inner gaps controls
+ innerGapsRow.add_row(
+ this._buildSpinButtonRow(
+ Settings.KEY_INNER_GAPS_LEFT,
+ _('Left'),
+ _('Gap on the left side between windows'),
+ )
);
+ innerGapsRow.add_row(
+ this._buildSpinButtonRow(
+ Settings.KEY_INNER_GAPS_RIGHT,
+ _('Right'),
+ _('Gap on the right side between windows'),
+ )
+ );
+ innerGapsRow.add_row(
+ this._buildSpinButtonRow(
+ Settings.KEY_INNER_GAPS_TOP,
+ _('Top'),
+ _('Gap at the top between windows'),
+ )
+ );
+ innerGapsRow.add_row(
+ this._buildSpinButtonRow(
+ Settings.KEY_INNER_GAPS_BOTTOM,
+ _('Bottom'),
+ _('Gap at the bottom between windows'),
+ )
+ );
+
+ // Expandable outer gaps row (dropdown)
+ const outerGapsRow = new Adw.ExpanderRow({
+ title: _('Outer gaps'),
+ subtitle: _('Gaps between windows and monitor borders'),
+ });
appearenceGroup.add(outerGapsRow);
+ // Outer gaps controls
+ outerGapsRow.add_row(
+ this._buildSpinButtonRow(
+ Settings.KEY_OUTER_GAPS_LEFT,
+ _('Left'),
+ _('Gap between windows and left monitor border'),
+ )
+ );
+ outerGapsRow.add_row(
+ this._buildSpinButtonRow(
+ Settings.KEY_OUTER_GAPS_RIGHT,
+ _('Right'),
+ _('Gap between windows and right monitor border'),
+ )
+ );
+ outerGapsRow.add_row(
+ this._buildSpinButtonRow(
+ Settings.KEY_OUTER_GAPS_TOP,
+ _('Top'),
+ _('Gap between windows and top monitor border'),
+ )
+ );
+ outerGapsRow.add_row(
+ this._buildSpinButtonRow(
+ Settings.KEY_OUTER_GAPS_BOTTOM,
+ _('Bottom'),
+ _('Gap between windows and bottom monitor border'),
+ )
+ );
+
+
+
const blurRow = new Adw.ExpanderRow({
title: _('Blur (experimental feature)'),
subtitle: _(
diff --git a/src/settings/settings.ts b/src/settings/settings.ts
index d925f61..fa0d899 100644
--- a/src/settings/settings.ts
+++ b/src/settings/settings.ts
@@ -101,8 +101,17 @@ export default class Settings {
static KEY_OVERRIDE_WINDOW_MENU = 'override-window-menu';
static KEY_SNAP_ASSISTANT_THRESHOLD = 'snap-assistant-threshold';
static KEY_ENABLE_WINDOW_BORDER = 'enable-window-border';
- static KEY_INNER_GAPS = 'inner-gaps';
- static KEY_OUTER_GAPS = 'outer-gaps';
+
+ static KEY_INNER_GAPS_TOP = 'inner-gaps-top';
+ static KEY_INNER_GAPS_BOTTOM = 'inner-gaps-bottom';
+ static KEY_INNER_GAPS_LEFT = 'inner-gaps-left';
+ static KEY_INNER_GAPS_RIGHT = 'inner-gaps-right';
+
+ static KEY_OUTER_GAPS_TOP = 'outer-gaps-top';
+ static KEY_OUTER_GAPS_BOTTOM = 'outer-gaps-bottom';
+ static KEY_OUTER_GAPS_LEFT = 'outer-gaps-left';
+ static KEY_OUTER_GAPS_RIGHT = 'outer-gaps-right';
+
static KEY_SNAP_ASSISTANT_ANIMATION_TIME = 'snap-assistant-animation-time';
static KEY_TILE_PREVIEW_ANIMATION_TIME = 'tile-preview-animation-time';
static KEY_SETTING_LAYOUTS_JSON = 'layouts-json';
@@ -226,20 +235,68 @@ export default class Settings {
set_activationkey(Settings.KEY_TILING_SYSTEM_DEACTIVATION_KEY, val);
}
- static get INNER_GAPS(): number {
- return get_unsigned_number(Settings.KEY_INNER_GAPS);
+ static get INNER_GAPS_TOP(): number {
+ return get_unsigned_number(Settings.KEY_INNER_GAPS_TOP);
+ }
+
+ static set INNER_GAPS_TOP(val: number) {
+ set_unsigned_number(Settings.KEY_INNER_GAPS_TOP, val);
+ }
+
+ static get INNER_GAPS_BOTTOM(): number {
+ return get_unsigned_number(Settings.KEY_INNER_GAPS_BOTTOM);
+ }
+
+ static set INNER_GAPS_BOTTOM(val: number) {
+ set_unsigned_number(Settings.KEY_INNER_GAPS_BOTTOM, val);
+ }
+
+ static get INNER_GAPS_LEFT(): number {
+ return get_unsigned_number(Settings.KEY_INNER_GAPS_LEFT);
+ }
+
+ static set INNER_GAPS_LEFT(val: number) {
+ set_unsigned_number(Settings.KEY_INNER_GAPS_LEFT, val);
+ }
+
+ static get INNER_GAPS_RIGHT(): number {
+ return get_unsigned_number(Settings.KEY_INNER_GAPS_RIGHT);
}
- static set INNER_GAPS(val: number) {
- set_unsigned_number(Settings.KEY_INNER_GAPS, val);
+ static set INNER_GAPS_RIGHT(val: number) {
+ set_unsigned_number(Settings.KEY_INNER_GAPS_RIGHT, val);
}
- static get OUTER_GAPS(): number {
- return get_unsigned_number(Settings.KEY_OUTER_GAPS);
+ static get OUTER_GAPS_TOP(): number {
+ return get_unsigned_number(Settings.KEY_OUTER_GAPS_TOP);
}
- static set OUTER_GAPS(val: number) {
- set_unsigned_number(Settings.KEY_OUTER_GAPS, val);
+ static set OUTER_GAPS_TOP(val: number) {
+ set_unsigned_number(Settings.KEY_OUTER_GAPS_TOP, val);
+ }
+
+ static get OUTER_GAPS_BOTTOM(): number {
+ return get_unsigned_number(Settings.KEY_OUTER_GAPS_BOTTOM);
+ }
+
+ static set OUTER_GAPS_BOTTOM(val: number) {
+ set_unsigned_number(Settings.KEY_OUTER_GAPS_BOTTOM, val);
+ }
+
+ static get OUTER_GAPS_LEFT(): number {
+ return get_unsigned_number(Settings.KEY_OUTER_GAPS_LEFT);
+ }
+
+ static set OUTER_GAPS_LEFT(val: number) {
+ set_unsigned_number(Settings.KEY_OUTER_GAPS_LEFT, val);
+ }
+
+ static get OUTER_GAPS_RIGHT(): number {
+ return get_unsigned_number(Settings.KEY_OUTER_GAPS_RIGHT);
+ }
+
+ static set OUTER_GAPS_RIGHT(val: number) {
+ set_unsigned_number(Settings.KEY_OUTER_GAPS_RIGHT, val);
}
static get SPAN_MULTIPLE_TILES(): boolean {
@@ -445,12 +502,16 @@ export default class Settings {
right: number;
} {
// get the gaps settings and scale by scale factor
- const value = this.INNER_GAPS * scaleFactor;
+ const valueTop = this.INNER_GAPS_TOP * scaleFactor;
+ const valueBottom = this.INNER_GAPS_BOTTOM * scaleFactor;
+ const valueLeft = this.INNER_GAPS_LEFT * scaleFactor;
+ const valueRight = this.INNER_GAPS_RIGHT * scaleFactor;
+
return {
- top: value,
- bottom: value,
- left: value,
- right: value,
+ top: valueTop,
+ bottom: valueBottom,
+ left: valueLeft,
+ right: valueRight,
};
}
@@ -461,12 +522,16 @@ export default class Settings {
right: number;
} {
// get the gaps settings and scale by scale factor
- const value = this.OUTER_GAPS * scaleFactor;
+ const valueTop = this.OUTER_GAPS_TOP * scaleFactor;
+ const valueBottom = this.OUTER_GAPS_BOTTOM * scaleFactor;
+ const valueLeft = this.OUTER_GAPS_LEFT * scaleFactor;
+ const valueRight = this.OUTER_GAPS_RIGHT * scaleFactor;
+
return {
- top: value,
- bottom: value,
- left: value,
- right: value,
+ top: valueTop,
+ bottom: valueBottom,
+ left: valueLeft,
+ right: valueRight,
};
}