/* This file is part of GNUnet (C) 2005, 2006, 2010 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /** * @file src/fs/gnunet-fs-gtk-main_window_file_download.c * @author Christian Grothoff */ #include "gnunet-fs-gtk-common.h" #include "gnunet-fs-gtk-download.h" #include "gnunet-fs-gtk.h" #include /** * User selected "Open URI" in main window. */ void GNUNET_GTK_main_menu_file_download_uri_activate_cb (GtkWidget * dummy, gpointer user_data) { GtkBuilder *builder; GtkWidget *dialog; GtkTextBuffer *tb; GtkTextIter ti_start, ti_end; builder = GTK_BUILDER (user_data); dialog = GTK_WIDGET (gtk_builder_get_object (builder, "GNUNET_GTK_open_url_window")); tb = GTK_TEXT_BUFFER (gtk_builder_get_object (builder, "GNUNET_GTK_open_url_dialog_url_textview_buffer")); gtk_text_buffer_get_iter_at_offset (tb, &ti_start, 0); gtk_text_buffer_get_iter_at_offset (tb, &ti_end, -1); gtk_text_buffer_delete (tb, &ti_start, &ti_end); /* TODO: queue the clipboard, maybe there's valid URI in there? * If so, get it. */ gtk_widget_show (dialog); } void GNUNET_GTK_open_url_dialog_execute_button_clicked_cb (GtkButton * button, gpointer user_data) { GtkBuilder *builder; GtkWidget *dialog; GtkTextBuffer *tb; GtkTextIter ti_start, ti_end; guint anonymity_level; char *perr; char *uris; struct GNUNET_FS_Uri *uri; builder = GTK_BUILDER (user_data); dialog = GTK_WIDGET (gtk_builder_get_object (builder, "GNUNET_GTK_open_url_window")); gtk_widget_hide (dialog); tb = GTK_TEXT_BUFFER (gtk_builder_get_object (builder, "GNUNET_GTK_open_url_dialog_url_textview_buffer")); gtk_text_buffer_get_iter_at_offset (tb, &ti_start, 0); gtk_text_buffer_get_iter_at_offset (tb, &ti_end, -1); uris = gtk_text_buffer_get_text (tb, &ti_start, &ti_end, FALSE); if (!GNUNET_GTK_get_selected_anonymity_level (builder, "main_window_search_anonymity_combobox", &anonymity_level)) return; uri = GNUNET_FS_uri_parse (uris, &perr); g_free (uris); if (uri == NULL) { GNUNET_free (perr); /* Why was "execute" button sensitive!? */ GNUNET_break (0); return; } if (GNUNET_FS_uri_test_sks (uri) || GNUNET_FS_uri_test_ksk (uri)) { fprintf (stderr, "Starting search!\n"); GNUNET_break (NULL != GNUNET_FS_search_start (GNUNET_FS_GTK_get_fs_handle (), uri, anonymity_level, GNUNET_FS_SEARCH_OPTION_NONE, NULL)); GNUNET_FS_uri_destroy (uri); return; } if (GNUNET_FS_uri_test_chk (uri) || GNUNET_FS_uri_test_loc (uri)) { struct DownloadContext *dc; dc = GNUNET_malloc (sizeof (struct DownloadContext)); dc->uri = uri; dc->anonymity = anonymity_level; dc->cb = GNUNET_FS_GTK_default_open_download_as_callback; GNUNET_FS_GTK_open_download_as_dialog (dc); return; } GNUNET_break (0); GNUNET_FS_uri_destroy (uri); } void GNUNET_GTK_open_url_dialog_cancel_button_clicked_cb (GtkButton * button, gpointer user_data) { GtkBuilder *builder; builder = GTK_BUILDER (user_data); gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (builder, "GNUNET_GTK_open_url_window"))); return; } gboolean GNUNET_GTK_open_url_window_delete_event_cb (GtkWidget * widget, GdkEvent * event, gpointer user_data) { GtkBuilder *builder; builder = GTK_BUILDER (user_data); gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (builder, "GNUNET_GTK_open_url_window"))); return TRUE; } #ifndef GDK_KEY_Return #define GDK_KEY_Return GDK_Return #endif gboolean GNUNET_GTK_open_url_dialog_url_textview_key_press_event_cb (GtkWidget * widget, GdkEventKey * event, gpointer user_data) { GtkBuilder *builder; builder = GTK_BUILDER (user_data); if (event->keyval == GDK_KEY_Return) { GtkWidget *execute = GTK_WIDGET (gtk_builder_get_object (builder, "GNUNET_GTK_open_url_dialog_execute_button")); if (gtk_widget_get_sensitive (execute)) GNUNET_GTK_open_url_dialog_execute_button_clicked_cb (GTK_BUTTON (execute), user_data); return TRUE; } return FALSE; } void GNUNET_GTK_open_url_dialog_url_textview_buffer_changed_cb (GtkTextBuffer * textbuffer, gpointer user_data) { struct GNUNET_FS_Uri *uri; GtkTextBuffer *tb; GtkTextIter ti_start, ti_end; GtkBuilder *builder; char *perr; char *uris; builder = GTK_BUILDER (user_data); perr = NULL; tb = GTK_TEXT_BUFFER (gtk_builder_get_object (builder, "GNUNET_GTK_open_url_dialog_url_textview_buffer")); gtk_text_buffer_get_iter_at_offset (tb, &ti_start, 0); gtk_text_buffer_get_iter_at_offset (tb, &ti_end, -1); uris = gtk_text_buffer_get_text (tb, &ti_start, &ti_end, FALSE); if (uris != NULL) uri = GNUNET_FS_uri_parse (uris, &perr); else uri = NULL; g_free (uris); gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (builder, "GNUNET_GTK_open_url_dialog_execute_button")), (uri == NULL) ? FALSE : TRUE); if (uri != NULL) GNUNET_FS_uri_destroy (uri); else GNUNET_free_non_null (perr); } /* end of gnunet-fs-gtk-main_window_file_download.c */