aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2007-01-29 04:25:51 +0000
committerChristian Grothoff <christian@grothoff.org>2007-01-29 04:25:51 +0000
commit114486ee8b55c736089480dff30eb76491b39016 (patch)
tree92607cce7f39d1d6b43647bd4ce9e0f74ac0041d
parent896553254a8deda9c62b78c3b0d0c39c091511f1 (diff)
downloadgnunet-gtk-114486ee8b55c736089480dff30eb76491b39016.tar.gz
gnunet-gtk-114486ee8b55c736089480dff30eb76491b39016.zip
fixing Mantis 1042
-rw-r--r--ChangeLog4
-rw-r--r--configure.ac6
-rw-r--r--gnunet-gtk.glade2
-rw-r--r--po/Makefile.in2
-rw-r--r--src/plugins/fs/fs.c96
-rw-r--r--src/plugins/fs/fs.h15
-rw-r--r--src/plugins/fs/search.c86
-rw-r--r--src/plugins/fs/upload.c17
8 files changed, 211 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index 61eb838e..b524a628 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
1Sun Jan 28 20:16:46 MST 2007
2 Added ability to copy URIs of search results and
3 uploads to clipboard.
4
1Fri Dec 22 19:21:07 MST 2006 5Fri Dec 22 19:21:07 MST 2006
2 Releasing gnunet-gtk 0.7.1. 6 Releasing gnunet-gtk 0.7.1.
3 7
diff --git a/configure.ac b/configure.ac
index f09f7da1..2748fffe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
1# This file is part of GNUnet. 1# This file is part of GNUnet.
2# (C) 2001, 2002, 2003, 2004, 2005, 2006 Christian Grothoff (and other contributing authors) 2# (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Christian Grothoff (and other contributing authors)
3# 3#
4# GNUnet is free software; you can redistribute it and/or modify 4# GNUnet is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published 5# it under the terms of the GNU General Public License as published
@@ -20,8 +20,8 @@
20# Process this file with autoconf to produce a configure script. 20# Process this file with autoconf to produce a configure script.
21# 21#
22AC_PREREQ(2.57) 22AC_PREREQ(2.57)
23AC_INIT([gnunet-gtk],[0.7.1],[bug-gnunet@gnu.org]) 23AC_INIT([gnunet-gtk],[0.7.1b],[bug-gnunet@gnu.org])
24AM_INIT_AUTOMAKE([gnunet-gtk], [0.7.1]) 24AM_INIT_AUTOMAKE([gnunet-gtk], [0.7.1b])
25AM_CONFIG_HEADER(config.h) 25AM_CONFIG_HEADER(config.h)
26 26
27AH_TOP([#define _GNU_SOURCE 1]) 27AH_TOP([#define _GNU_SOURCE 1])
diff --git a/gnunet-gtk.glade b/gnunet-gtk.glade
index 322716df..b17509de 100644
--- a/gnunet-gtk.glade
+++ b/gnunet-gtk.glade
@@ -87,7 +87,7 @@
87 <child> 87 <child>
88 <widget class="GtkLabel" id="titleLabel"> 88 <widget class="GtkLabel" id="titleLabel">
89 <property name="visible">True</property> 89 <property name="visible">True</property>
90 <property name="label" translatable="yes">&lt;span size=&quot;x-large&quot;&gt;Welcome to gnunet-gtk 0.7.1pre2&lt;/span&gt;</property> 90 <property name="label" translatable="yes">&lt;span size=&quot;x-large&quot;&gt;Welcome to gnunet-gtk 0.7.1b&lt;/span&gt;</property>
91 <property name="use_underline">False</property> 91 <property name="use_underline">False</property>
92 <property name="use_markup">True</property> 92 <property name="use_markup">True</property>
93 <property name="justify">GTK_JUSTIFY_CENTER</property> 93 <property name="justify">GTK_JUSTIFY_CENTER</property>
diff --git a/po/Makefile.in b/po/Makefile.in
index 5d50a430..c7659930 100644
--- a/po/Makefile.in
+++ b/po/Makefile.in
@@ -11,7 +11,7 @@
11# Origin: gettext-0.13 11# Origin: gettext-0.13
12 12
13PACKAGE = gnunet-gtk 13PACKAGE = gnunet-gtk
14VERSION = 0.7.1 14VERSION = 0.7.1b
15 15
16SHELL = /bin/sh 16SHELL = /bin/sh
17 17
diff --git a/src/plugins/fs/fs.c b/src/plugins/fs/fs.c
index 58ddc34a..1bf8877f 100644
--- a/src/plugins/fs/fs.c
+++ b/src/plugins/fs/fs.c
@@ -51,6 +51,17 @@ GtkTreeStore * download_summary;
51 51
52GtkTreeStore * upload_summary; 52GtkTreeStore * upload_summary;
53 53
54/**
55 * Last right-click event coordinates in summary.
56 */
57static unsigned int last_x;
58
59/**
60 * Last right-click event coordinates in summary.
61 */
62static unsigned int last_y;
63
64
54static void * 65static void *
55saveEventProcessor(void * cls) { 66saveEventProcessor(void * cls) {
56 const FSUI_Event * event = cls; 67 const FSUI_Event * event = cls;
@@ -178,7 +189,7 @@ saveEventProcessor(void * cls) {
178 ret = fs_upload_started(event->data.UploadResumed.uc.pos, 189 ret = fs_upload_started(event->data.UploadResumed.uc.pos,
179 event->data.UploadResumed.uc.pcctx, 190 event->data.UploadResumed.uc.pcctx,
180 event->data.UploadResumed.filename, 191 event->data.UploadResumed.filename,
181 NULL, /* FIXME: maybe completed!? */ 192 event->data.UploadResumed.uri,
182 event->data.UploadResumed.total, 193 event->data.UploadResumed.total,
183 event->data.UploadResumed.completed, 194 event->data.UploadResumed.completed,
184 event->data.UploadResumed.state); 195 event->data.UploadResumed.state);
@@ -271,6 +282,85 @@ static void on_search_summary_selection_changed(gpointer signal,
271 gtk_tree_selection_count_selected_rows(selection) > 0); 282 gtk_tree_selection_count_selected_rows(selection) > 0);
272} 283}
273 284
285static int
286on_upload_copy_uri_activate(void * cls,
287 GtkWidget * searchEntry) {
288 GtkTreeView * uploadList = cls;
289 GtkTreePath *path;
290 GtkTreeIter iter;
291 struct ECRS_URI * uri;
292 char * str;
293 GtkClipboard * clip;
294
295 path = NULL;
296 if (FALSE == gtk_tree_view_get_path_at_pos(uploadList,
297 last_x,
298 last_y,
299 &path,
300 NULL,
301 NULL,
302 NULL)) {
303 GE_BREAK(NULL, 0);
304 return FALSE;
305 }
306 if (FALSE == gtk_tree_model_get_iter(GTK_TREE_MODEL(upload_summary),
307 &iter,
308 path)) {
309 GE_BREAK(NULL, 0);
310 gtk_tree_path_free(path);
311 return FALSE;
312 }
313 gtk_tree_path_free(path);
314 uri = NULL;
315 gtk_tree_model_get(GTK_TREE_MODEL(upload_summary),
316 &iter,
317 UPLOAD_URISTRING, &str,
318 -1);
319 clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
320 gtk_clipboard_set_text(clip,
321 str,
322 strlen(str));
323 FREE(str);
324 return FALSE;
325}
326
327static gint
328upload_click_handler(void * cls,
329 GdkEvent *event) {
330 GtkTreeView * uploadList = cls;
331 GtkMenu * menu;
332 GtkWidget * entry;
333 GdkEventButton * event_button;
334
335 g_return_val_if_fail (event != NULL, FALSE);
336 if (event->type != GDK_BUTTON_PRESS)
337 return FALSE;
338 event_button = (GdkEventButton *) event;
339 if (event_button->button != 3)
340 return FALSE;
341 last_x = event_button->x;
342 last_y = event_button->y;
343 entry = gtk_menu_item_new_with_label(_("_Copy URI to Clipboard"));
344 g_signal_connect_swapped (entry,
345 "activate",
346 G_CALLBACK(on_upload_copy_uri_activate),
347 uploadList);
348 gtk_label_set_use_underline(GTK_LABEL(gtk_bin_get_child(GTK_BIN(entry))),
349 TRUE);
350 gtk_widget_show(entry);
351 menu = GTK_MENU(gtk_menu_new());
352 gtk_menu_shell_append(GTK_MENU_SHELL(menu),
353 entry);
354 gtk_menu_popup (menu,
355 NULL,
356 NULL,
357 NULL,
358 NULL,
359 event_button->button,
360 event_button->time);
361 return TRUE;
362}
363
274/** 364/**
275 * Setup the summary views (in particular the models 365 * Setup the summary views (in particular the models
276 * and the renderers). 366 * and the renderers).
@@ -421,6 +511,10 @@ static void fs_summary_start() {
421 /* upload summary setup */ 511 /* upload summary setup */
422 uploadList = GTK_TREE_VIEW(glade_xml_get_widget(getMainXML(), 512 uploadList = GTK_TREE_VIEW(glade_xml_get_widget(getMainXML(),
423 "activeUploadsList")); 513 "activeUploadsList"));
514 g_signal_connect_swapped (uploadList,
515 "button-press-event",
516 G_CALLBACK(upload_click_handler),
517 uploadList);
424 upload_summary = 518 upload_summary =
425 gtk_tree_store_new(UPLOAD_NUM, 519 gtk_tree_store_new(UPLOAD_NUM,
426 G_TYPE_STRING, /* filename */ 520 G_TYPE_STRING, /* filename */
diff --git a/src/plugins/fs/fs.h b/src/plugins/fs/fs.h
index 95ec2cbd..acd24776 100644
--- a/src/plugins/fs/fs.h
+++ b/src/plugins/fs/fs.h
@@ -194,14 +194,25 @@ typedef struct SL {
194 char * searchString; 194 char * searchString;
195 195
196 /** 196 /**
197 * FSUI search handle.
198 */
199 struct FSUI_SearchList * fsui_list;
200
201 /**
197 * Number of results received so far. 202 * Number of results received so far.
198 */ 203 */
199 unsigned int resultsReceived; 204 unsigned int resultsReceived;
200 205
201 /** 206 /**
202 * FSUI search handle. 207 * X-coordinate of the last right-click in the search list.
203 */ 208 */
204 struct FSUI_SearchList * fsui_list; 209 unsigned int last_x;
210
211 /**
212 * Y-coordinate of the last right-click in the search list.
213 */
214 unsigned int last_y;
215
205} SearchList; 216} SearchList;
206 217
207 218
diff --git a/src/plugins/fs/search.c b/src/plugins/fs/search.c
index 86c117bd..d1e5676a 100644
--- a/src/plugins/fs/search.c
+++ b/src/plugins/fs/search.c
@@ -160,6 +160,87 @@ void fs_search_result_received(SearchList * searchContext,
160 updateSearchSummary(searchContext); 160 updateSearchSummary(searchContext);
161} 161}
162 162
163static int
164on_search_copy_uri_activate(void * cls,
165 GtkWidget * searchEntry) {
166 SearchList * list = cls;
167 GtkTreePath *path;
168 GtkTreeIter iter;
169 struct ECRS_URI * uri;
170 char * str;
171 GtkClipboard * clip;
172
173 path = NULL;
174 if (FALSE == gtk_tree_view_get_path_at_pos(list->treeview,
175 list->last_x,
176 list->last_y,
177 &path,
178 NULL,
179 NULL,
180 NULL)) {
181 GE_BREAK(NULL, 0);
182 return FALSE;
183 }
184 if (FALSE == gtk_tree_model_get_iter(GTK_TREE_MODEL(list->tree),
185 &iter,
186 path)) {
187 GE_BREAK(NULL, 0);
188 gtk_tree_path_free(path);
189 return FALSE;
190 }
191 gtk_tree_path_free(path);
192 uri = NULL;
193 gtk_tree_model_get(GTK_TREE_MODEL(list->tree),
194 &iter,
195 SEARCH_URI, &uri,
196 -1);
197 str = ECRS_uriToString(uri);
198 clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
199 gtk_clipboard_set_text(clip,
200 str,
201 strlen(str));
202 FREE(str);
203 return FALSE;
204}
205
206static gint
207search_click_handler(void * cls,
208 GdkEvent *event) {
209 SearchList * list = cls;
210 GtkMenu * menu;
211 GtkWidget * entry;
212 GdkEventButton * event_button;
213
214 g_return_val_if_fail (event != NULL, FALSE);
215
216 if (event->type != GDK_BUTTON_PRESS)
217 return FALSE;
218 event_button = (GdkEventButton *) event;
219 if (event_button->button != 3)
220 return FALSE;
221 list->last_x = event_button->x;
222 list->last_y = event_button->y;
223 entry = gtk_menu_item_new_with_label(_("_Copy URI to Clipboard"));
224 g_signal_connect_swapped (entry,
225 "activate",
226 G_CALLBACK(on_search_copy_uri_activate),
227 list);
228 gtk_label_set_use_underline(GTK_LABEL(gtk_bin_get_child(GTK_BIN(entry))),
229 TRUE);
230 gtk_widget_show(entry);
231 menu = GTK_MENU(gtk_menu_new());
232 gtk_menu_shell_append(GTK_MENU_SHELL(menu),
233 entry);
234 gtk_menu_popup (menu,
235 NULL,
236 NULL,
237 NULL,
238 NULL,
239 event_button->button,
240 event_button->time);
241 return TRUE;
242}
243
163/** 244/**
164 * FSUI event: a search was started; create the 245 * FSUI event: a search was started; create the
165 * tab and add an entry to the summary. 246 * tab and add an entry to the summary.
@@ -224,7 +305,10 @@ fs_search_started(struct FSUI_SearchList * fsui_list,
224 /* setup tree view and renderers */ 305 /* setup tree view and renderers */
225 list->treeview = GTK_TREE_VIEW(glade_xml_get_widget(list->searchXML, 306 list->treeview = GTK_TREE_VIEW(glade_xml_get_widget(list->searchXML,
226 "searchResults")); 307 "searchResults"));
227 308 g_signal_connect_swapped (list->treeview,
309 "button-press-event",
310 G_CALLBACK(search_click_handler),
311 list);
228 list->tree = 312 list->tree =
229 gtk_tree_store_new(SEARCH_NUM, 313 gtk_tree_store_new(SEARCH_NUM,
230 G_TYPE_STRING, /* name */ 314 G_TYPE_STRING, /* name */
diff --git a/src/plugins/fs/upload.c b/src/plugins/fs/upload.c
index 2e80c165..e8d91b2e 100644
--- a/src/plugins/fs/upload.c
+++ b/src/plugins/fs/upload.c
@@ -315,7 +315,7 @@ void on_fileInformationKeywordEntry_changed_fs(gpointer dummy2,
315} 315}
316 316
317typedef struct { 317typedef struct {
318 const char * filename; 318 char * filename;
319 unsigned int anonymity; 319 unsigned int anonymity;
320 unsigned int priority; 320 unsigned int priority;
321 int index; 321 int index;
@@ -349,6 +349,7 @@ static void * start_upload_helper(void * cls) {
349void on_fsinsertuploadbutton_clicked_fs(gpointer dummy, 349void on_fsinsertuploadbutton_clicked_fs(gpointer dummy,
350 GtkWidget * uploadButton) { 350 GtkWidget * uploadButton) {
351 FSUC fsuc; 351 FSUC fsuc;
352 const char * filename;
352 const char * filenamerest; 353 const char * filenamerest;
353 GtkWidget * dialog; 354 GtkWidget * dialog;
354 EXTRACTOR_ExtractorList * extractors; 355 EXTRACTOR_ExtractorList * extractors;
@@ -367,8 +368,8 @@ void on_fsinsertuploadbutton_clicked_fs(gpointer dummy,
367 extractors = EXTRACTOR_loadConfigLibraries(extractors, 368 extractors = EXTRACTOR_loadConfigLibraries(extractors,
368 config); 369 config);
369 FREE(config); 370 FREE(config);
370 fsuc.filename = getEntryLineValue(getMainXML(), 371 filename = getEntryLineValue(getMainXML(),
371 "uploadFilenameComboBoxEntry"); 372 "uploadFilenameComboBoxEntry");
372 metaXML 373 metaXML
373 = glade_xml_new(getGladeFileName(), 374 = glade_xml_new(getGladeFileName(),
374 "metaDataDialog", 375 "metaDataDialog",
@@ -379,11 +380,11 @@ void on_fsinsertuploadbutton_clicked_fs(gpointer dummy,
379 meta = ECRS_createMetaData(); 380 meta = ECRS_createMetaData();
380 ECRS_extractMetaData(ectx, 381 ECRS_extractMetaData(ectx,
381 meta, 382 meta,
382 fsuc.filename, 383 filename,
383 extractors); 384 extractors);
384 EXTRACTOR_removeAll(extractors); 385 EXTRACTOR_removeAll(extractors);
385 filenamerest = &fsuc.filename[strlen(fsuc.filename)-1]; 386 filenamerest = &filename[strlen(filename)-1];
386 while ( (filenamerest > fsuc.filename) && 387 while ( (filenamerest > filename) &&
387 (filenamerest[-1] != DIR_SEPARATOR) ) 388 (filenamerest[-1] != DIR_SEPARATOR) )
388 filenamerest--; 389 filenamerest--;
389 ECRS_addToMetaData(meta, 390 ECRS_addToMetaData(meta,
@@ -437,8 +438,10 @@ void on_fsinsertuploadbutton_clicked_fs(gpointer dummy,
437 fsuc.gkeywordURI = ECRS_stringToUri(ectx, 438 fsuc.gkeywordURI = ECRS_stringToUri(ectx,
438 ECRS_URI_PREFIX 439 ECRS_URI_PREFIX
439 ECRS_SEARCH_INFIX); 440 ECRS_SEARCH_INFIX);
441 fsuc.filename = STRDUP(filename);
440 run_with_save_calls(&start_upload_helper, 442 run_with_save_calls(&start_upload_helper,
441 &fsuc); 443 &fsuc);
444 FREE(fsuc.filename);
442 ECRS_freeMetaData(fsuc.meta); 445 ECRS_freeMetaData(fsuc.meta);
443 ECRS_freeUri(fsuc.gkeywordURI); 446 ECRS_freeUri(fsuc.gkeywordURI);
444 ECRS_freeUri(fsuc.keywordURI); 447 ECRS_freeUri(fsuc.keywordURI);
@@ -529,8 +532,6 @@ void on_mainFileSharingInsertBrowseButton_clicked_fs(GtkWidget * browseButton,
529 free(filename); 532 free(filename);
530} 533}
531 534
532/* FIXME: handlers for clear and stop! */
533
534struct FCBC { 535struct FCBC {
535 int (*method)(struct FSUI_Context * ctx, 536 int (*method)(struct FSUI_Context * ctx,
536 struct FSUI_UploadList * list); 537 struct FSUI_UploadList * list);