#! /usr/bin/env python # -*- encoding: iso8859-15 -*- import gtk from gtk import gdk have_drag = False; TARGET_STRING = 0 TARGET_ROOTWIN = 1 target = [ ('STRING', 0, TARGET_STRING), ('text/plain', 0, TARGET_STRING), ('application/x-rootwin-drop', 0, TARGET_ROOTWIN)] def label_drag_data_received (w, context, x, y, data, info, time): if data and data.format == 8: print 'Received "%s" in label' % data.data # w.drag_finish (context, True, False, time) else: # w.drag_finish (context, False, False, time) pass def source_drag_data_get (w, context, selection_data, info, time): if info == TARGET_ROOTWIN: print 'I was dropped on the rootwin' else: selection_data.set (selection_data.target, 8, "file:/hallo/Wält!") def source_drag_data_delete (w, context, data): print 'Delete the data!' def main (): global drag_mask win = gtk.Window () win.connect ('destroy', gtk.mainquit) vbox = gtk.Table (2,2) win.add (vbox) label = gtk.Label ('Drop Here!\n') label.drag_dest_set (gtk.DEST_DEFAULT_ALL, target[:-1], gdk.ACTION_COPY | gdk.ACTION_MOVE) label.connect ('drag_data_received', label_drag_data_received) vbox.attach (label, 0, 1, 0, 1) b = gtk.Button ('Drag Here\n') b.drag_source_set (gdk.BUTTON1_MASK | gdk.BUTTON3_MASK, target, gdk.ACTION_COPY | gdk.ACTION_MOVE) vbox.attach (b, 0, 1, 1, 2) b.connect ('drag_data_get', source_drag_data_get) b.connect ('drag_data_delete', source_drag_data_delete) win.show_all () main () gtk.mainloop ()