search: Define SearchResultInterface and implement valid results with it
Since all the search result classes are now GObject classes, we can enforce the methods we want to have in there (just activate() for now) using an interface, to make sure they are implementing what we require and to easily group all the classes that can be used as search results, even though they are not extending SearchResult. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/559
This commit is contained in:
parent
c4c5c4fd5c
commit
91a5133116
@ -2035,6 +2035,7 @@ var AppFolderPopup = GObject.registerClass({
|
||||
|
||||
var AppIcon = GObject.registerClass({
|
||||
GTypeName: 'AppDisplay_AppIcon',
|
||||
Implements: [Search.SearchResultInterface],
|
||||
Signals: {
|
||||
'menu-state-changed': { param_types: [GObject.TYPE_BOOLEAN] },
|
||||
'sync-tooltip': {},
|
||||
|
@ -1,5 +1,5 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
/* exported SearchResultsView */
|
||||
/* exported SearchResultsView, SearchResultInterface */
|
||||
|
||||
const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
|
||||
|
||||
@ -32,8 +32,17 @@ class MaxWidthBox extends St.BoxLayout {
|
||||
}
|
||||
});
|
||||
|
||||
var SearchResult = GObject.registerClass(
|
||||
class SearchResult extends St.Button {
|
||||
var SearchResultInterface = GObject.registerClass({
|
||||
Requires: [Clutter.Actor],
|
||||
}, class SearchResultInterface extends GObject.Interface {
|
||||
activate() {
|
||||
throw new GObject.NotImplementedError('activate in %s'.format(this.constructor.name));
|
||||
}
|
||||
});
|
||||
|
||||
var SearchResult = GObject.registerClass({
|
||||
Implements: [SearchResultInterface]
|
||||
}, class SearchResult extends St.Button {
|
||||
_init(provider, metaInfo, resultsView) {
|
||||
this.provider = provider;
|
||||
this.metaInfo = metaInfo;
|
||||
@ -242,6 +251,8 @@ var SearchResultsBase = GObject.registerClass({
|
||||
metasNeeded.forEach((resultId, i) => {
|
||||
let meta = metas[i];
|
||||
let display = this._createResultDisplay(meta);
|
||||
if (!(display instanceof SearchResultInterface))
|
||||
throw new Error(`${display} is not a valid search result`);
|
||||
display.connect('key-focus-in', this._keyFocusIn.bind(this));
|
||||
this._resultDisplays[resultId] = display;
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user