拖动数据有下面的这些属性:
- 拖动行为类型(比如 GDK_ACTION_COPY, GDK_ACTION_MOVE)。
- 客户端指定的任意拖放类型(一个名称和数字组成的对)。
- 发送和接收的数据格式类型。
拖动行为的意义很明显,它们指定构件是否能以指定的行为来拖动,比如GDK_ACTION_COPY 和/或GDK_ACTION_MOVE。GDK_ACTION_COPY将是一个典型的拖放,它的源数据并不会被删除,而GDK_ACTION_MOVE将和GDK_ACTION_COPY一样,只是“建议”在接收信号处理函数调用之后将源数据删除掉。还有一些附加的拖动行为包括GDK_ACTION_LINK等,当你对拖放的使用达到更高水平时,你可能会使用到。
客户端指定的任意拖放类型要更加灵活些,因为你的程序将明确地定义和检测它。你需要指定一个名称和/或数字以设置目的构件能接收的特定拖放类型。用一个名称要可靠些,因为其它应用程序可能也正好用了同样的数字来区别它的完全不同的类型。
发送和接收的数据格式类型(selection target)只在请求和接收数据处理函数中使用。术语selection target有些容易令人误解。它应该是一个适合在 GTK+ 选中区(剪切/复制和粘贴)中使用的术语。selection target实际是指被发送和接收的数据的格式类型(比如GdkAtom, integer, 或string)。你的请求数据处理函数必须指定它发送出去的数据的类型(selection target),同时接收数据处理函数要处理接收到的数据的类型(selection target)。