From 7080c056dd65f7bd053356de675aaadac29b432f Mon Sep 17 00:00:00 2001 From: Hoffmano Date: Sun, 10 Nov 2024 13:02:26 -0300 Subject: [PATCH] feat: auto width --- keybindings.js | 4 ++ prefsKeybinding.js | 1 + schemas/gschemas.compiled | Bin 6872 -> 6928 bytes ...gnome.shell.extensions.paperwm.gschema.xml | 5 +++ tiling.js | 38 ++++++++++++++++++ 5 files changed, 48 insertions(+) diff --git a/keybindings.js b/keybindings.js index e5f9de721..499881b22 100644 --- a/keybindings.js +++ b/keybindings.js @@ -164,6 +164,10 @@ function init() { dynamic_function_ref("switchToNextFocusMode", Tiling)); + registerPaperAction("switch-columns-layout", + dynamic_function_ref("switchColumnsLayout", + Tiling)); + registerPaperAction("develop-set-globals", dynamic_function_ref("setDevGlobals", Utils)); diff --git a/prefsKeybinding.js b/prefsKeybinding.js index 55ad66f3b..a668157bf 100644 --- a/prefsKeybinding.js +++ b/prefsKeybinding.js @@ -38,6 +38,7 @@ const actions = { 'live-alt-tab', 'live-alt-tab-backward', 'switch-focus-mode', + 'switch-columns-layout', 'move-left', 'move-right', 'move-up', diff --git a/schemas/gschemas.compiled b/schemas/gschemas.compiled index 1a76f213ca90e527cc765816b5d3c2ee1dd77326..9af901fb04e6270992ec2be03da91eb6758d8b55 100644 GIT binary patch literal 6928 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 literal 6872 zcmb7J3y>UD6@7_W*nD@%A24x~P1u=`-kt1cb{CWEC)v0uBE*D9RLX46Oz%urdb-E% zp8ZgOfCf_vn1Toq#R?h-BB=x|3oJlG_yj3FDKxTJU~NGu0ZWNyt3Z&7=e&MBpACxX zsgW$-a*<^UJmUAwun=4WEC!aAAPRZe z$KYbY1^DW3=Z5cpQ$wR<1+c^aOEpX%UG3h5|j&}t7 z4lv`6qsM7a`CRDVr*4W6y7|#35zcZw0%+kpughX-}E`?gZZn{OHK$JE*73`9B0c3cPXjx_7Ck%s3nYzXdE^ zH5Q?sGRJ!od>WX%YVNnGr%ZpUry+NMaE+nNH6{ig1K#+{m%d7S%JXQCMAv{PU%6*3 z^_1Cf8+ZdSX4P$@p7Ipvw}J~J z&oS^Dz}5qSJ!RUT1W%ZOyr>(L@kW{bR)enqX8$ILAIfZ}59|TgRQybii}DQUcY=Qm zZ1`oxP3)I4$9ow32VnABRWc5x4E-o{Cjld|{!Q9bW}H`I5uC?$`=%etaZ#q95%48I z_XTyY(w;K?=>>lUIDGAOQ@O@du7JJ|d^_;m@mEjKp7Mpz9|CiKa1GDA+R!qZX(#bm ztlXT(3ch;f=8W0zug+O{57Qjcy=c}MFf_~PS36W_x5js^)k!Ct)yKVBu9IdP`1Y*2 zcG;dcX!^;FmUV2?cU;Xi(-}4$wj1=nNor@y7kquYp$%eFaR!TaK9Zl_B`wD*d0J?v zTTgD^oYRvAf|Pcu*M29N_t1CBDDN+cy{0hOGS|xOR?6`N-d#}IaQKd%z;vBCpIdUu z56i@C>XxthdV*%*xUazN)H7WuG#A>b?-TfeR_Dogd?%f@49!crI_I`9S;h8yyd-vL zL~6-oU_xze&~dkWa-yU=VLu!7w6Se149e#(9A?6>*apArTJJE456Js9y_6kc{%19Rc4f@TRHfA$ePm+f18?KgdT=Qzj_I1k| zE}3UFk7rI{`FM&`7OXG9SO(3Mp9u_=pRQ^zp}YN>llMcvoYL`u4%hyY}2B_!qlLUDkZY`$kVIxz|dvQv_+?1@gmd?lF z^By}@y55JoVBvW%elguS(M( zUvfO!Y3il^yk%jVF^uu+rzh)%{_=GUtDWi}E8G<6n`$Sk51CmOAYsZVyMC1yYEp{} zwR$eMin4iCQ>UH>TXQhZ`kd}(8gOWBkcZX=kB8O<#Ev?&Hpr0;W*fE_53LQT?#|5p z;_?}eM}3RpGB96`?vqc*nC=L3IJ}srJllt0UNcvj&&*%uO9H{(n(VnKgeW zxEH9nZPFy_DbIzz4{QMMt=?i$Pnl1Pbw0zB}GRDycSJoEN~Hv(I;4|&v6 z=KS=5^T1=%dzVp9ncr(C_!eMcnf~;G4WLllYDvd(T)D*8 zHmzvxiLVj0E%BDd<~C8=+}sjxY818ccvD*=xVgPK7LSYCw#In8xfS=_@%FYR+{aqi zwl?FvwXH2JEx2!MjyJ8qdyOsKZQ$;v_7(AVQQO+m9_#ACeOGr&S2ygMy5g%*usx+@?j#HGWzvA4jn9!)2@@p=7X2K zX!*iNzXMP!;TL#*EU@FKHA}$&o!HCdAK*QF5{ZcJ%f7yYcJMi+#9%8umoDr7-0e&#{YNxy3* z`4WDwlh^M$?)pBjU*UVA{XBm&2))y69Wf!>Eve#>K}HTM##7w~%s+i?q$BWewBym^ z-pe08^JdV_I6t(6~9o+I)kCKy< za`b=tiPsnpycjc#qqF&bFpn^9!i#M&=0dQ|56+vooA>OhW_yn+H z-gRl(Q)VsjKA8W{NSUsYM2ZgMS#V(;EDdy}4fBt+7{|wpImWr;_~niQ#?*LG8A0+U zxJTp~L%}`wbH>3LpOx>O%|{55h>b=T~asbHo49aBg;izXybM5@pWKUhvD5 eRh>bZbN_qr2w*W!8DD3)E*DbCWBJTBh4>HR3Q73@ diff --git a/schemas/org.gnome.shell.extensions.paperwm.gschema.xml b/schemas/org.gnome.shell.extensions.paperwm.gschema.xml index 5fc7d7caa..87fc8cf64 100644 --- a/schemas/org.gnome.shell.extensions.paperwm.gschema.xml +++ b/schemas/org.gnome.shell.extensions.paperwm.gschema.xml @@ -114,6 +114,11 @@ Switch between Window Focus Modes (e.g. default, center) + + o']]]> + Switch columns layout + + period']]]> Switch to the next window diff --git a/tiling.js b/tiling.js index d4ee4c65f..e780e8f8e 100644 --- a/tiling.js +++ b/tiling.js @@ -46,6 +46,9 @@ var Me = Extension.imports.tiling; var prefs = Settings.prefs; +var columns = 1; +var autoWidth = true; + var backgroundSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.background' }) @@ -147,6 +150,7 @@ var Space = class Space extends Array { // default focusMode (can be overriden by saved user pref in Space.init method) this.focusMode = FocusModes.DEFAULT; + this.focusModeIcon = new TopBar.FocusIcon({ name: 'panel', style_class: 'space-focus-mode-icon', @@ -158,6 +162,9 @@ var Space = class Space extends Array { this.showFocusModeIcon(); this.unfocusXPosition = null; // init + this.columns = columns; + this.autoWidth = autoWidth; + let clip = new Clutter.Actor({name: "clip"}); this.clip = clip; let actor = new Clutter.Actor({name: "space-actor"}); @@ -265,6 +272,7 @@ var Space = class Space extends Array { this.getWindows().forEach(w => { animateWindow(w); + if (this.autoWidth) setAutoWidth(w) }); let selected = this.selectedWindow; @@ -705,6 +713,7 @@ var Space = class Space extends Array { this.targetX = workArea.x + Math.round((workArea.width - this.cloneContainer.width)/2); } this.emit('window-added', metaWindow, index, row); + if (autoWidth) setAutoWidth(metaWindow) return true; } @@ -882,6 +891,7 @@ var Space = class Space extends Array { let metaWindow = space.getWindow(index, row); ensureViewport(metaWindow, space); + if (autoWidth) setAutoWidth(metaWindow) } /** @@ -3365,6 +3375,25 @@ function toggleMaximizeHorizontally(metaWindow) { } } +function setAutoWidth(metaWindow) { + metaWindow = metaWindow || display.focus_window; + + if (metaWindow.get_maximized() === Meta.MaximizeFlags.BOTH) { + metaWindow.unmaximize(Meta.MaximizeFlags.BOTH); + metaWindow.unmaximizedRect = null; + return; + } + + let space = spaces.spaceOfWindow(metaWindow); + let workArea = space.workArea(); + let frame = metaWindow.get_frame_rect(); + let reqWidth = (workArea.width - prefs.minimum_margin) / space.columns - prefs.minimum_margin; + + let x = workArea.x + space.monitor.x + prefs.minimum_margin; + metaWindow.unmaximizedRect = frame; + metaWindow.move_resize_frame(true, x, frame.y, reqWidth, frame.height); +} + function resizeHInc(metaWindow) { let frame = metaWindow.get_frame_rect(); let monitor = Main.layoutManager.monitors[metaWindow.get_monitor()]; @@ -3654,6 +3683,15 @@ function switchToNextFocusMode(space) { setFocusMode(nextMode, space); } +function switchColumnsLayout(space) { + space = space ?? spaces.getActiveSpace(); + space.columns = space.columns == 1 ? 2 : 1 + + space.getWindows().forEach(w => { + setAutoWidth(w) + }); +} + /** * "Fit" values such that they sum to `targetSum` */