/* Copyright (C) 1999 Southern Gold Development * * This program 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 of the License, or * (at your option) any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gview.h" #ifdef HAVE_NET void netload(sgview *view, const gchar *url) { gint res, retPid, status; gchar *cmdLine[8], *fName, *eName; fName = rindex(url, '/'); eName = g_strconcat("/tmp", fName, NULL); res = fork(); switch (res) { case -1: return; break; case 0: #ifdef HAVE_CURL cmdLine[0] = CURL_EXEC; cmdLine[1] = "-s"; cmdLine[2] = "-L"; cmdLine[3] = "-f"; cmdLine[4] = (gchar *) url; cmdLine[5] = "-o"; cmdLine[6] = eName; cmdLine[7] = NULL; execvp(cmdLine[0], cmdLine); #endif /* HAVE_CURL */ #ifdef HAVE_WGET cmdLine[0] = WGET_EXEC; cmdLine[1] = "-q"; cmdLine[2] = "-N"; cmdLine[3] = (gchar *) url; cmdLine[4] = "-O"; cmdLine[5] = eName; cmdLine[6] = NULL; cmdLine[7] = NULL; execvp(cmdLine[0], cmdLine); #endif /* HAVE_WGET */ #if !defined (HAVE_CURL) || !defined (HAVE_WGET) execvp("/bin/false", NULL); #endif break; default: retPid = wait(&status); if (status == 0) { handleFile(view, eName); g_free(eName); } else { g_print("Error downloading file %s\n", url); } break; } } gint netKey(GtkWidget *widget, GdkEventKey *event, gpointer data) { ren *openD; gchar *nfile; openD = (ren *) data; nfile = g_strdup(gtk_entry_get_text(GTK_ENTRY (openD->ent))); switch (event->keyval) { case GDK_Return: case GDK_KP_Enter: netload(openD->view, nfile); gtk_widget_destroy(openD->rsp); break; case GDK_Escape: gtk_widget_destroy(openD->rsp); break; default: break; } g_free(nfile); return TRUE; } void netURL(GtkWidget *widget, gpointer data) { ren *openD; gchar *nfile; openD = (ren *) data; nfile = g_strdup(gtk_entry_get_text(GTK_ENTRY (openD->ent))); netload(openD->view, nfile); gtk_widget_destroy(openD->rsp); g_free(nfile); } void cancelURL(GtkWidget *widget, gpointer data) { gtk_widget_destroy(((ren *) data)->rsp); } void netDestroy(GtkWidget *widget, gpointer data) { g_free((ren *) data); } void menuOpenURL(GtkWidget *widget, gpointer data) { sgview *view; ren *openD; GtkWidget *win, *fix, *ent, *hbox; view = (sgview *) data; openD = g_malloc(sizeof(ren) * 1); openD->view = view; win = gtk_window_new(GTK_WINDOW_DIALOG); openD->rsp = win; gtk_window_set_title(GTK_WINDOW (win), _("Open URL")); gtk_window_set_policy(GTK_WINDOW (win), FALSE, FALSE, FALSE); gtk_container_border_width(GTK_CONTAINER (win), 5); gtk_widget_set_usize(GTK_WIDGET (win), 160, 70); gtk_window_set_modal(GTK_WINDOW (win), TRUE); gtk_window_set_position(GTK_WINDOW (win), GTK_WIN_POS_MOUSE); gtk_signal_connect(GTK_OBJECT (win), "destroy", (GtkSignalFunc) netDestroy, (gpointer) openD); fix = gtk_fixed_new(); gtk_container_add(GTK_CONTAINER (win), fix); ent = gtk_entry_new(); openD->ent = ent; gtk_widget_set_usize(GTK_WIDGET (ent), 150, 24); gtk_entry_set_text(GTK_ENTRY (ent), "http://"); gtk_entry_select_region(GTK_ENTRY (ent), 0, -1); gtk_entry_set_editable(GTK_ENTRY (ent), TRUE); gtk_entry_set_position(GTK_ENTRY (ent), 7); gtk_fixed_put(GTK_FIXED (fix), ent, 0, 5); gtk_signal_connect(GTK_OBJECT (ent), "key_press_event", (GtkSignalFunc) netKey, (gpointer) openD); gtk_widget_show(ent); hbox = gtk_hbox_new(TRUE, 10); gtk_widget_set_usize(GTK_WIDGET (hbox), 150, 25); gtk_fixed_put(GTK_FIXED (fix), hbox, 0, 35); gAddButtonBox(view, (gpointer) openD, GTK_BOX (hbox), _("Open URL"), _("Load image from the Internet"), (GtkSignalFunc) netURL); gAddButtonBox(view, (gpointer) openD, GTK_BOX (hbox), _("Cancel"), _("Cancel file download"), (GtkSignalFunc) cancelURL); gtk_widget_show(hbox); gtk_widget_show(fix); gtk_widget_show(win); gtk_window_set_focus(GTK_WINDOW (win), GTK_WIDGET (ent)); } #endif /* HAVE_NET */