【问题标题】:How can I get a Gdk.Window task icon or title?如何获得 Gdk.Window 任务图标或标题?
【发布时间】:2016-05-22 08:20:57
【问题描述】:

我正在尝试:

//valac *.gs --pkg gtk+-3.0 

init
    Gtk.init(ref args)
    var ventana= new win()
    ventana.inicio()

    Gtk.main()


class win:Gtk.Window


    def inicio()

        var button= new Gtk.Button()
        button.clicked.connect(resizer)
        this.add(button)
        this.show_all()
    def resizer()
        var a=Gdk.Screen.get_default().get_window_stack()
        a.foreach(allwin)

    def allwin (w:Gdk.Window)
        var a=w.get_type_hint()
        if a!= Gdk.WindowTypeHint.DESKTOP

            w.resize(200,200)
            var iconpix= w.get_icon() //don't exist // [changed]
            var title= w.get_title() //don't exist // [changed]
            print "window"

但这些方法不存在。为什么?我不知道。 有什么建议么?我已经尝试过使用 Wnck,但我也遇到了错误。

【问题讨论】:

  • 您将这些方法用作TypeHint 的成员,它没有功能。 Gdk.Window 可能也不是您想要的,因为它仅用于在处理图标和标题本身的Gtk.Window 上绘图。你真的很想向你的主要Gtk.Window 询问它的图标和标题。
  • 这个问题可能是XY problem。您要解决的实际问题是什么?
  • 对不起,是我的错误。但是,无论如何我都找不到获取图标或标题的方法。
  • 对不起,詹斯,我理解你。我的目标是一个带有运行应用程序任务栏的桌面面板。我想从桌面的所有窗口中获取它们的图标和标题。获取它们的方法将是 gdk, wnck ...
  • 如果您只想支持 X11,您可以使用适当的窗口属性名称调用 X11.get_window_property。(_NET_WM_NAME 和 _NET_WM_ICON_NAME)。另见specifications.freedesktop.org/wm-spec/1.4/ar01s05.html

标签: window gtk vala gdk genie


【解决方案1】:

您纠正了WNCK 是要走的路。 Gdk 只能看到你的程序创建的窗口。 Wnck 让您可以访问由窗口管理器管理的所有窗口。你的方法应该像我在Genie 中为Puppy Linux 写的dock 所做的一样。

【讨论】:

    【解决方案2】:

    我认为使用 Gdk 是不可能的。我已经尝试(更多时间)将 Wnck 库提供给 C 编译器这个 '-DWNCK_I_KNOW_THIS_IS_UNSTABLE' 并且可以工作但有一个警告:未处理的操作类型 _OB_WM_ACTION_UNDECORATE

    //valac *.gs --pkg gtk+-3.0 --pkg libwnck-3.0 -X '-DWNCK_I_KNOW_THIS_IS_UNSTABLE'
    
    init
        Gtk.init(ref args)
        var ventana= new win()
        ventana.inicio()
        ventana.resizer()
        Gtk.main()
    
    
    class win:Gtk.Window
    
        won:weak GLib.List of Wnck.Window
    
        def inicio()
    
            var button= new Gtk.Button()
            button.clicked.connect(resizer)
            this.add(button)
            this.show_all()
    
        def resizer()
            won= Wnck.Screen.get_default().get_windows()
            won.foreach(allwin)
    
        def allwin(w:Wnck.Window)
            if w.is_skip_tasklist() or w.is_skip_pager()
                pass
            else
                print w.get_name()
    

    【讨论】:

      猜你喜欢
      • 2015-05-23
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多