diff options
Diffstat (limited to 'src/fs/gnunet-fs-gtk-edit_publish_dialog.c')
-rw-r--r-- | src/fs/gnunet-fs-gtk-edit_publish_dialog.c | 902 |
1 files changed, 320 insertions, 582 deletions
diff --git a/src/fs/gnunet-fs-gtk-edit_publish_dialog.c b/src/fs/gnunet-fs-gtk-edit_publish_dialog.c index 2c51c377..ea3cc6b5 100644 --- a/src/fs/gnunet-fs-gtk-edit_publish_dialog.c +++ b/src/fs/gnunet-fs-gtk-edit_publish_dialog.c | |||
@@ -27,26 +27,76 @@ | |||
27 | #include "gnunet-fs-gtk.h" | 27 | #include "gnunet-fs-gtk.h" |
28 | #include <gnunet/gnunet_util_lib.h> | 28 | #include <gnunet/gnunet_util_lib.h> |
29 | 29 | ||
30 | #include "metatypes.c" | ||
30 | 31 | ||
31 | #define PUBSTATE "edit-publication-state" | 32 | struct EditPublicationDialogContext |
33 | { | ||
34 | GtkBuilder *builder; | ||
32 | 35 | ||
33 | #include "metatypes.c" | 36 | GtkListStore *metatypes_liststore; |
37 | |||
38 | GtkListStore *meta_liststore; | ||
39 | GtkTreeView *meta_treeview; | ||
40 | GtkTreeSelection *meta_selection; | ||
41 | GtkButton *meta_add_button; | ||
42 | GtkWidget *meta_del_button; | ||
43 | |||
44 | GtkCellRendererCombo *meta_combo; | ||
45 | |||
46 | GtkListStore *pubtypes_liststore; | ||
47 | GtkComboBox *pubtypes_combo; | ||
48 | |||
49 | GtkListStore *keywords_liststore; | ||
50 | GtkTreeView *keywords_treeview; | ||
51 | GtkTreeSelection *keywords_selection; | ||
52 | GtkWidget *keyword_add_button; | ||
53 | GtkWidget *keyword_del_button; | ||
54 | |||
55 | GtkEntry *keyword_entry; | ||
56 | |||
57 | GObject *pubwindow; | ||
58 | |||
59 | GtkWidget *ok; | ||
60 | GtkButton *cancel; | ||
61 | |||
62 | GtkImage *image; | ||
63 | |||
64 | GtkToggleButton *index_checkbutton; | ||
65 | GtkLabel *index_label; | ||
66 | GtkEntry *root_entry; | ||
67 | GtkLabel *root_label; | ||
68 | |||
69 | GtkSpinButton *priority_spin; | ||
70 | GtkSpinButton *year_spin; | ||
71 | GtkSpinButton *replication_spin; | ||
72 | |||
73 | GtkComboBox *anonymity_combo; | ||
74 | GtkListStore *anonymity_liststore; | ||
75 | |||
76 | int do_index; | ||
77 | char *short_fn; | ||
78 | struct GNUNET_FS_BlockOptions bo; | ||
79 | struct GNUNET_FS_FileInformation *fip; | ||
80 | gint preview_changed; | ||
81 | gboolean allow_no_keywords; | ||
82 | gboolean is_directory; | ||
83 | GNUNET_FS_GTK_EditPublishDialogCallback cb; | ||
84 | gchar *root; | ||
85 | gpointer cls; | ||
34 | 86 | ||
87 | struct GNUNET_CONTAINER_MetaData *md; | ||
88 | |||
89 | GtkTreeIter *meta_combo_selected_iter; | ||
90 | }; | ||
35 | 91 | ||
36 | static void | 92 | static void |
37 | change_metatypes (GtkBuilder * builder, gint code) | 93 | change_metatypes (struct EditPublicationDialogContext *ctx, gint code) |
38 | { | 94 | { |
39 | GtkListStore *metatypes_list; | ||
40 | gint pub_type = 0, i; | 95 | gint pub_type = 0, i; |
41 | gint pubtype_count = 0; | 96 | gint pubtype_count = 0; |
42 | gint max_type; | 97 | gint max_type; |
43 | GtkTreeIter iter; | 98 | GtkTreeIter iter; |
44 | 99 | ||
45 | metatypes_list = | ||
46 | GTK_LIST_STORE (gtk_builder_get_object | ||
47 | (builder, | ||
48 | "GNUNET_GTK_publication_metadata_types_liststore")); | ||
49 | |||
50 | for (pub_type = 0; types[pub_type] != NULL; pub_type++) | 100 | for (pub_type = 0; types[pub_type] != NULL; pub_type++) |
51 | pubtype_count += 1; | 101 | pubtype_count += 1; |
52 | 102 | ||
@@ -55,12 +105,12 @@ change_metatypes (GtkBuilder * builder, gint code) | |||
55 | else | 105 | else |
56 | pub_type = 0; | 106 | pub_type = 0; |
57 | 107 | ||
58 | gtk_list_store_clear (metatypes_list); | 108 | gtk_list_store_clear (ctx->metatypes_liststore); |
59 | max_type = EXTRACTOR_metatype_get_max (); | 109 | max_type = EXTRACTOR_metatype_get_max (); |
60 | for (i = 0; types[pub_type][i] != EXTRACTOR_METATYPE_RESERVED; i++) | 110 | for (i = 0; types[pub_type][i] != EXTRACTOR_METATYPE_RESERVED; i++) |
61 | { | 111 | { |
62 | if (types[pub_type][i] < max_type && types[pub_type][i] > 0) | 112 | if (types[pub_type][i] < max_type && types[pub_type][i] > 0) |
63 | gtk_list_store_insert_with_values (metatypes_list, &iter, G_MAXINT, 0, | 113 | gtk_list_store_insert_with_values (ctx->metatypes_liststore, &iter, G_MAXINT, 0, |
64 | types[pub_type][i], 1, | 114 | types[pub_type][i], 1, |
65 | EXTRACTOR_METAFORMAT_UTF8, 2, | 115 | EXTRACTOR_METAFORMAT_UTF8, 2, |
66 | EXTRACTOR_metatype_to_string (types | 116 | EXTRACTOR_metatype_to_string (types |
@@ -74,133 +124,45 @@ change_metatypes (GtkBuilder * builder, gint code) | |||
74 | 124 | ||
75 | void | 125 | void |
76 | GNUNET_GTK_edit_publication_type_combo_changed_cb (GtkComboBox * widget, | 126 | GNUNET_GTK_edit_publication_type_combo_changed_cb (GtkComboBox * widget, |
77 | gpointer user_data) | 127 | struct EditPublicationDialogContext *ctx) |
78 | { | 128 | { |
79 | GtkTreeIter iter; | 129 | GtkTreeIter iter; |
80 | GtkBuilder *builder; | ||
81 | GtkListStore *pubtypes_list; | ||
82 | gint code; | 130 | gint code; |
83 | 131 | ||
84 | if (!gtk_combo_box_get_active_iter (widget, &iter)) | 132 | if (!gtk_combo_box_get_active_iter (widget, &iter)) |
85 | return; | 133 | return; |
86 | builder = GTK_BUILDER (user_data); | ||
87 | |||
88 | pubtypes_list = | ||
89 | GTK_LIST_STORE (gtk_builder_get_object | ||
90 | (builder, "GNUNET_GTK_publication_types_liststore")); | ||
91 | 134 | ||
92 | gtk_tree_model_get (GTK_TREE_MODEL (pubtypes_list), &iter, 0, &code, -1); | 135 | gtk_tree_model_get (GTK_TREE_MODEL (ctx->pubtypes_liststore), &iter, 0, &code, -1); |
93 | 136 | ||
94 | change_metatypes (builder, code); | 137 | change_metatypes (ctx, code); |
95 | } | 138 | } |
96 | 139 | ||
97 | struct EditPublicationState | ||
98 | { | ||
99 | int do_index; | ||
100 | char *short_fn; | ||
101 | struct GNUNET_FS_BlockOptions bo; | ||
102 | struct GNUNET_FS_FileInformation *fip; | ||
103 | gint preview_changed; | ||
104 | gboolean allow_no_keywords; | ||
105 | gboolean is_directory; | ||
106 | GNUNET_FS_GTK_EditPublishDialogCallback cb; | ||
107 | gchar *root; | ||
108 | gpointer cls; | ||
109 | }; | ||
110 | |||
111 | 140 | ||
112 | static void | 141 | static void |
113 | metadata_selection_changed_cb (GtkTreeSelection * ts, gpointer user_data) | 142 | metadata_selection_changed_cb (GtkTreeSelection *ts, struct EditPublicationDialogContext *ctx) |
114 | { | 143 | { |
115 | GtkTreeView *tv; | 144 | gtk_widget_set_sensitive (ctx->meta_del_button, |
116 | GtkTreeSelection *sel; | 145 | gtk_tree_selection_get_selected (ts, NULL, NULL)); |
117 | GtkWidget *button; | ||
118 | GtkBuilder *builder; | ||
119 | |||
120 | builder = GTK_BUILDER (user_data); | ||
121 | |||
122 | tv = GTK_TREE_VIEW (gtk_builder_get_object | ||
123 | (builder, | ||
124 | "GNUNET_GTK_edit_publication_metadata_tree_view")); | ||
125 | sel = gtk_tree_view_get_selection (tv); | ||
126 | button = | ||
127 | GTK_WIDGET (gtk_builder_get_object | ||
128 | (builder, "GNUNET_GTK_edit_publication_delete_button")); | ||
129 | gtk_widget_set_sensitive (button, | ||
130 | gtk_tree_selection_get_selected (sel, NULL, NULL)); | ||
131 | } | 146 | } |
132 | 147 | ||
133 | 148 | ||
134 | static void | 149 | static void |
135 | keywords_selection_changed_cb (GtkTreeSelection * ts, gpointer user_data) | 150 | keywords_selection_changed_cb (GtkTreeSelection *ts, struct EditPublicationDialogContext *ctx) |
136 | { | ||
137 | GtkTreeView *tv; | ||
138 | GtkTreeSelection *sel; | ||
139 | GtkWidget *button; | ||
140 | GtkBuilder *builder; | ||
141 | |||
142 | builder = GTK_BUILDER (user_data); | ||
143 | |||
144 | |||
145 | tv = GTK_TREE_VIEW (gtk_builder_get_object | ||
146 | (builder, | ||
147 | "GNUNET_GTK_edit_publication_keyword_list_tree_view")); | ||
148 | sel = gtk_tree_view_get_selection (tv); | ||
149 | button = | ||
150 | GTK_WIDGET (gtk_builder_get_object | ||
151 | (builder, | ||
152 | "GNUNET_GTK_edit_publication_keyword_list_del_button")); | ||
153 | |||
154 | gtk_widget_set_sensitive (button, | ||
155 | gtk_tree_selection_get_selected (sel, NULL, NULL)); | ||
156 | } | ||
157 | |||
158 | |||
159 | void | ||
160 | GNUNET_GTK_edit_publication_window_realize_cb (GtkWidget * widget, | ||
161 | gpointer user_data) | ||
162 | { | 151 | { |
163 | GtkBuilder *builder; | 152 | gtk_widget_set_sensitive (ctx->keyword_del_button, |
164 | GtkTreeView *tv; | 153 | gtk_tree_selection_get_selected (ts, NULL, NULL)); |
165 | GtkTreeSelection *sel; | ||
166 | |||
167 | builder = GTK_BUILDER (user_data); | ||
168 | |||
169 | tv = GTK_TREE_VIEW (gtk_builder_get_object | ||
170 | (builder, | ||
171 | "GNUNET_GTK_edit_publication_metadata_tree_view")); | ||
172 | sel = gtk_tree_view_get_selection (tv); | ||
173 | g_signal_connect (G_OBJECT (sel), "changed", | ||
174 | G_CALLBACK (metadata_selection_changed_cb), builder); | ||
175 | |||
176 | tv = GTK_TREE_VIEW (gtk_builder_get_object | ||
177 | (builder, | ||
178 | "GNUNET_GTK_edit_publication_keyword_list_tree_view")); | ||
179 | sel = gtk_tree_view_get_selection (tv); | ||
180 | g_signal_connect (G_OBJECT (sel), "changed", | ||
181 | G_CALLBACK (keywords_selection_changed_cb), builder); | ||
182 | } | 154 | } |
183 | 155 | ||
184 | 156 | ||
185 | void | 157 | void |
186 | GNUNET_GTK_edit_publication_add_button_clicked_cb (GtkButton * button, | 158 | GNUNET_GTK_edit_publication_add_button_clicked_cb (GtkButton * button, |
187 | gpointer user_data) | 159 | struct EditPublicationDialogContext *ctx) |
188 | { | 160 | { |
189 | GtkBuilder *builder; | ||
190 | GtkTreeView *meta_tree; | ||
191 | GtkListStore *meta_list; | ||
192 | GtkTreeIter iter; | 161 | GtkTreeIter iter; |
193 | 162 | ||
194 | builder = GTK_BUILDER (user_data); | 163 | gtk_list_store_insert (ctx->meta_liststore, &iter, 0); |
195 | meta_tree = | ||
196 | GTK_TREE_VIEW (gtk_builder_get_object | ||
197 | (builder, | ||
198 | "GNUNET_GTK_edit_publication_metadata_tree_view")); | ||
199 | meta_list = GTK_LIST_STORE (gtk_tree_view_get_model (meta_tree)); | ||
200 | |||
201 | gtk_list_store_insert (meta_list, &iter, 0); | ||
202 | /* type == 0 means "not set" */ | 164 | /* type == 0 means "not set" */ |
203 | gtk_list_store_set (meta_list, &iter, 0, 0, 1, EXTRACTOR_METAFORMAT_UTF8, 2, | 165 | gtk_list_store_set (ctx->meta_liststore, &iter, 0, 0, 1, EXTRACTOR_METAFORMAT_UTF8, 2, |
204 | _("Select a type"), 3, _("Specify a value"), 4, NULL, -1); | 166 | _("Select a type"), 3, _("Specify a value"), 4, NULL, -1); |
205 | } | 167 | } |
206 | 168 | ||
@@ -210,20 +172,11 @@ GNUNET_GTK_edit_publication_keyword_entry_key_press_event_cb (GtkWidget * | |||
210 | widget, | 172 | widget, |
211 | GdkEventKey * | 173 | GdkEventKey * |
212 | event, | 174 | event, |
213 | gpointer | 175 | struct EditPublicationDialogContext *ctx) |
214 | user_data) | ||
215 | { | 176 | { |
216 | GtkBuilder *builder; | ||
217 | GtkButton *add_button; | ||
218 | |||
219 | builder = GTK_BUILDER (user_data); | ||
220 | |||
221 | if (event->keyval == GDK_KEY_Return) | 177 | if (event->keyval == GDK_KEY_Return) |
222 | { | 178 | { |
223 | add_button = | 179 | GNUNET_GTK_edit_publication_add_button_clicked_cb (GTK_BUTTON (ctx->keyword_add_button), ctx); |
224 | GTK_BUTTON (gtk_builder_get_object | ||
225 | (builder, "GNUNET_GTK_edit_publication_add_button")); | ||
226 | GNUNET_GTK_edit_publication_add_button_clicked_cb (add_button, user_data); | ||
227 | return TRUE; | 180 | return TRUE; |
228 | } | 181 | } |
229 | return FALSE; | 182 | return FALSE; |
@@ -232,43 +185,26 @@ GNUNET_GTK_edit_publication_keyword_entry_key_press_event_cb (GtkWidget * | |||
232 | 185 | ||
233 | void GNUNET_GTK_edit_publication_metadata_tree_view_type_renderer_edited_cb | 186 | void GNUNET_GTK_edit_publication_metadata_tree_view_type_renderer_edited_cb |
234 | (GtkCellRendererText * renderer, gchar * path, gchar * new_text, | 187 | (GtkCellRendererText * renderer, gchar * path, gchar * new_text, |
235 | gpointer user_data) | 188 | struct EditPublicationDialogContext *ctx) |
236 | { | 189 | { |
237 | GtkBuilder *builder; | ||
238 | GtkTreeView *meta_tree; | ||
239 | GtkListStore *meta_list; | ||
240 | GtkCellRendererCombo *combo; | ||
241 | GtkTreeModel *combo_model; | 190 | GtkTreeModel *combo_model; |
242 | GtkTreeIter iter; | 191 | GtkTreeIter iter; |
243 | gint type_id; | 192 | gint type_id; |
244 | gchar *description = NULL; | 193 | gchar *description = NULL; |
245 | GtkTreeIter *pass_data = NULL; | 194 | |
246 | |||
247 | builder = GTK_BUILDER (user_data); | ||
248 | meta_tree = | ||
249 | GTK_TREE_VIEW (gtk_builder_get_object | ||
250 | (builder, | ||
251 | "GNUNET_GTK_edit_publication_metadata_tree_view")); | ||
252 | meta_list = GTK_LIST_STORE (gtk_tree_view_get_model (meta_tree)); | ||
253 | if (!gtk_tree_model_get_iter_from_string | 195 | if (!gtk_tree_model_get_iter_from_string |
254 | (GTK_TREE_MODEL (meta_list), &iter, path)) | 196 | (GTK_TREE_MODEL (ctx->meta_liststore), &iter, path)) |
255 | return; | 197 | return; |
256 | 198 | ||
257 | combo = | 199 | if (!ctx->meta_combo_selected_iter) |
258 | GTK_CELL_RENDERER_COMBO (gtk_builder_get_object | ||
259 | (builder, | ||
260 | "GNUNET_GTK_edit_publication_metadata_tree_view_type_renderer")); | ||
261 | |||
262 | pass_data = g_object_get_data (G_OBJECT (combo), "selected-type"); | ||
263 | if (!pass_data) | ||
264 | return; | 200 | return; |
265 | g_object_get (combo, "model", &combo_model, NULL); | 201 | g_object_get (ctx->meta_combo, "model", &combo_model, NULL); |
266 | gtk_tree_model_get (combo_model, pass_data, 0, &type_id, 2, &description, -1); | 202 | gtk_tree_model_get (combo_model, ctx->meta_combo_selected_iter, 0, &type_id, 2, &description, -1); |
267 | g_object_unref (combo_model); | 203 | g_object_unref (combo_model); |
268 | g_free (pass_data); | 204 | g_free (ctx->meta_combo_selected_iter); |
269 | g_object_set_data (G_OBJECT (combo), "selected-type", NULL); | 205 | ctx->meta_combo_selected_iter = NULL; |
270 | 206 | ||
271 | gtk_list_store_set (meta_list, &iter, 0, type_id, 1, | 207 | gtk_list_store_set (ctx->meta_liststore, &iter, 0, type_id, 1, |
272 | EXTRACTOR_METAFORMAT_UTF8, 2, new_text, 4, description, | 208 | EXTRACTOR_METAFORMAT_UTF8, 2, new_text, 4, description, |
273 | -1); | 209 | -1); |
274 | g_free (description); | 210 | g_free (description); |
@@ -277,26 +213,19 @@ void GNUNET_GTK_edit_publication_metadata_tree_view_type_renderer_edited_cb | |||
277 | 213 | ||
278 | void GNUNET_GTK_edit_publication_metadata_tree_view_type_renderer_changed_cb | 214 | void GNUNET_GTK_edit_publication_metadata_tree_view_type_renderer_changed_cb |
279 | (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * new_iter, | 215 | (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * new_iter, |
280 | gpointer user_data) | 216 | struct EditPublicationDialogContext *ctx) |
281 | { | 217 | { |
282 | GtkTreeIter *pass_data; | 218 | if (ctx->meta_combo_selected_iter) |
283 | 219 | g_free (ctx->meta_combo_selected_iter); | |
284 | pass_data = g_object_get_data (G_OBJECT (combo), "selected-type"); | 220 | ctx->meta_combo_selected_iter = g_new0 (GtkTreeIter, 1); |
285 | if (pass_data) | 221 | *ctx->meta_combo_selected_iter = *new_iter; |
286 | g_free (pass_data); | ||
287 | pass_data = g_new0 (GtkTreeIter, 1); | ||
288 | *pass_data = *new_iter; | ||
289 | g_object_set_data (G_OBJECT (combo), "selected-type", pass_data); | ||
290 | } | 222 | } |
291 | 223 | ||
292 | 224 | ||
293 | void GNUNET_GTK_edit_publication_metadata_tree_view_value_renderer_edited_cb | 225 | void GNUNET_GTK_edit_publication_metadata_tree_view_value_renderer_edited_cb |
294 | (GtkCellRendererText * renderer, gchar * path, gchar * new_text, | 226 | (GtkCellRendererText * renderer, gchar * path, gchar * new_text, |
295 | gpointer user_data) | 227 | struct EditPublicationDialogContext *ctx) |
296 | { | 228 | { |
297 | GtkBuilder *builder; | ||
298 | GtkTreeView *meta_tree; | ||
299 | GtkListStore *meta_list; | ||
300 | GtkTreeIter iter; | 229 | GtkTreeIter iter; |
301 | gint metatype; | 230 | gint metatype; |
302 | char *avalue; | 231 | char *avalue; |
@@ -304,31 +233,13 @@ void GNUNET_GTK_edit_publication_metadata_tree_view_value_renderer_edited_cb | |||
304 | size_t slen; | 233 | size_t slen; |
305 | char *pos; | 234 | char *pos; |
306 | 235 | ||
307 | GObject *pubwindow; | ||
308 | struct EditPublicationState *state = NULL; | ||
309 | |||
310 | builder = GTK_BUILDER (user_data); | ||
311 | meta_tree = | ||
312 | GTK_TREE_VIEW (gtk_builder_get_object | ||
313 | (builder, | ||
314 | "GNUNET_GTK_edit_publication_metadata_tree_view")); | ||
315 | meta_list = GTK_LIST_STORE (gtk_tree_view_get_model (meta_tree)); | ||
316 | if (!gtk_tree_model_get_iter_from_string | 236 | if (!gtk_tree_model_get_iter_from_string |
317 | (GTK_TREE_MODEL (meta_list), &iter, path)) | 237 | (GTK_TREE_MODEL (ctx->meta_liststore), &iter, path)) |
318 | return; | ||
319 | |||
320 | pubwindow = | ||
321 | gtk_builder_get_object (builder, "GNUNET_GTK_edit_publication_window"); | ||
322 | state = g_object_get_data (pubwindow, PUBSTATE); | ||
323 | if (!state) | ||
324 | { | ||
325 | GNUNET_break (0); | ||
326 | return; | 238 | return; |
327 | } | ||
328 | 239 | ||
329 | gtk_tree_model_get (GTK_TREE_MODEL (meta_list), &iter, 0, &metatype, -1); | 240 | gtk_tree_model_get (GTK_TREE_MODEL (ctx->meta_liststore), &iter, 0, &metatype, -1); |
330 | if (metatype == EXTRACTOR_METATYPE_FILENAME && | 241 | if (metatype == EXTRACTOR_METATYPE_FILENAME && |
331 | new_text[strlen (new_text) - 1] != '/' && state->is_directory) | 242 | new_text[strlen (new_text) - 1] != '/' && ctx->is_directory) |
332 | { | 243 | { |
333 | GNUNET_asprintf (&avalue, "%s/", new_text); | 244 | GNUNET_asprintf (&avalue, "%s/", new_text); |
334 | /* if user typed '\' instead of '/', change it! */ | 245 | /* if user typed '\' instead of '/', change it! */ |
@@ -356,65 +267,43 @@ void GNUNET_GTK_edit_publication_metadata_tree_view_value_renderer_edited_cb | |||
356 | avalue = NULL; | 267 | avalue = NULL; |
357 | } | 268 | } |
358 | 269 | ||
359 | gtk_list_store_set (meta_list, &iter, 3, ivalue, -1); | 270 | gtk_list_store_set (ctx->meta_liststore, &iter, 3, ivalue, -1); |
360 | GNUNET_free_non_null (avalue); | 271 | GNUNET_free_non_null (avalue); |
361 | } | 272 | } |
362 | 273 | ||
363 | 274 | ||
364 | void | 275 | void |
365 | GNUNET_GTK_edit_publication_delete_button_clicked_cb (GtkButton * button, | 276 | GNUNET_GTK_edit_publication_delete_button_clicked_cb (GtkButton * button, |
366 | gpointer user_data) | 277 | struct EditPublicationDialogContext *ctx) |
367 | { | 278 | { |
368 | GtkTreeView *tv; | ||
369 | GtkTreeSelection *sel; | ||
370 | GtkTreeModel *tm; | ||
371 | GtkTreeIter iter; | 279 | GtkTreeIter iter; |
372 | GtkBuilder *builder = GTK_BUILDER (user_data); | ||
373 | 280 | ||
374 | tv = GTK_TREE_VIEW (gtk_builder_get_object | 281 | if (TRUE != gtk_tree_selection_get_selected (ctx->meta_selection, NULL, &iter)) |
375 | (builder, | ||
376 | "GNUNET_GTK_edit_publication_metadata_tree_view")); | ||
377 | sel = gtk_tree_view_get_selection (tv); | ||
378 | if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter)) | ||
379 | { | 282 | { |
380 | GNUNET_break (0); | 283 | GNUNET_break (0); |
381 | return; | 284 | return; |
382 | } | 285 | } |
383 | if (gtk_list_store_remove (GTK_LIST_STORE (tm), &iter)) | 286 | if (gtk_list_store_remove (ctx->meta_liststore, &iter)) |
384 | gtk_tree_selection_select_iter (sel, &iter); | 287 | gtk_tree_selection_select_iter (ctx->meta_selection, &iter); |
385 | } | 288 | } |
386 | 289 | ||
387 | 290 | ||
388 | void | 291 | void |
389 | GNUNET_GTK_edit_publication_keyword_list_add_button_clicked_cb (GtkButton * | 292 | GNUNET_GTK_edit_publication_keyword_list_add_button_clicked_cb (GtkButton * |
390 | button, | 293 | button, |
391 | gpointer | 294 | struct EditPublicationDialogContext *ctx) |
392 | user_data) | ||
393 | { | 295 | { |
394 | const char *keyword; | 296 | const char *keyword; |
395 | GtkEntry *entry; | ||
396 | GtkListStore *ls; | ||
397 | GtkTreeIter iter; | 297 | GtkTreeIter iter; |
398 | GtkBuilder *builder; | ||
399 | GtkWidget *ok; | ||
400 | 298 | ||
401 | builder = GTK_BUILDER (user_data); | 299 | keyword = gtk_entry_get_text (ctx->keyword_entry); |
402 | |||
403 | ls = GTK_LIST_STORE (gtk_builder_get_object | ||
404 | (builder, "GNUNET_GTK_publication_keywords_liststore")); | ||
405 | entry = | ||
406 | GTK_ENTRY (gtk_builder_get_object | ||
407 | (builder, "GNUNET_GTK_edit_publication_keyword_entry")); | ||
408 | keyword = gtk_entry_get_text (entry); | ||
409 | if (strlen (keyword) > 0) | 300 | if (strlen (keyword) > 0) |
410 | { | 301 | { |
411 | gtk_list_store_insert_with_values (ls, &iter, G_MAXINT, 0, keyword, 1, TRUE, | 302 | gtk_list_store_insert_with_values (ctx->keywords_liststore, &iter, G_MAXINT, 0, keyword, 1, TRUE, |
412 | -1); | 303 | -1); |
413 | ok = GTK_WIDGET (gtk_builder_get_object | 304 | gtk_widget_set_sensitive (ctx->ok, TRUE); |
414 | (builder, "GNUNET_GTK_edit_publication_confirm_button")); | ||
415 | gtk_widget_set_sensitive (ok, TRUE); | ||
416 | } | 305 | } |
417 | gtk_entry_set_text (entry, ""); | 306 | gtk_entry_set_text (ctx->keyword_entry, ""); |
418 | } | 307 | } |
419 | 308 | ||
420 | 309 | ||
@@ -441,112 +330,47 @@ gtk_tree_model_has_items (GtkTreeModel * model) | |||
441 | 330 | ||
442 | void | 331 | void |
443 | GNUNET_GTK_edit_publication_keyword_entry_changed_cb (GtkEditable * editable, | 332 | GNUNET_GTK_edit_publication_keyword_entry_changed_cb (GtkEditable * editable, |
444 | gpointer user_data) | 333 | struct EditPublicationDialogContext *ctx) |
445 | { | 334 | { |
446 | const char *keyword; | 335 | const char *keyword; |
447 | GtkEntry *entry; | ||
448 | GtkWidget *button; | ||
449 | GtkBuilder *builder; | ||
450 | |||
451 | builder = GTK_BUILDER (user_data); | ||
452 | 336 | ||
453 | button = | 337 | keyword = gtk_entry_get_text (ctx->keyword_entry); |
454 | GTK_WIDGET (gtk_builder_get_object | 338 | gtk_widget_set_sensitive (ctx->keyword_add_button, (strlen (keyword) > 0) ? TRUE : FALSE); |
455 | (builder, | ||
456 | "GNUNET_GTK_edit_publication_keyword_list_add_button")); | ||
457 | entry = | ||
458 | GTK_ENTRY (gtk_builder_get_object | ||
459 | (builder, "GNUNET_GTK_edit_publication_keyword_entry")); | ||
460 | keyword = gtk_entry_get_text (entry); | ||
461 | gtk_widget_set_sensitive (button, (strlen (keyword) > 0) ? TRUE : FALSE); | ||
462 | } | 339 | } |
463 | 340 | ||
464 | 341 | ||
465 | void | 342 | void |
466 | GNUNET_GTK_edit_publication_keyword_list_del_button_clicked_cb (GtkButton * | 343 | GNUNET_GTK_edit_publication_keyword_list_del_button_clicked_cb (GtkButton * |
467 | button, | 344 | button, |
468 | gpointer | 345 | struct EditPublicationDialogContext *ctx) |
469 | user_data) | ||
470 | { | 346 | { |
471 | GtkTreeView *tv; | ||
472 | GtkTreeSelection *sel; | ||
473 | GtkTreeModel *tm; | ||
474 | GtkTreeIter iter; | 347 | GtkTreeIter iter; |
475 | GtkBuilder *builder; | ||
476 | GtkWidget *ok; | ||
477 | GObject *pubwindow; | ||
478 | struct EditPublicationState *state = NULL; | ||
479 | |||
480 | builder = GTK_BUILDER (user_data); | ||
481 | |||
482 | tv = GTK_TREE_VIEW (gtk_builder_get_object | ||
483 | (builder, | ||
484 | "GNUNET_GTK_edit_publication_keyword_list_tree_view")); | ||
485 | 348 | ||
486 | sel = gtk_tree_view_get_selection (tv); | 349 | if (TRUE != gtk_tree_selection_get_selected (ctx->keywords_selection, NULL, &iter)) |
487 | if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter)) | ||
488 | { | 350 | { |
489 | GNUNET_break (0); | 351 | GNUNET_break (0); |
490 | return; | 352 | return; |
491 | } | 353 | } |
492 | if (gtk_list_store_remove (GTK_LIST_STORE (tm), &iter)) | 354 | if (gtk_list_store_remove (GTK_LIST_STORE (ctx->keywords_liststore), &iter)) |
493 | gtk_tree_selection_select_iter (sel, &iter); | 355 | gtk_tree_selection_select_iter (ctx->keywords_selection, &iter); |
494 | 356 | ||
495 | ok = GTK_WIDGET (gtk_builder_get_object | 357 | if (!ctx->allow_no_keywords && !gtk_tree_model_has_items (GTK_TREE_MODEL (ctx->keywords_liststore))) |
496 | (builder, "GNUNET_GTK_edit_publication_confirm_button")); | 358 | gtk_widget_set_sensitive (ctx->ok, FALSE); |
497 | |||
498 | pubwindow = | ||
499 | gtk_builder_get_object (builder, "GNUNET_GTK_edit_publication_window"); | ||
500 | state = g_object_get_data (pubwindow, PUBSTATE); | ||
501 | if (!state) | ||
502 | { | ||
503 | GNUNET_break (0); | ||
504 | return; | ||
505 | } | ||
506 | |||
507 | if (!state->allow_no_keywords && !gtk_tree_model_has_items (tm)) | ||
508 | gtk_widget_set_sensitive (ok, FALSE); | ||
509 | } | 359 | } |
510 | 360 | ||
511 | 361 | ||
512 | void GNUNET_GTK_edit_publication_metadata_preview_file_chooser_button_file_set_cb (GtkFileChooserButton * widget, gpointer user_data) | 362 | void GNUNET_GTK_edit_publication_metadata_preview_file_chooser_button_file_set_cb ( |
363 | GtkFileChooserButton * widget, struct EditPublicationDialogContext *ctx) | ||
513 | { | 364 | { |
514 | gchar *fn; | 365 | gchar *fn; |
515 | GtkImage *image; | ||
516 | GObject *pubwindow; | ||
517 | GtkBuilder *builder = GTK_BUILDER (user_data); | ||
518 | struct EditPublicationState *state = NULL; | ||
519 | |||
520 | pubwindow = | ||
521 | gtk_builder_get_object (builder, "GNUNET_GTK_edit_publication_window"); | ||
522 | state = g_object_get_data (pubwindow, PUBSTATE); | ||
523 | if (!state) | ||
524 | { | ||
525 | GNUNET_break (0); | ||
526 | return; | ||
527 | } | ||
528 | 366 | ||
529 | fn = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget)); | 367 | fn = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget)); |
530 | image = | 368 | gtk_image_set_from_file (ctx->image, fn); |
531 | GTK_IMAGE (gtk_builder_get_object | ||
532 | (builder, | ||
533 | "GNUNET_GTK_edit_publication_metadata_preview_image")); | ||
534 | gtk_image_set_from_file (image, fn); | ||
535 | g_free (fn); | 369 | g_free (fn); |
536 | state->preview_changed = GNUNET_YES; | 370 | ctx->preview_changed = GNUNET_YES; |
537 | } | 371 | } |
538 | 372 | ||
539 | 373 | ||
540 | struct FileInformationUpdateContext | ||
541 | { | ||
542 | GtkBuilder *builder; | ||
543 | char *short_fn; | ||
544 | gchar *root; | ||
545 | struct GNUNET_CONTAINER_MetaData *md; | ||
546 | gboolean allow_no_keywords; | ||
547 | }; | ||
548 | |||
549 | |||
550 | /** | 374 | /** |
551 | * Copy binary meta data from to the new container and also | 375 | * Copy binary meta data from to the new container and also |
552 | * preserve all entries that were not changed. | 376 | * preserve all entries that were not changed. |
@@ -571,58 +395,41 @@ preserve_meta_items (void *cls, const char *plugin_name, | |||
571 | const char *data_mime_type, const char *data, | 395 | const char *data_mime_type, const char *data, |
572 | size_t data_len) | 396 | size_t data_len) |
573 | { | 397 | { |
574 | struct FileInformationUpdateContext *context = cls; | 398 | struct EditPublicationDialogContext *ctx = cls; |
575 | GtkBuilder *builder = context->builder; | ||
576 | struct GNUNET_CONTAINER_MetaData *md = context->md; | ||
577 | GtkTreeModel *tm; | ||
578 | GtkTreeIter iter; | 399 | GtkTreeIter iter; |
579 | gchar *value; | 400 | gchar *value; |
580 | guint ntype; | 401 | guint ntype; |
581 | guint nformat; | 402 | guint nformat; |
582 | int keep; | 403 | int keep; |
583 | 404 | ||
584 | GObject *pubwindow; | ||
585 | struct EditPublicationState *state = NULL; | ||
586 | |||
587 | pubwindow = | ||
588 | gtk_builder_get_object (builder, "GNUNET_GTK_edit_publication_window"); | ||
589 | state = g_object_get_data (pubwindow, PUBSTATE); | ||
590 | if (!state) | ||
591 | { | ||
592 | GNUNET_break (0); | ||
593 | return 0; | ||
594 | } | ||
595 | /* FIXME: make sure this is all correct UTF-8-wise */ | 405 | /* FIXME: make sure this is all correct UTF-8-wise */ |
596 | keep = GNUNET_NO; | 406 | keep = GNUNET_NO; |
597 | switch (format) | 407 | switch (format) |
598 | { | 408 | { |
599 | case EXTRACTOR_METAFORMAT_UTF8: | 409 | case EXTRACTOR_METAFORMAT_UTF8: |
600 | case EXTRACTOR_METAFORMAT_C_STRING: | 410 | case EXTRACTOR_METAFORMAT_C_STRING: |
601 | tm = GTK_TREE_MODEL (gtk_builder_get_object | 411 | if (TRUE == gtk_tree_model_get_iter_first (GTK_TREE_MODEL (ctx->meta_liststore), &iter)) |
602 | (builder, | ||
603 | "GNUNET_GTK_publication_metadata_liststore")); | ||
604 | if (TRUE == gtk_tree_model_get_iter_first (tm, &iter)) | ||
605 | { | 412 | { |
606 | do | 413 | do |
607 | { | 414 | { |
608 | gtk_tree_model_get (tm, &iter, 0, &ntype, 1, &nformat, 3, &value, -1); | 415 | gtk_tree_model_get (GTK_TREE_MODEL (ctx->meta_liststore), &iter, 0, &ntype, 1, &nformat, 3, &value, -1); |
609 | if ((ntype == type) && (nformat == format) && | 416 | if ((ntype == type) && (nformat == format) && |
610 | (0 == strcmp (value, data))) | 417 | (0 == strcmp (value, data))) |
611 | { | 418 | { |
612 | gtk_list_store_remove (GTK_LIST_STORE (tm), &iter); | 419 | gtk_list_store_remove (ctx->meta_liststore, &iter); |
613 | keep = GNUNET_YES; | 420 | keep = GNUNET_YES; |
614 | g_free (value); | 421 | g_free (value); |
615 | break; | 422 | break; |
616 | } | 423 | } |
617 | g_free (value); | 424 | g_free (value); |
618 | } | 425 | } |
619 | while (TRUE == gtk_tree_model_iter_next (tm, &iter)); | 426 | while (TRUE == gtk_tree_model_iter_next (GTK_TREE_MODEL (ctx->meta_liststore), &iter)); |
620 | } | 427 | } |
621 | break; | 428 | break; |
622 | case EXTRACTOR_METAFORMAT_UNKNOWN: | 429 | case EXTRACTOR_METAFORMAT_UNKNOWN: |
623 | break; | 430 | break; |
624 | case EXTRACTOR_METAFORMAT_BINARY: | 431 | case EXTRACTOR_METAFORMAT_BINARY: |
625 | if (state->preview_changed == GNUNET_NO) | 432 | if (ctx->preview_changed == GNUNET_NO) |
626 | keep = GNUNET_YES; | 433 | keep = GNUNET_YES; |
627 | break; | 434 | break; |
628 | default: | 435 | default: |
@@ -631,7 +438,7 @@ preserve_meta_items (void *cls, const char *plugin_name, | |||
631 | } | 438 | } |
632 | if (GNUNET_YES == keep) | 439 | if (GNUNET_YES == keep) |
633 | GNUNET_break (GNUNET_OK == | 440 | GNUNET_break (GNUNET_OK == |
634 | GNUNET_CONTAINER_meta_data_insert (md, plugin_name, type, | 441 | GNUNET_CONTAINER_meta_data_insert (ctx->md, plugin_name, type, |
635 | format, data_mime_type, | 442 | format, data_mime_type, |
636 | data, data_len)); | 443 | data, data_len)); |
637 | return 0; | 444 | return 0; |
@@ -659,68 +466,32 @@ file_information_update (void *cls, struct GNUNET_FS_FileInformation *fi, | |||
659 | struct GNUNET_FS_BlockOptions *bo, int *do_index, | 466 | struct GNUNET_FS_BlockOptions *bo, int *do_index, |
660 | void **client_info) | 467 | void **client_info) |
661 | { | 468 | { |
662 | struct FileInformationUpdateContext *context = cls; | 469 | struct EditPublicationDialogContext *ctx = cls; |
663 | char **short_fn = &context->short_fn; | ||
664 | GtkBuilder *builder = context->builder; | ||
665 | struct GNUNET_CONTAINER_MetaData *nm; | ||
666 | GtkTreeModel *tm; | ||
667 | GtkTreeIter iter; | 470 | GtkTreeIter iter; |
668 | struct GNUNET_FS_Uri *nxt; | 471 | struct GNUNET_FS_Uri *nxt; |
669 | struct GNUNET_FS_Uri *mrg; | 472 | struct GNUNET_FS_Uri *mrg; |
670 | gchar *value; | 473 | gchar *value; |
671 | guint ntype; | 474 | guint ntype; |
672 | guint nformat; | 475 | guint nformat; |
673 | GtkSpinButton *sb; | ||
674 | gchar *fn; | 476 | gchar *fn; |
675 | char *data; | 477 | char *data; |
676 | gsize data_size; | 478 | gsize data_size; |
677 | const char *mime; | 479 | const char *mime; |
678 | GFile *f; | 480 | GFile *f; |
679 | GFileInfo *finfo; | 481 | GFileInfo *finfo; |
680 | GObject *pubwindow; | ||
681 | struct EditPublicationState *state = NULL; | ||
682 | 482 | ||
683 | pubwindow = | 483 | if (!GNUNET_GTK_get_selected_anonymity_combo_level |
684 | gtk_builder_get_object (builder, "GNUNET_GTK_edit_publication_window"); | 484 | (ctx->anonymity_combo, &ctx->bo.anonymity_level)) |
685 | state = g_object_get_data (pubwindow, PUBSTATE); | ||
686 | if (!state) | ||
687 | { | ||
688 | GNUNET_break (0); | ||
689 | return GNUNET_SYSERR; | 485 | return GNUNET_SYSERR; |
690 | } | 486 | ctx->bo.content_priority = gtk_spin_button_get_value (ctx->priority_spin); |
487 | ctx->bo.replication_level = gtk_spin_button_get_value (ctx->replication_spin); | ||
488 | *do_index = gtk_toggle_button_get_active (ctx->index_checkbutton); | ||
489 | ctx->bo.expiration_time = GNUNET_FS_GTK_get_expiration_time (ctx->year_spin); | ||
691 | 490 | ||
692 | if (!GNUNET_GTK_get_selected_anonymity_level | 491 | if (!ctx->allow_no_keywords) |
693 | (builder, "GNUNET_GTK_edit_publication_anonymity_combobox", | ||
694 | &bo->anonymity_level)) | ||
695 | return GNUNET_SYSERR; | ||
696 | bo->content_priority = | ||
697 | gtk_spin_button_get_value (GTK_SPIN_BUTTON | ||
698 | (gtk_builder_get_object | ||
699 | (builder, | ||
700 | "GNUNET_GTK_edit_publication_priority_spin_button"))); | ||
701 | bo->replication_level = | ||
702 | gtk_spin_button_get_value (GTK_SPIN_BUTTON | ||
703 | (gtk_builder_get_object | ||
704 | (builder, | ||
705 | "GNUNET_GTK_edit_publication_replication_spin_button"))); | ||
706 | *do_index = | ||
707 | gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON | ||
708 | (gtk_builder_get_object | ||
709 | (builder, | ||
710 | "GNUNET_GTK_edit_publication_index_checkbutton"))); | ||
711 | sb = GTK_SPIN_BUTTON (gtk_builder_get_object | ||
712 | (builder, | ||
713 | "GNUNET_GTK_edit_publication_expiration_year_spin_button")); | ||
714 | bo->expiration_time = GNUNET_FS_GTK_get_expiration_time (sb); | ||
715 | |||
716 | if (!context->allow_no_keywords) | ||
717 | { | 492 | { |
718 | g_free (context->root); | 493 | g_free (ctx->root); |
719 | context->root = | 494 | ctx->root = g_strdup (gtk_entry_get_text (ctx->root_entry)); |
720 | g_strdup (gtk_entry_get_text | ||
721 | (GTK_ENTRY | ||
722 | (gtk_builder_get_object | ||
723 | (builder, "GNUNET_GTK_edit_publication_root_entry")))); | ||
724 | } | 495 | } |
725 | /* update URI */ | 496 | /* update URI */ |
726 | if (NULL != (*uri)) | 497 | if (NULL != (*uri)) |
@@ -729,13 +500,11 @@ file_information_update (void *cls, struct GNUNET_FS_FileInformation *fi, | |||
729 | nxt = NULL; | 500 | nxt = NULL; |
730 | mrg = NULL; | 501 | mrg = NULL; |
731 | 502 | ||
732 | tm = GTK_TREE_MODEL (gtk_builder_get_object | 503 | if (TRUE == gtk_tree_model_get_iter_first (GTK_TREE_MODEL (ctx->keywords_liststore), &iter)) |
733 | (builder, "GNUNET_GTK_publication_keywords_liststore")); | ||
734 | if (TRUE == gtk_tree_model_get_iter_first (tm, &iter)) | ||
735 | { | 504 | { |
736 | do | 505 | do |
737 | { | 506 | { |
738 | gtk_tree_model_get (tm, &iter, 0, &value, -1); | 507 | gtk_tree_model_get (GTK_TREE_MODEL (ctx->keywords_liststore), &iter, 0, &value, -1); |
739 | nxt = GNUNET_FS_uri_ksk_create_from_args (1, (const char **) &value); | 508 | nxt = GNUNET_FS_uri_ksk_create_from_args (1, (const char **) &value); |
740 | mrg = GNUNET_FS_uri_ksk_merge (nxt, *uri); | 509 | mrg = GNUNET_FS_uri_ksk_merge (nxt, *uri); |
741 | GNUNET_FS_uri_destroy (nxt); | 510 | GNUNET_FS_uri_destroy (nxt); |
@@ -744,36 +513,33 @@ file_information_update (void *cls, struct GNUNET_FS_FileInformation *fi, | |||
744 | *uri = mrg; | 513 | *uri = mrg; |
745 | g_free (value); | 514 | g_free (value); |
746 | } | 515 | } |
747 | while (TRUE == gtk_tree_model_iter_next (tm, &iter)); | 516 | while (TRUE == gtk_tree_model_iter_next (GTK_TREE_MODEL (ctx->keywords_liststore), &iter)); |
748 | } | 517 | } |
749 | 518 | ||
750 | /* update meta */ | 519 | /* update meta */ |
751 | nm = GNUNET_CONTAINER_meta_data_create (); | 520 | ctx->md = GNUNET_CONTAINER_meta_data_create (); |
752 | context->md = nm; | 521 | GNUNET_CONTAINER_meta_data_iterate (meta, &preserve_meta_items, ctx); |
753 | GNUNET_CONTAINER_meta_data_iterate (meta, &preserve_meta_items, context); | ||
754 | 522 | ||
755 | GNUNET_CONTAINER_meta_data_clear (meta); | 523 | GNUNET_CONTAINER_meta_data_clear (meta); |
756 | tm = GTK_TREE_MODEL (gtk_builder_get_object | 524 | if (TRUE == gtk_tree_model_get_iter_first (GTK_TREE_MODEL (ctx->meta_liststore), &iter)) |
757 | (builder, "GNUNET_GTK_publication_metadata_liststore")); | ||
758 | if (TRUE == gtk_tree_model_get_iter_first (tm, &iter)) | ||
759 | { | 525 | { |
760 | do | 526 | do |
761 | { | 527 | { |
762 | gtk_tree_model_get (tm, &iter, 0, &ntype, 1, &nformat, 3, &value, -1); | 528 | gtk_tree_model_get (GTK_TREE_MODEL (ctx->meta_liststore), &iter, 0, &ntype, 1, &nformat, 3, &value, -1); |
763 | if (ntype > 0) | 529 | if (ntype > 0) |
764 | GNUNET_CONTAINER_meta_data_insert (nm, "<user>", ntype, nformat, | 530 | GNUNET_CONTAINER_meta_data_insert (ctx->md, "<user>", ntype, nformat, |
765 | "text/plain", value, | 531 | "text/plain", value, |
766 | strlen (value) + 1); | 532 | strlen (value) + 1); |
767 | g_free (value); | 533 | g_free (value); |
768 | } | 534 | } |
769 | while (TRUE == gtk_tree_model_iter_next (tm, &iter)); | 535 | while (TRUE == gtk_tree_model_iter_next (GTK_TREE_MODEL (ctx->meta_liststore), &iter)); |
770 | } | 536 | } |
771 | GNUNET_CONTAINER_meta_data_merge (meta, nm); | 537 | GNUNET_CONTAINER_meta_data_merge (meta, ctx->md); |
772 | if (state->preview_changed == GNUNET_YES) | 538 | if (ctx->preview_changed == GNUNET_YES) |
773 | { | 539 | { |
774 | fn = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER | 540 | fn = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER |
775 | (gtk_builder_get_object | 541 | (gtk_builder_get_object |
776 | (builder, | 542 | (ctx->builder, |
777 | "GNUNET_GTK_edit_publication_metadata_preview_file_chooser_button"))); | 543 | "GNUNET_GTK_edit_publication_metadata_preview_file_chooser_button"))); |
778 | f = g_file_new_for_path (fn); | 544 | f = g_file_new_for_path (fn); |
779 | finfo = | 545 | finfo = |
@@ -798,11 +564,11 @@ file_information_update (void *cls, struct GNUNET_FS_FileInformation *fi, | |||
798 | g_object_unref (f); | 564 | g_object_unref (f); |
799 | g_free (fn); | 565 | g_free (fn); |
800 | } | 566 | } |
801 | GNUNET_CONTAINER_meta_data_destroy (nm); | 567 | GNUNET_CONTAINER_meta_data_destroy (ctx->md); |
802 | 568 | ||
803 | /* update short_fn */ | 569 | /* update short_fn */ |
804 | GNUNET_free_non_null (*short_fn); | 570 | GNUNET_free_non_null (ctx->short_fn); |
805 | *short_fn = | 571 | ctx->short_fn = |
806 | GNUNET_CONTAINER_meta_data_get_first_by_types (meta, | 572 | GNUNET_CONTAINER_meta_data_get_first_by_types (meta, |
807 | EXTRACTOR_METATYPE_FILENAME, | 573 | EXTRACTOR_METATYPE_FILENAME, |
808 | -1); | 574 | -1); |
@@ -813,110 +579,42 @@ file_information_update (void *cls, struct GNUNET_FS_FileInformation *fi, | |||
813 | 579 | ||
814 | void | 580 | void |
815 | GNUNET_GTK_edit_publication_cancel_button_clicked_cb (GtkButton * button, | 581 | GNUNET_GTK_edit_publication_cancel_button_clicked_cb (GtkButton * button, |
816 | gpointer user_data) | 582 | struct EditPublicationDialogContext *ctx) |
817 | { | 583 | { |
818 | GtkBuilder *builder; | 584 | ctx->cb (ctx->cls, ctx->do_index, ctx->short_fn, |
819 | GObject *pubwindow; | 585 | &ctx->bo, NULL, GTK_RESPONSE_CANCEL); |
820 | struct EditPublicationState *state = NULL; | 586 | gtk_widget_destroy (GTK_WIDGET (ctx->pubwindow)); |
821 | |||
822 | builder = GTK_BUILDER (user_data); | ||
823 | |||
824 | pubwindow = | ||
825 | gtk_builder_get_object (builder, "GNUNET_GTK_edit_publication_window"); | ||
826 | state = g_object_get_data (pubwindow, PUBSTATE); | ||
827 | if (!state) | ||
828 | { | ||
829 | GNUNET_break (0); | ||
830 | return; | ||
831 | } | ||
832 | |||
833 | state->cb (state->cls, state->do_index, state->short_fn, | ||
834 | &state->bo, NULL, | ||
835 | GTK_RESPONSE_CANCEL); | ||
836 | g_free (state); | ||
837 | g_object_set_data (pubwindow, PUBSTATE, NULL); | ||
838 | gtk_widget_hide (GTK_WIDGET (pubwindow)); | ||
839 | } | 587 | } |
840 | 588 | ||
841 | 589 | ||
842 | void | 590 | void |
843 | GNUNET_GTK_edit_publication_confirm_button_clicked_cb (GtkButton * button, | 591 | GNUNET_GTK_edit_publication_confirm_button_clicked_cb (GtkButton * button, |
844 | gpointer user_data) | 592 | struct EditPublicationDialogContext *ctx) |
845 | { | 593 | { |
846 | GtkBuilder *builder; | ||
847 | GObject *pubwindow; | ||
848 | struct EditPublicationState *state; | ||
849 | struct FileInformationUpdateContext ctx; | ||
850 | gint year; | 594 | gint year; |
851 | builder = GTK_BUILDER (user_data); | ||
852 | 595 | ||
853 | pubwindow = | 596 | GNUNET_FS_file_information_inspect (ctx->fip, &file_information_update, ctx); |
854 | gtk_builder_get_object (builder, "GNUNET_GTK_edit_publication_window"); | 597 | if (!GNUNET_GTK_get_selected_anonymity_combo_level (ctx->anonymity_combo, |
855 | state = g_object_get_data (pubwindow, PUBSTATE); | 598 | &ctx->bo.anonymity_level)) |
856 | if (!state) | 599 | ctx->bo.content_priority = gtk_spin_button_get_value (ctx->priority_spin); |
857 | { | 600 | ctx->bo.replication_level = gtk_spin_button_get_value (ctx->replication_spin); |
858 | GNUNET_break (0); | 601 | |
859 | return; | 602 | ctx->do_index = gtk_toggle_button_get_active (ctx->index_checkbutton); |
860 | } | 603 | year = gtk_spin_button_get_value (ctx->year_spin); |
861 | 604 | ctx->bo.expiration_time = GNUNET_FS_year_to_time (year); | |
862 | ctx.builder = builder; | 605 | ctx->cb (ctx->cls, ctx->do_index, ctx->short_fn, |
863 | ctx.short_fn = state->short_fn; | 606 | &ctx->bo, ctx->root, GTK_RESPONSE_OK); |
864 | ctx.root = NULL; | 607 | GNUNET_free_non_null (ctx->short_fn); |
865 | ctx.md = NULL; | 608 | gtk_widget_destroy (GTK_WIDGET (ctx->pubwindow)); |
866 | ctx.allow_no_keywords = state->allow_no_keywords; | ||
867 | |||
868 | GNUNET_FS_file_information_inspect (state->fip, &file_information_update, | ||
869 | &ctx); | ||
870 | state->short_fn = ctx.short_fn; | ||
871 | if (!GNUNET_GTK_get_selected_anonymity_level | ||
872 | (builder, "GNUNET_GTK_edit_publication_anonymity_combobox", | ||
873 | &state->bo.anonymity_level)) | ||
874 | state->bo.content_priority = | ||
875 | gtk_spin_button_get_value (GTK_SPIN_BUTTON | ||
876 | (gtk_builder_get_object | ||
877 | (builder, | ||
878 | "GNUNET_GTK_edit_publication_priority_spin_button"))); | ||
879 | state->bo.replication_level = | ||
880 | gtk_spin_button_get_value (GTK_SPIN_BUTTON | ||
881 | (gtk_builder_get_object | ||
882 | (builder, | ||
883 | "GNUNET_GTK_edit_publication_replication_spin_button"))); | ||
884 | |||
885 | state->do_index = | ||
886 | gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON | ||
887 | (gtk_builder_get_object | ||
888 | (builder, | ||
889 | "GNUNET_GTK_edit_publication_index_checkbutton"))); | ||
890 | year = gtk_spin_button_get_value (GTK_SPIN_BUTTON | ||
891 | (gtk_builder_get_object | ||
892 | (builder, | ||
893 | "GNUNET_GTK_edit_publication_expiration_year_spin_button"))); | ||
894 | state->bo.expiration_time = GNUNET_FS_year_to_time (year); | ||
895 | state->cb (state->cls, state->do_index, state->short_fn, | ||
896 | &state->bo, ctx.root, | ||
897 | GTK_RESPONSE_OK); | ||
898 | GNUNET_free_non_null (state->short_fn); | ||
899 | GNUNET_free (state); | ||
900 | g_object_set_data (pubwindow, PUBSTATE, NULL); | ||
901 | gtk_widget_hide (GTK_WIDGET (pubwindow)); | ||
902 | } | 609 | } |
903 | 610 | ||
904 | 611 | ||
905 | gboolean | 612 | gboolean |
906 | GNUNET_GTK_edit_publication_window_delete_event_cb (GtkWidget * widget, | 613 | GNUNET_GTK_edit_publication_window_delete_event_cb (GtkWidget * widget, |
907 | GdkEvent * event, | 614 | GdkEvent * event, |
908 | gpointer user_data) | 615 | struct EditPublicationDialogContext *ctx) |
909 | { | 616 | { |
910 | GtkBuilder *builder; | 617 | GNUNET_GTK_edit_publication_cancel_button_clicked_cb (ctx->cancel, ctx); |
911 | GtkButton *button; | ||
912 | |||
913 | builder = GTK_BUILDER (user_data); | ||
914 | |||
915 | button = | ||
916 | GTK_BUTTON (gtk_builder_get_object | ||
917 | (builder, "GNUNET_GTK_edit_publication_cancel_button")); | ||
918 | |||
919 | GNUNET_GTK_edit_publication_cancel_button_clicked_cb (button, user_data); | ||
920 | return TRUE; | 618 | return TRUE; |
921 | } | 619 | } |
922 | 620 | ||
@@ -962,162 +660,202 @@ file_information_extract (void *cls, struct GNUNET_FS_FileInformation *fi, | |||
962 | struct GNUNET_FS_BlockOptions *bo, int *do_index, | 660 | struct GNUNET_FS_BlockOptions *bo, int *do_index, |
963 | void **client_info) | 661 | void **client_info) |
964 | { | 662 | { |
965 | GtkBuilder *builder = GTK_BUILDER (cls); | 663 | struct EditPublicationDialogContext *ctx = cls; |
966 | GtkImage *img; | ||
967 | GdkPixbuf *pixbuf; | 664 | GdkPixbuf *pixbuf; |
968 | int year; | 665 | int year; |
969 | GtkListStore *ls; | ||
970 | |||
971 | ls = GTK_LIST_STORE (gtk_builder_get_object | ||
972 | (builder, "GNUNET_GTK_publication_keywords_liststore")); | ||
973 | 666 | ||
974 | if (NULL != *uri) | 667 | if (NULL != *uri) |
975 | GNUNET_FS_uri_ksk_get_keywords (*uri, &add_keyword, ls); | 668 | GNUNET_FS_uri_ksk_get_keywords (*uri, &add_keyword, ctx->keywords_liststore); |
976 | if (NULL != meta) | 669 | if (NULL != meta) |
977 | { | 670 | { |
978 | ls = GTK_LIST_STORE (gtk_builder_get_object | ||
979 | (builder, | ||
980 | "GNUNET_GTK_publication_metadata_liststore")); | ||
981 | GNUNET_CONTAINER_meta_data_iterate (meta, | 671 | GNUNET_CONTAINER_meta_data_iterate (meta, |
982 | &GNUNET_FS_GTK_add_meta_data_to_list_store, | 672 | &GNUNET_FS_GTK_add_meta_data_to_list_store, |
983 | ls); | 673 | ctx->meta_liststore); |
984 | pixbuf = GNUNET_FS_GTK_get_thumbnail_from_meta_data (meta); | 674 | pixbuf = GNUNET_FS_GTK_get_thumbnail_from_meta_data (meta); |
985 | if (pixbuf != NULL) | 675 | if (pixbuf != NULL) |
986 | { | 676 | { |
987 | img = | 677 | gtk_image_set_from_pixbuf (ctx->image, pixbuf); |
988 | GTK_IMAGE (gtk_builder_get_object | ||
989 | (builder, | ||
990 | "GNUNET_GTK_edit_publication_metadata_preview_image")); | ||
991 | gtk_image_set_from_pixbuf (img, pixbuf); | ||
992 | } | 678 | } |
993 | } | 679 | } |
994 | year = (int) GNUNET_FS_time_to_year (bo->expiration_time); | 680 | year = (int) GNUNET_FS_time_to_year (ctx->bo.expiration_time); |
995 | gtk_spin_button_set_value (GTK_SPIN_BUTTON | 681 | gtk_spin_button_set_value (ctx->year_spin, year); |
996 | (gtk_builder_get_object | 682 | GNUNET_GTK_select_anonymity_combo_level (ctx->anonymity_combo, |
997 | (builder, | 683 | ctx->bo.anonymity_level); |
998 | "GNUNET_GTK_edit_publication_expiration_year_spin_button")), | 684 | gtk_spin_button_set_value (ctx->priority_spin, ctx->bo.content_priority); |
999 | year); | 685 | gtk_spin_button_set_value (ctx->replication_spin, ctx->bo.replication_level); |
1000 | GNUNET_GTK_select_anonymity_level (builder, | 686 | gtk_toggle_button_set_active (ctx->index_checkbutton, *do_index); |
1001 | "GNUNET_GTK_edit_publication_anonymity_combobox", | ||
1002 | bo->anonymity_level); | ||
1003 | gtk_spin_button_set_value (GTK_SPIN_BUTTON | ||
1004 | (gtk_builder_get_object | ||
1005 | (builder, | ||
1006 | "GNUNET_GTK_edit_publication_priority_spin_button")), | ||
1007 | bo->content_priority); | ||
1008 | gtk_spin_button_set_value (GTK_SPIN_BUTTON | ||
1009 | (gtk_builder_get_object | ||
1010 | (builder, | ||
1011 | "GNUNET_GTK_edit_publication_replication_spin_button")), | ||
1012 | bo->replication_level); | ||
1013 | gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON | ||
1014 | (gtk_builder_get_object | ||
1015 | (builder, | ||
1016 | "GNUNET_GTK_edit_publication_index_checkbutton")), | ||
1017 | *do_index); | ||
1018 | return GNUNET_SYSERR; /* only visit top-level item */ | 687 | return GNUNET_SYSERR; /* only visit top-level item */ |
1019 | } | 688 | } |
1020 | 689 | ||
1021 | 690 | ||
691 | void | ||
692 | GNUNET_GTK_edit_publication_window_realize_cb (GtkWidget *widget, struct EditPublicationDialogContext *ctx) | ||
693 | { | ||
694 | ctx->keywords_selection = gtk_tree_view_get_selection (ctx->keywords_treeview); | ||
695 | ctx->meta_selection = gtk_tree_view_get_selection (ctx->meta_treeview); | ||
696 | |||
697 | g_signal_connect (G_OBJECT (ctx->keywords_selection), "changed", | ||
698 | G_CALLBACK (keywords_selection_changed_cb), ctx); | ||
699 | |||
700 | g_signal_connect (G_OBJECT (ctx->meta_selection), "changed", | ||
701 | G_CALLBACK (metadata_selection_changed_cb), ctx); | ||
702 | } | ||
703 | |||
1022 | /** | 704 | /** |
1023 | * Open the dialog to edit file information data. | 705 | * Open the dialog to edit file information data. |
1024 | * short_fn MUST be UTF-8-encoded | 706 | * short_fn MUST be UTF-8-encoded |
1025 | */ | 707 | */ |
1026 | void | 708 | void |
1027 | GNUNET_FS_GTK_edit_publish_dialog (GtkBuilder * builder, GtkWindow * parent, | 709 | GNUNET_FS_GTK_edit_publish_dialog (GtkWindow * parent, |
1028 | int do_index, const char *short_fn, | 710 | int do_index, const char *short_fn, |
1029 | const struct GNUNET_FS_BlockOptions *bo, | 711 | const struct GNUNET_FS_BlockOptions bo, |
1030 | struct GNUNET_FS_FileInformation *fip, | 712 | struct GNUNET_FS_FileInformation *fip, |
1031 | gboolean allow_no_keywords, | 713 | gboolean allow_no_keywords, |
714 | GtkListStore *anon_liststore, | ||
1032 | GNUNET_FS_GTK_EditPublishDialogCallback cb, | 715 | GNUNET_FS_GTK_EditPublishDialogCallback cb, |
1033 | gpointer cls) | 716 | gpointer cls) |
1034 | { | 717 | { |
1035 | GtkWidget *dialog; | ||
1036 | GObject *pubwindow; | ||
1037 | GtkEntry *entry; | ||
1038 | GtkWidget *ok; | ||
1039 | struct EditPublicationState *state; | ||
1040 | GtkListStore *pubtypes_list; | ||
1041 | GtkComboBox *pubtypes_combo; | ||
1042 | GtkTreeIter iter; | 718 | GtkTreeIter iter; |
1043 | gint code; | 719 | gint code; |
1044 | 720 | ||
1045 | GNUNET_FS_GTK_setup_expiration_year_adjustment (builder); | 721 | struct EditPublicationDialogContext *ctx; |
722 | |||
723 | ctx = GNUNET_malloc (sizeof (struct EditPublicationDialogContext)); | ||
724 | ctx->builder = GNUNET_GTK_get_new_builder ("gnunet_fs_gtk_edit_publication.glade", ctx); | ||
725 | |||
726 | if (ctx->builder == NULL) | ||
727 | { | ||
728 | GNUNET_free (ctx); | ||
729 | return; | ||
730 | } | ||
731 | |||
732 | ctx->pubtypes_liststore = | ||
733 | GTK_LIST_STORE (gtk_builder_get_object | ||
734 | (ctx->builder, "GNUNET_GTK_publication_types_liststore")); | ||
735 | ctx->metatypes_liststore = | ||
736 | GTK_LIST_STORE (gtk_builder_get_object | ||
737 | (ctx->builder, | ||
738 | "GNUNET_GTK_publication_metadata_types_liststore")); | ||
739 | ctx->meta_treeview = GTK_TREE_VIEW (gtk_builder_get_object | ||
740 | (ctx->builder, | ||
741 | "GNUNET_GTK_edit_publication_metadata_tree_view")); | ||
742 | ctx->meta_del_button = | ||
743 | GTK_WIDGET (gtk_builder_get_object | ||
744 | (ctx->builder, "GNUNET_GTK_edit_publication_delete_button")); | ||
745 | ctx->keywords_treeview = GTK_TREE_VIEW (gtk_builder_get_object | ||
746 | (ctx->builder, | ||
747 | "GNUNET_GTK_edit_publication_keyword_list_tree_view")); | ||
748 | ctx->keyword_del_button = | ||
749 | GTK_WIDGET (gtk_builder_get_object | ||
750 | (ctx->builder, | ||
751 | "GNUNET_GTK_edit_publication_keyword_list_del_button")); | ||
752 | ctx->meta_add_button = | ||
753 | GTK_BUTTON (gtk_builder_get_object | ||
754 | (ctx->builder, "GNUNET_GTK_edit_publication_add_button")); | ||
755 | ctx->meta_combo = | ||
756 | GTK_CELL_RENDERER_COMBO (gtk_builder_get_object | ||
757 | (ctx->builder, | ||
758 | "GNUNET_GTK_edit_publication_metadata_tree_view_type_renderer")); | ||
759 | ctx->pubwindow = | ||
760 | gtk_builder_get_object (ctx->builder, "GNUNET_GTK_edit_publication_window"); | ||
761 | ctx->keywords_liststore = GTK_LIST_STORE (gtk_builder_get_object | ||
762 | (ctx->builder, "GNUNET_GTK_publication_keywords_liststore")); | ||
763 | ctx->keyword_entry = | ||
764 | GTK_ENTRY (gtk_builder_get_object | ||
765 | (ctx->builder, "GNUNET_GTK_edit_publication_keyword_entry")); | ||
766 | ctx->ok = GTK_WIDGET (gtk_builder_get_object | ||
767 | (ctx->builder, "GNUNET_GTK_edit_publication_confirm_button")); | ||
768 | ctx->keyword_add_button = | ||
769 | GTK_WIDGET (gtk_builder_get_object | ||
770 | (ctx->builder, | ||
771 | "GNUNET_GTK_edit_publication_keyword_list_add_button")); | ||
772 | ctx->image = | ||
773 | GTK_IMAGE (gtk_builder_get_object | ||
774 | (ctx->builder, | ||
775 | "GNUNET_GTK_edit_publication_metadata_preview_image")); | ||
776 | ctx->meta_liststore = GTK_LIST_STORE (gtk_builder_get_object | ||
777 | (ctx->builder, | ||
778 | "GNUNET_GTK_publication_metadata_liststore")); | ||
779 | ctx->cancel = | ||
780 | GTK_BUTTON (gtk_builder_get_object | ||
781 | (ctx->builder, "GNUNET_GTK_edit_publication_cancel_button")); | ||
782 | |||
783 | ctx->index_label = GTK_LABEL (gtk_builder_get_object | ||
784 | (ctx->builder, "GNUNET_GTK_edit_publication_index_label")); | ||
785 | ctx->root_entry = GTK_ENTRY (gtk_builder_get_object | ||
786 | (ctx->builder, "GNUNET_GTK_edit_publication_root_entry")); | ||
787 | ctx->root_label = GTK_LABEL (gtk_builder_get_object | ||
788 | (ctx->builder, "GNUNET_GTK_edit_publication_root_label")); | ||
789 | |||
790 | ctx->pubtypes_combo = | ||
791 | GTK_COMBO_BOX (gtk_builder_get_object | ||
792 | (ctx->builder, "GNUNET_GTK_edit_publication_type_combo")); | ||
793 | |||
794 | ctx->year_spin = GTK_SPIN_BUTTON | ||
795 | (gtk_builder_get_object | ||
796 | (ctx->builder, | ||
797 | "GNUNET_GTK_edit_publication_expiration_year_spin_button")); | ||
798 | ctx->priority_spin = GTK_SPIN_BUTTON | ||
799 | (gtk_builder_get_object | ||
800 | (ctx->builder, | ||
801 | "GNUNET_GTK_edit_publication_priority_spin_button")); | ||
802 | ctx->replication_spin = GTK_SPIN_BUTTON | ||
803 | (gtk_builder_get_object | ||
804 | (ctx->builder, | ||
805 | "GNUNET_GTK_edit_publication_replication_spin_button")); | ||
806 | ctx->index_checkbutton = GTK_TOGGLE_BUTTON | ||
807 | (gtk_builder_get_object | ||
808 | (ctx->builder, | ||
809 | "GNUNET_GTK_edit_publication_index_checkbutton")); | ||
810 | ctx->anonymity_combo = GTK_COMBO_BOX (gtk_builder_get_object (ctx->builder, | ||
811 | "GNUNET_GTK_edit_publication_anonymity_combobox")); | ||
812 | gtk_combo_box_set_model (ctx->anonymity_combo, GTK_TREE_MODEL (anon_liststore)); | ||
813 | ctx->anonymity_liststore = anon_liststore; | ||
814 | |||
815 | GNUNET_FS_GTK_setup_expiration_year_adjustment (ctx->builder); | ||
1046 | /* indexing does not apply to directories */ | 816 | /* indexing does not apply to directories */ |
1047 | gtk_widget_set_visible (GTK_WIDGET | 817 | gtk_widget_set_visible (GTK_WIDGET (ctx->index_checkbutton), |
1048 | (gtk_builder_get_object | ||
1049 | (builder, | ||
1050 | "GNUNET_GTK_edit_publication_index_checkbutton")), | ||
1051 | !GNUNET_FS_file_information_is_directory (fip)); | 818 | !GNUNET_FS_file_information_is_directory (fip)); |
1052 | gtk_widget_set_visible (GTK_WIDGET | 819 | gtk_widget_set_visible (GTK_WIDGET (ctx->index_label), |
1053 | (gtk_builder_get_object | ||
1054 | (builder, "GNUNET_GTK_edit_publication_index_label")), | ||
1055 | !GNUNET_FS_file_information_is_directory (fip)); | 820 | !GNUNET_FS_file_information_is_directory (fip)); |
1056 | gtk_widget_set_visible (GTK_WIDGET | 821 | gtk_widget_set_visible (GTK_WIDGET (ctx->root_entry), |
1057 | (gtk_builder_get_object | ||
1058 | (builder, "GNUNET_GTK_edit_publication_root_entry")), | ||
1059 | !allow_no_keywords); | 822 | !allow_no_keywords); |
1060 | gtk_widget_set_visible (GTK_WIDGET | 823 | gtk_widget_set_visible (GTK_WIDGET (ctx->root_label), |
1061 | (gtk_builder_get_object | ||
1062 | (builder, "GNUNET_GTK_edit_publication_root_label")), | ||
1063 | !allow_no_keywords); | 824 | !allow_no_keywords); |
1064 | 825 | ||
1065 | gtk_list_store_clear (GTK_LIST_STORE | 826 | gtk_list_store_clear (ctx->keywords_liststore); |
1066 | (gtk_builder_get_object | 827 | gtk_list_store_clear (ctx->meta_liststore); |
1067 | (builder, | 828 | |
1068 | "GNUNET_GTK_publication_keywords_liststore"))); | ||
1069 | gtk_list_store_clear (GTK_LIST_STORE | ||
1070 | (gtk_builder_get_object | ||
1071 | (builder, | ||
1072 | "GNUNET_GTK_publication_metadata_liststore"))); | ||
1073 | |||
1074 | GNUNET_FS_file_information_inspect (fip, &file_information_extract, builder); | ||
1075 | dialog = | ||
1076 | GTK_WIDGET (gtk_builder_get_object | ||
1077 | (builder, "GNUNET_GTK_edit_publication_window")); | ||
1078 | if (NULL != short_fn) | 829 | if (NULL != short_fn) |
1079 | gtk_window_set_title (GTK_WINDOW (dialog), short_fn); | 830 | gtk_window_set_title (GTK_WINDOW (ctx->pubwindow), short_fn); |
1080 | else | 831 | else |
1081 | gtk_window_set_title (GTK_WINDOW (dialog), _("<unnamed>")); | 832 | gtk_window_set_title (GTK_WINDOW (ctx->pubwindow), _("<unnamed>")); |
1082 | pubtypes_list = | ||
1083 | GTK_LIST_STORE (gtk_builder_get_object | ||
1084 | (builder, "GNUNET_GTK_publication_types_liststore")); | ||
1085 | pubtypes_combo = | ||
1086 | GTK_COMBO_BOX (gtk_builder_get_object | ||
1087 | (builder, "GNUNET_GTK_edit_publication_type_combo")); | ||
1088 | 833 | ||
1089 | if (gtk_combo_box_get_active_iter (pubtypes_combo, &iter)) | 834 | if (gtk_combo_box_get_active_iter (ctx->pubtypes_combo, &iter)) |
1090 | { | 835 | { |
1091 | gtk_tree_model_get (GTK_TREE_MODEL (pubtypes_list), &iter, 0, &code, -1); | 836 | gtk_tree_model_get (GTK_TREE_MODEL (ctx->pubtypes_liststore), &iter, 0, &code, -1); |
1092 | change_metatypes (builder, 0); | 837 | change_metatypes (ctx, 0); |
1093 | } | 838 | } |
1094 | else | 839 | else |
1095 | gtk_combo_box_set_active (pubtypes_combo, 0); | 840 | gtk_combo_box_set_active (ctx->pubtypes_combo, 0); |
1096 | 841 | ||
1097 | state = GNUNET_malloc (sizeof (struct EditPublicationState)); | 842 | ctx->do_index = do_index; |
1098 | state->do_index = do_index; | ||
1099 | if (NULL != short_fn) | 843 | if (NULL != short_fn) |
1100 | state->short_fn = GNUNET_strdup (short_fn); | 844 | ctx->short_fn = GNUNET_strdup (short_fn); |
1101 | state->bo = *bo; | 845 | ctx->bo = bo; |
1102 | state->fip = fip; | 846 | ctx->fip = fip; |
1103 | state->preview_changed = GNUNET_NO; | 847 | ctx->preview_changed = GNUNET_NO; |
1104 | state->allow_no_keywords = allow_no_keywords; | 848 | ctx->allow_no_keywords = allow_no_keywords; |
1105 | state->is_directory = GNUNET_FS_file_information_is_directory (fip); | 849 | ctx->is_directory = GNUNET_FS_file_information_is_directory (fip); |
1106 | state->cb = cb; | 850 | ctx->cb = cb; |
1107 | state->cls = cls; | 851 | ctx->cls = cls; |
1108 | 852 | ||
1109 | entry = | 853 | GNUNET_FS_file_information_inspect (fip, &file_information_extract, ctx); |
1110 | GTK_ENTRY (gtk_builder_get_object | 854 | |
1111 | (builder, "GNUNET_GTK_edit_publication_keyword_entry")); | 855 | gtk_entry_set_text (ctx->keyword_entry, ""); |
1112 | gtk_entry_set_text (entry, ""); | 856 | gtk_widget_set_sensitive (ctx->ok, allow_no_keywords ? TRUE : FALSE); |
1113 | pubwindow = | 857 | gtk_window_set_transient_for (GTK_WINDOW (ctx->pubwindow), parent); |
1114 | gtk_builder_get_object (builder, "GNUNET_GTK_edit_publication_window"); | 858 | gtk_window_present (GTK_WINDOW (ctx->pubwindow)); |
1115 | g_object_set_data (pubwindow, PUBSTATE, state); | ||
1116 | ok = GTK_WIDGET (gtk_builder_get_object | ||
1117 | (builder, "GNUNET_GTK_edit_publication_confirm_button")); | ||
1118 | gtk_widget_set_sensitive (ok, allow_no_keywords ? TRUE : FALSE); | ||
1119 | gtk_window_set_transient_for (GTK_WINDOW (pubwindow), parent); | ||
1120 | gtk_window_present (GTK_WINDOW (dialog)); | ||
1121 | } | 859 | } |
1122 | 860 | ||
1123 | 861 | ||