Как я могу перетащить ссылки на приложение PyGTK под Windows? - PullRequest
4 голосов
/ 11 марта 2012

Клиент Evernote имеет приятную функцию, которая позволяет перетаскивать ссылки из Firefox в окно редактирования Evernote, которое работает как с закладками, так и со ссылками в окне браузера. Я хотел бы добавить аналогичную функцию в приложение PyGTK. Вот что я пробовал до сих пор (используя Py 2.7.2 и PyGTK 2.24.0):

import pygtk
pygtk.require('2.0')
import gtk,pango

flags = gtk.TARGET_OTHER_APP
targets = [
    ('text/uri-list', flags, 0),
    ('text/plain', flags, 1),
    ('text/x-uri', flags, 2),
    ('text/x-moz-url', flags, 3),
    ('application/x-bookmark', flags, 4),
    ('application/x-mswinurl', flags, 5),
    ('application/x-desktop', flags, 6)]

def receive_data(wid, context, x, y, data, info, time):
    type = data.type
    url = data.data
    if info == 2:
        url = url.decode('utf-16')
    url = url.splitlines()[0]
    text = '%s\n%s' % (type, url)
    label.set_text(text)
    context.finish(True, False, time)

window = gtk.Window()
window.set_size_request(400, 80)

label = gtk.Label()
label.set_justify(gtk.JUSTIFY_CENTER)
label.set_ellipsize(pango.ELLIPSIZE_END)
window.add(label)

window.drag_dest_set(gtk.DEST_DEFAULT_ALL, targets,
    gtk.gdk.ACTION_COPY|gtk.gdk.ACTION_MOVE)

window.connect('drag_data_received', receive_data)
window.connect('destroy', lambda window: gtk.main_quit())

window.show_all()
gtk.main()

Это прекрасно работает в Linux: вы можете перетащить ссылку или закладку из Firefox в окно GTK, и он отображает перетаскиваемый URL. К сожалению, он не работает под Windows. Я проверил с Windows 7. Здесь, вышеупомянутое приложение принимает только ссылки на файлы, но не ссылки на Интернет из Firefox или других веб-браузеров. Можно ли заставить его работать и под Windows?

1 Ответ

1 голос
/ 12 марта 2012

Я никогда не видел, чтобы GTK + DnD между приложениями работало в Windows, кроме перетаскивания из Windows Explorer в приложение GTK +.Вы можете проверить это, используя демонстрацию перетаскивания целей из руководства PyGTK.(Даже перетаскивание из Проводника имеет некоторые странные особенности, например, не вызывает перетаскивание.)

Я думаю, что оно либо очень глючное, либо не реализовано.

...