Может кто-нибудь объяснить мне, как gtk2hs перетаскивать, демо listDND.hs просто не делает этого для меня?

Как видно из названия, я просто не получаю DND (или, скорее, я понимаю концепцию и понимаю порядок обратных вызовов, я просто не понимаю, как настроить DND для фактического использования.) Я хотел бы сказать, что я я уже делал что-то неуверенное в C, но, учитывая, что мне так и не удалось...

Поэтому я пытаюсь (и в основном успешно, сохраняя DND) написать текстовый редактор (используя gtksourceview, потому что он имеет встроенную подсветку кода). Причины ниже, если вы хотите их. В любом случае, для gtk2hs нет действительно хорошей демонстрации или учебника по DND (listDND.hs просто не очень хорошо переносится в моей голове). Итак, я спрашиваю о коде, который демонстрирует простое DND в виджете окна (например.) В идеале, он должен принимать капли из других окон (например, Thunar) и распечатывать информацию в виде строки. Я думаю, что я могу взять это оттуда...


Причины: у меня довольно легкая установка, dwm и несколько программ gtk+2. Я действительно не хочу использовать gtk+3, чтобы получить текущий gedit из репозитория (Arch Linux.) В настоящее время я использую geany для всех моих потребностей в редактировании текста, однако, geany немного тяжел для редактирование конфигурационных файлов. Кроме того, geany не заботится о моем терминале выбора (st;), поэтому я даже не получаю преимущества от его использования в качестве IDE. Это означает, что я хотел бы легкий текстовый редактор с подсветкой синтаксиса. Я мог бы настроить emacs или vim или что-то еще, но мне кажется, что это скорее хак, чем правильное решение. Так родился мой проект. В основном это работает (кроме DND, все, что осталось, - это правильная поддержка нескольких вкладок.) Конечно, я мог бы решить это, если бы написал это на C, но в текстовом редакторе не так много состояний, поэтому Haskell работал хорошо почти без необходимости изменяемых переменных.

1 ответ

Решение

Следуя учебному пособию, которое я связал, и документации gtk2hs, я написал следующее минимальное приложение, которое получает текст. Я скоро добавлю его в каталог демок gtk2hs.

import Control.Monad.IO.Class
import Graphics.UI.Gtk

main = do
    initGUI
    w <- windowNew
    l <- labelNew $ Just "drag here lol"
    onDestroy w mainQuit
    containerAdd w l
    dragDestSet w [DestDefaultMotion, DestDefaultDrop] [ActionCopy]
    dragDestAddTextTargets w
    w `on` dragDataReceived $ \dc pos id ts -> do
        s <- selectionDataGetText
        liftIO . putStrLn $ case s of
            Nothing -> "didn't understand the drop"
            Just s  -> "understood, here it is: <" ++ s ++ ">"
    widgetShowAll w
    mainGUI

Я понятия не имею, предлагает ли Thunar текст в качестве одного из форматов выбора, но если нет, то форматы, которые он предлагает, наверняка где-то задокументированы.

Другие вопросы по тегам