-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
ivoarch
committed
Feb 8, 2017
1 parent
600efa2
commit ab605b8
Showing
5 changed files
with
216 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
{ | ||
"description": "Open Terminix in Quake mode .\n Credit to extensions.gnome.org/extension/877/empathy-button/ .\n Add keyboard shortcut (F10)", | ||
"description": "Open Terminix in Quake mode .\n Add default keyboard shortcut (F10) .\n Easy way to change keyboard shortcut key via extension settings", | ||
"name": "Terminix DropDown", | ||
"shell-version": [ | ||
"3.14", | ||
|
@@ -10,7 +10,8 @@ | |
], | ||
"url": "https://github.com/ivoarch/gnome-shell-TerminixDropdown", | ||
"uuid": "TerminixDropdown@[email protected]", | ||
"version": 2, | ||
"version": 3, | ||
"settings-schema": "org.gnome.shell.extensions.terminix-dropdown" | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
// Library imports | ||
const GObject = imports.gi.GObject; | ||
const Gdk = imports.gi.Gdk; | ||
const Gtk = imports.gi.Gtk; | ||
|
||
// Extension imports | ||
const Utils = imports.misc.extensionUtils.getCurrentExtension().imports.utils; | ||
const mySettings = Utils.getSettings(); | ||
|
||
// Globals | ||
const pretty_names = { | ||
'key': 'start terminix in quake mode' | ||
} | ||
|
||
function init() { | ||
} | ||
|
||
function buildPrefsWidget() { | ||
let model = new Gtk.ListStore(); | ||
|
||
model.set_column_types([ | ||
GObject.TYPE_STRING, | ||
GObject.TYPE_STRING, | ||
GObject.TYPE_INT, | ||
GObject.TYPE_INT | ||
]); | ||
|
||
global.log("Modal created."); | ||
|
||
let settings = Utils.getSettings(); | ||
|
||
for (key in pretty_names) { | ||
append_hotkey(model, settings, key, pretty_names[key]); | ||
} | ||
|
||
global.log("Added hotkeys to model"); | ||
|
||
let treeview = new Gtk.TreeView({ | ||
'expand': true, | ||
'model': model | ||
}); | ||
|
||
global.log("TreeView created."); | ||
|
||
let col; | ||
let cellrend; | ||
|
||
cellrend = new Gtk.CellRendererText(); | ||
|
||
col = new Gtk.TreeViewColumn({ | ||
'title': 'Keybinding', | ||
'expand': true | ||
}); | ||
|
||
col.pack_start(cellrend, true); | ||
col.add_attribute(cellrend, 'text', 1); | ||
|
||
|
||
treeview.append_column(col); | ||
|
||
global.log("Column one created."); | ||
|
||
cellrend = new Gtk.CellRendererAccel({ | ||
'editable': true, | ||
'accel-mode': Gtk.CellRendererAccelMode.GTK | ||
}); | ||
|
||
cellrend.connect('accel-edited', function(rend, iter, key, mods) { | ||
let value = Gtk.accelerator_name(key, mods); | ||
|
||
let [success, iter] = model.get_iter_from_string(iter); | ||
|
||
if (!success) { | ||
throw new Error("Something be broken, yo."); | ||
} | ||
|
||
let name = model.get_value(iter, 0); | ||
|
||
model.set(iter, [ 2, 3 ], [ mods, key ]); | ||
|
||
global.log("Changing value for " + name + ": " + value); | ||
|
||
settings.set_strv(name, [value]); | ||
}); | ||
|
||
col = new Gtk.TreeViewColumn({ | ||
'title': 'Accel' | ||
}); | ||
|
||
col.pack_end(cellrend, false); | ||
col.add_attribute(cellrend, 'accel-mods', 2); | ||
col.add_attribute(cellrend, 'accel-key', 3); | ||
|
||
treeview.append_column(col); | ||
|
||
global.log("Column two created."); | ||
|
||
let win = new Gtk.ScrolledWindow({ | ||
'vexpand': true | ||
}); | ||
win.add(treeview); | ||
|
||
global.log("ScrolledWindow created."); | ||
|
||
win.show_all(); | ||
|
||
global.log("Returning."); | ||
|
||
return win; | ||
} | ||
|
||
function append_hotkey(model, settings, name, pretty_name) { | ||
let [key, mods] = Gtk.accelerator_parse(settings.get_strv(name)[0]); | ||
|
||
let row = model.insert(10); | ||
|
||
model.set(row, [0, 1, 2, 3], [name, pretty_name, mods, key ]); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
const Gio = imports.gi.Gio; | ||
const Config = imports.misc.config; | ||
const ExtensionUtils = imports.misc.extensionUtils; | ||
|
||
/** | ||
* getSettings: | ||
* @schema: (optional): the GSettings schema id | ||
* | ||
* Builds and return a GSettings schema for @schema, using schema files | ||
* in extensionsdir/schemas. If @schema is not provided, it is taken from | ||
* metadata['settings-schema']. | ||
*/ | ||
function getSettings(schema) { | ||
let extension = ExtensionUtils.getCurrentExtension(); | ||
|
||
schema = schema || extension.metadata['settings-schema']; | ||
|
||
const GioSSS = Gio.SettingsSchemaSource; | ||
|
||
// check if this extension was built with "make zip-file", and thus | ||
// has the schema files in a subfolder | ||
// otherwise assume that extension has been installed in the | ||
// same prefix as gnome-shell (and therefore schemas are available | ||
// in the standard folders) | ||
let schemaDir = extension.dir.get_child('schemas'); | ||
let schemaSource; | ||
if (schemaDir.query_exists(null)) | ||
schemaSource = GioSSS.new_from_directory(schemaDir.get_path(), | ||
GioSSS.get_default(), | ||
false); | ||
else | ||
schemaSource = GioSSS.get_default(); | ||
|
||
let schemaObj = schemaSource.lookup(schema, true); | ||
if (!schemaObj) | ||
throw new Error('Schema ' + schema + ' could not be found for extension ' + | ||
extension.metadata.uuid + '. Please check your installation.'); | ||
|
||
return new Gio.Settings({ settings_schema: schemaObj }); | ||
} |