GtkとWnckを使って、ウィンドウのリストを取得する。

作りたいものを思いついたので、Wnckについてもう一度、少し調べてみました。
今回は、その方法の実験として書いたプログラムです。
ウィンドウのタイトルと、ウィンドウを開いているアプリケーションの名前を取得します。
アプリケーションの名前は何なのかはよくわかりませんが、実行ファイル名だったり、わかりやすい名前だったり、いろいろな場合があるようです。

こんな感じに表示されます。

# -*- coding: utf-8 -*-
import gtk
import wnck

win = gtk.Window()

tv = gtk.TreeView()

col1 = gtk.TreeViewColumn("ウィンドウ名", gtk.CellRendererText(), text=1)
col2 = gtk.TreeViewColumn("アプリケーション名", gtk.CellRendererText(), text=2)

tv.append_column(col1)
tv.append_column(col2)

ls = gtk.ListStore(int, str, str)
tv.set_model(ls)

sw = gtk.ScrolledWindow()
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
sw.add(tv)

screen = wnck.screen_get_default()
screen.force_update()
count = 1
for w in screen.get_windows():
  ls.append([count, w.get_name(), w.get_application().get_name()])
  count = count + 1

win.connect('delete_event', gtk.main_quit)

win.add(sw)

win.set_size_request(640, 240)
win.show_all()
gtk.main()

Gtkでリストを作るところは、今までやったことがなかったので少し難しかったです。
23行目の「screen.force_update()」を入れないと、ウィンドウリストを取得するところで空リストが返ってきてしまうようです。