diff --git a/bin/.bin/nyt b/bin/.bin/nyt index 49ad2e2..59b18fd 100755 --- a/bin/.bin/nyt +++ b/bin/.bin/nyt @@ -1,5 +1,5 @@ #!/bin/bash -BASEDIR="$HOME/var/media/nyt" +BASEDIR="/media/photos/nyt" DATE=$(date +"%Y-%m-%d") TMPFILE=/tmp/nyt.pdf OUTFILE=$BASEDIR/$DATE.jpg @@ -9,8 +9,8 @@ if test -f "$OUTFILE"; then else DATEPATH=$(date +"%Y/%m/%d") curl -o /tmp/nyt.pdf -L https://static01.nyt.com/images/$DATEPATH/nytfrontpage/scan.pdf - convert -density 150 -quality 100 $TMPFILE $OUTFILE + convert -density 150 -quality 75 $TMPFILE $OUTFILE + ln -sf $OUTFILE /var/lib/weewx/www/today.jpg + curl -H "X-Title: NYT headlines today" -d "https://wx.lab.unbl.ink/today.jpg" https://ntfy.unbl.ink/news rm $TMPFILE fi - -sxiv $OUTFILE & diff --git a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/extension.js b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/extension.js index d2f3997..470c96b 100644 --- a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/extension.js +++ b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/extension.js @@ -3,7 +3,10 @@ import Gio from 'gi://Gio'; import GLib from 'gi://GLib'; import GObject from 'gi://GObject'; import St from 'gi://St'; +import Shell from 'gi://Shell'; + +import * as EdgeDragAction from 'resource:///org/gnome/shell/ui/edgeDragAction.js'; import * as Main from 'resource:///org/gnome/shell/ui/main.js'; import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js'; import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js'; @@ -14,6 +17,12 @@ import { Dialog } from 'resource:///org/gnome/shell/ui/dialog.js'; import { Extension, gettext as _ } from 'resource:///org/gnome/shell/extensions/extension.js'; +const State = { + OPENED: 0, + CLOSED: 1, + OPENING: 2, + CLOSING: 3, +}; class KeyboardMenuToggle extends QuickSettings.QuickMenuToggle { static { @@ -61,29 +70,28 @@ class KeyboardMenuToggle extends QuickSettings.QuickMenuToggle { let keycodes; +let layouts; export default class GjsOskExtension extends Extension { - _openKeyboard() { - if (this.Keyboard.state == "closed") { - this.Keyboard.opened = true; - this.Keyboard.open(); + _openKeyboard(instant) { + if (this.Keyboard.state == State.CLOSED) { + this.Keyboard.open(null, !instant ? null : true); } } - _closeKeyboard() { - if (this.Keyboard.state == "opened") { - this.Keyboard.opened = false; - this.Keyboard.close(); + _closeKeyboard(instant) { + if (this.Keyboard.state == State.OPENED) { + this.Keyboard.close(!instant ? null : true); } } - _toggleKeyboard() { + _toggleKeyboard(instant = false) { if (!this.Keyboard.opened) { - this._openKeyboard(); + this._openKeyboard(instant); this.Keyboard.openedFromButton = true; this.Keyboard.closedFromButton = false } else { - this._closeKeyboard(); + this._closeKeyboard(instant); this.Keyboard.openedFromButton = false; this.Keyboard.closedFromButton = true; } @@ -96,12 +104,15 @@ export default class GjsOskExtension extends Extension { this.openInterval = null; } this.openInterval = setInterval(() => { + if (global.stage.key_focus == this.Keyboard && this.Keyboard.prevKeyFocus != null) { + global.stage.key_focus = this.Keyboard.prevKeyFocus + } this.Keyboard.get_parent().set_child_at_index(this.Keyboard, this.Keyboard.get_parent().get_n_children() - 1); this.Keyboard.set_child_at_index(this.Keyboard.box, this.Keyboard.get_n_children() - 1); if (!this.Keyboard.openedFromButton && this.lastInputMethod) { if (Main.inputMethod.currentFocus != null && Main.inputMethod.currentFocus.is_focused() && !this.Keyboard.closedFromButton) { this._openKeyboard(); - } else if (!this.Keyboard.closedFromButton) { + } else if (!this.Keyboard.closedFromButton && !this.Keyboard._dragging) { this._closeKeyboard(); this.Keyboard.closedFromButton = false } else if (Main.inputMethod.currentFocus == null) { @@ -118,12 +129,44 @@ export default class GjsOskExtension extends Extension { enable() { this.settings = this.getSettings(); + this.darkSchemeSettings = this.getSettings("org.gnome.desktop.interface"); + this.inputLanguageSettings = this.getSettings('org.gnome.desktop.input-sources') + this.gnomeKeyboardSettings = this.getSettings('org.gnome.desktop.a11y.applications'); + this.isGnomeKeyboardEnabled = this.gnomeKeyboardSettings.get_boolean('screen-keyboard-enabled'); + this.gnomeKeyboardSettings.set_boolean('screen-keyboard-enabled', false) + this.isGnomeKeyboardEnabledHandler = this.gnomeKeyboardSettings.connect('changed', () => { + this.gnomeKeyboardSettings.set_boolean('screen-keyboard-enabled', false) + }); + this.settings.scheme = "" + if (this.darkSchemeSettings.get_string("color-scheme") == "prefer-dark") + this.settings.scheme = "-dark" this.openBit = this.settings.get_child("indicator"); - let [ok, contents] = GLib.file_get_contents(this.path + '/keycodes.json'); - if (ok) { - keycodes = JSON.parse(contents)[['qwerty', 'azerty', 'dvorak', "qwertz"][this.settings.get_int("lang")]]; + + this.openPrefs = () => { this.openPreferences() } + + let [okL, contentsL] = GLib.file_get_contents(this.path + '/physicalLayouts.json'); + if (okL) { + layouts = JSON.parse(contentsL); } - this.Keyboard = new Keyboard(this.settings); + + let refresh = () => { + if (!Gio.File.new_for_path(this.path + "/keycodes").query_exists(null)) { + Gio.File.new_for_path(this.path + "/keycodes").make_directory(null); + let [status, out, err, code] = GLib.spawn_command_line_sync("tar -Jxf " + this.path + "/keycodes.tar.xz -C " + this.path + "/keycodes") + if (err != "" || code != 0) { + throw new Error(err); + } + } + if (this.Keyboard) + this.Keyboard.destroy(); + let [ok, contents] = GLib.file_get_contents(this.path + '/keycodes/' + KeyboardManager.getKeyboardManager().currentLayout.id + '.json'); + if (ok) { + keycodes = JSON.parse(contents); + } + this.Keyboard = new Keyboard(this.settings, this); + this.Keyboard.refresh = refresh + } + refresh() this._originalLastDeviceIsTouchscreen = KeyboardUI.KeyboardManager.prototype._lastDeviceIsTouchscreen; KeyboardUI.KeyboardManager.prototype._lastDeviceIsTouchscreen = () => { return false }; @@ -142,7 +185,7 @@ export default class GjsOskExtension extends Extension { this._indicator.connect("button-press-event", () => this._toggleKeyboard()); this._indicator.connect("touch-event", (_actor, event) => { - if (event.type() == 11) this._toggleKeyboard() + if (event.type() == Clutter.EventType.TOUCH_END) this._toggleKeyboard() }); Main.panel.addToStatusArea("GJS OSK Indicator", this._indicator); } @@ -151,21 +194,19 @@ export default class GjsOskExtension extends Extension { this._quick_settings_indicator = new QuickSettings.SystemIndicator(); this._quick_settings_indicator.quickSettingsItems.push(this._toggle); Main.panel.statusArea.quickSettings.addExternalIndicator(this._quick_settings_indicator); - - if (this.settings.get_int("enable-tap-gesture") > 0) { - this.open_interval(); - } + this.open_interval(); this.openFromCommandHandler = this.openBit.connect("changed", () => { this.openBit.set_boolean("opened", false) this._toggleKeyboard(); }) - this.settingsHandler = this.settings.connect("changed", key => { + let settingsChanged = () => { + let opened = this.Keyboard.opened + if (this.darkSchemeSettings.get_string("color-scheme") == "prefer-dark") + this.settings.scheme = "-dark" + else + this.settings.scheme = "" this.Keyboard.openedFromButton = false; - let [ok, contents] = GLib.file_get_contents(this.path + '/keycodes.json'); - if (ok) { - keycodes = JSON.parse(contents)[["qwerty", "azerty", "dvorak", "qwertz"][this.settings.get_int("lang")]]; - } - this.Keyboard.refresh(); + refresh() this._toggle._refresh(); if (this.settings.get_boolean("indicator-enabled")) { if (this._indicator != null) { @@ -183,7 +224,7 @@ export default class GjsOskExtension extends Extension { this._indicator.connect("button-press-event", () => this._toggleKeyboard()); this._indicator.connect("touch-event", (_actor, event) => { - if (event.type() == 11) this._toggleKeyboard() + if (event.type() == Clutter.EventType.TOUCH_END) this._toggleKeyboard() }); Main.panel.addToStatusArea("GJS OSK Indicator", this._indicator); } else { @@ -197,13 +238,22 @@ export default class GjsOskExtension extends Extension { clearInterval(this.openInterval); this.openInterval = null; } - if (this.settings.get_int("enable-tap-gesture") > 0) { - this.open_interval(); + this.open_interval(); + if (opened) { + this._toggleKeyboard(true); } - }); + } + this.settingsHandlers = [ + this.settings.connect("changed", settingsChanged), + this.darkSchemeSettings.connect("changed", (_, key) => { if (key == "color-scheme") settingsChanged() }), + this.inputLanguageSettings.connect("changed", settingsChanged) + ]; } disable() { + this.gnomeKeyboardSettings.disconnect(this.isGnomeKeyboardEnabledHandler) + this.gnomeKeyboardSettings.set_boolean('screen-keyboard-enabled', this.isGnomeKeyboardEnabled); + this._quick_settings_indicator.quickSettingsItems.forEach(item => item.destroy()); this._quick_settings_indicator.destroy(); this._quick_settings_indicator = null; @@ -213,8 +263,13 @@ export default class GjsOskExtension extends Extension { this._indicator = null; } this.Keyboard.destroy(); - this.settings.disconnect(this.settingsHandler); + this.settings.disconnect(this.settingsHandlers[0]); + this.darkSchemeSettings.disconnect(this.settingsHandlers[1]) + this.inputLanguageSettings.disconnect(this.settingsHandlers[2]) this.settings = null; + this.darkSchemeSettings = null; + this.inputLanguageSettings = null; + this.gnomeKeyboardSettings = null; this.openBit.disconnect(this.openFromCommandHandler); this.openBit = null; global.stage.disconnect(this.tapConnect) @@ -245,52 +300,107 @@ class Keyboard extends Dialog { GObject.registerClass(this); } - _init(settings) { + _init(settings, extensionObject) { + this.settingsOpenFunction = extensionObject.openPrefs this.inputDevice = Clutter.get_default_backend().get_default_seat().create_virtual_device(Clutter.InputDeviceType.KEYBOARD_DEVICE); - this.startupInterval = setInterval(() => { - this.init = KeyboardManager.getKeyboardManager()._current.id; - this.initLay = Object.keys(KeyboardManager.getKeyboardManager()._layoutInfos); - if (this.initLay == undefined || this.init == undefined || this.inputDevice == undefined) { - return; - } - this.settings = settings; - let monitor = Main.layoutManager.primaryMonitor; - super._init(Main.layoutManager.uiGroup, 'db-keyboard-content'); - this.box = new St.BoxLayout({ - vertical: true + this.settings = settings; + let monitor = Main.layoutManager.primaryMonitor; + super._init(Main.layoutManager.modalDialogGroup, 'db-keyboard-content'); + this.box = new St.Widget({ + layout_manager: new Clutter.GridLayout({ + orientation: Clutter.Orientation.HORIZONTAL, + row_spacing: settings.get_int("border-spacing-px") * 2, + column_spacing: settings.get_int("border-spacing-px") * 2, + }) + }); + this.widthPercent = (monitor.width > monitor.height) ? settings.get_int("landscape-width-percent") / 100 : settings.get_int("portrait-width-percent") / 100; + this.heightPercent = (monitor.width > monitor.height) ? settings.get_int("landscape-height-percent") / 100 : settings.get_int("portrait-height-percent") / 100; + this.buildUI(); + this.draggable = false; + this.add_child(this.box); + this.close(); + this.box.set_name("osk-gjs") + this.mod = []; + this.modBtns = []; + this.capsL = false; + this.shift = false; + this.alt = false; + this.opened = false; + this.state = State.CLOSED; + this.delta = []; + this.checkMonitor(); + this._dragging = false; + let side = null; + switch (this.settings.get_int("default-snap")) { + case 0: + case 1: + case 2: + side = St.Side.TOP; + break; + case 3: + side = St.Side.LEFT; + break; + case 5: + side = St.Side.RIGHT; + break; + case 6: + case 7: + case 8: + side = St.Side.BOTTOM; + break; + } + this.oldBottomDragAction = global.stage.get_action('osk'); + if (this.oldBottomDragAction !== null && this.oldBottomDragAction instanceof Clutter.Action) + global.stage.remove_action(this.oldBottomDragAction); + if (side != null) { + const mode = Shell.ActionMode.ALL & ~Shell.ActionMode.LOCK_SCREEN; + const bottomDragAction = new EdgeDragAction.EdgeDragAction(side, mode); + bottomDragAction.connect('activated', () => { + this.open(true); + this.openedFromButton = true; + this.closedFromButton = false; + this.gestureInProgress = false; }); - this.widthPercent = (monitor.width > monitor.height) ? settings.get_int("landscape-width-percent") / 100 : settings.get_int("portrait-width-percent") / 100; - this.heightPercent = (monitor.width > monitor.height) ? settings.get_int("landscape-height-percent") / 100 : settings.get_int("portrait-height-percent") / 100; - this.buildUI(); - this.draggable = false; - this.add_child(this.box); - this.close(); - this.box.set_name("osk-gjs") - this.mod = []; - this.modBtns = []; - this.capsL = false; - this.shift = false; - this.alt = false; - this.box.add_style_class_name("boxLay"); - this.box.set_style("background-color: rgb(" + settings.get_double("background-r") + "," + settings.get_double("background-g") + "," + settings.get_double("background-b") + ");") - this.opened = false; - this.state = "closed"; - this.delta = []; - this.checkMonitor(); - this._dragging = false; - clearInterval(this.startupInterval); - }, 200); + bottomDragAction.connect('progress', (_action, progress) => { + if (!this.gestureInProgress) + this.open(false) + this.setOpenState(Math.min(Math.max(0, (progress / (side % 2 == 0 ? this.box.height : this.box.width)) * 100), 100)) + this.gestureInProgress = true; + }); + bottomDragAction.connect('gesture-cancel', () => { + if (this.gestureInProgress) { + this.close() + this.openedFromButton = false; + this.closedFromButton = true; + } + this.gestureInProgress = false; + return Clutter.EVENT_PROPAGATE; + }); + global.stage.add_action_full('osk', Clutter.EventPhase.CAPTURE, bottomDragAction); + this.bottomDragAction = bottomDragAction; + } else { + this.bottomDragAction = null; + } + this._oldMaybeHandleEvent = Main.keyboard.maybeHandleEvent + Main.keyboard.maybeHandleEvent = (e) => { + let lastInputMethod = [e.type() == 11, e.type() == 11, e.type() == 7 || e.type() == 11][this.settings.get_int("enable-tap-gesture")] + let ac = global.stage.get_event_actor(e) + if (this.contains(ac)) { + ac.event(e, true); + ac.event(e, false); + return true; + } else if (ac instanceof Clutter.Text && lastInputMethod && !this.opened) { + this.open(); + } + return false + } } destroy() { - if (this.startupInterval !== null) { - clearInterval(this.startupInterval); - this.startupInterval = null; - } - if (this.startupTimeout !== null) { - clearInterval(this.startupTimeout); - this.startupTimeout = null; - } + Main.keyboard.maybeHandleEvent = this._oldMaybeHandleEvent + global.stage.remove_action_by_name('osk') + if (this.oldBottomDragAction !== null && this.oldBottomDragAction instanceof Clutter.Action) + global.stage.add_action_full('osk', Clutter.EventPhase.CAPTURE, this.oldBottomDragAction) if (this.monitorChecker !== null) { clearInterval(this.monitorChecker); this.monitorChecker = null; @@ -307,14 +417,11 @@ class Keyboard extends Dialog { clearTimeout(this.keyTimeout); this.keyTimeout = null; } + this.keymap.disconnect(this.capslockConnect); + this.keymap.disconnect(this.numLockConnect); super.destroy(); } - vfunc_button_press_event() { - this.delta = [Clutter.get_current_event().get_coords()[0] - this.translation_x, Clutter.get_current_event().get_coords()[1] - this.translation_y]; - return this.startDragging(Clutter.get_current_event(), this.delta) - } - startDragging(event, delta) { if (this.draggable) { if (this._dragging) @@ -341,13 +448,6 @@ class Keyboard extends Dialog { } } - vfunc_button_release_event() { - if (this._dragging && !this._grabbedSequence) { - return this.endDragging(); - } - return Clutter.EVENT_PROPAGATE; - } - endDragging() { if (this.draggable) { if (this._dragging) { @@ -374,20 +474,13 @@ class Keyboard extends Dialog { this.emit('drag-end'); this._dragging = false; } + this.draggable = false; return Clutter.EVENT_STOP; } else { return Clutter.EVENT_STOP; } } - vfunc_motion_event() { - let event = Clutter.get_current_event(); - if (this._dragging && !this._grabbedSequence) { - this.motionEvent(event); - } - return Clutter.EVENT_PROPAGATE; - } - motionEvent(event) { if (this.draggable) { let [absX, absY] = event.get_coords(); @@ -398,25 +491,6 @@ class Keyboard extends Dialog { } } - vfunc_touch_event() { - let event = Clutter.get_current_event(); - let sequence = event.get_event_sequence(); - - if (!this._dragging && event.type() == Clutter.EventType.TOUCH_BEGIN) { - this.delta = [event.get_coords()[0] - this.translation_x, event.get_coords()[1] - this.translation_y]; - this.startDragging(event); - return Clutter.EVENT_STOP; - } else if (this._grabbedSequence && sequence.get_slot() === this._grabbedSequence.get_slot()) { - if (event.type() == Clutter.EventType.TOUCH_UPDATE) { - return this.motionEvent(event); - } else if (event.type() == Clutter.EventType.TOUCH_END) { - return this.endDragging(); - } - } - - return Clutter.EVENT_PROPAGATE; - } - snapMovement(xPos, yPos) { let monitor = Main.layoutManager.primaryMonitor let snap_px = this.settings.get_int("snap-spacing-px") @@ -449,79 +523,37 @@ class Keyboard extends Dialog { }, 200); } - refresh() { + setOpenState(percent) { let monitor = Main.layoutManager.primaryMonitor; - this.box.remove_all_children(); - this.box.set_style_class_name("boxLay") - this.widthPercent = (monitor.width > monitor.height) ? this.settings.get_int("landscape-width-percent") / 100 : this.settings.get_int("portrait-width-percent") / 100; - this.heightPercent = (monitor.width > monitor.height) ? this.settings.get_int("landscape-height-percent") / 100 : this.settings.get_int("portrait-height-percent") / 100; - this.buildUI(); - this.draggable = false; - this.keys.forEach(keyholder => { - if (!keyholder.has_style_class_name("move_btn")) { - keyholder.set_opacity(0); - keyholder.ease({ - opacity: 255, - duration: 100, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => { - keyholder.set_z_position(0); - this.box.remove_style_pseudo_class("dragging"); - } - }); - } - }); - if (this.startupTimeout !== null) { - clearInterval(this.startupTimeout); - this.startupTimeout = null; - } - this.startupTimeout = setTimeout(() => { - this.init = KeyboardManager.getKeyboardManager()._current.id; - this.initLay = Object.keys(KeyboardManager.getKeyboardManager()._layoutInfos); - if (this.initLay == undefined || this.init == undefined) { - this.refresh(); - return; - } - this.close(); - }, 200); - this.mod = []; - this.modBtns = []; - this.capsL = false; - this.shift = false; - this.alt = false; - this.box.set_style("background-color: rgb(" + this.settings.get_double("background-r") + "," + this.settings.get_double("background-g") + "," + this.settings.get_double("background-b") + ");") - this.opened = false; - this.state = "closed"; - this.delta = []; - this.dragging = false; + let posX = [this.settings.get_int("snap-spacing-px"), ((monitor.width * .5) - ((this.width * .5))), monitor.width - this.width - this.settings.get_int("snap-spacing-px")][(this.settings.get_int("default-snap") % 3)]; + let posY = [this.settings.get_int("snap-spacing-px"), ((monitor.height * .5) - ((this.height * .5))), monitor.height - this.height - this.settings.get_int("snap-spacing-px")][Math.floor((this.settings.get_int("default-snap") / 3))]; + let mX = [-this.box.width, 0, this.box.width][(this.settings.get_int("default-snap") % 3)]; + let mY = [-this.box.height, 0, this.box.height][Math.floor((this.settings.get_int("default-snap") / 3))] + let [dx, dy] = [posX + mX * ((100 - percent) / 100), posY + mY * ((100 - percent) / 100)] + let op = 255 * (percent / 100); + this.set_translation(dx, dy, 0) + this.box.set_opacity(op) } - open() { - this.inputDevice = Clutter.get_default_backend().get_default_seat().create_virtual_device(Clutter.InputDeviceType.KEYBOARD_DEVICE); - if (this.startupTimeout !== null) { - clearInterval(this.startupTimeout); - this.startupTimeout = null; - } - this.startupTimeout = setTimeout(() => { - this.init = KeyboardManager.getKeyboardManager()._current.id; - this.initLay = Object.keys(KeyboardManager.getKeyboardManager()._layoutInfos); - if (this.initLay == undefined || this.init == undefined) { - this.open(); - return; - } - let newLay = this.initLay; - if (!newLay.includes(["us", "fr+azerty", "us+dvorak", "de+dsb_qwertz"][this.settings.get_int("lang")])) { - newLay.push(["us", "fr+azerty", "us+dvorak", "de+dsb_qwertz"][this.settings.get_int("lang")]); - KeyboardManager.getKeyboardManager().setUserLayouts(newLay); - } - KeyboardManager.getKeyboardManager().apply(["us", "fr+azerty", "us+dvorak", "de+dsb_qwertz"][this.settings.get_int("lang")]); - KeyboardManager.getKeyboardManager().reapply(); - this.state = "opening" - this.box.opacity = 0; + open(noPrep = null, instant = null) { + if (noPrep == null || !noPrep) { + this.prevKeyFocus = global.stage.key_focus + this.inputDevice = Clutter.get_default_backend().get_default_seat().create_virtual_device(Clutter.InputDeviceType.KEYBOARD_DEVICE); + this.state = State.OPENING this.show(); + } + if (noPrep == null || noPrep) { + let monitor = Main.layoutManager.primaryMonitor; + let posX = [this.settings.get_int("snap-spacing-px"), ((monitor.width * .5) - ((this.width * .5))), monitor.width - this.width - this.settings.get_int("snap-spacing-px")][(this.settings.get_int("default-snap") % 3)]; + let posY = [this.settings.get_int("snap-spacing-px"), ((monitor.height * .5) - ((this.height * .5))), monitor.height - this.height - this.settings.get_int("snap-spacing-px")][Math.floor((this.settings.get_int("default-snap") / 3))]; + if (noPrep == null) { + let mX = [-this.box.width, 0, this.box.width][(this.settings.get_int("default-snap") % 3)]; + let mY = [-this.box.height, 0, this.box.height][Math.floor((this.settings.get_int("default-snap") / 3))] + this.set_translation(posX + mX, posY + mY, 0) + } this.box.ease({ opacity: 255, - duration: 100, + duration: instant == null || !instant ? 100 : 0, mode: Clutter.AnimationMode.EASE_OUT_QUAD, onComplete: () => { if (this.stateTimeout !== null) { @@ -529,34 +561,33 @@ class Keyboard extends Dialog { this.stateTimeout = null; } this.stateTimeout = setTimeout(() => { - this.state = "opened" + this.state = State.OPENED }, 500); - let monitor = Main.layoutManager.primaryMonitor; - let posX = [this.settings.get_int("snap-spacing-px"), ((monitor.width * .5) - ((this.width * .5))), monitor.width - this.width - this.settings.get_int("snap-spacing-px")][(this.settings.get_int("default-snap") % 3)]; - let posY = [this.settings.get_int("snap-spacing-px"), ((monitor.height * .5) - ((this.height * .5))), monitor.height - this.height - this.settings.get_int("snap-spacing-px")][Math.floor((this.settings.get_int("default-snap") / 3))]; - this.set_translation(posX, posY, 0); } }); + this.ease({ + translation_x: posX, + translation_y: posY, + duration: instant == null || !instant ? 100 : 0, + mode: Clutter.AnimationMode.EASE_OUT_QUAD + }) this.opened = true; - }, 200); + } } - close() { - if (this.initLay !== undefined && this.init !== undefined) { - KeyboardManager.getKeyboardManager().setUserLayouts(this.initLay); - KeyboardManager.getKeyboardManager().apply(this.init); - } + close(instant = null) { + this.prevKeyFocus = null; let monitor = Main.layoutManager.primaryMonitor; let posX = [this.settings.get_int("snap-spacing-px"), ((monitor.width * .5) - ((this.width * .5))), monitor.width - this.width - this.settings.get_int("snap-spacing-px")][(this.settings.get_int("default-snap") % 3)]; let posY = [this.settings.get_int("snap-spacing-px"), ((monitor.height * .5) - ((this.height * .5))), monitor.height - this.height - this.settings.get_int("snap-spacing-px")][Math.floor((this.settings.get_int("default-snap") / 3))]; - this.state = "closing" + let mX = [-this.box.width, 0, this.box.width][(this.settings.get_int("default-snap") % 3)]; + let mY = [-this.box.height, 0, this.box.height][Math.floor((this.settings.get_int("default-snap") / 3))] + this.state = State.CLOSING this.box.ease({ opacity: 0, - duration: 100, + duration: instant == null || !instant ? 100 : 0, mode: Clutter.AnimationMode.EASE_OUT_QUAD, onComplete: () => { - this.set_translation(0, 0, 0); - this.set_translation(posX, posY, 0); this.opened = false; this.hide(); if (this.stateTimeout !== null) { @@ -564,514 +595,335 @@ class Keyboard extends Dialog { this.stateTimeout = null; } this.stateTimeout = setTimeout(() => { - this.state = "closed" + this.state = State.CLOSED }, 500); }, }); + this.ease({ + translation_x: posX + mX, + translation_y: posY + mY, + duration: instant == null || !instant ? 100 : 0, + mode: Clutter.AnimationMode.EASE_OUT_QUAD + }) this.openedFromButton = false this.releaseAllKeys(); } + vfunc_button_press_event() { + this.delta = [Clutter.get_current_event().get_coords()[0] - this.translation_x, Clutter.get_current_event().get_coords()[1] - this.translation_y]; + return this.startDragging(Clutter.get_current_event(), this.delta) + } + + vfunc_button_release_event() { + if (this._dragging && !this._grabbedSequence) { + return this.endDragging(); + } + return Clutter.EVENT_PROPAGATE; + } + + vfunc_motion_event() { + let event = Clutter.get_current_event(); + if (this._dragging && !this._grabbedSequence) { + this.motionEvent(event); + } + return Clutter.EVENT_PROPAGATE; + } + + vfunc_touch_event() { + let event = Clutter.get_current_event(); + let sequence = event.get_event_sequence(); + + if (!this._dragging && event.type() == Clutter.EventType.TOUCH_BEGIN) { + this.delta = [event.get_coords()[0] - this.translation_x, event.get_coords()[1] - this.translation_y]; + this.startDragging(event, this.delta); + return Clutter.EVENT_STOP; + } else if (this._grabbedSequence && sequence.get_slot() === this._grabbedSequence.get_slot()) { + if (event.type() == Clutter.EventType.TOUCH_UPDATE) { + return this.motionEvent(event); + } else if (event.type() == Clutter.EventType.TOUCH_END) { + return this.endDragging(); + } + } + + return Clutter.EVENT_PROPAGATE; + } + buildUI() { + this.box.set_opacity(0); this.keys = []; + let layoutName = Object.keys(layouts)[this.settings.get_int("layout")]; let monitor = Main.layoutManager.primaryMonitor - var topRowWidth = Math.round((monitor.width - 40 - this.settings.get_int("snap-spacing-px") * 2) * this.widthPercent / 15) - var topRowHeight = Math.round((monitor.height - 140 - this.settings.get_int("snap-spacing-px") * 2) * this.heightPercent / 6) + this.box.width = Math.round((monitor.width - this.settings.get_int("snap-spacing-px") * 2) * (layoutName.includes("Split") ? 1 : this.widthPercent)) + this.box.height = Math.round((monitor.height - this.settings.get_int("snap-spacing-px") * 2) * this.heightPercent) - let row1 = new St.BoxLayout({ - pack_start: true - }); - for (var num in keycodes.row1) { - const i = keycodes.row1[num] - if (i.lowerName == "") { - i.lowerName = i._lowerName; - i.upperName = i._upperName; - } - var w = topRowWidth; - let params = { - height: topRowHeight, - width: w - } - let styleClass = "" - switch (i.lowerName) { - case "delete": - case "backspace": - case "tab": - case "capslock": - case "shift": - case "enter": - case "ctrl": - case "super": - case "alt": - case "space": - case "left": - case "up": - case "down": - case "right": - styleClass = i.lowerName; - i._lowerName = i.lowerName; - i._upperName = i.upperName; - i.lowerName = ""; - i.upperName = ""; - break; - default: - params.label = i.lowerName; - break; - } - row1.add_child(new St.Button(params)); - if (styleClass != "") { - row1.get_children()[num].add_style_class_name(styleClass + "_btn"); - } - i.isMod = false - if ([42, 54, 29, 125, 56, 100, 97, 58].some(j => { return i.code == j })) { - i.isMod = true; - } - row1.get_children()[num].char = i; + const grid = this.box.layout_manager + grid.set_row_homogeneous(true) + grid.set_column_homogeneous(!layoutName.includes("Split")) + + let gridLeft; + let gridRight; + let currentGrid = grid; + let left; + let right; + + if (layoutName.includes("Split")) { + left = new St.Widget({ + layout_manager: new Clutter.GridLayout({ + orientation: Clutter.Orientation.HORIZONTAL, + row_spacing: this.settings.get_int("border-spacing-px") * 2, + column_spacing: this.settings.get_int("border-spacing-px") * 2, + row_homogeneous: true, + column_homogeneous: true + }), + width: Math.round((monitor.width - this.settings.get_int("snap-spacing-px") * 2) * this.widthPercent) / 2 + }) + gridLeft = left.layout_manager; + let middle = new St.Widget({ + width: this.box.width * (1 - this.widthPercent) - 10 + this.settings.get_int("border-spacing-px") + }); + right = new St.Widget({ + layout_manager: new Clutter.GridLayout({ + orientation: Clutter.Orientation.HORIZONTAL, + row_spacing: this.settings.get_int("border-spacing-px") * 2, + column_spacing: this.settings.get_int("border-spacing-px") * 2, + row_homogeneous: true, + column_homogeneous: true + }), + width: Math.round((monitor.width - this.settings.get_int("snap-spacing-px") * 2) * this.widthPercent) / 2 + }) + gridRight = right.layout_manager; + this.box.add_child(left) + this.box.add_child(middle) + this.box.add_child(right) } - this.keys.push.apply(this.keys, row1.get_children()); - row1.add_style_class_name("keysHolder"); - let row2 = new St.BoxLayout({ - pack_start: true - }); - for (var num in keycodes.row2) { - const i = keycodes.row2[num] - if (i.lowerName == "") { - i.lowerName = i._lowerName; - i.upperName = i._upperName; - } - var w; - if (num == 0) { - w = ((row1.width - ((keycodes.row2.length - 2) * ((topRowWidth) + 5))) / 2) * 0.5; - } else if (num == keycodes.row2.length - 1) { - w = ((row1.width - ((keycodes.row2.length - 2) * ((topRowWidth) + 5))) / 2) * 1.5; - } else { - w = (topRowWidth) + 5; - } - let params = { - height: topRowHeight + 20, - width: w - } - let styleClass = "" - switch (i.lowerName) { - case "delete": - case "backspace": - case "tab": - case "capslock": - case "shift": - case "enter": - case "ctrl": - case "super": - case "alt": - case "space": - case "left": - case "up": - case "down": - case "right": - styleClass = i.lowerName; - i._lowerName = i.lowerName; - i._upperName = i.upperName; - i.lowerName = ""; - i.upperName = ""; - break; - default: - params.label = i.lowerName; - break; - } - row2.add_child(new St.Button(params)); - if (styleClass != "") { - row2.get_children()[num].add_style_class_name(styleClass + "_btn"); - } - i.isMod = false - if ([42, 54, 29, 125, 56, 100, 97, 58].some(j => { return i.code == j })) { - i.isMod = true; - } - row2.get_children()[num].char = i; + + this.shiftButtons = []; + + let currentLayout = layouts[layoutName]; + let width = 0; + for (const c of currentLayout[0]) { + width += (Object.hasOwn(c, "width") ? c.width : 1) } - this.keys.push.apply(this.keys, row2.get_children()); - row2.add_style_class_name("keysHolder"); - let row3 = new St.BoxLayout({ - pack_start: true - }); - for (var num in keycodes.row3) { - const i = keycodes.row3[num] - if (i.lowerName == "") { - i.lowerName = i._lowerName; - i.upperName = i._upperName; - } - var w; - if (num == 0) { - w = ((row1.width - ((keycodes.row3.length - 2) * ((topRowWidth) + 5))) / 2) * 1.1; - } else if (num == keycodes.row3.length - 1) { - w = ((row1.width - ((keycodes.row3.length - 2) * ((topRowWidth) + 5))) / 2) * 0.9; - } else { - w = (topRowWidth) + 5; - } - let params = { - height: topRowHeight + 20, - width: w - } - let styleClass = "" - switch (i.lowerName) { - case "delete": - case "backspace": - case "tab": - case "capslock": - case "shift": - case "enter": - case "ctrl": - case "super": - case "alt": - case "space": - case "left": - case "up": - case "down": - case "right": - styleClass = i.lowerName; - i._lowerName = i.lowerName; - i._upperName = i.upperName; - i.lowerName = ""; - i.upperName = ""; - break; - default: - params.label = i.lowerName; - break; - } - row3.add_child(new St.Button(params)); - if (styleClass != "") { - row3.get_children()[num].add_style_class_name(styleClass + "_btn"); - } - i.isMod = false - if ([42, 54, 29, 125, 56, 100, 97, 58].some(j => { return i.code == j })) { - i.isMod = true; - } - row3.get_children()[num].char = i; - } - this.keys.push.apply(this.keys, row3.get_children()); - row3.add_style_class_name("keysHolder"); - let row4 = new St.BoxLayout({ - pack_start: true - }); - for (var num in keycodes.row4) { - const i = keycodes.row4[num] - if (i.lowerName == "") { - i.lowerName = i._lowerName; - i.upperName = i._upperName; - } - var w; - if (num == 0 || num == keycodes.row4.length - 1) { - w = ((row1.width - ((keycodes.row4.length - 2) * ((topRowWidth) + 5))) / 2); - } else { - w = (topRowWidth) + 5; - } - let params = { - height: topRowHeight + 20, - width: w - } - let styleClass = "" - switch (i.lowerName) { - case "delete": - case "backspace": - case "tab": - case "capslock": - case "shift": - case "enter": - case "ctrl": - case "super": - case "alt": - case "space": - case "left": - case "up": - case "down": - case "right": - styleClass = i.lowerName; - i._lowerName = i.lowerName; - i._upperName = i.upperName; - i.lowerName = ""; - i.upperName = ""; - break; - default: - params.label = i.lowerName; - break; - } - row4.add_child(new St.Button(params)); - if (styleClass != "") { - row4.get_children()[num].add_style_class_name(styleClass + "_btn"); - } - i.isMod = false - if ([42, 54, 29, 125, 56, 100, 97, 58].some(j => { return i.code == j })) { - i.isMod = true; - } - row4.get_children()[num].char = i; - } - this.keys.push.apply(this.keys, row4.get_children()); - row4.add_style_class_name("keysHolder"); - let row5 = new St.BoxLayout({ - pack_start: true - }); - for (var num in keycodes.row5) { - const i = keycodes.row5[num] - if (i.lowerName == "") { - i.lowerName = i._lowerName; - i.upperName = i._upperName; - } - var w; - if (num == 0 || num == keycodes.row5.length - 1) { - w = ((row1.width - ((keycodes.row5.length - 2) * ((topRowWidth) + 5))) / 2); - } else { - w = (topRowWidth) + 5; - } - let params = { - height: topRowHeight + 20, - width: w - } - let styleClass = "" - switch (i.lowerName) { - case "delete": - case "backspace": - case "tab": - case "capslock": - case "shift": - case "enter": - case "ctrl": - case "super": - case "alt": - case "space": - case "left": - case "up": - case "down": - case "right": - styleClass = i.lowerName; - i._lowerName = i.lowerName; - i._upperName = i.upperName; - i.lowerName = ""; - i.upperName = ""; - break; - default: - params.label = i.lowerName; - break; - } - row5.add_child(new St.Button(params)); - if (styleClass != "") { - row5.get_children()[num].add_style_class_name(styleClass + "_btn"); - } - i.isMod = false - if ([42, 54, 29, 125, 56, 100, 97, 58].some(j => { return i.code == j })) { - i.isMod = true; - } - row5.get_children()[num].char = i; - } - this.keys.push.apply(this.keys, row5.get_children()); - row5.add_style_class_name("keysHolder"); - let row6 = new St.BoxLayout({ - pack_start: true - }); - for (var num in keycodes.row6) { - const i = keycodes.row6[num] - if (i.lowerName == "") { - i.lowerName = i._lowerName; - i.upperName = i._upperName; - } - var w; - if (num == 3) { - w = ((row1.width - ((keycodes.row6.length + 1) * ((topRowWidth) + 5)))); - let params = { - height: topRowHeight + 20, - width: w - } - let styleClass = "" - switch (i.lowerName) { - case "delete": - case "backspace": - case "tab": - case "capslock": - case "shift": - case "enter": - case "ctrl": - case "super": - case "alt": - case "space": - case "left": - case "up": - case "down": - case "right": - styleClass = i.lowerName; - i._lowerName = i.lowerName; - i._upperName = i.upperName; - i.lowerName = ""; - i.upperName = ""; - break; - default: - params.label = i.lowerName; - break; - } - row6.add_child(new St.Button(params)); - if (styleClass != "") { - row6.get_children()[num].add_style_class_name(styleClass + "_btn"); - } - i.isMod = false - if ([42, 54, 29, 125, 56, 100, 97, 58].some(j => { return i.code == j })) { - i.isMod = true; - } - row6.get_children()[num].char = i; - this.keys.push(row6.get_children()[num]); - } else if (num == keycodes.row6.length - 1) { - var gbox = new St.BoxLayout({ - pack_start: true - }); - var btn1 = new St.Button(); - btn1.add_style_class_name("left_btn"); - gbox.add_child(btn1); - var vbox = new St.BoxLayout({ - vertical: true - }); - var btn2 = new St.Button(); - btn2.add_style_class_name("up_btn"); - var btn3 = new St.Button(); - btn3.add_style_class_name("down_btn"); - vbox.add_child(btn2); - vbox.add_child(btn3); - gbox.add_child(vbox); - var btn4 = new St.Button(); - btn4.add_style_class_name("right_btn"); - gbox.add_child(btn4); - var btn5 = new St.Button(); - btn5.add_style_class_name("move_btn") - var btn6 = new St.Button(); - btn6.add_style_class_name("close_btn") - if (this.settings.get_boolean("enable-drag")) { - gbox.add_child(btn5); - } - gbox.add_child(btn6); - btn5.connect("clicked", () => { - if (this.settings.get_boolean("enable-drag")) { - this.draggable = !this.draggable; - this.keys.forEach(keyholder => { - if (!keyholder.has_style_class_name("move_btn")) { - keyholder.set_opacity(this.draggable ? 255 : 0); - keyholder.ease({ - opacity: this.draggable ? 0 : 255, - duration: 100, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => { - keyholder.set_z_position(this.draggable ? -10000000000000000000000000000 : 0); - if (this.draggable) { - this.box.add_style_pseudo_class("dragging"); - } else { - this.box.remove_style_pseudo_class("dragging"); - } - } - }); - } - }); - btn5.ease({ - width: btn5.width * (this.draggable ? 2 : 0.5), - duration: 100, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => { } - }) - btn6.ease({ - width: this.draggable ? 0 : btn5.width / 2, - duration: 100, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => { } - }) + let rowSize; + let halfSize; + let r = 0; + let c; + const doAddKey = (keydef) => { + const i = Object.hasOwn(keydef, "key") ? keycodes[keydef.key] : Object.hasOwn(keydef, "split") ? "split" : "empty space"; + if (i != null && typeof i !== 'string') { + if (i.layers.default == null) { + for (var key of Object.keys(i.layers)) { + i.layers[key] = i.layers["_" + key] } - }) - btn6.connect("clicked", () => { this.close(); this.closedFromButton = true; }); - btn1.char = (keycodes.row6[keycodes.row6.length - 1])[0] - btn2.char = (keycodes.row6[keycodes.row6.length - 1])[1] - btn3.char = (keycodes.row6[keycodes.row6.length - 1])[2] - btn4.char = (keycodes.row6[keycodes.row6.length - 1])[3] - btn1.char.lowerName = "" - btn1.char.upperName = "" - btn2.char.lowerName = "" - btn2.char.upperName = "" - btn3.char.lowerName = "" - btn3.char.upperName = "" - btn4.char.lowerName = "" - btn4.char.upperName = "" - btn1.width = Math.round((((topRowWidth) + 5)) * (2 / 3)); - btn1.height = topRowHeight + 20; - btn2.width = Math.round((((topRowWidth) + 5)) * (2 / 3)); - btn3.width = Math.round((((topRowWidth) + 5)) * (2 / 3)); - btn4.width = Math.round((((topRowWidth) + 5)) * (2 / 3)); - btn4.height = topRowHeight + 20; - btn2.height = (topRowHeight + 20) / 2; - btn3.height = (topRowHeight + 20) / 2; - btn5.width = Math.round((topRowWidth / 2) + 2); - btn6.width = this.settings.get_boolean("enable-drag") ? Math.round((topRowWidth / 2) + 2) : Math.round((topRowWidth) + 4); - btn5.height = topRowHeight + 20; - btn6.height = topRowHeight + 20; - btn1.add_style_class_name('dr-b'); - btn2.add_style_class_name('dr-b'); - btn3.add_style_class_name('dr-b'); - btn4.add_style_class_name('dr-b'); - btn5.add_style_class_name('dr-b'); - btn6.add_style_class_name('dr-b'); - this.keys.push.apply(this.keys, [btn1, btn2, btn3, btn4, btn5, btn6]); - gbox.add_style_class_name('keyActionBtns'); - row6.add_child(gbox); - } else { - w = (topRowWidth) + 5; + } let params = { - height: topRowHeight + 20, - width: w + x_expand: true, + y_expand: true } - let styleClass = "" - switch (i.lowerName) { - case "delete": - case "backspace": - case "tab": - case "capslock": - case "shift": - case "enter": - case "ctrl": - case "super": - case "alt": - case "space": - case "left": - case "up": - case "down": - case "right": - styleClass = i.lowerName; - i._lowerName = i.lowerName; - i._upperName = i.upperName; - i.lowerName = ""; - i.upperName = ""; - break; - default: - params.label = i.lowerName; - break; + + let iconKeys = ["left", "up", "right", "down", "space"] + if (this.settings.get_boolean("show-icons")) { + iconKeys = ["left", "up", "right", "down", "backspace", "tab", "capslock", "shift", "enter", "ctrl", "super", "alt", "space"] } - row6.add_child(new St.Button(params)); - if (styleClass != "") { - row6.get_children()[num].add_style_class_name(styleClass + "_btn"); + if (iconKeys.some(j => { return i.layers.default.toLowerCase() == j })) { + params.style_class = i.layers.default.toLowerCase() + "_btn" + for (var key of Object.keys(i.layers)) { + i.layers["_" + key] = i.layers[key] + i.layers[key] = null + } + } else { + params.label = i.layers.default } i.isMod = false - if ([42, 54, 29, 125, 56, 100, 97, 58].some(j => { return i.code == j })) { + if ([42, 54, 29, 125, 56, 100, 97, 58, 69].some(j => { return i.code == j })) { i.isMod = true; } - row6.get_children()[num].char = i; - this.keys.push(row6.get_children()[num]); + const keyBtn = new St.Button(params) + keyBtn.add_style_class_name('key') + keyBtn.char = i + if (i.code == 58) { + this.keymap = Clutter.get_default_backend().get_default_seat().get_keymap() + this.capslockConnect = this.keymap.connect("state-changed", (a, e) => { + this.setCapsLock(keyBtn, this.keymap.get_caps_lock_state()) + }) + } else if (i.code == 69) { + this.keymap = Clutter.get_default_backend().get_default_seat().get_keymap() + this.numLockConnect = this.keymap.connect("state-changed", (a, e) => { + this.setNumLock(keyBtn, this.keymap.get_num_lock_state()) + }) + } else if (i.code == 42 || i.code == 54) { + this.shiftButtons.push(keyBtn) + } + currentGrid.attach(keyBtn, c, 6 + r, (Object.hasOwn(keydef, "width") ? keydef.width : 1) * 8, r == 0 ? 6 : (Object.hasOwn(keydef, "height") ? keydef.height : 1) * 8) + keyBtn.visible = true + c += (Object.hasOwn(keydef, "width") ? keydef.width : 1) * 8 + this.keys.push(keyBtn) + } else if (i == "empty space") { + c += (Object.hasOwn(keydef, "width") ? keydef.width : 1) * 8 + } else if (i == "split") { + currentGrid = gridRight + const size = c + if (!halfSize) halfSize = size } } - row6.add_style_class_name("keysHolder"); - - this.box.add_child(row1); - this.box.add_child(row2); - this.box.add_child(row3); - this.box.add_child(row4); - this.box.add_child(row5); - this.box.add_child(row6); - if (this.lightOrDark(this.settings.get_double("background-r"), this.settings.get_double("background-g"), this.settings.get_double("background-b"))) { - this.box.add_style_class_name("inverted"); - } else { - this.box.add_style_class_name("regular"); + + for (const kRow of currentLayout) { + c = 0; + if (layoutName.includes("Split")) { + currentGrid = gridLeft; + } + for (const keydef of kRow) { + if (keydef instanceof Array) { + keydef.forEach(i => {doAddKey(i); r += 4; c -= 8}); + c += 8; + r -= 8; + } else { + doAddKey(keydef) + } + } + const size = c; + if (!rowSize) rowSize = size; + r += r == 0 ? 6 : 8 } + + if (left != null) { + this.set_reactive(false) + left.add_style_class_name("boxLay"); + left.set_style("background-color: rgba(" + this.settings.get_double("background-r" + this.settings.scheme) + "," + this.settings.get_double("background-g" + this.settings.scheme) + "," + this.settings.get_double("background-b" + this.settings.scheme) + ", " + this.settings.get_double("background-a" + this.settings.scheme) + ");") + right.add_style_class_name("boxLay"); + right.set_style("background-color: rgba(" + this.settings.get_double("background-r" + this.settings.scheme) + "," + this.settings.get_double("background-g" + this.settings.scheme) + "," + this.settings.get_double("background-b" + this.settings.scheme) + ", " + this.settings.get_double("background-a" + this.settings.scheme) + ");") + if (this.lightOrDark(this.settings.get_double("background-r" + this.settings.scheme), this.settings.get_double("background-g" + this.settings.scheme), this.settings.get_double("background-b" + this.settings.scheme))) { + left.add_style_class_name("inverted"); + right.add_style_class_name("inverted"); + } else { + left.add_style_class_name("regular"); + right.add_style_class_name("regular"); + } + const settingsBtn = new St.Button({ + x_expand: true, + y_expand: true + }) + settingsBtn.add_style_class_name("settings_btn") + settingsBtn.add_style_class_name("key") + settingsBtn.connect("clicked", () => { + this.settingsOpenFunction(); + }) + gridLeft.attach(settingsBtn, 0, 0, 8, 5) + this.keys.push(settingsBtn) + + const closeBtn = new St.Button({ + x_expand: true, + y_expand: true + }) + closeBtn.add_style_class_name("close_btn") + closeBtn.add_style_class_name("key") + closeBtn.connect("clicked", () => { + this.close(); + this.closedFromButton = true; + }) + gridRight.attach(closeBtn, (rowSize - 8), 0, 8, 5) + this.keys.push(closeBtn) + + let moveHandleLeft = new St.Button({ + x_expand: true, + y_expand: true + }) + moveHandleLeft.add_style_class_name("moveHandle") + moveHandleLeft.set_style("font-size: " + this.settings.get_int("font-size-px") + "px; border-radius: " + (this.settings.get_boolean("round-key-corners") ? "5px;" : "0;") + "background-size: " + this.settings.get_int("font-size-px") + "px;"); + if (this.lightOrDark(this.settings.get_double("background-r" + this.settings.scheme), this.settings.get_double("background-g" + this.settings.scheme), this.settings.get_double("background-b" + this.settings.scheme))) { + moveHandleLeft.add_style_class_name("inverted"); + } else { + moveHandleLeft.add_style_class_name("regular"); + } + + moveHandleLeft.connect("event", (actor, event) => { + if (event.type() == Clutter.EventType.BUTTON_PRESS || event.type() == Clutter.EventType.TOUCH_BEGIN) { + this.draggable = this.settings.get_boolean("enable-drag"); + } + this.event(event, false) + }) + gridLeft.attach(moveHandleLeft, 8, 0, (halfSize - 8), 5) + + let moveHandleRight = new St.Button({ + x_expand: true, + y_expand: true + }) + moveHandleRight.add_style_class_name("moveHandle") + moveHandleRight.set_style("font-size: " + this.settings.get_int("font-size-px") + "px; border-radius: " + (this.settings.get_boolean("round-key-corners") ? "5px;" : "0;") + "background-size: " + this.settings.get_int("font-size-px") + "px;"); + if (this.lightOrDark(this.settings.get_double("background-r" + this.settings.scheme), this.settings.get_double("background-g" + this.settings.scheme), this.settings.get_double("background-b" + this.settings.scheme))) { + moveHandleRight.add_style_class_name("inverted"); + } else { + moveHandleRight.add_style_class_name("regular"); + } + + moveHandleRight.connect("event", (actor, event) => { + if (event.type() == Clutter.EventType.BUTTON_PRESS || event.type() == Clutter.EventType.TOUCH_BEGIN) { + this.draggable = this.settings.get_boolean("enable-drag"); + } + this.event(event, false) + }) + gridRight.attach(moveHandleRight, (rowSize - halfSize), 0, (rowSize - halfSize - 4), 5) + gridLeft.attach(new St.Widget({x_expand: true, y_expand: true}), 0, 5, halfSize, 1) + gridRight.attach(new St.Widget({x_expand: true, y_expand: true}), (rowSize - halfSize), 5, (rowSize - halfSize + 4), 1) + } else { + this.box.add_style_class_name("boxLay"); + this.box.set_style("background-color: rgba(" + this.settings.get_double("background-r" + this.settings.scheme) + "," + this.settings.get_double("background-g" + this.settings.scheme) + "," + this.settings.get_double("background-b" + this.settings.scheme) + ", " + this.settings.get_double("background-a" + this.settings.scheme) + ");") + if (this.lightOrDark(this.settings.get_double("background-r" + this.settings.scheme), this.settings.get_double("background-g" + this.settings.scheme), this.settings.get_double("background-b" + this.settings.scheme))) { + this.box.add_style_class_name("inverted"); + } else { + this.box.add_style_class_name("regular"); + } + + const settingsBtn = new St.Button({ + x_expand: true, + y_expand: true + }) + settingsBtn.add_style_class_name("settings_btn") + settingsBtn.add_style_class_name("key") + settingsBtn.connect("clicked", () => { + this.settingsOpenFunction(); + }) + grid.attach(settingsBtn, 0, 0, 8, 5) + this.keys.push(settingsBtn) + + const closeBtn = new St.Button({ + x_expand: true, + y_expand: true + }) + closeBtn.add_style_class_name("close_btn") + closeBtn.add_style_class_name("key") + closeBtn.connect("clicked", () => { + this.close(); + this.closedFromButton = true; + }) + grid.attach(closeBtn, (rowSize - 8), 0, 8, 5) + this.keys.push(closeBtn) + + let moveHandle= new St.Button({ + x_expand: true, + y_expand: true + }) + moveHandle.add_style_class_name("moveHandle") + moveHandle.set_style("font-size: " + this.settings.get_int("font-size-px") + "px; border-radius: " + (this.settings.get_boolean("round-key-corners") ? "5px;" : "0;") + "background-size: " + this.settings.get_int("font-size-px") + "px;"); + if (this.lightOrDark(this.settings.get_double("background-r" + this.settings.scheme), this.settings.get_double("background-g" + this.settings.scheme), this.settings.get_double("background-b" + this.settings.scheme))) { + moveHandle.add_style_class_name("inverted"); + } else { + moveHandle.add_style_class_name("regular"); + } + + moveHandle.connect("event", (actor, event) => { + if (event.type() == Clutter.EventType.BUTTON_PRESS || event.type() == Clutter.EventType.TOUCH_BEGIN) { + this.draggable = this.settings.get_boolean("enable-drag"); + } + this.event(event, false) + }) + grid.attach(moveHandle, 8, 0, (rowSize - 16), 5) + grid.attach(new St.Widget({x_expand: true, y_expand: true}), 0, 5, rowSize, 1) + } + this.keys.forEach(item => { - item.set_scale((item.width - this.settings.get_int("border-spacing-px") * 2) / item.width, (item.height - this.settings.get_int("border-spacing-px") * 2) / item.height); - item.set_style("font-size: " + this.settings.get_int("font-size-px") + "px; border-radius: " + (this.settings.get_boolean("round-key-corners") ? "5px;" : "0;") + "background-size: " + this.settings.get_int("font-size-px") + "px;"); - if (this.lightOrDark(this.settings.get_double("background-r"), this.settings.get_double("background-g"), this.settings.get_double("background-b"))) { + item.set_style("font-size: " + this.settings.get_int("font-size-px") + "px; border-radius: " + (this.settings.get_boolean("round-key-corners") ? "5px;" : "0;") + "background-size: " + this.settings.get_int("font-size-px") + "px; font-weight: " + (this.settings.get_boolean("font-bold") ? "bold" : "normal") + ";"); + if (this.lightOrDark(this.settings.get_double("background-r" + this.settings.scheme), this.settings.get_double("background-g" + this.settings.scheme), this.settings.get_double("background-b" + this.settings.scheme))) { item.add_style_class_name("inverted"); } else { item.add_style_class_name("regular"); @@ -1159,11 +1011,11 @@ class Keyboard extends Dialog { let releaseEv = () => { item.remove_style_pseudo_class("pressed") item.ease({ - scale_x: (item.width - this.settings.get_int("border-spacing-px") * 2) / item.width, - scale_y: (item.height - this.settings.get_int("border-spacing-px") * 2) / item.height, + scale_x: 1, + scale_y: 1, duration: 100, mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => { item.set_scale((item.width - this.settings.get_int("border-spacing-px") * 2) / item.width, (item.height - this.settings.get_int("border-spacing-px") * 2) / item.height); } + onComplete: () => { item.set_scale(1, 1); } }) if (item.button_pressed !== null) { clearTimeout(item.button_pressed) @@ -1218,14 +1070,14 @@ class Keyboard extends Dialog { function traverse(obj) { for (let key in obj) { - if (obj.hasOwnProperty(key)) { - if (key === "code") { - instances.push(obj[key]); - } else if (typeof obj[key] === 'object' && obj[key] !== null) { - traverse(obj[key]); + if (obj.hasOwnProperty(key)) { + if (key === "code") { + instances.push(obj[key]); + } else if (typeof obj[key] === 'object' && obj[key] !== null) { + traverse(obj[key]); + } } } - } } traverse(keycodes); @@ -1264,30 +1116,19 @@ class Keyboard extends Dialog { } }, 100); } catch (err) { - let source = new imports.ui.messageTray.SystemNotificationSource(); - source.connect('destroy', () => { - source = null; - }) - Main.messageTray.add(source); - let notification = new imports.ui.messageTray.Notification(source, "GJS-OSK: An unknown error occured", "Please report this bug to the Issues page:\n\n" + err + "\n\nKeys Pressed: " + keys) - notification.setTransient(false); - notification.setResident(false); - source.showNotification(notification); - notification.connect("activated", () => { - sendCommand("xdg-open https://github.com/Vishram1123/gjs-osk/issues"); - }); + throw new Error("GJS-OSK: An unknown error occured. Please report this bug to the Issues page (https://github.com/Vishram1123/gjs-osk/issues):\n\n" + err + "\n\nKeys Pressed: " + keys); } } decideMod(i, mBtn) { - if (i.code == 29 || i.code == 97 || i.code == 125) { + if (i.code == 29 || i.code == 56 || i.code == 97 || i.code == 125) { this.setNormMod(mBtn); - } else if (i.code == 56 || i.code == 100) { + } else if (i.code == 100) { this.setAlt(mBtn); } else if (i.code == 42 || i.code == 54) { this.setShift(mBtn); - } else if (i.code == 58) { - this.setCapsLock(mBtn); + } else if (i.code == 58 || i.code == 69) { + this.sendKey([mBtn.char.code]); } else { this.mod.push(i.code); this.sendKey(this.mod); @@ -1295,161 +1136,84 @@ class Keyboard extends Dialog { this.modBtns.forEach(button => { button.remove_style_class_name("selected"); }); + this.shiftButtons.forEach(i => { i.remove_style_class_name("selected") }) this.resetAllMod(); this.modBtns = []; } } - setCapsLock(button) { - if (!this.capsL) { + setCapsLock(button, state) { + if (state) { button.add_style_class_name("selected"); this.capsL = true; - this.keys.forEach(key => { - if (this.shift && key.char != undefined) { - if (key.char.letter == "primary") { - key.label = key.label.toLowerCase(); - } else if (key.char.letter == "pseudo") { - key.label = key.char.upperName; - } else if (key.char.letter == undefined) { - key.label = key.char.upperName; - } - } else if (key.char != undefined && key.char.letter != undefined) { - key.label = key.label.toUpperCase(); - } - }); } else { button.remove_style_class_name("selected"); this.capsL = false; - this.keys.forEach(key => { - if (this.shift && key.char != undefined) { - if (key.char.letter == "primary") { - key.label = key.label.toUpperCase(); - } else if (key.char.letter == "pseudo") { - key.label = key.char.upperName; - } else if (key.char.letter == undefined) { - key.label = key.char.upperName; - } - } else if (key.char != undefined && key.char.letter != undefined) { - key.label = key.label.toLowerCase(); - } - }); } - this.sendKey([button.char.code]); + this.updateKeyLabels(); + } + + setNumLock(button, state) { + if (state) { + button.add_style_class_name("selected"); + this.numsL = true; + } else { + button.remove_style_class_name("selected"); + this.numsL = false; + } + this.updateKeyLabels(); } setAlt(button) { + this.alt = !this.alt; + this.updateKeyLabels(); if (!this.alt) { - this.alt = true; - this.keys.forEach(key => { - if (!this.shift && key.char != undefined) { - if (key.char.altName != "") { - key.label = key.char.altName; - } - } - }); - } else { - this.alt = false; - this.keys.forEach(key => { - if (!this.shift && key.char != undefined) { - if (key.char.altName != "" && this.capsL && (key.char.letter == "primary" || key.char.letter == "pseudo")) { - key.label = key.char.lowerName.toUpperCase(); - } else if (key.char.altName != "" && this.capsL) { - key.label = key.char.lowerName; - } else if (key.char.altName != "" && !this.capsL) { - key.label = key.char.lowerName; - } - } - }); this.sendKey([button.char.code]); } this.setNormMod(button); } setShift(button) { + this.shift = !this.shift; + this.updateKeyLabels(); if (!this.shift) { - this.shift = true; - this.keys.forEach(key => { - if (this.capsL && key.char != undefined) { - if (key.char.letter == "primary") { - key.label = key.char.lowerName.toLowerCase(); - } else if (key.char.letter == "pseudo" || key.char.letter == undefined) { - key.label = key.char.upperName; - } - } else if (key.char != undefined) { - key.label = key.char.upperName; - } - }); - } else { - this.shift = false; - this.keys.forEach(key => { - if (this.capsL && key.char != undefined) { - if (this.alt && key.char.altName != "") { - key.label = key.char.altName; - } else if (key.char.letter != undefined) { - key.label = key.char.lowerName.toUpperCase(); - } else if (key.char.letter == undefined) { - key.label = key.char.lowerName; - } - } else if (key.char != undefined) { - if (this.alt && key.char.altName != "") { - key.label = key.char.altName; - } else { - key.label = key.char.lowerName; - } - } - }); this.sendKey([button.char.code]); + this.shiftButtons.forEach(i => { i.remove_style_class_name("selected") }) + } else { + this.shiftButtons.forEach(i => { i.add_style_class_name("selected") }) } this.setNormMod(button); } + updateKeyLabels() { + this.keys.forEach(key => { + if (key.char != undefined) { + let layer = (this.alt ? 'alt' : '') + (this.shift ? 'shift' : '') + (this.numsL ? 'num' : '') + (this.capsL ? 'caps' : '') + (this.numsL || this.capsL ? 'lock' : '') + if (layer == '') layer = 'default' + key.label = key.char.layers[layer]; + } + }); + } + + setNormMod(button) { if (this.mod.includes(button.char.code)) { this.mod.splice(this.mod.indexOf(button.char.code), this.mod.indexOf(button.char.code) + 1); - button.remove_style_class_name("selected"); + if (!(button.char.code == 42) && !(button.char.code == 54)) + button.remove_style_class_name("selected"); this.modBtns.splice(this.modBtns.indexOf(button), this.modBtns.indexOf(button) + 1); this.sendKey([button.char.code]); } else { - button.add_style_class_name("selected"); + if (!(button.char.code == 42) && !(button.char.code == 54)) + button.add_style_class_name("selected"); this.mod.push(button.char.code); this.modBtns.push(button); } } resetAllMod() { - if (this.shift) { - this.shift = false; - this.keys.forEach(key => { - if (this.capsL && key.char != undefined) { - if (this.alt && key.char.altName != "") { - key.label = key.char.altName; - } else if (key.char.letter != undefined) { - key.label = key.char.lowerName.toUpperCase(); - } else if (key.char.letter == undefined) { - key.label = key.char.lowerName; - } - } else if (key.char != undefined) { - if (this.alt && key.char.altName != "") { - key.label = key.char.altName; - } else { - key.label = key.char.lowerName; - } - } - }); - } - if (this.alt) { - this.alt = false; - this.keys.forEach(key => { - if (!this.shift && key.char != undefined) { - if (key.char.altName != "" && this.capsL && (key.char.letter == "primary" || key.char.letter == "pseudo")) { - key.label = key.char.lowerName.toUpperCase(); - } else if (key.char.altName != "" && this.capsL) { - key.label = key.char.lowerName; - } else if (key.char.altName != "" && !this.capsL) { - key.label = key.char.lowerName; - } - } - }); - } + this.shift = false; + this.alt = false; + this.updateKeyLabels() } -}; +} diff --git a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/keycodes.json b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/keycodes.json deleted file mode 100644 index 4ff54b4..0000000 --- a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/keycodes.json +++ /dev/null @@ -1,2062 +0,0 @@ -{ - "qwerty": { - "row1": [ - { - "code": 1, - "lowerName": "esc", - "upperName": "esc", - "altName": "" - }, - { - "code": 59, - "lowerName": "F1", - "upperName": "F1", - "altName": "" - }, - { - "code": 60, - "lowerName": "F2", - "upperName": "F2", - "altName": "" - }, - { - "code": 61, - "lowerName": "F3", - "upperName": "F3", - "altName": "" - }, - { - "code": 62, - "lowerName": "F4", - "upperName": "F4", - "altName": "" - }, - { - "code": 63, - "lowerName": "F5", - "upperName": "F5", - "altName": "" - }, - { - "code": 64, - "lowerName": "F6", - "upperName": "F6", - "altName": "" - }, - { - "code": 65, - "lowerName": "F7", - "upperName": "F7", - "altName": "" - }, - { - "code": 66, - "lowerName": "F8", - "upperName": "F8", - "altName": "" - }, - { - "code": 67, - "lowerName": "F9", - "upperName": "F9", - "altName": "" - }, - { - "code": 68, - "lowerName": "F10", - "upperName": "F10", - "altName": "" - }, - { - "code": 87, - "lowerName": "F11", - "upperName": "F11", - "altName": "" - }, - { - "code": 88, - "lowerName": "F12", - "upperName": "F12", - "altName": "" - }, - { - "code": 210, - "lowerName": "PrtSc", - "upperName": "PrtSc", - "altName": "" - }, - { - "code": 111, - "lowerName": "delete", - "upperName": "delete", - "altName": "" - } - ], - "row2": [ - { - "code": 41, - "lowerName": "`", - "upperName": "~", - "altName": "" - }, - { - "code": 2, - "lowerName": "1", - "upperName": "!", - "altName": "" - }, - { - "code": 3, - "lowerName": "2", - "upperName": "@", - "altName": "" - }, - { - "code": 4, - "lowerName": "3", - "upperName": "#", - "altName": "" - }, - { - "code": 5, - "lowerName": "4", - "upperName": "$", - "altName": "" - }, - { - "code": 6, - "lowerName": "5", - "upperName": "%", - "altName": "" - }, - { - "code": 7, - "lowerName": "6", - "upperName": "^", - "altName": "" - }, - { - "code": 8, - "lowerName": "7", - "upperName": "&", - "altName": "" - }, - { - "code": 9, - "lowerName": "8", - "upperName": "*", - "altName": "" - }, - { - "code": 10, - "lowerName": "9", - "upperName": "(", - "altName": "" - }, - { - "code": 11, - "lowerName": "0", - "upperName": ")", - "altName": "" - }, - { - "code": 12, - "lowerName": "-", - "upperName": "_", - "altName": "" - }, - { - "code": 13, - "lowerName": "=", - "upperName": "+", - "altName": "" - }, - { - "code": 14, - "lowerName": "backspace", - "upperName": "backspace", - "altName": "" - } - ], - "row3": [ - { - "code": 15, - "lowerName": "tab", - "upperName": "tab", - "altName": "" - }, - { - "code": 16, - "lowerName": "q", - "letter": "primary", - "upperName": "Q", - "altName": "" - }, - { - "code": 17, - "lowerName": "w", - "letter": "primary", - "upperName": "W", - "altName": "" - }, - { - "code": 18, - "lowerName": "e", - "letter": "primary", - "upperName": "E", - "altName": "" - }, - { - "code": 19, - "lowerName": "r", - "letter": "primary", - "upperName": "R", - "altName": "" - }, - { - "code": 20, - "lowerName": "t", - "letter": "primary", - "upperName": "T", - "altName": "" - }, - { - "code": 21, - "lowerName": "y", - "letter": "primary", - "upperName": "Y", - "altName": "" - }, - { - "code": 22, - "lowerName": "u", - "letter": "primary", - "upperName": "U", - "altName": "" - }, - { - "code": 23, - "lowerName": "i", - "letter": "primary", - "upperName": "I", - "altName": "" - }, - { - "code": 24, - "lowerName": "o", - "letter": "primary", - "upperName": "O", - "altName": "" - }, - { - "code": 25, - "lowerName": "p", - "letter": "primary", - "upperName": "P", - "altName": "" - }, - { - "code": 26, - "lowerName": "[", - "upperName": "{", - "altName": "" - }, - { - "code": 27, - "lowerName": "]", - "upperName": "}", - "altName": "" - }, - { - "code": 43, - "lowerName": "\\", - "upperName": "|", - "altName": "" - } - ], - "row4": [ - { - "code": 58, - "lowerName": "capslock", - "upperName": "capslock", - "altName": "" - }, - { - "code": 30, - "lowerName": "a", - "letter": "primary", - "upperName": "A", - "altName": "" - }, - { - "code": 31, - "lowerName": "s", - "letter": "primary", - "upperName": "S", - "altName": "" - }, - { - "code": 32, - "lowerName": "d", - "letter": "primary", - "upperName": "D", - "altName": "" - }, - { - "code": 33, - "lowerName": "f", - "letter": "primary", - "upperName": "F", - "altName": "" - }, - { - "code": 34, - "lowerName": "g", - "letter": "primary", - "upperName": "G", - "altName": "" - }, - { - "code": 35, - "lowerName": "h", - "letter": "primary", - "upperName": "H", - "altName": "" - }, - { - "code": 36, - "lowerName": "j", - "letter": "primary", - "upperName": "J", - "altName": "" - }, - { - "code": 37, - "lowerName": "k", - "letter": "primary", - "upperName": "K", - "altName": "" - }, - { - "code": 38, - "lowerName": "l", - "letter": "primary", - "upperName": "L", - "altName": "" - }, - { - "code": 39, - "lowerName": ";", - "upperName": ":", - "altName": "" - }, - { - "code": 40, - "lowerName": "'", - "upperName": "\"", - "altName": "" - }, - { - "code": 28, - "lowerName": "enter", - "upperName": "enter", - "altName": "" - } - ], - "row5": [ - { - "code": 42, - "lowerName": "shift", - "upperName": "shift", - "altName": "" - }, - { - "code": 44, - "lowerName": "z", - "letter": "primary", - "upperName": "Z", - "altName": "" - }, - { - "code": 45, - "lowerName": "x", - "letter": "primary", - "upperName": "X", - "altName": "" - }, - { - "code": 46, - "lowerName": "c", - "letter": "primary", - "upperName": "C", - "altName": "" - }, - { - "code": 47, - "lowerName": "v", - "letter": "primary", - "upperName": "V", - "altName": "" - }, - { - "code": 48, - "lowerName": "b", - "letter": "primary", - "upperName": "B", - "altName": "" - }, - { - "code": 49, - "lowerName": "n", - "letter": "primary", - "upperName": "N", - "altName": "" - }, - { - "code": 50, - "lowerName": "m", - "letter": "primary", - "upperName": "M", - "altName": "" - }, - { - "code": 51, - "lowerName": ",", - "upperName": "<", - "altName": "" - }, - { - "code": 52, - "lowerName": ".", - "upperName": ">", - "altName": "" - }, - { - "code": 53, - "lowerName": "/", - "upperName": "?", - "altName": "" - }, - { - "code": 54, - "lowerName": "shift", - "upperName": "shift", - "altName": "" - } - ], - "row6": [ - { - "code": 29, - "lowerName": "ctrl", - "upperName": "ctrl", - "altName": "" - }, - { - "code": 125, - "lowerName": "super", - "upperName": "super", - "altName": "" - }, - { - "code": 56, - "lowerName": "alt", - "upperName": "alt", - "altName": "" - }, - { - "code": 57, - "lowerName": "space", - "upperName": "space", - "altName": "" - }, - { - "code": 100, - "lowerName": "alt", - "upperName": "alt", - "altName": "" - }, - { - "code": 97, - "lowerName": "ctrl", - "upperName": "ctrl", - "altName": "" - }, - [ - { - "code": 105, - "lowerName": "left", - "upperName": "left", - "altName": "" - }, - { - "code": 103, - "lowerName": "up", - "upperName": "up", - "altName": "" - }, - { - "code": 108, - "lowerName": "down", - "upperName": "down", - "altName": "" - }, - { - "code": 106, - "lowerName": "right", - "upperName": "right", - "altName": "" - } - ] - ] - }, - "azerty": { - "row1": [ - { - "code": 1, - "lowerName": "esc", - "upperName": "esc", - "altName": "" - }, - { - "code": 59, - "lowerName": "F1", - "upperName": "F1", - "altName": "" - }, - { - "code": 60, - "lowerName": "F2", - "upperName": "F2", - "altName": "" - }, - { - "code": 61, - "lowerName": "F3", - "upperName": "F3", - "altName": "" - }, - { - "code": 62, - "lowerName": "F4", - "upperName": "F4", - "altName": "" - }, - { - "code": 63, - "lowerName": "F5", - "upperName": "F5", - "altName": "" - }, - { - "code": 64, - "lowerName": "F6", - "upperName": "F6", - "altName": "" - }, - { - "code": 65, - "lowerName": "F7", - "upperName": "F7", - "altName": "" - }, - { - "code": 66, - "lowerName": "F8", - "upperName": "F8", - "altName": "" - }, - { - "code": 67, - "lowerName": "F9", - "upperName": "F9", - "altName": "" - }, - { - "code": 68, - "lowerName": "F10", - "upperName": "F10", - "altName": "" - }, - { - "code": 87, - "lowerName": "F11", - "upperName": "F11", - "altName": "" - }, - { - "code": 88, - "lowerName": "F12", - "upperName": "F12", - "altName": "" - }, - { - "code": 210, - "lowerName": "PrtSc", - "upperName": "PrtSc", - "altName": "" - }, - { - "code": 111, - "lowerName": "delete", - "upperName": "delete", - "altName": "" - } - ], - "row2": [ - { - "code": 41, - "lowerName": "²", - "upperName": "²", - "altName": "" - }, - { - "code": 2, - "lowerName": "&", - "upperName": "1", - "altName": "" - }, - { - "code": 3, - "lowerName": "é", - "letter": "pseudo", - "upperName": "2", - "altName": "~" - }, - { - "code": 4, - "lowerName": "\"", - "upperName": "3", - "altName": "#" - }, - { - "code": 5, - "lowerName": "'", - "upperName": "4", - "altName": "{" - }, - { - "code": 6, - "lowerName": "(", - "upperName": "5", - "altName": "[" - }, - { - "code": 7, - "lowerName": "-", - "upperName": "6", - "altName": "|" - }, - { - "code": 8, - "lowerName": "è", - "letter": "pseudo", - "upperName": "7", - "altName": "`" - }, - { - "code": 9, - "lowerName": "_", - "upperName": "8", - "altName": "\"" - }, - { - "code": 10, - "lowerName": "ç", - "letter": "pseudo", - "upperName": "9", - "altName": "^" - }, - { - "code": 11, - "lowerName": "à", - "letter": "pseudo", - "upperName": "0", - "altName": "@" - }, - { - "code": 12, - "lowerName": ")", - "upperName": "°", - "altName": "]" - }, - { - "code": 13, - "lowerName": "=", - "upperName": "+", - "altName": "}" - }, - { - "code": 14, - "lowerName": "backspace", - "upperName": "backspace", - "altName": "" - } - ], - "row3": [ - { - "code": 15, - "lowerName": "tab", - "upperName": "tab", - "altName": "" - }, - { - "code": 16, - "lowerName": "a", - "letter": "primary", - "upperName": "A", - "altName": "" - }, - { - "code": 17, - "lowerName": "z", - "letter": "primary", - "upperName": "Z", - "altName": "" - }, - { - "code": 18, - "lowerName": "e", - "letter": "primary", - "upperName": "E", - "altName": "€" - }, - { - "code": 19, - "lowerName": "r", - "letter": "primary", - "upperName": "R", - "altName": "" - }, - { - "code": 20, - "lowerName": "t", - "letter": "primary", - "upperName": "T", - "altName": "" - }, - { - "code": 21, - "lowerName": "y", - "letter": "primary", - "upperName": "Y", - "altName": "" - }, - { - "code": 22, - "lowerName": "u", - "letter": "primary", - "upperName": "U", - "altName": "" - }, - { - "code": 23, - "lowerName": "i", - "letter": "primary", - "upperName": "I", - "altName": "" - }, - { - "code": 24, - "lowerName": "o", - "letter": "primary", - "upperName": "O", - "altName": "" - }, - { - "code": 25, - "lowerName": "p", - "letter": "primary", - "upperName": "P", - "altName": "" - }, - { - "code": 26, - "lowerName": "^", - "upperName": "¨", - "altName": "" - }, - { - "code": 27, - "lowerName": "$", - "upperName": "£", - "altName": "¤" - }, - { - "code": 43, - "lowerName": "*", - "upperName": "µ", - "altName": "" - } - ], - "row4": [ - { - "code": 58, - "lowerName": "capslock", - "upperName": "capslock", - "altName": "" - }, - { - "code": 30, - "lowerName": "q", - "letter": "primary", - "upperName": "Q", - "altName": "" - }, - { - "code": 31, - "lowerName": "s", - "letter": "primary", - "upperName": "S", - "altName": "" - }, - { - "code": 32, - "lowerName": "d", - "letter": "primary", - "upperName": "D", - "altName": "" - }, - { - "code": 33, - "lowerName": "f", - "letter": "primary", - "upperName": "F", - "altName": "" - }, - { - "code": 34, - "lowerName": "g", - "letter": "primary", - "upperName": "G", - "altName": "" - }, - { - "code": 35, - "lowerName": "h", - "letter": "primary", - "upperName": "H", - "altName": "" - }, - { - "code": 36, - "lowerName": "j", - "letter": "primary", - "upperName": "J", - "altName": "" - }, - { - "code": 37, - "lowerName": "k", - "letter": "primary", - "upperName": "K", - "altName": "" - }, - { - "code": 38, - "lowerName": "l", - "letter": "primary", - "upperName": "L", - "altName": "" - }, - { - "code": 39, - "lowerName": "m", - "letter": "primary", - "upperName": "M", - "altName": "" - }, - { - "code": 40, - "lowerName": "ù", - "letter": "pseudo", - "upperName": "%", - "altName": "" - }, - { - "code": 28, - "lowerName": "enter", - "upperName": "enter", - "altName": "" - } - ], - "row5": [ - { - "code": 42, - "lowerName": "shift", - "upperName": "shift", - "altName": "" - }, - { - "code": 86, - "lowerName": "<", - "upperName": ">", - "altName": "" - }, - { - "code": 44, - "lowerName": "w", - "letter": "primary", - "upperName": "W", - "altName": "" - }, - { - "code": 45, - "lowerName": "x", - "letter": "primary", - "upperName": "X", - "altName": "" - }, - { - "code": 46, - "lowerName": "c", - "letter": "primary", - "upperName": "C", - "altName": "" - }, - { - "code": 47, - "lowerName": "v", - "letter": "primary", - "upperName": "V", - "altName": "" - }, - { - "code": 48, - "lowerName": "b", - "letter": "primary", - "upperName": "B", - "altName": "" - }, - { - "code": 49, - "lowerName": "n", - "letter": "primary", - "upperName": "N", - "altName": "" - }, - { - "code": 50, - "lowerName": ",", - "upperName": "?", - "altName": "" - }, - { - "code": 51, - "lowerName": ";", - "upperName": ".", - "altName": "" - }, - { - "code": 52, - "lowerName": ":", - "upperName": "/", - "altName": "" - }, - { - "code": 53, - "lowerName": "!", - "upperName": "§", - "altName": "" - }, - { - "code": 54, - "lowerName": "shift", - "upperName": "shift", - "altName": "" - } - ], - "row6": [ - { - "code": 29, - "lowerName": "ctrl", - "upperName": "ctrl", - "altName": "" - }, - { - "code": 125, - "lowerName": "super", - "upperName": "super", - "altName": "" - }, - { - "code": 56, - "lowerName": "alt", - "upperName": "alt", - "altName": "" - }, - { - "code": 57, - "lowerName": "space", - "upperName": "space", - "altName": "" - }, - { - "code": 100, - "lowerName": "alt", - "upperName": "alt", - "altName": "" - }, - { - "code": 97, - "lowerName": "ctrl", - "upperName": "ctrl", - "altName": "" - }, - [ - { - "code": 105, - "lowerName": "left", - "upperName": "left", - "altName": "" - }, - { - "code": 103, - "lowerName": "up", - "upperName": "up", - "altName": "" - }, - { - "code": 108, - "lowerName": "down", - "upperName": "down", - "altName": "" - }, - { - "code": 106, - "lowerName": "right", - "upperName": "right", - "altName": "" - } - ] - ] - }, - "dvorak": { - "row1": [ - { - "code": 1, - "lowerName": "esc", - "upperName": "esc", - "altName": "" - }, - { - "code": 59, - "lowerName": "F1", - "upperName": "F1", - "altName": "" - }, - { - "code": 60, - "lowerName": "F2", - "upperName": "F2", - "altName": "" - }, - { - "code": 61, - "lowerName": "F3", - "upperName": "F3", - "altName": "" - }, - { - "code": 62, - "lowerName": "F4", - "upperName": "F4", - "altName": "" - }, - { - "code": 63, - "lowerName": "F5", - "upperName": "F5", - "altName": "" - }, - { - "code": 64, - "lowerName": "F6", - "upperName": "F6", - "altName": "" - }, - { - "code": 65, - "lowerName": "F7", - "upperName": "F7", - "altName": "" - }, - { - "code": 66, - "lowerName": "F8", - "upperName": "F8", - "altName": "" - }, - { - "code": 67, - "lowerName": "F9", - "upperName": "F9", - "altName": "" - }, - { - "code": 68, - "lowerName": "F10", - "upperName": "F10", - "altName": "" - }, - { - "code": 87, - "lowerName": "F11", - "upperName": "F11", - "altName": "" - }, - { - "code": 88, - "lowerName": "F12", - "upperName": "F12", - "altName": "" - }, - { - "code": 210, - "lowerName": "PrtSc", - "upperName": "PrtSc", - "altName": "" - }, - { - "code": 111, - "lowerName": "delete", - "upperName": "delete", - "altName": "" - } - ], - "row2": [ - { - "code": 41, - "lowerName": "`", - "upperName": "~", - "altName": "" - }, - { - "code": 2, - "lowerName": "1", - "upperName": "!", - "altName": "" - }, - { - "code": 3, - "lowerName": "2", - "upperName": "@", - "altName": "" - }, - { - "code": 4, - "lowerName": "3", - "upperName": "#", - "altName": "" - }, - { - "code": 5, - "lowerName": "4", - "upperName": "$", - "altName": "" - }, - { - "code": 6, - "lowerName": "5", - "upperName": "%", - "altName": "" - }, - { - "code": 7, - "lowerName": "6", - "upperName": "^", - "altName": "" - }, - { - "code": 8, - "lowerName": "7", - "upperName": "&", - "altName": "" - }, - { - "code": 9, - "lowerName": "8", - "upperName": "*", - "altName": "" - }, - { - "code": 10, - "lowerName": "9", - "upperName": "(", - "altName": "" - }, - { - "code": 11, - "lowerName": "0", - "upperName": ")", - "altName": "" - }, - { - "code": 12, - "lowerName": "[", - "upperName": "{", - "altName": "" - }, - { - "code": 13, - "lowerName": "]", - "upperName": "}", - "altName": "" - }, - { - "code": 14, - "lowerName": "backspace", - "upperName": "backspace", - "altName": "" - } - ], - "row3": [ - { - "code": 15, - "lowerName": "tab", - "upperName": "tab", - "altName": "" - }, - { - "code": 16, - "lowerName": "'", - "upperName": "\"", - "altName": "" - }, - { - "code": 17, - "lowerName": ",", - "upperName": "<", - "altName": "" - }, - { - "code": 18, - "lowerName": ".", - "upperName": ">", - "altName": "" - }, - { - "code": 19, - "lowerName": "p", - "letter": "primary", - "upperName": "P", - "altName": "" - }, - { - "code": 20, - "lowerName": "y", - "letter": "primary", - "upperName": "Y", - "altName": "" - }, - { - "code": 21, - "lowerName": "f", - "letter": "primary", - "upperName": "F", - "altName": "" - }, - { - "code": 22, - "lowerName": "g", - "letter": "primary", - "upperName": "G", - "altName": "" - }, - { - "code": 23, - "lowerName": "c", - "letter": "primary", - "upperName": "C", - "altName": "" - }, - { - "code": 24, - "lowerName": "r", - "letter": "primary", - "upperName": "R", - "altName": "" - }, - { - "code": 25, - "lowerName": "l", - "letter": "primary", - "upperName": "L", - "altName": "" - }, - { - "code": 26, - "lowerName": "/", - "upperName": "?", - "altName": "" - }, - { - "code": 27, - "lowerName": "=", - "upperName": "+", - "altName": "" - }, - { - "code": 43, - "lowerName": "\\", - "upperName": "|", - "altName": "" - } - ], - "row4": [ - { - "code": 58, - "lowerName": "capslock", - "upperName": "capslock", - "altName": "" - }, - { - "code": 30, - "lowerName": "a", - "letter": "primary", - "upperName": "A", - "altName": "" - }, - { - "code": 31, - "lowerName": "o", - "letter": "primary", - "upperName": "O", - "altName": "" - }, - { - "code": 32, - "lowerName": "e", - "letter": "primary", - "upperName": "E", - "altName": "" - }, - { - "code": 33, - "lowerName": "u", - "letter": "primary", - "upperName": "U", - "altName": "" - }, - { - "code": 34, - "lowerName": "i", - "letter": "primary", - "upperName": "I", - "altName": "" - }, - { - "code": 35, - "lowerName": "d", - "letter": "primary", - "upperName": "D", - "altName": "" - }, - { - "code": 36, - "lowerName": "h", - "letter": "primary", - "upperName": "H", - "altName": "" - }, - { - "code": 37, - "lowerName": "t", - "letter": "primary", - "upperName": "T", - "altName": "" - }, - { - "code": 38, - "lowerName": "n", - "letter": "primary", - "upperName": "N", - "altName": "" - }, - { - "code": 39, - "lowerName": "s", - "letter": "primary", - "upperName": "S", - "altName": "" - }, - { - "code": 40, - "lowerName": "-", - "upperName": "_", - "altName": "" - }, - { - "code": 28, - "lowerName": "enter", - "upperName": "enter", - "altName": "" - } - ], - "row5": [ - { - "code": 42, - "lowerName": "shift", - "upperName": "shift", - "altName": "" - }, - { - "code": 44, - "lowerName": ";", - "upperName": ":", - "altName": "" - }, - { - "code": 45, - "lowerName": "q", - "letter": "primary", - "upperName": "Q", - "altName": "" - }, - { - "code": 46, - "lowerName": "j", - "letter": "primary", - "upperName": "J", - "altName": "" - }, - { - "code": 47, - "lowerName": "k", - "letter": "primary", - "upperName": "K", - "altName": "" - }, - { - "code": 48, - "lowerName": "x", - "letter": "primary", - "upperName": "X", - "altName": "" - }, - { - "code": 49, - "lowerName": "b", - "letter": "primary", - "upperName": "B", - "altName": "" - }, - { - "code": 50, - "lowerName": "m", - "letter": "primary", - "upperName": "M", - "altName": "" - }, - { - "code": 51, - "lowerName": "w", - "letter": "primary", - "upperName": "W", - "altName": "" - }, - { - "code": 52, - "lowerName": "v", - "letter": "primary", - "upperName": "V", - "altName": "" - }, - { - "code": 53, - "lowerName": "z", - "letter": "primary", - "upperName": "Z", - "altName": "" - }, - { - "code": 54, - "lowerName": "shift", - "upperName": "shift", - "altName": "" - } - ], - "row6": [ - { - "code": 29, - "lowerName": "ctrl", - "upperName": "ctrl", - "altName": "" - }, - { - "code": 125, - "lowerName": "super", - "upperName": "super", - "altName": "" - }, - { - "code": 56, - "lowerName": "alt", - "upperName": "alt", - "altName": "" - }, - { - "code": 57, - "lowerName": "space", - "upperName": "space", - "altName": "" - }, - { - "code": 100, - "lowerName": "alt", - "upperName": "alt", - "altName": "" - }, - { - "code": 97, - "lowerName": "ctrl", - "upperName": "ctrl", - "altName": "" - }, - [ - { - "code": 105, - "lowerName": "left", - "upperName": "left", - "altName": "" - }, - { - "code": 103, - "lowerName": "up", - "upperName": "up", - "altName": "" - }, - { - "code": 108, - "lowerName": "down", - "upperName": "down", - "altName": "" - }, - { - "code": 106, - "lowerName": "right", - "upperName": "right", - "altName": "" - } - ] - ] - }, - "qwertz": { - "row1": [ - { - "code": 1, - "lowerName": "esc", - "upperName": "esc", - "altName": "" - }, - { - "code": 59, - "lowerName": "F1", - "upperName": "F1", - "altName": "" - }, - { - "code": 60, - "lowerName": "F2", - "upperName": "F2", - "altName": "" - }, - { - "code": 61, - "lowerName": "F3", - "upperName": "F3", - "altName": "" - }, - { - "code": 62, - "lowerName": "F4", - "upperName": "F4", - "altName": "" - }, - { - "code": 63, - "lowerName": "F5", - "upperName": "F5", - "altName": "" - }, - { - "code": 64, - "lowerName": "F6", - "upperName": "F6", - "altName": "" - }, - { - "code": 65, - "lowerName": "F7", - "upperName": "F7", - "altName": "" - }, - { - "code": 66, - "lowerName": "F8", - "upperName": "F8", - "altName": "" - }, - { - "code": 67, - "lowerName": "F9", - "upperName": "F9", - "altName": "" - }, - { - "code": 68, - "lowerName": "F10", - "upperName": "F10", - "altName": "" - }, - { - "code": 87, - "lowerName": "F11", - "upperName": "F11", - "altName": "" - }, - { - "code": 88, - "lowerName": "F12", - "upperName": "F12", - "altName": "" - }, - { - "code": 210, - "lowerName": "PrtSc", - "upperName": "PrtSc", - "altName": "" - }, - { - "code": 111, - "lowerName": "delete", - "upperName": "delete", - "altName": "" - } - ], - "row2": [ - { - "code": 41, - "lowerName": "^", - "upperName": "°", - "altName": "′" - }, - { - "code": 2, - "lowerName": "1", - "upperName": "!", - "altName": "¹" - }, - { - "code": 3, - "lowerName": "2", - "upperName": "\"", - "altName": "²" - }, - { - "code": 4, - "lowerName": "3", - "upperName": "§", - "altName": "³" - }, - { - "code": 5, - "lowerName": "4", - "upperName": "$", - "altName": "¼" - }, - { - "code": 6, - "lowerName": "5", - "upperName": "%", - "altName": "½" - }, - { - "code": 7, - "lowerName": "6", - "upperName": "&", - "altName": "¬" - }, - { - "code": 8, - "lowerName": "7", - "upperName": "/", - "altName": "{" - }, - { - "code": 9, - "lowerName": "8", - "upperName": "(", - "altName": "[" - }, - { - "code": 10, - "lowerName": "9", - "upperName": ")", - "altName": "]" - }, - { - "code": 11, - "lowerName": "0", - "upperName": "=", - "altName": "}" - }, - { - "code": 12, - "lowerName": "ß", - "upperName": "?", - "altName": "\\" - }, - { - "code": 13, - "lowerName": "´", - "upperName": "`", - "altName": "¸" - }, - { - "code": 14, - "lowerName": "backspace", - "upperName": "backspace", - "altName": "" - } - ], - "row3": [ - { - "code": 15, - "lowerName": "tab", - "upperName": "tab", - "altName": "" - }, - { - "code": 16, - "lowerName": "q", - "letter": "primary", - "upperName": "Q", - "altName": "@" - }, - { - "code": 17, - "lowerName": "w", - "letter": "primary", - "upperName": "W", - "altName": "ſ" - }, - { - "code": 18, - "lowerName": "e", - "letter": "primary", - "upperName": "E", - "altName": "ě" - }, - { - "code": 19, - "lowerName": "r", - "letter": "primary", - "upperName": "R", - "altName": "ŕ" - }, - { - "code": 20, - "lowerName": "t", - "letter": "primary", - "upperName": "T", - "altName": "₵" - }, - { - "code": 21, - "lowerName": "z", - "letter": "primary", - "upperName": "Z", - "altName": "ž" - }, - { - "code": 22, - "lowerName": "u", - "letter": "primary", - "upperName": "U", - "altName": "ź" - }, - { - "code": 23, - "lowerName": "i", - "letter": "primary", - "upperName": "I", - "altName": "right" - }, - { - "code": 24, - "lowerName": "o", - "letter": "primary", - "upperName": "O", - "altName": "ó" - }, - { - "code": 25, - "lowerName": "p", - "letter": "primary", - "upperName": "P", - "altName": "þ" - }, - { - "code": 26, - "lowerName": "ü", - "letter": "primary", - "upperName": "Ü", - "altName": "¨" - }, - { - "code": 27, - "lowerName": "+", - "upperName": "*", - "altName": "~" - }, - { - "code": 43, - "lowerName": "#", - "upperName": "'", - "altName": "’" - } - ], - "row4": [ - { - "code": 58, - "lowerName": "capslock", - "upperName": "capslock", - "altName": "" - }, - { - "code": 30, - "lowerName": "a", - "letter": "primary", - "upperName": "A", - "altName": "æ" - }, - { - "code": 31, - "lowerName": "s", - "letter": "primary", - "upperName": "S", - "altName": "ś" - }, - { - "code": 32, - "lowerName": "d", - "letter": "primary", - "upperName": "D", - "altName": "š" - }, - { - "code": 33, - "lowerName": "f", - "letter": "primary", - "upperName": "F", - "altName": "đ" - }, - { - "code": 34, - "lowerName": "g", - "letter": "primary", - "upperName": "G", - "altName": "ŋ" - }, - { - "code": 35, - "lowerName": "h", - "letter": "primary", - "upperName": "H", - "altName": "ħ" - }, - { - "code": 36, - "lowerName": "j", - "letter": "primary", - "upperName": "J", - "altName": "." - }, - { - "code": 37, - "lowerName": "k", - "letter": "primary", - "upperName": "K", - "altName": "ĸ" - }, - { - "code": 38, - "lowerName": "l", - "letter": "primary", - "upperName": "L", - "altName": "ł" - }, - { - "code": 39, - "lowerName": "ö", - "letter": "primary", - "upperName": "Ö", - "altName": "˝" - }, - { - "code": 40, - "lowerName": "ä", - "letter": "primary", - "upperName": "Ä", - "altName": "^" - }, - { - "code": 28, - "lowerName": "enter", - "upperName": "enter", - "altName": "" - } - ], - "row5": [ - { - "code": 42, - "lowerName": "shift", - "upperName": "shift", - "altName": "" - }, - { - "code": 86, - "lowerName": "<", - "upperName": ">", - "altName": "" - }, - { - "code": 44, - "lowerName": "y", - "letter": "primary", - "upperName": "Y", - "altName": "»" - }, - { - "code": 45, - "lowerName": "x", - "letter": "primary", - "upperName": "X", - "altName": "«" - }, - { - "code": 46, - "lowerName": "c", - "letter": "primary", - "upperName": "C", - "altName": "ć" - }, - { - "code": 47, - "lowerName": "v", - "letter": "primary", - "upperName": "V", - "altName": "č" - }, - { - "code": 48, - "lowerName": "b", - "letter": "primary", - "upperName": "B", - "altName": "“" - }, - { - "code": 49, - "lowerName": "n", - "letter": "primary", - "upperName": "N", - "altName": "ń" - }, - { - "code": 50, - "lowerName": "m", - "letter": "primary", - "upperName": "M", - "altName": "µ" - }, - { - "code": 51, - "lowerName": ",", - "upperName": ";", - "altName": "·" - }, - { - "code": 52, - "lowerName": ".", - "upperName": ":", - "altName": "…" - }, - { - "code": 53, - "lowerName": "-", - "upperName": "_", - "altName": "–" - }, - { - "code": 54, - "lowerName": "shift", - "upperName": "shift", - "altName": "" - } - ], - "row6": [ - { - "code": 29, - "lowerName": "ctrl", - "upperName": "ctrl", - "altName": "" - }, - { - "code": 125, - "lowerName": "super", - "upperName": "super", - "altName": "" - }, - { - "code": 56, - "lowerName": "alt", - "upperName": "alt", - "altName": "" - }, - { - "code": 57, - "lowerName": "space", - "upperName": "space", - "altName": "" - }, - { - "code": 100, - "lowerName": "alt", - "upperName": "alt", - "altName": "" - }, - { - "code": 97, - "lowerName": "ctrl", - "upperName": "ctrl", - "altName": "" - }, - [ - { - "code": 105, - "lowerName": "left", - "upperName": "left", - "altName": "" - }, - { - "code": 103, - "lowerName": "up", - "upperName": "up", - "altName": "" - }, - { - "code": 108, - "lowerName": "down", - "upperName": "down", - "altName": "" - }, - { - "code": 106, - "lowerName": "right", - "upperName": "right", - "altName": "" - } - ] - ] - } -} diff --git a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/metadata.json b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/metadata.json index 5ca4bef..a5974b2 100644 --- a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/metadata.json +++ b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/metadata.json @@ -11,5 +11,5 @@ ], "url": "https://github.com/Vishram1123/gjs-osk", "uuid": "gjsosk@vishram1123.com", - "version": 10 + "version": 27 } diff --git a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/prefs.js b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/prefs.js index 570da26..92488da 100644 --- a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/prefs.js +++ b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/prefs.js @@ -20,80 +20,54 @@ export default class GjsOskPreferences extends ExtensionPreferences { icon_name: "general-symbolic" }); - const group0 = new Adw.PreferencesGroup(); - page1.add(group0) - - const apply = Gtk.Button.new_with_label(_("Apply Changes")); - apply.connect("clicked", () => { - settings.set_int("lang", langDrop.selected); - settings.set_boolean("enable-drag", dragToggle.active); - settings.set_int("enable-tap-gesture", dragOpt.selected); - settings.set_boolean("indicator-enabled", indEnabled.active); - settings.set_int("portrait-width-percent", numChanger_pW.value); - settings.set_int("portrait-height-percent", numChanger_pH.value); - settings.set_int("landscape-width-percent", numChanger_lW.value); - settings.set_int("landscape-height-percent", numChanger_lH.value); - let [r, g, b] = colorButton.get_rgba().to_string().replace("rgb(", "").replace(")", "").split(",") - settings.set_double("background-r", r); - settings.set_double("background-g", g); - settings.set_double("background-b", b); - settings.set_int("font-size-px", numChanger_font.value); - settings.set_int("border-spacing-px", numChanger_bord.value); - settings.set_int("snap-spacing-px", numChanger_snap.value) - settings.set_boolean("round-key-corners", dragToggle2.active); - settings.set_boolean("play-sound", dragToggle3.active); - settings.set_int("default-snap", dropDown.selected); - }); - group0.add(apply) - - const group1 = new Adw.PreferencesGroup({ + const behaviorGroup = new Adw.PreferencesGroup({ title: _("Behavior") }); - page1.add(group1); + page1.add(behaviorGroup); - const row0 = new Adw.ActionRow({ + const layoutRow = new Adw.ActionRow({ title: _('Layout') }); - group1.add(row0); + behaviorGroup.add(layoutRow); - let langList = ["QWERTY", "AZERTY", "Dvorak", "QWERTZ"]; - let langDrop = Gtk.DropDown.new_from_strings(langList); - langDrop.valign = Gtk.Align.CENTER; - langDrop.selected = settings.get_int("lang"); + let layoutList = ["Full Sized International", "Full Sized US", "Tenkeyless International", "Tenkeyless US", "Compact International", "Compact US", "Split International", "Split US"]; + let layoutDrop = Gtk.DropDown.new_from_strings(layoutList); + layoutDrop.valign = Gtk.Align.CENTER; + layoutDrop.selected = settings.get_int("layout"); - row0.add_suffix(langDrop); - row0.activatable_widget = langDrop; + layoutRow.add_suffix(layoutDrop); + layoutRow.activatable_widget = layoutDrop; - const row1 = new Adw.ActionRow({ + const enableDragRow = new Adw.ActionRow({ title: _('Enable Dragging') }); - group1.add(row1); + behaviorGroup.add(enableDragRow); - const dragToggle = new Gtk.Switch({ + const dragEnableDT = new Gtk.Switch({ active: settings.get_boolean('enable-drag'), valign: Gtk.Align.CENTER, }); - row1.add_suffix(dragToggle); - row1.activatable_widget = dragToggle; + enableDragRow.add_suffix(dragEnableDT); + enableDragRow.activatable_widget = dragEnableDT; - const row1t3 = new Adw.ActionRow({ + const indEnabledRow = new Adw.ActionRow({ title: _('Enable Panel Indicator') }); - group1.add(row1t3); + behaviorGroup.add(indEnabledRow); const indEnabled = new Gtk.Switch({ active: settings.get_boolean("indicator-enabled"), valign: Gtk.Align.CENTER, }); - row1t3.add_suffix(indEnabled); - row1t3.activatable_widget = indEnabled; + indEnabledRow.add_suffix(indEnabled); + indEnabledRow.activatable_widget = indEnabled; const row1t5 = new Adw.ActionRow({ title: _('Open upon clicking in a text field') }); - group1.add(row1t5); + behaviorGroup.add(row1t5); let dragOptList = [_("Never"), _("Only on Touch"), _("Always")]; @@ -104,10 +78,10 @@ export default class GjsOskPreferences extends ExtensionPreferences { row1t5.add_suffix(dragOpt); row1t5.activatable_widget = dragOpt; - const row2 = new Adw.ExpanderRow({ + const portraitSizing = new Adw.ExpanderRow({ title: _('Portrait Sizing') }); - group1.add(row2); + behaviorGroup.add(portraitSizing); let pW = new Adw.ActionRow({ title: _('Width (%)') @@ -128,13 +102,13 @@ export default class GjsOskPreferences extends ExtensionPreferences { pH.add_suffix(numChanger_pH); pH.activatable_widget = numChanger_pH; - row2.add_row(pW); - row2.add_row(pH); + portraitSizing.add_row(pW); + portraitSizing.add_row(pH); - const row3 = new Adw.ExpanderRow({ + const landscapeSizing = new Adw.ExpanderRow({ title: _('Landscape Sizing') }); - group1.add(row3); + behaviorGroup.add(landscapeSizing); let lW = new Adw.ActionRow({ title: _('Width (%)') @@ -155,104 +129,152 @@ export default class GjsOskPreferences extends ExtensionPreferences { lH.add_suffix(numChanger_lH); lH.activatable_widget = numChanger_lH; - row3.add_row(lW); - row3.add_row(lH); + landscapeSizing.add_row(lW); + landscapeSizing.add_row(lH); - const row4 = new Adw.ActionRow({ + const defaultPosition = new Adw.ActionRow({ title: _('Default Position') }); - group1.add(row4); + behaviorGroup.add(defaultPosition); let posList = [ _("Top Left"), _("Top Center"), _("Top Right"), _("Center Left"), _("Center"), _("Center Right"), _("Bottom Left"), _("Bottom Center"), _("Bottom Right") ]; - let dropDown = Gtk.DropDown.new_from_strings(posList); - dropDown.valign = Gtk.Align.CENTER; - dropDown.selected = settings.get_int("default-snap"); + let snapDrop = Gtk.DropDown.new_from_strings(posList); + snapDrop.valign = Gtk.Align.CENTER; + snapDrop.selected = settings.get_int("default-snap"); - row4.add_suffix(dropDown); - row4.activatable_widget = dropDown; + defaultPosition.add_suffix(snapDrop); + defaultPosition.activatable_widget = snapDrop; - const row9 = new Adw.ActionRow({ + const soundPlayRow = new Adw.ActionRow({ title: _('Play sound') }); - group1.add(row9); + behaviorGroup.add(soundPlayRow); - const dragToggle3 = new Gtk.Switch({ + const soundPlayDT = new Gtk.Switch({ active: settings.get_boolean('play-sound'), valign: Gtk.Align.CENTER, }); - row9.add_suffix(dragToggle3); - row9.activatable_widget = dragToggle3; + soundPlayRow.add_suffix(soundPlayDT); + soundPlayRow.activatable_widget = soundPlayDT; - const group2 = new Adw.PreferencesGroup({ + const appearanceGroup = new Adw.PreferencesGroup({ title: _("Appearance") }); - page1.add(group2); + page1.add(appearanceGroup); - const row5 = new Adw.ActionRow({ - title: _('Color') + const colorRow = new Adw.ExpanderRow({ + title: _("Color") + }) + appearanceGroup.add(colorRow); + + + const lightCol = new Adw.ActionRow({ + title: _('Light Mode') }); - group2.add(row5); settings.set_boolean("enable-tap-gesture", dragOpt.selected); + colorRow.add_row(lightCol) let rgba = new Gdk.RGBA(); - rgba.parse("rgba(" + settings.get_double("background-r") + ", " + settings.get_double("background-g") + ", " + settings.get_double("background-b") + ", 1)"); + rgba.parse("rgba(" + settings.get_double("background-r") + ", " + settings.get_double("background-g") + ", " + settings.get_double("background-b") + ", " + settings.get_double("background-a") + ")"); let colorButton = new Gtk.ColorButton({ - rgba, - use_alpha: false, + rgba: rgba, + use_alpha: true, valign: Gtk.Align.CENTER }); - row5.add_suffix(colorButton); - row5.activatable_widget = colorButton; + lightCol.add_suffix(colorButton); + lightCol.activatable_widget = colorButton; - let row6 = new Adw.ActionRow({ + const darkCol = new Adw.ActionRow({ + title: _('Dark Mode') + }); + colorRow.add_row(darkCol) + + let rgba_d = new Gdk.RGBA(); + rgba_d.parse("rgba(" + settings.get_double("background-r-dark") + ", " + settings.get_double("background-g-dark") + ", " + settings.get_double("background-b-dark") + ", " + settings.get_double("background-a-dark") + ")"); + let colorButton_d = new Gtk.ColorButton({ + rgba: rgba_d, + use_alpha: true, + valign: Gtk.Align.CENTER + }); + darkCol.add_suffix(colorButton_d); + darkCol.activatable_widget = colorButton_d; + + let fontSize = new Adw.ActionRow({ title: _('Font Size (px)') }); - group2.add(row6); + appearanceGroup.add(fontSize); let numChanger_font = Gtk.SpinButton.new_with_range(0, 100, 1); numChanger_font.value = settings.get_int('font-size-px'); numChanger_font.valign = Gtk.Align.CENTER; - row6.add_suffix(numChanger_font); - row6.activatable_widget = numChanger_font; + + fontSize.add_suffix(numChanger_font); + fontSize.activatable_widget = numChanger_font; - let row7 = new Adw.ActionRow({ + const fontBoldRow = new Adw.ActionRow({ + title: _("Bold Font") + }) + appearanceGroup.add(fontBoldRow) + + const fontBoldEnabled = new Gtk.Switch({ + active: settings.get_boolean("font-bold"), + valign: Gtk.Align.CENTER + }) + + fontBoldRow.add_suffix(fontBoldEnabled) + fontBoldRow.activatable_widget = fontBoldEnabled + + let borderSpacing = new Adw.ActionRow({ title: _('Border Spacing (px)') }); - group2.add(row7); + appearanceGroup.add(borderSpacing); let numChanger_bord = Gtk.SpinButton.new_with_range(0, 10, 1); numChanger_bord.value = settings.get_int('border-spacing-px'); numChanger_bord.valign = Gtk.Align.CENTER; - row7.add_suffix(numChanger_bord); - row7.activatable_widget = numChanger_bord; + borderSpacing.add_suffix(numChanger_bord); + borderSpacing.activatable_widget = numChanger_bord; - let row1t2 = new Adw.ActionRow({ + let snapSpacing = new Adw.ActionRow({ title: _('Drag snap spacing (px)') }); - group2.add(row1t2); + appearanceGroup.add(snapSpacing); let numChanger_snap = Gtk.SpinButton.new_with_range(0, 50, 5); numChanger_snap.value = settings.get_int('snap-spacing-px'); numChanger_snap.valign = Gtk.Align.CENTER; - row1t2.add_suffix(numChanger_snap); - row1t2.activatable_widget = numChanger_snap; + snapSpacing.add_suffix(numChanger_snap); + snapSpacing.activatable_widget = numChanger_snap; - const row8 = new Adw.ActionRow({ + const roundCorners = new Adw.ActionRow({ title: _('Round Corners') }); - group2.add(row8); + appearanceGroup.add(roundCorners); - const dragToggle2 = new Gtk.Switch({ + const roundKeyCDT = new Gtk.Switch({ active: settings.get_boolean('round-key-corners'), valign: Gtk.Align.CENTER, }); - row8.add_suffix(dragToggle2); - row8.activatable_widget = dragToggle2; + roundCorners.add_suffix(roundKeyCDT); + roundCorners.activatable_widget = roundKeyCDT; + + const showIcon = new Adw.ActionRow({ + title: _('Show Special Key Icons') + }); + appearanceGroup.add(showIcon); + + const showIconDT = new Gtk.Switch({ + active: settings.get_boolean('show-icons'), + valign: Gtk.Align.CENTER, + }); + + showIcon.add_suffix(showIconDT); + showIcon.activatable_widget = showIconDT; window.add(page1); @@ -287,7 +309,7 @@ export default class GjsOskPreferences extends ExtensionPreferences { context.add_class("title-1"); let another_label = new Gtk.Label({ - label: _("Version ") + this.metadata.version + label: _("Autorelease ") + `fab8e97` }); let links_pref_group = new Adw.PreferencesGroup(); @@ -326,25 +348,61 @@ export default class GjsOskPreferences extends ExtensionPreferences { page2.add(links_pref_group); window.add(page2); + + settings.bind("layout", layoutDrop, "selected", 0); + settings.bind("enable-drag", dragEnableDT, "active", 0); + settings.bind("enable-tap-gesture", dragOpt, "selected", 0); + settings.bind("indicator-enabled", indEnabled, "active", 0); + settings.bind("portrait-width-percent", numChanger_pW, "value", 0); + settings.bind("portrait-height-percent", numChanger_pH, "value", 0); + settings.bind("landscape-width-percent", numChanger_lW, "value", 0); + settings.bind("landscape-height-percent", numChanger_lH, "value", 0); + colorButton.connect("color-set", () => { + settings.set_double("background-r", Math.round(colorButton.get_rgba().red * 255)); + settings.set_double("background-g", Math.round(colorButton.get_rgba().green * 255)); + settings.set_double("background-b", Math.round(colorButton.get_rgba().blue * 255)); + settings.set_double("background-a", colorButton.get_rgba().alpha); + }) + colorButton_d.connect("color-set", () => { + settings.set_double("background-r-dark", Math.round(colorButton_d.get_rgba().red * 255)); + settings.set_double("background-g-dark", Math.round(colorButton_d.get_rgba().green * 255)); + settings.set_double("background-b-dark", Math.round(colorButton_d.get_rgba().blue * 255)); + settings.set_double("background-a-dark", colorButton_d.get_rgba().alpha); + }) + settings.bind("font-size-px", numChanger_font, "value", 0); + settings.bind("font-bold", fontBoldEnabled, "active", 0) + settings.bind("border-spacing-px", numChanger_bord, "value", 0); + settings.bind("snap-spacing-px", numChanger_snap, "value", 0) + settings.bind("round-key-corners", roundKeyCDT, "active", 0); + settings.bind("play-sound", soundPlayDT, "active", 0); + settings.bind("show-icons", showIconDT, "active", 0) + settings.bind("default-snap", snapDrop, "selected", 0); + window.connect("close-request", () => { - settings.set_int("lang", langDrop.selected); - settings.set_boolean("enable-drag", dragToggle.active); + settings.set_int("layout", layoutDrop.selected); + settings.set_boolean("enable-drag", dragEnableDT.active); settings.set_int("enable-tap-gesture", dragOpt.selected); settings.set_boolean("indicator-enabled", indEnabled.active); settings.set_int("portrait-width-percent", numChanger_pW.value); settings.set_int("portrait-height-percent", numChanger_pH.value); settings.set_int("landscape-width-percent", numChanger_lW.value); settings.set_int("landscape-height-percent", numChanger_lH.value); - let [r, g, b] = colorButton.get_rgba().to_string().replace("rgb(", "").replace(")", "").split(",") - settings.set_double("background-r", r); - settings.set_double("background-g", g); - settings.set_double("background-b", b); + settings.set_double("background-r", Math.round(colorButton.get_rgba().red * 255)); + settings.set_double("background-g", Math.round(colorButton.get_rgba().green * 255)); + settings.set_double("background-b", Math.round(colorButton.get_rgba().blue * 255)); + settings.set_double("background-a", colorButton.get_rgba().alpha); + settings.set_double("background-r-dark", Math.round(colorButton_d.get_rgba().red * 255)); + settings.set_double("background-g-dark", Math.round(colorButton_d.get_rgba().green * 255)); + settings.set_double("background-b-dark", Math.round(colorButton_d.get_rgba().blue * 255)); + settings.set_double("background-a-dark", colorButton_d.get_rgba().alpha); settings.set_int("font-size-px", numChanger_font.value); + settings.set_boolean("font-bold", fontBoldEnabled.active) settings.set_int("border-spacing-px", numChanger_bord.value); settings.set_int("snap-spacing-px", numChanger_snap.value) - settings.set_boolean("round-key-corners", dragToggle2.active); - settings.set_boolean("play-sound", dragToggle3.active); - settings.set_int("default-snap", dropDown.selected); - }); + settings.set_boolean("round-key-corners", roundKeyCDT.active); + settings.set_boolean("play-sound", soundPlayDT.active); + settings.set_boolean("show-icons", showIconDT.active) + settings.set_int("default-snap", snapDrop.selected); + }) } }; diff --git a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/schemas/gschemas.compiled b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/schemas/gschemas.compiled index ceb5d5f..ac9dcce 100644 Binary files a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/schemas/gschemas.compiled and b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/schemas/gschemas.compiled differ diff --git a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/schemas/org.gnome.shell.extensions.gjsosk.gschema.xml b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/schemas/org.gnome.shell.extensions.gjsosk.gschema.xml index 9a34bb7..c960c22 100644 --- a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/schemas/org.gnome.shell.extensions.gjsosk.gschema.xml +++ b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/schemas/org.gnome.shell.extensions.gjsosk.gschema.xml @@ -1,11 +1,14 @@ + + 0 + 100 - 20 + 30 70 @@ -17,17 +20,35 @@ true - 50 + 250 - 50 + 250 + 250 + + + 1 + + 50 + + 50 + + + 50 + + + 1 + 14 + + false + 2 @@ -39,9 +60,6 @@ 7 - - - 0 1 @@ -52,6 +70,9 @@ true + + true + diff --git a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/stylesheet.css b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/stylesheet.css index 629e010..1c2e987 100644 --- a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/stylesheet.css +++ b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/stylesheet.css @@ -17,9 +17,10 @@ background-color: rgba(0, 0, 0, 0.05); color: black; } - -.keysHolder>* { +.key, .moveHandle { border: 0; + padding: 0; + margin: 0; background-clip: padding-box; box-sizing: border-box; } @@ -31,19 +32,8 @@ box-sizing: border-box; } -.boxLay.regular:dragging { - background-image: url(ui/icons/hicolor/scalable/actions/move.svg); - background-size: 100px; -} - -.boxLay.inverted:dragging { - background-image: url(ui/icons/hicolor/scalable/actions/move-dark.svg); - background-size: 100px; -} - .close_btn, -.move_btn, -.delete_btn, +.settings_btn, .backspace_btn, .tab_btn, .capslock_btn, @@ -69,20 +59,12 @@ background-image: url(ui/icons/hicolor/scalable/actions/close-dark.svg); } -.move_btn.regular, .move_btn.selected.inverted { - background-image: url(ui/icons/hicolor/scalable/actions/move.svg); +.settings_btn.regular { + background-image: url(ui/icons/hicolor/scalable/actions/settings.svg); } -.move_btn.inverted, .move_btn.selected.regular { - background-image: url(ui/icons/hicolor/scalable/actions/move-dark.svg); -} - -.delete_btn.regular, .delete_btn.selected.inverted { - background-image: url(ui/icons/hicolor/scalable/actions/delete.svg); -} - -.delete_btn.inverted, .delete_btn.selected.regular { - background-image: url(ui/icons/hicolor/scalable/actions/delete-dark.svg); +.settings_btn.inverted { + background-image: url(ui/icons/hicolor/scalable/actions/settings-dark.svg); } .backspace_btn.regular, .backspace_btn.selected.inverted { diff --git a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/ui/icons/hicolor/scalable/actions/delete-dark.svg b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/ui/icons/hicolor/scalable/actions/delete-dark.svg deleted file mode 100644 index ed6c0c9..0000000 --- a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/ui/icons/hicolor/scalable/actions/delete-dark.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - diff --git a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/ui/icons/hicolor/scalable/actions/delete.svg b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/ui/icons/hicolor/scalable/actions/delete.svg deleted file mode 100644 index e1b7219..0000000 --- a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/ui/icons/hicolor/scalable/actions/delete.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - diff --git a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/ui/icons/hicolor/scalable/actions/move-dark.svg b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/ui/icons/hicolor/scalable/actions/move-dark.svg deleted file mode 100644 index 4ca36eb..0000000 --- a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/ui/icons/hicolor/scalable/actions/move-dark.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - diff --git a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/ui/icons/hicolor/scalable/actions/move.svg b/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/ui/icons/hicolor/scalable/actions/move.svg deleted file mode 100644 index 0699f55..0000000 --- a/gnome/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/ui/icons/hicolor/scalable/actions/move.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file