# HG changeset patch # User Christophe Lincoln # Date 1303166524 -7200 # Node ID 460f65e36cb3b3ab4f40efb19b4373221d6d3991 # Parent 5b1f0e7d09a838119fa6ca427312c9d6d5b19b8e Handle download-requested and finally use xterm/wget for now diff -r 5b1f0e7d09a8 -r 460f65e36cb3 README --- a/README Mon Apr 18 15:27:20 2011 +0200 +++ b/README Tue Apr 19 00:42:04 2011 +0200 @@ -36,4 +36,15 @@ Install with 'make install' (PREFIX and DESTDIR are supported for packaging) +Coding notes +------------ + + * To get the filename of a WebKitDownload + const gchar* file = webkit_download_get_suggested_filename (download); + + * Check mime-type before download (needs a callback function) + g_signal_connect (web_view, "mime-type-policy-decision-requested", + G_CALLBACK (mime_type_decision_cb), web_view); + + ================================================================================ diff -r 5b1f0e7d09a8 -r 460f65e36cb3 src/main.c --- a/src/main.c Mon Apr 18 15:27:20 2011 +0200 +++ b/src/main.c Tue Apr 19 00:42:04 2011 +0200 @@ -2,10 +2,10 @@ * TazWeb is a radically simple web browser providing a single window * with a single toolbar with buttons and an URL entry, but no menu or * tabs. - * + * * Copyright (C) 2011 SliTaz GNU/Linux - * - * + * + * */ #include @@ -34,9 +34,9 @@ static void activate_uri_entry_cb (GtkWidget* entry, gpointer data) { - const gchar* uri = gtk_entry_get_text (GTK_ENTRY (entry)); - g_assert (uri); - webkit_web_view_load_uri (web_view, uri); + const gchar* uri = gtk_entry_get_text (GTK_ENTRY (entry)); + g_assert (uri); + webkit_web_view_load_uri (web_view, uri); } static void @@ -77,7 +77,7 @@ static void go_home_cb (GtkWidget* widget, gpointer data) { - const gchar* uri = ("file:///usr/share/webhome/index.html"); + const gchar* uri = ("file:///usr/share/webhome/index.html"); g_assert (uri); webkit_web_view_load_uri (web_view, uri); } @@ -112,7 +112,7 @@ } /* Fullscreen and unfullscreen action */ -static void +static void fullscreen_cb (GtkWindow* window, gpointer data) { GdkWindowState state; @@ -133,18 +133,35 @@ webkit_web_view_load_uri (web_view, uri); } +/* Download function */ +static gboolean +download_requested_cb (WebKitWebView *web_view, WebKitDownload *download, + gpointer user_data) +{ + const gchar* uri = webkit_download_get_uri (download); + gchar *buffer; + asprintf (&buffer, "xterm -e \"wget -P $HOME/Downloads %s\"", uri); + system (buffer); +} + static GtkWidget* create_browser () { GtkWidget* scrolled_window = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); web_view = WEBKIT_WEB_VIEW (webkit_web_view_new ()); gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (web_view)); - g_signal_connect (web_view, "notify::title", G_CALLBACK (notify_title_cb), web_view); - g_signal_connect (web_view, "notify::progress", G_CALLBACK (notify_progress_cb), web_view); - g_signal_connect (web_view, "notify::load-status", G_CALLBACK (notify_load_status_cb), web_view); + g_signal_connect (web_view, "notify::title", + G_CALLBACK (notify_title_cb), web_view); + g_signal_connect (web_view, "notify::progress", + G_CALLBACK (notify_progress_cb), web_view); + g_signal_connect (web_view, "notify::load-status", + G_CALLBACK (notify_load_status_cb), web_view); + g_signal_connect (web_view, "download-requested", + G_CALLBACK (download_requested_cb), NULL); return scrolled_window; } @@ -183,16 +200,16 @@ g_signal_connect (G_OBJECT (item), "clicked", G_CALLBACK (refresh_cb), NULL); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); - /* The URL entry */ - item = gtk_tool_item_new (); - gtk_tool_item_set_expand (item, TRUE); - uri_entry = gtk_entry_new (); - gtk_container_add (GTK_CONTAINER (item), uri_entry); - g_signal_connect (G_OBJECT (uri_entry), "activate", - G_CALLBACK (activate_uri_entry_cb), NULL); - gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); + /* The URL entry */ + item = gtk_tool_item_new (); + gtk_tool_item_set_expand (item, TRUE); + uri_entry = gtk_entry_new (); + gtk_container_add (GTK_CONTAINER (item), uri_entry); + g_signal_connect (G_OBJECT (uri_entry), "activate", + G_CALLBACK (activate_uri_entry_cb), NULL); + gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); - /* The Home button */ + /* The Home button */ item = gtk_tool_button_new_from_stock (GTK_STOCK_HOME); g_signal_connect (G_OBJECT (item), "clicked", G_CALLBACK (go_home_cb), NULL); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); @@ -219,10 +236,11 @@ create_window () { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + /* Default tazweb window size ratio to 3/4 ?? --> 720, 540*/ gtk_window_set_default_size (GTK_WINDOW (window), 800, 600); gtk_window_set_icon (GTK_WINDOW (window), - create_pixbuf ("/usr/share/pixmaps/tazweb.png")); + create_pixbuf ("/usr/share/pixmaps/tazweb.png")); gtk_widget_set_name (window, "TazWeb"); g_signal_connect (window, "destroy", G_CALLBACK (destroy_cb), NULL); @@ -236,12 +254,12 @@ if (!g_thread_supported ()) g_thread_init (NULL); - /* Get a default bookmark.html if missing */ - const gchar* config = g_strdup_printf ("%s/.config/tazweb", g_get_home_dir ()); + /* Get a default page.html if missing */ + const gchar* config = g_strdup_printf ("%s/.config/tazweb", g_get_home_dir ()); if (!g_file_test(config, G_FILE_TEST_EXISTS)) { - g_mkdir(config, 0700); - system("cp /usr/share/tazweb/*.html $HOME/.config/tazweb"); - system("cp /usr/share/tazweb/*.css $HOME/.config/tazweb"); + g_mkdir (config, 0700); + system ("cp /usr/share/tazweb/*.html $HOME/.config/tazweb"); + system ("cp /usr/share/tazweb/*.css $HOME/.config/tazweb"); } GtkWidget* vbox = gtk_vbox_new (FALSE, 2); @@ -251,9 +269,9 @@ main_window = create_window (); gtk_container_add (GTK_CONTAINER (main_window), vbox); - /* Home page url or file */ + /* Home page url or file */ gchar* uri = (gchar*) (argc > 1 ? argv[1] : - "file:///usr/share/webhome/index.html"); + "file:///usr/share/webhome/index.html"); webkit_web_view_load_uri (web_view, uri); gtk_widget_grab_focus (GTK_WIDGET (web_view));