diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/convenience.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/convenience.js
index d3419dc..fca4c1e 100644
--- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/convenience.js
+++ b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/convenience.js
@@ -54,7 +54,7 @@ export function TalkativeLog(msg) {
* @returns {string} the version
*/
export function getFullVersion() {
- return '1.11.0'; // FULL_VERSION
+ return '1.11.1'; // FULL_VERSION
}
/**
diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/extension.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/extension.js
index c151057..32a7c7c 100644
--- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/extension.js
+++ b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/extension.js
@@ -65,7 +65,8 @@ const EasyScreenCastIndicator = GObject.registerClass({
);
this.CtrlAudio = new UtilAudio.MixerAudio();
- this.CtrlWebcam = new UtilWebcam.HelperWebcam(_('Unspecified webcam'));
+ // CtrlWebcam is initialized lazy to avoid problems like #368
+ this.CtrlWebcam = null;
this.CtrlNotify = new UtilNotify.NotifyManager();
this.CtrlExe = new UtilExeCmd.ExecuteStuff(this);
@@ -587,7 +588,8 @@ const EasyScreenCastIndicator = GObject.registerClass({
);
// start monitoring inputvideo
- this.CtrlWebcam.startMonitor();
+ if (this.CtrlWebcam !== null)
+ this.CtrlWebcam.startMonitor();
// add indicator
this.add_child(this.indicatorBox);
@@ -600,7 +602,8 @@ const EasyScreenCastIndicator = GObject.registerClass({
// remove key binding
this._removeKeybindings();
// stop monitoring inputvideo
- this.CtrlWebcam.stopMonitor();
+ if (this.CtrlWebcam !== null)
+ this.CtrlWebcam.stopMonitor();
// unregister mixer control
this.CtrlAudio.destroy();
diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/metadata.json b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/metadata.json
index 0243b4a..c40875d 100644
--- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/metadata.json
+++ b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/metadata.json
@@ -11,5 +11,5 @@
],
"url": "https://github.com/EasyScreenCast/EasyScreenCast",
"uuid": "EasyScreenCast@iacopodeenosee.gmail.com",
- "version": 52
+ "version": 53
}
\ No newline at end of file
diff --git a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilwebcam.js b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilwebcam.js
index 2f43a36..bdff6ff 100644
--- a/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilwebcam.js
+++ b/gnome/.local/share/gnome-shell/extensions/EasyScreenCast@iacopodeenosee.gmail.com/utilwebcam.js
@@ -30,7 +30,12 @@ export const HelperWebcam = GObject.registerClass({
this._unspecified_webcam_text = unspecifiedWebcamText;
Lib.TalkativeLog('-@-init webcam');
- Gst.init(null);
+ var [result, _] = Gst.init_check(null);
+ Lib.TalkativeLog(`-@-gstreamer init result: ${result}`);
+ if (!result) {
+ Lib.TalkativeLog('-@-gstreamer init failed');
+ throw new Error('GStreamer init failed');
+ }
// get gstreamer lib version
var [M, m, micro, nano] = Gst.version();
diff --git a/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/appIndicator.js b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/appIndicator.js
index 944afcc..8466671 100644
--- a/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/appIndicator.js
+++ b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/appIndicator.js
@@ -194,7 +194,7 @@ class AppIndicatorProxy extends DBusProxy {
});
} catch (e) {
if (!AppIndicatorProxy.OPTIONAL_PROPERTIES.includes(p) ||
- !e.matches(Gio.DBusError, Gio.DBusError.UNKNOWN_PROPERTY))
+ !(e instanceof Gio.DBusError))
logError(e);
}
}));
@@ -315,7 +315,8 @@ class AppIndicatorProxy extends DBusProxy {
Util.Logger.debug(`Error when calling 'Get(${propertyName})' ` +
`in ${this.gName}, ${this.gObjectPath}, ` +
`org.freedesktop.DBus.Properties, ${this.gInterfaceName} ` +
- `while refreshing property ${propertyName}: ${e}`);
+ `while refreshing property ${propertyName}: ${e}\n` +
+ `${e.stack}`);
this.set_cached_property(propertyName, null);
this._cancellables.delete(propertyName);
delete this._changedProperties[propertyName];
@@ -1324,8 +1325,13 @@ class AppIndicatorsIconActor extends St.Icon {
preferredHeight: height,
});
- imageContent.set_bytes(pixmapVariant.get_data_as_bytes(), PIXMAPS_FORMAT,
- width, height, rowStride);
+ // Remove this dynamic check when we depend on GNOME 48.
+ const coglContext = [];
+ const mutterBackend = global.stage?.context?.get_backend?.();
+ if (imageContent.set_bytes.length === 6 && mutterBackend?.get_cogl_context)
+ coglContext.push(mutterBackend.get_cogl_context());
+ imageContent.set_bytes(...coglContext, pixmapVariant.get_data_as_bytes(),
+ PIXMAPS_FORMAT, width, height, rowStride);
if (iconType !== SNIconType.OVERLAY && !this._indicator.hasOverlayIcon) {
const scaledSize = iconSize * scaleFactor;
diff --git a/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/metadata.json b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/metadata.json
index bbb76d1..898dc6c 100644
--- a/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/metadata.json
+++ b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/metadata.json
@@ -12,5 +12,5 @@
],
"url": "https://github.com/ubuntu/gnome-shell-extension-appindicator",
"uuid": "appindicatorsupport@rgcjonas.gmail.com",
- "version": 59
-}
+ "version": 60
+}
\ No newline at end of file
diff --git a/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/prefs.js b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/prefs.js
index 625bc10..360b7f8 100644
--- a/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/prefs.js
+++ b/gnome/.local/share/gnome-shell/extensions/appindicatorsupport@rgcjonas.gmail.com/prefs.js
@@ -2,325 +2,43 @@
/* exported init, buildPrefsWidget */
-import GLib from 'gi://GLib';
-import GObject from 'gi://GObject';
-import Gio from 'gi://Gio';
-import Gtk from 'gi://Gtk';
+import Gtk from 'gi://Gtk'; // will be removed
+import Gdk from 'gi://Gdk';
+import * as GeneralPreferences from './preferences/generalPage.js';
+import * as CustomIconPreferences from './preferences/customIconPage.js';
import {
ExtensionPreferences,
gettext as _
} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
-const AppIndicatorPreferences = GObject.registerClass(
-class AppIndicatorPreferences extends Gtk.Box {
- _init(extension) {
- super._init({orientation: Gtk.Orientation.VERTICAL, spacing: 30});
- this._settings = extension.getSettings();
-
- let label = null;
- let widget = null;
-
- this.preferences_vbox = new Gtk.Box({
- orientation: Gtk.Orientation.VERTICAL,
- spacing: 8,
- margin_start: 30,
- margin_end: 30,
- margin_top: 30,
- margin_bottom: 30,
- });
- this.custom_icons_vbox = new Gtk.Box({
- orientation: Gtk.Orientation.HORIZONTAL,
- spacing: 10,
- margin_start: 10,
- margin_end: 10,
- margin_top: 10,
- margin_bottom: 10,
- });
-
- label = new Gtk.Label({
- label: _('Enable Legacy Tray Icons support'),
- hexpand: true,
- halign: Gtk.Align.START,
- });
- widget = new Gtk.Switch({halign: Gtk.Align.END});
-
- this._settings.bind('legacy-tray-enabled', widget, 'active',
- Gio.SettingsBindFlags.DEFAULT);
-
- this.legacy_tray_hbox = new Gtk.Box({
- orientation: Gtk.Orientation.HORIZONTAL,
- spacing: 10,
- margin_start: 10,
- margin_end: 10,
- margin_top: 10,
- margin_bottom: 10,
- });
-
- this.legacy_tray_hbox.append(label);
- this.legacy_tray_hbox.append(widget);
-
- // Icon opacity
- this.opacity_hbox = new Gtk.Box({
- orientation: Gtk.Orientation.HORIZONTAL,
- spacing: 10,
- margin_start: 10,
- margin_end: 10,
- margin_top: 10,
- margin_bottom: 10,
- });
- label = new Gtk.Label({
- label: _('Opacity (min: 0, max: 255)'),
- hexpand: true,
- halign: Gtk.Align.START,
- });
-
- widget = new Gtk.SpinButton({halign: Gtk.Align.END});
- widget.set_sensitive(true);
- widget.set_range(0, 255);
- widget.set_value(this._settings.get_int('icon-opacity'));
- widget.set_increments(1, 2);
- widget.connect('value-changed', w => {
- this._settings.set_int('icon-opacity', w.get_value_as_int());
- });
- this.opacity_hbox.append(label);
- this.opacity_hbox.append(widget);
-
- // Icon saturation
- this.saturation_hbox = new Gtk.Box({
- orientation: Gtk.Orientation.HORIZONTAL,
- spacing: 10,
- margin_start: 10,
- margin_end: 10,
- margin_top: 10,
- margin_bottom: 10,
- });
- label = new Gtk.Label({
- label: _('Desaturation (min: 0.0, max: 1.0)'),
- hexpand: true,
- halign: Gtk.Align.START,
- });
- widget = new Gtk.SpinButton({halign: Gtk.Align.END, digits: 1});
- widget.set_sensitive(true);
- widget.set_range(0.0, 1.0);
- widget.set_value(this._settings.get_double('icon-saturation'));
- widget.set_increments(0.1, 0.2);
- widget.connect('value-changed', w => {
- this._settings.set_double('icon-saturation', w.get_value());
- });
- this.saturation_hbox.append(label);
- this.saturation_hbox.append(widget);
-
- // Icon brightness
- this.brightness_hbox = new Gtk.Box({
- orientation: Gtk.Orientation.HORIZONTAL,
- spacing: 10,
- margin_start: 10,
- margin_end: 10,
- margin_top: 10,
- margin_bottom: 10,
- });
- label = new Gtk.Label({
- label: _('Brightness (min: -1.0, max: 1.0)'),
- hexpand: true,
- halign: Gtk.Align.START,
- });
- widget = new Gtk.SpinButton({halign: Gtk.Align.END, digits: 1});
- widget.set_sensitive(true);
- widget.set_range(-1.0, 1.0);
- widget.set_value(this._settings.get_double('icon-brightness'));
- widget.set_increments(0.1, 0.2);
- widget.connect('value-changed', w => {
- this._settings.set_double('icon-brightness', w.get_value());
- });
- this.brightness_hbox.append(label);
- this.brightness_hbox.append(widget);
-
- // Icon contrast
- this.contrast_hbox = new Gtk.Box({
- orientation: Gtk.Orientation.HORIZONTAL,
- spacing: 10,
- margin_start: 10,
- margin_end: 10,
- margin_top: 10,
- margin_bottom: 10,
- });
- label = new Gtk.Label({
- label: _('Contrast (min: -1.0, max: 1.0)'),
- hexpand: true,
- halign: Gtk.Align.START,
- });
- widget = new Gtk.SpinButton({halign: Gtk.Align.END, digits: 1});
- widget.set_sensitive(true);
- widget.set_range(-1.0, 1.0);
- widget.set_value(this._settings.get_double('icon-contrast'));
- widget.set_increments(0.1, 0.2);
- widget.connect('value-changed', w => {
- this._settings.set_double('icon-contrast', w.get_value());
- });
- this.contrast_hbox.append(label);
- this.contrast_hbox.append(widget);
-
- // Icon size
- this.icon_size_hbox = new Gtk.Box({
- orientation: Gtk.Orientation.HORIZONTAL,
- spacing: 10,
- margin_start: 10,
- margin_end: 10,
- margin_top: 10,
- margin_bottom: 10,
- });
- label = new Gtk.Label({
- label: _('Icon size (min: 0, max: 96)'),
- hexpand: true,
- halign: Gtk.Align.START,
- });
- widget = new Gtk.SpinButton({halign: Gtk.Align.END});
- widget.set_sensitive(true);
- widget.set_range(0, 96);
- widget.set_value(this._settings.get_int('icon-size'));
- widget.set_increments(1, 2);
- widget.connect('value-changed', w => {
- this._settings.set_int('icon-size', w.get_value_as_int());
- });
- this.icon_size_hbox.append(label);
- this.icon_size_hbox.append(widget);
-
- // Tray position in panel
- this.tray_position_hbox = new Gtk.Box({
- orientation: Gtk.Orientation.HORIZONTAL,
- spacing: 10,
- margin_start: 10,
- margin_end: 10,
- margin_top: 10,
- margin_bottom: 10,
- });
- label = new Gtk.Label({
- label: _('Tray horizontal alignment'),
- hexpand: true,
- halign: Gtk.Align.START,
- });
- widget = new Gtk.ComboBoxText();
- widget.append('center', _('Center'));
- widget.append('left', _('Left'));
- widget.append('right', _('Right'));
- this._settings.bind('tray-pos', widget, 'active-id',
- Gio.SettingsBindFlags.DEFAULT);
- this.tray_position_hbox.append(label);
- this.tray_position_hbox.append(widget);
-
- this.preferences_vbox.append(this.legacy_tray_hbox);
- this.preferences_vbox.append(this.opacity_hbox);
- this.preferences_vbox.append(this.saturation_hbox);
- this.preferences_vbox.append(this.brightness_hbox);
- this.preferences_vbox.append(this.contrast_hbox);
- this.preferences_vbox.append(this.icon_size_hbox);
- this.preferences_vbox.append(this.tray_position_hbox);
-
- // Custom icons section
-
- const customListStore = new Gtk.ListStore();
- customListStore.set_column_types([
- GObject.TYPE_STRING,
- GObject.TYPE_STRING,
- GObject.TYPE_STRING,
- ]);
- const customInitArray = this._settings.get_value('custom-icons').deep_unpack();
- customInitArray.forEach(pair => {
- customListStore.set(customListStore.append(), [0, 1, 2], pair);
- });
- customListStore.append();
-
- const customTreeView = new Gtk.TreeView({
- model: customListStore,
- hexpand: true,
- vexpand: true,
- });
- const customTitles = [
- _('Indicator ID'),
- _('Icon Name'),
- _('Attention Icon Name'),
- ];
- const indicatorIdColumn = new Gtk.TreeViewColumn({
- title: customTitles[0],
- sizing: Gtk.TreeViewColumnSizing.AUTOSIZE,
- });
- const customIconColumn = new Gtk.TreeViewColumn({
- title: customTitles[1],
- sizing: Gtk.TreeViewColumnSizing.AUTOSIZE,
- });
- const customAttentionIconColumn = new Gtk.TreeViewColumn({
- title: customTitles[2],
- sizing: Gtk.TreeViewColumnSizing.AUTOSIZE,
- });
-
- const cellrenderer = new Gtk.CellRendererText({editable: true});
-
- indicatorIdColumn.pack_start(cellrenderer, true);
- customIconColumn.pack_start(cellrenderer, true);
- customAttentionIconColumn.pack_start(cellrenderer, true);
- indicatorIdColumn.add_attribute(cellrenderer, 'text', 0);
- customIconColumn.add_attribute(cellrenderer, 'text', 1);
- customAttentionIconColumn.add_attribute(cellrenderer, 'text', 2);
- customTreeView.insert_column(indicatorIdColumn, 0);
- customTreeView.insert_column(customIconColumn, 1);
- customTreeView.insert_column(customAttentionIconColumn, 2);
- customTreeView.set_grid_lines(Gtk.TreeViewGridLines.BOTH);
-
- this.custom_icons_vbox.append(customTreeView);
-
- cellrenderer.connect('edited', (w, path, text) => {
- this.selection = customTreeView.get_selection();
- const title = customTreeView.get_cursor()[1].get_title();
- const columnIndex = customTitles.indexOf(title);
- const selection = this.selection.get_selected();
- const iter = selection.at(2);
- const text2 = customListStore.get_value(iter, columnIndex ? 0 : 1);
- customListStore.set(iter, [columnIndex], [text]);
- const storeLength = customListStore.iter_n_children(null);
- const customIconArray = [];
-
- for (let i = 0; i < storeLength; i++) {
- const returnIter = customListStore.iter_nth_child(null, i);
- const [success, iterList] = returnIter;
- if (!success)
- break;
-
- if (iterList) {
- const id = customListStore.get_value(iterList, 0);
- const customIcon = customListStore.get_value(iterList, 1);
- const customAttentionIcon = customListStore.get_value(iterList, 2);
- if (id && customIcon)
- customIconArray.push([id, customIcon, customAttentionIcon || '']);
- } else {
- break;
- }
- }
- this._settings.set_value('custom-icons', new GLib.Variant(
- 'a(sss)', customIconArray));
- if (storeLength === 1 && (text || text2))
- customListStore.append();
-
- if (storeLength > 1) {
- if ((!text && !text2) && (storeLength - 1 > path))
- customListStore.remove(iter);
- if ((text || text2) && storeLength - 1 <= path)
- customListStore.append();
- }
- });
-
- this.notebook = new Gtk.Notebook();
- this.notebook.append_page(this.preferences_vbox,
- new Gtk.Label({label: _('Preferences')}));
- this.notebook.append_page(this.custom_icons_vbox,
- new Gtk.Label({label: _('Custom Icons')}));
-
- this.append(this.notebook);
- }
-});
+const SettingsKey = {
+ LEGACY_TRAY_ENABLED: 'legacy-tray-enabled',
+ ICON_SIZE: 'icon-size',
+ ICON_OPACITY: 'icon-opacity',
+ ICON_SATURATION: 'icon-saturation',
+ ICON_BRIGHTNESS: 'icon-brightness',
+ ICON_CONTRAST: 'icon-contrast',
+ TRAY_POS: 'tray-pos',
+ CUSTOM_ICONS: 'custom-icons',
+};
export default class DockPreferences extends ExtensionPreferences {
- getPreferencesWidget() {
- return new AppIndicatorPreferences(this);
+ fillPreferencesWindow(window) {
+ const iconTheme = Gtk.IconTheme.get_for_display(Gdk.Display.get_default());
+ if (!iconTheme.get_search_path().includes(`${this.path}/icons`))
+ iconTheme.add_search_path(`${this.path}/icons`);
+
+
+ const settings = this.getSettings();
+ const generalPage = new GeneralPreferences.GeneralPage(settings, SettingsKey);
+ const customIconPage = new CustomIconPreferences.CustomIconPage(settings, SettingsKey);
+
+ window.add(generalPage);
+ window.add(customIconPage);
+
+ window.connect('close-request', () => {
+ window.destroy();
+ });
}
}
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/config/windows.json b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/config/windows.json
index 76e0559..1e32877 100644
--- a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/config/windows.json
+++ b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/config/windows.json
@@ -36,6 +36,18 @@
"wmClass": "org.mozilla.Thunderbird.desktop",
"wmTitle": "!Mozilla Thunderbird",
"mode": "float"
+ },
+ {
+ "wmClass": "evolution-alarm-notify",
+ "mode": "float"
+ },
+ {
+ "wmClass": "variety",
+ "mode": "float"
+ },
+ {
+ "wmClass": "update-manager",
+ "mode": "float"
}
]
}
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/extension/window.js b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/extension/window.js
index b5e60d5..b02d8d5 100644
--- a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/extension/window.js
+++ b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/extension/window.js
@@ -74,7 +74,27 @@ export class WindowManager extends GObject.Object {
this.eventQueue = new Queue();
this.theme = this.ext.theme;
this.lastFocusedWindow = null;
+ this.shouldFocusOnHover = this.ext.settings.get_boolean("focus-on-hover-enabled");
+
Logger.info("forge initialized");
+
+ if (this.shouldFocusOnHover) {
+ // Start the pointer loop to observe the pointer position
+ // and change the focus window accordingly
+ this.pointerLoopInit();
+ }
+ }
+
+ pointerLoopInit() {
+ if (this._pointerFocusTimeoutId) {
+ GLib.Source.remove(this._pointerFocusTimeoutId);
+ }
+
+ this._pointerFocusTimeoutId = GLib.timeout_add(
+ GLib.PRIORITY_DEFAULT,
+ 16,
+ this._focusWindowUnderPointer.bind(this)
+ );
}
addFloatOverride(metaWindow, withWmId) {
@@ -267,6 +287,14 @@ export class WindowManager extends GObject.Object {
switch (settingName) {
case "focus-border-toggle":
this.renderTree(settingName);
+ break;
+ case "focus-on-hover-enabled":
+ this.shouldFocusOnHover = settings.get_boolean(settingName);
+
+ if (this.shouldFocusOnHover) {
+ this.pointerLoopInit();
+ }
+
break;
case "tiling-mode-enabled":
this.renderTree(settingName);
@@ -891,16 +919,20 @@ export class WindowManager extends GObject.Object {
});
}
+ hideActorBorder(actor) {
+ if (actor.border) {
+ actor.border.hide();
+ }
+ if (actor.splitBorder) {
+ actor.splitBorder.hide();
+ }
+ }
+
hideWindowBorders() {
this.tree.nodeWindows.forEach((nodeWindow) => {
let actor = nodeWindow.windowActor;
if (actor) {
- if (actor.border) {
- actor.border.hide();
- }
- if (actor.splitBorder) {
- actor.splitBorder.hide();
- }
+ this.hideActorBorder(actor);
}
if (nodeWindow.parentNode.isTabbed()) {
if (nodeWindow.tab) {
@@ -1090,6 +1122,11 @@ export class WindowManager extends GObject.Object {
this._queueSourceId = 0;
}
+ if (this._pointerFocusTimeoutId) {
+ GLib.Source.remove(this._pointerFocusTimeoutId);
+ this._pointerFocusTimeoutId = 0;
+ }
+
if (this._prefsOpenSrcId) {
GLib.Source.remove(this._prefsOpenSrcId);
this._prefsOpenSrcId = 0;
@@ -1410,6 +1447,9 @@ export class WindowManager extends GObject.Object {
let from = "size-changed";
this.updateMetaPositionSize(_metaWindow, from);
}),
+ metaWindow.connect("unmanaged", (_metaWindow) => {
+ this.hideActorBorder(windowActor);
+ }),
metaWindow.connect("focus", (_metaWindowFocus) => {
this.queueEvent({
name: "focus-update",
@@ -2243,6 +2283,62 @@ export class WindowManager extends GObject.Object {
return nodeWinAtPointer;
}
+ /**
+ * Focus the window under the pointer and raise it.
+ *
+ * @returns {boolean} true if we should continue polling, false otherwise
+ */
+ _focusWindowUnderPointer() {
+ // Break the loop if the user has disabled the feature
+ // or if the window manager is disabled
+ if (!this.shouldFocusOnHover || this.disabled) return false;
+
+ // We don't want to focus windows when the overview is visible
+ if (Main.overview.visible) return true;
+
+ // Get the global mouse position
+ let pointer = global.get_pointer();
+
+ const metaWindow = this._getMetaWindowAtPointer(pointer);
+
+ if (metaWindow) {
+ // If window is not null, focus it
+ metaWindow.focus(global.get_current_time());
+ // Raise it to the top
+ metaWindow.raise();
+ }
+
+ // Continue polling
+ return true;
+ }
+
+ /**
+ * Get the Meta.Window at the pointer coordinates
+ *
+ * @param {[number, number]} pointer x and y coordinates
+ * @returns null if no window is found, otherwise the Meta.Window
+ */
+ _getMetaWindowAtPointer(pointer) {
+ const windows = global.get_window_actors();
+ const [x, y] = pointer;
+
+ // Iterate through the windows in reverse order to get the top-most window
+ for (let i = windows.length - 1; i >= 0; i--) {
+ let window = windows[i];
+ let metaWindow = window.meta_window;
+
+ let { x: wx, y: wy, width, height } = metaWindow.get_frame_rect();
+
+ // Check if the position is within the window bounds
+ if (x >= wx && x <= wx + width && y >= wy && y <= wy + height) {
+ return metaWindow;
+ }
+ }
+
+ // No window found at the pointer
+ return null;
+ }
+
/**
* Finds the NodeWindow under the Meta.Window and the
* current pointer coordinates;
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/appearance.js b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/appearance.js
index fa34343..786ebaa 100644
--- a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/appearance.js
+++ b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/appearance.js
@@ -25,16 +25,17 @@ export class AppearancePage extends PreferencesPage {
*/
static getCssSelectorAsMessage(selector) {
switch (selector) {
+ // TODO: make separate color selection for preview hint
case ".window-tiled-border":
- return _("Tiled Focus Hint and Preview");
- case ".window-floated-border":
- return _("Floated Focus Hint");
- case ".window-split-border":
- return _("Split Direction Hint");
- case ".window-stacked-border":
- return _("Stacked Focus Hint and Preview");
+ return _("Tiled window");
case ".window-tabbed-border":
- return _("Tabbed Focus Hint and Preview");
+ return _("Tabbed window");
+ case ".window-stacked-border":
+ return _("Stacked window");
+ case ".window-floated-border":
+ return _("Floating window");
+ case ".window-split-border":
+ return _("Split direction hint");
}
}
@@ -45,32 +46,63 @@ export class AppearancePage extends PreferencesPage {
this.themeMgr = new PrefsThemeManager(this);
this.add_group({
title: _("Gaps"),
+ description: _("Change the gap size between windows"),
children: [
- // Gaps size
new SpinButtonRow({
- title: _("Gaps Size"),
+ title: _("Gap size"),
range: [0, 32, 1],
settings,
bind: "window-gap-size",
}),
- // Gaps size multiplier
new SpinButtonRow({
- title: _("Gaps Size Multiplier"),
- range: [0, 8, 1],
+ title: _("Gap size multiplier"),
+ range: [0, 32, 1],
settings,
bind: "window-gap-size-increment",
}),
- // Gap Hidden when Single Window
new SwitchRow({
- title: _("Gaps Hidden when Single"),
+ title: _("Disable gaps for single window"),
+ subtitle: _("Disables window gaps when only a single window is present"),
settings,
bind: "window-gap-hidden-on-single",
}),
],
});
-
+ this.add_group({
+ title: _("Style"),
+ description: _("Change how the shell looks"),
+ children: [
+ new SwitchRow({
+ title: _("Preview hint"),
+ subtitle: _("Shows where the window will be tiled when you let go of it"),
+ experimental: true,
+ settings,
+ bind: "preview-hint-enabled",
+ }),
+ new SwitchRow({
+ title: _("Border around focused window"),
+ subtitle: _("Display a colored border around the focused window"),
+ settings,
+ bind: "focus-border-toggle",
+ }),
+ new SwitchRow({
+ title: _("Window split hint border"),
+ subtitle: _("Show split direction border on focused window"),
+ settings,
+ bind: "split-border-toggle",
+ }),
+ new SwitchRow({
+ title: _("Forge in quick settings"),
+ subtitle: _("Toggles the Forge tile in quick settings"),
+ experimental: true,
+ settings,
+ bind: "quick-settings-enabled",
+ }),
+ ],
+ });
this.add_group({
title: _("Color"),
+ description: _("Changes the focused window's border and preview hint colors"),
children: [
"window-tiled-border",
"window-tabbed-border",
@@ -92,7 +124,7 @@ export class AppearancePage extends PreferencesPage {
const row = new Adw.ExpanderRow({ title });
const borderSizeRow = new SpinButtonRow({
- title: _("Border Size"),
+ title: _("Border size"),
range: [1, 6, 1],
// subtitle: 'Properties of the focus hint',
max_width_chars: 1,
@@ -164,7 +196,7 @@ export class AppearancePage extends PreferencesPage {
};
const borderColorRow = new ColorRow({
- title: _("Border Color"),
+ title: _("Border color"),
init: theme.getCssProperty(selector, "border-color").value,
onChange: updateCssColors,
});
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/keyboard.js b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/keyboard.js
index 1f99609..3fb6368 100644
--- a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/keyboard.js
+++ b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/keyboard.js
@@ -18,34 +18,14 @@ export class KeyboardPage extends PreferencesPage {
constructor({ kbdSettings }) {
super({ title: _("Keyboard"), icon_name: "input-keyboard-symbolic" });
- const description = `${_("Syntax")}: <Super>h, <Shift>g, <Shift><Super>h
- ${_("Legend")}: <Super> - ${_("Windows key")}, <Primary> - ${_("Control key")}
- ${_("Delete text to unset. Press Return key to accept. Focus out to ignore.")} ${_(
- "Resets"
- )} ${_("to previous value when invalid")}`;
-
this.add_group({
- title: _("Update Shortcuts"),
- description,
- children: Object.entries({
- window: "Window Shortcuts",
- workspace: "Workspace Shortcuts",
- con: "Container Shortcuts",
- focus: "Focus Shortcuts",
- prefs: "Other Shortcuts",
- }).map(([prefix, gettextKey]) =>
- KeyboardPage.makeKeygroupExpander(prefix, gettextKey, kbdSettings)
+ title: _("Drag-and-drop modifier key"),
+ description: _(
+ "Change the modifier key for tiling windows via drag-and-drop. Select 'None' to always tile"
),
- });
-
- this.add_group({
- title: _("Drag-Drop Tiling Modifier Key Options"),
- description: `${_(
- "Change the modifier for tiling windows via mouse/drag-drop"
- )} ${_("Select None to always tile immediately by default")}`,
children: [
new RadioRow({
- title: _("Tile Modifier"),
+ title: _("Modifier key"),
settings: kbdSettings,
bind: "mod-mask-mouse-tile",
options: {
@@ -57,6 +37,21 @@ export class KeyboardPage extends PreferencesPage {
}),
],
});
+ this.add_group({
+ title: _("Shortcuts"),
+ description: _(
+ 'Change the tiling shortcuts. To clear a shortcut clear the input field. To apply a shortcut press enter. Syntax examples'
+ ),
+ children: Object.entries({
+ window: "Tiling shortcuts",
+ con: "Container shortcuts",
+ workspace: "Workspace shortcuts",
+ focus: "Appearance shortcuts",
+ prefs: "Other shortcuts",
+ }).map(([prefix, gettextKey]) =>
+ KeyboardPage.makeKeygroupExpander(prefix, gettextKey, kbdSettings)
+ ),
+ });
}
static makeKeygroupExpander(prefix, gettextKey, settings) {
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/settings.js b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/settings.js
index 04d688f..6f68f70 100644
--- a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/settings.js
+++ b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/settings.js
@@ -8,7 +8,7 @@ import { Logger } from "../shared/logger.js";
import { production } from "../shared/settings.js";
// Prefs UI
-import { DropDownRow, SwitchRow, PreferencesPage } from "./widgets.js";
+import { DropDownRow, SwitchRow, PreferencesPage, EntryRow } from "./widgets.js";
// Extension imports
import { gettext as _ } from "resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js";
@@ -51,65 +51,57 @@ export class SettingsPage extends PreferencesPage {
}
constructor({ settings, window, metadata }) {
- super({ title: _("Settings"), icon_name: "settings-symbolic" });
+ super({ title: _("Tiling"), icon_name: "view-grid-symbolic" });
this.add_group({
- title: _("Settings"),
- description: _("Toggle Forge's high-level features"),
+ title: _("Behavior"),
+ description: _("Change how the tiling behaves"),
header_suffix: makeAboutButton(window, metadata),
children: [
new SwitchRow({
- title: _("Stacked Tiling Mode"),
- subtitle: _("Stack windows on top of each other while still being tiled"),
+ title: _("Focus on Hover"),
+ subtitle: _("Window focus follows the pointer"),
+ experimental: true,
+ settings,
+ bind: "focus-on-hover-enabled",
+ }),
+ new SwitchRow({
+ title: _("Move pointer with focused window"),
+ subtitle: _("Moves the pointer when focusing or swapping via keyboard"),
+ experimental: true,
+ settings,
+ bind: "move-pointer-focus-enabled",
+ }),
+ new SwitchRow({
+ title: _("Quarter tiling"),
+ subtitle: _("Places new windows in a clock-wise fashion"),
+ experimental: true,
+ settings,
+ bind: "auto-split-enabled",
+ }),
+ new SwitchRow({
+ title: _("Stacked tiling"),
+ subtitle: _("Stacks windows on top of each other while still tiling them"),
experimental: true,
settings,
bind: "stacked-tiling-mode-enabled",
}),
new SwitchRow({
- title: _("Tabbed Tiling Mode"),
- subtitle: _("Group tiles windows as tabs"),
+ title: _("Tabbed tiling"),
+ subtitle: _("Groups windows as tabs"),
experimental: true,
settings,
bind: "tabbed-tiling-mode-enabled",
}),
- ],
- });
-
- this.add_group({
- title: _("Behavior"),
- children: [
new SwitchRow({
- title: _("Move Pointer with the Focus"),
- subtitle: _("Move the pointer when focusing or swapping via keyboard"),
- experimental: true,
+ title: _("Auto exit tabbed tiling"),
+ subtitle: _("Exit tabbed tiling mode when only a single tab remains"),
settings,
+ bind: "auto-exit-tabbed",
bind: "move-pointer-focus-enabled",
}),
- ],
- });
-
- this.add_group({
- title: _("Tiling"),
- children: [
- new SwitchRow({
- title: _("Preview Hint Toggle"),
- experimental: true,
- settings,
- bind: "preview-hint-enabled",
- }),
- new SwitchRow({
- title: _("Show Focus Hint Border"),
- subtitle: _("Display a colored border around the focused window"),
- settings,
- bind: "focus-border-toggle",
- }),
- new SwitchRow({
- title: _("Show Window Split Hint Border"),
- subtitle: _("Show split direction border on focused window"),
- settings,
- bind: "split-border-toggle",
- }),
new DropDownRow({
- title: _("Default Drag-and-Drop Center Layout"),
+ title: _("Drag-and-drop behavior"),
+ subtitle: _("What to do when dragging one window on top of another"),
settings,
type: "s",
bind: "dnd-center-layout",
@@ -120,35 +112,25 @@ export class SettingsPage extends PreferencesPage {
],
}),
new SwitchRow({
- title: _("Auto Exit Tabbed Tiling Mode"),
- subtitle: _("Exit tabbed tiling mode when only a single tab remains"),
- settings,
- bind: "auto-exit-tabbed",
- }),
- new SwitchRow({
- title: _("Auto Split"),
- subtitle: _("Quarter Tiling"),
- experimental: true,
- settings,
- bind: "auto-split-enabled",
- }),
- new SwitchRow({
- title: _("Float Mode Always On Top"),
- subtitle: _("Floating windows always above tiling windows"),
+ title: _("Always on Top mode for floating windows"),
+ subtitle: _("Makes floating windows appear above tiled windows"),
experimental: true,
settings,
bind: "float-always-on-top-enabled",
}),
- new SwitchRow({
- title: _("Show Tiling Quick Settings"),
- subtitle: _("Toggle showing Forge on quick settings"),
- experimental: true,
+ ],
+ });
+ this.add_group({
+ title: _("Non-tiling workspaces"),
+ description: _("Disables tiling on specified workspaces. Starts from 0, separated by commas"),
+ children: [
+ new EntryRow({
+ title: _("Example: 0,1,2"),
settings,
- bind: "quick-settings-enabled",
+ bind: "workspace-skip-tile",
}),
],
});
-
if (!production) {
this.add_group({
title: _("Logger"),
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/widgets.js b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/widgets.js
index 7801789..808c540 100644
--- a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/widgets.js
+++ b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/widgets.js
@@ -218,7 +218,7 @@ export class ResetButton extends Gtk.Button {
constructor({ settings = undefined, bind = undefined, onReset }) {
super({
- icon_name: "edit-clear-symbolic",
+ icon_name: "edit-undo-symbolic",
tooltip_text: _("Reset"),
valign: Gtk.Align.CENTER,
});
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/workspace.js b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/workspace.js
deleted file mode 100644
index 0adaa55..0000000
--- a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/workspace.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Gnome imports
-import GObject from "gi://GObject";
-
-import { gettext as _ } from "resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js";
-
-import { EntryRow, PreferencesPage } from "./widgets.js";
-
-export class WorkspacePage extends PreferencesPage {
- static {
- GObject.registerClass(this);
- }
-
- constructor({ settings }) {
- super({ title: _("Workspace"), icon_name: "shell-overview-symbolic" });
- this.add_group({
- title: _("Update Workspace Settings"),
- description: _(
- "Provide workspace indices to skip. E.g. 0,1. Empty text to disable. Enter to accept"
- ),
- children: [
- new EntryRow({
- title: _("Skip Workspace Tiling"),
- settings,
- bind: "workspace-skip-tile",
- }),
- ],
- });
- }
-}
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/es/LC_MESSAGES/forge.mo b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/es/LC_MESSAGES/forge.mo
index 83b91cd..0d43612 100644
Binary files a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/es/LC_MESSAGES/forge.mo and b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/es/LC_MESSAGES/forge.mo differ
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/fr/LC_MESSAGES/forge.mo b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/fr/LC_MESSAGES/forge.mo
index 0c3fba1..f704565 100644
Binary files a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/fr/LC_MESSAGES/forge.mo and b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/fr/LC_MESSAGES/forge.mo differ
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/it/LC_MESSAGES/forge.mo b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/it/LC_MESSAGES/forge.mo
index 39f77a4..9b270f2 100644
Binary files a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/it/LC_MESSAGES/forge.mo and b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/it/LC_MESSAGES/forge.mo differ
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/nl/LC_MESSAGES/forge.mo b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/nl/LC_MESSAGES/forge.mo
index b5dbf5e..ad876d9 100644
Binary files a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/nl/LC_MESSAGES/forge.mo and b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/nl/LC_MESSAGES/forge.mo differ
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/pt_BR/LC_MESSAGES/forge.mo b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/pt_BR/LC_MESSAGES/forge.mo
index 30dce8d..9a0bb04 100644
Binary files a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/pt_BR/LC_MESSAGES/forge.mo and b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/locale/pt_BR/LC_MESSAGES/forge.mo differ
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/metadata.json b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/metadata.json
index 1ea0ab8..0931fb2 100644
--- a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/metadata.json
+++ b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/metadata.json
@@ -16,5 +16,5 @@
],
"url": "https://github.com/forge-ext/forge",
"uuid": "forge@jmmaranan.com",
- "version": 84
-}
+ "version": 88
+}
\ No newline at end of file
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/prefs.js b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/prefs.js
index dcccd0f..7543127 100644
--- a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/prefs.js
+++ b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/prefs.js
@@ -24,7 +24,6 @@ import { ExtensionPreferences } from "resource:///org/gnome/Shell/Extensions/js/
import { KeyboardPage } from "./lib/prefs/keyboard.js";
import { AppearancePage } from "./lib/prefs/appearance.js";
-import { WorkspacePage } from "./lib/prefs/workspace.js";
import { SettingsPage } from "./lib/prefs/settings.js";
export default class ForgeExtensionPreferences extends ExtensionPreferences {
@@ -45,7 +44,6 @@ export default class ForgeExtensionPreferences extends ExtensionPreferences {
window._kbdSettings = this.kbdSettings;
window.add(new SettingsPage(this));
window.add(new AppearancePage(this));
- window.add(new WorkspacePage(this));
window.add(new KeyboardPage(this));
window.search_enabled = true;
window.can_navigate_back = true;
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/schemas/gschemas.compiled b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/schemas/gschemas.compiled
index b7ad5be..8ac4d75 100644
Binary files a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/schemas/gschemas.compiled and b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/schemas/gschemas.compiled differ
diff --git a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/schemas/org.gnome.shell.extensions.forge.gschema.xml b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/schemas/org.gnome.shell.extensions.forge.gschema.xml
index ee42081..3a7fb9c 100644
--- a/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/schemas/org.gnome.shell.extensions.forge.gschema.xml
+++ b/gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/schemas/org.gnome.shell.extensions.forge.gschema.xml
@@ -123,6 +123,10 @@
false
Move the pointer when focusing or swapping via kbd
+
+ false
+ Focus switches to the window under the pointer.
+
true
Floating windows toggle always-on-top
diff --git a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/extension.js b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/extension.js
index edf89a0..621e376 100644
--- a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/extension.js
+++ b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/extension.js
@@ -1,5 +1,5 @@
/* extension.js
-* Copyright (C) 2024 kosmospredanie, shyzus, Shinigaminai
+* Copyright (C) 2025 kosmospredanie, shyzus, Shinigaminai
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -77,6 +77,9 @@ export default class ScreenAutoRotateExtension extends Extension {
*/
this._timeoutId = setTimeout(() => {
this._set_hide_lock_rotate(this._settings.get_boolean('hide-lock-rotate'));
+
+ // Rotate once on start up to the orientation detected by the claimed accelerometer
+ this.rotate_to(this._sensor_proxy.get_accelerometer_orientation());
}, 1000);
}
diff --git a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/metadata.json b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/metadata.json
index bc4d291..599cb85 100644
--- a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/metadata.json
+++ b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/metadata.json
@@ -1,6 +1,9 @@
{
"_generated": "Generated by SweetTooth, do not edit",
"description": "Enable screen rotation regardless of touch mode. Fork of Screen Autorotate by Kosmospredanie.",
+ "donations": {
+ "github": "shyzus"
+ },
"gettext-domain": "gnome-shell-extension-screen-rotate",
"name": "Screen Rotate",
"session-modes": [
@@ -16,5 +19,5 @@
],
"url": "https://github.com/shyzus/gnome-shell-extension-screen-autorotate",
"uuid": "screen-rotate@shyzus.github.io",
- "version": 24
-}
+ "version": 25
+}
\ No newline at end of file
diff --git a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/sensorProxy.js b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/sensorProxy.js
index 93c5505..d29e098 100644
--- a/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/sensorProxy.js
+++ b/gnome/.local/share/gnome-shell/extensions/screen-rotate@shyzus.github.io/sensorProxy.js
@@ -1,5 +1,5 @@
/* sensorProxy.js
-* Copyright (C) 2024 kosmospredanie, shyzus
+* Copyright (C) 2025 kosmospredanie, shyzus
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -64,6 +64,17 @@ export class SensorProxy {
this._proxy = null;
}
+ get_accelerometer_orientation() {
+ if (this._enabled) {
+ let variant = this._proxy.get_cached_property('AccelerometerOrientation');
+ let orientation = variant.unpack();
+ variant.unref();
+ return orientation;
+ }
+
+ return undefined;
+ }
+
properties_changed(proxy, changed, _invalidated) {
if (!this._enabled) return;
let properties = changed.deep_unpack();