diff options
Diffstat (limited to 'src/fs/gnunet-fs-gtk-main_window_file_publish.c')
-rw-r--r-- | src/fs/gnunet-fs-gtk-main_window_file_publish.c | 649 |
1 files changed, 265 insertions, 384 deletions
diff --git a/src/fs/gnunet-fs-gtk-main_window_file_publish.c b/src/fs/gnunet-fs-gtk-main_window_file_publish.c index 34e8481e..18be9531 100644 --- a/src/fs/gnunet-fs-gtk-main_window_file_publish.c +++ b/src/fs/gnunet-fs-gtk-main_window_file_publish.c | |||
@@ -30,6 +30,38 @@ | |||
30 | 30 | ||
31 | #define MARKER_DIR_FILE_SIZE "-" | 31 | #define MARKER_DIR_FILE_SIZE "-" |
32 | 32 | ||
33 | struct MainPublishingDialogContext | ||
34 | { | ||
35 | GtkBuilder *builder; | ||
36 | GtkBuilder *main_window_builder; | ||
37 | GtkTreeView *pseudonym_treeview; | ||
38 | GtkTreeSelection *pseudonym_selection; | ||
39 | GtkTreeModel *pseudonym_treemodel; | ||
40 | GtkWidget *up_button; | ||
41 | GtkWidget *down_button; | ||
42 | GtkWidget *left_button; | ||
43 | GtkWidget *right_button; | ||
44 | GtkWidget *delete_button; | ||
45 | GtkWidget *edit_button; | ||
46 | GtkWidget *execute_button; | ||
47 | GtkTreeView *file_info_treeview; | ||
48 | GtkTreeSelection *file_info_selection; | ||
49 | GtkTreeModel *file_info_treemodel; | ||
50 | GtkWindow *master_pubdialog; | ||
51 | |||
52 | gulong open_directory_handler_id; | ||
53 | gulong open_file_handler_id; | ||
54 | }; | ||
55 | |||
56 | void | ||
57 | GNUNET_GTK_publish_file_dialog_response_cb (GtkDialog * dialog, | ||
58 | gint response_id, | ||
59 | struct MainPublishingDialogContext *ctx); | ||
60 | |||
61 | static void | ||
62 | selection_changed_cb (GtkTreeSelection * ts, struct MainPublishingDialogContext *ctx); | ||
63 | |||
64 | |||
33 | /** | 65 | /** |
34 | * Check if two GtkTreeIters refer to the same element. | 66 | * Check if two GtkTreeIters refer to the same element. |
35 | * | 67 | * |
@@ -53,136 +85,129 @@ gtk_tree_iter_equals (GtkTreeModel * tm, GtkTreeIter * i1, GtkTreeIter * i2) | |||
53 | return (0 == ret) ? GNUNET_YES : GNUNET_NO; | 85 | return (0 == ret) ? GNUNET_YES : GNUNET_NO; |
54 | } | 86 | } |
55 | 87 | ||
88 | static void | ||
89 | init_ctx (struct MainPublishingDialogContext *ctx) | ||
90 | { | ||
91 | ctx->pseudonym_treeview = GTK_TREE_VIEW (gtk_builder_get_object | ||
92 | (ctx->builder, "GNUNET_GTK_master_publish_dialog_pseudonym_tree_view")); | ||
93 | |||
94 | ctx->up_button = GTK_WIDGET (gtk_builder_get_object | ||
95 | (ctx->builder, "GNUNET_GTK_master_publish_dialog_up_button")); | ||
96 | ctx->down_button = GTK_WIDGET (gtk_builder_get_object | ||
97 | (ctx->builder, "GNUNET_GTK_master_publish_dialog_down_button")); | ||
98 | ctx->left_button = GTK_WIDGET (gtk_builder_get_object | ||
99 | (ctx->builder, "GNUNET_GTK_master_publish_dialog_left_button")); | ||
100 | ctx->right_button = GTK_WIDGET (gtk_builder_get_object | ||
101 | (ctx->builder, "GNUNET_GTK_master_publish_dialog_right_button")); | ||
102 | ctx->delete_button = GTK_WIDGET (gtk_builder_get_object | ||
103 | (ctx->builder, "GNUNET_GTK_master_publish_dialog_delete_button")); | ||
104 | ctx->edit_button = GTK_WIDGET (gtk_builder_get_object | ||
105 | (ctx->builder, "GNUNET_GTK_master_publish_dialog_edit_button")); | ||
106 | ctx->execute_button = GTK_WIDGET (gtk_builder_get_object | ||
107 | (ctx->builder, "GNUNET_GTK_master_publish_dialog_execute_button")); | ||
108 | ctx->file_info_treeview = GTK_TREE_VIEW (gtk_builder_get_object | ||
109 | (ctx->builder, "GNUNET_GTK_master_publish_dialog_file_information_tree_view")); | ||
110 | |||
111 | ctx->master_pubdialog = | ||
112 | GTK_WINDOW (gtk_builder_get_object | ||
113 | (ctx->builder, "GNUNET_GTK_master_publish_dialog")); | ||
114 | |||
115 | ctx->file_info_selection = gtk_tree_view_get_selection (ctx->file_info_treeview); | ||
116 | ctx->file_info_treemodel = gtk_tree_view_get_model (ctx->file_info_treeview); | ||
117 | ctx->pseudonym_selection = gtk_tree_view_get_selection (ctx->pseudonym_treeview); | ||
118 | ctx->pseudonym_treemodel = gtk_tree_view_get_model (ctx->pseudonym_treeview); | ||
119 | |||
120 | g_signal_connect (G_OBJECT (ctx->file_info_selection), "changed", | ||
121 | G_CALLBACK (selection_changed_cb), ctx); | ||
122 | g_signal_connect (G_OBJECT (ctx->pseudonym_selection), "changed", | ||
123 | G_CALLBACK (selection_changed_cb), ctx); | ||
124 | } | ||
56 | 125 | ||
57 | /** | 126 | /** |
58 | * Update selectivity in the master dialog. | 127 | * Update selectivity in the master dialog. |
59 | */ | 128 | */ |
60 | static void | 129 | static void |
61 | update_selectivity (gpointer data) | 130 | update_selectivity (struct MainPublishingDialogContext *ctx) |
62 | { | 131 | { |
63 | GtkTreeView *tv; | ||
64 | GtkTreeModel *tm; | ||
65 | GtkTreeModel *ptm; | ||
66 | GtkTreeSelection *sel; | ||
67 | GtkTreeIter iter; | 132 | GtkTreeIter iter; |
68 | GtkTreeIter parent; | 133 | GtkTreeIter parent; |
69 | GtkTreeIter pred; | 134 | GtkTreeIter pred; |
70 | GtkWidget *up_button; | ||
71 | GtkWidget *down_button; | ||
72 | GtkWidget *left_button; | ||
73 | GtkWidget *right_button; | ||
74 | GtkWidget *delete_button; | ||
75 | GtkWidget *edit_button; | ||
76 | GtkWidget *execute_button; | ||
77 | int is_dir; | 135 | int is_dir; |
78 | struct GNUNET_FS_FileInformation *fip; | 136 | struct GNUNET_FS_FileInformation *fip; |
79 | int ns_ok; | 137 | int ns_ok; |
80 | gchar *namespace_id; | 138 | gchar *namespace_id; |
81 | GtkBuilder *builder; | ||
82 | |||
83 | builder = GTK_BUILDER (data); | ||
84 | 139 | ||
85 | tv = GTK_TREE_VIEW (gtk_builder_get_object | ||
86 | (builder, | ||
87 | "GNUNET_GTK_master_publish_dialog_pseudonym_tree_view")); | ||
88 | sel = gtk_tree_view_get_selection (tv); | ||
89 | ns_ok = GNUNET_YES; | 140 | ns_ok = GNUNET_YES; |
90 | if (TRUE == gtk_tree_selection_get_selected (sel, &ptm, &iter)) | 141 | if (TRUE == gtk_tree_selection_get_selected (ctx->pseudonym_selection, NULL, &iter)) |
91 | { | 142 | { |
92 | gtk_tree_model_get (ptm, &iter, 2, &namespace_id, -1); | 143 | gtk_tree_model_get (ctx->pseudonym_treemodel, &iter, 2, &namespace_id, -1); |
93 | if (namespace_id == NULL) | 144 | if (namespace_id == NULL) |
94 | ns_ok = GNUNET_NO; | 145 | ns_ok = GNUNET_NO; |
95 | else | 146 | else |
96 | g_free (namespace_id); | 147 | g_free (namespace_id); |
97 | } | 148 | } |
98 | up_button = | 149 | if ((gtk_tree_model_get_iter_first (ctx->file_info_treemodel, &iter)) && (ns_ok == GNUNET_YES)) |
99 | GTK_WIDGET (gtk_builder_get_object | 150 | gtk_widget_set_sensitive (ctx->execute_button, TRUE); |
100 | (builder, "GNUNET_GTK_master_publish_dialog_up_button")); | ||
101 | down_button = | ||
102 | GTK_WIDGET (gtk_builder_get_object | ||
103 | (builder, "GNUNET_GTK_master_publish_dialog_down_button")); | ||
104 | left_button = | ||
105 | GTK_WIDGET (gtk_builder_get_object | ||
106 | (builder, "GNUNET_GTK_master_publish_dialog_left_button")); | ||
107 | right_button = | ||
108 | GTK_WIDGET (gtk_builder_get_object | ||
109 | (builder, "GNUNET_GTK_master_publish_dialog_right_button")); | ||
110 | delete_button = | ||
111 | GTK_WIDGET (gtk_builder_get_object | ||
112 | (builder, "GNUNET_GTK_master_publish_dialog_delete_button")); | ||
113 | edit_button = | ||
114 | GTK_WIDGET (gtk_builder_get_object | ||
115 | (builder, "GNUNET_GTK_master_publish_dialog_edit_button")); | ||
116 | execute_button = | ||
117 | GTK_WIDGET (gtk_builder_get_object | ||
118 | (builder, "GNUNET_GTK_master_publish_dialog_execute_button")); | ||
119 | tv = GTK_TREE_VIEW (gtk_builder_get_object | ||
120 | (builder, | ||
121 | "GNUNET_GTK_master_publish_dialog_file_information_tree_view")); | ||
122 | sel = gtk_tree_view_get_selection (tv); | ||
123 | tm = gtk_tree_view_get_model (tv); | ||
124 | if ((gtk_tree_model_get_iter_first (tm, &iter)) && (ns_ok == GNUNET_YES)) | ||
125 | gtk_widget_set_sensitive (execute_button, TRUE); | ||
126 | else | 151 | else |
127 | gtk_widget_set_sensitive (execute_button, FALSE); | 152 | gtk_widget_set_sensitive (ctx->execute_button, FALSE); |
128 | if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter)) | 153 | if (TRUE != gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &iter)) |
129 | { | 154 | { |
130 | gtk_widget_set_sensitive (up_button, FALSE); | 155 | gtk_widget_set_sensitive (ctx->up_button, FALSE); |
131 | gtk_widget_set_sensitive (down_button, FALSE); | 156 | gtk_widget_set_sensitive (ctx->down_button, FALSE); |
132 | gtk_widget_set_sensitive (left_button, FALSE); | 157 | gtk_widget_set_sensitive (ctx->left_button, FALSE); |
133 | gtk_widget_set_sensitive (right_button, FALSE); | 158 | gtk_widget_set_sensitive (ctx->right_button, FALSE); |
134 | gtk_widget_set_sensitive (delete_button, FALSE); | 159 | gtk_widget_set_sensitive (ctx->delete_button, FALSE); |
135 | gtk_widget_set_sensitive (edit_button, FALSE); | 160 | gtk_widget_set_sensitive (ctx->edit_button, FALSE); |
136 | return; | 161 | return; |
137 | } | 162 | } |
138 | gtk_widget_set_sensitive (delete_button, TRUE); | 163 | gtk_widget_set_sensitive (ctx->delete_button, TRUE); |
139 | gtk_widget_set_sensitive (edit_button, TRUE); | 164 | gtk_widget_set_sensitive (ctx->edit_button, TRUE); |
140 | 165 | ||
141 | /* now figure out which move operations are currently legal */ | 166 | /* now figure out which move operations are currently legal */ |
142 | GNUNET_assert (TRUE == gtk_tree_selection_get_selected (sel, NULL, &iter)); | 167 | GNUNET_assert (TRUE == gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &iter)); |
143 | if (TRUE == gtk_tree_model_iter_next (tm, &iter)) | 168 | if (TRUE == gtk_tree_model_iter_next (ctx->file_info_treemodel, &iter)) |
144 | { | 169 | { |
145 | gtk_widget_set_sensitive (down_button, TRUE); | 170 | gtk_widget_set_sensitive (ctx->down_button, TRUE); |
146 | } | 171 | } |
147 | else | 172 | else |
148 | { | 173 | { |
149 | gtk_widget_set_sensitive (down_button, FALSE); | 174 | gtk_widget_set_sensitive (ctx->down_button, FALSE); |
150 | } | 175 | } |
151 | GNUNET_assert (TRUE == gtk_tree_selection_get_selected (sel, NULL, &iter)); | 176 | GNUNET_assert (TRUE == gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &iter)); |
152 | if (TRUE == gtk_tree_model_iter_parent (tm, &parent, &iter)) | 177 | if (TRUE == gtk_tree_model_iter_parent (ctx->file_info_treemodel, &parent, &iter)) |
153 | { | 178 | { |
154 | gtk_widget_set_sensitive (left_button, TRUE); | 179 | gtk_widget_set_sensitive (ctx->left_button, TRUE); |
155 | GNUNET_assert (TRUE == gtk_tree_model_iter_children (tm, &pred, &parent)); | 180 | GNUNET_assert (TRUE == gtk_tree_model_iter_children (ctx->file_info_treemodel, &pred, &parent)); |
156 | } | 181 | } |
157 | else | 182 | else |
158 | { | 183 | { |
159 | gtk_widget_set_sensitive (left_button, FALSE); | 184 | gtk_widget_set_sensitive (ctx->left_button, FALSE); |
160 | GNUNET_assert (TRUE == gtk_tree_model_get_iter_first (tm, &pred)); | 185 | GNUNET_assert (TRUE == gtk_tree_model_get_iter_first (ctx->file_info_treemodel, &pred)); |
161 | } | 186 | } |
162 | /* iterate over 'next' of pred to find out if our | 187 | /* iterate over 'next' of pred to find out if our |
163 | * predecessor is a directory! */ | 188 | * predecessor is a directory! */ |
164 | is_dir = GNUNET_SYSERR; | 189 | is_dir = GNUNET_SYSERR; |
165 | while (GNUNET_YES != gtk_tree_iter_equals (tm, &pred, &iter)) | 190 | while (GNUNET_YES != gtk_tree_iter_equals (ctx->file_info_treemodel, &pred, &iter)) |
166 | { | 191 | { |
167 | gtk_tree_model_get (tm, &pred, 5, &fip, -1); | 192 | gtk_tree_model_get (ctx->file_info_treemodel, &pred, 5, &fip, -1); |
168 | is_dir = GNUNET_FS_file_information_is_directory (fip); | 193 | is_dir = GNUNET_FS_file_information_is_directory (fip); |
169 | GNUNET_assert (TRUE == gtk_tree_model_iter_next (tm, &pred)); | 194 | GNUNET_assert (TRUE == gtk_tree_model_iter_next (ctx->file_info_treemodel, &pred)); |
170 | } | 195 | } |
171 | if (GNUNET_YES == is_dir) | 196 | if (GNUNET_YES == is_dir) |
172 | { | 197 | { |
173 | gtk_widget_set_sensitive (right_button, TRUE); | 198 | gtk_widget_set_sensitive (ctx->right_button, TRUE); |
174 | } | 199 | } |
175 | else | 200 | else |
176 | { | 201 | { |
177 | gtk_widget_set_sensitive (right_button, FALSE); | 202 | gtk_widget_set_sensitive (ctx->right_button, FALSE); |
178 | } | 203 | } |
179 | if (GNUNET_SYSERR != is_dir) | 204 | if (GNUNET_SYSERR != is_dir) |
180 | { | 205 | { |
181 | gtk_widget_set_sensitive (up_button, TRUE); | 206 | gtk_widget_set_sensitive (ctx->up_button, TRUE); |
182 | } | 207 | } |
183 | else | 208 | else |
184 | { | 209 | { |
185 | gtk_widget_set_sensitive (up_button, FALSE); | 210 | gtk_widget_set_sensitive (ctx->up_button, FALSE); |
186 | } | 211 | } |
187 | } | 212 | } |
188 | 213 | ||
@@ -196,7 +221,7 @@ update_selectivity (gpointer data) | |||
196 | * @param iter parent entry, or NULL for top-level addition | 221 | * @param iter parent entry, or NULL for top-level addition |
197 | */ | 222 | */ |
198 | static void | 223 | static void |
199 | add_file_at_iter (gpointer data, const char *filename, | 224 | add_file_at_iter (struct MainPublishingDialogContext *ctx, const char *filename, |
200 | const struct GNUNET_FS_BlockOptions *bo, int do_index, | 225 | const struct GNUNET_FS_BlockOptions *bo, int do_index, |
201 | GtkTreeIter * iter) | 226 | GtkTreeIter * iter) |
202 | { | 227 | { |
@@ -207,14 +232,10 @@ add_file_at_iter (gpointer data, const char *filename, | |||
207 | const char *short_fn; | 232 | const char *short_fn; |
208 | struct GNUNET_CONTAINER_MetaData *meta; | 233 | struct GNUNET_CONTAINER_MetaData *meta; |
209 | struct GNUNET_FS_Uri *ksk_uri; | 234 | struct GNUNET_FS_Uri *ksk_uri; |
210 | GtkTreeStore *ts; | ||
211 | GtkTreeIter pos; | 235 | GtkTreeIter pos; |
212 | char *file_size_fancy; | 236 | char *file_size_fancy; |
213 | const char *ss; | 237 | const char *ss; |
214 | struct stat sbuf; | 238 | struct stat sbuf; |
215 | GtkBuilder *builder; | ||
216 | |||
217 | builder = GTK_BUILDER (data); | ||
218 | 239 | ||
219 | if (0 != STAT (filename, &sbuf)) | 240 | if (0 != STAT (filename, &sbuf)) |
220 | return; | 241 | return; |
@@ -230,9 +251,6 @@ add_file_at_iter (gpointer data, const char *filename, | |||
230 | return; | 251 | return; |
231 | } | 252 | } |
232 | } | 253 | } |
233 | ts = GTK_TREE_STORE (gtk_builder_get_object | ||
234 | (builder, | ||
235 | "GNUNET_GTK_file_sharing_publishing_tree_store")); | ||
236 | 254 | ||
237 | meta = GNUNET_CONTAINER_meta_data_create (); | 255 | meta = GNUNET_CONTAINER_meta_data_create (); |
238 | GNUNET_FS_meta_data_extract_from_file (meta, filename, | 256 | GNUNET_FS_meta_data_extract_from_file (meta, filename, |
@@ -247,9 +265,9 @@ add_file_at_iter (gpointer data, const char *filename, | |||
247 | EXTRACTOR_METAFORMAT_UTF8, "text/plain", | 265 | EXTRACTOR_METAFORMAT_UTF8, "text/plain", |
248 | short_fn, strlen (short_fn) + 1); | 266 | short_fn, strlen (short_fn) + 1); |
249 | ksk_uri = GNUNET_FS_uri_ksk_create_from_meta_data (meta); | 267 | ksk_uri = GNUNET_FS_uri_ksk_create_from_meta_data (meta); |
250 | gtk_tree_store_insert_before (ts, &pos, iter, NULL); | 268 | gtk_tree_store_insert_before (GTK_TREE_STORE (ctx->file_info_treemodel), &pos, iter, NULL); |
251 | path = gtk_tree_model_get_path (GTK_TREE_MODEL (ts), &pos); | 269 | path = gtk_tree_model_get_path (ctx->file_info_treemodel, &pos); |
252 | row_reference = gtk_tree_row_reference_new (GTK_TREE_MODEL (ts), path); | 270 | row_reference = gtk_tree_row_reference_new (ctx->file_info_treemodel, path); |
253 | gtk_tree_path_free (path); | 271 | gtk_tree_path_free (path); |
254 | fi = GNUNET_FS_file_information_create_from_file (GNUNET_FS_GTK_get_fs_handle | 272 | fi = GNUNET_FS_file_information_create_from_file (GNUNET_FS_GTK_get_fs_handle |
255 | (), row_reference, filename, | 273 | (), row_reference, filename, |
@@ -261,14 +279,14 @@ add_file_at_iter (gpointer data, const char *filename, | |||
261 | file_size_fancy = GNUNET_strdup (MARKER_DIR_FILE_SIZE); | 279 | file_size_fancy = GNUNET_strdup (MARKER_DIR_FILE_SIZE); |
262 | else | 280 | else |
263 | file_size_fancy = GNUNET_STRINGS_byte_size_fancy (file_size); | 281 | file_size_fancy = GNUNET_STRINGS_byte_size_fancy (file_size); |
264 | gtk_tree_store_set (ts, &pos, 0, file_size_fancy, 1, (gboolean) do_index, 2, | 282 | gtk_tree_store_set (GTK_TREE_STORE (ctx->file_info_treemodel), &pos, 0, file_size_fancy, 1, (gboolean) do_index, 2, |
265 | short_fn, 3, (guint) bo->anonymity_level, 4, | 283 | short_fn, 3, (guint) bo->anonymity_level, 4, |
266 | (guint) bo->content_priority, 5, fi, | 284 | (guint) bo->content_priority, 5, fi, |
267 | 6, (guint64) bo->expiration_time.abs_value, | 285 | 6, (guint64) bo->expiration_time.abs_value, |
268 | 7, (guint) bo->replication_level, | 286 | 7, (guint) bo->replication_level, |
269 | -1); | 287 | -1); |
270 | GNUNET_free (file_size_fancy); | 288 | GNUNET_free (file_size_fancy); |
271 | update_selectivity (data); | 289 | update_selectivity (ctx); |
272 | } | 290 | } |
273 | 291 | ||
274 | 292 | ||
@@ -281,7 +299,7 @@ add_file_at_iter (gpointer data, const char *filename, | |||
281 | * @param pos iterator to set to the location of the new element | 299 | * @param pos iterator to set to the location of the new element |
282 | */ | 300 | */ |
283 | static void | 301 | static void |
284 | create_dir_at_iter (gpointer data, const char *name, | 302 | create_dir_at_iter (struct MainPublishingDialogContext *ctx, const char *name, |
285 | const struct GNUNET_FS_BlockOptions *bo, GtkTreeIter * iter, | 303 | const struct GNUNET_FS_BlockOptions *bo, GtkTreeIter * iter, |
286 | GtkTreeIter * pos) | 304 | GtkTreeIter * pos) |
287 | { | 305 | { |
@@ -289,35 +307,27 @@ create_dir_at_iter (gpointer data, const char *name, | |||
289 | GtkTreeRowReference *row_reference; | 307 | GtkTreeRowReference *row_reference; |
290 | GtkTreePath *path; | 308 | GtkTreePath *path; |
291 | struct GNUNET_CONTAINER_MetaData *meta; | 309 | struct GNUNET_CONTAINER_MetaData *meta; |
292 | GtkTreeStore *ts; | ||
293 | GtkBuilder *builder; | ||
294 | |||
295 | 310 | ||
296 | builder = GTK_BUILDER (data); | ||
297 | |||
298 | ts = GTK_TREE_STORE (gtk_builder_get_object | ||
299 | (builder, | ||
300 | "GNUNET_GTK_file_sharing_publishing_tree_store")); | ||
301 | meta = GNUNET_CONTAINER_meta_data_create (); | 311 | meta = GNUNET_CONTAINER_meta_data_create (); |
302 | GNUNET_FS_meta_data_make_directory (meta); | 312 | GNUNET_FS_meta_data_make_directory (meta); |
303 | GNUNET_CONTAINER_meta_data_insert (meta, "<gnunet-gtk>", | 313 | GNUNET_CONTAINER_meta_data_insert (meta, "<gnunet-gtk>", |
304 | EXTRACTOR_METATYPE_FILENAME, | 314 | EXTRACTOR_METATYPE_FILENAME, |
305 | EXTRACTOR_METAFORMAT_UTF8, "text/plain", | 315 | EXTRACTOR_METAFORMAT_UTF8, "text/plain", |
306 | name, strlen (name) + 1); | 316 | name, strlen (name) + 1); |
307 | gtk_tree_store_insert_before (ts, pos, iter, NULL); | 317 | gtk_tree_store_insert_before (GTK_TREE_STORE (ctx->file_info_treemodel), pos, iter, NULL); |
308 | path = gtk_tree_model_get_path (GTK_TREE_MODEL (ts), pos); | 318 | path = gtk_tree_model_get_path (ctx->file_info_treemodel, pos); |
309 | row_reference = gtk_tree_row_reference_new (GTK_TREE_MODEL (ts), path); | 319 | row_reference = gtk_tree_row_reference_new (ctx->file_info_treemodel, path); |
310 | gtk_tree_path_free (path); | 320 | gtk_tree_path_free (path); |
311 | fi = GNUNET_FS_file_information_create_empty_directory | 321 | fi = GNUNET_FS_file_information_create_empty_directory |
312 | (GNUNET_FS_GTK_get_fs_handle (), row_reference, NULL, meta, bo); | 322 | (GNUNET_FS_GTK_get_fs_handle (), row_reference, NULL, meta, bo); |
313 | GNUNET_CONTAINER_meta_data_destroy (meta); | 323 | GNUNET_CONTAINER_meta_data_destroy (meta); |
314 | gtk_tree_store_set (ts, pos, 0, MARKER_DIR_FILE_SIZE, 1, (gboolean) GNUNET_NO, | 324 | gtk_tree_store_set (GTK_TREE_STORE (ctx->file_info_treemodel), pos, 0, MARKER_DIR_FILE_SIZE, 1, (gboolean) GNUNET_NO, |
315 | 2, name, 3, (guint) bo->anonymity_level, 4, | 325 | 2, name, 3, (guint) bo->anonymity_level, 4, |
316 | (guint) bo->content_priority, 5, fi, | 326 | (guint) bo->content_priority, 5, fi, |
317 | 6, (guint64) bo->expiration_time.abs_value, | 327 | 6, (guint64) bo->expiration_time.abs_value, |
318 | 7, (guint) bo->replication_level, | 328 | 7, (guint) bo->replication_level, |
319 | -1); | 329 | -1); |
320 | update_selectivity (data); | 330 | update_selectivity (ctx); |
321 | } | 331 | } |
322 | 332 | ||
323 | 333 | ||
@@ -379,9 +389,9 @@ struct AddDirContext | |||
379 | GtkTreeIter *parent; | 389 | GtkTreeIter *parent; |
380 | 390 | ||
381 | /** | 391 | /** |
382 | * Tree store to manipulate. | 392 | * Master publication dialog context (used to access treestore) |
383 | */ | 393 | */ |
384 | GtkTreeStore *ts; | 394 | struct MainPublishingDialogContext *ctx; |
385 | 395 | ||
386 | /** | 396 | /** |
387 | * Map from the hash over the keyword to an 'struct KeywordCounter' | 397 | * Map from the hash over the keyword to an 'struct KeywordCounter' |
@@ -486,7 +496,7 @@ extract_file (struct AddDirContext *adc, const char *filename) | |||
486 | EXTRACTOR_METAFORMAT_UTF8, "text/plain", | 496 | EXTRACTOR_METAFORMAT_UTF8, "text/plain", |
487 | short_fn, strlen (short_fn) + 1); | 497 | short_fn, strlen (short_fn) + 1); |
488 | 498 | ||
489 | gtk_tree_store_insert_before (adc->ts, &pd->iter, adc->parent, NULL); | 499 | gtk_tree_store_insert_before (GTK_TREE_STORE (adc->ctx->file_info_treemodel), &pd->iter, adc->parent, NULL); |
490 | 500 | ||
491 | GNUNET_CRYPTO_hash (filename, strlen (filename), &hc); | 501 | GNUNET_CRYPTO_hash (filename, strlen (filename), &hc); |
492 | GNUNET_CONTAINER_multihashmap_put (adc->metamap, &hc, pd, | 502 | GNUNET_CONTAINER_multihashmap_put (adc->metamap, &hc, pd, |
@@ -616,7 +626,7 @@ publish_entry (void *cls, const char *filename) | |||
616 | 626 | ||
617 | GNUNET_CRYPTO_hash (filename, strlen (filename), &hc); | 627 | GNUNET_CRYPTO_hash (filename, strlen (filename), &hc); |
618 | pd = GNUNET_CONTAINER_multihashmap_get (adc->metamap, &hc); | 628 | pd = GNUNET_CONTAINER_multihashmap_get (adc->metamap, &hc); |
619 | add_entry_to_ts (adc->ts, &pd->iter, filename, &adc->bo, adc->do_index, | 629 | add_entry_to_ts (GTK_TREE_STORE (adc->ctx->file_info_treemodel), &pd->iter, filename, &adc->bo, adc->do_index, |
620 | pd->ksk_uri, adc->exclude_ksk, pd->meta); | 630 | pd->ksk_uri, adc->exclude_ksk, pd->meta); |
621 | GNUNET_CONTAINER_multihashmap_remove (adc->metamap, &hc, pd); | 631 | GNUNET_CONTAINER_multihashmap_remove (adc->metamap, &hc, pd); |
622 | GNUNET_free (pd); | 632 | GNUNET_free (pd); |
@@ -726,7 +736,7 @@ scan_directory (void *cls, const char *filename) | |||
726 | adc->keywordcounter = GNUNET_CONTAINER_multihashmap_create (1024); | 736 | adc->keywordcounter = GNUNET_CONTAINER_multihashmap_create (1024); |
727 | adc->dir_entry_count = 0; | 737 | adc->dir_entry_count = 0; |
728 | pd = GNUNET_malloc (sizeof (struct PublishData)); | 738 | pd = GNUNET_malloc (sizeof (struct PublishData)); |
729 | gtk_tree_store_insert_before (adc->ts, &pd->iter, parent, NULL); | 739 | gtk_tree_store_insert_before (GTK_TREE_STORE (adc->ctx->file_info_treemodel), &pd->iter, parent, NULL); |
730 | adc->parent = &pd->iter; | 740 | adc->parent = &pd->iter; |
731 | GNUNET_DISK_directory_scan (filename, &scan_directory, adc); | 741 | GNUNET_DISK_directory_scan (filename, &scan_directory, adc); |
732 | pd->ksk_uri = process_keywords (adc); | 742 | pd->ksk_uri = process_keywords (adc); |
@@ -771,7 +781,7 @@ scan_directory (void *cls, const char *filename) | |||
771 | else | 781 | else |
772 | { | 782 | { |
773 | GNUNET_assert (kcm == NULL); | 783 | GNUNET_assert (kcm == NULL); |
774 | add_entry_to_ts (adc->ts, &pd->iter, filename, &adc->bo, adc->do_index, | 784 | add_entry_to_ts (GTK_TREE_STORE (adc->ctx->file_info_treemodel), &pd->iter, filename, &adc->bo, adc->do_index, |
775 | pd->ksk_uri, NULL, pd->meta); | 785 | pd->ksk_uri, NULL, pd->meta); |
776 | } | 786 | } |
777 | GNUNET_FS_uri_destroy (adc->exclude_ksk); | 787 | GNUNET_FS_uri_destroy (adc->exclude_ksk); |
@@ -785,6 +795,12 @@ scan_directory (void *cls, const char *filename) | |||
785 | } | 795 | } |
786 | 796 | ||
787 | 797 | ||
798 | static void | ||
799 | add_dir_finish (struct AddDirContext *scan_ctx) | ||
800 | { | ||
801 | GNUNET_free (scan_ctx); | ||
802 | } | ||
803 | |||
788 | /** | 804 | /** |
789 | * Add a directory to the tree model. | 805 | * Add a directory to the tree model. |
790 | * | 806 | * |
@@ -793,14 +809,11 @@ scan_directory (void *cls, const char *filename) | |||
793 | * @param do_index should we index? | 809 | * @param do_index should we index? |
794 | */ | 810 | */ |
795 | static void | 811 | static void |
796 | add_dir (gpointer data, const char *filename, | 812 | add_dir (struct MainPublishingDialogContext *ctx, const char *filename, |
797 | const struct GNUNET_FS_BlockOptions *bo, int do_index) | 813 | const struct GNUNET_FS_BlockOptions *bo, int do_index) |
798 | { | 814 | { |
799 | struct stat sbuf; | 815 | struct stat sbuf; |
800 | struct AddDirContext scan_ctx; | 816 | struct AddDirContext *scan_ctx; |
801 | GtkBuilder *builder; | ||
802 | |||
803 | builder = GTK_BUILDER (data); | ||
804 | 817 | ||
805 | if (0 != STAT (filename, &sbuf)) | 818 | if (0 != STAT (filename, &sbuf)) |
806 | return; | 819 | return; |
@@ -809,14 +822,12 @@ add_dir (gpointer data, const char *filename, | |||
809 | GNUNET_break (0); | 822 | GNUNET_break (0); |
810 | return; | 823 | return; |
811 | } | 824 | } |
812 | memset (&scan_ctx, 0, sizeof (scan_ctx)); | 825 | scan_ctx = GNUNET_malloc (sizeof (struct AddDirContext)); |
813 | scan_ctx.bo = *bo; | 826 | scan_ctx->bo = *bo; |
814 | scan_ctx.do_index = do_index; | 827 | scan_ctx->do_index = do_index; |
815 | scan_ctx.ts = | 828 | scan_ctx->ctx = ctx; |
816 | GTK_TREE_STORE (gtk_builder_get_object | 829 | scan_directory (scan_ctx, filename); |
817 | (builder, | 830 | add_dir_finish (scan_ctx); |
818 | "GNUNET_GTK_file_sharing_publishing_tree_store")); | ||
819 | scan_directory (&scan_ctx, filename); | ||
820 | } | 831 | } |
821 | 832 | ||
822 | 833 | ||
@@ -824,9 +835,9 @@ add_dir (gpointer data, const char *filename, | |||
824 | 835 | ||
825 | 836 | ||
826 | static void | 837 | static void |
827 | selection_changed_cb (GtkTreeSelection * ts, gpointer user_data) | 838 | selection_changed_cb (GtkTreeSelection * ts, struct MainPublishingDialogContext *ctx) |
828 | { | 839 | { |
829 | update_selectivity (user_data); | 840 | update_selectivity (ctx); |
830 | } | 841 | } |
831 | 842 | ||
832 | 843 | ||
@@ -846,11 +857,10 @@ remove_old_entry (GtkTreeStore * ts, GtkTreeIter * root) | |||
846 | * Move an entry in the tree. | 857 | * Move an entry in the tree. |
847 | */ | 858 | */ |
848 | static void | 859 | static void |
849 | move_entry (gpointer data, GtkTreeModel * tm, GtkTreeIter * old, | 860 | move_entry (struct MainPublishingDialogContext *ctx, GtkTreeModel * tm, GtkTreeIter * old, |
850 | GtkTreeIter * newpos, int dsel) | 861 | GtkTreeIter * newpos, int dsel) |
851 | { | 862 | { |
852 | struct GNUNET_FS_FileInformation *fip; | 863 | struct GNUNET_FS_FileInformation *fip; |
853 | GtkTreeView *tv; | ||
854 | gint do_index; | 864 | gint do_index; |
855 | gchar *short_fn; | 865 | gchar *short_fn; |
856 | guint anonymity_level; | 866 | guint anonymity_level; |
@@ -859,14 +869,11 @@ move_entry (gpointer data, GtkTreeModel * tm, GtkTreeIter * old, | |||
859 | guint64 expiration_time_abs; | 869 | guint64 expiration_time_abs; |
860 | char *fsf; | 870 | char *fsf; |
861 | GtkTreePath *path; | 871 | GtkTreePath *path; |
862 | GtkTreeSelection *sel; | ||
863 | GtkTreeIter child; | 872 | GtkTreeIter child; |
864 | GtkTreeIter cnewpos; | 873 | GtkTreeIter cnewpos; |
865 | GtkTreeRowReference *rr; | 874 | GtkTreeRowReference *rr; |
866 | GtkTreeRowReference *rr2; | 875 | GtkTreeRowReference *rr2; |
867 | GtkBuilder *builder; | ||
868 | 876 | ||
869 | builder = GTK_BUILDER (data); | ||
870 | gtk_tree_model_get (tm, old, 0, &fsf, 1, &do_index, 2, &short_fn, 3, | 877 | gtk_tree_model_get (tm, old, 0, &fsf, 1, &do_index, 2, &short_fn, 3, |
871 | &anonymity_level, 4, &priority, 5, &fip, | 878 | &anonymity_level, 4, &priority, 5, &fip, |
872 | 6, &expiration_time_abs, 7, &replication_level, -1); | 879 | 6, &expiration_time_abs, 7, &replication_level, -1); |
@@ -875,14 +882,8 @@ move_entry (gpointer data, GtkTreeModel * tm, GtkTreeIter * old, | |||
875 | 5, fip, | 882 | 5, fip, |
876 | 6, expiration_time_abs, | 883 | 6, expiration_time_abs, |
877 | 7, replication_level, -1); | 884 | 7, replication_level, -1); |
878 | sel = NULL; | ||
879 | tv = NULL; | ||
880 | if (dsel == GNUNET_YES) | 885 | if (dsel == GNUNET_YES) |
881 | { | 886 | { |
882 | tv = GTK_TREE_VIEW (gtk_builder_get_object | ||
883 | (builder, | ||
884 | "GNUNET_GTK_master_publish_dialog_file_information_tree_view")); | ||
885 | sel = gtk_tree_view_get_selection (tv); | ||
886 | path = gtk_tree_model_get_path (tm, newpos); | 887 | path = gtk_tree_model_get_path (tm, newpos); |
887 | rr = gtk_tree_row_reference_new (tm, path); | 888 | rr = gtk_tree_row_reference_new (tm, path); |
888 | gtk_tree_path_free (path); | 889 | gtk_tree_path_free (path); |
@@ -900,7 +901,7 @@ move_entry (gpointer data, GtkTreeModel * tm, GtkTreeIter * old, | |||
900 | gtk_tree_path_free (path); | 901 | gtk_tree_path_free (path); |
901 | gtk_tree_store_insert_before (GTK_TREE_STORE (tm), &cnewpos, newpos, | 902 | gtk_tree_store_insert_before (GTK_TREE_STORE (tm), &cnewpos, newpos, |
902 | NULL); | 903 | NULL); |
903 | move_entry (data, tm, &child, &cnewpos, GNUNET_NO); | 904 | move_entry (ctx, tm, &child, &cnewpos, GNUNET_NO); |
904 | path = gtk_tree_row_reference_get_path (rr2); | 905 | path = gtk_tree_row_reference_get_path (rr2); |
905 | gtk_tree_row_reference_free (rr2); | 906 | gtk_tree_row_reference_free (rr2); |
906 | GNUNET_assert (TRUE == gtk_tree_model_get_iter (tm, &child, path)); | 907 | GNUNET_assert (TRUE == gtk_tree_model_get_iter (tm, &child, path)); |
@@ -914,12 +915,12 @@ move_entry (gpointer data, GtkTreeModel * tm, GtkTreeIter * old, | |||
914 | { | 915 | { |
915 | path = gtk_tree_row_reference_get_path (rr); | 916 | path = gtk_tree_row_reference_get_path (rr); |
916 | gtk_tree_row_reference_free (rr); | 917 | gtk_tree_row_reference_free (rr); |
917 | gtk_tree_view_expand_to_path (tv, path); | 918 | gtk_tree_view_expand_to_path (ctx->file_info_treeview, path); |
918 | GNUNET_assert (TRUE == gtk_tree_model_get_iter (tm, newpos, path)); | 919 | GNUNET_assert (TRUE == gtk_tree_model_get_iter (tm, newpos, path)); |
919 | gtk_tree_path_free (path); | 920 | gtk_tree_path_free (path); |
920 | gtk_tree_selection_select_iter (sel, newpos); | 921 | gtk_tree_selection_select_iter (ctx->file_info_selection, newpos); |
921 | } | 922 | } |
922 | update_selectivity (data); | 923 | update_selectivity (ctx); |
923 | } | 924 | } |
924 | 925 | ||
925 | 926 | ||
@@ -929,24 +930,18 @@ move_entry (gpointer data, GtkTreeModel * tm, GtkTreeIter * old, | |||
929 | */ | 930 | */ |
930 | void GNUNET_GTK_master_publish_dialog_pseudonym_updates_renderer_edited_cb | 931 | void GNUNET_GTK_master_publish_dialog_pseudonym_updates_renderer_edited_cb |
931 | (GtkCellRendererText * renderer, gchar * cpath, gchar * new_text, | 932 | (GtkCellRendererText * renderer, gchar * cpath, gchar * new_text, |
932 | gpointer user_data) | 933 | struct MainPublishingDialogContext *ctx) |
933 | { | 934 | { |
934 | GtkTreeIter iter; | 935 | GtkTreeIter iter; |
935 | GtkTreeStore *ts; | ||
936 | GtkBuilder *builder; | ||
937 | |||
938 | builder = GTK_BUILDER (user_data); | ||
939 | ts = GTK_TREE_STORE (gtk_builder_get_object | ||
940 | (builder, "GNUNET_GTK_pseudonym_tree_store")); | ||
941 | 936 | ||
942 | if (TRUE != | 937 | if (TRUE != |
943 | gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (ts), &iter, cpath)) | 938 | gtk_tree_model_get_iter_from_string (ctx->pseudonym_treemodel, &iter, cpath)) |
944 | { | 939 | { |
945 | GNUNET_break (0); | 940 | GNUNET_break (0); |
946 | return; | 941 | return; |
947 | } | 942 | } |
948 | gtk_tree_store_set (ts, &iter, 5, new_text, -1); | 943 | gtk_tree_store_set (GTK_TREE_STORE (ctx->pseudonym_treemodel), &iter, 5, new_text, -1); |
949 | update_selectivity (user_data); | 944 | update_selectivity (ctx); |
950 | } | 945 | } |
951 | 946 | ||
952 | 947 | ||
@@ -956,150 +951,115 @@ void GNUNET_GTK_master_publish_dialog_pseudonym_updates_renderer_edited_cb | |||
956 | */ | 951 | */ |
957 | void GNUNET_GTK_master_publish_dialog_pseudonym_identifier_renderer_edited_cb | 952 | void GNUNET_GTK_master_publish_dialog_pseudonym_identifier_renderer_edited_cb |
958 | (GtkCellRendererText * renderer, gchar * cpath, gchar * new_text, | 953 | (GtkCellRendererText * renderer, gchar * cpath, gchar * new_text, |
959 | gpointer user_data) | 954 | struct MainPublishingDialogContext *ctx) |
960 | { | 955 | { |
961 | GtkTreeIter iter; | 956 | GtkTreeIter iter; |
962 | GtkTreeStore *ts; | ||
963 | GtkBuilder *builder; | ||
964 | |||
965 | builder = GTK_BUILDER (user_data); | ||
966 | ts = GTK_TREE_STORE (gtk_builder_get_object | ||
967 | (builder, "GNUNET_GTK_pseudonym_tree_store")); | ||
968 | 957 | ||
969 | if (TRUE != | 958 | if (TRUE != |
970 | gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (ts), &iter, cpath)) | 959 | gtk_tree_model_get_iter_from_string (ctx->pseudonym_treemodel, &iter, cpath)) |
971 | { | 960 | { |
972 | GNUNET_break (0); | 961 | GNUNET_break (0); |
973 | return; | 962 | return; |
974 | } | 963 | } |
975 | gtk_tree_store_set (ts, &iter, 2, new_text, -1); | 964 | gtk_tree_store_set (GTK_TREE_STORE (ctx->pseudonym_treemodel), &iter, 2, new_text, -1); |
976 | update_selectivity (user_data); | 965 | update_selectivity (ctx); |
977 | } | 966 | } |
978 | 967 | ||
979 | 968 | ||
980 | void | 969 | void |
981 | GNUNET_GTK_master_publish_dialog_right_button_clicked_cb (GtkWidget * dummy, | 970 | GNUNET_GTK_master_publish_dialog_right_button_clicked_cb (GtkWidget * dummy, |
982 | gpointer data) | 971 | struct MainPublishingDialogContext *ctx) |
983 | { | 972 | { |
984 | GtkTreeView *tv; | ||
985 | GtkTreeModel *tm; | ||
986 | GtkTreeSelection *sel; | ||
987 | GtkTreeIter iter; | 973 | GtkTreeIter iter; |
988 | GtkTreeIter parent; | 974 | GtkTreeIter parent; |
989 | GtkTreeIter pred; | 975 | GtkTreeIter pred; |
990 | GtkTreeIter prev; | 976 | GtkTreeIter prev; |
991 | GtkTreeIter pos; | 977 | GtkTreeIter pos; |
992 | GtkBuilder *builder; | ||
993 | 978 | ||
994 | builder = GTK_BUILDER (data); | 979 | if (TRUE != gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &iter)) |
995 | |||
996 | tv = GTK_TREE_VIEW (gtk_builder_get_object | ||
997 | (builder, | ||
998 | "GNUNET_GTK_master_publish_dialog_file_information_tree_view")); | ||
999 | sel = gtk_tree_view_get_selection (tv); | ||
1000 | if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter)) | ||
1001 | { | 980 | { |
1002 | GNUNET_break (0); | 981 | GNUNET_break (0); |
1003 | return; | 982 | return; |
1004 | } | 983 | } |
1005 | if (TRUE == gtk_tree_model_iter_parent (tm, &parent, &iter)) | 984 | if (TRUE == gtk_tree_model_iter_parent (ctx->file_info_treemodel, &parent, &iter)) |
1006 | { | 985 | { |
1007 | GNUNET_assert (TRUE == gtk_tree_model_iter_children (tm, &pred, &parent)); | 986 | GNUNET_assert (TRUE == gtk_tree_model_iter_children (ctx->file_info_treemodel, &pred, &parent)); |
1008 | } | 987 | } |
1009 | else if (TRUE != gtk_tree_model_get_iter_first (tm, &pred)) | 988 | else if (TRUE != gtk_tree_model_get_iter_first (ctx->file_info_treemodel, &pred)) |
1010 | { | 989 | { |
1011 | GNUNET_break (0); | 990 | GNUNET_break (0); |
1012 | return; | 991 | return; |
1013 | } | 992 | } |
1014 | /* iterate over 'next' of pred to find out who our predecessor is! */ | 993 | /* iterate over 'next' of pred to find out who our predecessor is! */ |
1015 | memset (&prev, 0, sizeof (GtkTreeIter)); | 994 | memset (&prev, 0, sizeof (GtkTreeIter)); |
1016 | while (GNUNET_YES != gtk_tree_iter_equals (tm, &pred, &iter)) | 995 | while (GNUNET_YES != gtk_tree_iter_equals (ctx->file_info_treemodel, &pred, &iter)) |
1017 | { | 996 | { |
1018 | prev = pred; | 997 | prev = pred; |
1019 | GNUNET_assert (TRUE == gtk_tree_model_iter_next (tm, &pred)); | 998 | GNUNET_assert (TRUE == gtk_tree_model_iter_next (ctx->file_info_treemodel, &pred)); |
1020 | } | 999 | } |
1021 | gtk_tree_store_insert_before (GTK_TREE_STORE (tm), &pos, &prev, NULL); | 1000 | gtk_tree_store_insert_before (GTK_TREE_STORE (ctx->file_info_treemodel), &pos, &prev, NULL); |
1022 | if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter)) | 1001 | if (TRUE != gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &iter)) |
1023 | { | 1002 | { |
1024 | GNUNET_break (0); | 1003 | GNUNET_break (0); |
1025 | return; | 1004 | return; |
1026 | } | 1005 | } |
1027 | move_entry (data, tm, &iter, &pos, GNUNET_YES); | 1006 | move_entry (ctx, ctx->file_info_treemodel, &iter, &pos, GNUNET_YES); |
1028 | remove_old_entry (GTK_TREE_STORE (tm), &iter); | 1007 | remove_old_entry (GTK_TREE_STORE (ctx->file_info_treemodel), &iter); |
1029 | } | 1008 | } |
1030 | 1009 | ||
1031 | 1010 | ||
1032 | void | 1011 | void |
1033 | GNUNET_GTK_master_publish_dialog_left_button_clicked_cb (GtkWidget * dummy, | 1012 | GNUNET_GTK_master_publish_dialog_left_button_clicked_cb (GtkWidget * dummy, |
1034 | gpointer data) | 1013 | struct MainPublishingDialogContext *ctx) |
1035 | { | 1014 | { |
1036 | GtkTreeView *tv; | ||
1037 | GtkTreeModel *tm; | ||
1038 | GtkTreeSelection *sel; | ||
1039 | GtkTreeIter iter; | 1015 | GtkTreeIter iter; |
1040 | GtkTreeIter parent; | 1016 | GtkTreeIter parent; |
1041 | GtkTreeIter pos; | 1017 | GtkTreeIter pos; |
1042 | GtkBuilder *builder; | ||
1043 | 1018 | ||
1044 | builder = GTK_BUILDER (data); | ||
1045 | 1019 | ||
1046 | tv = GTK_TREE_VIEW (gtk_builder_get_object | 1020 | if (TRUE != gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &iter)) |
1047 | (builder, | ||
1048 | "GNUNET_GTK_master_publish_dialog_file_information_tree_view")); | ||
1049 | sel = gtk_tree_view_get_selection (tv); | ||
1050 | if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter)) | ||
1051 | { | 1021 | { |
1052 | GNUNET_break (0); | 1022 | GNUNET_break (0); |
1053 | return; | 1023 | return; |
1054 | } | 1024 | } |
1055 | if (TRUE != gtk_tree_model_iter_parent (tm, &parent, &iter)) | 1025 | if (TRUE != gtk_tree_model_iter_parent (ctx->file_info_treemodel, &parent, &iter)) |
1056 | { | 1026 | { |
1057 | GNUNET_break (0); | 1027 | GNUNET_break (0); |
1058 | return; | 1028 | return; |
1059 | } | 1029 | } |
1060 | gtk_tree_store_insert_after (GTK_TREE_STORE (tm), &pos, NULL, &parent); | 1030 | gtk_tree_store_insert_after (GTK_TREE_STORE (ctx->file_info_treemodel), &pos, NULL, &parent); |
1061 | if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter)) | 1031 | if (TRUE != gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &iter)) |
1062 | { | 1032 | { |
1063 | GNUNET_break (0); | 1033 | GNUNET_break (0); |
1064 | return; | 1034 | return; |
1065 | } | 1035 | } |
1066 | move_entry (data, tm, &iter, &pos, GNUNET_YES); | 1036 | move_entry (ctx, ctx->file_info_treemodel, &iter, &pos, GNUNET_YES); |
1067 | remove_old_entry (GTK_TREE_STORE (tm), &iter); | 1037 | remove_old_entry (GTK_TREE_STORE (ctx->file_info_treemodel), &iter); |
1068 | } | 1038 | } |
1069 | 1039 | ||
1070 | 1040 | ||
1071 | void | 1041 | void |
1072 | GNUNET_GTK_master_publish_dialog_up_button_clicked_cb (GtkWidget * dummy, | 1042 | GNUNET_GTK_master_publish_dialog_up_button_clicked_cb (GtkWidget * dummy, |
1073 | gpointer data) | 1043 | struct MainPublishingDialogContext *ctx) |
1074 | { | 1044 | { |
1075 | GtkTreeView *tv; | ||
1076 | GtkTreeModel *tm; | ||
1077 | GtkTreeSelection *sel; | ||
1078 | GtkTreeIter iter; | 1045 | GtkTreeIter iter; |
1079 | GtkTreeIter parent; | 1046 | GtkTreeIter parent; |
1080 | GtkTreeIter pred; | 1047 | GtkTreeIter pred; |
1081 | GtkTreeIter prev; | 1048 | GtkTreeIter prev; |
1082 | GtkTreeIter *pprev; | 1049 | GtkTreeIter *pprev; |
1083 | GtkTreeIter pos; | 1050 | GtkTreeIter pos; |
1084 | GtkBuilder *builder; | ||
1085 | |||
1086 | builder = GTK_BUILDER (data); | ||
1087 | 1051 | ||
1088 | tv = GTK_TREE_VIEW (gtk_builder_get_object | 1052 | if (TRUE != gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &iter)) |
1089 | (builder, | ||
1090 | "GNUNET_GTK_master_publish_dialog_file_information_tree_view")); | ||
1091 | sel = gtk_tree_view_get_selection (tv); | ||
1092 | if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter)) | ||
1093 | { | 1053 | { |
1094 | GNUNET_break (0); | 1054 | GNUNET_break (0); |
1095 | return; | 1055 | return; |
1096 | } | 1056 | } |
1097 | if (TRUE == gtk_tree_model_iter_parent (tm, &parent, &iter)) | 1057 | if (TRUE == gtk_tree_model_iter_parent (ctx->file_info_treemodel, &parent, &iter)) |
1098 | { | 1058 | { |
1099 | GNUNET_assert (TRUE == gtk_tree_model_iter_children (tm, &pred, &parent)); | 1059 | GNUNET_assert (TRUE == gtk_tree_model_iter_children (ctx->file_info_treemodel, &pred, &parent)); |
1100 | pprev = &parent; | 1060 | pprev = &parent; |
1101 | } | 1061 | } |
1102 | else if (TRUE == gtk_tree_model_get_iter_first (tm, &pred)) | 1062 | else if (TRUE == gtk_tree_model_get_iter_first (ctx->file_info_treemodel, &pred)) |
1103 | { | 1063 | { |
1104 | pprev = NULL; | 1064 | pprev = NULL; |
1105 | } | 1065 | } |
@@ -1109,80 +1069,61 @@ GNUNET_GTK_master_publish_dialog_up_button_clicked_cb (GtkWidget * dummy, | |||
1109 | return; | 1069 | return; |
1110 | } | 1070 | } |
1111 | /* iterate over 'next' of pred to find out who our predecessor is! */ | 1071 | /* iterate over 'next' of pred to find out who our predecessor is! */ |
1112 | while (GNUNET_YES != gtk_tree_iter_equals (tm, &pred, &iter)) | 1072 | while (GNUNET_YES != gtk_tree_iter_equals (ctx->file_info_treemodel, &pred, &iter)) |
1113 | { | 1073 | { |
1114 | prev = pred; | 1074 | prev = pred; |
1115 | pprev = &prev; | 1075 | pprev = &prev; |
1116 | GNUNET_assert (TRUE == gtk_tree_model_iter_next (tm, &pred)); | 1076 | GNUNET_assert (TRUE == gtk_tree_model_iter_next (ctx->file_info_treemodel, &pred)); |
1117 | } | 1077 | } |
1118 | gtk_tree_store_insert_before (GTK_TREE_STORE (tm), &pos, NULL, pprev); | 1078 | gtk_tree_store_insert_before (GTK_TREE_STORE (ctx->file_info_treemodel), &pos, NULL, pprev); |
1119 | if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter)) | 1079 | if (TRUE != gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &iter)) |
1120 | { | 1080 | { |
1121 | GNUNET_break (0); | 1081 | GNUNET_break (0); |
1122 | return; | 1082 | return; |
1123 | } | 1083 | } |
1124 | move_entry (data, tm, &iter, &pos, GNUNET_YES); | 1084 | move_entry (ctx, ctx->file_info_treemodel, &iter, &pos, GNUNET_YES); |
1125 | remove_old_entry (GTK_TREE_STORE (tm), &iter); | 1085 | remove_old_entry (GTK_TREE_STORE (ctx->file_info_treemodel), &iter); |
1126 | } | 1086 | } |
1127 | 1087 | ||
1128 | 1088 | ||
1129 | void | 1089 | void |
1130 | GNUNET_GTK_master_publish_dialog_down_button_clicked_cb (GtkWidget * dummy, | 1090 | GNUNET_GTK_master_publish_dialog_down_button_clicked_cb (GtkWidget * dummy, |
1131 | gpointer data) | 1091 | struct MainPublishingDialogContext *ctx) |
1132 | { | 1092 | { |
1133 | GtkTreeView *tv; | ||
1134 | GtkTreeModel *tm; | ||
1135 | GtkTreeSelection *sel; | ||
1136 | GtkTreeIter iter; | 1093 | GtkTreeIter iter; |
1137 | GtkTreeIter next; | 1094 | GtkTreeIter next; |
1138 | GtkTreeIter pos; | 1095 | GtkTreeIter pos; |
1139 | GtkBuilder *builder; | ||
1140 | |||
1141 | builder = GTK_BUILDER (data); | ||
1142 | 1096 | ||
1143 | tv = GTK_TREE_VIEW (gtk_builder_get_object | 1097 | if (TRUE != gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &iter)) |
1144 | (builder, | ||
1145 | "GNUNET_GTK_master_publish_dialog_file_information_tree_view")); | ||
1146 | sel = gtk_tree_view_get_selection (tv); | ||
1147 | if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter)) | ||
1148 | { | 1098 | { |
1149 | GNUNET_break (0); | 1099 | GNUNET_break (0); |
1150 | return; | 1100 | return; |
1151 | } | 1101 | } |
1152 | if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &next)) | 1102 | if (TRUE != gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &next)) |
1153 | { | 1103 | { |
1154 | GNUNET_break (0); | 1104 | GNUNET_break (0); |
1155 | return; | 1105 | return; |
1156 | } | 1106 | } |
1157 | GNUNET_assert (TRUE == gtk_tree_model_iter_next (tm, &next)); | 1107 | GNUNET_assert (TRUE == gtk_tree_model_iter_next (ctx->file_info_treemodel, &next)); |
1158 | gtk_tree_store_insert_after (GTK_TREE_STORE (tm), &pos, NULL, &next); | 1108 | gtk_tree_store_insert_after (GTK_TREE_STORE (ctx->file_info_treemodel), &pos, NULL, &next); |
1159 | if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter)) | 1109 | if (TRUE != gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &iter)) |
1160 | { | 1110 | { |
1161 | GNUNET_break (0); | 1111 | GNUNET_break (0); |
1162 | return; | 1112 | return; |
1163 | } | 1113 | } |
1164 | move_entry (data, tm, &iter, &pos, GNUNET_YES); | 1114 | move_entry (ctx, ctx->file_info_treemodel, &iter, &pos, GNUNET_YES); |
1165 | remove_old_entry (GTK_TREE_STORE (tm), &iter); | 1115 | remove_old_entry (GTK_TREE_STORE (ctx->file_info_treemodel), &iter); |
1166 | } | 1116 | } |
1167 | 1117 | ||
1168 | 1118 | ||
1169 | void | 1119 | void |
1170 | GNUNET_GTK_master_publish_dialog_new_button_clicked_cb (GtkWidget * dummy, | 1120 | GNUNET_GTK_master_publish_dialog_new_button_clicked_cb (GtkWidget * dummy, |
1171 | gpointer data) | 1121 | struct MainPublishingDialogContext *ctx) |
1172 | { | 1122 | { |
1173 | GtkTreeView *tv; | ||
1174 | GtkTreeSelection *sel; | ||
1175 | GtkTreeIter iter; | 1123 | GtkTreeIter iter; |
1176 | GtkTreeIter pos; | 1124 | GtkTreeIter pos; |
1177 | struct GNUNET_FS_BlockOptions bo; | 1125 | struct GNUNET_FS_BlockOptions bo; |
1178 | GtkBuilder *builder; | ||
1179 | |||
1180 | builder = GTK_BUILDER (data); | ||
1181 | 1126 | ||
1182 | tv = GTK_TREE_VIEW (gtk_builder_get_object | ||
1183 | (builder, | ||
1184 | "GNUNET_GTK_master_publish_dialog_file_information_tree_view")); | ||
1185 | sel = gtk_tree_view_get_selection (tv); | ||
1186 | /* FIXME: consider opening a dialog to get | 1127 | /* FIXME: consider opening a dialog to get |
1187 | * anonymity, priority and expiration prior | 1128 | * anonymity, priority and expiration prior |
1188 | * to calling this function (currently we | 1129 | * to calling this function (currently we |
@@ -1193,33 +1134,28 @@ GNUNET_GTK_master_publish_dialog_new_button_clicked_cb (GtkWidget * dummy, | |||
1193 | bo.expiration_time = | 1134 | bo.expiration_time = |
1194 | GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_YEARS); | 1135 | GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_YEARS); |
1195 | bo.replication_level = 1; | 1136 | bo.replication_level = 1; |
1196 | if (TRUE != gtk_tree_selection_get_selected (sel, NULL, &iter)) | 1137 | if (TRUE != gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &iter)) |
1197 | { | 1138 | { |
1198 | create_dir_at_iter (data, "unnamed/", &bo, NULL, &pos); | 1139 | create_dir_at_iter (ctx, "unnamed/", &bo, NULL, &pos); |
1199 | return; | 1140 | return; |
1200 | } | 1141 | } |
1201 | create_dir_at_iter (data, "unnamed/", &bo, &iter, &pos); | 1142 | create_dir_at_iter (ctx, "unnamed/", &bo, &iter, &pos); |
1202 | } | 1143 | } |
1203 | 1144 | ||
1204 | 1145 | ||
1205 | void | 1146 | void |
1206 | GNUNET_GTK_master_publish_dialog_add_button_clicked_cb (GtkWidget * dummy, | 1147 | GNUNET_GTK_master_publish_dialog_add_button_clicked_cb (GtkWidget * dummy, |
1207 | gpointer data) | 1148 | struct MainPublishingDialogContext *ctx) |
1208 | { | 1149 | { |
1209 | GtkWidget *ad; | 1150 | GtkWidget *ad; |
1210 | GtkBuilder *builder; | ||
1211 | GtkWindow *master_pubdialog; | ||
1212 | |||
1213 | builder = GTK_BUILDER (data); | ||
1214 | 1151 | ||
1215 | ad = GTK_WIDGET (gtk_builder_get_object | 1152 | ad = GTK_WIDGET (gtk_builder_get_object |
1216 | (builder, "GNUNET_GTK_publish_file_dialog")); | 1153 | (ctx->main_window_builder, "GNUNET_GTK_publish_file_dialog")); |
1217 | GNUNET_FS_GTK_setup_expiration_year_adjustment (builder); | 1154 | GNUNET_FS_GTK_setup_expiration_year_adjustment (ctx->main_window_builder); |
1218 | 1155 | ||
1219 | master_pubdialog = | 1156 | ctx->open_file_handler_id = g_signal_connect (G_OBJECT (ad), "response", G_CALLBACK (GNUNET_GTK_publish_file_dialog_response_cb), ctx); |
1220 | GTK_WINDOW (gtk_builder_get_object | 1157 | |
1221 | (builder, "GNUNET_GTK_master_publish_dialog")); | 1158 | gtk_window_set_transient_for (GTK_WINDOW (ad), ctx->master_pubdialog); |
1222 | gtk_window_set_transient_for (GTK_WINDOW (ad), master_pubdialog); | ||
1223 | 1159 | ||
1224 | gtk_window_present (GTK_WINDOW (ad)); | 1160 | gtk_window_present (GTK_WINDOW (ad)); |
1225 | } | 1161 | } |
@@ -1265,14 +1201,9 @@ master_publish_edit_publish_dialog_cb (gpointer cls, int do_index, | |||
1265 | 1201 | ||
1266 | void | 1202 | void |
1267 | GNUNET_GTK_master_publish_dialog_edit_button_clicked_cb (GtkWidget * dummy, | 1203 | GNUNET_GTK_master_publish_dialog_edit_button_clicked_cb (GtkWidget * dummy, |
1268 | gpointer data) | 1204 | struct MainPublishingDialogContext *ctx) |
1269 | { | 1205 | { |
1270 | GtkTreeView *tv; | ||
1271 | GtkTreeModel *tm; | ||
1272 | GtkTreeSelection *sel; | ||
1273 | struct EditPublishContext *cbargs; | 1206 | struct EditPublishContext *cbargs; |
1274 | GtkBuilder *builder; | ||
1275 | GtkWindow *master_pubdialog; | ||
1276 | gint do_index; | 1207 | gint do_index; |
1277 | char *short_fn; | 1208 | char *short_fn; |
1278 | guint anonymity_level; | 1209 | guint anonymity_level; |
@@ -1283,28 +1214,18 @@ GNUNET_GTK_master_publish_dialog_edit_button_clicked_cb (GtkWidget * dummy, | |||
1283 | struct GNUNET_FS_BlockOptions bo; | 1214 | struct GNUNET_FS_BlockOptions bo; |
1284 | GtkListStore *anon_liststore; | 1215 | GtkListStore *anon_liststore; |
1285 | 1216 | ||
1286 | builder = GTK_BUILDER (data); | 1217 | anon_liststore = GTK_LIST_STORE (gtk_builder_get_object (ctx->main_window_builder, "main_window_search_anonymity_liststore")); |
1287 | tv = GTK_TREE_VIEW (gtk_builder_get_object | ||
1288 | (builder, | ||
1289 | "GNUNET_GTK_master_publish_dialog_file_information_tree_view")); | ||
1290 | |||
1291 | anon_liststore = GTK_LIST_STORE (gtk_builder_get_object (builder, "main_window_search_anonymity_liststore")); | ||
1292 | |||
1293 | 1218 | ||
1294 | cbargs = GNUNET_malloc (sizeof (struct EditPublishContext)); | 1219 | cbargs = GNUNET_malloc (sizeof (struct EditPublishContext)); |
1295 | cbargs->tm = gtk_tree_view_get_model (tv); | 1220 | cbargs->tm = ctx->file_info_treemodel; |
1296 | master_pubdialog = | 1221 | if (TRUE != gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &cbargs->iter)) |
1297 | GTK_WINDOW (gtk_builder_get_object | ||
1298 | (builder, "GNUNET_GTK_master_publish_dialog")); | ||
1299 | sel = gtk_tree_view_get_selection (tv); | ||
1300 | if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &cbargs->iter)) | ||
1301 | { | 1222 | { |
1302 | GNUNET_break (0); | 1223 | GNUNET_break (0); |
1303 | GNUNET_free (cbargs); | 1224 | GNUNET_free (cbargs); |
1304 | return; | 1225 | return; |
1305 | } | 1226 | } |
1306 | 1227 | ||
1307 | gtk_tree_model_get (tm, &cbargs->iter, 1, &do_index, 2, &short_fn, 3, | 1228 | gtk_tree_model_get (ctx->file_info_treemodel, &cbargs->iter, 1, &do_index, 2, &short_fn, 3, |
1308 | &anonymity_level, 4, &priority, 5, &fip, | 1229 | &anonymity_level, 4, &priority, 5, &fip, |
1309 | 6, &abs_etime, | 1230 | 6, &abs_etime, |
1310 | 7, &replication_level, | 1231 | 7, &replication_level, |
@@ -1314,7 +1235,7 @@ GNUNET_GTK_master_publish_dialog_edit_button_clicked_cb (GtkWidget * dummy, | |||
1314 | bo.expiration_time.abs_value = (uint64_t) abs_etime; | 1235 | bo.expiration_time.abs_value = (uint64_t) abs_etime; |
1315 | bo.replication_level = replication_level; | 1236 | bo.replication_level = replication_level; |
1316 | 1237 | ||
1317 | GNUNET_FS_GTK_edit_publish_dialog (master_pubdialog, do_index, | 1238 | GNUNET_FS_GTK_edit_publish_dialog (ctx->master_pubdialog, do_index, |
1318 | short_fn, bo, fip, TRUE, anon_liststore, | 1239 | short_fn, bo, fip, TRUE, anon_liststore, |
1319 | &master_publish_edit_publish_dialog_cb, | 1240 | &master_publish_edit_publish_dialog_cb, |
1320 | cbargs); | 1241 | cbargs); |
@@ -1346,36 +1267,27 @@ free_fi_row_reference (void *cls, struct GNUNET_FS_FileInformation *fi, | |||
1346 | 1267 | ||
1347 | void | 1268 | void |
1348 | GNUNET_GTK_master_publish_dialog_delete_button_clicked_cb (GtkWidget * dummy, | 1269 | GNUNET_GTK_master_publish_dialog_delete_button_clicked_cb (GtkWidget * dummy, |
1349 | gpointer data) | 1270 | struct MainPublishingDialogContext *ctx) |
1350 | { | 1271 | { |
1351 | GtkTreeView *tv; | ||
1352 | GtkTreeModel *tm; | ||
1353 | GtkTreeSelection *sel; | ||
1354 | GtkTreeIter iter; | 1272 | GtkTreeIter iter; |
1355 | struct GNUNET_FS_FileInformation *fip; | 1273 | struct GNUNET_FS_FileInformation *fip; |
1356 | GtkBuilder *builder; | ||
1357 | 1274 | ||
1358 | builder = GTK_BUILDER (data); | 1275 | if (TRUE != gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &iter)) |
1359 | tv = GTK_TREE_VIEW (gtk_builder_get_object | ||
1360 | (builder, | ||
1361 | "GNUNET_GTK_master_publish_dialog_file_information_tree_view")); | ||
1362 | sel = gtk_tree_view_get_selection (tv); | ||
1363 | if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter)) | ||
1364 | { | 1276 | { |
1365 | GNUNET_break (0); | 1277 | GNUNET_break (0); |
1366 | return; | 1278 | return; |
1367 | } | 1279 | } |
1368 | gtk_tree_model_get (tm, &iter, 5, &fip, -1); | 1280 | gtk_tree_model_get (ctx->file_info_treemodel, &iter, 5, &fip, -1); |
1369 | GNUNET_FS_file_information_destroy (fip, &free_fi_row_reference, NULL); | 1281 | GNUNET_FS_file_information_destroy (fip, &free_fi_row_reference, NULL); |
1370 | gtk_tree_store_remove (GTK_TREE_STORE (tm), &iter); | 1282 | gtk_tree_store_remove (GTK_TREE_STORE (ctx->file_info_treemodel), &iter); |
1371 | update_selectivity (data); | 1283 | update_selectivity (ctx); |
1372 | } | 1284 | } |
1373 | 1285 | ||
1374 | 1286 | ||
1375 | void | 1287 | void |
1376 | GNUNET_GTK_publish_directory_dialog_response_cb (GtkDialog * dialog, | 1288 | GNUNET_GTK_publish_directory_dialog_response_cb (GtkDialog * dialog, |
1377 | gint response_id, | 1289 | gint response_id, |
1378 | gpointer user_data) | 1290 | struct MainPublishingDialogContext *ctx) |
1379 | { | 1291 | { |
1380 | char *filename; | 1292 | char *filename; |
1381 | int do_index; | 1293 | int do_index; |
@@ -1384,7 +1296,11 @@ GNUNET_GTK_publish_directory_dialog_response_cb (GtkDialog * dialog, | |||
1384 | GtkWidget *ad; | 1296 | GtkWidget *ad; |
1385 | GtkBuilder *builder; | 1297 | GtkBuilder *builder; |
1386 | 1298 | ||
1387 | builder = GTK_BUILDER (user_data); | 1299 | if (g_signal_handler_is_connected (G_OBJECT (dialog), ctx->open_directory_handler_id)) |
1300 | g_signal_handler_disconnect (G_OBJECT (dialog), ctx->open_directory_handler_id); | ||
1301 | ctx->open_directory_handler_id = 0; | ||
1302 | |||
1303 | builder = ctx->main_window_builder; | ||
1388 | ad = GTK_WIDGET (gtk_builder_get_object | 1304 | ad = GTK_WIDGET (gtk_builder_get_object |
1389 | (builder, "GNUNET_GTK_publish_directory_dialog")); | 1305 | (builder, "GNUNET_GTK_publish_directory_dialog")); |
1390 | if (response_id == -5) | 1306 | if (response_id == -5) |
@@ -1415,9 +1331,9 @@ GNUNET_GTK_publish_directory_dialog_response_cb (GtkDialog * dialog, | |||
1415 | "GNUNET_GTK_publish_directory_dialog_do_index_checkbutton"))); | 1331 | "GNUNET_GTK_publish_directory_dialog_do_index_checkbutton"))); |
1416 | 1332 | ||
1417 | /* FIXME: open progress dialog here... */ | 1333 | /* FIXME: open progress dialog here... */ |
1418 | add_dir (user_data, filename, &bo, do_index); | 1334 | add_dir (ctx, filename, &bo, do_index); |
1419 | g_free (filename); | 1335 | g_free (filename); |
1420 | update_selectivity (user_data); | 1336 | update_selectivity (ctx); |
1421 | } | 1337 | } |
1422 | gtk_widget_hide (ad); | 1338 | gtk_widget_hide (ad); |
1423 | } | 1339 | } |
@@ -1425,21 +1341,19 @@ GNUNET_GTK_publish_directory_dialog_response_cb (GtkDialog * dialog, | |||
1425 | 1341 | ||
1426 | void | 1342 | void |
1427 | GNUNET_GTK_master_publish_dialog_open_button_clicked_cb (GtkWidget * dummy, | 1343 | GNUNET_GTK_master_publish_dialog_open_button_clicked_cb (GtkWidget * dummy, |
1428 | gpointer data) | 1344 | struct MainPublishingDialogContext *ctx) |
1429 | { | 1345 | { |
1430 | GtkWidget *ad; | 1346 | GtkWidget *ad; |
1431 | GtkBuilder *builder; | 1347 | GtkBuilder *builder; |
1432 | GtkWindow *master_pubdialog; | ||
1433 | 1348 | ||
1434 | builder = GTK_BUILDER (data); | 1349 | builder = ctx->main_window_builder; |
1435 | GNUNET_FS_GTK_setup_expiration_year_adjustment (builder); | 1350 | GNUNET_FS_GTK_setup_expiration_year_adjustment (builder); |
1436 | ad = GTK_WIDGET (gtk_builder_get_object | 1351 | ad = GTK_WIDGET (gtk_builder_get_object |
1437 | (builder, "GNUNET_GTK_publish_directory_dialog")); | 1352 | (builder, "GNUNET_GTK_publish_directory_dialog")); |
1438 | 1353 | ||
1439 | master_pubdialog = | 1354 | ctx->open_directory_handler_id = g_signal_connect (G_OBJECT (ad), "response", G_CALLBACK (GNUNET_GTK_publish_directory_dialog_response_cb), ctx); |
1440 | GTK_WINDOW (gtk_builder_get_object | 1355 | |
1441 | (builder, "GNUNET_GTK_master_publish_dialog")); | 1356 | gtk_window_set_transient_for (GTK_WINDOW (ad), ctx->master_pubdialog); |
1442 | gtk_window_set_transient_for (GTK_WINDOW (ad), master_pubdialog); | ||
1443 | 1357 | ||
1444 | gtk_window_present (GTK_WINDOW (ad)); | 1358 | gtk_window_present (GTK_WINDOW (ad)); |
1445 | } | 1359 | } |
@@ -1686,63 +1600,25 @@ free_file_information_tree_store (GtkTreeModel * tm, GtkTreeIter * iter) | |||
1686 | 1600 | ||
1687 | void | 1601 | void |
1688 | GNUNET_GTK_master_publish_dialog_realize_cb (GtkWidget * widget, | 1602 | GNUNET_GTK_master_publish_dialog_realize_cb (GtkWidget * widget, |
1689 | gpointer user_data) | 1603 | struct MainPublishingDialogContext *ctx) |
1690 | { | 1604 | { |
1691 | GtkTreeView *tv; | ||
1692 | GtkTreeSelection *sel; | ||
1693 | GtkBuilder *builder; | ||
1694 | |||
1695 | builder = GTK_BUILDER (user_data); | ||
1696 | |||
1697 | tv = GTK_TREE_VIEW (gtk_builder_get_object | ||
1698 | (builder, | ||
1699 | "GNUNET_GTK_master_publish_dialog_file_information_tree_view")); | ||
1700 | sel = gtk_tree_view_get_selection (tv); | ||
1701 | g_signal_connect (G_OBJECT (sel), "changed", | ||
1702 | G_CALLBACK (selection_changed_cb), user_data); | ||
1703 | tv = GTK_TREE_VIEW (gtk_builder_get_object | ||
1704 | (builder, | ||
1705 | "GNUNET_GTK_master_publish_dialog_pseudonym_tree_view")); | ||
1706 | sel = gtk_tree_view_get_selection (tv); | ||
1707 | g_signal_connect (G_OBJECT (sel), "changed", | ||
1708 | G_CALLBACK (selection_changed_cb), user_data); | ||
1709 | } | 1605 | } |
1710 | 1606 | ||
1711 | 1607 | ||
1712 | static void | 1608 | static void |
1713 | hide_master_publish_dialog (gpointer user_data, gint ret) | 1609 | hide_master_publish_dialog (struct MainPublishingDialogContext *ctx, gint ret) |
1714 | { | 1610 | { |
1715 | GtkTreeView *tv, *ptv; | ||
1716 | GtkTreeSelection *sel; | ||
1717 | GtkTreeModel *tm, *ptm; | ||
1718 | GtkTreeIter iter; | 1611 | GtkTreeIter iter; |
1719 | gpointer namespace; | 1612 | gpointer namespace; |
1720 | gchar *namespace_id; | 1613 | gchar *namespace_id; |
1721 | gchar *namespace_uid; | 1614 | gchar *namespace_uid; |
1722 | struct GNUNET_FS_FileInformation *fi; | 1615 | struct GNUNET_FS_FileInformation *fi; |
1723 | GtkWidget *ad; | ||
1724 | GtkBuilder *builder; | ||
1725 | |||
1726 | builder = GTK_BUILDER (user_data); | ||
1727 | ad = GTK_WIDGET (gtk_builder_get_object | ||
1728 | (builder, "GNUNET_GTK_master_publish_dialog")); | ||
1729 | ptv = | ||
1730 | GTK_TREE_VIEW (gtk_builder_get_object | ||
1731 | (builder, | ||
1732 | "GNUNET_GTK_master_publish_dialog_pseudonym_tree_view")); | ||
1733 | sel = gtk_tree_view_get_selection (ptv); | ||
1734 | ptm = gtk_tree_view_get_model (ptv); | ||
1735 | |||
1736 | tv = GTK_TREE_VIEW (gtk_builder_get_object | ||
1737 | (builder, | ||
1738 | "GNUNET_GTK_master_publish_dialog_file_information_tree_view")); | ||
1739 | tm = gtk_tree_view_get_model (tv); | ||
1740 | 1616 | ||
1741 | if (ret == GTK_RESPONSE_OK) | 1617 | if (ret == GTK_RESPONSE_OK) |
1742 | { | 1618 | { |
1743 | if (TRUE == gtk_tree_selection_get_selected (sel, &ptm, &iter)) | 1619 | if (TRUE == gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, &iter)) |
1744 | { | 1620 | { |
1745 | gtk_tree_model_get (ptm, &iter, 1, &namespace, 2, &namespace_id, 5, | 1621 | gtk_tree_model_get (ctx->pseudonym_treemodel, &iter, 1, &namespace, 2, &namespace_id, 5, |
1746 | &namespace_uid, -1); | 1622 | &namespace_uid, -1); |
1747 | } | 1623 | } |
1748 | else | 1624 | else |
@@ -1751,65 +1627,65 @@ hide_master_publish_dialog (gpointer user_data, gint ret) | |||
1751 | namespace_id = NULL; | 1627 | namespace_id = NULL; |
1752 | namespace_uid = NULL; | 1628 | namespace_uid = NULL; |
1753 | } | 1629 | } |
1754 | if (gtk_tree_model_get_iter_first (tm, &iter)) | 1630 | if (gtk_tree_model_get_iter_first (ctx->file_info_treemodel, &iter)) |
1755 | do | 1631 | do |
1756 | { | 1632 | { |
1757 | fi = get_file_information (tm, &iter); | 1633 | fi = get_file_information (ctx->file_info_treemodel, &iter); |
1758 | /* FIXME: should we convert namespace id and uid from UTF8? */ | 1634 | /* FIXME: should we convert namespace id and uid from UTF8? */ |
1759 | GNUNET_FS_publish_start (GNUNET_FS_GTK_get_fs_handle (), fi, namespace, | 1635 | GNUNET_FS_publish_start (GNUNET_FS_GTK_get_fs_handle (), fi, namespace, |
1760 | namespace_id, namespace_uid, | 1636 | namespace_id, namespace_uid, |
1761 | GNUNET_FS_PUBLISH_OPTION_NONE); | 1637 | GNUNET_FS_PUBLISH_OPTION_NONE); |
1762 | } | 1638 | } |
1763 | while (gtk_tree_model_iter_next (tm, &iter)); | 1639 | while (gtk_tree_model_iter_next (ctx->file_info_treemodel, &iter)); |
1764 | g_free (namespace_id); | 1640 | g_free (namespace_id); |
1765 | g_free (namespace_uid); | 1641 | g_free (namespace_uid); |
1766 | } | 1642 | } |
1767 | 1643 | ||
1768 | /* free state from 'ptm' */ | 1644 | /* free state from 'ptm' */ |
1769 | if (TRUE == gtk_tree_model_get_iter_first (ptm, &iter)) | 1645 | if (TRUE == gtk_tree_model_get_iter_first (ctx->pseudonym_treemodel, &iter)) |
1770 | do | 1646 | do |
1771 | { | 1647 | { |
1772 | free_pseudonym_tree_store (ptm, &iter); | 1648 | free_pseudonym_tree_store (ctx->pseudonym_treemodel, &iter); |
1773 | } | 1649 | } |
1774 | while (TRUE == gtk_tree_model_iter_next (ptm, &iter)); | 1650 | while (TRUE == gtk_tree_model_iter_next (ctx->pseudonym_treemodel, &iter)); |
1775 | gtk_tree_store_clear (GTK_TREE_STORE (ptm)); | 1651 | gtk_tree_store_clear (GTK_TREE_STORE (ctx->pseudonym_treemodel)); |
1776 | 1652 | ||
1777 | /* free state from 'tm' */ | 1653 | /* free state from 'tm' */ |
1778 | if (TRUE == gtk_tree_model_get_iter_first (tm, &iter)) | 1654 | if (TRUE == gtk_tree_model_get_iter_first (ctx->file_info_treemodel, &iter)) |
1779 | do | 1655 | do |
1780 | { | 1656 | { |
1781 | free_file_information_tree_store (tm, &iter); | 1657 | free_file_information_tree_store (ctx->file_info_treemodel, &iter); |
1782 | } | 1658 | } |
1783 | while (TRUE == gtk_tree_model_iter_next (tm, &iter)); | 1659 | while (TRUE == gtk_tree_model_iter_next (ctx->file_info_treemodel, &iter)); |
1784 | gtk_tree_store_clear (GTK_TREE_STORE (tm)); | 1660 | gtk_tree_store_clear (GTK_TREE_STORE (ctx->file_info_treemodel)); |
1785 | gtk_widget_hide (ad); | 1661 | gtk_widget_destroy (GTK_WIDGET (ctx->master_pubdialog)); |
1786 | /* FIXME: doesn't this leak everything (builder + window)? | 1662 | gtk_object_unref (GTK_OBJECT (ctx->builder)); |
1787 | * I think we need to unref the builder here! */ | 1663 | GNUNET_free (ctx); |
1788 | } | 1664 | } |
1789 | 1665 | ||
1790 | 1666 | ||
1791 | void | 1667 | void |
1792 | GNUNET_GTK_master_publish_dialog_execute_button_clicked_cb (GtkButton * button, | 1668 | GNUNET_GTK_master_publish_dialog_execute_button_clicked_cb (GtkButton * button, |
1793 | gpointer user_data) | 1669 | struct MainPublishingDialogContext *ctx) |
1794 | { | 1670 | { |
1795 | hide_master_publish_dialog (user_data, GTK_RESPONSE_OK); | 1671 | hide_master_publish_dialog (ctx, GTK_RESPONSE_OK); |
1796 | } | 1672 | } |
1797 | 1673 | ||
1798 | 1674 | ||
1799 | void | 1675 | void |
1800 | GNUNET_GTK_master_publish_dialog_cancel_button_clicked_cb (GtkButton * button, | 1676 | GNUNET_GTK_master_publish_dialog_cancel_button_clicked_cb (GtkButton * button, |
1801 | gpointer user_data) | 1677 | struct MainPublishingDialogContext *ctx) |
1802 | { | 1678 | { |
1803 | hide_master_publish_dialog (user_data, GTK_RESPONSE_CANCEL); | 1679 | hide_master_publish_dialog (ctx, GTK_RESPONSE_CANCEL); |
1804 | } | 1680 | } |
1805 | 1681 | ||
1806 | 1682 | ||
1807 | gboolean | 1683 | gboolean |
1808 | GNUNET_GTK_master_publish_dialog_delete_event_cb (GtkWidget * widget, | 1684 | GNUNET_GTK_master_publish_dialog_delete_event_cb (GtkWidget * widget, |
1809 | GdkEvent * event, | 1685 | GdkEvent * event, |
1810 | gpointer user_data) | 1686 | struct MainPublishingDialogContext *ctx) |
1811 | { | 1687 | { |
1812 | hide_master_publish_dialog (user_data, GTK_RESPONSE_CANCEL); | 1688 | hide_master_publish_dialog (ctx, GTK_RESPONSE_CANCEL); |
1813 | return TRUE; | 1689 | return TRUE; |
1814 | } | 1690 | } |
1815 | 1691 | ||
@@ -1817,7 +1693,7 @@ GNUNET_GTK_master_publish_dialog_delete_event_cb (GtkWidget * widget, | |||
1817 | void | 1693 | void |
1818 | GNUNET_GTK_publish_file_dialog_response_cb (GtkDialog * dialog, | 1694 | GNUNET_GTK_publish_file_dialog_response_cb (GtkDialog * dialog, |
1819 | gint response_id, | 1695 | gint response_id, |
1820 | gpointer user_data) | 1696 | struct MainPublishingDialogContext *ctx) |
1821 | { | 1697 | { |
1822 | char *filename; | 1698 | char *filename; |
1823 | struct GNUNET_FS_BlockOptions bo; | 1699 | struct GNUNET_FS_BlockOptions bo; |
@@ -1825,7 +1701,11 @@ GNUNET_GTK_publish_file_dialog_response_cb (GtkDialog * dialog, | |||
1825 | GtkSpinButton *sb; | 1701 | GtkSpinButton *sb; |
1826 | GtkWidget *ad; | 1702 | GtkWidget *ad; |
1827 | 1703 | ||
1828 | GtkBuilder *builder = GTK_BUILDER (user_data); | 1704 | GtkBuilder *builder = ctx->main_window_builder; |
1705 | |||
1706 | if (g_signal_handler_is_connected (G_OBJECT (dialog), ctx->open_file_handler_id)) | ||
1707 | g_signal_handler_disconnect (G_OBJECT (dialog), ctx->open_file_handler_id); | ||
1708 | ctx->open_file_handler_id = 0; | ||
1829 | 1709 | ||
1830 | ad = GTK_WIDGET (gtk_builder_get_object | 1710 | ad = GTK_WIDGET (gtk_builder_get_object |
1831 | (builder, "GNUNET_GTK_publish_file_dialog")); | 1711 | (builder, "GNUNET_GTK_publish_file_dialog")); |
@@ -1859,9 +1739,9 @@ GNUNET_GTK_publish_file_dialog_response_cb (GtkDialog * dialog, | |||
1859 | "GNUNET_GTK_publish_file_dialog_do_index_checkbutton"))); | 1739 | "GNUNET_GTK_publish_file_dialog_do_index_checkbutton"))); |
1860 | 1740 | ||
1861 | filename = GNUNET_GTK_filechooser_get_filename_utf8 (GTK_FILE_CHOOSER (ad)); | 1741 | filename = GNUNET_GTK_filechooser_get_filename_utf8 (GTK_FILE_CHOOSER (ad)); |
1862 | add_file_at_iter (user_data, filename, &bo, do_index, NULL); | 1742 | add_file_at_iter (ctx, filename, &bo, do_index, NULL); |
1863 | g_free (filename); | 1743 | g_free (filename); |
1864 | update_selectivity (user_data); | 1744 | update_selectivity (ctx); |
1865 | } | 1745 | } |
1866 | else | 1746 | else |
1867 | { | 1747 | { |
@@ -1874,23 +1754,24 @@ GNUNET_GTK_publish_file_dialog_response_cb (GtkDialog * dialog, | |||
1874 | /** | 1754 | /** |
1875 | */ | 1755 | */ |
1876 | void | 1756 | void |
1877 | GNUNET_GTK_main_menu_file_publish_activate_cb (GtkWidget * dummy, gpointer data) | 1757 | GNUNET_GTK_main_menu_file_publish_activate_cb (GtkWidget * dummy, gpointer user_data) |
1878 | { | 1758 | { |
1879 | GtkWidget *ad; | 1759 | struct MainPublishingDialogContext *ctx; |
1880 | GtkTreeStore *ts; | ||
1881 | GtkBuilder *builder; | ||
1882 | 1760 | ||
1883 | builder = GTK_BUILDER (data); | 1761 | ctx = GNUNET_malloc (sizeof (struct MainPublishingDialogContext)); |
1884 | ad = GTK_WIDGET (gtk_builder_get_object | 1762 | ctx->builder = GNUNET_GTK_get_new_builder ("gnunet_fs_gtk_publish_dialog.glade", ctx); |
1885 | (builder, "GNUNET_GTK_master_publish_dialog")); | 1763 | |
1886 | if (!gtk_widget_get_visible (ad)) | 1764 | if (ctx->builder == NULL) |
1887 | { | 1765 | { |
1888 | ts = GTK_TREE_STORE (gtk_builder_get_object | 1766 | GNUNET_free (ctx); |
1889 | (builder, "GNUNET_GTK_pseudonym_tree_store")); | 1767 | return; |
1890 | GNUNET_FS_namespace_list (GNUNET_FS_GTK_get_fs_handle (), | ||
1891 | &add_namespace_to_ts, ts); | ||
1892 | } | 1768 | } |
1893 | gtk_window_present (GTK_WINDOW (ad)); | 1769 | |
1770 | init_ctx (ctx); | ||
1771 | ctx->main_window_builder = GTK_BUILDER (user_data); | ||
1772 | GNUNET_FS_namespace_list (GNUNET_FS_GTK_get_fs_handle (), | ||
1773 | &add_namespace_to_ts, GTK_TREE_STORE (ctx->pseudonym_treemodel)); | ||
1774 | gtk_window_present (GTK_WINDOW (ctx->master_pubdialog)); | ||
1894 | } | 1775 | } |
1895 | 1776 | ||
1896 | 1777 | ||