33 Commits

Author SHA1 Message Date
Dome ef098d8986 Update modern.js 2025-09-29 09:39:12 +02:00
Dome 18d698cf7e Update interim.js 2025-09-29 09:15:19 +02:00
Dome 0aa80fda6a Update interim.js 2025-09-29 09:13:23 +02:00
Dome 7e51b5ff62 Update modern.js 2025-09-29 09:00:15 +02:00
Dome fe41ea8312 Update modern.js
fixes error "Fails on GNOME Shell 48.3 with TypeError get_session not a function" on modern.,js
2025-09-29 08:56:34 +02:00
Dome 5020250699 Update README.md 2025-09-28 23:33:32 +02:00
Dome 16688d6996 Update README.md 2025-09-28 23:17:24 +02:00
Dome 6b8ac746aa Update modern.js 2025-09-28 23:16:42 +02:00
Dome bcc5044cf8 Update prefs_modern.js 2025-09-28 23:15:56 +02:00
Dome e2df9fb038 Delete metadata_gnome45-48.json.in 2025-09-28 23:11:46 +02:00
Dome 5e23390911 Delete prefs_gnome45-48.js 2025-09-28 23:11:27 +02:00
Dome 7ba8dd1b0f Delete gnome45-48.js 2025-09-28 23:11:18 +02:00
Dome 849e2dc177 Update metadata_modern.json.in 2025-09-28 23:11:03 +02:00
Dome 982ca71642 Update modern.js 2025-09-28 23:10:43 +02:00
Dome a62c2307f9 Merge pull request #13 from ValerioCataldo/gnome49-comp
Gnome 49 compatibility
2025-09-28 20:21:56 +00:00
Dome b1c4924276 Rename metadata_modern,json.in to metadata_modern.json.in 2025-09-28 22:20:56 +02:00
Dome 73874fbd4b Rename prefs.interim.js to prefs_interim.js 2025-09-28 22:19:08 +02:00
valerio cataldo e4af31cb90 updating metadata 2025-09-27 13:26:15 +02:00
valerio cataldo b400189b4f split files 2025-09-27 13:23:26 +02:00
ValerioCataldo 568ceb7823 Merge branch 'Domoel:main' into gnome49-comp 2025-09-27 13:12:59 +02:00
valerio cataldo 138701a33d fixed for gnome49 2025-09-27 13:03:24 +02:00
Dome bbe09af89b Update interim.js 2025-08-22 12:37:08 +02:00
Dome 3331c84f31 Update Makefile 2025-08-22 12:34:32 +02:00
Dome 6591690c69 Update interim.js 2025-08-22 12:27:05 +02:00
Dome 40bea7a937 Update prefs_modern.js 2025-08-22 12:25:30 +02:00
Dome 4ea80d27bf Update README.md 2025-08-13 03:33:25 +00:00
Dome 55dd6ca691 Update Makefile 2025-08-11 22:48:20 +02:00
Dome 573ddc2702 Update prefs_modern.js 2025-08-11 22:47:21 +02:00
Dome a4ce7f2613 Update prefs.interim.js 2025-08-11 22:47:03 +02:00
Dome f2971f2c1c Update README.md 2025-08-11 20:54:31 +02:00
Dome 72fee16254 Update README.md 2025-08-11 08:30:41 +00:00
Dome d127480261 Update README.md 2025-08-11 08:24:46 +00:00
Dome 24f5dba546 Update README.md 2025-08-11 02:17:29 +02:00
7 changed files with 51 additions and 22 deletions
+1 -1
View File
@@ -12,7 +12,7 @@
############################################################################### ###############################################################################
UUID := simple-tiling@domoel UUID := simple-tiling@domoel
VERSION := 7 VERSION := 7.2
EXTDIR := $(HOME)/.local/share/gnome-shell/extensions EXTDIR := $(HOME)/.local/share/gnome-shell/extensions
COMMON_FILES := prefs.js schemas exceptions.txt locale *.css README.md LICENSE COMMON_FILES := prefs.js schemas exceptions.txt locale *.css README.md LICENSE
+5 -6
View File
@@ -16,7 +16,7 @@ A lightweight, opinionated, and automatic tiling window manager for GNOME Shell
Simple Tiling is a GNOME Shell extension created for users who want a clean, predictable, and automatic tiling layout without the complexity of larger, more feature-heavy tiling extensions. It is designed to be simple to configure and intuitive to use, focusing on a core set of essential tiling features. Simple Tiling is a GNOME Shell extension created for users who want a clean, predictable, and automatic tiling layout without the complexity of larger, more feature-heavy tiling extensions. It is designed to be simple to configure and intuitive to use, focusing on a core set of essential tiling features.
This extension was built from the ground up to be stable and performant on **GNOME Shell 3.38**. However it is now also supporting modern gnome shells up to **version 48**. This extension was built from the ground up to be stable and performant on **GNOME Shell 3.38**. However it is now also supporting modern gnome shells up to **version 49**.
## Features ## Features
@@ -37,7 +37,7 @@ This extension was built from the ground up to be stable and performant on **GNO
Please note that this extension has been developed for a very specific environment. However, with the latest updates, I have ensured that modern Gnome Shells and Wayland are also supported. Please note that this extension has been developed for a very specific environment. However, with the latest updates, I have ensured that modern Gnome Shells and Wayland are also supported.
* **GNOME Shell Version:** **3.38 - 48** * **GNOME Shell Version:** **3.38 - 49**
* **Session Type:** **X11** (Wayland is still in beta but should be fine!). * **Session Type:** **X11** (Wayland is still in beta but should be fine!).
* **Monitor Setup:** **Single monitor only.** Multi-monitor support is not yet implemented. * **Monitor Setup:** **Single monitor only.** Multi-monitor support is not yet implemented.
@@ -49,7 +49,7 @@ Use the [GNOME Shell Extensions website](https://extensions.gnome.org/extension/
#### Manual Installation #### Manual Installation
The repository includes a Makefile that produces readytoinstall ZIP packages for the two supported GNOMEShell lines (a legacy build Gnome-Shell 3.38 - 44 and a modern build for Gnome-Shell 45+). The repository includes a Makefile that produces readytoinstall ZIP packages for the three supported GnomeShell lines (a legacy build for Gnome-Shell 3.38, an interim build for Gnome-Shell 40 - 44 and a modern build for Gnome-Shell 45+).
1. **Clone the Source** 1. **Clone the Source**
```bash ```bash
@@ -62,10 +62,10 @@ The repository includes a Makefile that produces readytoinstall ZIP packag
Open the Terminal within the Simple-Tiling directory and run Open the Terminal within the Simple-Tiling directory and run
```bash ```bash
make install-legacy # Installs Legacy Extension (Gnome-Shell 3.38) make install-legacy # Installs Legacy Extension (Gnome-Shell 3.38)
make install-interim # Installs Modern Extension (Gnome-Shell 40 - 44) make install-interim # Installs Interim Extension (Gnome-Shell 40 - 44)
make install-modern # Installs Modern Extension (Gnome-Shell 45+) make install-modern # Installs Modern Extension (Gnome-Shell 45+)
``` ```
**Note:** This command will directly install the extension in the choosen variant (legacy or modern). If you want to manually create and upload the extension to your gnome extensions directory `(~/.local/share/gnome-shell/extensions)` you can just run `make build` to create both versions as .zip or `make build-legacy` or `make build-modern` to create them seperately as .zip. To enable them you need to unzip these archives and put them into your extensions directory. **Note:** This command will directly install the extension in the choosen variant (legacy, interim or modern). If you want to manually create and upload the extension to your gnome extensions directory `(~/.local/share/gnome-shell/extensions)` you can just run `make build` to create all versions as .zip or `make build-legacy`, `make build-interim` or `make build-modern` to create them seperately as .zip. To enable them you need to unzip these archives and put them into your extensions directory.
4. **Reload the shell** 4. **Reload the shell**
```bash ```bash
@@ -122,4 +122,3 @@ This extension was built to solve a specific need. However, future enhancements
## License ## License
This project is licensed under the MIT License - see the `LICENSE` file for details. This project is licensed under the MIT License - see the `LICENSE` file for details.
+8 -6
View File
@@ -5,12 +5,13 @@
// ── GLOBAL IMPORTS ──────────────────────────────────────── // ── GLOBAL IMPORTS ────────────────────────────────────────
import { Extension } from "resource:///org/gnome/shell/extensions/js/extensions/extension.js"; import Meta from 'gi://Meta';
import * as Main from "resource:///org/gnome/shell/ui/main.js"; import Shell from 'gi://Shell';
import Meta from "gi://Meta"; import Gio from 'gi://Gio';
import Shell from "gi://Shell"; import GLib from 'gi://GLib';
import Gio from "gi://Gio"; import Clutter from 'gi://Clutter';
import GLib from "gi://GLib"; import { Extension } from 'resource:///org/gnome/shell/extensions/js/extensions/extension.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
// ── CONST ──────────────────────────────────────────── // ── CONST ────────────────────────────────────────────
const WM_SCHEMA = 'org.gnome.desktop.wm.keybindings'; const WM_SCHEMA = 'org.gnome.desktop.wm.keybindings';
@@ -104,6 +105,7 @@ class InteractionHandler {
key, key,
this._settings, this._settings,
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.ActionMode.NORMAL,
(..._args) => handler(this) (..._args) => handler(this)
); );
} }
+2 -1
View File
@@ -7,7 +7,8 @@
"45", "45",
"46", "46",
"47", "47",
"48" "48",
"49"
], ],
"settings-schema": "org.gnome.shell.extensions.simple-tiling.domoel", "settings-schema": "org.gnome.shell.extensions.simple-tiling.domoel",
"preferences_ui": "prefs.js", "preferences_ui": "prefs.js",
+33 -6
View File
@@ -1,17 +1,18 @@
///////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////
// SimpleTiling  MODERN (GNOME Shell 45+) // // SimpleTiling  MODERN (GNOME Shell 45+) //
// © 2025domoel  MIT // // © 2025domoel  MIT //
///////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////
// ── GLOBAL IMPORTS ──────────────────────────────────────── // ── GLOBAL IMPORTS ────────────────────────────────────────
import { Extension } from 'resource:///org/gnome/shell/extensions/extension.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import Meta from 'gi://Meta'; import Meta from 'gi://Meta';
import Shell from 'gi://Shell'; import Shell from 'gi://Shell';
import Gio from 'gi://Gio'; import Gio from 'gi://Gio';
import GLib from 'gi://GLib'; import GLib from 'gi://GLib';
import Clutter from 'gi://Clutter'; import Clutter from 'gi://Clutter';
import { Extension } from 'resource:///org/gnome/shell/extensions/extension.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as Config from 'resource:///org/gnome/shell/misc/config.js';
// ── CONST ──────────────────────────────────────────── // ── CONST ────────────────────────────────────────────
const WM_SCHEMA = 'org.gnome.desktop.wm.keybindings'; const WM_SCHEMA = 'org.gnome.desktop.wm.keybindings';
@@ -31,6 +32,17 @@ const KEYBINDINGS = {
'focus-down': (self) => self._focusInDirection('down'), 'focus-down': (self) => self._focusInDirection('down'),
}; };
// ── VERSION CHECK ────────────────────────────────────────────
let shellVersion;
if (Shell.get_session) {
shellVersion = Shell.get_session().get_shell_version();
} else if (Config.PACKAGE_VERSION) {
shellVersion = Config.PACKAGE_VERSION;
} else {
shellVersion = global.shell_version;
}
const SHELL_MAJOR = parseInt(shellVersion.split('.')[0]);
// ── HELPERFUNCTION ──────────────────────────────────────── // ── HELPERFUNCTION ────────────────────────────────────────
function getPointerXY() { function getPointerXY() {
if (global.get_pointer) { if (global.get_pointer) {
@@ -347,8 +359,15 @@ class Tiler {
if (index > -1) this._centerTimeoutIds.splice(index, 1); if (index > -1) this._centerTimeoutIds.splice(index, 1);
if (!win || !win.get_display()) return GLib.SOURCE_REMOVE; if (!win || !win.get_display()) return GLib.SOURCE_REMOVE;
if (win.get_maximized()) if (SHELL_MAJOR < 49) {
win.unmaximize(Meta.MaximizeFlags.BOTH); if (win.get_maximized()) {
win.unmaximize(Meta.MaximizeFlags.BOTH);
}
} else {
if (win.is_maximized()) {
win.unmaximize();
}
}
const monitorIndex = win.get_monitor(); const monitorIndex = win.get_monitor();
const workspace = this._workspaceManager.get_active_workspace(); const workspace = this._workspaceManager.get_active_workspace();
@@ -558,7 +577,15 @@ class Tiler {
height: workArea.height - 2 * this._outerGapVertical, height: workArea.height - 2 * this._outerGapVertical,
}; };
windowsToTile.forEach((win) => { windowsToTile.forEach((win) => {
if (win.get_maximized()) win.unmaximize(Meta.MaximizeFlags.BOTH); if (SHELL_MAJOR < 49) {
if (win.get_maximized()) {
win.unmaximize(Meta.MaximizeFlags.BOTH);
}
} else {
if (win.is_maximized()) {
win.unmaximize();
}
}
}); });
if (windowsToTile.length === 1) { if (windowsToTile.length === 1) {
windowsToTile[0].move_resize_frame( windowsToTile[0].move_resize_frame(
+1 -1
View File
@@ -5,11 +5,11 @@
'use strict'; 'use strict';
import { ExtensionPreferences } from 'resource:///org/gnome/shell/extensions/js/extensions/prefs.js';
import Adw from 'gi://Adw'; import Adw from 'gi://Adw';
import Gio from 'gi://Gio'; import Gio from 'gi://Gio';
import Gtk from 'gi://Gtk'; import Gtk from 'gi://Gtk';
import GLib from 'gi://GLib'; import GLib from 'gi://GLib';
import { ExtensionPreferences, gettext as _ } from 'resource:///org/gnome/shell/extensions/js/extensions/prefs.js';
export default class SimpleTilingPrefs extends ExtensionPreferences { export default class SimpleTilingPrefs extends ExtensionPreferences {
fillPreferencesWindow(window) { fillPreferencesWindow(window) {
+1 -1
View File
@@ -4,11 +4,11 @@
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
// ── GLOBAL IMPORTS ──────────────────────────────────────── // ── GLOBAL IMPORTS ────────────────────────────────────────
import { ExtensionPreferences } from 'resource:///org/gnome/shell/extensions/prefs.js';
import Adw from 'gi://Adw'; import Adw from 'gi://Adw';
import Gio from 'gi://Gio'; import Gio from 'gi://Gio';
import Gtk from 'gi://Gtk'; import Gtk from 'gi://Gtk';
import GLib from 'gi://GLib'; import GLib from 'gi://GLib';
import { ExtensionPreferences, gettext as _ } from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
export default class SimpleTilingPrefs extends ExtensionPreferences { export default class SimpleTilingPrefs extends ExtensionPreferences {
fillPreferencesWindow(window) { fillPreferencesWindow(window) {