1

正如标题所说,我只是不明白DND(或者我理解这个概念并且我理解回调的顺序,我只是不明白如何设置DND以供实际使用。)我想说我以前在 C 中做过 DND 的东西,但考虑到我从来没有真正做到过......

所以我正在尝试(并且大部分成功,保存DND)编写一个文本编辑器(使用gtksourceview,因为它内置了代码突出显示。)如果你想要的话,原因如下。无论如何,对于 gtk2hs 并没有真正好的 DND 演示或教程(listDND.hs 在我的脑海中翻译得不好。)所以我要的是在窗口小部件上演示简单 DND 的代码(例如。 ) 理想情况下,它应该接受来自其他窗口(例如 Thunar)的丢包并以字符串形式打印出信息。我想我可以从那里拿走它...


原因:我正在运行一个相当轻量级的设置、dwm 和一些 gtk+2 程序。我真的不想引入 gtk+3 来从存储库(Arch Linux)中获取当前的 gedit。目前,我正在使用 geany 来满足我所有的文本编辑需求,但是,geany 对于编辑配置文件。此外,geany 并不关心我选择的终端 (st;),所以我什至没有将它用作 IDE 的好处。这意味着我想要一个带有语法突出显示的轻量级文本编辑器。我可以配置 emacs 或 vim 或其他东西,但在我看来,这更像是一种 hack,而不是一个适当的解决方案。于是我的项目诞生了。它大部分都在工作(除了DND,剩下的就是适当的多标签支持。)诚然,如果我用C编写它,我可能会解决这个问题,但是没有'

4

1 回答 1

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 是否提供文本作为其选择格式之一,但如果没有,它提供的格式肯定会记录在某处。

于 2012-06-11T21:45:18.377 回答