From 80d725a18a4faf7c7dc1771e89a647593c0023fd Mon Sep 17 00:00:00 2001 From: Colin Powell Date: Thu, 19 Jun 2025 09:27:02 -0400 Subject: [PATCH] [gnome] Bump extension versions ... I should probably get these out of here --- .../convenience.js | 2 +- .../extension.js | 9 +- .../metadata.json | 2 +- .../utilwebcam.js | 7 +- .../appIndicator.js | 14 +- .../metadata.json | 4 +- .../prefs.js | 342 ++---------------- .../forge@jmmaranan.com/config/windows.json | 12 + .../lib/extension/window.js | 108 +++++- .../lib/prefs/appearance.js | 68 +++- .../forge@jmmaranan.com/lib/prefs/keyboard.js | 43 +-- .../forge@jmmaranan.com/lib/prefs/settings.js | 108 +++--- .../forge@jmmaranan.com/lib/prefs/widgets.js | 2 +- .../lib/prefs/workspace.js | 29 -- .../locale/es/LC_MESSAGES/forge.mo | Bin 361 -> 1981 bytes .../locale/fr/LC_MESSAGES/forge.mo | Bin 4783 -> 1600 bytes .../locale/it/LC_MESSAGES/forge.mo | Bin 5667 -> 2092 bytes .../locale/nl/LC_MESSAGES/forge.mo | Bin 3025 -> 997 bytes .../locale/pt_BR/LC_MESSAGES/forge.mo | Bin 4264 -> 1392 bytes .../forge@jmmaranan.com/metadata.json | 4 +- .../extensions/forge@jmmaranan.com/prefs.js | 2 - .../schemas/gschemas.compiled | Bin 5216 -> 5280 bytes ...g.gnome.shell.extensions.forge.gschema.xml | 4 + .../extension.js | 5 +- .../metadata.json | 7 +- .../sensorProxy.js | 13 +- 26 files changed, 312 insertions(+), 473 deletions(-) delete mode 100644 gnome/.local/share/gnome-shell/extensions/forge@jmmaranan.com/lib/prefs/workspace.js 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 83b91cdb25636b834c9e4de9a0a8ca95f061305b..0d43612384e00f12fc25b3b28644aee82027137f 100644 GIT binary patch literal 1981 zcmZXU&5ImG7>6qwO)?sz(fBRaMe$%KyNiZ6iL0BlQ^ddp-O*=*2es-N!ax2k^c*ZgsK?^VV1 z7~^rqUyP?1Kkebh_0DZdtw96tfM3Jg;kU2@zn{%thkJSd1unqf;c>VRV_CNdAA)D# ze)tx=6IysTETCxEg0jz5DC<6jV*eR@5MF}``~mKRH=x-44Q1UwQ1;!!i*P@D7#@O$ z;WO|6zMX_)-g_)Q0Kb4NRo_7I>pRF#{m2bd^)u|kUttd(WOE+X06q)fgres|D0)AF z_rXu#lkggpbFRa?;BW9A_$PcC-heN`BWxo3T;eACzYQfm*^CwBr{3rG1pEL#0zZed zl(qWhjC&b!k%~43?F%>APjVsG{S1k__%3>PF4^-4LwtXLfxK4FAt<`VM~SCg;@8e4 z+8$*bWJtc$sdRC9>C$lJ;)PSk(#5Xsl_o7*Inr_LYF*nHN} z`Y^KUoT+O4ipz6s+XaKxQoUxkQg1@8&im2Gh8gsEyI~8}_ZwEPdRIn-ZMryaWt|mS z>Vhw=TC)U44W`JbI;Aq zbku~M0L2NR#X2MxJ?_E8pOzG-z zr@zwg?FyYgI@ekD1i$2{tqLvCUWv!38&{sx+1Lc4|Kg?L+2q8ook&`@A?cNw&&hFD zpGaNoNR6+q^(gb@mFqnK^T7_4j>EvVv}Ab%6D>540)B zoXu%1rV67sIDwFI5M^R=qXwpM^0CkqzZa{CuZ_z*Cb|+&w!bvB&Kg70=$hsdt-0YW zbMyPGDSCB5my{9D1~{#EQ7w8hDy+8k_e2K(?yUYGitWx>| zu~}jv{%E~IL6$BuVV^Hq7dLw#}Rba4Uo z)-{Q?x&O$lbsF^~`f|t4DJ_D%|0|+btxZ1>7bW`%-GrW8H>s^n%n*7z$Mpo-4(Oxj z#YHZ?kVq2arf%dL>BnK5N(dnYhyx!qdr z_6onyq~lQ#1$p3xK}N2t>}O;AI!{ejerlgzys(i3;dqqUQsamIEjJn(xe^USlV|0# G&gsAFTWb3N literal 4783 zcmaKuOKcri8GsL=rPP$Rq);B=ai9;kknyW8<2a^%rV(-D+Acw=5FF2(d+#K3=S=2d z#{r430kL4g0)z?@AR&Qylub8Cl+6_zREZ5jAXN<#3&aMo1Vkmi|D1cTubYIC$KTvJ zkN%0I3@-KNy-@Xt_QU58`vuYLXlzMbFyhIheZ zOnwKv2QI=BP}YC0|2~FHRSrG?Yq$o#183lM_z*n)Hl^MNXW?=99Aro(P}X0B?}ZND z3BLwKk8eW$)QkKReSQc}z?a}t@OMzwAG<@T``{gL3!Z?ozk^Is4g3`R5|n*^4L<;X z3nTa!_#SvSgYSk9LSCs)!VkkmDEof_%Dy!exmTg=|K&cv3O~f}Z$Pp0XYifyH&Ej7 zDwO$uhvJWa!jHi_G5TS6622d9LGeSEe#%H0} zvkJwY7hnzxD0W?k_rkwHvEyIxarg$z;0&8A!0*Eq_&O9l9>5sUdkKmkUVvhcfzz-9 z-vwWUBIoB26V=O5*1ZBHPyPru;eVj4U%xxpzYV{_?=M3B)EoSh@w@K9_wYW5imHaQ z@ETl#zk;Igf8hi?g>fSHBAkL16!|}bqW3FM#(Ploe6`O%z{mLg8kBh5i!l$u2%dpk zQ0)6I|2_(T0jJ>aq2!|k{RuD&WnKfIpOWixNsh}UzLWfv>q&0$wd6DIQsdl` zN+#D!pmz zrp#qO88UHf3&z%5+*F#i@-l7buCx}#WAvCk%YCzxwW*W`&et|bc@36?0Y zmDgz7TdCIv#(x@t=ZiXZd8O7eXKER;dNJEG`;|VQ>uqfI1MC*mc_z(kwdTsURcB05 z`G5MEG)Zi(_d5LB!jD-Prr5XV%1c#Y zVyg*t8rw=7TwO|w3B5Yep3qY#r+MlYHR0%oD@iM}lUZJSO@~oZo0d3+|CQPz#&NCZ z(*@CCellHaXlbYzpOYmYJ+^T^+GIPK8Lc3FPR~ruJQhvOL^HE``l-3;C!?t+rl!WunW~PqDTY;MYFEzb z3pOG5^!%QuYqioiwb|2@k<7VE6RmQAHF>+iP0_YBUGykz9(Q!4mvLTVSX#RMr;F0n zE}!Vy!})W%RepYXacuqU`s$$>(-Tu;QW5caw7p-TsT`U~s#Kbv(s9R>IP&!K+iTJ6 z;XF~eWy@$ak10lZdrr^pr1jWF)|4iT2t>D<(|O^4R;Oo9>F{{^kz6n6=|{&t8=bMa zErZEt>Y@Gm@fp-ny=z3n6|UlF4O)f~Gs)H7K|%BI$Hve-x;$QPXb!F`fe5*??3&Cr zC98F2{OKZJ$mTR7J&(Q|7E>nHu8FBvObGoY4q^(&RvBfcW%J%oYcfxh8g!kmt4!~g zNcW9LiWr+z%uc25vqZPEw5sq^g4T`))byH>x?WT)t*G}h#Vs@7|iuOOC~R8 z;?Aqu`>H9cuvchb<%C+4gzQl48@?uRI{w?N+TCyR5>!y{sIINch3$Ll&-KGwy>T{5Q^c7odVhmAB zrivvMbT%G3rmQT8J_V{dR8k!0V=uWLCW>f0>$|O2gOuDQHFWO>{ZATFX7$Qk=(*>N zWcyXxx$N&Vp?6Rjdfe`t^YBRa`5Ma%wb?sJbJAaQ!mpcFOqL@reVJ04vpL<_o8{ZH z7ea$3nL-knL4J;AjP&f@fp6NstuQ>DYew|H&E;ai!_`a@b!nsG>KiA@c3tFU}(c;f9Gp=%VUH7)DVAQQ_NET107>$Hvj+t 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 39f77a4cd20ba7c1a68f9ff37eecc74327660d70..9b270f29a946d27b88b1004810c05af3de8b8d00 100644 GIT binary patch delta 988 zcmXxhKWI}y90%~L_HPo~nx@sN=ufdI(gtl!X$M7H>K_`V{{%rDE_r8i_;MHDyEJx? z4tCK+39)_G~5FHmX0#Cy+n1xly`&MBZu0byFFXTMU_%ROK zA;A>n{TX!p#ZEzf@CBI0{o)D+=iv(EL~D>=^a&!TScf~{COis%LVi&{HuJxfLh#?m zmv$q#;j7m^cWr`>FXXSmt*1_{*x8+p$$xq=;8$~{d^s1=h3G_ZaeOhijykm-^@x51 z7ugrxZSiB1*0+I}bb%jzZatZqx}zOAnae4Uoc6UTP|13VszqhU8h?o-g;@0!@1j7J zq&CrmwgVH>YAI)B;EAj)6jacFvT9NJ;*wodG-I`KDxj)%MRG+&=WM?8YO#mM z^JN=4N!q7!#W?9~peSz*FWjsbuEMZlteDf~KqHBXMw3&~X7X(B#Zp=O(y7K1=J_@i UZKTGNeoh)o6Vf@Hz*SQG13u2N#Q*>R literal 5667 zcma)MWNtHx^un*>Pv*vO95Scbyq-CZcuv)SM}{PgmQQ z8D>q4goGzv)EF;MB*sJ&GzK0_^nr&Bk@%{{1QVV})I{UUJ{Z)*-&fUr&dj(do$2%M zuCB}X{lEYBRm~eWU-KQsb%Oh&a$lv?6N1<9!}X1KE42);spMuUF= zujTzR_W1BzYW1!ut*L6%m3 z0zVG^9h7x%fK*xUE>PAx(%>X0^F9O$51ZiiU>}sY)u8nM7ASmuAG`~E3H&tpd+Ak z^8HRQ@CHutJ`LUtc0tLH=fG+3MG%VB8=$Q7S5W%jLNJ8i6_6(NEOJ)Sj!jCHL;-me>ma*KrHq$Vc7Dt>(J( ziwlozuAVzPH`$$^)ytXbrY`I2YTK2%v{fZ9iOFNLe2M$Jav^iX}8Ue^MyL;i=Hj?qEAOJ8}6c2i`ypa z$GHc-=e8WZwpbElD<{^8t$NpGJ-=J(9cT2wW6Wf)F#S%i@VSa}F8Zu0e5xnzb(FWRhPg)?SP3}3RTtytVXU5QV11_=}Td|}H{uiL6FGMP_4 znIy3}-&TB5LrER_yME>iJE4|bnWtt?8=Z)Mwx_$%T~qivgGq?nl7W1Qo~U3|uxK-Q zsn=TPKhJ{a^2+(FR4b`Bm3*>#A>B25r9PMGO?(a?m@S%f+GSO2k^r_`nK;69{SGe1 zRhn<=l*!BRqffhD&t`geo1YDar#7~S;7B)GFIv3@m5z|wLY=~?Tqd;TXsuFLrdukE z?|M`8)EV2i8Q}YUhD6Y3?2b*(Vx&$_fPXQ$SWe+M7-xp za=_9YEExt`ty`oJe@nH2Op;2^xp}c+Zqm)m%yad8L$Pq7-C$sQ&Qvzto13iXb$3tq zq68TqQj3YU{qDY)>6jI>)E`qSdcJ=k+H;lexdIzeO{+bg4ry)! zD)eJRlH!6YB&uE-4i945s0>!LN@A*t-0@r5nq*sh^ej;muS|ZwJ%~74^m1McdfWB4JE>?`Z&^ciuw~n&B(O3^=&IrCt09bNNNQ@S z9?5$sLlgg^O6qFZFp9=7;?ay!he|g5t`J-<)KUEOj!A3eE-C9WUR+OAl-@Eml`lF8 z1<0`kY4H@2=&bfSkJ_R{8ne;9v2~kcM`x|7v(pdVH#I#qHFn07RcCX!;4HPNYcj7-8oVt@fYj(Y6WY3?rW5^v zap^?j2lLF3^=nw}Y+5sz)vFaguf zY{#($1}Nzi27ESKTf{TL*syz(kXtUpOL{=jz>x}J7sn~y%fw|yTV1$Rp2a%ZMM-^` zABK{+x2IStJA2%`@`Iz^07|GG zFyjWeN3c8!l1)=+9dQ0J$Zo6liDz70RkaLMD{U0pxm-I}>GQ&HZft!*ZH)#Pwq}Yx z?6;^h!i?5M`jlgYJ$~uOaD|lpK2{D25Ubi*d_0OIl5|0vEZb|vD#VTYuA6?psPmk_ z957D$6prP4g~)3FC&@M<37X@OV^nH6xnw;fXBTzGQS?)<<$0~qBpl~^z22C$h!@}W*%1wSTey8@0^uq~=4KOIXQU8@huht!A zV0mWtJ(8tzI1ZtLtWm3@4@d~z zAhfcUbEU*wDnwhI{!6=UcLcJpyb^ko%YjkoZLAA3wcQWQK1|a8zYL-XRZ=WM3vwij zm57CU!!le-scG}%VD9segz1K0pn(IXg(=4golM&VIc98>pfLEhOA3Y5)&m(3(=8R>MW#DEY{L7McZjpd3X&%JkiQx&l^I_aU1UT)Kphk3N}$e5V5wg z5Ny?2n-pRph>c)nXYZS21qa^#c6WB(>~630S;*dJol`}BwEM@PgY}8!IVkm);3#+pj)V6${|t&>Z;;RE6_WxsK5XI(9Kre!a>v&y z?mjwmi|d@QA&-q|Mva6#qjp*xke9YOrVZu$e5*%-oLdb!wHEc_@|qWMXf&IIYPu0M l_gJM=VUENg3Y3b2eHpN^sdd~!Ev6MtjB0cE-#%1w=oepQR}KIG literal 3025 zcmaKu%Wot{8Ndq?2$+Q=%bW115S9>Sd;AEX#OrmkvDfQp*Sp3u@xlpera!l9r>DB< zuAYhaf&?583PKzrku&13ARz_B1x3nXIdCK(lndm7kbu8}-`6u^8-=CSRln)(s_$K& z{r1`WUol*dGd|7ey~~)dz?a|6#PzNFjCl`qklSQT3vdX}z%l#){2sgne++f~o3rIwKSPb%-{3y{7es}54r6uQ7S#P;gHOSI z_)YjjxB>qSKL+q}x8-+wlH{v}kozlGn2zk?6KXHkksvkO(< zH=x?_Bc@NlpF#^?gKRN>f{XC4Q0+d0GrIpQ)bEeL^Y9#0`FrpSZ~!%aKY+Ua=kW9J zSCFu^xdm+vs9yC&FJ1dZhOX89DpN0&Ilt7eM;WSLFUueeZQc-XKFrWd>ur9WlziJN22E|*t1o>Pib^`BRndy?wI@`f~M8hzlw zr<$8vxRtz+Ci_y=xVMU7RVE92QWjNAcIwQh$@5KCC%t0TF6`b&_7JBllTEa*+Lfi1 zlGk<(A<;E;T|alg z+L7~lXHbmR*%`9NWs>y7jnFuMUbP`#*m+^+@`CQ z_R))W`H2e)Ur(+`kZS7JZb4Z^`xK^_8)K5K&1D}c8DR>U*`pkWxinS#t6zzvQOr$$ z>$cCRKn`#85(|msr=YhS3YAQM;WXtE+6FUr!Hy-=G>6)b^e_^?I+s#H!W~4a+mx^b zbG22ZEhcG2PP+}Y8dAp@<=lz3tyP=JfS_SamHux@H+`+vMH$x77NhoeYviQ0TtbKD z)eJ3dYudF~gGx5o($%$oznc4@m8#!(Oj8+r3%FJB(P-nL0~8~S2=N_Jn7RM|y>0v5 zA*a#y{VjWYLd(Iy<4~Es#*d=ZbMm3;3$-2E^>^>wy%PvTK^W8drrBB>DNNSQqi(uE z@@Yh;ZO&<*3w|uFF;|4hGaYC!xF?biIc8D~`?=G`NjnVW*rr}xB?@#xeV@_a$#QyL z?HSJ+;5Fx>%|$Ye7@^bkHKjb%a+n4Ea@!5x5pius(?m}++gPYUMD*hZ7sqFZxIn+dk^gG249 z#D!B{;^fKFZ2oGd?x6j%r5jO*oLB_idAfD_y6u{6I8Ovc`YErH*06g>>1l+MlS6iD qw|=?DuA8&usYTNesFRvff-(PSs5P8B9r5-r8=e&W+mNR|Gyeflel=(S 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 30dce8dbdd40cf70ea0449e9d12a09eb7190aeb8..9a0bb049009f6aec51dd04a2ef25db7709c19fd2 100644 GIT binary patch delta 677 zcmX|;&r2IY7>2*pxQR*Bs8s{iQVk*~IryWg&|X6HV!=Y&e_%HmRNS~>-5`RJKVtCU z#Y;;m6zQQ*gnH?{M{j}`>7lpuP&^3Y^U2zeedn2PcIKUTlg|^KO#5;$c_`Ef8biO( zINDDzP#xF}|H3YK4Kwg2UUwdeB z2alm{{0K|%1g79c{Qe3$^nYS@V1fP`rU;cMrTP>w)xb}o2A+)j66BFNhUeTbWhQ#S zhng&eMc9UV@rQW*3na0eLJe>Zd*B7^hrgi){ui$oF;(9ZgZeDMKKK$&!Bv>x{`=yL z@BuP})Kp7TXYXes!%)9Q0}i0aNKN%`!{>kLFZWOyauDgIy(o_~s8qb56-mWM_AHsn zR0BTsimRFt!XOplRhLi=uERoIy%n0_k>K3BEOQ$8z$PxWQHqfV6}Rm*nMRB5S~ zWuVED)-r?jDVvq7aNg{Q;>$L*C5zjurAFr}D{MKf*MltzyM^cj~VHq+Y!9&P-X z)}6fLbr$J*6B2da_H71yzb|gFTQ*f|e#`20k5E2syK)c>h)dOd60CgOFY=>ttf2{9 zv2F5P-X&IeuU_YZ&#c0+Th4ByT2^94Uvydze#>Fswhxz!-1Mv_)UIa>ad2_j<86&?QPWA3)P^OF^|MfIV%#hBf?E_F7G~U{NM5KGP3=*# zj5UWtn>bV2bZ23vTGZVgoz(fm{IbLx1P%PQZld+Y%JnYm{axgMD|O-m%MrbC4)AtU z?AutSpPblRi&SyL=;g`u7}R!YdY5gY8t#d=CZ#1)#i5h#-CVM&UF9~Y_D)ustEywV zUBuM*Us9Uhy+U}mlhjnw+M9Fxbf~Av7zzH9al`60lbOC9vguSEZ`LMF4;Fgh`h!*~ z`KC9mVXN6#6mNtqsJ<$ksBe&+Egp zhv!A9oxhmW*oADNw@~enC50)k>4i(N9ZvLz z#--CeKU`!^)~|3=t7FZOwZ`pvotMv?+?ZNBySB2c=G^q`loUIB+Uo4&Xd?Szh63cW zp)cBBj1 zP{)U+bUh;hq*VK%_$IbIt)LU5rLY?kYiP28XVWwv5NU(ezA5TGlQ2BzfY6srW>Zs0 zfwx1x*mPhLQ^YcF%3!ueFBUqHiPTGNwFv>AnlMxN6v(=&w7t~mrsUVn!s50}Xv#kEWl2WJ0(D)9<0wpy)u;7Zg^gae zbR!`i0`#brtFDXJs-cNnzc~yXJ~Cc&DAfL{&F7#PMj7g2KDs{oIpq$q9a*(#_FHrr zExzAm5JedOtfp028RDV~{D`kJ4D-2H6nk>~TJ$)RsoQ%7tNNH&q12A9H<8@i&=-fU zbcnx#Y|!@C9D&^pu-AKstEh6~n{&jd3r==4%W|T`!y@3UbxBtje6$*6(CF4aoP<*i z<10-XWCgi4NftRvVoX@-g3SiiP@OSdN)0j5>|p9<H6rVm4_M?Ye%m6%Uv=kt3#w%p}hP z2TeR@>K(-h&QaMHb%K)6o376qbxMpgs<;2M4x<-x(yAEukMj+$Cv4q4&*m}YhRm{zLcFbd(GZs;wSo}FKS1qFTQWqm{QY8u|bkg_##n#j7|5bJULG}H{ zzp3!a5Yqq6^`4A~9#p5PbW%7c{yf)|xXCyP)^5I{_-4ffFZ(nxXq5*?J2!6MFm0ux zG+vi&!^uft3qratPj(YxiHaawU;b$CAHpKHM)}q+F>$?|n53l?m%yL*aV_BR9KC?X GUi}xr9i{I8 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 b7ad5be7f8b4cd1be30a08fe55fb9e96f3e10fd5..8ac4d75db911e40c7726c882105da7727d5fbcce 100644 GIT binary patch delta 2342 zcmZ8iZBUd|7`?=PDXf4%EU*No1War|#>f~r+YcrNoTRh?bTU5nb$7>Qm)PY)M|{n! zHcR=qKj4Q>Xl6E&Izt%D*aW4;UWWQ!8f2X;jYp^q2h9-i(vbc&6l2i)8FQihts zHl8qm6Lo+dz&v4E#4>OMfcJi?D)ECg$G6JXLVj zv7%W_gJ*%#Tb<2(A$1gduE+#znaWS4PaOk44g4rkWew7&=6memVxXYntJUHf5V~Br;dO>3H}B+^7;G``qcdJ3^)uo_rt0US|q5s z<1}zOAY*oVIG&mtC@`u*6rr*0-Trm#pyq^1@C(4$u`Rvyskwtza2wFj=&rA6+-39B z?D91QZ1p~ef>A;Q+#a{rDMY3}tHteg_*!hvng*NSy?dcs;ONoWl;!X`Y;}q^pu{&W zzJncj0yVX@ibMVpo+?xH$+Am=JVQIzGkJ-rg&>= zJ&J=Ws?q)S5taQKV|Z`nfP zvJfy?nZR5!lbc0=1%U;C_X1JS9u@-@1|~JaFR%dIKBme-(O~kkxUeX&2rO)%*4OC3 z@&i7n&goHvEYYXP4y@Q@j5FKZ-nvGm9^t`EnWwkP0bR6I^x4Vx#nk0?I211f;m7Vg zitIzEiVbOUBr>+kXqI+kj`SEWs4RZG8vDTQK=c!t2f1`=EBtfdFM%CZ*Vfag=GB`9 z-vN$xKHN#4dJX(E#Aq!bpB~DlPtBWA4pxAH^~D|ZsZ&I=DuNJ4fx~}Yc#a*^7EBlf zUjdeqjao}KZ~#G`xSe;E7Gr&;0`m=Vc z+0Y6qcnUb3b6d*-YVK?fY(@phe}C4Y%i)_)KCD1l?tq^@HQ!S} j52y?^4AZA(cDTSTz^0-XwFpr&Li!*?cYk{1lcxUwL;18S delta 2263 zcmZ9Ne@v8h9LK-p{nF$3As`0_f$cb4@8|vfKF|00 z{`frCmmN`hN;aKdCd7B|JoUl@LWmNx5IMpv0#GGd2xF2E_we&1qET!WmC)+m=Qn6+ zyvC0=ErI6<126&HFD(CKIj-@{f3d;G{D(OB_(eD##uh1yIH3E-BNjd%FRY1J(I&<) z;(0JJb=J)W`jyCMp>tqkRazHw`UK>>+Xn1MzPiMm-iACAs(_{0(sQ=d9*{L`-Oh+U z75xVdnh?Xd*!P-WWdpqx4P(&r;L{5O<;>|5kw>6E11+$}&zznwG!I<>;gO75=JczO z+l@k`gF?^O>zLEWBhO<761Az3i)`RU92(rv$H74O`g-Q{T#0I^3Qm0a_X+0o%)`)L za5%I^pBcSAGw3jo@$~`rr{{}KK&QaAnavr@HD2(IBG7B#R7&10Hqi419s(;kx#Rag znbSLvD^MqB3m)Na=$`#ckd=ZR?+z6(r)U3as0u!+D%ShcBiBSH%*){P%=DX)KiKaIqpMc%~lW%S7V}E+Cgas$q2Fm7o+nCey%w<9q zb2gS>=U??~P!<~sp)8+3u(r0YvDT?JdVK-aFJCki%8iCpS!#6bwxT~PfTtPbVC#53 zcnF190a!7s0Dr6uJWj6&Ru0avUJX%DR@_Q}#l~viuas11GKdAT!Q@~Y+?Xjz4jGbG z>sKO5D8B4n!J5`)r!Uy#SDTzIc-??1`;A$$)ZmbV=>Ck!F26D5$ZEqHxz_A(`5XPt z8nv+ny#wC%U~7vIEnc5b^<(nQ*`cPo25(dQVw1BW=vUER7r+{@U3MGOFb#cR=``A< z%bY2r%;`yZ5iFH6pth-j`!6SyR@rSz_EcjbAIC>=I}Nh|56&Kt48_!F35xX|0UT z#@8=6z#zg=pvIQf@&fXlDO!8V&5?~&~r)qq31x?qXB)-=($3(&|kph zTv-bH({qJb)Cu5Zb4@jKdVOo41>n7+?fSs<+~P`TBN#ob{ivU6UU0^p(4*jk+}nB; z&~s*Ipi^M;OAh_?((@1MD)bNV>TkKl9GD)bTG;V*$p`%7VouKqxS<|!qtLgNxktkV zmm&;31g@>y?_mQyKfnFZb6~tM;R18|704%`mqB^na5HmyK4%_k#iy}yAvDIEp4Fj1 X3qXbIIemrbxk5%ajAuxVe#G(*KjM!J 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();