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,		&notoolbar, 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;