GTK4 で Clipboard を使うテスト。
文字列のコピペはできた、ただし自分のインスタンス内のみで。
#!/usr/bin/env python3 import gi gi.require_version('Gtk', '4.0') #gi.require_version('Gdk', '4.0') # not need from gi.repository import Gtk, Gdk class TestWindow(Gtk.ApplicationWindow): ''' GTK4 Clipboard @ String Copy This Code is Instance Only ''' def __init__(self, app): Gtk.ApplicationWindow.__init__(self, application=app) self.clip = self.props.display.get_primary_clipboard() print(self.clip) #=> GdkWaylandPrimary (GdkClipboard) ''' self.clip = self.get_clipboard() self.clip = self.props.display.get_clipboard() display = Gdk.Display.get_default() self.clip = display.get_primary_clipboard() self.clip = display.get_clipboard() # local is All True... print(self.clip.props.local) ''' self.clip.set('スズキのバイクはカッコイイ') print(self.clip.get_formats().to_string()) #=> { gchararray, text/plain;charset=utf-8, text/plain } # #self.clip.set_text('No GIR Binding') # Error! # self.clip.read_text_async(None, self.read_text_async_cb) # self.label = Gtk.Label(label='Motor Cycle') self.set_child(self.label) self.set_default_size(400, 100) self.present() def read_text_async_cb(self, clip, res): text = clip.read_text_finish(res) self.label.set_label(text) class TestApplication(Gtk.Application): def __init__(self): Gtk.Application.__init__(self, application_id='org.suzuki.katana') def do_activate(self): TestWindow(self) app = TestApplication() app.run()
何をどうやっても local Property が True になってしまう。
False にしないと Gedit 等の外部インスタンスとはコピペできない。
バグなのか?
他にやらないといけないことがあるのか?
それと set_text 等がバインドされていないのはどうなんだ?
set で文字列を渡したら普通にセットできたけど「ん?」って感じ。
バイナリの転送は GdkContentProvider でいいのかな?