From f51ba512300da59a4be75e0e8fb12ea5d2f33a8e Mon Sep 17 00:00:00 2001 From: Jay Ta'ala Date: Sun, 22 Jan 2023 22:05:21 +1100 Subject: [PATCH 1/5] Added "tiling-edge-margin" setting to schema (with default being 0). --- schemas/gschemas.compiled | Bin 6432 -> 6496 bytes ...gnome.shell.extensions.paperwm.gschema.xml | 5 +++++ settings.js | 9 +++++---- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/schemas/gschemas.compiled b/schemas/gschemas.compiled index cece92a100b71d12a41777dcde4af42cae12d065..8dc15bdee64f42da7cca9f2fc9a6d4f563f276c0 100644 GIT binary patch delta 1493 zcmYjRU1$?o7`^SbT5Z#`lS!HyqJ7xH)OCtPAM_zAQnZN0?n=Rxu5_9ilc7l_&P*E> zZ4?y*6$)3d_yYxX%lcA_5BjhxqR1Bfe-K1m@NxG+D0Iai5ItwK(hG-k=6v^e?)Tk^ z)a%sPz_#Ox5VcVuKBLXX1lo2HaElQAv))uSE$CIETdV@V2jc6;JL#W@3$YshEwI`u zA4gNuuO2p5mT?GL74QR4`wff0i-Dy;JrG)eFm%%bG(%%&0U}^^0k})7C|ZH)zC?x0 zV=NUTVoVVgF^-S*QwIwSP%8*r2j2p`n}3(+Q%B%G1wRKq&P{%xPu&dvU+^q&CH>|$ zed;*;I_xF{{2A(ANuQeYw}IP%qgG``VSpcv2&@Bl0kO;X{-aM_55E_D40zeAgy~Z! z;ZK0C0u4X5U!zYQgMSA+1Kgk7*hQb38+{Fa3+&#oW|;ol3O-Z>n()t}z_lCZAOqB4 z_!@XMFn#x@r}U}0KsUGtc(40d9Jy zL!X)pHz6^iG2H*Db2Tp*z=vo+Km-2@w4c_3WT6hh&w+j5eD&Fr>`%>{I0-%j%-01q z>tYPd+9=ya(<$p&qx3Z~g=Tm7cHS;#b<525SbD*5vv!e#zBP1kMl9F0O-s)?zMgU1 zqU8p`DxnQ_U z=j6jh8Yic+oqq>J>M#Ma#UF%uSWY51-ob$jFRqUjJzep znxNg=C^WM}R>jmxa41Z}l1DlQ<=Y5m*`ts|9l)o7KNb&)r~&w*;3koyU!Mp*A1re| z6Wmk-umoV^Q^BW%eb_h`=WyI?XSV3b2eF?ke5sb;HtR4+2*|nr|HCz?nH6o|c3}RN zsd>v9coWc-N{88>n(5mO?g6$mTsTCZx(5C(@NdAS=pR9UYV_|EIfxQ)qGdG80n~h> zj?e>4+qE*j;~qdv$onl%(kil$Q^vt8h4~7i<`y*YZfg7|Ru(n4%=#OU&*D420B80V AV*mgE delta 1459 zcmZ8hU1$_n7`+=4H71*%-Pv_wT#b<6Y}yfteMlcxrPw00C4mwU*^09}lbylYondA+ zTZ_8(K?vxBa0~sBfY92gFB;ln9*l@TG%pe#d`JrcUj%&+79xm(wC8M%lwLS<&Yb(r z{qEd*zx#OP;>h`K6O9*W$+4cs5}?ar|yE^ z0JkCI>($v;^r@LZ1rGqXPoC=Ff>F1@*T7>y=it!QcI0oqq|sr+^nv@c`wnm*Y7R6F zo&j#g4-V6(PQbqo{vBA`5o+$pJXleLc)54NWjriZotL9>!K6MZL)8L&r1}zi)b^6qs;E#g$19NxYdq|&}KXwTGB@o{D!>3Q3 zgztmvRXlF|@==Bz)ST%w_!1E0zVPT%Gx0ol0XX|z>oR@nPWTVOF>LscE#FSlr)B~b zoBgY!W8r@PPSQ+L3(!54s`b6WF{spIf3gINH@ z<3-ofYmOP&dKg)Lh;Py4wbVA*NNnL*)(Tl!OJ!QLf;5%vfb9j&*Ip$uT)k`rC8xrf zG0e&C@{P!rpQnb?Q&tc;#djfk!HXiVEEkfaGM-d%bebo;m*1hWQm_z$6~u~Z1$ZQQ z`dMA94xH6yb!`AMAFE~~z>4B5SxKxc6s|C>Nu%mUdci0jD+OM)V!{+!n6-^icPe29 zlXopsFM5?pr=&+#*>{b|Vi20_Rkrukyx>^q8$}C2t`~&zqB5JPITh2Z=_SMeH&Q4v zs|+e0{x)z-OSioU;X%a;V)BR72l7oS-yeB?!3gw8&vo(Xq*tsqmpF!Hl`oPzU#v8$L;FHb^C+JhR!dJl=U?z2?8BdM)VWC0n2F`3gRpJNKteX8`UXG>{ sSjET-j>|T6DTgbvIovXM1z5X9sG0sLcnj{%wdqoGx?8~mvbS&SA2)Iw3IG5A diff --git a/schemas/org.gnome.shell.extensions.paperwm.gschema.xml b/schemas/org.gnome.shell.extensions.paperwm.gschema.xml index debac877f..846388640 100644 --- a/schemas/org.gnome.shell.extensions.paperwm.gschema.xml +++ b/schemas/org.gnome.shell.extensions.paperwm.gschema.xml @@ -287,6 +287,11 @@ Minimum margin from windows bottom edge + + 0 + Minimum margin from the screen edge to the left and right tiling edge + + 20 Minimum gap between windows diff --git a/settings.js b/settings.js index 1960db8c2..2a9c857b7 100644 --- a/settings.js +++ b/settings.js @@ -31,10 +31,11 @@ var KEYBINDINGS_KEY = 'org.gnome.Shell.Extensions.PaperWM.Keybindings'; var META_KEY_ABOVE_TAB = 0x2f7259c9; var prefs = {}; -['window-gap', 'vertical-margin', 'vertical-margin-bottom', 'horizontal-margin', - 'workspace-colors', 'default-background', 'animation-time', 'use-workspace-name', - 'pressure-barrier', 'default-show-top-bar', 'swipe-sensitivity', 'swipe-friction', - 'cycle-width-steps', 'cycle-height-steps', 'topbar-follow-focus', 'minimap-scale'] +['window-gap', 'vertical-margin', 'vertical-margin-bottom', 'horizontal-margin', +'tiling-edge-margin', 'workspace-colors', 'default-background', 'animation-time', +'use-workspace-name', 'pressure-barrier', 'default-show-top-bar', 'swipe-sensitivity', +'swipe-friction', 'cycle-width-steps', 'cycle-height-steps', 'topbar-follow-focus', +'minimap-scale'] .forEach((k) => setState(null, k)); prefs.__defineGetter__("minimum_margin", function() { return Math.min(15, this.horizontal_margin) }); From e2317d49fa4ad2ed07380797625de4ad3892f622 Mon Sep 17 00:00:00 2001 From: Jay Ta'ala Date: Sun, 22 Jan 2023 22:33:37 +1100 Subject: [PATCH 2/5] Updated settings.ui and prefs.js with setting value and "value-changed" signal interception. --- Settings.ui | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ prefs.js | 6 ++++++ 2 files changed, 55 insertions(+) diff --git a/Settings.ui b/Settings.ui index f345f5bfb..55ebafc01 100644 --- a/Settings.ui +++ b/Settings.ui @@ -40,6 +40,11 @@ 1 10 + + 100 + 1 + 10 + 99 1 @@ -255,6 +260,50 @@ + + + False + False + Minimum margin from screen edges to the leftmost and rightmost window edges + + + False + 12 + 12 + 6 + 6 + 32 + + + False + 1 + Tiling edge margin + 0 + + 0 + 0 + + + + + + 2 + 2 + 0 + tiling_edge_margin + 1 + 1 + if-valid + + 1 + 0 + + + + + + + False diff --git a/prefs.js b/prefs.js index 92cf4224e..c7fd239c3 100644 --- a/prefs.js +++ b/prefs.js @@ -109,6 +109,12 @@ var SettingsWidget = class SettingsWidget { this._settings.set_int('vertical-margin-bottom', bottomMargin.get_value()); }); + let tilingEdgeMargin = this.builder.get_object('tiling_edge_margin_spinner'); + tilingEdgeMargin.set_value(this._settings.get_int('tiling-edge-margin')); + tilingEdgeMargin.connect('value-changed', () => { + this._settings.set_int('tiling-edge-margin', tilingEdgeMargin.get_value()); + }); + // processing function for cycle values let cycleProcessor = (elementName, settingName, resetElementName) => { let element = this.builder.get_object(elementName); From f1dbca84762c00d9b461dab26911cf750da297bc Mon Sep 17 00:00:00 2001 From: Jay Ta'ala Date: Sun, 22 Jan 2023 22:55:56 +1100 Subject: [PATCH 3/5] Implemented edge margin code from #364. --- tiling.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tiling.js b/tiling.js index 6147f4015..30f3f16d1 100644 --- a/tiling.js +++ b/tiling.js @@ -2661,14 +2661,14 @@ function ensuredX(meta_window, space) { let workArea = space.workArea(); let min = workArea.x; let max = min + workArea.width; - if (meta_window.fullscreen) { + if (meta_window.fullscreen || meta_window.maximized_horizontally) { x = 0; } else if (index == 0 && x <= min) { // Always align the first window to the display's left edge - x = min; + x = min + prefs.tiling_edge_margin; } else if (index == space.length-1 && x + frame.width >= max) { // Always align the first window to the display's right edge - x = max - frame.width; + x = max - frame.width - prefs.tiling_edge_margin; } else if (frame.width > workArea.width*0.9 - 2*(prefs.horizontal_margin + prefs.window_gap)) { // Consider the window to be wide and center it x = min + Math.round((workArea.width - frame.width)/2); From 0352fc8b79b28eef9085e4fd035e56371ab60ec9 Mon Sep 17 00:00:00 2001 From: Jay Ta'ala Date: Mon, 23 Jan 2023 00:52:39 +1100 Subject: [PATCH 4/5] Added onEdgeTilingChanged function which moves last window to edge of screen so users can visualise edge tiling margin changes. --- settings.js | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/settings.js b/settings.js index 2a9c857b7..5727ec50e 100644 --- a/settings.js +++ b/settings.js @@ -48,8 +48,9 @@ function setVerticalMargin() { let timerId; function onWindowGapChanged() { setVerticalMargin(); - if (timerId) + if (timerId) { imports.mainloop.source_remove(timerId); + } timerId = imports.mainloop.timeout_add(500, () => { Extension.imports.tiling.spaces.mru().forEach(space => { space.layout(); @@ -58,6 +59,29 @@ function onWindowGapChanged() { }); } +/** + * Moves the last window to the edge of the screen so users + * can visualise edge tiling margin changes. + */ +function onEdgeTilingChanged() { + if (timerId) { + imports.mainloop.source_remove(timerId); + } + timerId = imports.mainloop.timeout_add(500, () => { + let ws = global.workspace_manager.get_active_workspace(); + let tiling = Extension.imports.tiling; + let space = tiling.spaces.spaceOf(ws); + let mw = space.getWindows()[space.getWindows().length - 1]; + if (mw) { + tiling.move_to(space, mw, { + x:space.workArea().width + }); + tiling.ensureViewport(mw); + } + timerId = null; + }); +} + function setState($, key) { let value = settings.get_value(key); let name = key.replace(/-/g, '_'); @@ -89,6 +113,7 @@ function init() { settings.connect('changed', setState); settings.connect('changed::vertical-margin', onWindowGapChanged); settings.connect('changed::vertical-margin-bottom', onWindowGapChanged); + settings.connect('changed::tiling-edge-margin', onEdgeTilingChanged); settings.connect('changed::window-gap', onWindowGapChanged); setVerticalMargin(); From 21ab4a97005012e084863ee838b7410beb3cee20 Mon Sep 17 00:00:00 2001 From: Jay Ta'ala Date: Mon, 23 Jan 2023 01:22:20 +1100 Subject: [PATCH 5/5] Changed back to "if meta_window.fullscreen, x=0" original behaviour. --- tiling.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tiling.js b/tiling.js index 30f3f16d1..60757e8ad 100644 --- a/tiling.js +++ b/tiling.js @@ -2661,7 +2661,7 @@ function ensuredX(meta_window, space) { let workArea = space.workArea(); let min = workArea.x; let max = min + workArea.width; - if (meta_window.fullscreen || meta_window.maximized_horizontally) { + if (meta_window.fullscreen) { x = 0; } else if (index == 0 && x <= min) { // Always align the first window to the display's left edge @@ -2691,7 +2691,6 @@ function ensuredX(meta_window, space) { return x; } - /** Make sure that `meta_window` is in view, scrolling the space if needed. */