Mercurial > geeqie.yaz
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, |