Skip to content

Commit

Permalink
Add support for Gnome 45
Browse files Browse the repository at this point in the history
  • Loading branch information
Lucas Vater committed Jan 18, 2024
1 parent bf5dd4b commit c0d3da2
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 48 deletions.
94 changes: 47 additions & 47 deletions extension.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,105 +16,106 @@
* SPDX-License-Identifier: GPL-2.0-or-later
*/

const { Meta, Shell } = imports.gi;
const Main = imports.ui.main;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const PutWindowUtils = Me.imports.putWindow.utils;
import Meta from 'gi://Meta';
import Shell from 'gi://Shell';

class Extension {
constructor() {
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';

import * as PutWindowUtils from './putWindow/utils.js'

export default class QuarterWindowExtension extends Extension {
constructor(metadata) {
super(metadata);
this.corners = ["ne", "nw", "se", "sw"];
this.directions = ["w", "s", "n", "e"];
}

moveWindow(location) {
tileWindow(location) {
global.get_window_actors().every((w) => {
if (w.meta_window.has_focus()) {
var monitorGeometry = Meta.is_wayland_compositor()
? global.workspace_manager
.get_active_workspace()
.get_work_area_for_monitor(w.meta_window.get_monitor().index)
: global.display.get_monitor_geometry(w.meta_window.get_monitor());
var monitorUpperLeftX = monitorGeometry.x;
var monitorUpperLeftY = monitorGeometry.y;
var monitorHalfWidth = Math.floor(monitorGeometry.width / 2);
var monitorHalfHeight = Math.floor(monitorGeometry.height / 2);
var monitorIdx = w.meta_window.get_monitor();
var workArea = Main.layoutManager.getWorkAreaForMonitor(monitorIdx);

var monitorUpperLeftX = workArea.x;
var monitorUpperLeftY = workArea.y;
var monitorHalfWidth = Math.floor(workArea.width / 2);
var monitorHalfHeight = Math.floor(workArea.height / 2);

if (w.meta_window.get_maximized()) {
w.meta_window.unmaximize(3); // META_MAXIMIZE_BOTH
}
switch (location) {
case "ne":
w.meta_window.move_resize_frame(
0,
this.moveAndResizeWindow(
w.meta_window,
monitorUpperLeftX + monitorHalfWidth,
monitorUpperLeftY,
monitorHalfWidth,
monitorHalfHeight,
);
break;
case "nw":
w.meta_window.move_resize_frame(
0,
this.moveAndResizeWindow(
w.meta_window,
monitorUpperLeftX,
monitorUpperLeftY,
monitorHalfWidth,
monitorHalfHeight,
);
break;
case "se":
w.meta_window.move_resize_frame(
0,
this.moveAndResizeWindow(
w.meta_window,
monitorUpperLeftX + monitorHalfWidth,
monitorUpperLeftY + monitorHalfHeight,
monitorHalfWidth,
monitorHalfHeight,
);
break;
case "sw":
w.meta_window.move_resize_frame(
0,
this.moveAndResizeWindow(
w.meta_window,
monitorUpperLeftX,
monitorUpperLeftY + monitorHalfHeight,
monitorHalfWidth,
monitorHalfHeight,
);
break;
case "n":
w.meta_window.move_resize_frame(
0,
this.moveAndResizeWindow(
w.meta_window,
monitorUpperLeftX,
monitorUpperLeftY,
monitorGeometry.width,
workArea.width,
monitorHalfHeight,
);
break;
case "s":
w.meta_window.move_resize_frame(
0,
this.moveAndResizeWindow(
w.meta_window,
monitorUpperLeftX,
monitorUpperLeftY + monitorHalfHeight,
monitorGeometry.width,
workArea.width,
monitorHalfHeight,
);
break;
case "w":
w.meta_window.move_resize_frame(
0,
this.moveAndResizeWindow(
w.meta_window,
monitorUpperLeftX,
monitorUpperLeftY,
monitorHalfWidth,
monitorGeometry.height,
workArea.height,
);
break;
case "e":
w.meta_window.move_resize_frame(
0,
this.moveAndResizeWindow(
w.meta_window,
monitorUpperLeftX + monitorHalfWidth,
monitorUpperLeftY,
monitorHalfWidth,
monitorGeometry.height,
workArea.height,
);
break;
}
Expand Down Expand Up @@ -159,10 +160,13 @@ class Extension {
}
}

moveAndResizeWindow(window, x, y, width, height) {
window.move_frame(true, x, y);
window.move_resize_frame(true, x, y, width, height);
}

enable() {
let settings = ExtensionUtils.getSettings(
"org.gnome.shell.extensions.com-troyready-quarterwindows",
);
let settings = this.getSettings();
let mode = Shell.ActionMode.NORMAL;
let flag = Meta.KeyBindingFlags.NONE;

Expand All @@ -173,7 +177,7 @@ class Extension {
flag,
mode,
() => {
this.moveWindow(this.corners[i]);
this.tileWindow(this.corners[i]);
},
);
}
Expand All @@ -194,7 +198,7 @@ class Extension {
flag,
mode,
() => {
this.moveWindow(this.directions[i]);
this.tileWindow(this.directions[i]);
},
);
}
Expand All @@ -210,8 +214,4 @@ class Extension {
Main.wm.removeKeybinding("put-to-half-" + this.directions[i]);
}
}
}

function init() {
return new Extension();
}
}
4 changes: 3 additions & 1 deletion metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@
"41",
"42",
"43",
"44"
"44",
"45"
],
"url": "https://github.com/troyready/quarterwindows",
"uuid": "[email protected]",
"settings-schema": "org.gnome.shell.extensions.com-troyready-quarterwindows",
"version": 9
}

0 comments on commit c0d3da2

Please sign in to comment.