问题标签 [gjs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
glib - 如何在 GJS 中使用“out caller-allocates”?
我正在尝试通过具有此签名的 GData.ContactsContact.get_photo() 检索联系人照片:
但是,如果我只是为此(例如)将变量声明为“调用者分配”let length;
或实例化一个新的 G_TYPE长度,结果总是:
我只能找到一些类似问题的旧示例,它们都涉及注释错误:
似乎该方法的注释不正确。它应该是(out caller-allocates)(数组长度=长度)。
这是一个自省错误,我可以解决和/或提交错误,还是我误解了 Javascript 中的“out caller-allocates”用法?
gtk - 为什么我的 GtkEntry 图标工具提示不起作用?
我在 GJS 中定义了一个 GtkEntry,如下所示:
但是,工具提示永远不会显示。没有错误被打印到日志中,我已经梳理了文档的属性和功能,我错过了什么吗?
更新
get_icon_at_pos()
这是处理程序使用的一个已知错误, Daniel Boles 在 2017-07-31::query-tooltip
已将修复推送到上游。
javascript - GJS 中为 Array 定义 GObject 属性的正确方法是什么?
我在GJS GObject overrides中看到,大多数类型都有对应于 Javascript 类型的定义,但是我应该如何为标准的字符串数组定义一个属性?我想到的一些选择:
- 使用 TYPE_OBJECT 和 GList,但是当我检索它时,GJS 会将它映射到一个数组吗?
- 使用 TYPE_OBJECT 和带有“as”类型的 GVariant 并自己解压
- 使用 TYPE_BOXED 和 TYPE_ARRAY,但是 TYPE_ARRAY 是否可以与 Javascript 的 Array 类型相媲美?
key-bindings - 是否可以在 GJS 中调用 Gdk.Seat.grab() ?
似乎当我在 GJS 中调用 Gdk.Seat.grab() 时出现错误:
这个函数和类在 GJS Docs 中列出,但也许我说错了?如果我打电话typeof
,Gdk.Seat.grab
它就会回来undefined
。这是不可能的,还是有另一种方法可以让我以这种方式抓住焦点?
我的用例是从用户那里收集一个键绑定,我可以使用它Gtk.CellRendererAccel
,但我不想使用Gtk.TreeView
. 文档对 CellRenderers 说:
这些对象主要由 GtkTreeView 小部件使用,尽管它们没有以任何特定方式与它们绑定。
和...
GtkCellRenderer 的主要用途是在 cairo_t 上绘制某些图形元素。
这意味着我可以在 TreeView 之外使用它,但没有关于如何使用的提示。
gtk - 从 GJS 中的资源加载 Gtk.Image
我正在尝试从资源加载 Gtk.Image 但我无法弄清楚我做错了什么。
我的 gresource.xml 中有 png
我正在尝试像这样加载该png:
但我总是得到一个破碎的形象。
gnome - 从 GJS 中的 org.gnome.shell 模式获取启用的扩展
我正在尝试使用启用的扩展获取存储在 org.gnome.shell 架构中的值。
但是这句话说没有安装org.gnome.shell schema
我在我自己的 GJS 应用程序中调用了这一行。并使用 dconf 编辑器导航,我看到了这个模式和那里的值。
我错过了什么?
谢谢
sockets - 为什么 Gio.Socket.create_source() 返回 null?
我是套接字的新手,并试图通过 GJS/Gio 中的一些套接字编程工作并碰壁创建 GLib.Source 来处理从套接字接收。相关代码(我认为)是:
一切顺利,直到this.sock_source.set_callback()
我收到错误时打电话:
我Gio.Socket.create_source()
在代码的另一部分调用了另一个套接字(尽管是 UDP),它工作正常。调用create_source()
本身不会引发任何错误(即使我使用 运行我的脚本)并且文档G_MESSAGES_DEBUG=all
中没有提到该函数曾经返回,所以我对自己做错了什么感到困惑。null
编辑:
这里有 3 年的评论说:
这不起作用,因为1) Socket.create_source 在 typelib 中不存在,因为它在 Glib/gio/gsocket.c 中标记为 (skip)
但我认为这不再正确,因为我在我的 UDP 套接字上创建了一个源,尽管该套接字是“手工制作”的,而不是使用Gio.SocketClient()
.
sockets - 如何从 UDP 侦听器套接字上的传入消息中获取远程地址?
Gio.Socket
虽然可以通过将它的文件描述符包装在中来读取 a ,但在 GJSGio.DataInputStream
中使用接收是不可能的,因为正如这里评论的那样:Gio.Socket.receive_from()
GJS 将在将数组参数传递给 C 代码之前克隆它们,这将使对 Socket.receive_from 的调用起作用并返回接收到的字节数以及数据包的来源。缓冲区内容将保持不变,因为实际读入的缓冲区是一个已释放的克隆。
因此,输入参数被克隆,数据将被写入克隆的缓冲区,而不是buffer
实际传入的实例。
尽管从数据流中读取不是问题,但这是Gio.Socket.receive_from()
我能找到的从 UDP 侦听器获取远程地址的唯一方法,因为Gio.Socket.remote_address
它是未定义的。不幸的是,正如文档所说Gio.Socket.receive()
:
对于
G_SOCKET_TYPE_DATAGRAM
[...] 如果接收到的消息太大而无法放入buffer
,则超出size
字节的数据将被丢弃,而没有任何明确指示已发生这种情况。
因此,如果我尝试Gio.Socket.receive_from(new Uint8Array(0), null);
获取地址之类的方法,则数据包被吞下,但如果我通过文件描述符读取,我无法判断消息来自何处。是否有另一种非破坏性方法来获取数据包的传入地址?
x509 - 如何在 GJS 中获取 TlsCertificate 的 SHA1 指纹?
我正在尝试获取Gio.TlsCertificate
连接的指纹,据我所知,这只是 DER 形式的证书的 SHA1 校验和。所以我想我可以在对象GLib.compute_checksum_for_data()
的certificate
属性上使用Gio.TlsCertificate
,但是任何访问该属性的尝试都会导致:
JS 错误:错误:无法自省 GValue 中容器的元素类型
有没有一种方法可以访问证书属性,或者有一种更简单的方法可以在 GLib 中对证书进行指纹识别?
gnome-shell-extensions - gnome-shell-extensions 拖放
在尝试将 D&D 支持添加到我正在编写的 gnome-shell-extension 时,我遇到了一些麻烦。我可以为任何打开的窗口创建放置目标,但这就是我设法完成的全部。
我无法区分窗户。我尝试使用global.get_stage().get_actor_at_pos(Clutter.PickMode.ALL, x, y).get_parent().get_parent().get_meta_window().get_wm_class()
,但有一半时间它给了我错误的窗口,并且时不时地它只是返回null
。另外我不确定如何将信息放入目标中。
我要做的就是将文件 URI 放入浏览器窗口或将文件放入文件管理器。
在 gnome-shell-extensions 中是否有可能,我将如何实现它?任何的建议都受欢迎!