wnck get_application

Ubuntu マシンを AMD 880G と Phenom II X4 955 に変更して一週間。
何もかも早くなったのは当然として終了に 10 秒掛からないのは衝撃である。

しかし Y901x が更に落ちやすくなった…
CPU が 4 コアになったからとしか思えない…

gtk.gdk.threads_init()

を呼ぶと落ちなくなるようだ、もう少し様子見。
マルチスレッドで動いている GStreamer をシングルスレッドで動かしていたから???

だけどコレを呼ぶと dbus による uri 転送でフリーズするんだなコレが。
これは uri 転送方法を変更するか、いっそ多重起動を許すか…
多重起動を許すのは簡単だ、多重起動防止処理を取っ払うだけだもの。

何か参考は無いかと /usr/bin を漁る。
少し違うけど gwibber のコードがおもしろい。

# Don't run again if we are already running
progname = "gwibber"
screen = wnck.screen_get_default()
while gtk.events_pending():
  gtk.main_iteration()
for w in screen.get_windows():
  if w.get_application().get_name() == progname:
    w.activate(int(time.time()))
    w.move_to_workspace(screen.get_active_workspace())
    quit()

そうか、今のワークスペースに移動って処理もあったほうがいいな。
ウインドウが移動するのではなくタスクバーに現れるのね、なるほど。

gwibber も Python 製だったのか。
インデントが滅茶苦茶だ、これでデフォルトアプリかよ…
ついでに、wnck を使うと WARNING が出るんだが…

get_application().get_name() と get_name() で違うんだね。
get_name() だけだとタイトルバー文字列になるんだけど。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import gtk
import wnck

screen = wnck.screen_get_default()
while gtk.events_pending():
    gtk.main_iteration()
for w in screen.get_windows():
    print w.get_application().get_name()
    print w.get_name()

さて Y901x はどうしよう、今日はもう寝るけど。