comparison src/view_dir_tree.c @ 383:499d7ba62261

Move some dnd common code from view_dir_list.c and view_dir_tree.c to view_dir.c.
author zas_
date Wed, 16 Apr 2008 16:05:12 +0000
parents eceeced4cbb9
children 392dd6541d51
comparison
equal deleted inserted replaced
382:eceeced4cbb9 383:499d7ba62261
83 { 83 {
84 if (VDTREE_INFO(vd, busy_ref) == 1) set_cursor(vd->view, -1); 84 if (VDTREE_INFO(vd, busy_ref) == 1) set_cursor(vd->view, -1);
85 if (VDTREE_INFO(vd, busy_ref) > 0) VDTREE_INFO(vd, busy_ref)--; 85 if (VDTREE_INFO(vd, busy_ref) > 0) VDTREE_INFO(vd, busy_ref)--;
86 } 86 }
87 87
88 static gint vdtree_find_row(ViewDir *vd, FileData *fd, GtkTreeIter *iter, GtkTreeIter *parent) 88 gint vdtree_find_row(ViewDir *vd, FileData *fd, GtkTreeIter *iter, GtkTreeIter *parent)
89 { 89 {
90 GtkTreeModel *store; 90 GtkTreeModel *store;
91 gint valid; 91 gint valid;
92 92
93 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view)); 93 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
157 157
158 if (vdtree_find_row(vd, fd, &iter, NULL)) 158 if (vdtree_find_row(vd, fd, &iter, NULL))
159 { 159 {
160 vdtree_expand_by_iter(vd, &iter, expand); 160 vdtree_expand_by_iter(vd, &iter, expand);
161 } 161 }
162 }
163
164 static void vdtree_color_set(ViewDir *vd, FileData *fd, gint color_set)
165 {
166 GtkTreeModel *store;
167 GtkTreeIter iter;
168
169 if (!vdtree_find_row(vd, fd, &iter, NULL)) return;
170 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
171 gtk_tree_store_set(GTK_TREE_STORE(store), &iter, DIR_COLUMN_COLOR, color_set, -1);
172 } 162 }
173 163
174 static gint vdtree_rename_row_cb(TreeEditData *td, const gchar *old, const gchar *new, gpointer data) 164 static gint vdtree_rename_row_cb(TreeEditData *td, const gchar *old, const gchar *new, gpointer data)
175 { 165 {
176 ViewDir *vd = data; 166 ViewDir *vd = data;
231 221
232 file_data_unref(nd->fd); 222 file_data_unref(nd->fd);
233 g_free(nd); 223 g_free(nd);
234 } 224 }
235 225
236 static void vdtree_popup_destroy_cb(GtkWidget *widget, gpointer data)
237 {
238 ViewDir *vd = data;
239
240 vdtree_color_set(vd, vd->click_fd, FALSE);
241 vd->click_fd = NULL;
242 vd->popup = NULL;
243
244 vdtree_color_set(vd, vd->drop_fd, FALSE);
245 filelist_free(vd->drop_list);
246 vd->drop_list = NULL;
247 vd->drop_fd = NULL;
248 }
249
250 /*
251 *-----------------------------------------------------------------------------
252 * drop menu (from dnd)
253 *-----------------------------------------------------------------------------
254 */
255
256 static void vdtree_drop_menu_copy_cb(GtkWidget *widget, gpointer data)
257 {
258 ViewDir *vd = data;
259 const gchar *path;
260 GList *list;
261
262 if (!vd->drop_fd) return;
263
264 path = vd->drop_fd->path;
265 list = vd->drop_list;
266
267 vd->drop_list = NULL;
268
269 file_util_copy_simple(list, path);
270 }
271
272 static void vdtree_drop_menu_move_cb(GtkWidget *widget, gpointer data)
273 {
274 ViewDir *vd = data;
275 const gchar *path;
276 GList *list;
277
278 if (!vd->drop_fd) return;
279
280 path = vd->drop_fd->path;
281 list = vd->drop_list;
282
283 vd->drop_list = NULL;
284
285 file_util_move_simple(list, path);
286 }
287
288 static GtkWidget *vdtree_drop_menu(ViewDir *vd, gint active)
289 {
290 GtkWidget *menu;
291
292 menu = popup_menu_short_lived();
293 g_signal_connect(G_OBJECT(menu), "destroy",
294 G_CALLBACK(vdtree_popup_destroy_cb), vd);
295
296 menu_item_add_stock_sensitive(menu, _("_Copy"), GTK_STOCK_COPY, active,
297 G_CALLBACK(vdtree_drop_menu_copy_cb), vd);
298 menu_item_add_sensitive(menu, _("_Move"), active, G_CALLBACK(vdtree_drop_menu_move_cb), vd);
299
300 menu_item_add_divider(menu);
301 menu_item_add_stock(menu, _("Cancel"), GTK_STOCK_CANCEL, NULL, vd);
302
303 return menu;
304 }
305
306 /* 226 /*
307 *----------------------------------------------------------------------------- 227 *-----------------------------------------------------------------------------
308 * pop-up menu 228 * pop-up menu
309 *----------------------------------------------------------------------------- 229 *-----------------------------------------------------------------------------
310 */ 230 */
481 g_free(parent); 401 g_free(parent);
482 } 402 }
483 403
484 menu = popup_menu_short_lived(); 404 menu = popup_menu_short_lived();
485 g_signal_connect(G_OBJECT(menu), "destroy", 405 g_signal_connect(G_OBJECT(menu), "destroy",
486 G_CALLBACK(vdtree_popup_destroy_cb), vd); 406 G_CALLBACK(vd_popup_destroy_cb), vd);
487 407
488 menu_item_add_stock_sensitive(menu, _("_Up to parent"), GTK_STOCK_GO_UP, 408 menu_item_add_stock_sensitive(menu, _("_Up to parent"), GTK_STOCK_GO_UP,
489 (vd->path && strcmp(vd->path, "/") != 0), 409 (vd->path && strcmp(vd->path, "/") != 0),
490 G_CALLBACK(vdtree_pop_menu_up_cb), vd); 410 G_CALLBACK(vdtree_pop_menu_up_cb), vd);
491 411
583 503
584 static void vdtree_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data) 504 static void vdtree_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data)
585 { 505 {
586 ViewDir *vd = data; 506 ViewDir *vd = data;
587 507
588 vdtree_color_set(vd, vd->click_fd, TRUE); 508 vd_color_set(vd, vd->click_fd, TRUE);
589 vdtree_dest_set(vd, FALSE); 509 vdtree_dest_set(vd, FALSE);
590 } 510 }
591 511
592 static void vdtree_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data) 512 static void vdtree_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data)
593 { 513 {
594 ViewDir *vd = data; 514 ViewDir *vd = data;
595 515
596 vdtree_color_set(vd, vd->click_fd, FALSE); 516 vd_color_set(vd, vd->click_fd, FALSE);
597 vdtree_dest_set(vd, TRUE); 517 vdtree_dest_set(vd, TRUE);
598 } 518 }
599 519
600 static void vdtree_dnd_drop_receive(GtkWidget *widget, 520 static void vdtree_dnd_drop_receive(GtkWidget *widget,
601 GdkDragContext *context, gint x, gint y, 521 GdkDragContext *context, gint x, gint y,
633 list = uri_filelist_from_text((gchar *)selection_data->data, TRUE); 553 list = uri_filelist_from_text((gchar *)selection_data->data, TRUE);
634 if (!list) return; 554 if (!list) return;
635 555
636 active = access_file(fd->path, W_OK | X_OK); 556 active = access_file(fd->path, W_OK | X_OK);
637 557
638 vdtree_color_set(vd, fd, TRUE); 558 vd_color_set(vd, fd, TRUE);
639 vd->popup = vdtree_drop_menu(vd, active); 559 vd->popup = vd_drop_menu(vd, active);
640 gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, NULL, NULL, 0, time); 560 gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, NULL, NULL, 0, time);
641 561
642 vd->drop_fd = fd; 562 vd->drop_fd = fd;
643 vd->drop_list = list; 563 vd->drop_list = list;
644 } 564 }
692 fd = (nd) ? nd->fd : NULL; 612 fd = (nd) ? nd->fd : NULL;
693 } 613 }
694 614
695 if (fd != vd->drop_fd) 615 if (fd != vd->drop_fd)
696 { 616 {
697 vdtree_color_set(vd, vd->drop_fd, FALSE); 617 vd_color_set(vd, vd->drop_fd, FALSE);
698 vdtree_color_set(vd, fd, TRUE); 618 vd_color_set(vd, fd, TRUE);
699 if (fd) vdtree_dnd_drop_expand(vd); 619 if (fd) vdtree_dnd_drop_expand(vd);
700 } 620 }
701 621
702 vd->drop_fd = fd; 622 vd->drop_fd = fd;
703 } 623 }
772 692
773 static void vdtree_dnd_drop_leave(GtkWidget *widget, GdkDragContext *context, guint time, gpointer data) 693 static void vdtree_dnd_drop_leave(GtkWidget *widget, GdkDragContext *context, guint time, gpointer data)
774 { 694 {
775 ViewDir *vd = data; 695 ViewDir *vd = data;
776 696
777 if (vd->drop_fd != vd->click_fd) vdtree_color_set(vd, vd->drop_fd, FALSE); 697 if (vd->drop_fd != vd->click_fd) vd_color_set(vd, vd->drop_fd, FALSE);
778 698
779 vd->drop_fd = NULL; 699 vd->drop_fd = NULL;
780 700
781 vdtree_dnd_drop_expand_cancel(vd); 701 vdtree_dnd_drop_expand_cancel(vd);
782 } 702 }
1387 1307
1388 switch (event->keyval) 1308 switch (event->keyval)
1389 { 1309 {
1390 case GDK_Menu: 1310 case GDK_Menu:
1391 vd->click_fd = fd; 1311 vd->click_fd = fd;
1392 vdtree_color_set(vd, vd->click_fd, TRUE); 1312 vd_color_set(vd, vd->click_fd, TRUE);
1393 1313
1394 vd->popup = vdtree_pop_menu(vd, vd->click_fd); 1314 vd->popup = vdtree_pop_menu(vd, vd->click_fd);
1395 gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, vdtree_menu_position_cb, vd, 0, GDK_CURRENT_TIME); 1315 gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, vdtree_menu_position_cb, vd, 0, GDK_CURRENT_TIME);
1396 1316
1397 return TRUE; 1317 return TRUE;
1474 1394
1475 gtk_tree_path_free(tpath); 1395 gtk_tree_path_free(tpath);
1476 } 1396 }
1477 1397
1478 vd->click_fd = (nd) ? nd->fd : NULL; 1398 vd->click_fd = (nd) ? nd->fd : NULL;
1479 vdtree_color_set(vd, vd->click_fd, TRUE); 1399 vd_color_set(vd, vd->click_fd, TRUE);
1480 1400
1481 if (bevent->button == 3) 1401 if (bevent->button == 3)
1482 { 1402 {
1483 vd->popup = vdtree_pop_menu(vd, vd->click_fd); 1403 vd->popup = vdtree_pop_menu(vd, vd->click_fd);
1484 gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, NULL, NULL, 1404 gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, NULL, NULL,
1494 GtkTreePath *tpath; 1414 GtkTreePath *tpath;
1495 GtkTreeIter iter; 1415 GtkTreeIter iter;
1496 NodeData *nd = NULL; 1416 NodeData *nd = NULL;
1497 1417
1498 if (!vd->click_fd) return FALSE; 1418 if (!vd->click_fd) return FALSE;
1499 vdtree_color_set(vd, vd->click_fd, FALSE); 1419 vd_color_set(vd, vd->click_fd, FALSE);
1500 1420
1501 if (bevent->button != 1) return TRUE; 1421 if (bevent->button != 1) return TRUE;
1502 1422
1503 if ((bevent->x != 0 || bevent->y != 0) && 1423 if ((bevent->x != 0 || bevent->y != 0) &&
1504 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), bevent->x, bevent->y, 1424 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), bevent->x, bevent->y,