问题标签 [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.

0 投票
1 回答
240 浏览

gnome-shell - 是否可以在 Gnome Shell 环境之外导入 Gvc 类型库?

我想使用GJS中 Gnome Shell GIR 中使用的 Gvc ( libgnome-volume-control ) ,但除了在 Gnome Shell 环境中(例如 Gnome Shell 扩展)之外,找不到访问它的方法。实际上,我什至无法弄清楚它在哪里。这可能吗?

更新

根据 Philip Withnall 的评论(关于 hacky 解决方法),我发现可以像这样导入:

0 投票
1 回答
530 浏览

segmentation-fault - 为什么我的 Gdk/cairo 类会导致段错误?

我编写了一个小类来从 base64 编码的 JPEG 字节数组创建一个圆形图像,但它似乎经常导致段错误。这是我能找到的在 GJS 中创建 cairo 表面的最简单方法,尽管我不反对 Clutter,如果它解决了我的问题。

CairoImageSurface 似乎没有破坏函数或信号,我尝试取消 pixbuf 以查看是否有帮助,但这会导致错误:

GLib-GObject-WARNING **:g_object_remove_toggle_ref:找不到切换参考 0x7f45456b19e0((nil))

我在一个简单的 Gtk 窗口中使用了它并且它可以工作,但它似乎会导致大约一半的时间段错误。我对内存管理知之甚少,因为我通常使用垃圾收集语言,所以我只假设这与我没有释放的内存有关。

有没有什么明显的我做错了,更简单的方法来做这个杂乱或简单的方法我可以追踪任意段错误?

0 投票
2 回答
374 浏览

glib - 在 GJS 中编写本机消息传递主机

我正在尝试为 GJS 中的 chrome/firefox 扩展编写本机消息传递主机(因为它将依赖已经用 GJS 编写的代码),但遇到了一些障碍。我使用chrome-gnome-shell作为粗略模板,因为它还使用 GLib/Gio 自省和 GApplication,但它具有struct我没有的 python 优势。

很快,本地消息传递主机通过 stdin/stdout 交换消息,这些消息是 Int32(4 字节)长度,后跟一串 utf-8 编码的 JSON。

chrome-gnome-shell 使用GLib.IOChannelwithset_encoding('utf-8')struct来处理 int32 字节。我在 GJS 中使用该类时遇到了麻烦,并且没有struct尝试使用/和/Gio.UnixInputStream包裹Gio.DataInputStream(和输出对应物)。put_int32()read_int32()put_string()read_string()

显然,我对自己在做什么感到非常困惑。如果我调用Gio.DataInputStream.read_int32()它返回一个数字369098752,所以我猜测 int32 没有被转换为常规数字。如果我打电话Gio.DataInputStream.read_bytes(4, null).unref_to_array()得到一个字节数组;ByteArray.toString()返回 '​​\u0016' 而 ByteArray[0] 返回似乎是实际长度的 '22'。

一些关于读取/写入 int32 到数据流的指针,将不胜感激。

chrome-gnome-shell 参考:

0 投票
1 回答
178 浏览

javascript - gjs中的异步代码在调用回调之前退出

当我尝试运行异步代码(例如读取文件或发送 http 请求)时,程序会在调用回调之前立即退出。

0 投票
1 回答
267 浏览

javascript - 如何检查 Gnome/gjs/Gio 中的错误代码

这不起作用(目录存在时不会发生任何事情):

0 投票
1 回答
201 浏览

gnome-shell - 如何通过名称获取 Clutter.Actor

我正在使用 GJS,我如何Clutter.Actor通过它的名称获得。例如,如果我想获得 GNOME Shell 的顶部面板,我如何Clutter.Actor通过它的名称“面板”获得它?

我的研究最终在某个地方Clutter.Stage可以附加 Actor(s),但是根据我的看法,可以有多个 Stages 设置,所以我可能还必须找到我想要的 Actor 是哪个 Stage找到在。现在我想知道如何通过名称获取 Actor。

我从代码中看到了;Main.layoutManager.panelBox获取 GNOME Shell 的顶部面板,但这似乎不适用于我的情况,因为它是我想要获取的第三方 Actor,并且我希望获取 Actor(s) 的方式是通过名称,因为我可能正在工作与不同的第三方参与者。

我知道有一种方法可以得到这个;Main.layoutManager.panelBox.get_parent().get_children()我可以通过它的索引获得特定的演员,但我认为这不是解决这个问题的最佳方法,考虑到事物的动态性,其次,我觉得这种方式有点草率所以..

我能够通过窥镜获得名称(Alt + F2 -> lg -> 选择器)。目前,我想要获取的特定 Actor 是 DashtoDock,仅供参考。

谢谢~希望有人能帮忙。

0 投票
1 回答
480 浏览

gnome-shell - 如何测试我的 GNOME Shell 扩展而不会有使 shell 崩溃的风险?

在开发过程中,我向我的扩展程序引入了一个错误,该错误导致gnome-shell在尝试加载扩展程序时崩溃,并带有以下相当宽泛的错误消息:

能够在

  • 获取描述性错误消息,告诉我错误的实际位置
  • 不会冒险破坏整个外壳

这可能吗?


我已经搜索了gnome-shellgjsrepos 以尝试找到改进错误消息的方法。我发现三个调用站点发出带有前缀的错误,但在 GJS 中Execution of main.js threw exception:找不到实际调用。JS_EvaluateScript


我也尝试gjs像这样运行我的扩展:

gjs抱怨

虽然St-1.0.typelib确实位于/usr/lib/gnome-shell


我知道我可以使用 LookGlass 来评估一些 JS 字符串。


我知道该错误是由St使用无效参数调用本机代码 () 引起的。

0 投票
1 回答
618 浏览

gtk - 如何从 gjs 中的 Gtk.Context 中缩小窗口按钮

我正在尝试从当前 gtk 活动主题中提取 windows 按钮并将其呈现在 gjs 中的 cairo 上下文中,以用于 Gnome-Global-Menu ( https://gitlab.com/lestcape/Gnome-Global-应用菜单)。例如,我有一个代码用于提取关闭按钮。

这是我的第一个近似值,但它不起作用。我检测到 Ambiance 主题中的 css 是这样的:

生成我的代码的路径具有以下格式:

发生这种情况是因为 gjs 中 Gtk.Button 的 GType 返回我 GtkButton 而不是按钮,就像在主题中一样。所以,我创建了一个助手类:

然后代替:

我加:

然后我的路径和 css 属性匹配,但在我的 cairo 上下文中也没有显示任何内容。绘图区域的宽度和高度是 gnome shell 面板的大小 27 像素。

那么,这里缺少什么?

另一方面,如果我直接从 Gtk.widgets 获得我想要的上下文,那么它正在工作:

使用最后一个代码实现的示例在这里:https ://gitlab.com/lestcape/metacity-buttons并且可以在这里看到显示它工作的视频:https://www.youtube.com/watch?v=7CnoMEM44Do&t =18s

0 投票
1 回答
162 浏览

gtk - Clutter.Text 的 set_editable() 似乎不起作用

Clutter.Text我正在尝试使用'方法创建一个可编辑的多行文本框set_editable()

但这似乎不起作用。我错过了什么?这是使用上面代码的简化版extension.js

作为脚注,Gtk.TextView看起来正是我所需要的,但我无法弄清楚如何将它集成到 PopupMenu。任何想法?

0 投票
1 回答
541 浏览

javascript - 在开发 Gnome Shell 和扩展时我应该使用 ES6 还是 Lang 类?

我正在开发一个简单的 gnome shell 扩展,在HACKING.mdgnome shell repo 中,它说我们应该使用new Lang.Class()语言框架来初始化一个类。

但是,当我查看官方 gnome-shell 扩展存储库示例时,每个扩展都使用 es6 类语法,而不是new Lang.Class().

所以,我的问题是:我应该对 shell 扩展使用 es6 类语法并使用new Lang.Class()框架为 gnome-shell 本身做贡献吗?另外,我在哪里可以获得有关 gnome-shell 是什么架构以及我可以使用的完整 api 的更多信息?我搜索谷歌,所有信息似乎都已损坏或过时,这对于像我这样天真的人来说非常失望。

谢谢你。