如何在Gnome Shell中设置应用程序标题?
我刚开始学习Gtk+开发,想用PyGObject和Gtk+3.0写一个应用程序。不过,当我在命令行中从Gnome Shell运行我的应用时,左上角显示的应用名称只是我用来启动应用的Python源文件的名字。我想知道有没有办法设置在Gnome Shell中显示的应用名称。我查过Gtk.Application,虽然它似乎能做到我想要的一些功能(至少从Gtk+3.3开始),但我还是搞不清楚怎么修改活动名称或应用名称。
2 个回答
2023年的一个回答提到,GTK4中不再推荐使用set_wmclass
这个方法。如果你想在Gnome桌面的顶部工具栏显示自定义名称,可以使用set_prgname
这个方法(这里有C语言的链接,还有Vala的链接)。需要注意的是,set_application_name
这个方法不会改变顶部工具栏的名称。
下面是一个用Vala写的例子:
public class HelloApp : Gtk.Application {
public const string VERSION = "0.1.0";
public HelloApp() {
Object(application_id: "com.example.apps.hello");
}
protected override void activate() {
var window = new Gtk.ApplicationWindow(this) {
default_width = 640,
default_height = 480,
title = @"Hello $(VERSION)"
};
window.present();
}
public static int main(string[] args) {
Environment.set_prgname(@"Hello $(VERSION)");
return new HelloApp().run(args);
}
}
构建的方法是:
valac --target-glib=auto --pkg gtk4 hello.vala -o hello
gnome-shell会尝试把窗口和一个应用程序(也就是一个ShellApp
实例)匹配起来,并使用那个应用的名字。相关的代码可以在这里找到:http://git.gnome.org/browse/gnome-shell/tree/src/shell-window-tracker.c#n328
但是如果它找不到这个窗口对应的ShellApp
,那么它就会退而求其次,使用ICCCM标准中规定的WM_CLASS
(具体说明可以在这里查看:http://tronche.com/gui/x/icccm/sec-4.1.2.5),相关代码在这里:http://git.gnome.org/browse/gnome-shell/tree/src/shell-app.c#n361
所以,如果你没有安装一个.desktop文件让它找到应用的名字,那么你就会看到默认的WM_CLASS
出现在那里。GTK会根据可执行文件的名字自动生成这个值。在窗口显示之前(也就是在调用_show
之前),你可以使用gtk_window_set_wmclass()
来覆盖这个值。
下面是一个简单的例子,它会显示为“Hello World”。别忘了设置窗口标题哦!
#!/usr/bin/python
from gi.repository import Gtk
win = Gtk.Window()
win.connect("delete-event", Gtk.main_quit)
win.set_wmclass ("Hello World", "Hello World")
win.set_title ("Hello World")
win.show_all()
Gtk.main()