diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in index d45cba319..672642590 100644 --- a/data/org.gnome.shell.gschema.xml.in +++ b/data/org.gnome.shell.gschema.xml.in @@ -45,6 +45,10 @@ [] <_summary>History for command (Alt-F2) dialog + + [] + <_summary>History for the looking glass dialog + diff --git a/js/ui/lookingGlass.js b/js/ui/lookingGlass.js index 7e7805c69..c98fa22f7 100644 --- a/js/ui/lookingGlass.js +++ b/js/ui/lookingGlass.js @@ -14,6 +14,7 @@ const Mainloop = imports.mainloop; const Gettext = imports.gettext.domain('gnome-shell'); const _ = Gettext.gettext; +const History = imports.misc.history; const ExtensionSystem = imports.ui.extensionSystem; const Link = imports.ui.link; const Tweener = imports.ui.tweener; @@ -37,6 +38,8 @@ var commandHeader = 'const Clutter = imports.gi.Clutter; ' + 'const it = Main.lookingGlass.getIt(); ' + 'const r = Lang.bind(Main.lookingGlass, Main.lookingGlass.getResult); '; +const HISTORY_KEY = 'looking-glass-history'; + function Notebook() { this._init(); } @@ -671,18 +674,10 @@ function LookingGlass() { LookingGlass.prototype = { _init : function() { - this._idleHistorySaveId = 0; - let historyPath = global.userdatadir + '/lookingglass-history.txt'; - this._historyFile = Gio.file_new_for_path(historyPath); - this._savedText = null; - this._historyNavIndex = -1; - this._history = []; this._borderPaintTarget = null; this._borderPaintId = 0; this._borderDestroyId = 0; - this._readHistory(); - this._open = false; this._offset = 0; @@ -779,31 +774,23 @@ LookingGlass.prototype = { if (text == '') return true; this._evaluate(text); - this._historyNavIndex = -1; return true; })); + + this._history = new History.HistoryManager(HISTORY_KEY); + this._history.connect('changed', Lang.bind(this, function(history, text) { + this._entry.text = text; + })); + this._entry.clutter_text.connect('key-press-event', Lang.bind(this, function(o, e) { let symbol = e.get_key_symbol(); if (symbol == Clutter.Up) { - if (this._historyNavIndex >= this._history.length - 1) - return true; - this._historyNavIndex++; - if (this._historyNavIndex == 0) - this._savedText = this._entry.text; - this._entry.text = this._history[this._history.length - this._historyNavIndex - 1]; + this._history.prevItem(o.get_text()); return true; } else if (symbol == Clutter.Down) { - if (this._historyNavIndex <= 0) - return true; - this._historyNavIndex--; - if (this._historyNavIndex < 0) - this._entry.text = this._savedText; - else - this._entry.text = this._history[this._history.length - this._historyNavIndex - 1]; + this._history.nextItem(o.get_text()); return true; } else { - this._historyNavIndex = -1; - this._savedText = null; return false; } })); @@ -821,29 +808,6 @@ LookingGlass.prototype = { + 'font-family: "' + fontDesc.get_family() + '";'; }, - _readHistory: function () { - if (!this._historyFile.query_exists(null)) - return; - let [result, contents, length, etag] = this._historyFile.load_contents(null); - this._history = contents.split('\n').filter(function (e) { return e != ''; }); - }, - - _queueHistorySave: function() { - if (this._idleHistorySaveId > 0) - return; - this._idleHistorySaveId = Mainloop.timeout_add_seconds(5, Lang.bind(this, this._doSaveHistory)); - }, - - _doSaveHistory: function () { - this._idleHistorySaveId = false; - let output = this._historyFile.replace(null, true, Gio.FileCreateFlags.NONE, null); - let dataOut = new Gio.DataOutputStream({ base_stream: output }); - dataOut.put_string(this._history.join('\n'), null); - dataOut.put_string('\n', null); - dataOut.close(null); - return false; - }, - _pushResult: function(command, obj) { let index = this._results.length + this._offset; let result = new Result('>>> ' + command, obj, index); @@ -874,8 +838,7 @@ LookingGlass.prototype = { }, _evaluate : function(command) { - this._history.push(command); - this._queueHistorySave(); + this._history.addItem(command); let fullCmd = commandHeader + command; @@ -962,6 +925,7 @@ LookingGlass.prototype = { this.actor.show(); this.actor.lower(Main.chrome.actor); this._open = true; + this._history.lastItem(); Tweener.removeTweens(this.actor); @@ -979,7 +943,6 @@ LookingGlass.prototype = { this._objInspector.actor.hide(); - this._historyNavIndex = -1; this._open = false; Tweener.removeTweens(this.actor);