我尝试使用Clutter.Text
set_editable()
方法创建可编辑的多行文本框:
let label = new St.Label({ text: 'My dummy example.' });
label.clutter_text.set_editable(true);
label.clutter_text.set_activatable(true);
但它似乎不起作用。我错过了什么?以下是使用上述代码的简化extension.js
:
const St = imports.gi.St;
const Main = imports.ui.main;
const Pango = imports.gi.Pango;
const PanelMenu = imports.ui.panelMenu;
let btn;
function DummyApp() {
this._init();
}
DummyApp.prototype = {
__proto__: PanelMenu.Button.prototype,
_init: function() {
PanelMenu.Button.prototype._init.call(this, St.Align.START);
let button = new St.Bin();
let icon = new St.Icon({
icon_name: 'system-run-symbolic',
style_class: 'system-status-icon' });
button.set_child(icon);
this.actor.add_actor(button);
let mainBox = new St.BoxLayout();
let label = new St.Label({ text: 'My dummy example.' });
label.clutter_text.set_editable(true);
label.clutter_text.set_activatable(true);
mainBox.add_child(label);
this.menu.box.add(mainBox);
},
}
function init() {}
function enable() {
btn = new DummyApp();
Main.panel.addToStatusArea('dummyapp_sec', btn);
}
function disable() {
Main.panel._rightBox.remove_child(btn);
}

作为一个脚注,Gtk.TextView看起来就像我需要的那样,但是我还没弄清楚如何将它集成到PopupMenu中。有什么想法吗?
答案 0 :(得分:1)
默认情况下,Clutter中的参与者不会对事件做出反应;您需要将actor明确设置为reactive才能接收事件。
此外,您无法在GNOME Shell扩展中使用GTK小部件:GTK是一个客户端工具包,您正在为合成器和显示服务器编写扩展。