annotate src/view_dir.c @ 1701:2309e6150e8c

do not try to reload deleted image deleted image is replaced by the next one from the list, keep the old image displayed until the new one is set
author nadvornik
date Fri, 24 Jul 2009 12:56:54 +0000
parents 8ebc26a4383f
children 67145eade000
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
1 /*
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
2 * Geeqie
1284
8b89e3ff286b Add year 2009 to copyright info everywhere.
zas_
parents: 1272
diff changeset
3 * Copyright (C) 2008 - 2009 The Geeqie Team
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
4 *
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
5 * Author: Laurent Monin
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
6 *
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
7 * This software is released under the GNU General Public License (GNU GPL).
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
8 * Please read the included file COPYING for more information.
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
9 * This software comes with no warranty of any kind, use at your own risk!
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
10 */
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
11
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
12 #include "main.h"
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
13 #include "view_dir.h"
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
14
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
15 #include "dnd.h"
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
16 #include "dupe.h"
902
c414002a1f27 Move history_list_*() functions to separate files:
zas_
parents: 818
diff changeset
17 #include "editors.h"
586
905688aa2317 split filelist.c to filefilter.c and filedata.c
nadvornik
parents: 556
diff changeset
18 #include "filedata.h"
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
19 #include "layout_image.h"
384
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
20 #include "layout_util.h"
1612
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
21 #include "pixbuf_util.h"
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
22 #include "ui_fileops.h"
389
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
23 #include "ui_tree_edit.h"
383
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
24 #include "ui_menu.h"
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
25 #include "utilops.h"
904
1698baa37871 Move uri_*() functions to separate files: uri_utils.[ch]
zas_
parents: 902
diff changeset
26 #include "uri_utils.h"
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
27 #include "view_dir_list.h"
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
28 #include "view_dir_tree.h"
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
29
1612
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
30 /* Folders icons to be used in tree or list directory view */
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
31 static PixmapFolders *folder_icons_new(GtkWidget *widget)
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
32 {
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
33 PixmapFolders *pf = g_new0(PixmapFolders, 1);
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
34
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
35 #if 1
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
36 GtkIconSize size = GTK_ICON_SIZE_MENU;
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
37
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
38 /* Attempt to use stock gtk icons */
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
39 pf->close = gtk_widget_render_icon(widget, GTK_STOCK_DIRECTORY, size, NULL);
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
40 pf->open = gtk_widget_render_icon(widget, GTK_STOCK_OPEN, size, NULL);
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
41 pf->deny = gtk_widget_render_icon(widget, GTK_STOCK_STOP, size, NULL);
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
42 pf->parent = gtk_widget_render_icon(widget, GTK_STOCK_GO_UP, size, NULL);
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
43 #else
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
44 /* GQView legacy icons */
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
45 pf->close = pixbuf_inline(PIXBUF_INLINE_FOLDER_CLOSED);
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
46 pf->open = pixbuf_inline(PIXBUF_INLINE_FOLDER_OPEN);
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
47 pf->deny = pixbuf_inline(PIXBUF_INLINE_FOLDER_LOCKED);
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
48 pf->parent = pixbuf_inline(PIXBUF_INLINE_FOLDER_UP);
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
49 #endif
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
50 return pf;
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
51 }
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
52
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
53 static void folder_icons_free(PixmapFolders *pf)
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
54 {
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
55 if (!pf) return;
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
56
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
57 g_object_unref(pf->close);
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
58 g_object_unref(pf->open);
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
59 g_object_unref(pf->deny);
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
60 g_object_unref(pf->parent);
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
61
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
62 g_free(pf);
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
63 }
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
64
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
65
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
66
907
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
67 static void vd_notify_cb(FileData *fd, NotifyType type, gpointer data);
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
68
401
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
69 static void vd_destroy_cb(GtkWidget *widget, gpointer data)
384
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
70 {
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
71 ViewDir *vd = data;
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
72
907
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
73 file_data_unregister_notify_func(vd_notify_cb, vd);
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
74
384
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
75 if (vd->popup)
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
76 {
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
77 g_signal_handlers_disconnect_matched(G_OBJECT(vd->popup), G_SIGNAL_MATCH_DATA,
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
78 0, 0, 0, NULL, vd);
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
79 gtk_widget_destroy(vd->popup);
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
80 }
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
81
1347
79937bc55f3a Add missing space between switch and first parenthesis.
zas_
parents: 1284
diff changeset
82 switch (vd->type)
401
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
83 {
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
84 case DIRVIEW_LIST: vdlist_destroy_cb(widget, data); break;
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
85 case DIRVIEW_TREE: vdtree_destroy_cb(widget, data); break;
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
86 }
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 421
diff changeset
87
384
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
88 if (vd->pf) folder_icons_free(vd->pf);
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
89 if (vd->drop_list) filelist_free(vd->drop_list);
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
90
783
d6a7fb4b8e7c replaced directory path with FileData* dir_fd
nadvornik
parents: 753
diff changeset
91 if (vd->dir_fd) file_data_unref(vd->dir_fd);
384
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
92 if (vd->info) g_free(vd->info);
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
93
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
94 g_free(vd);
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
95 }
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
96
783
d6a7fb4b8e7c replaced directory path with FileData* dir_fd
nadvornik
parents: 753
diff changeset
97 ViewDir *vd_new(DirViewType type, FileData *dir_fd)
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
98 {
384
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
99 ViewDir *vd = g_new0(ViewDir, 1);
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
100
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
101 vd->widget = gtk_scrolled_window_new(NULL, NULL);
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
102 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(vd->widget), GTK_SHADOW_IN);
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
103 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(vd->widget),
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
104 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
105
1612
5d54bc073bfa Attempt to use stock gtk icons for directory list and tree views.
zas_
parents: 1553
diff changeset
106 vd->pf = folder_icons_new(vd->widget);
391
fcaf9c175742 Fix a crash introduced in revision 477.
zas_
parents: 389
diff changeset
107
1347
79937bc55f3a Add missing space between switch and first parenthesis.
zas_
parents: 1284
diff changeset
108 switch (type)
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
109 {
783
d6a7fb4b8e7c replaced directory path with FileData* dir_fd
nadvornik
parents: 753
diff changeset
110 case DIRVIEW_LIST: vd = vdlist_new(vd, dir_fd); break;
d6a7fb4b8e7c replaced directory path with FileData* dir_fd
nadvornik
parents: 753
diff changeset
111 case DIRVIEW_TREE: vd = vdtree_new(vd, dir_fd); break;
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
112 }
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
113
405
7840ccc95aee Fix forgotten vd->pf affectation.
zas_
parents: 402
diff changeset
114 gtk_container_add(GTK_CONTAINER(vd->widget), vd->view);
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 421
diff changeset
115
405
7840ccc95aee Fix forgotten vd->pf affectation.
zas_
parents: 402
diff changeset
116 vd_dnd_init(vd);
7840ccc95aee Fix forgotten vd->pf affectation.
zas_
parents: 402
diff changeset
117
7840ccc95aee Fix forgotten vd->pf affectation.
zas_
parents: 402
diff changeset
118 g_signal_connect(G_OBJECT(vd->view), "row_activated",
7840ccc95aee Fix forgotten vd->pf affectation.
zas_
parents: 402
diff changeset
119 G_CALLBACK(vd_activate_cb), vd);
384
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
120 g_signal_connect(G_OBJECT(vd->widget), "destroy",
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
121 G_CALLBACK(vd_destroy_cb), vd);
405
7840ccc95aee Fix forgotten vd->pf affectation.
zas_
parents: 402
diff changeset
122 g_signal_connect(G_OBJECT(vd->view), "key_press_event",
7840ccc95aee Fix forgotten vd->pf affectation.
zas_
parents: 402
diff changeset
123 G_CALLBACK(vd_press_key_cb), vd);
7840ccc95aee Fix forgotten vd->pf affectation.
zas_
parents: 402
diff changeset
124 g_signal_connect(G_OBJECT(vd->view), "button_press_event",
7840ccc95aee Fix forgotten vd->pf affectation.
zas_
parents: 402
diff changeset
125 G_CALLBACK(vd_press_cb), vd);
7840ccc95aee Fix forgotten vd->pf affectation.
zas_
parents: 402
diff changeset
126 g_signal_connect(G_OBJECT(vd->view), "button_release_event",
7840ccc95aee Fix forgotten vd->pf affectation.
zas_
parents: 402
diff changeset
127 G_CALLBACK(vd_release_cb), vd);
7840ccc95aee Fix forgotten vd->pf affectation.
zas_
parents: 402
diff changeset
128
783
d6a7fb4b8e7c replaced directory path with FileData* dir_fd
nadvornik
parents: 753
diff changeset
129 if (dir_fd) vd_set_fd(vd, dir_fd);
405
7840ccc95aee Fix forgotten vd->pf affectation.
zas_
parents: 402
diff changeset
130
907
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
131 file_data_register_notify_func(vd_notify_cb, vd, NOTIFY_PRIORITY_HIGH);
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
132
405
7840ccc95aee Fix forgotten vd->pf affectation.
zas_
parents: 402
diff changeset
133 gtk_widget_show(vd->view);
384
392dd6541d51 Merge parts of view_dir_list/tree constructors/destructors to
zas_
parents: 383
diff changeset
134
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
135 return vd;
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
136 }
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 421
diff changeset
137
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
138 void vd_set_select_func(ViewDir *vd,
1628
66bf394d162a simplified the code around vd_select_row
nadvornik
parents: 1612
diff changeset
139 void (*func)(ViewDir *vd, FileData *fd, gpointer data), gpointer data)
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
140 {
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 421
diff changeset
141 vd->select_func = func;
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 421
diff changeset
142 vd->select_data = data;
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
143 }
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
144
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
145 void vd_set_layout(ViewDir *vd, LayoutWindow *layout)
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
146 {
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
147 vd->layout = layout;
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
148 }
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
149
1452
67b40740122e gint -> gboolean where applicable.
zas_
parents: 1437
diff changeset
150 gboolean vd_set_fd(ViewDir *vd, FileData *dir_fd)
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
151 {
1437
a3d3208b0c50 gint -> gboolean.
zas_
parents: 1432
diff changeset
152 gboolean ret = FALSE;
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
153
1230
d13233ab7def fixed view_dir notification
nadvornik
parents: 1055
diff changeset
154 file_data_unregister_notify_func(vd_notify_cb, vd);
d13233ab7def fixed view_dir notification
nadvornik
parents: 1055
diff changeset
155
1347
79937bc55f3a Add missing space between switch and first parenthesis.
zas_
parents: 1284
diff changeset
156 switch (vd->type)
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
157 {
783
d6a7fb4b8e7c replaced directory path with FileData* dir_fd
nadvornik
parents: 753
diff changeset
158 case DIRVIEW_LIST: ret = vdlist_set_fd(vd, dir_fd); break;
d6a7fb4b8e7c replaced directory path with FileData* dir_fd
nadvornik
parents: 753
diff changeset
159 case DIRVIEW_TREE: ret = vdtree_set_fd(vd, dir_fd); break;
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
160 }
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
161
1230
d13233ab7def fixed view_dir notification
nadvornik
parents: 1055
diff changeset
162 file_data_register_notify_func(vd_notify_cb, vd, NOTIFY_PRIORITY_HIGH);
d13233ab7def fixed view_dir notification
nadvornik
parents: 1055
diff changeset
163
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
164 return ret;
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
165 }
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
166
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
167 void vd_refresh(ViewDir *vd)
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
168 {
1347
79937bc55f3a Add missing space between switch and first parenthesis.
zas_
parents: 1284
diff changeset
169 switch (vd->type)
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
170 {
982
021c4eda0736 fixed vd_refresh
nadvornik
parents: 975
diff changeset
171 case DIRVIEW_LIST: vdlist_refresh(vd); break;
021c4eda0736 fixed vd_refresh
nadvornik
parents: 975
diff changeset
172 case DIRVIEW_TREE: vdtree_refresh(vd); break;
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
173 }
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
174 }
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
175
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
176 const gchar *vd_row_get_path(ViewDir *vd, gint row)
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
177 {
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
178 const gchar *ret = NULL;
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
179
1347
79937bc55f3a Add missing space between switch and first parenthesis.
zas_
parents: 1284
diff changeset
180 switch (vd->type)
380
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
181 {
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
182 case DIRVIEW_LIST: ret = vdlist_row_get_path(vd, row); break;
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
183 case DIRVIEW_TREE: ret = vdtree_row_get_path(vd, row); break;
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
184 }
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
185
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
186 return ret;
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
187 }
5afe77bb563a Introduce a new struct ViewDir to handle directory views common
zas_
parents:
diff changeset
188
1628
66bf394d162a simplified the code around vd_select_row
nadvornik
parents: 1612
diff changeset
189 /* the calling stack is this:
66bf394d162a simplified the code around vd_select_row
nadvornik
parents: 1612
diff changeset
190 vd_select_row -> select_func -> layout_set_fd -> vd_set_fd
66bf394d162a simplified the code around vd_select_row
nadvornik
parents: 1612
diff changeset
191 */
396
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
192 void vd_select_row(ViewDir *vd, FileData *fd)
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
193 {
1628
66bf394d162a simplified the code around vd_select_row
nadvornik
parents: 1612
diff changeset
194 if (fd && vd->select_func)
66bf394d162a simplified the code around vd_select_row
nadvornik
parents: 1612
diff changeset
195 {
66bf394d162a simplified the code around vd_select_row
nadvornik
parents: 1612
diff changeset
196 vd->select_func(vd, fd, vd->select_data);
66bf394d162a simplified the code around vd_select_row
nadvornik
parents: 1612
diff changeset
197 }
396
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
198 }
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
199
1452
67b40740122e gint -> gboolean where applicable.
zas_
parents: 1437
diff changeset
200 gboolean vd_find_row(ViewDir *vd, FileData *fd, GtkTreeIter *iter)
389
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
201 {
1437
a3d3208b0c50 gint -> gboolean.
zas_
parents: 1432
diff changeset
202 gboolean ret = FALSE;
389
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
203
1347
79937bc55f3a Add missing space between switch and first parenthesis.
zas_
parents: 1284
diff changeset
204 switch (vd->type)
389
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
205 {
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
206 case DIRVIEW_LIST: ret = vdlist_find_row(vd, fd, iter); break;
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
207 case DIRVIEW_TREE: ret = vdtree_find_row(vd, fd, iter, NULL); break;
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
208 }
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
209
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
210 return ret;
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
211 }
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
212
399
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
213 FileData *vd_get_fd_from_tree_path(ViewDir *vd, GtkTreeView *tview, GtkTreePath *tpath)
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
214 {
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
215 GtkTreeIter iter;
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
216 FileData *fd = NULL;
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
217 GtkTreeModel *store;
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
218
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
219 store = gtk_tree_view_get_model(tview);
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
220 gtk_tree_model_get_iter(store, &iter, tpath);
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
221 switch (vd->type)
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
222 {
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
223 case DIRVIEW_LIST:
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
224 gtk_tree_model_get(store, &iter, DIR_COLUMN_POINTER, &fd, -1);
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
225 break;
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
226 case DIRVIEW_TREE:
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
227 {
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
228 NodeData *nd;
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
229 gtk_tree_model_get(store, &iter, DIR_COLUMN_POINTER, &nd, -1);
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
230 fd = (nd) ? nd->fd : NULL;
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
231 };
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
232 break;
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
233 }
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
234
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
235 return fd;
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
236 }
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
237
1637
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
238 static void vd_rename_finished_cb(gboolean success, const gchar *new_path, gpointer data)
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
239 {
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
240 ViewDir *vd = data;
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
241 if (success)
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
242 {
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
243 FileData *fd = file_data_new_simple(new_path);
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
244 GtkTreeIter iter;
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
245
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
246 if (vd_find_row(vd, fd, &iter))
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
247 {
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
248 tree_view_row_make_visible(GTK_TREE_VIEW(vd->view), &iter, TRUE);
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
249 }
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
250
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
251 file_data_unref(fd);
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
252 }
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
253 }
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
254
1452
67b40740122e gint -> gboolean where applicable.
zas_
parents: 1437
diff changeset
255 static gboolean vd_rename_cb(TreeEditData *td, const gchar *old, const gchar *new, gpointer data)
389
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
256 {
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
257 ViewDir *vd = data;
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
258 FileData *fd;
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
259 gchar *new_path;
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
260 gchar *base;
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
261
399
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
262 fd = vd_get_fd_from_tree_path(vd, GTK_TREE_VIEW(vd->view), td->path);
389
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
263 if (!fd) return FALSE;
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
264
818
8fd626b43f88 fixed segfault in vd_rename_cb
nadvornik
parents: 783
diff changeset
265 base = remove_level_from_path(fd->path);
702
e07895754e65 Drop concat_dir_and_file() and use g_build_filename() instead.
zas_
parents: 586
diff changeset
266 new_path = g_build_filename(base, new, NULL);
389
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
267 g_free(base);
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
268
1637
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
269 file_util_rename_dir(fd, new_path, vd->view, vd_rename_finished_cb, vd);
907
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
270
389
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
271 g_free(new_path);
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
272
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
273 return FALSE;
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
274 }
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
275
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
276 static void vd_rename_by_data(ViewDir *vd, FileData *fd)
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
277 {
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
278 GtkTreeModel *store;
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
279 GtkTreePath *tpath;
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
280 GtkTreeIter iter;
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
281
1553
626adbb26387 fixed tests for vd_find_row return value
nadvornik
parents: 1523
diff changeset
282 if (!fd || !vd_find_row(vd, fd, &iter)) return;
389
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
283 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
284 tpath = gtk_tree_model_get_path(store, &iter);
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
285
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
286 tree_edit_by_path(GTK_TREE_VIEW(vd->view), tpath, 0, fd->name,
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
287 vd_rename_cb, vd);
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
288 gtk_tree_path_free(tpath);
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
289 }
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
290
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
291
383
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
292 void vd_color_set(ViewDir *vd, FileData *fd, gint color_set)
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
293 {
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
294 GtkTreeModel *store;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
295 GtkTreeIter iter;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
296
1553
626adbb26387 fixed tests for vd_find_row return value
nadvornik
parents: 1523
diff changeset
297 if (!vd_find_row(vd, fd, &iter)) return;
389
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
298 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
299
1347
79937bc55f3a Add missing space between switch and first parenthesis.
zas_
parents: 1284
diff changeset
300 switch (vd->type)
383
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
301 {
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
302 case DIRVIEW_LIST:
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
303 gtk_list_store_set(GTK_LIST_STORE(store), &iter, DIR_COLUMN_COLOR, color_set, -1);
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
304 break;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
305 case DIRVIEW_TREE:
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
306 gtk_tree_store_set(GTK_TREE_STORE(store), &iter, DIR_COLUMN_COLOR, color_set, -1);
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
307 break;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
308 }
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
309 }
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
310
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
311 void vd_popup_destroy_cb(GtkWidget *widget, gpointer data)
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
312 {
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
313 ViewDir *vd = data;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
314
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
315 vd_color_set(vd, vd->click_fd, FALSE);
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
316 vd->click_fd = NULL;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
317 vd->popup = NULL;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
318
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
319 vd_color_set(vd, vd->drop_fd, FALSE);
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
320 filelist_free(vd->drop_list);
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
321 vd->drop_list = NULL;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
322 vd->drop_fd = NULL;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
323 }
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
324
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
325 /*
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
326 *-----------------------------------------------------------------------------
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
327 * drop menu (from dnd)
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
328 *-----------------------------------------------------------------------------
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
329 */
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
330
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
331 static void vd_drop_menu_copy_cb(GtkWidget *widget, gpointer data)
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
332 {
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
333 ViewDir *vd = data;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
334 const gchar *path;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
335 GList *list;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
336
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
337 if (!vd->drop_fd) return;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
338
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
339 path = vd->drop_fd->path;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
340 list = vd->drop_list;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
341 vd->drop_list = NULL;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
342
753
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
343 file_util_copy_simple(list, path, vd->widget);
383
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
344 }
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
345
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
346 static void vd_drop_menu_move_cb(GtkWidget *widget, gpointer data)
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
347 {
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
348 ViewDir *vd = data;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
349 const gchar *path;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
350 GList *list;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
351
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
352 if (!vd->drop_fd) return;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
353
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
354 path = vd->drop_fd->path;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
355 list = vd->drop_list;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
356
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
357 vd->drop_list = NULL;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
358
753
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
359 file_util_move_simple(list, path, vd->widget);
383
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
360 }
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
361
753
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
362 static void vd_drop_menu_filter_cb(GtkWidget *widget, gpointer data)
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
363 {
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
364 ViewDir *vd = data;
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
365 const gchar *path;
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
366 GList *list;
1272
e0e12512cde2 read external editors from .desktop files
nadvornik
parents: 1232
diff changeset
367 const gchar *key;
e0e12512cde2 read external editors from .desktop files
nadvornik
parents: 1232
diff changeset
368
753
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
369 if (!vd->drop_fd) return;
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
370
1272
e0e12512cde2 read external editors from .desktop files
nadvornik
parents: 1232
diff changeset
371 key = g_object_get_data(G_OBJECT(widget), "filter_key");
753
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
372
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
373 path = vd->drop_fd->path;
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
374 list = vd->drop_list;
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
375
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
376 vd->drop_list = NULL;
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
377
1272
e0e12512cde2 read external editors from .desktop files
nadvornik
parents: 1232
diff changeset
378 file_util_start_filter_from_filelist(key, list, path, vd->widget);
753
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
379 }
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
380
1413
3bc4967aaa57 Use dynamic allocation for editor key passed to various callbacks.
zas_
parents: 1412
diff changeset
381 static void vd_drop_menu_edit_item_free(gpointer data)
3bc4967aaa57 Use dynamic allocation for editor key passed to various callbacks.
zas_
parents: 1412
diff changeset
382 {
3bc4967aaa57 Use dynamic allocation for editor key passed to various callbacks.
zas_
parents: 1412
diff changeset
383 g_free(data);
3bc4967aaa57 Use dynamic allocation for editor key passed to various callbacks.
zas_
parents: 1412
diff changeset
384 }
753
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
385
383
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
386 GtkWidget *vd_drop_menu(ViewDir *vd, gint active)
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
387 {
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
388 GtkWidget *menu;
1272
e0e12512cde2 read external editors from .desktop files
nadvornik
parents: 1232
diff changeset
389 GList *editors_list = editor_list_get();
e0e12512cde2 read external editors from .desktop files
nadvornik
parents: 1232
diff changeset
390 GList *work = editors_list;
383
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
391
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
392 menu = popup_menu_short_lived();
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
393 g_signal_connect(G_OBJECT(menu), "destroy",
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
394 G_CALLBACK(vd_popup_destroy_cb), vd);
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
395
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
396 menu_item_add_stock_sensitive(menu, _("_Copy"), GTK_STOCK_COPY, active,
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
397 G_CALLBACK(vd_drop_menu_copy_cb), vd);
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
398 menu_item_add_sensitive(menu, _("_Move"), active, G_CALLBACK(vd_drop_menu_move_cb), vd);
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
399
1272
e0e12512cde2 read external editors from .desktop files
nadvornik
parents: 1232
diff changeset
400 while (work)
753
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
401 {
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
402 GtkWidget *item;
1272
e0e12512cde2 read external editors from .desktop files
nadvornik
parents: 1232
diff changeset
403 const EditorDescription *editor = work->data;
1413
3bc4967aaa57 Use dynamic allocation for editor key passed to various callbacks.
zas_
parents: 1412
diff changeset
404 gchar *key;
1272
e0e12512cde2 read external editors from .desktop files
nadvornik
parents: 1232
diff changeset
405 work = work->next;
e0e12512cde2 read external editors from .desktop files
nadvornik
parents: 1232
diff changeset
406
e0e12512cde2 read external editors from .desktop files
nadvornik
parents: 1232
diff changeset
407 if (!editor_is_filter(editor->key)) continue;
1413
3bc4967aaa57 Use dynamic allocation for editor key passed to various callbacks.
zas_
parents: 1412
diff changeset
408 key = g_strdup(editor->key);
1272
e0e12512cde2 read external editors from .desktop files
nadvornik
parents: 1232
diff changeset
409 item = menu_item_add_sensitive(menu, editor->name, active, G_CALLBACK(vd_drop_menu_filter_cb), vd);
1413
3bc4967aaa57 Use dynamic allocation for editor key passed to various callbacks.
zas_
parents: 1412
diff changeset
410 g_object_set_data_full(G_OBJECT(item), "filter_key", key, vd_drop_menu_edit_item_free);
753
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
411 }
1272
e0e12512cde2 read external editors from .desktop files
nadvornik
parents: 1232
diff changeset
412
e0e12512cde2 read external editors from .desktop files
nadvornik
parents: 1232
diff changeset
413 g_list_free(editors_list);
753
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
414
383
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
415 menu_item_add_divider(menu);
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
416 menu_item_add_stock(menu, _("Cancel"), GTK_STOCK_CANCEL, NULL, vd);
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
417
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
418 return menu;
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
419 }
499d7ba62261 Move some dnd common code from view_dir_list.c and view_dir_tree.c
zas_
parents: 380
diff changeset
420
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
421 /*
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
422 *-----------------------------------------------------------------------------
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
423 * pop-up menu
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
424 *-----------------------------------------------------------------------------
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 421
diff changeset
425 */
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
426
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
427 static void vd_pop_menu_up_cb(GtkWidget *widget, gpointer data)
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
428 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
429 ViewDir *vd = data;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
430 gchar *path;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
431
783
d6a7fb4b8e7c replaced directory path with FileData* dir_fd
nadvornik
parents: 753
diff changeset
432 if (!vd->dir_fd || strcmp(vd->dir_fd->path, G_DIR_SEPARATOR_S) == 0) return;
d6a7fb4b8e7c replaced directory path with FileData* dir_fd
nadvornik
parents: 753
diff changeset
433 path = remove_level_from_path(vd->dir_fd->path);
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
434
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
435 if (vd->select_func)
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
436 {
1628
66bf394d162a simplified the code around vd_select_row
nadvornik
parents: 1612
diff changeset
437 FileData *fd = file_data_new_simple(path);
66bf394d162a simplified the code around vd_select_row
nadvornik
parents: 1612
diff changeset
438 vd->select_func(vd, fd, vd->select_data);
66bf394d162a simplified the code around vd_select_row
nadvornik
parents: 1612
diff changeset
439 file_data_unref(fd);
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
440 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
441
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
442 g_free(path);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
443 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
444
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
445 static void vd_pop_menu_slide_cb(GtkWidget *widget, gpointer data)
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
446 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
447 ViewDir *vd = data;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
448
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
449 if (!vd->layout) return;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
450 if (!vd->click_fd) return;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
451
783
d6a7fb4b8e7c replaced directory path with FileData* dir_fd
nadvornik
parents: 753
diff changeset
452 layout_set_fd(vd->layout, vd->click_fd);
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
453 layout_select_none(vd->layout);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
454 layout_image_slideshow_stop(vd->layout);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
455 layout_image_slideshow_start(vd->layout);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
456 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
457
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
458 static void vd_pop_menu_slide_rec_cb(GtkWidget *widget, gpointer data)
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
459 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
460 ViewDir *vd = data;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
461 GList *list;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
462
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
463 if (!vd->layout) return;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
464 if (!vd->click_fd) return;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
465
783
d6a7fb4b8e7c replaced directory path with FileData* dir_fd
nadvornik
parents: 753
diff changeset
466 list = filelist_recursive(vd->click_fd);
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
467
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
468 layout_image_slideshow_stop(vd->layout);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
469 layout_image_slideshow_start_from_list(vd->layout, list);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
470 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
471
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
472 static void vd_pop_menu_dupe(ViewDir *vd, gint recursive)
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
473 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
474 DupeWindow *dw;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
475 GList *list = NULL;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
476
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
477 if (!vd->click_fd) return;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
478
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
479 if (recursive)
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
480 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
481 list = g_list_append(list, file_data_ref(vd->click_fd));
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
482 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
483 else
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
484 {
783
d6a7fb4b8e7c replaced directory path with FileData* dir_fd
nadvornik
parents: 753
diff changeset
485 filelist_read(vd->click_fd, &list, NULL);
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
486 list = filelist_filter(list, FALSE);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
487 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
488
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
489 dw = dupe_window_new(DUPE_MATCH_NAME);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
490 dupe_window_add_files(dw, list, recursive);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
491
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
492 filelist_free(list);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
493 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
494
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
495 static void vd_pop_menu_dupe_cb(GtkWidget *widget, gpointer data)
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
496 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
497 ViewDir *vd = data;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
498 vd_pop_menu_dupe(vd, FALSE);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
499 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
500
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
501 static void vd_pop_menu_dupe_rec_cb(GtkWidget *widget, gpointer data)
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
502 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
503 ViewDir *vd = data;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
504 vd_pop_menu_dupe(vd, TRUE);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
505 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
506
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
507 static void vd_pop_menu_delete_cb(GtkWidget *widget, gpointer data)
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
508 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
509 ViewDir *vd = data;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
510
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
511 if (!vd->click_fd) return;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
512 file_util_delete_dir(vd->click_fd, vd->widget);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
513 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
514
522
fd4208f8b5f3 Allow to copy the path of a directory to clipboard from directory views.
zas_
parents: 512
diff changeset
515 static void vd_pop_menu_copy_path_cb(GtkWidget *widget, gpointer data)
fd4208f8b5f3 Allow to copy the path of a directory to clipboard from directory views.
zas_
parents: 512
diff changeset
516 {
fd4208f8b5f3 Allow to copy the path of a directory to clipboard from directory views.
zas_
parents: 512
diff changeset
517 ViewDir *vd = data;
fd4208f8b5f3 Allow to copy the path of a directory to clipboard from directory views.
zas_
parents: 512
diff changeset
518
fd4208f8b5f3 Allow to copy the path of a directory to clipboard from directory views.
zas_
parents: 512
diff changeset
519 if (!vd->click_fd) return;
fd4208f8b5f3 Allow to copy the path of a directory to clipboard from directory views.
zas_
parents: 512
diff changeset
520
fd4208f8b5f3 Allow to copy the path of a directory to clipboard from directory views.
zas_
parents: 512
diff changeset
521 file_util_copy_path_to_clipboard(vd->click_fd);
fd4208f8b5f3 Allow to copy the path of a directory to clipboard from directory views.
zas_
parents: 512
diff changeset
522 }
fd4208f8b5f3 Allow to copy the path of a directory to clipboard from directory views.
zas_
parents: 512
diff changeset
523
417
440979320308 Fix directory view popup menu to display a View As submenu
zas_
parents: 407
diff changeset
524 static void vd_pop_submenu_dir_view_as_cb(GtkWidget *widget, gpointer data)
440979320308 Fix directory view popup menu to display a View As submenu
zas_
parents: 407
diff changeset
525 {
440979320308 Fix directory view popup menu to display a View As submenu
zas_
parents: 407
diff changeset
526 ViewDir *vd = data;
419
ce5316d2e2d0 Cleanup last patch:
zas_
parents: 417
diff changeset
527
1668
8ebc26a4383f use radio buttons for file and dir mode in popup menu
nadvornik
parents: 1666
diff changeset
528 DirViewType new_type = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "menu_item_radio_data"));
1412
5a534e1501e1 fixed saving of file_view_type
nadvornik
parents: 1365
diff changeset
529 layout_views_set(vd->layout, new_type, vd->layout->options.file_view_type);
417
440979320308 Fix directory view popup menu to display a View As submenu
zas_
parents: 407
diff changeset
530 }
440979320308 Fix directory view popup menu to display a View As submenu
zas_
parents: 407
diff changeset
531
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
532 static void vd_pop_menu_refresh_cb(GtkWidget *widget, gpointer data)
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
533 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
534 ViewDir *vd = data;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
535
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
536 if (vd->layout) layout_refresh(vd->layout);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
537 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
538
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
539 static void vd_toggle_show_hidden_files_cb(GtkWidget *widget, gpointer data)
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
540 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
541 ViewDir *vd = data;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
542
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
543 options->file_filter.show_hidden_files = !options->file_filter.show_hidden_files;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
544 if (vd->layout) layout_refresh(vd->layout);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
545 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
546
1231
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
547 static void vd_pop_menu_new_rename_cb(gboolean success, const gchar *new_path, gpointer data)
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
548 {
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
549 ViewDir *vd = data;
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
550 FileData *fd = NULL;
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
551 if (!success) return;
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
552
1347
79937bc55f3a Add missing space between switch and first parenthesis.
zas_
parents: 1284
diff changeset
553 switch (vd->type)
1231
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
554 {
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
555 case DIRVIEW_LIST:
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
556 {
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
557 vd_refresh(vd);
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
558 fd = vdlist_row_by_path(vd, new_path, NULL);
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
559 };
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
560 break;
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
561 case DIRVIEW_TREE:
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
562 {
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
563 FileData *new_fd = file_data_new_simple(new_path);
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
564 fd = vdtree_populate_path(vd, new_fd, TRUE, TRUE);
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
565 file_data_unref(new_fd);
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
566 }
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
567 break;
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
568 }
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
569 vd_rename_by_data(vd, fd);
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
570 }
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
571
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
572 static void vd_pop_menu_new_cb(GtkWidget *widget, gpointer data)
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
573 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
574 ViewDir *vd = data;
907
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
575 FileData *dir_fd = NULL;
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
576
1347
79937bc55f3a Add missing space between switch and first parenthesis.
zas_
parents: 1284
diff changeset
577 switch (vd->type)
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
578 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
579 case DIRVIEW_LIST:
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
580 {
783
d6a7fb4b8e7c replaced directory path with FileData* dir_fd
nadvornik
parents: 753
diff changeset
581 if (!vd->dir_fd) return;
907
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
582 dir_fd = vd->dir_fd;
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
583 };
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
584 break;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
585 case DIRVIEW_TREE:
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
586 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
587 if (!vd->click_fd) return;
907
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
588 dir_fd = vd->click_fd;
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
589 };
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
590 break;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
591 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
592
1231
ca8ccf0c3e81 added done callback to utilops
nadvornik
parents: 1230
diff changeset
593 file_util_create_dir(dir_fd, widget, vd_pop_menu_new_rename_cb, vd);
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
594 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
595
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
596 static void vd_pop_menu_rename_cb(GtkWidget *widget, gpointer data)
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
597 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
598 ViewDir *vd = data;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 421
diff changeset
599
389
b78077f65eff Merge few more vdlist/vdtree functions.
zas_
parents: 388
diff changeset
600 vd_rename_by_data(vd, vd->click_fd);
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
601 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
602
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
603 GtkWidget *vd_pop_menu(ViewDir *vd, FileData *fd)
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
604 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
605 GtkWidget *menu;
417
440979320308 Fix directory view popup menu to display a View As submenu
zas_
parents: 407
diff changeset
606 GtkWidget *item;
1452
67b40740122e gint -> gboolean where applicable.
zas_
parents: 1437
diff changeset
607 gboolean active;
1437
a3d3208b0c50 gint -> gboolean.
zas_
parents: 1432
diff changeset
608 gboolean rename_delete_active = FALSE;
a3d3208b0c50 gint -> gboolean.
zas_
parents: 1432
diff changeset
609 gboolean new_folder_active = FALSE;
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
610
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
611 active = (fd != NULL);
1347
79937bc55f3a Add missing space between switch and first parenthesis.
zas_
parents: 1284
diff changeset
612 switch (vd->type)
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
613 {
392
5a73f2e1bf79 Fix new folder feature in dirlist mode, it was broken by revision 481.
zas_
parents: 391
diff changeset
614 case DIRVIEW_LIST:
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
615 {
392
5a73f2e1bf79 Fix new folder feature in dirlist mode, it was broken by revision 481.
zas_
parents: 391
diff changeset
616 /* check using . (always row 0) */
783
d6a7fb4b8e7c replaced directory path with FileData* dir_fd
nadvornik
parents: 753
diff changeset
617 new_folder_active = (vd->dir_fd && access_file(vd->dir_fd->path , W_OK | X_OK));
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
618
392
5a73f2e1bf79 Fix new folder feature in dirlist mode, it was broken by revision 481.
zas_
parents: 391
diff changeset
619 /* ignore .. and . */
5a73f2e1bf79 Fix new folder feature in dirlist mode, it was broken by revision 481.
zas_
parents: 391
diff changeset
620 rename_delete_active = (new_folder_active && fd &&
5a73f2e1bf79 Fix new folder feature in dirlist mode, it was broken by revision 481.
zas_
parents: 391
diff changeset
621 strcmp(fd->name, ".") != 0 &&
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 421
diff changeset
622 strcmp(fd->name, "..") != 0 &&
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 421
diff changeset
623 access_file(fd->path, W_OK | X_OK));
392
5a73f2e1bf79 Fix new folder feature in dirlist mode, it was broken by revision 481.
zas_
parents: 391
diff changeset
624 };
5a73f2e1bf79 Fix new folder feature in dirlist mode, it was broken by revision 481.
zas_
parents: 391
diff changeset
625 break;
5a73f2e1bf79 Fix new folder feature in dirlist mode, it was broken by revision 481.
zas_
parents: 391
diff changeset
626 case DIRVIEW_TREE:
5a73f2e1bf79 Fix new folder feature in dirlist mode, it was broken by revision 481.
zas_
parents: 391
diff changeset
627 {
5a73f2e1bf79 Fix new folder feature in dirlist mode, it was broken by revision 481.
zas_
parents: 391
diff changeset
628 if (fd)
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
629 {
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
630 gchar *parent;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
631 new_folder_active = (fd && access_file(fd->path, W_OK | X_OK));
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
632 parent = remove_level_from_path(fd->path);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
633 rename_delete_active = access_file(parent, W_OK | X_OK);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
634 g_free(parent);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
635 };
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
636 }
392
5a73f2e1bf79 Fix new folder feature in dirlist mode, it was broken by revision 481.
zas_
parents: 391
diff changeset
637 break;
5a73f2e1bf79 Fix new folder feature in dirlist mode, it was broken by revision 481.
zas_
parents: 391
diff changeset
638 }
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
639
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
640 menu = popup_menu_short_lived();
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
641 g_signal_connect(G_OBJECT(menu), "destroy",
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
642 G_CALLBACK(vd_popup_destroy_cb), vd);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
643
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
644 menu_item_add_stock_sensitive(menu, _("_Up to parent"), GTK_STOCK_GO_UP,
783
d6a7fb4b8e7c replaced directory path with FileData* dir_fd
nadvornik
parents: 753
diff changeset
645 (vd->dir_fd && strcmp(vd->dir_fd->path, G_DIR_SEPARATOR_S) != 0),
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
646 G_CALLBACK(vd_pop_menu_up_cb), vd);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
647
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
648 menu_item_add_divider(menu);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
649 menu_item_add_sensitive(menu, _("_Slideshow"), active,
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
650 G_CALLBACK(vd_pop_menu_slide_cb), vd);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
651 menu_item_add_sensitive(menu, _("Slideshow recursive"), active,
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
652 G_CALLBACK(vd_pop_menu_slide_rec_cb), vd);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
653
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
654 menu_item_add_divider(menu);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
655 menu_item_add_stock_sensitive(menu, _("Find _duplicates..."), GTK_STOCK_FIND, active,
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
656 G_CALLBACK(vd_pop_menu_dupe_cb), vd);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
657 menu_item_add_stock_sensitive(menu, _("Find duplicates recursive..."), GTK_STOCK_FIND, active,
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
658 G_CALLBACK(vd_pop_menu_dupe_rec_cb), vd);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
659
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
660 menu_item_add_divider(menu);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
661
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
662 menu_item_add_sensitive(menu, _("_New folder..."), new_folder_active,
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
663 G_CALLBACK(vd_pop_menu_new_cb), vd);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
664
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
665 menu_item_add_sensitive(menu, _("_Rename..."), rename_delete_active,
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
666 G_CALLBACK(vd_pop_menu_rename_cb), vd);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
667 menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, rename_delete_active,
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
668 G_CALLBACK(vd_pop_menu_delete_cb), vd);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
669
1513
c9ed5a43c576 dropped show_copy_path option
nadvornik
parents: 1498
diff changeset
670 menu_item_add(menu, _("_Copy path"),
c9ed5a43c576 dropped show_copy_path option
nadvornik
parents: 1498
diff changeset
671 G_CALLBACK(vd_pop_menu_copy_path_cb), vd);
522
fd4208f8b5f3 Allow to copy the path of a directory to clipboard from directory views.
zas_
parents: 512
diff changeset
672
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
673 menu_item_add_divider(menu);
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 421
diff changeset
674
1666
fa942b3f0ef5 created Files and Folders submenu
nadvornik
parents: 1656
diff changeset
675
1668
8ebc26a4383f use radio buttons for file and dir mode in popup menu
nadvornik
parents: 1666
diff changeset
676 item = menu_item_add_radio(menu, _("View as _List"), GINT_TO_POINTER(DIRVIEW_LIST), vd->type == DIRVIEW_LIST,
1666
fa942b3f0ef5 created Files and Folders submenu
nadvornik
parents: 1656
diff changeset
677 G_CALLBACK(vd_pop_submenu_dir_view_as_cb), vd);
417
440979320308 Fix directory view popup menu to display a View As submenu
zas_
parents: 407
diff changeset
678
1668
8ebc26a4383f use radio buttons for file and dir mode in popup menu
nadvornik
parents: 1666
diff changeset
679 item = menu_item_add_radio(menu, _("View as _Tree"), GINT_TO_POINTER(DIRVIEW_TREE), vd->type == DIRVIEW_TREE,
1666
fa942b3f0ef5 created Files and Folders submenu
nadvornik
parents: 1656
diff changeset
680 G_CALLBACK(vd_pop_submenu_dir_view_as_cb), vd);
fa942b3f0ef5 created Files and Folders submenu
nadvornik
parents: 1656
diff changeset
681
fa942b3f0ef5 created Files and Folders submenu
nadvornik
parents: 1656
diff changeset
682 menu_item_add_divider(menu);
417
440979320308 Fix directory view popup menu to display a View As submenu
zas_
parents: 407
diff changeset
683
388
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
684 menu_item_add_check(menu, _("Show _hidden files"), options->file_filter.show_hidden_files,
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
685 G_CALLBACK(vd_toggle_show_hidden_files_cb), vd);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
686
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
687 menu_item_add_stock(menu, _("Re_fresh"), GTK_STOCK_REFRESH,
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
688 G_CALLBACK(vd_pop_menu_refresh_cb), vd);
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
689
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
690 return menu;
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
691 }
5186f8e38cb8 Make directory view popup menu common and move it to view_dir.{c,h}.
zas_
parents: 384
diff changeset
692
1637
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
693 void vd_new_folder(ViewDir *vd, FileData *dir_fd)
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
694 {
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
695 file_util_create_dir(dir_fd, vd->widget, vd_pop_menu_new_rename_cb, vd);
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
696 }
cc3ccf3c7c27 unify code paths for New directory
nadvornik
parents: 1628
diff changeset
697
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
698 /*
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
699 *-----------------------------------------------------------------------------
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
700 * dnd
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
701 *-----------------------------------------------------------------------------
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
702 */
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
703
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
704 static GtkTargetEntry vd_dnd_drop_types[] = {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
705 { "text/uri-list", 0, TARGET_URI_LIST }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
706 };
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
707 static gint vd_dnd_drop_types_count = 1;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
708
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
709 static void vd_dest_set(ViewDir *vd, gint enable)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
710 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
711 if (enable)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
712 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
713 gtk_drag_dest_set(vd->view,
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
714 GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
715 vd_dnd_drop_types, vd_dnd_drop_types_count,
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
716 GDK_ACTION_MOVE | GDK_ACTION_COPY);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
717 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
718 else
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
719 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
720 gtk_drag_dest_unset(vd->view);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
721 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
722 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
723
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
724 static void vd_dnd_get(GtkWidget *widget, GdkDragContext *context,
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
725 GtkSelectionData *selection_data, guint info,
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
726 guint time, gpointer data)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
727 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
728 ViewDir *vd = data;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
729 GList *list;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
730 gchar *uritext = NULL;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
731 gint length = 0;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
732
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
733 if (!vd->click_fd) return;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
734
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
735 switch (info)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
736 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
737 case TARGET_URI_LIST:
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
738 case TARGET_TEXT_PLAIN:
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
739 list = g_list_prepend(NULL, vd->click_fd);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
740 uritext = uri_text_from_filelist(list, &length, (info == TARGET_TEXT_PLAIN));
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
741 g_list_free(list);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
742 break;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
743 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
744 if (uritext)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
745 {
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 511
diff changeset
746 gtk_selection_data_set(selection_data, selection_data->target,
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 511
diff changeset
747 8, (guchar *)uritext, length);
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
748 g_free(uritext);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
749 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
750 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
751
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
752 static void vd_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
753 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
754 ViewDir *vd = data;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
755
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
756 vd_color_set(vd, vd->click_fd, TRUE);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
757 vd_dest_set(vd, FALSE);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
758 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
759
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
760 static void vd_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
761 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
762 ViewDir *vd = data;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
763
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
764 vd_color_set(vd, vd->click_fd, FALSE);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
765
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
766 if (vd->type == DIRVIEW_LIST && context->action == GDK_ACTION_MOVE)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
767 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
768 vd_refresh(vd);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
769 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
770 vd_dest_set(vd, TRUE);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
771 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
772
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
773 static void vd_dnd_drop_receive(GtkWidget *widget,
511
e21da52016c8 Indentation fix.
zas_
parents: 494
diff changeset
774 GdkDragContext *context, gint x, gint y,
e21da52016c8 Indentation fix.
zas_
parents: 494
diff changeset
775 GtkSelectionData *selection_data, guint info,
e21da52016c8 Indentation fix.
zas_
parents: 494
diff changeset
776 guint time, gpointer data)
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
777 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
778 ViewDir *vd = data;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
779 GtkTreePath *tpath;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
780 FileData *fd = NULL;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
781
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
782 vd->click_fd = NULL;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
783
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
784 if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), x, y,
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
785 &tpath, NULL, NULL, NULL))
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
786 {
399
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
787 fd = vd_get_fd_from_tree_path(vd, GTK_TREE_VIEW(widget), tpath);
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
788 gtk_tree_path_free(tpath);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
789 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
790
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
791 if (!fd) return;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
792
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
793 if (info == TARGET_URI_LIST)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
794 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
795 GList *list;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
796 gint active;
1437
a3d3208b0c50 gint -> gboolean.
zas_
parents: 1432
diff changeset
797 gboolean done = FALSE;
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
798
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
799 list = uri_filelist_from_text((gchar *)selection_data->data, TRUE);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
800 if (!list) return;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
801
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
802 active = access_file(fd->path, W_OK | X_OK);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
803
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
804 vd_color_set(vd, fd, TRUE);
494
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
805
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
806 if (active)
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
807 {
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
808 if (context->actions == GDK_ACTION_COPY)
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
809 {
753
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
810 file_util_copy_simple(list, fd->path, vd->widget);
494
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
811 done = TRUE;
1656
349ebc02b8e2 fixed leak in file_util_* functions
nadvornik
parents: 1637
diff changeset
812 list = NULL;
494
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
813 }
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
814 else if (context->actions == GDK_ACTION_MOVE)
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
815 {
753
477f48ba28d8 rewritten utilops.h:
nadvornik
parents: 736
diff changeset
816 file_util_move_simple(list, fd->path, vd->widget);
494
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
817 done = TRUE;
1656
349ebc02b8e2 fixed leak in file_util_* functions
nadvornik
parents: 1637
diff changeset
818 list = NULL;
494
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
819 }
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
820 }
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
821
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
822 if (done == FALSE)
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
823 {
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
824 vd->popup = vd_drop_menu(vd, active);
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
825 gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, NULL, NULL, 0, time);
3bb9a8df6ee9 Honor Control and Shift keys while drag'n'droping files
zas_
parents: 475
diff changeset
826 }
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
827
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
828 vd->drop_fd = fd;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
829 vd->drop_list = list;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
830 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
831 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
832
407
3a9074e73f53 Rename vd_drop_update() to vd_dnd_drop_update().
zas_
parents: 405
diff changeset
833 static void vd_dnd_drop_update(ViewDir *vd, gint x, gint y)
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
834 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
835 GtkTreePath *tpath;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
836 FileData *fd = NULL;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
837
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
838 if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vd->view), x, y,
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
839 &tpath, NULL, NULL, NULL))
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
840 {
399
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
841 fd = vd_get_fd_from_tree_path(vd, GTK_TREE_VIEW(vd->view), tpath);
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
842 gtk_tree_path_free(tpath);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
843 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
844
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
845 if (fd != vd->drop_fd)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
846 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
847 vd_color_set(vd, vd->drop_fd, FALSE);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
848 vd_color_set(vd, fd, TRUE);
407
3a9074e73f53 Rename vd_drop_update() to vd_dnd_drop_update().
zas_
parents: 405
diff changeset
849 if (fd && vd->dnd_drop_update_func) vd->dnd_drop_update_func(vd);
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
850 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
851
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
852 vd->drop_fd = fd;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
853 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
854
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
855 void vd_dnd_drop_scroll_cancel(ViewDir *vd)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
856 {
1523
24a12aa0cb54 Fix up event source ids type: gint -> guint.
zas_
parents: 1513
diff changeset
857 if (vd->drop_scroll_id)
24a12aa0cb54 Fix up event source ids type: gint -> guint.
zas_
parents: 1513
diff changeset
858 {
24a12aa0cb54 Fix up event source ids type: gint -> guint.
zas_
parents: 1513
diff changeset
859 g_source_remove(vd->drop_scroll_id);
24a12aa0cb54 Fix up event source ids type: gint -> guint.
zas_
parents: 1513
diff changeset
860 vd->drop_scroll_id = 0;
24a12aa0cb54 Fix up event source ids type: gint -> guint.
zas_
parents: 1513
diff changeset
861 }
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
862 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
863
1452
67b40740122e gint -> gboolean where applicable.
zas_
parents: 1437
diff changeset
864 static gboolean vd_auto_scroll_idle_cb(gpointer data)
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
865 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
866 ViewDir *vd = data;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
867
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
868 if (vd->drop_fd)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
869 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
870 GdkWindow *window;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
871 gint x, y;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
872 gint w, h;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
873
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
874 window = vd->view->window;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
875 gdk_window_get_pointer(window, &x, &y, NULL);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
876 gdk_drawable_get_size(window, &w, &h);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
877 if (x >= 0 && x < w && y >= 0 && y < h)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
878 {
407
3a9074e73f53 Rename vd_drop_update() to vd_dnd_drop_update().
zas_
parents: 405
diff changeset
879 vd_dnd_drop_update(vd, x, y);
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
880 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
881 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
882
1523
24a12aa0cb54 Fix up event source ids type: gint -> guint.
zas_
parents: 1513
diff changeset
883 vd->drop_scroll_id = 0;
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
884 return FALSE;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
885 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
886
1452
67b40740122e gint -> gboolean where applicable.
zas_
parents: 1437
diff changeset
887 static gboolean vd_auto_scroll_notify_cb(GtkWidget *widget, gint x, gint y, gpointer data)
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
888 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
889 ViewDir *vd = data;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
890
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
891 if (!vd->drop_fd || vd->drop_list) return FALSE;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
892
1523
24a12aa0cb54 Fix up event source ids type: gint -> guint.
zas_
parents: 1513
diff changeset
893 if (!vd->drop_scroll_id) vd->drop_scroll_id = g_idle_add(vd_auto_scroll_idle_cb, vd);
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
894
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
895 return TRUE;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
896 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
897
1452
67b40740122e gint -> gboolean where applicable.
zas_
parents: 1437
diff changeset
898 static gboolean vd_dnd_drop_motion(GtkWidget *widget, GdkDragContext *context,
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
899 gint x, gint y, guint time, gpointer data)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
900 {
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 421
diff changeset
901 ViewDir *vd = data;
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
902
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
903 vd->click_fd = NULL;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
904
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
905 if (gtk_drag_get_source_widget(context) == vd->view)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
906 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
907 /* from same window */
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
908 gdk_drag_status(context, 0, time);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
909 return TRUE;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
910 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
911 else
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
912 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
913 gdk_drag_status(context, context->suggested_action, time);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
914 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
915
407
3a9074e73f53 Rename vd_drop_update() to vd_dnd_drop_update().
zas_
parents: 405
diff changeset
916 vd_dnd_drop_update(vd, x, y);
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
917
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
918 if (vd->drop_fd)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
919 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
920 GtkAdjustment *adj = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(vd->view));
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
921 widget_auto_scroll_start(vd->view, adj, -1, -1, vd_auto_scroll_notify_cb, vd);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
922 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
923
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
924 return FALSE;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
925 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
926
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
927 static void vd_dnd_drop_leave(GtkWidget *widget, GdkDragContext *context, guint time, gpointer data)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
928 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
929 ViewDir *vd = data;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
930
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
931 if (vd->drop_fd != vd->click_fd) vd_color_set(vd, vd->drop_fd, FALSE);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
932
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
933 vd->drop_fd = NULL;
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
934
407
3a9074e73f53 Rename vd_drop_update() to vd_dnd_drop_update().
zas_
parents: 405
diff changeset
935 if (vd->dnd_drop_leave_func) vd->dnd_drop_leave_func(vd);
394
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
936 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
937
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
938 void vd_dnd_init(ViewDir *vd)
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
939 {
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
940 gtk_drag_source_set(vd->view, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
941 dnd_file_drag_types, dnd_file_drag_types_count,
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
942 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_ASK);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
943 g_signal_connect(G_OBJECT(vd->view), "drag_data_get",
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
944 G_CALLBACK(vd_dnd_get), vd);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
945 g_signal_connect(G_OBJECT(vd->view), "drag_begin",
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
946 G_CALLBACK(vd_dnd_begin), vd);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
947 g_signal_connect(G_OBJECT(vd->view), "drag_end",
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
948 G_CALLBACK(vd_dnd_end), vd);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
949
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
950 vd_dest_set(vd, TRUE);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
951 g_signal_connect(G_OBJECT(vd->view), "drag_data_received",
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
952 G_CALLBACK(vd_dnd_drop_receive), vd);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
953 g_signal_connect(G_OBJECT(vd->view), "drag_motion",
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
954 G_CALLBACK(vd_dnd_drop_motion), vd);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
955 g_signal_connect(G_OBJECT(vd->view), "drag_leave",
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
956 G_CALLBACK(vd_dnd_drop_leave), vd);
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
957 }
4a5e1377f3d7 Merge dirlist/dirview dnd code.
zas_
parents: 392
diff changeset
958
395
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
959 /*
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
960 *----------------------------------------------------------------------------
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
961 * callbacks
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
962 *----------------------------------------------------------------------------
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
963 */
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
964
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
965 void vd_menu_position_cb(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer data)
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
966 {
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
967 ViewDir *vd = data;
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
968 GtkTreeModel *store;
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
969 GtkTreeIter iter;
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
970 GtkTreePath *tpath;
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
971 gint cw, ch;
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
972
1553
626adbb26387 fixed tests for vd_find_row return value
nadvornik
parents: 1523
diff changeset
973 if (!vd_find_row(vd, vd->click_fd, &iter)) return;
395
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
974 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
975 tpath = gtk_tree_model_get_path(store, &iter);
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
976 tree_view_get_cell_clamped(GTK_TREE_VIEW(vd->view), tpath, 0, TRUE, x, y, &cw, &ch);
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
977 gtk_tree_path_free(tpath);
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
978 *y += ch;
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
979 popup_menu_position_clamp(menu, x, y, 0);
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
980 }
c359fc2c5a1f Move common menu position callback to view_dir.c.
zas_
parents: 394
diff changeset
981
396
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
982 void vd_activate_cb(GtkTreeView *tview, GtkTreePath *tpath, GtkTreeViewColumn *column, gpointer data)
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
983 {
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
984 ViewDir *vd = data;
399
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
985 FileData *fd = vd_get_fd_from_tree_path(vd, tview, tpath);
396
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
986
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
987 vd_select_row(vd, fd);
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
988 }
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
989
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
990 static GdkColor *vd_color_shifted(GtkWidget *widget)
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
991 {
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
992 static GdkColor color;
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
993 static GtkWidget *done = NULL;
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
994
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
995 if (done != widget)
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
996 {
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
997 GtkStyle *style;
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
998
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
999 style = gtk_widget_get_style(widget);
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1000 memcpy(&color, &style->base[GTK_STATE_NORMAL], sizeof(color));
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1001 shift_color(&color, -1, 0);
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1002 done = widget;
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1003 }
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1004
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1005 return &color;
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1006 }
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1007
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1008 void vd_color_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1009 GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1010 {
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1011 ViewDir *vd = data;
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1012 gboolean set;
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1013
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1014 gtk_tree_model_get(tree_model, iter, DIR_COLUMN_COLOR, &set, -1);
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1015 g_object_set(G_OBJECT(cell),
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1016 "cell-background-gdk", vd_color_shifted(vd->view),
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1017 "cell-background-set", set, NULL);
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1018 }
a01535f52b56 Merge few more functions to view_dir.c.
zas_
parents: 395
diff changeset
1019
1452
67b40740122e gint -> gboolean where applicable.
zas_
parents: 1437
diff changeset
1020 gboolean vd_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
397
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1021 {
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1022 ViewDir *vd = data;
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1023 GtkTreePath *tpath;
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1024 FileData *fd = NULL;
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1025
400
35346871af88 Fix a bug introduced in revision 489.
zas_
parents: 399
diff changeset
1026 if (!vd->click_fd) return FALSE;
397
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1027 vd_color_set(vd, vd->click_fd, FALSE);
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1028
448
a73cc0fa14d0 Use explicit names for mouse buttons instead of numbers.
zas_
parents: 442
diff changeset
1029 if (bevent->button != MOUSE_BUTTON_LEFT) return TRUE;
397
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1030
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1031 if ((bevent->x != 0 || bevent->y != 0) &&
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1032 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), bevent->x, bevent->y,
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1033 &tpath, NULL, NULL, NULL))
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1034 {
399
d071a3555011 Reduce code redundancy with the introduction of a new
zas_
parents: 397
diff changeset
1035 fd = vd_get_fd_from_tree_path(vd, GTK_TREE_VIEW(widget), tpath);
397
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1036 gtk_tree_path_free(tpath);
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1037 }
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1038
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1039 if (fd && vd->click_fd == fd)
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1040 {
1628
66bf394d162a simplified the code around vd_select_row
nadvornik
parents: 1612
diff changeset
1041 vd_select_row(vd, vd->click_fd);
397
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1042 }
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1043
400
35346871af88 Fix a bug introduced in revision 489.
zas_
parents: 399
diff changeset
1044 return FALSE;
397
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1045 }
a7be56e84870 Merge vd(list|tree)_release_cb() in vd_release_cb().
zas_
parents: 396
diff changeset
1046
1452
67b40740122e gint -> gboolean where applicable.
zas_
parents: 1437
diff changeset
1047 gboolean vd_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
401
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1048 {
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1049 ViewDir *vd = data;
1437
a3d3208b0c50 gint -> gboolean.
zas_
parents: 1432
diff changeset
1050 gboolean ret = FALSE;
401
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1051
1347
79937bc55f3a Add missing space between switch and first parenthesis.
zas_
parents: 1284
diff changeset
1052 switch (vd->type)
401
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1053 {
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1054 case DIRVIEW_LIST: ret = vdlist_press_key_cb(widget, event, data); break;
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1055 case DIRVIEW_TREE: ret = vdtree_press_key_cb(widget, event, data); break;
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1056 }
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1057
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1058 return ret;
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1059 }
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1060
1452
67b40740122e gint -> gboolean where applicable.
zas_
parents: 1437
diff changeset
1061 gboolean vd_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
401
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1062 {
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1063 ViewDir *vd = data;
1437
a3d3208b0c50 gint -> gboolean.
zas_
parents: 1432
diff changeset
1064 gboolean ret = FALSE;
401
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1065
1347
79937bc55f3a Add missing space between switch and first parenthesis.
zas_
parents: 1284
diff changeset
1066 switch (vd->type)
401
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1067 {
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1068 case DIRVIEW_LIST: ret = vdlist_press_cb(widget, bevent, data); break;
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1069 case DIRVIEW_TREE: ret = vdtree_press_cb(widget, bevent, data); break;
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1070 }
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1071
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1072 return ret;
0a2e1b130a25 Add some wrappers in view_dir.c and simplify even more.
zas_
parents: 400
diff changeset
1073 }
907
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1074
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1075 static void vd_notify_cb(FileData *fd, NotifyType type, gpointer data)
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1076 {
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1077 ViewDir *vd = data;
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1078 gboolean refresh;
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1079 gchar *base;
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1080
945
fd84847c8231 speed-up of directory notification on deleting large number of files
nadvornik
parents: 943
diff changeset
1081 if (!S_ISDIR(fd->mode)) return; /* this gives correct results even on recently deleted files/directories */
907
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1082
1498
5f49f305a6b6 improved debug messages
nadvornik
parents: 1452
diff changeset
1083 DEBUG_1("Notify vd: %s %04x", fd->path, type);
5f49f305a6b6 improved debug messages
nadvornik
parents: 1452
diff changeset
1084
907
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1085 base = remove_level_from_path(fd->path);
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1086
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1087 if (vd->type == DIRVIEW_LIST)
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1088 {
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1089 refresh = (fd == vd->dir_fd);
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1090
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1091 if (!refresh)
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1092 {
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1093 refresh = (strcmp(base, vd->dir_fd->path) == 0);
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1094 }
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1095
1432
cf4029d10d38 improved notification system
nadvornik
parents: 1413
diff changeset
1096 if ((type & NOTIFY_CHANGE) && fd->change)
907
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1097 {
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1098 if (!refresh && fd->change->dest)
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1099 {
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1100 gchar *dest_base = remove_level_from_path(fd->change->dest);
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1101 refresh = (strcmp(dest_base, vd->dir_fd->path) == 0);
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1102 g_free(dest_base);
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1103 }
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1104
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1105 if (!refresh && fd->change->source)
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1106 {
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1107 gchar *source_base = remove_level_from_path(fd->change->source);
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1108 refresh = (strcmp(source_base, vd->dir_fd->path) == 0);
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1109 g_free(source_base);
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1110 }
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1111 }
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1112
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1113 if (refresh) vd_refresh(vd);
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1114 }
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1115
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1116 if (vd->type == DIRVIEW_TREE)
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1117 {
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1118 GtkTreeIter iter;
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1119 FileData *base_fd = file_data_new_simple(base);
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1120
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1121 if (vd_find_row(vd, base_fd, &iter))
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1122 {
943
b483d8cdedb6 improved updating of view_dir_tree
nadvornik
parents: 917
diff changeset
1123 vdtree_populate_path_by_iter(vd, &iter, TRUE, vd->dir_fd);
995
6ca2c5fd7b13 Whitespaces cleanup.
zas_
parents: 982
diff changeset
1124 }
907
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1125
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1126 file_data_unref(base_fd);
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1127 }
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1128
ca8022a156ec added notification handler to view_dir
nadvornik
parents: 904
diff changeset
1129 g_free(base);
917
fac2a1ed31a6 Fix missing newline at end of file.
zas_
parents: 907
diff changeset
1130 }
1055
1646720364cf Adding a vim modeline to all files - patch by Klaus Ethgen
nadvornik
parents: 995
diff changeset
1131 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */