File drags from tcl/tkdnd apps into a GTK3 app are ignored
From
eric_gilbertson@eric_gilbertson@yahoo.com (ericg) to
comp.lang.tcl on Tue Aug 20 20:56:18 2024
From Newsgroup: comp.lang.tcl
File drags from my tcl/tkdnd app into a GTK3 app are ignored. The issue
appears to be that the drop data is interpreted as a string rather than
a list of file URIs, e.g. dropData.get_data() returns the dropped file
name but dropData.get_uris() returns an empty list, as demonstrated by
the following demo code. I also noticed that the drop target cursor
changes to a hand when dropping a file from Nautilus File (Gtk based)
tool but it does not change when dropping from the tcl/tk app. Any
pointers on how to get the tck/tk client to work with Gtk3 are much appreciated. Alternatively, is there a tool that I can use to view the
WM messages that are sent during the drag/drop in order to debug the
issue? I am running Gnome 42.9 on Ubuntu 22.04.
Tcl/tkdnd drop file source app:
package require tkdnd
catch {console show}
pack [ttk::button .drag_source_files -text " Drag File "] -fill x -padx
20 -pady 20
tkdnd::drag_source register .drag_source_files DND_Files
bind .drag_source_files <<DragInitCmd>> \
{list {copy} DND_Files [list "file:///tmp/test.wav" ]}
## Event <<DragEndCmd>>
bind .drag_source_files <<DragEndCmd>> {
puts "Drop action: %A"
}
Gtk drop receiver app:
import gi
gi.require_version("Gdk", "3.0")
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk
window = Gtk.Window()
window.connect("delete-event", Gtk.main_quit)
box = Gtk.HBox()
window.add(box)
# Called when the Drop button is dropped on
def on_drag_data_received(widget, drag_context, x, y, data, info, time):
print("Received uris: {}".format(data.get_uris())) # returns empty
list
print("Received data: {}".format(data.get_data())) # returns file
name
# The button into which the file can be dropped
drop_button = Gtk.Button(label="Drop") drop_button.drag_dest_set(Gtk.DestDefaults.ALL, [], Gdk.DragAction.COPY) drop_button.drag_dest_add_uri_targets() # This makes sure that the
buttons are using URIs, not text
drop_button.connect("drag-data-received", on_drag_data_received) box.add(drop_button)
window.show_all()
Gtk.main()
--- Synchronet 3.20a-Linux NewsLink 1.114