PyGObject Tips 書き直しもやっと最後の項目になった。
そのドラッグアンドドロップについてチマチマ調べている。
とりあえず文字列のドロップを追加することに、したんだけど。
ようするに Gedit 等で文字列選択してドラッグしたもののことね。
下記コメントアウトが昔書いたやり方です。
#!/usr/bin/env python3
import sys, gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GLib#, Gdk
class Win(Gtk.ApplicationWindow):
'''
TreeView
'''
def __init__(self, app):
Gtk.ApplicationWindow.__init__(self, application=app, title='Py')
# DnD
'''
uri = Gtk.TargetEntry.new('text/uri-list', 0, 0)
plain = Gtk.TargetEntry.new('text/plain', 0, 0)
self.drag_dest_set(
Gtk.DestDefaults.MOTION |
Gtk.DestDefaults.HIGHLIGHT |
Gtk.DestDefaults.DROP,
[uri, plain],
Gdk.DragAction.COPY )
'''
self.drag_dest_add_uri_targets()
self.drag_dest_add_text_targets()
###self.drag_dest_add_image_targets()
#
self.label = Gtk.Label(label='Please drop your files')
self.add(self.label)
self.show_all()
def do_drag_data_received(self, context, x, y, data, info, time):
'''
data: GtkSelectionData
'''
#print(data.targets_include_text()) # All False
name = data.get_data_type().name()
self.props.title = name
#if name == 'text/plain':
if name == 'UTF8_STRING':
s = data.get_text()
self.label.set_text(s)
elif name == 'text/uri-list':
uris = data.get_uris()
l = []
for uri in uris:
fn = GLib.filename_from_uri(uri)[0]
l.append(GLib.path_get_basename(fn))
self.label.set_text('\n'.join(l))
else:
self.label.set_text(name)
class App(Gtk.Application):
def __init__(self):
Gtk.Application.__init__(self)
def do_startup(self):
Gtk.Application.do_startup(self)
Win(self)
def do_activate(self):
self.props.active_window.present()
app = App()
app.run(sys.argv)
えぇ。。。
gtk_drag_dest_add_text_targets を指定するだけだった。
てか UTF8_STRING という ContentType があったんだ、知らなかった。
新しいのかと思ったら GTK+2.6 からみたい、何故知らなかったんだ俺!
gtk_selection_data_targets_include_text は何をやっても False だ。
上記手段で判別はできるけど、この関数っていったい何なんだろう?
gtk_drag_dest_add_image_targets は簡単に試す手段が無かった。
だいたい使い方は解るので Tips ページを作る時に。
今週こそ終わらせなきゃ、おかげで mac 関連が完全に止まっているし。
macOS がバージョンアップする前にさわっておきたい。