Python with GTK+3 SendMessage

Python with GTK+3 で application_id の使い道。
どうやら Windows API の SendMessage みたいになことができるようだ。

LibUnique/Example – GNOME Live!

libunique を Python で使う方法は解らない…
色々探してみてこんなのを見つける。

Migrating from libunique to GApplication or GtkApplication

なんか GtkApplication や GtkWindow から直接送受信できそうだ。
でもコレって継承した GtkWindow の自作関数なんかも利用できるのかな。
試してみる、GList から Window を得るには添字でイケるようだ。

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

from gi.repository import Gtk, Gio

class Win(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.set_title("sendmessage")
        self.set_border_width(24)
        self.label = Gtk.Label("Hello World")
        self.add(self.label)
        self.show_all()

    def append_text(self, text):
        s = self.label.get_text()
        self.label.set_text("{0}\n{1}".format(s, text))

class App(Gtk.Application):
    def __init__(self):
        Gtk.Application.__init__(
                self,
                application_id="apps.test.helloworld",
                flags=Gio.ApplicationFlags.FLAGS_NONE)
        self.connect("activate", self.on_activate)
        
    def on_activate(self, data=None):
        l = self.get_windows()
        if l:
            l[0].append_text("Hello World")
            return
        w = Win()
        w.set_application(self)
    
if __name__ == "__main__":
    app = App()
    app.run(None)

起動中 Window の関数がそのまんま呼び出せる。
多重起動防止処理がこんなに簡単になっていたとは知らなかった。