123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- 'use strict';
- import Adw from 'gi://Adw';
- import Gtk from 'gi://Gtk';
- import Gdk from 'gi://Gdk';
- import { ExtensionPreferences, gettext as _ } from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
- export default class GjsOskPreferences extends ExtensionPreferences {
- fillPreferencesWindow(window) {
- const UIFolderPath = this.dir.get_child('ui').get_path();
- let iconTheme = Gtk.IconTheme.get_for_display(Gdk.Display.get_default());
- iconTheme.add_search_path(UIFolderPath + `/icons`);
- const settings = this.getSettings('org.gnome.shell.extensions.gjsosk');
- const page1 = new Adw.PreferencesPage({
- title: _("General"),
- 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_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({
- title: _("Behavior")
- });
- page1.add(group1);
- const row0 = new Adw.ActionRow({
- title: _('Language')
- });
- group1.add(row0);
- 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");
- row0.add_suffix(langDrop);
- row0.activatable_widget = langDrop;
- const row1 = new Adw.ActionRow({
- title: _('Enable Dragging')
- });
- group1.add(row1);
- const dragToggle = new Gtk.Switch({
- active: settings.get_boolean('enable-drag'),
- valign: Gtk.Align.CENTER,
- });
- row1.add_suffix(dragToggle);
- row1.activatable_widget = dragToggle;
- const row1t3 = new Adw.ActionRow({
- title: _('Enable Panel Indicator')
- });
- group1.add(row1t3);
- const indEnabled = new Gtk.Switch({
- active: settings.get_boolean("indicator-enabled"),
- valign: Gtk.Align.CENTER,
- });
- row1t3.add_suffix(indEnabled);
- row1t3.activatable_widget = indEnabled;
- const row1t5 = new Adw.ActionRow({
- title: _('Open upon clicking in a text field')
- });
- group1.add(row1t5);
- let dragOptList = [_("Never"), _("Only on Touch"), _("Always")];
- let dragOpt = Gtk.DropDown.new_from_strings(dragOptList);
- dragOpt.valign = Gtk.Align.CENTER;
- dragOpt.selected = settings.get_int("enable-tap-gesture");
- row1t5.add_suffix(dragOpt);
- row1t5.activatable_widget = dragOpt;
- const row2 = new Adw.ExpanderRow({
- title: _('Portrait Sizing')
- });
- group1.add(row2);
- let pW = new Adw.ActionRow({
- title: _('Width (%)')
- })
- let pH = new Adw.ActionRow({
- title: _('Height (%)')
- })
- let numChanger_pW = Gtk.SpinButton.new_with_range(0, 100, 5);
- numChanger_pW.value = settings.get_int('portrait-width-percent');
- numChanger_pW.valign = Gtk.Align.CENTER;
- pW.add_suffix(numChanger_pW);
- pW.activatable_widget = numChanger_pW;
- let numChanger_pH = Gtk.SpinButton.new_with_range(0, 100, 5);
- numChanger_pH.value = settings.get_int('portrait-height-percent');
- numChanger_pH.valign = Gtk.Align.CENTER;
- pH.add_suffix(numChanger_pH);
- pH.activatable_widget = numChanger_pH;
- row2.add_row(pW);
- row2.add_row(pH);
- const row3 = new Adw.ExpanderRow({
- title: _('Landscape Sizing')
- });
- group1.add(row3);
- let lW = new Adw.ActionRow({
- title: _('Width (%)')
- });
- let lH = new Adw.ActionRow({
- title: _('Height (%)')
- });
- let numChanger_lW = Gtk.SpinButton.new_with_range(0, 100, 5);
- numChanger_lW.value = settings.get_int('landscape-width-percent');
- numChanger_lW.valign = Gtk.Align.CENTER;
- lW.add_suffix(numChanger_lW);
- lW.activatable_widget = numChanger_lW;
- let numChanger_lH = Gtk.SpinButton.new_with_range(0, 100, 5);
- numChanger_lH.value = settings.get_int('landscape-height-percent');
- numChanger_lH.valign = Gtk.Align.CENTER;
- lH.add_suffix(numChanger_lH);
- lH.activatable_widget = numChanger_lH;
- row3.add_row(lW);
- row3.add_row(lH);
- const row4 = new Adw.ActionRow({
- title: _('Default Position')
- });
- group1.add(row4);
- 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");
- row4.add_suffix(dropDown);
- row4.activatable_widget = dropDown;
- const group2 = new Adw.PreferencesGroup({
- title: _("Appearance")
- });
- page1.add(group2);
- const row5 = new Adw.ActionRow({
- title: _('Color')
- });
- group2.add(row5);settings.set_boolean("enable-tap-gesture", dragOpt.selected);
- let rgba = new Gdk.RGBA();
- rgba.parse("rgba(" + settings.get_double("background-r") + ", " + settings.get_double("background-g") + ", " + settings.get_double("background-b") + ", 1)");
- let colorButton = new Gtk.ColorButton({
- rgba,
- use_alpha: false,
- valign: Gtk.Align.CENTER
- });
- row5.add_suffix(colorButton);
- row5.activatable_widget = colorButton;
- let row6 = new Adw.ActionRow({
- title: _('Font Size (px)')
- });
- group2.add(row6);
- 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;
- let row7 = new Adw.ActionRow({
- title: _('Border Spacing (px)')
- });
- group2.add(row7);
- 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;
- const row8 = new Adw.ActionRow({
- title: _('Round Corners')
- });
- group2.add(row8);
- const dragToggle2 = new Gtk.Switch({
- active: settings.get_boolean('round-key-corners'),
- valign: Gtk.Align.CENTER,
- });
- row8.add_suffix(dragToggle2);
- row8.activatable_widget = dragToggle2;
-
- const row9 = new Adw.ActionRow({
- title: _('Play sound')
- });
- group2.add(row9);
- const dragToggle3 = new Gtk.Switch({
- active: settings.get_boolean('play-sound'),
- valign: Gtk.Align.CENTER,
- });
- row9.add_suffix(dragToggle3);
- row9.activatable_widget = dragToggle3;
- window.add(page1);
- let page2 = new Adw.PreferencesPage({
- title: _("About"),
- icon_name: 'info-symbolic',
- });
- let contribute_icon_pref_group = new Adw.PreferencesGroup();
- let icon_box = new Gtk.Box({
- orientation: Gtk.Orientation.VERTICAL,
- margin_top: 24,
- margin_bottom: 24,
- spacing: 18,
- });
- let icon_image = new Gtk.Image({
- icon_name: "input-keyboard-symbolic",
- pixel_size: 128,
- });
- let label_box = new Gtk.Box({
- orientation: Gtk.Orientation.VERTICAL,
- spacing: 6,
- });
- let label = new Gtk.Label({
- label: "GJS OSK",
- wrap: true,
- });
- let context = label.get_style_context();
- context.add_class("title-1");
- let another_label = new Gtk.Label({
- label: _("Version ") + this.metadata.version
- });
- let links_pref_group = new Adw.PreferencesGroup();
- let code_row = new Adw.ActionRow({
- icon_name: "code-symbolic",
- title: _("More Information, submit feedback, and get help")
- });
- let github_link = new Gtk.LinkButton({
- label: "Github",
- uri: "https://github.com/Vishram1123/gjs-osk",
- });
- code_row.add_suffix(github_link);
- code_row.set_activatable_widget(github_link);
- links_pref_group.add(code_row);
- label_box.append(label);
- label_box.append(another_label);
- icon_box.append(icon_image);
- icon_box.append(label_box);
- contribute_icon_pref_group.add(icon_box);
- page2.add(contribute_icon_pref_group);
- page2.add(links_pref_group);
- window.add(page2);
- window.connect("close-request", () => {
- 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_boolean("round-key-corners", dragToggle2.active);
- settings.set_boolean("play-sound", dragToggle3.active);
- settings.set_int("default-snap", dropDown.selected);
- });
- }
- };
|