tazweb rev 199
tazweb-ng migrate cmdline parser and options from TazWeb 1.11
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Fri Mar 17 00:15:00 2017 +0100 (2017-03-17) |
parents | d50f2a6a3e58 |
children | f4e3ab22586e |
files | src/tazweb-ng.c |
line diff
1.1 --- a/src/tazweb-ng.c Thu Mar 16 22:49:23 2017 +0100 1.2 +++ b/src/tazweb-ng.c Fri Mar 17 00:15:00 2017 +0100 1.3 @@ -12,34 +12,39 @@ 1.4 * 1.5 */ 1.6 1.7 +#include <stdlib.h> 1.8 +#include <sys/queue.h> 1.9 +#include <getopt.h> 1.10 #include <glib.h> 1.11 #include <glib/gi18n.h> 1.12 -#define GETTEXT_PACKAGE "tazweb" 1.13 1.14 -#include <stdlib.h> 1.15 -#include <sys/queue.h> 1.16 #include <gtk/gtk.h> 1.17 #include <webkit/webkit.h> 1.18 -#include <libsoup/soup.h> // for cookies 1.19 +#include <libsoup/soup.h> 1.20 1.21 -#define HOME g_get_home_dir() 1.22 -#define CONFIG g_strdup_printf("%s/.config/tazweb", HOME) 1.23 -#define BMTXT g_strdup_printf("%s/bookmarks.txt", CONFIG) 1.24 -#define BMURL g_strdup_printf("%s/bookmarks.html", CONFIG) 1.25 -#define COOKIES g_strdup_printf("%s/cookies.txt", CONFIG) 1.26 -#define WEBHOME "file:///usr/share/webhome/index.html" 1.27 -#define SEARCH "http://duckduckgo.com/?q=%s&t=slitaz" 1.28 +#define HOME g_get_home_dir() 1.29 +#define CONFIG g_strdup_printf("%s/.config/tazweb", HOME) 1.30 +#define BOOKMARKS g_strdup_printf("%s/bookmarks.txt", CONFIG) 1.31 +#define COOKIES g_strdup_printf("%s/cookies.txt", CONFIG) 1.32 +#define DOWNLOADS g_strdup_printf("%s/Downloads", HOME) 1.33 +#define WEBHOME "file:///usr/share/webhome/index.html" 1.34 +#define SEARCH "http://duckduckgo.com/?q=%s&t=slitaz" 1.35 +#define GETTEXT_PACKAGE "tazweb" 1.36 1.37 -static gchar *useragent = "TazWeb (X11; SliTaz GNU/Linux; U; en_US) AppleWebKit/535.22+"; 1.38 -static GtkWidget *tazweb_window; 1.39 -static GtkNotebook *notebook; 1.40 -static gboolean notoolbar; 1.41 -static gboolean kiosk; 1.42 +int width = 800; 1.43 +int height = 600; 1.44 +int private = 0; 1.45 1.46 -const gchar* uri; 1.47 +static gchar *useragent = "TazWeb (X11; SliTaz GNU/Linux; U; en_US)"; 1.48 +static gboolean notoolbar; 1.49 +static gboolean nomenu; 1.50 +static gboolean kiosk; 1.51 1.52 +static GtkWidget *tazweb_window; 1.53 +static GtkNotebook *notebook; 1.54 static SoupSession *session; 1.55 static SoupCookieJar *cookiejar; 1.56 +const gchar* uri; 1.57 1.58 /* Tab structure */ 1.59 struct tab { 1.60 @@ -214,7 +219,7 @@ 1.61 go_bookmarks_cb(GtkWidget* w, struct tab *ttb) 1.62 { 1.63 system("/usr/lib/tazweb/helper.sh html_bookmarks"); 1.64 - uri = g_strdup_printf("file://%s", BMURL); 1.65 + uri = g_strdup_printf("file://%s/bookmarks.html", CONFIG); 1.66 g_assert(uri); 1.67 webkit_web_view_load_uri(ttb->webview, uri); 1.68 } 1.69 @@ -303,6 +308,13 @@ 1.70 gtk_widget_show_all(GTK_WIDGET(menu)); 1.71 } 1.72 1.73 +/* Create a new tab callback */ 1.74 +static void 1.75 +create_new_tab_cb() 1.76 +{ 1.77 + create_new_tab(WEBHOME, +1); 1.78 +} 1.79 + 1.80 /* The browser */ 1.81 GtkWidget * 1.82 create_browser(struct tab *ttb) 1.83 @@ -317,12 +329,21 @@ 1.84 ttb->webview = WEBKIT_WEB_VIEW(webkit_web_view_new()); 1.85 gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(ttb->webview)); 1.86 1.87 - /* User agent */ 1.88 + /* Webkit settings */ 1.89 settings = webkit_web_view_get_settings (ttb->webview); 1.90 g_object_set(G_OBJECT(settings), "user-agent", useragent, NULL); 1.91 + 1.92 + if (private) 1.93 + g_object_set(G_OBJECT(settings), "enable-private-browsing", TRUE); 1.94 1.95 + /* Connect Webkit events */ 1.96 g_signal_connect(ttb->webview, "notify::load-status", 1.97 G_CALLBACK(notify_load_status_cb), ttb); 1.98 + 1.99 + //////////////////////////////////////////////////////////////////// 1.100 + //g_signal_connect(ttb->webview, "create-web-view", 1.101 + // G_CALLBACK(create_new_tab(WEBHOME, 1)), ttb); 1.102 + 1.103 1.104 /* Connect WebKit contextual menu items */ 1.105 g_object_connect(G_OBJECT(ttb->webview), "signal::populate-popup", 1.106 @@ -331,13 +352,6 @@ 1.107 return (window); 1.108 } 1.109 1.110 -/* Create a new tab callback */ 1.111 -static void 1.112 -create_new_tab_cb() 1.113 -{ 1.114 - create_new_tab(WEBHOME, +1); 1.115 -} 1.116 - 1.117 /* Toolbar with URL and search entry */ 1.118 GtkWidget * 1.119 create_toolbar(struct tab *ttb) 1.120 @@ -515,7 +529,7 @@ 1.121 1.122 /* Default TazWeb window */ 1.123 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 1.124 - gtk_window_set_default_size(GTK_WINDOW(window), 800, 600); 1.125 + gtk_window_set_default_size(GTK_WINDOW(window), width, height); 1.126 gtk_window_set_icon_name(GTK_WINDOW(window), "tazweb"); 1.127 gtk_widget_set_name(window, "TazWeb"); 1.128 gtk_window_set_wmclass(GTK_WINDOW(window), "tazweb", "TazWeb"); 1.129 @@ -542,33 +556,105 @@ 1.130 tazweb_window = create_window(); 1.131 gtk_container_add(GTK_CONTAINER(tazweb_window), vbox); 1.132 gtk_widget_show_all(tazweb_window); 1.133 + 1.134 + /* Handle cookies */ 1.135 + if (! private) { 1.136 + session = webkit_get_default_session(); 1.137 + snprintf(COOKIES, sizeof COOKIES, "%s", COOKIES); 1.138 + cookies_setup(); 1.139 + } 1.140 + 1.141 + /* Fullscreen for Kiosk mode */ 1.142 + if (kiosk) 1.143 + gtk_window_fullscreen(GTK_WINDOW(tazweb_window)); 1.144 +} 1.145 + 1.146 +/* Cmdline Help & usage */ 1.147 +void 1.148 +help(void) 1.149 +{ 1.150 + printf("\nTazWeb - Light and fast web browser using Webkit engine\n\n\ 1.151 +Usage: tazweb [--options] [value] url\n\ 1.152 +\n\ 1.153 +Options:\n\ 1.154 + -h --help Print TazWeb command line help\n\ 1.155 + -p --private Disable on-disk cache, cookies, history\n\ 1.156 + -u --useragent [ua] Configure the user agent string\n\ 1.157 + -k --kiosk Fullscreen, no bookmarks and download support\n\ 1.158 + -r --raw Raw webkit window without toolbar and menu\n\ 1.159 + -s --small Small Tazweb window for tiny web applications\n\ 1.160 + --notoolbar Disable the top toolbar\n\ 1.161 + --nomenu Disable TazWeb contextual menu\n\n"); 1.162 + 1.163 + return; 1.164 } 1.165 1.166 int 1.167 main(int argc, char *argv[]) 1.168 { 1.169 + //textdomain (GETTEXT_PACKAGE); 1.170 int focus = 1; 1.171 + int c; 1.172 1.173 - while (argc > 1) { 1.174 - if (!strcmp(argv[1],"--notoolbar")) { 1.175 - notoolbar++; 1.176 + /* Cmdline parsing with getopt_long to handle --option or -o */ 1.177 + while (1) { 1.178 + static struct option long_options[] = 1.179 + { 1.180 + /* Set flag */ 1.181 + { "notoolbar", no_argument, ¬oolbar, 1 }, 1.182 + { "nomenu", no_argument, &nomenu, 1 }, 1.183 + /* No flag */ 1.184 + { "help", no_argument, 0, 'h' }, 1.185 + { "private", no_argument, 0, 'p' }, 1.186 + { "useragent", required_argument, 0, 'u' }, 1.187 + { "kiosk", no_argument, 0, 'k' }, 1.188 + { "raw", no_argument, 0, 'r' }, 1.189 + { "small", no_argument, 0, 's' }, 1.190 + { 0, 0, 0, 0} 1.191 + }; 1.192 + 1.193 + int index = 0; 1.194 + c = getopt_long (argc, argv, "hpu:krs", long_options, &index); 1.195 + 1.196 + /* Detect the end of the options */ 1.197 + if (c == -1) 1.198 + break; 1.199 + 1.200 + switch (c) { 1.201 + case 0: 1.202 + /* Options with flag */ 1.203 + break; 1.204 + 1.205 + case 'h': 1.206 + help(); 1.207 + return 0; 1.208 + 1.209 + case 'p': 1.210 + private++; 1.211 + break; 1.212 + 1.213 + case 'u': 1.214 + useragent = optarg; 1.215 + break; 1.216 + 1.217 + case 'k': 1.218 + kiosk++; 1.219 + break; 1.220 + 1.221 + case 'r': 1.222 + notoolbar++; 1.223 + nomenu++; 1.224 + break; 1.225 + 1.226 + case 's': 1.227 + width = 640; 1.228 + height = 480; 1.229 + break; 1.230 + 1.231 + default: 1.232 + help(); 1.233 + return 0; 1.234 } 1.235 - else if (!strcmp(argv[1],"--kiosk")) { 1.236 - kiosk++; 1.237 - } 1.238 - else if (!strcmp(argv[1],"--useragent") && argc > 2) { 1.239 - argc--; 1.240 - argv++; 1.241 - useragent = argv[1]; 1.242 - } 1.243 - else if (!strcmp(argv[1],"--help")) { 1.244 - printf ("Usage: tazweb [--notoolbar|--kiosk|--useragent] [ua]\n"); 1.245 - printf ("Bookmarks: %s\n", BMTXT); 1.246 - return 0; 1.247 - } 1.248 - else break; 1.249 - argc--; 1.250 - argv++; 1.251 } 1.252 1.253 argc -= optind;