gui/treeview: Connect to the drag-and-drop signals
We only support drag-and-drop one row at a time, even though multiple rows can be selected in the treeview. If this is a problem, then we can figure it out later! Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
77efa0c631
commit
0972e027ed
|
@ -160,6 +160,43 @@ void __gui_treeview_row_activated(GtkTreeView *treeview, GtkTreePath *path,
|
||||||
can_scroll = true;
|
can_scroll = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __gui_treeview_drag_data_received(GtkTreeView *treeview, GdkDragContext *context,
|
||||||
|
gint x, gint y, GtkSelectionData *data,
|
||||||
|
guint info, guint time, gpointer user_data)
|
||||||
|
{
|
||||||
|
struct gui_model_drag_data *drag_data;
|
||||||
|
unsigned int to, from;
|
||||||
|
GtkTreePath *path;
|
||||||
|
|
||||||
|
drag_data = (void *)gtk_selection_data_get_data(data);
|
||||||
|
if (gtk_tree_view_get_path_at_pos(gui_treeview(), x, y,
|
||||||
|
&path, NULL, NULL, NULL))
|
||||||
|
gtk_tree_path_prev(path);
|
||||||
|
else if (!gtk_tree_view_get_visible_range(gui_treeview(), NULL, &path))
|
||||||
|
return;
|
||||||
|
|
||||||
|
from = drag_data->drag_row;
|
||||||
|
to = gui_filter_path_get_index(path);
|
||||||
|
|
||||||
|
if (playlist_rearrange(gui_model_get_playlist(), from, to)) {
|
||||||
|
gtk_tree_selection_unselect_all(gui_treeview_selection());
|
||||||
|
gtk_tree_selection_select_path(gui_treeview_selection(), path);
|
||||||
|
__gui_treeview_set_sort_indicators();
|
||||||
|
}
|
||||||
|
|
||||||
|
g_signal_stop_emission_by_name(treeview, "drag_data_received");
|
||||||
|
gtk_drag_finish(context, true, true, time);
|
||||||
|
gtk_tree_path_free(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool __gui_treeview_drag_drop(GtkTreeView *treeview, GdkDragContext *context,
|
||||||
|
gint x, gint y, guint time, gpointer user_data)
|
||||||
|
{
|
||||||
|
gtk_drag_get_data(GTK_WIDGET(treeview), context,
|
||||||
|
gdk_atom_intern(GUI_DRAG_DATA, false), time);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void gui_treeview_init()
|
void gui_treeview_init()
|
||||||
{
|
{
|
||||||
GtkTreeViewColumn *col;
|
GtkTreeViewColumn *col;
|
||||||
|
@ -170,6 +207,9 @@ void gui_treeview_init()
|
||||||
gtk_tree_view_enable_model_drag_source(gui_treeview(), GDK_BUTTON1_MASK,
|
gtk_tree_view_enable_model_drag_source(gui_treeview(), GDK_BUTTON1_MASK,
|
||||||
gui_model_drag_targets, gui_model_n_targets,
|
gui_model_drag_targets, gui_model_n_targets,
|
||||||
GDK_ACTION_MOVE);
|
GDK_ACTION_MOVE);
|
||||||
|
gtk_tree_view_enable_model_drag_dest(gui_treeview(),
|
||||||
|
gui_model_drag_targets, gui_model_n_targets,
|
||||||
|
GDK_ACTION_MOVE);
|
||||||
|
|
||||||
for (i = 0; i < GUI_MODEL_N_COLUMNS; i++) {
|
for (i = 0; i < GUI_MODEL_N_COLUMNS; i++) {
|
||||||
col = gtk_tree_view_get_column(gui_treeview(), i);
|
col = gtk_tree_view_get_column(gui_treeview(), i);
|
||||||
|
|
|
@ -912,6 +912,8 @@ audio-volume-medium</property>
|
||||||
<property name="rubber_banding">True</property>
|
<property name="rubber_banding">True</property>
|
||||||
<property name="tooltip_column">9</property>
|
<property name="tooltip_column">9</property>
|
||||||
<signal name="button-press-event" handler="__gui_playlist_button_press" swapped="no"/>
|
<signal name="button-press-event" handler="__gui_playlist_button_press" swapped="no"/>
|
||||||
|
<signal name="drag-data-received" handler="__gui_treeview_drag_data_received" swapped="no"/>
|
||||||
|
<signal name="drag-drop" handler="__gui_treeview_drag_drop" swapped="no"/>
|
||||||
<signal name="key-press-event" handler="__gui_playlist_keypress" swapped="no"/>
|
<signal name="key-press-event" handler="__gui_playlist_keypress" swapped="no"/>
|
||||||
<signal name="row-activated" handler="__gui_treeview_row_activated" swapped="no"/>
|
<signal name="row-activated" handler="__gui_treeview_row_activated" swapped="no"/>
|
||||||
<child internal-child="selection">
|
<child internal-child="selection">
|
||||||
|
|
Loading…
Reference in New Issue