tazweb rev 182
Use getopt to parse cmdline args and add: --nomenu --raw --help
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Tue Mar 14 04:02:11 2017 +0100 (2017-03-14) |
parents | a6d2bc6be4a4 |
children | 41c9850b6602 |
files | src/tazweb.c |
line diff
1.1 --- a/src/tazweb.c Mon Mar 13 20:00:22 2017 +0000 1.2 +++ b/src/tazweb.c Tue Mar 14 04:02:11 2017 +0100 1.3 @@ -9,37 +9,46 @@ 1.4 * 1.5 */ 1.6 1.7 +#include <getopt.h> 1.8 #include <glib.h> 1.9 #include <glib/gi18n.h> 1.10 -#define GETTEXT_PACKAGE "tazweb" 1.11 1.12 #include <gtk/gtk.h> 1.13 #include <webkit/webkit.h> 1.14 -#include <libsoup/soup.h> // for cookies 1.15 +#include <libsoup/soup.h> 1.16 1.17 -#define HOME g_get_home_dir() 1.18 -#define CONFIG g_strdup_printf("%s/.config/tazweb", HOME) 1.19 -#define BMTXT g_strdup_printf("%s/bookmarks.txt", CONFIG) 1.20 -#define BMURL g_strdup_printf("%s/bookmarks.html", CONFIG) 1.21 -#define COOKIES g_strdup_printf("%s/cookies.txt", CONFIG) 1.22 -#define WEBHOME "file:///usr/share/webhome/index.html" 1.23 -#define SEARCH "http://duckduckgo.com/?q=%s&t=slitaz" 1.24 +#define HOME g_get_home_dir() 1.25 +#define CONFIG g_strdup_printf("%s/.config/tazweb", HOME) 1.26 +#define BMTXT g_strdup_printf("%s/bookmarks.txt", CONFIG) 1.27 +#define BOOKMARKS g_strdup_printf("%s/bookmarks.txt", CONFIG) 1.28 +#define COOKIES g_strdup_printf("%s/cookies.txt", CONFIG) 1.29 +#define DOWNLOADS g_strdup_printf("%s/Downloads", HOME) 1.30 +#define WEBHOME "file:///usr/share/webhome/index.html" 1.31 +#define SEARCH "http://duckduckgo.com/?q=%s&t=slitaz" 1.32 +#define GETTEXT_PACKAGE "tazweb" 1.33 + 1.34 +int width = 800; 1.35 +int height = 600; 1.36 +int private = 0; 1.37 +int debug = 1; 1.38 1.39 static gchar *useragent = "TazWeb (X11; SliTaz GNU/Linux; U; en_US)"; 1.40 -static GtkWidget* create_window(WebKitWebView** newwebview); 1.41 -static GtkWidget *mainwindow, *vbox, *browser, *toolbar; 1.42 -static WebKitWebView *webview; 1.43 -static WebKitWebFrame *frame; 1.44 -static gint count = 0; 1.45 -static gboolean notoolbar; 1.46 -static gboolean nocookies; 1.47 -static gboolean kiosk; 1.48 +static gboolean notoolbar; 1.49 +static gboolean nomenu; 1.50 +static gboolean kiosk; 1.51 +static gboolean raw; 1.52 1.53 +static GtkWidget* create_window(WebKitWebView** newwebview); 1.54 +static GtkWidget *tazweb_window, *vbox, *browser, *toolbar; 1.55 +static WebKitWebView *webview; 1.56 +static WebKitWebFrame *frame; 1.57 +static SoupSession *session; 1.58 +static SoupCookieJar *cookiejar; 1.59 +static gint count = 0; 1.60 +const gchar* uri; 1.61 1.62 -const gchar* uri; 1.63 +/* Turn on/off debug mode */ 1.64 1.65 -SoupSession *session; 1.66 -SoupCookieJar *cookiejar; 1.67 1.68 /* Create an icon */ 1.69 static GdkPixbuf* 1.70 @@ -172,7 +181,7 @@ 1.71 go_bookmarks_cb(GtkWidget* widget, WebKitWebView* webview) 1.72 { 1.73 system("/usr/lib/tazweb/helper.sh html_bookmarks"); 1.74 - uri = g_strdup_printf("file://%s", BMURL); 1.75 + uri = g_strdup_printf("file://%s/bookmarks.html", CONFIG); 1.76 g_assert(uri); 1.77 webkit_web_view_load_uri(webview, uri); 1.78 } 1.79 @@ -197,7 +206,7 @@ 1.80 webkit_web_view_go_forward(webview); 1.81 } 1.82 1.83 -/* TazWeb doc callback function */ 1.84 +/* Documentation callback */ 1.85 static void 1.86 tazweb_doc_cb(GtkWidget* widget, WebKitWebView *webview) 1.87 { 1.88 @@ -206,32 +215,19 @@ 1.89 webkit_web_view_load_uri(webview, uri); 1.90 } 1.91 1.92 -/* Download functions */ 1.93 +/* Download callback */ 1.94 static gboolean 1.95 download_requested_cb(WebKitWebView *webview, WebKitDownload *download, 1.96 gpointer user_data) 1.97 { 1.98 const gchar* buffer; 1.99 uri = webkit_download_get_uri(download); 1.100 - asprintf(&buffer, "xterm -T 'Download' -geom 72x10+0-24 -e \ 1.101 - 'mkdir -p $HOME/Downloads && cd $HOME/Downloads && \ 1.102 - wget -c %s; sleep 2' &", uri); 1.103 + asprintf(&buffer, "xterm -T 'TazWeb Download' -geom 72x12+0-24 -e \ 1.104 + 'mkdir -p %s && wget -P %s -c %s; sleep 2' &", 1.105 + DOWNLOADS, DOWNLOADS, uri); 1.106 system(buffer); 1.107 } 1.108 1.109 -/* Zoom out and in callback function */ 1.110 -static void 1.111 -zoom_out_cb(GtkWidget *widget, WebKitWebView* webview) 1.112 -{ 1.113 - webkit_web_view_zoom_out(webview); 1.114 -} 1.115 - 1.116 -static void 1.117 -zoom_in_cb(GtkWidget *widget, WebKitWebView* webview) 1.118 -{ 1.119 - webkit_web_view_zoom_in(webview); 1.120 -} 1.121 - 1.122 /* Printing callback function */ 1.123 static void 1.124 print_page_cb (GtkWidget *widget, gpointer data) 1.125 @@ -240,20 +236,6 @@ 1.126 WEBKIT_WEB_VIEW (webview))); 1.127 } 1.128 1.129 - 1.130 -/* Fullscreen and unfullscreen callback function */ 1.131 -//static void 1.132 -//fullscreen_cb(GtkWindow* window, gpointer data) 1.133 -//{ 1.134 - //GdkWindowState state; 1.135 - //state = gdk_window_get_state(gtk_widget_get_window(GTK_WIDGET(mainwindow))); 1.136 - 1.137 - //if(state & GDK_WINDOW_STATE_FULLSCREEN) 1.138 - //gtk_window_unfullscreen(GTK_WINDOW(mainwindow)); 1.139 - //else 1.140 - //gtk_window_fullscreen(GTK_WINDOW(mainwindow)); 1.141 -//} 1.142 - 1.143 /* New webview callbacks */ 1.144 static WebKitWebView* 1.145 create_web_view_cb(WebKitWebView* webview, WebKitWebFrame* web_frame, 1.146 @@ -289,7 +271,7 @@ 1.147 title = webkit_web_view_get_title(WEBKIT_WEB_VIEW (webview)); 1.148 uri = webkit_web_view_get_uri(WEBKIT_WEB_VIEW (webview)); 1.149 1.150 - asprintf(&buffer, "echo '%s|%s' >> %s", title, uri, BMTXT); 1.151 + asprintf(&buffer, "echo '%s|%s' >> %s", title, uri, BOOKMARKS); 1.152 system(buffer); 1.153 } 1.154 1.155 @@ -377,27 +359,9 @@ 1.156 /* Separator */ 1.157 item = gtk_separator_menu_item_new(); 1.158 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); 1.159 - 1.160 - /* Zoom in */ 1.161 - item = gtk_image_menu_item_new_with_label(_("Zoom in")); 1.162 - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), 1.163 - gtk_image_new_from_stock(GTK_STOCK_ZOOM_IN, GTK_ICON_SIZE_MENU)); 1.164 - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); 1.165 - g_signal_connect(item, "activate", G_CALLBACK(zoom_in_cb), webview); 1.166 - 1.167 - /* Zoom out */ 1.168 - item = gtk_image_menu_item_new_with_label(_("Zoom out")); 1.169 - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), 1.170 - gtk_image_new_from_stock(GTK_STOCK_ZOOM_OUT, GTK_ICON_SIZE_MENU)); 1.171 - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); 1.172 - g_signal_connect(item, "activate", G_CALLBACK(zoom_out_cb), webview); 1.173 - 1.174 - /* Separator */ 1.175 - item = gtk_separator_menu_item_new(); 1.176 - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); 1.177 1.178 /* Cookies */ 1.179 - if (! nocookies) { 1.180 + if (! private) { 1.181 item = gtk_image_menu_item_new_with_label(_("View cookies")); 1.182 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), 1.183 gtk_image_new_from_stock(GTK_STOCK_HELP, GTK_ICON_SIZE_MENU)); 1.184 @@ -469,10 +433,11 @@ 1.185 G_CALLBACK(create_web_view_cb), window); 1.186 } 1.187 1.188 - /* Connect WebKit contextual menu items */ 1.189 - g_object_connect(G_OBJECT(webview), "signal::populate-popup", 1.190 - G_CALLBACK(populate_menu_cb), webview, NULL); 1.191 - 1.192 + if (! nomenu) { 1.193 + /* Connect WebKit contextual menu items */ 1.194 + g_object_connect(G_OBJECT(webview), "signal::populate-popup", 1.195 + G_CALLBACK(populate_menu_cb), webview, NULL); 1.196 + } 1.197 return browser; 1.198 } 1.199 1.200 @@ -499,16 +464,9 @@ 1.201 G_CALLBACK(go_forward_cb), webview); 1.202 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); 1.203 1.204 - /* Home button */ 1.205 - item = gtk_tool_button_new_from_stock(GTK_STOCK_HOME); 1.206 - g_signal_connect(G_OBJECT(item), "clicked", 1.207 - G_CALLBACK(go_home_cb), webview); 1.208 - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); 1.209 - 1.210 /* URL entry */ 1.211 item = gtk_tool_item_new(); 1.212 gtk_tool_item_set_expand(item, TRUE); 1.213 - //gtk_widget_set_size_request(urientry, 0, 20); 1.214 gtk_container_add(GTK_CONTAINER(item), urientry); 1.215 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); 1.216 g_signal_connect(G_OBJECT(urientry), "activate", 1.217 @@ -530,6 +488,12 @@ 1.218 G_CALLBACK(search_icon_press_cb), webview); 1.219 g_signal_connect(G_OBJECT(search), "activate", 1.220 G_CALLBACK(search_entry_cb), webview); 1.221 + 1.222 + /* Home button */ 1.223 + item = gtk_tool_button_new_from_stock(GTK_STOCK_HOME); 1.224 + g_signal_connect(G_OBJECT(item), "clicked", 1.225 + G_CALLBACK(go_home_cb), webview); 1.226 + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); 1.227 1.228 /* Bookmark button */ 1.229 item = gtk_tool_button_new_from_stock(GTK_STOCK_PROPERTIES); 1.230 @@ -552,7 +516,7 @@ 1.231 1.232 /* Default TazWeb window */ 1.233 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 1.234 - gtk_window_set_default_size(GTK_WINDOW(window), 800, 600); 1.235 + gtk_window_set_default_size(GTK_WINDOW(window), width, height); 1.236 gtk_window_set_icon_name(GTK_WINDOW(window), "tazweb"); 1.237 gtk_widget_set_name(window, "TazWeb"); 1.238 gtk_window_set_wmclass(GTK_WINDOW(window), "tazweb", "TazWeb"); 1.239 @@ -579,35 +543,100 @@ 1.240 return window; 1.241 } 1.242 1.243 +void 1.244 +help(void) 1.245 +{ 1.246 + printf("\nTazWeb - Light and fast web browser using Webkit engine\n\n\ 1.247 +Usage: tazweb [--options] [value] url\n\ 1.248 +\n\ 1.249 +Options:\n\ 1.250 + -h --help\n\ 1.251 + -p --private\n\ 1.252 + -u --useragent [ua]\n\ 1.253 + -k --kiosk\n\ 1.254 + -r --raw\n\ 1.255 + --notoolbar\n\ 1.256 + --nomenu\n\n"); 1.257 + printf ("Bookmarks: %s\n\n", BOOKMARKS); 1.258 + return; 1.259 +} 1.260 + 1.261 int 1.262 main(int argc, char* argv[]) 1.263 { 1.264 textdomain (GETTEXT_PACKAGE); 1.265 + int c; 1.266 + 1.267 + /* Cmdline parsing with getopt_long to handle --option or -o */ 1.268 + while (1) { 1.269 + static struct option long_options[] = 1.270 + { 1.271 + /* Set flag */ 1.272 + { "notoolbar", no_argument, ¬oolbar, 1 }, 1.273 + { "nomenu", no_argument, &nomenu, 1 }, 1.274 + /* No flag */ 1.275 + { "help", no_argument, 0, 'h' }, 1.276 + { "private", no_argument, 0, 'p' }, 1.277 + { "useragent", required_argument, 0, 'u' }, 1.278 + { "kiosk", no_argument, 0, 'k' }, 1.279 + { "raw", no_argument, 0, 'r' }, 1.280 + { "width", required_argument, 0, 'w' }, 1.281 + { 0, 0, 0, 0} 1.282 + }; 1.283 + 1.284 + int index = 0; 1.285 + c = getopt_long (argc, argv, "hpu:kr", long_options, &index); 1.286 + 1.287 + /* Detect the end of the options */ 1.288 + if (c == -1) 1.289 + break; 1.290 1.291 - while (argc > 1) { 1.292 - if (!strcmp(argv[1],"--notoolbar")) { 1.293 - notoolbar++; 1.294 + switch (c) { 1.295 + case 0: 1.296 + /* Options with flag */ 1.297 + if (debug) { 1.298 + printf ("Option: %s", long_options[index].name); 1.299 + if (optarg) 1.300 + printf (" with arg: %s", optarg); 1.301 + printf ("\n"); 1.302 + } 1.303 + break; 1.304 + 1.305 + case 'h': 1.306 + help(); 1.307 + return 0; 1.308 + 1.309 + case 'p': 1.310 + private++; 1.311 + break; 1.312 + 1.313 + case 'u': 1.314 + if (debug) 1.315 + printf ("User agent option: %s\n", optarg); 1.316 + useragent = optarg; 1.317 + break; 1.318 + 1.319 + case 'k': 1.320 + kiosk++; 1.321 + break; 1.322 + 1.323 + case 'r': 1.324 + notoolbar++; 1.325 + nomenu++; 1.326 + break; 1.327 + 1.328 + case 'w': 1.329 + width = optarg; 1.330 + break; 1.331 + 1.332 + case '?': 1.333 + help(); 1.334 + return 0; 1.335 } 1.336 - if (!strcmp(argv[1],"--nocookies")) { 1.337 - nocookies++; 1.338 - } 1.339 - else if (!strcmp(argv[1],"--kiosk")) { 1.340 - kiosk++; 1.341 - } 1.342 - else if (!strcmp(argv[1],"--useragent") && argc > 2) { 1.343 - argc--; 1.344 - argv++; 1.345 - useragent = argv[1]; 1.346 - } 1.347 - else if (!strcmp(argv[1],"--help")) { 1.348 - printf ("Usage: tazweb [--notoolbar|--nocookies|--kiosk|--useragent] [ua]\n"); 1.349 - printf ("Bookmarks: %s\n", BMTXT); 1.350 - return 0; 1.351 - } 1.352 - else break; 1.353 - argc--; 1.354 - argv++; 1.355 } 1.356 + 1.357 + argc -= optind; 1.358 + argv += optind; 1.359 1.360 /* Initialize GTK */ 1.361 gtk_init(NULL, NULL); 1.362 @@ -624,11 +653,11 @@ 1.363 if (argv[1]) 1.364 check_requested_uri(); 1.365 1.366 - mainwindow = create_window(&webview); 1.367 - gtk_widget_show_all(mainwindow); 1.368 + tazweb_window = create_window(&webview); 1.369 + gtk_widget_show_all(tazweb_window); 1.370 1.371 /* Handle cookies */ 1.372 - if (! nocookies) { 1.373 + if (! private) { 1.374 session = webkit_get_default_session(); 1.375 snprintf(COOKIES, sizeof COOKIES, "%s", COOKIES); 1.376 cookies_setup(); 1.377 @@ -636,7 +665,7 @@ 1.378 1.379 /* Fullscreen for Kiosk mode */ 1.380 if (kiosk) 1.381 - gtk_window_fullscreen(GTK_WINDOW(mainwindow)); 1.382 + gtk_window_fullscreen(GTK_WINDOW(tazweb_window)); 1.383 1.384 webkit_web_view_load_uri(webview, uri); 1.385 gtk_widget_grab_focus(GTK_WIDGET(webview));