2
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
3
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
4
<refentry id="rhythmbox-rb-tree-dnd">
6
<refentrytitle role="top_of_page" id="rhythmbox-rb-tree-dnd.top_of_page">rb-tree-dnd</refentrytitle>
7
<manvolnum>3</manvolnum>
8
<refmiscinfo>RHYTHMBOX Library</refmiscinfo>
12
<refname>rb-tree-dnd</refname>
13
<refpurpose>multi-row drag and drop support for GtkTreeViews</refpurpose>
16
<refsynopsisdiv id="rhythmbox-rb-tree-dnd.synopsis" role="synopsis">
17
<title role="synopsis.title">Synopsis</title>
18
<anchor id="RbTreeDragSource"/><anchor id="RbTreeDragDest"/>
20
<link linkend="RbTreeDragSource-struct">RbTreeDragSource</link>;
21
<link linkend="RbTreeDragSourceIface">RbTreeDragSourceIface</link>;
22
<link linkend="RbTreeDragDest-struct">RbTreeDragDest</link>;
23
<link linkend="RbTreeDragDestIface">RbTreeDragDestIface</link>;
24
enum <link linkend="RbTreeDestFlag">RbTreeDestFlag</link>;
25
<link linkend="gboolean">gboolean</link> <link linkend="rb-tree-drag-source-row-draggable">rb_tree_drag_source_row_draggable</link> (<link linkend="RbTreeDragSource">RbTreeDragSource</link> *drag_source,
26
<link linkend="GList">GList</link> *path_list);
27
<link linkend="gboolean">gboolean</link> <link linkend="rb-tree-drag-source-drag-data-delete">rb_tree_drag_source_drag_data_delete</link>
28
(<link linkend="RbTreeDragSource">RbTreeDragSource</link> *drag_source,
29
<link linkend="GList">GList</link> *path_list);
30
<link linkend="gboolean">gboolean</link> <link linkend="rb-tree-drag-source-drag-data-get">rb_tree_drag_source_drag_data_get</link> (<link linkend="RbTreeDragSource">RbTreeDragSource</link> *drag_source,
31
<link linkend="GList">GList</link> *path_list,
32
<link linkend="GtkSelectionData">GtkSelectionData</link> *selection_data);
33
<link linkend="gboolean">gboolean</link> <link linkend="rb-tree-drag-dest-drag-data-received">rb_tree_drag_dest_drag_data_received</link>
34
(<link linkend="RbTreeDragDest">RbTreeDragDest</link> *drag_dest,
35
<link linkend="GtkTreePath">GtkTreePath</link> *dest,
36
<link linkend="GtkTreeViewDropPosition">GtkTreeViewDropPosition</link> pos,
37
<link linkend="GtkSelectionData">GtkSelectionData</link> *selection_data);
38
<link linkend="gboolean">gboolean</link> <link linkend="rb-tree-drag-dest-row-drop-possible">rb_tree_drag_dest_row_drop_possible</link> (<link linkend="RbTreeDragDest">RbTreeDragDest</link> *drag_dest,
39
<link linkend="GtkTreePath">GtkTreePath</link> *dest_path,
40
<link linkend="GtkTreeViewDropPosition">GtkTreeViewDropPosition</link> pos,
41
<link linkend="GtkSelectionData">GtkSelectionData</link> *selection_data);
42
<link linkend="gboolean">gboolean</link> <link linkend="rb-tree-drag-dest-row-drop-position">rb_tree_drag_dest_row_drop_position</link> (<link linkend="RbTreeDragDest">RbTreeDragDest</link> *drag_dest,
43
<link linkend="GtkTreePath">GtkTreePath</link> *dest_path,
44
<link linkend="GList">GList</link> *targets,
45
<link linkend="GtkTreeViewDropPosition">GtkTreeViewDropPosition</link> *pos);
46
<link linkend="void">void</link> <link linkend="rb-tree-dnd-add-drag-dest-support">rb_tree_dnd_add_drag_dest_support</link> (<link linkend="GtkTreeView">GtkTreeView</link> *tree_view,
47
<link linkend="RbTreeDestFlag">RbTreeDestFlag</link> flags,
48
const <link linkend="GtkTargetEntry">GtkTargetEntry</link> *targets,
49
<link linkend="gint">gint</link> n_targets,
50
<link linkend="GdkDragAction">GdkDragAction</link> actions);
51
<link linkend="void">void</link> <link linkend="rb-tree-dnd-add-drag-source-support">rb_tree_dnd_add_drag_source_support</link> (<link linkend="GtkTreeView">GtkTreeView</link> *tree_view,
52
<link linkend="GdkModifierType">GdkModifierType</link> start_button_mask,
53
const <link linkend="GtkTargetEntry">GtkTargetEntry</link> *targets,
54
<link linkend="gint">gint</link> n_targets,
55
<link linkend="GdkDragAction">GdkDragAction</link> actions);
59
<refsect1 id="rhythmbox-rb-tree-dnd.object-hierarchy" role="object_hierarchy">
60
<title role="object_hierarchy.title">Object Hierarchy</title>
62
<link linkend="GInterface">GInterface</link>
66
<link linkend="GInterface">GInterface</link>
74
<refsect1 id="rhythmbox-rb-tree-dnd.implementations" role="implementations">
75
<title role="implementations.title">Known Implementations</title>
77
RbTreeDragSource is implemented by
78
<link linkend="RhythmDBPropertyModel">RhythmDBPropertyModel</link>, <link linkend="RhythmDBQueryModel">RhythmDBQueryModel</link> and <link linkend="RBSourceListModel">RBSourceListModel</link>.</para>
80
RbTreeDragDest is implemented by
81
<link linkend="RhythmDBQueryModel">RhythmDBQueryModel</link> and <link linkend="RBSourceListModel">RBSourceListModel</link>.</para>
87
<refsect1 id="rhythmbox-rb-tree-dnd.description" role="desc">
88
<title role="desc.title">Description</title>
90
Provides support for drag and drop operations to and from GtkTreeView
91
widgets that can include multiple rows. The model backing the tree view
92
widgets must implement the <link linkend="RbTreeDragSource"><type>RbTreeDragSource</type></link> and <link linkend="RbTreeDragDest"><type>RbTreeDragDest</type></link> interfaces.</para>
97
<refsect1 id="rhythmbox-rb-tree-dnd.details" role="details">
98
<title role="details.title">Details</title>
99
<refsect2 id="RbTreeDragSource-struct" role="struct">
100
<title>RbTreeDragSource</title>
101
<indexterm zone="RbTreeDragSource-struct"><primary sortas="RbTreeDragSource">RbTreeDragSource</primary></indexterm><programlisting>typedef struct _RbTreeDragSource RbTreeDragSource;</programlisting>
104
<refsect2 id="RbTreeDragSourceIface" role="struct">
105
<title>RbTreeDragSourceIface</title>
106
<indexterm zone="RbTreeDragSourceIface"><primary sortas="RbTreeDragSourceIface">RbTreeDragSourceIface</primary></indexterm><programlisting>typedef struct {
107
GTypeInterface g_iface;
109
/* VTable - not signals */
110
gboolean (* rb_row_draggable) (RbTreeDragSource *drag_source,
113
gboolean (* rb_drag_data_get) (RbTreeDragSource *drag_source,
115
GtkSelectionData *selection_data);
117
gboolean (* rb_drag_data_delete) (RbTreeDragSource *drag_source,
119
} RbTreeDragSourceIface;
123
<refsect2 id="RbTreeDragDest-struct" role="struct">
124
<title>RbTreeDragDest</title>
125
<indexterm zone="RbTreeDragDest-struct"><primary sortas="RbTreeDragDest">RbTreeDragDest</primary></indexterm><programlisting>typedef struct _RbTreeDragDest RbTreeDragDest;</programlisting>
128
<refsect2 id="RbTreeDragDestIface" role="struct">
129
<title>RbTreeDragDestIface</title>
130
<indexterm zone="RbTreeDragDestIface"><primary sortas="RbTreeDragDestIface">RbTreeDragDestIface</primary></indexterm><programlisting>typedef struct {
131
GTypeInterface g_iface;
133
/* VTable - not signals */
135
gboolean (* rb_drag_data_received) (RbTreeDragDest *drag_dest,
137
GtkTreeViewDropPosition pos,
138
GtkSelectionData *selection_data);
140
gboolean (* rb_row_drop_possible) (RbTreeDragDest *drag_dest,
141
GtkTreePath *dest_path,
142
GtkTreeViewDropPosition pos,
143
GtkSelectionData *selection_data);
145
gboolean (* rb_row_drop_position) (RbTreeDragDest *drag_dest,
146
GtkTreePath *dest_path,
148
GtkTreeViewDropPosition *pos);
151
GdkAtom (* rb_get_drag_target) (RbTreeDragDest *drag_dest,
153
GdkDragContext *context,
154
GtkTreePath *dest_path,
155
GtkTargetList *target_list);
156
} RbTreeDragDestIface;
160
<refsect2 id="RbTreeDestFlag" role="enum">
161
<title>enum RbTreeDestFlag</title>
162
<indexterm zone="RbTreeDestFlag"><primary sortas="RbTreeDestFlag">RbTreeDestFlag</primary></indexterm><programlisting>typedef enum {
163
RB_TREE_DEST_EMPTY_VIEW_DROP = 1 << 0,
164
RB_TREE_DEST_CAN_DROP_INTO = 1 << 1,
165
RB_TREE_DEST_CAN_DROP_BETWEEN = 1 << 2,
166
RB_TREE_DEST_SELECT_ON_DRAG_TIMEOUT = 1 << 3
170
Flags controlling drag destination behaviour.</para>
172
</para><variablelist role="enum">
173
<varlistentry id="RB-TREE-DEST-EMPTY-VIEW-DROP--CAPS" role="constant">
174
<term><literal>RB_TREE_DEST_EMPTY_VIEW_DROP</literal></term>
175
<listitem><simpara> If set, drops into empty spaces in the view are accepted
176
</simpara></listitem>
178
<varlistentry id="RB-TREE-DEST-CAN-DROP-INTO--CAPS" role="constant">
179
<term><literal>RB_TREE_DEST_CAN_DROP_INTO</literal></term>
180
<listitem><simpara> If set, drops into existing rows are accepted
181
</simpara></listitem>
183
<varlistentry id="RB-TREE-DEST-CAN-DROP-BETWEEN--CAPS" role="constant">
184
<term><literal>RB_TREE_DEST_CAN_DROP_BETWEEN</literal></term>
185
<listitem><simpara> If set, drops between existing rows are accepted
186
</simpara></listitem>
188
<varlistentry id="RB-TREE-DEST-SELECT-ON-DRAG-TIMEOUT--CAPS" role="constant">
189
<term><literal>RB_TREE_DEST_SELECT_ON_DRAG_TIMEOUT</literal></term>
190
<listitem><simpara> If set, update the drag selection using a timeout
191
</simpara></listitem>
193
</variablelist></refsect2>
194
<refsect2 id="rb-tree-drag-source-row-draggable" role="function">
195
<title>rb_tree_drag_source_row_draggable ()</title>
196
<indexterm zone="rb-tree-drag-source-row-draggable"><primary sortas="rb_tree_drag_source_row_draggable">rb_tree_drag_source_row_draggable</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link> rb_tree_drag_source_row_draggable (<link linkend="RbTreeDragSource">RbTreeDragSource</link> *drag_source,
197
<link linkend="GList">GList</link> *path_list);</programlisting>
199
Asks the <link linkend="RbTreeDragSource"><type>RbTreeDragSource</type></link> whether a particular row can be used as
200
the source of a DND operation. If the source doesn't implement
201
this interface, the row is assumed draggable.</para>
203
</para><variablelist role="params">
204
<varlistentry><term><parameter>drag_source</parameter> :</term>
205
<listitem><simpara> a <link linkend="RbTreeDragSource"><type>RbTreeDragSource</type></link>
206
</simpara></listitem></varlistentry>
207
<varlistentry><term><parameter>path_list</parameter> :</term>
208
<listitem><simpara> row on which user is initiating a drag
209
</simpara></listitem></varlistentry>
210
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the row can be dragged
211
</simpara></listitem></varlistentry>
212
</variablelist></refsect2>
213
<refsect2 id="rb-tree-drag-source-drag-data-delete" role="function">
214
<title>rb_tree_drag_source_drag_data_delete ()</title>
215
<indexterm zone="rb-tree-drag-source-drag-data-delete"><primary sortas="rb_tree_drag_source_drag_data_delete">rb_tree_drag_source_drag_data_delete</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link> rb_tree_drag_source_drag_data_delete
216
(<link linkend="RbTreeDragSource">RbTreeDragSource</link> *drag_source,
217
<link linkend="GList">GList</link> *path_list);</programlisting>
219
Asks the <link linkend="RbTreeDragSource"><type>RbTreeDragSource</type></link> to delete the row at <parameter>path</parameter>, because
220
it was moved somewhere else via drag-and-drop. Returns <link linkend="FALSE--CAPS"><literal>FALSE</literal></link>
221
if the deletion fails because <parameter>path</parameter> no longer exists, or for
222
some model-specific reason. Should robustly handle a <parameter>path</parameter> no
223
longer found in the model!</para>
225
</para><variablelist role="params">
226
<varlistentry><term><parameter>drag_source</parameter> :</term>
227
<listitem><simpara> a <link linkend="RbTreeDragSource"><type>RbTreeDragSource</type></link>
228
</simpara></listitem></varlistentry>
229
<varlistentry><term><parameter>path_list</parameter> :</term>
230
<listitem><simpara> row that was being dragged
231
</simpara></listitem></varlistentry>
232
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the row was successfully deleted
233
</simpara></listitem></varlistentry>
234
</variablelist></refsect2>
235
<refsect2 id="rb-tree-drag-source-drag-data-get" role="function">
236
<title>rb_tree_drag_source_drag_data_get ()</title>
237
<indexterm zone="rb-tree-drag-source-drag-data-get"><primary sortas="rb_tree_drag_source_drag_data_get">rb_tree_drag_source_drag_data_get</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link> rb_tree_drag_source_drag_data_get (<link linkend="RbTreeDragSource">RbTreeDragSource</link> *drag_source,
238
<link linkend="GList">GList</link> *path_list,
239
<link linkend="GtkSelectionData">GtkSelectionData</link> *selection_data);</programlisting>
241
Asks the <link linkend="RbTreeDragSource"><type>RbTreeDragSource</type></link> to fill in <parameter>selection_data</parameter> with a
242
representation of the row at <parameter>path</parameter>. <parameter>selection_data->target</parameter> gives
243
the required type of the data. Should robustly handle a <parameter>path</parameter> no
244
longer found in the model!</para>
246
</para><variablelist role="params">
247
<varlistentry><term><parameter>drag_source</parameter> :</term>
248
<listitem><simpara> a <link linkend="RbTreeDragSource"><type>RbTreeDragSource</type></link>
249
</simpara></listitem></varlistentry>
250
<varlistentry><term><parameter>path_list</parameter> :</term>
251
<listitem><simpara> row that was dragged
252
</simpara></listitem></varlistentry>
253
<varlistentry><term><parameter>selection_data</parameter> :</term>
254
<listitem><simpara> a <link linkend="GtkSelectionData"><type>GtkSelectionData</type></link> to fill with data from the dragged row
255
</simpara></listitem></varlistentry>
256
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if data of the required type was provided
257
</simpara></listitem></varlistentry>
258
</variablelist></refsect2>
259
<refsect2 id="rb-tree-drag-dest-drag-data-received" role="function">
260
<title>rb_tree_drag_dest_drag_data_received ()</title>
261
<indexterm zone="rb-tree-drag-dest-drag-data-received"><primary sortas="rb_tree_drag_dest_drag_data_received">rb_tree_drag_dest_drag_data_received</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link> rb_tree_drag_dest_drag_data_received
262
(<link linkend="RbTreeDragDest">RbTreeDragDest</link> *drag_dest,
263
<link linkend="GtkTreePath">GtkTreePath</link> *dest,
264
<link linkend="GtkTreeViewDropPosition">GtkTreeViewDropPosition</link> pos,
265
<link linkend="GtkSelectionData">GtkSelectionData</link> *selection_data);</programlisting>
267
Asks a <link linkend="RbTreeDragDest"><type>RbTreeDragDest</type></link> to accept some drag and drop data.</para>
269
</para><variablelist role="params">
270
<varlistentry><term><parameter>drag_dest</parameter> :</term>
271
<listitem><simpara> a <link linkend="RbTreeDragDest"><type>RbTreeDragDest</type></link>
272
</simpara></listitem></varlistentry>
273
<varlistentry><term><parameter>dest</parameter> :</term>
274
<listitem><simpara> the <link linkend="GtkTreePath"><type>GtkTreePath</type></link> on which the data was dropped
275
</simpara></listitem></varlistentry>
276
<varlistentry><term><parameter>pos</parameter> :</term>
277
<listitem><simpara> the drop position relative to the row identified by <parameter>dest</parameter>
278
</simpara></listitem></varlistentry>
279
<varlistentry><term><parameter>selection_data</parameter> :</term>
280
<listitem><simpara> a <link linkend="GtkSelectionData"><type>GtkSelectionData</type></link> containing the drag data
281
</simpara></listitem></varlistentry>
282
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the data was accepted, <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> otherwise
283
</simpara></listitem></varlistentry>
284
</variablelist></refsect2>
285
<refsect2 id="rb-tree-drag-dest-row-drop-possible" role="function">
286
<title>rb_tree_drag_dest_row_drop_possible ()</title>
287
<indexterm zone="rb-tree-drag-dest-row-drop-possible"><primary sortas="rb_tree_drag_dest_row_drop_possible">rb_tree_drag_dest_row_drop_possible</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link> rb_tree_drag_dest_row_drop_possible (<link linkend="RbTreeDragDest">RbTreeDragDest</link> *drag_dest,
288
<link linkend="GtkTreePath">GtkTreePath</link> *dest_path,
289
<link linkend="GtkTreeViewDropPosition">GtkTreeViewDropPosition</link> pos,
290
<link linkend="GtkSelectionData">GtkSelectionData</link> *selection_data);</programlisting>
292
Asks the <link linkend="RbTreeDragDest"><type>RbTreeDragDest</type></link> whether data can be dropped on a particular
293
row. This should probably check based on the format and the row.</para>
295
</para><variablelist role="params">
296
<varlistentry><term><parameter>drag_dest</parameter> :</term>
297
<listitem><simpara> a <link linkend="RbTreeDragDest"><type>RbTreeDragDest</type></link>
298
</simpara></listitem></varlistentry>
299
<varlistentry><term><parameter>dest_path</parameter> :</term>
300
<listitem><simpara> the <link linkend="GtkTreePath"><type>GtkTreePath</type></link> on which the data may be dropped
301
</simpara></listitem></varlistentry>
302
<varlistentry><term><parameter>pos</parameter> :</term>
303
<listitem><simpara> the drop position relative to the row identified by <parameter>dest</parameter>
304
</simpara></listitem></varlistentry>
305
<varlistentry><term><parameter>selection_data</parameter> :</term>
306
<listitem><simpara> a <link linkend="GtkSelectionData"><type>GtkSelectionData</type></link> containing the drag data
307
</simpara></listitem></varlistentry>
308
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the data can be dropped there
309
</simpara></listitem></varlistentry>
310
</variablelist></refsect2>
311
<refsect2 id="rb-tree-drag-dest-row-drop-position" role="function">
312
<title>rb_tree_drag_dest_row_drop_position ()</title>
313
<indexterm zone="rb-tree-drag-dest-row-drop-position"><primary sortas="rb_tree_drag_dest_row_drop_position">rb_tree_drag_dest_row_drop_position</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link> rb_tree_drag_dest_row_drop_position (<link linkend="RbTreeDragDest">RbTreeDragDest</link> *drag_dest,
314
<link linkend="GtkTreePath">GtkTreePath</link> *dest_path,
315
<link linkend="GList">GList</link> *targets,
316
<link linkend="GtkTreeViewDropPosition">GtkTreeViewDropPosition</link> *pos);</programlisting>
318
Asks the <link linkend="RbTreeDragDest"><type>RbTreeDragDest</type></link> which drop position to use relative to the specified row.
319
The drag destination should decide which drop position to use based on the
320
target row and the list of drag targets.</para>
322
</para><variablelist role="params">
323
<varlistentry><term><parameter>drag_dest</parameter> :</term>
324
<listitem><simpara> a <link linkend="RbTreeDragDest"><type>RbTreeDragDest</type></link>
325
</simpara></listitem></varlistentry>
326
<varlistentry><term><parameter>dest_path</parameter> :</term>
327
<listitem><simpara> a <link linkend="GtkTreePath"><type>GtkTreePath</type></link> describing a possible drop row
328
</simpara></listitem></varlistentry>
329
<varlistentry><term><parameter>targets</parameter> :</term>
330
<listitem><simpara> a <link linkend="GList"><type>GList</type></link> containing possible drop target types
331
</simpara></listitem></varlistentry>
332
<varlistentry><term><parameter>pos</parameter> :</term>
333
<listitem><simpara> returns the <link linkend="GtkTreeViewDropPosition"><type>GtkTreeViewDropPosition</type></link> to use relative to the row
334
</simpara></listitem></varlistentry>
335
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if a drop position has been set, <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> if a drop should not be
336
allowed in the specified row
337
</simpara></listitem></varlistentry>
338
</variablelist></refsect2>
339
<refsect2 id="rb-tree-dnd-add-drag-dest-support" role="function">
340
<title>rb_tree_dnd_add_drag_dest_support ()</title>
341
<indexterm zone="rb-tree-dnd-add-drag-dest-support"><primary sortas="rb_tree_dnd_add_drag_dest_support">rb_tree_dnd_add_drag_dest_support</primary></indexterm><programlisting><link linkend="void">void</link> rb_tree_dnd_add_drag_dest_support (<link linkend="GtkTreeView">GtkTreeView</link> *tree_view,
342
<link linkend="RbTreeDestFlag">RbTreeDestFlag</link> flags,
343
const <link linkend="GtkTargetEntry">GtkTargetEntry</link> *targets,
344
<link linkend="gint">gint</link> n_targets,
345
<link linkend="GdkDragAction">GdkDragAction</link> actions);</programlisting>
347
Adds event handlers to perform multi-row drag and drop operations to the specified
348
<link linkend="GtkTreeView"><type>GtkTreeView</type></link>. The model backing the tree view should implement the <link linkend="RbTreeDragDest"><type>RbTreeDragDest</type></link>
349
interface. This should be called immediately after the tree view is created.</para>
351
</para><variablelist role="params">
352
<varlistentry><term><parameter>tree_view</parameter> :</term>
353
<listitem><simpara> a <link linkend="GtkTreeView"><type>GtkTreeView</type></link> that wants to be a drag destination
354
</simpara></listitem></varlistentry>
355
<varlistentry><term><parameter>flags</parameter> :</term>
356
<listitem><simpara> <link linkend="RbTreeDestFlags"><type>RbTreeDestFlags</type></link> for this drag destination
357
</simpara></listitem></varlistentry>
358
<varlistentry><term><parameter>targets</parameter> :</term>
359
<listitem><simpara> an array of <link linkend="GtkTargetEntry"><type>GtkTargetEntry</type></link> structures describing the allowed drag targets
360
</simpara></listitem></varlistentry>
361
<varlistentry><term><parameter>n_targets</parameter> :</term>
362
<listitem><simpara> the number of elements in <parameter>targets</parameter>
363
</simpara></listitem></varlistentry>
364
<varlistentry><term><parameter>actions</parameter> :</term>
365
<listitem><simpara> the allowable drag actions for this destination
366
</simpara></listitem></varlistentry>
367
</variablelist></refsect2>
368
<refsect2 id="rb-tree-dnd-add-drag-source-support" role="function">
369
<title>rb_tree_dnd_add_drag_source_support ()</title>
370
<indexterm zone="rb-tree-dnd-add-drag-source-support"><primary sortas="rb_tree_dnd_add_drag_source_support">rb_tree_dnd_add_drag_source_support</primary></indexterm><programlisting><link linkend="void">void</link> rb_tree_dnd_add_drag_source_support (<link linkend="GtkTreeView">GtkTreeView</link> *tree_view,
371
<link linkend="GdkModifierType">GdkModifierType</link> start_button_mask,
372
const <link linkend="GtkTargetEntry">GtkTargetEntry</link> *targets,
373
<link linkend="gint">gint</link> n_targets,
374
<link linkend="GdkDragAction">GdkDragAction</link> actions);</programlisting>
376
Adds event handlers to perform multi-row drag and drop operations from the
377
specified <link linkend="GtkTreeView"><type>GtkTreeView</type></link> widget. The model backing the <link linkend="GtkTreeView"><type>GtkTreeView</type></link> must
378
implement the <link linkend="RbTreeDragSource"><type>RbTreeDragSource</type></link> interface. This should be called immediately
379
after the tree view is created.</para>
381
</para><variablelist role="params">
382
<varlistentry><term><parameter>tree_view</parameter> :</term>
383
<listitem><simpara> a <link linkend="GtkTreeView"><type>GtkTreeView</type></link> that wants to be a drag source
384
</simpara></listitem></varlistentry>
385
<varlistentry><term><parameter>start_button_mask</parameter> :</term>
386
<listitem><simpara> a mask describing modifier keys to handle when dragging
387
</simpara></listitem></varlistentry>
388
<varlistentry><term><parameter>targets</parameter> :</term>
389
<listitem><simpara> an array of <link linkend="GtkTargetEntry"><type>GtkTargetEntry</type></link> structures describing drag data types
390
</simpara></listitem></varlistentry>
391
<varlistentry><term><parameter>n_targets</parameter> :</term>
392
<listitem><simpara> the number of elements in <parameter>targets</parameter>
393
</simpara></listitem></varlistentry>
394
<varlistentry><term><parameter>actions</parameter> :</term>
395
<listitem><simpara> a mask describing drag actions that are allowed from this source
396
</simpara></listitem></varlistentry>
397
</variablelist></refsect2>