Remove realm search provider. It sux.
This commit is contained in:
parent
1ee48a7649
commit
5b10aedeed
@ -158,7 +158,6 @@
|
|||||||
|
|
||||||
<file>ui/realms/realmIndicator.js</file>
|
<file>ui/realms/realmIndicator.js</file>
|
||||||
<file>ui/realms/realmManager.js</file>
|
<file>ui/realms/realmManager.js</file>
|
||||||
<file>ui/realms/realmSearchProvider.js</file>
|
|
||||||
<file>ui/realms/realmSwitcher.js</file>
|
<file>ui/realms/realmSwitcher.js</file>
|
||||||
<file>ui/realms/realmLabels.js</file>
|
<file>ui/realms/realmLabels.js</file>
|
||||||
<file>ui/realms/realmWindowMenu.js</file>
|
<file>ui/realms/realmWindowMenu.js</file>
|
||||||
|
@ -1,329 +0,0 @@
|
|||||||
import Clutter from 'gi://Clutter';
|
|
||||||
import GObject from 'gi://GObject';
|
|
||||||
import Pango from 'gi://Pango';
|
|
||||||
import Shell from 'gi://Shell';
|
|
||||||
import St from 'gi://St';
|
|
||||||
|
|
||||||
import * as Search from '../search.js';
|
|
||||||
import * as Main from '../main.js';
|
|
||||||
import * as Util from '../../misc/util.js';
|
|
||||||
|
|
||||||
// Based on ProviderInfo in search.js
|
|
||||||
const RealmProviderInfo = GObject.registerClass(
|
|
||||||
class RealmProviderInfo extends St.Button {
|
|
||||||
_init() {
|
|
||||||
super._init({
|
|
||||||
style_class: 'search-provider-icon',
|
|
||||||
reactive: false,
|
|
||||||
can_focus: false,
|
|
||||||
accessible_name: "Realms",
|
|
||||||
track_hover: false,
|
|
||||||
y_align: Clutter.ActorAlign.START,
|
|
||||||
});
|
|
||||||
|
|
||||||
this._content = new St.BoxLayout({
|
|
||||||
vertical: false,
|
|
||||||
style_class: 'list-search-provider-content'
|
|
||||||
});
|
|
||||||
this.set_child(this._content);
|
|
||||||
|
|
||||||
let icon = new St.Icon({
|
|
||||||
icon_size: this.PROVIDER_ICON_SIZE,
|
|
||||||
icon_name: 'computer'
|
|
||||||
});
|
|
||||||
|
|
||||||
let detailsBox = new St.BoxLayout({
|
|
||||||
style_class: 'list-search-provider-details',
|
|
||||||
vertical: true,
|
|
||||||
x_expand: true
|
|
||||||
});
|
|
||||||
|
|
||||||
let nameLabel = new St.Label({
|
|
||||||
text: "Realms",
|
|
||||||
x_align: Clutter.ActorAlign.START
|
|
||||||
});
|
|
||||||
|
|
||||||
this._moreLabel = new St.Label({ x_align: Clutter.ActorAlign.START });
|
|
||||||
|
|
||||||
detailsBox.add_child(nameLabel);
|
|
||||||
detailsBox.add_child(this._moreLabel);
|
|
||||||
|
|
||||||
|
|
||||||
this._content.add_child(icon);
|
|
||||||
this._content.add_child(detailsBox);
|
|
||||||
}
|
|
||||||
|
|
||||||
get PROVIDER_ICON_SIZE() {
|
|
||||||
return 48;
|
|
||||||
}
|
|
||||||
|
|
||||||
setMoreCount(count) {
|
|
||||||
this._moreLabel.text = ngettext("%d more", "%d more", count).format(count);
|
|
||||||
this._moreLabel.visible = count > 0;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const MAX_LIST_SEARCH_RESULTS_ROWS = 10;
|
|
||||||
|
|
||||||
// Based on ListSearchResult in search.js
|
|
||||||
const RealmSearchResult = GObject.registerClass(
|
|
||||||
class ListSearchResult extends Search.SearchResult {
|
|
||||||
_init(provider, metaInfo, resultsView) {
|
|
||||||
super._init(provider, metaInfo, resultsView);
|
|
||||||
|
|
||||||
this.style_class = 'list-search-result';
|
|
||||||
|
|
||||||
let content = new St.BoxLayout({
|
|
||||||
style_class: 'list-search-result-content',
|
|
||||||
vertical: false,
|
|
||||||
x_align: Clutter.ActorAlign.FILL,
|
|
||||||
x_expand: true,
|
|
||||||
y_expand: true,
|
|
||||||
});
|
|
||||||
this.set_child(content);
|
|
||||||
|
|
||||||
let titleBox = new St.BoxLayout({
|
|
||||||
style_class: 'list-search-result-title',
|
|
||||||
y_align: Clutter.ActorAlign.CENTER,
|
|
||||||
});
|
|
||||||
|
|
||||||
content.add_child(titleBox);
|
|
||||||
|
|
||||||
// An icon for, or thumbnail of, content
|
|
||||||
let icon = this.metaInfo['createIcon'](this.ICON_SIZE);
|
|
||||||
if (icon)
|
|
||||||
titleBox.add_icon(icon);
|
|
||||||
|
|
||||||
let title = new St.Label({
|
|
||||||
text: this.metaInfo['name'],
|
|
||||||
y_align: Clutter.ActorAlign.CENTER,
|
|
||||||
});
|
|
||||||
titleBox.add_child(title);
|
|
||||||
|
|
||||||
this.label_actor = title;
|
|
||||||
|
|
||||||
if (this.metaInfo['description']) {
|
|
||||||
this._descriptionLabel = new St.Label({
|
|
||||||
style_class: 'list-search-result-description',
|
|
||||||
x_expand: true,
|
|
||||||
x_align: Clutter.ActorAlign.START,
|
|
||||||
y_align: Clutter.ActorAlign.CENTER,
|
|
||||||
});
|
|
||||||
this._descriptionLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
|
||||||
content.add_child(this._descriptionLabel);
|
|
||||||
|
|
||||||
this._resultsView.connectObject(
|
|
||||||
'terms-changed', this._highlightTerms.bind(this), this);
|
|
||||||
|
|
||||||
this._highlightTerms();
|
|
||||||
}
|
|
||||||
|
|
||||||
this._createConfigButton(content);
|
|
||||||
}
|
|
||||||
|
|
||||||
_createConfigButton(content) {
|
|
||||||
let id = this.metaInfo['id'];
|
|
||||||
|
|
||||||
if (id != ':new:') {
|
|
||||||
this.configButton = new St.Button({
|
|
||||||
style_class: 'button',
|
|
||||||
track_hover: true,
|
|
||||||
can_focus: true,
|
|
||||||
child: new St.Icon({
|
|
||||||
style_class: 'realm-config-icon',
|
|
||||||
icon_name: 'emblem-system-symbolic',
|
|
||||||
icon_size: 24,
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
|
|
||||||
this.configButton.connect('clicked', () => {
|
|
||||||
Main.overview.toggle();
|
|
||||||
Util.spawn(['/usr/libexec/realm-config-ui', id]);
|
|
||||||
});
|
|
||||||
|
|
||||||
content.add_child(this.configButton);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
get ICON_SIZE() {
|
|
||||||
return 24;
|
|
||||||
}
|
|
||||||
|
|
||||||
_highlightTerms() {
|
|
||||||
let markup = this._resultsView.highlightTerms(this.metaInfo['description'].split('\n')[0]);
|
|
||||||
this._descriptionLabel.clutter_text.set_markup(markup);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Based on ListSearchResults in search.js
|
|
||||||
const RealmSearchResults = GObject.registerClass(
|
|
||||||
class RealmSearchResults extends Search.SearchResultsBase {
|
|
||||||
_init(provider, resultsView) {
|
|
||||||
super._init(provider, resultsView);
|
|
||||||
|
|
||||||
this._container = new St.BoxLayout({ style_class: 'search-section-content' });
|
|
||||||
this.providerInfo = new RealmProviderInfo();
|
|
||||||
this.providerInfo.connect('key-focus-in', this._keyFocusIn.bind(this));
|
|
||||||
this.providerInfo.connect('clicked', () => {
|
|
||||||
Main.overview.toggle();
|
|
||||||
});
|
|
||||||
|
|
||||||
this._container.add_child(this.providerInfo);
|
|
||||||
|
|
||||||
this._content = new St.BoxLayout({
|
|
||||||
style_class: 'list-search-results',
|
|
||||||
vertical: true,
|
|
||||||
x_expand: true,
|
|
||||||
});
|
|
||||||
this._container.add_child(this._content);
|
|
||||||
|
|
||||||
this._resultDisplayBin.set_child(this._container);
|
|
||||||
}
|
|
||||||
|
|
||||||
_setMoreCount(count) {
|
|
||||||
this.providerInfo.setMoreCount(count);
|
|
||||||
}
|
|
||||||
|
|
||||||
_getMaxDisplayedResults() {
|
|
||||||
return MAX_LIST_SEARCH_RESULTS_ROWS;
|
|
||||||
}
|
|
||||||
|
|
||||||
_clearResultDisplay() {
|
|
||||||
this._content.remove_all_children();
|
|
||||||
}
|
|
||||||
|
|
||||||
_createResultDisplay(meta) {
|
|
||||||
return super._createResultDisplay(meta) ||
|
|
||||||
new RealmSearchResult(this.provider, meta, this._resultsView);
|
|
||||||
}
|
|
||||||
|
|
||||||
_addItem(display) {
|
|
||||||
this._content.add_child(display);
|
|
||||||
}
|
|
||||||
|
|
||||||
getFirstResult() {
|
|
||||||
if (this._content.get_n_children() > 0)
|
|
||||||
return this._content.get_child_at_index(0);
|
|
||||||
else
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
export const RealmSearchProvider = class RealmSearchProvider {
|
|
||||||
constructor() {
|
|
||||||
this._shellRealms = Shell.Realms.get_default();
|
|
||||||
this.id = 'realms';
|
|
||||||
this.isRemoteProvider = false;
|
|
||||||
this.canLaunchSearch = false;
|
|
||||||
this.display = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
createResultDisplay(resultsView) {
|
|
||||||
this.display = new RealmSearchResults(this, resultsView);
|
|
||||||
this.display.connect('notify::focus-child', resultsView._focusChildChanged.bind(resultsView));
|
|
||||||
this.display.hide();
|
|
||||||
resultsView._content.add_child(this.display);
|
|
||||||
}
|
|
||||||
|
|
||||||
createIcon(size, realm) {
|
|
||||||
if (realm.is_running()) {
|
|
||||||
return new St.Icon({ icon_name: 'emblem-synchronizing', icon_size: size });
|
|
||||||
} else {
|
|
||||||
return new St.Icon({ icon_name: 'exaile', icon_size: size });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
createRealmMeta(realm) {
|
|
||||||
let id = realm.get_realm_name();
|
|
||||||
let description = '';
|
|
||||||
if (realm.is_running()) {
|
|
||||||
description = `Set realm-${id} as current realm`;
|
|
||||||
} else {
|
|
||||||
description = `Start realm-${id}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
id: id,
|
|
||||||
name: `realm-${id}`,
|
|
||||||
description: description,
|
|
||||||
createIcon: size => {
|
|
||||||
return this.createIcon(size, realm);
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
createNewRealmMeta() {
|
|
||||||
return {
|
|
||||||
id: ':new:',
|
|
||||||
name: 'New Realm',
|
|
||||||
description: 'Create a new realm',
|
|
||||||
createIcon: size => {
|
|
||||||
return new St.Icon({
|
|
||||||
icon_name: 'computer',
|
|
||||||
icon_size: size,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getResultMetas (ids) {
|
|
||||||
let metas = [];
|
|
||||||
|
|
||||||
for (let id of ids) {
|
|
||||||
if (id == ":new:") {
|
|
||||||
metas.push(this.createNewRealmMeta());
|
|
||||||
} else {
|
|
||||||
let realm = this._shellRealms.realm_by_name(id);
|
|
||||||
if (realm && !realm.is_current()) {
|
|
||||||
metas.push(this.createRealmMeta(realm));
|
|
||||||
} else {
|
|
||||||
log(`No realm found for ${id}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new Promise(resolve => resolve(metas));
|
|
||||||
}
|
|
||||||
|
|
||||||
activateResult (resultId, _terms) {
|
|
||||||
|
|
||||||
if (resultId == ':new:') {
|
|
||||||
Main.overview.toggle();
|
|
||||||
Util.spawn(['/usr/libexec/realm-config-ui', '--new']);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let realm = this._shellRealms.realm_by_name(resultId);
|
|
||||||
if (realm) {
|
|
||||||
realm.set_current();
|
|
||||||
} else {
|
|
||||||
log(`No realm found for ${resultId}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
filterResults(results, maxNumber) {
|
|
||||||
return results.slice(0, maxNumber)
|
|
||||||
}
|
|
||||||
|
|
||||||
getInitialResultSet(terms, _cancellable) {
|
|
||||||
let realms = this._shellRealms.get_all_realms();
|
|
||||||
let matches = [];
|
|
||||||
|
|
||||||
if (terms.length == 1 && "new".startsWith(terms[0])) {
|
|
||||||
matches.push(":new:");
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let realm of realms) {
|
|
||||||
if (!realm.is_current()) {
|
|
||||||
let name = realm.get_realm_name();
|
|
||||||
if (terms.every(t => name.indexOf(t) != -1)) {
|
|
||||||
matches.push(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new Promise(resolve => resolve(matches));
|
|
||||||
}
|
|
||||||
|
|
||||||
getSubsearchResultSet(previousResults, terms, cancellable) {
|
|
||||||
return this.getInitialResultSet(terms, cancellable);
|
|
||||||
}
|
|
||||||
}
|
|
@ -149,7 +149,7 @@ class GridSearchResult extends SearchResult {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
export const SearchResultsBase = GObject.registerClass({
|
const SearchResultsBase = GObject.registerClass({
|
||||||
GTypeFlags: GObject.TypeFlags.ABSTRACT,
|
GTypeFlags: GObject.TypeFlags.ABSTRACT,
|
||||||
Properties: {
|
Properties: {
|
||||||
'focus-child': GObject.ParamSpec.object(
|
'focus-child': GObject.ParamSpec.object(
|
||||||
|
Loading…
Reference in New Issue
Block a user