tazweb view src/tazweb.c @ rev 187

Tiny edits
author Paul Issott <paul@slitaz.org>
date Tue Mar 14 17:21:58 2017 +0000 (2017-03-14)
parents 639b611287cb
children 9c7e46fe4fda
line source
1 /*
2 * TazWeb is a radically simple web browser providing a single window
3 * with a single toolbar with buttons, a URL entry and search as well
4 * as a contextual menu, but no menu bar or tabs. Commented line code
5 * starts with // and comments are between * *
6 *
7 * Copyright (C) 2011-2017 SliTaz GNU/Linux - BSD License
8 * See AUTHORS and LICENSE for detailed information
9 *
10 */
12 #include <getopt.h>
13 #include <glib.h>
14 #include <glib/gi18n.h>
16 #include <gtk/gtk.h>
17 #include <webkit/webkit.h>
18 #include <libsoup/soup.h>
20 #define HOME g_get_home_dir()
21 #define CONFIG g_strdup_printf("%s/.config/tazweb", HOME)
22 #define BMTXT g_strdup_printf("%s/bookmarks.txt", CONFIG)
23 #define BOOKMARKS g_strdup_printf("%s/bookmarks.txt", CONFIG)
24 #define COOKIES g_strdup_printf("%s/cookies.txt", CONFIG)
25 #define DOWNLOADS g_strdup_printf("%s/Downloads", HOME)
26 #define WEBHOME "file:///usr/share/webhome/index.html"
27 #define SEARCH "http://duckduckgo.com/?q=%s&t=slitaz"
28 #define GETTEXT_PACKAGE "tazweb"
30 int width = 800;
31 int height = 600;
32 int private = 0;
33 int debug = 1;
35 static gchar *useragent = "TazWeb (X11; SliTaz GNU/Linux; U; en_US)";
36 static gboolean notoolbar;
37 static gboolean nomenu;
38 static gboolean kiosk;
40 static GtkWidget* create_window(WebKitWebView** newwebview);
41 static GtkWidget *tazweb_window, *vbox, *browser, *toolbar;
42 static WebKitWebView *webview;
43 static WebKitWebFrame *frame;
44 static SoupSession *session;
45 static SoupCookieJar *cookiejar;
46 static gint count = 0;
47 const gchar* uri;
49 /* Create an icon */
50 static GdkPixbuf*
51 create_pixbuf(const gchar* image)
52 {
53 GdkPixbuf *pixbuf;
54 pixbuf = gdk_pixbuf_new_from_file(image, NULL);
55 return pixbuf;
56 }
58 /* Can be: http://hg.slitaz.org or hg.slitaz.org */
59 static void
60 check_requested_uri()
61 {
62 uri = g_strrstr(uri, "://") ? g_strdup(uri)
63 : g_strdup_printf("http://%s", uri);
64 }
66 /* Update title */
67 static void
68 update_title(GtkWindow* window, WebKitWebView* webview)
69 {
70 GString *string;
71 gdouble progress;
72 gchar *title;
74 string = g_string_new(webkit_web_view_get_title(webview));
75 progress = webkit_web_view_get_progress(webview) * 100;
76 if (progress < 100)
77 g_string_append_printf(string, " [ %f%% ] ", progress);
79 title = g_string_free(string, FALSE);
80 gtk_window_set_title(window, title);
81 g_free(title);
82 }
84 /* Get the page title */
85 static void
86 notify_title_cb(WebKitWebView* webview, GParamSpec* pspec, GtkWidget* window)
87 {
88 update_title(GTK_WINDOW(window), webview);
89 }
91 /* Request progress in window title */
92 static void
93 notify_progress_cb(WebKitWebView* webview, GParamSpec* pspec, GtkWidget* window)
94 {
95 update_title(GTK_WINDOW(window), webview);
96 }
98 /* Notify url entry */
99 static void
100 notify_load_status_cb(WebKitWebView* webview, GParamSpec* pspec, GtkWidget* urientry)
101 {
102 if (webkit_web_view_get_load_status(webview) == WEBKIT_LOAD_COMMITTED) {
103 frame = webkit_web_view_get_main_frame(webview);
104 uri = webkit_web_frame_get_uri(frame);
105 if (uri)
106 gtk_entry_set_text(GTK_ENTRY(urientry), uri);
107 }
108 }
110 /* Destroy the window */
111 static void
112 destroy_cb(GtkWidget* widget, GtkWindow* window)
113 {
114 if (g_atomic_int_dec_and_test(&count))
115 gtk_main_quit();
116 }
118 /* Show page source */
119 static void
120 view_source_cb(GtkWidget* widget, WebKitWebView* webview)
121 {
122 gboolean source;
124 frame = webkit_web_view_get_main_frame(webview);
125 uri = webkit_web_frame_get_uri(frame);
126 source = webkit_web_view_get_view_source_mode(webview);
128 webkit_web_view_set_view_source_mode(webview, !source);
129 webkit_web_view_reload(webview);
130 }
132 /* URL entry callback function */
133 static void
134 uri_entry_cb(GtkWidget* urientry, WebKitWebView* webview)
135 {
136 uri = gtk_entry_get_text(GTK_ENTRY(urientry));
137 g_assert(uri);
138 check_requested_uri();
139 webkit_web_view_load_uri(webview, uri);
140 }
142 /* Search entry and icon callback function */
143 static void
144 search_web(GtkWidget* search, WebKitWebView* webview)
145 {
146 uri = g_strdup_printf(SEARCH, gtk_entry_get_text(GTK_ENTRY(search)));
147 g_assert(uri);
148 webkit_web_view_load_uri(webview, uri);
149 }
151 static void
152 search_entry_cb(GtkWidget* search, WebKitWebView* webview)
153 {
154 search_web(search, webview);
155 }
157 static void
158 search_icon_press_cb(GtkWidget *search, GtkEntryIconPosition pos,
159 GdkEvent *event, WebKitWebView* webview)
160 {
161 search_web(search, webview);
162 }
164 /*
165 *
166 * Navigation functions
167 *
168 */
170 static void
171 bookmarks_edit_cb(GtkWidget* widget, WebKitWebView* webview)
172 {
173 system("/usr/lib/tazweb/helper.sh edit_bookmarks");
174 }
176 static void
177 go_bookmarks_cb(GtkWidget* widget, WebKitWebView* webview)
178 {
179 system("/usr/lib/tazweb/helper.sh html_bookmarks");
180 uri = g_strdup_printf("file://%s/bookmarks.html", CONFIG);
181 g_assert(uri);
182 webkit_web_view_load_uri(webview, uri);
183 }
185 static void
186 go_home_cb(GtkWidget* widget, WebKitWebView* webview)
187 {
188 uri = WEBHOME;
189 g_assert(uri);
190 webkit_web_view_load_uri(webview, uri);
191 }
193 static void
194 go_back_cb(GtkWidget* widget, WebKitWebView* webview)
195 {
196 webkit_web_view_go_back(webview);
197 }
199 static void
200 go_forward_cb(GtkWidget* widget, WebKitWebView* webview)
201 {
202 webkit_web_view_go_forward(webview);
203 }
205 /* Documentation callback */
206 static void
207 tazweb_doc_cb(GtkWidget* widget, WebKitWebView *webview)
208 {
209 uri = ("file:///usr/share/doc/tazweb/tazweb.html");
210 g_assert(uri);
211 webkit_web_view_load_uri(webview, uri);
212 }
214 /* Download callback */
215 static gboolean
216 download_requested_cb(WebKitWebView *webview, WebKitDownload *download,
217 gpointer user_data)
218 {
219 const gchar* buffer;
220 uri = webkit_download_get_uri(download);
221 asprintf(&buffer, "xterm -T 'TazWeb Download' -geom 72x12+0-24 -e \
222 'mkdir -p %s && wget -P %s -c %s; sleep 2' &",
223 DOWNLOADS, DOWNLOADS, uri);
224 system(buffer);
225 }
227 /* Printing callback function */
228 static void
229 print_page_cb (GtkWidget *widget, gpointer data)
230 {
231 webkit_web_frame_print (webkit_web_view_get_main_frame (
232 WEBKIT_WEB_VIEW (webview)));
233 }
235 /* New webview callbacks */
236 static WebKitWebView*
237 create_web_view_cb(WebKitWebView* webview, WebKitWebFrame* web_frame,
238 GtkWidget* window)
239 {
240 WebKitWebView *newview;
241 create_window(&newview);
242 return newview;
243 }
245 static gboolean
246 webview_ready_cb(WebKitWebView* webview, GtkWidget* window)
247 {
248 gtk_widget_grab_focus(GTK_WIDGET(webview));
249 gtk_widget_show_all(window);
250 return FALSE;
251 }
253 static gboolean
254 close_webview_cb(WebKitWebView* webview, GtkWidget* window)
255 {
256 gtk_widget_destroy(window);
257 return TRUE;
258 }
260 /* Add a bookmark */
261 void
262 add_bookmark_cb(GtkWidget *widget, gpointer data)
263 {
264 const gchar* title;
265 const gchar* buffer;
267 title = webkit_web_view_get_title(WEBKIT_WEB_VIEW (webview));
268 uri = webkit_web_view_get_uri(WEBKIT_WEB_VIEW (webview));
270 asprintf(&buffer, "echo '%s|%s' >> %s", title, uri, BOOKMARKS);
271 system(buffer);
272 }
274 /* Setup session cookies */
275 void
276 cookies_setup(void)
277 {
278 if (cookiejar) {
279 soup_session_remove_feature(session,
280 (SoupSessionFeature*)cookiejar);
281 g_object_unref(cookiejar);
282 cookiejar = NULL;
283 }
285 cookiejar = soup_cookie_jar_text_new(COOKIES, 0);
286 soup_session_add_feature(session, (SoupSessionFeature*)cookiejar);
287 }
289 static void
290 cookies_view_cb(GtkWidget* widget, WebKitWebView* webview)
291 {
292 system("/usr/lib/tazweb/helper.sh html_cookies");
293 uri = g_strdup_printf("file://%s/cookies.html", CONFIG);
294 g_assert(uri);
295 webkit_web_view_load_uri(webview, uri);
296 }
298 static void
299 cookies_clean_cb(GtkWidget* widget, WebKitWebView* webview)
300 {
301 system("/usr/lib/tazweb/helper.sh clean_cookies");
302 }
304 /* Add items to WebKit contextual menu */
305 static void
306 populate_menu_cb(WebKitWebView *webview, GtkMenu *menu, gpointer data)
307 {
308 GtkWidget* item;
310 /* Separator */
311 item = gtk_separator_menu_item_new();
312 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
314 /* Bookmark */
315 item = gtk_image_menu_item_new_with_label(_("Bookmarks"));
316 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
317 gtk_image_new_from_stock(GTK_STOCK_PROPERTIES, GTK_ICON_SIZE_MENU));
318 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
319 g_signal_connect(item, "activate", G_CALLBACK(go_bookmarks_cb), webview);
321 if (! kiosk) {
322 /* Add a bookmark */
323 item = gtk_image_menu_item_new_with_label(_("Add a bookmark"));
324 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
325 gtk_image_new_from_stock(GTK_STOCK_ADD, GTK_ICON_SIZE_MENU));
326 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
327 g_signal_connect(item, "activate", G_CALLBACK(add_bookmark_cb), webview);
329 /* Edit bookmarks */
330 item = gtk_image_menu_item_new_with_label(_("Edit bookmarks"));
331 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
332 gtk_image_new_from_stock(GTK_STOCK_EDIT, GTK_ICON_SIZE_MENU));
333 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
334 g_signal_connect(item, "activate", G_CALLBACK(bookmarks_edit_cb), webview);
336 /* Separator */
337 item = gtk_separator_menu_item_new();
338 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
339 }
341 /* Printing */
342 item = gtk_image_menu_item_new_with_label(_("Print this page"));
343 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
344 gtk_image_new_from_stock(GTK_STOCK_PRINT, GTK_ICON_SIZE_MENU));
345 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
346 g_signal_connect(item, "activate", G_CALLBACK(print_page_cb), webview);
348 /* View source mode */
349 item = gtk_image_menu_item_new_with_label(_("View source mode"));
350 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
351 gtk_image_new_from_stock(GTK_STOCK_PROPERTIES, GTK_ICON_SIZE_MENU));
352 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
353 g_signal_connect(item, "activate", G_CALLBACK(view_source_cb), webview);
355 /* Separator */
356 item = gtk_separator_menu_item_new();
357 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
359 /* Cookies */
360 if (! private) {
361 item = gtk_image_menu_item_new_with_label(_("View cookies"));
362 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
363 gtk_image_new_from_stock(GTK_STOCK_HELP, GTK_ICON_SIZE_MENU));
364 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
365 g_signal_connect(item, "activate", G_CALLBACK(cookies_view_cb), webview);
367 item = gtk_image_menu_item_new_with_label(_("Clean all cookies"));
368 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
369 gtk_image_new_from_stock(GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU));
370 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
371 g_signal_connect(item, "activate", G_CALLBACK(cookies_clean_cb), webview);
373 /* Separator */
374 item = gtk_separator_menu_item_new();
375 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
376 }
378 /* TazWeb documentation */
379 item = gtk_image_menu_item_new_with_label(_("TazWeb manual"));
380 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
381 gtk_image_new_from_stock(GTK_STOCK_HELP, GTK_ICON_SIZE_MENU));
382 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
383 g_signal_connect(item, "activate", G_CALLBACK(tazweb_doc_cb), webview);
385 /* Quit TazWeb */
386 item = gtk_image_menu_item_new_with_label(_("Quit TazWeb"));
387 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
388 gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU));
389 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
390 g_signal_connect(item, "activate", G_CALLBACK(destroy_cb), webview);
392 gtk_widget_show_all(GTK_WIDGET(menu));
393 }
395 /* Scrolled window for the webview */
396 static GtkWidget*
397 create_browser(GtkWidget* window, GtkWidget* urientry, GtkWidget* search,
398 WebKitWebView* webview)
399 {
400 WebKitWebSettings *settings;
402 browser = gtk_scrolled_window_new(NULL, NULL);
403 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(browser),
404 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
406 gtk_container_add(GTK_CONTAINER(browser), GTK_WIDGET(webview));
408 /* User agent */
409 settings = webkit_web_view_get_settings (webview);
410 g_object_set(G_OBJECT(settings), "user-agent", useragent, NULL);
412 /* Connect WebKit events */
413 g_signal_connect(webview, "notify::title",
414 G_CALLBACK(notify_title_cb), window);
415 g_signal_connect(webview, "notify::progress",
416 G_CALLBACK(notify_progress_cb), window);
417 g_signal_connect(webview, "notify::load-status",
418 G_CALLBACK(notify_load_status_cb), urientry);
419 g_signal_connect(webview, "web-view-ready",
420 G_CALLBACK(webview_ready_cb), window);
421 g_signal_connect(webview, "close-web-view",
422 G_CALLBACK(close_webview_cb), window);
424 /* Impossible to open in new window or download in kiosk mode */
425 if (! kiosk) {
426 g_signal_connect(webview, "download-requested",
427 G_CALLBACK(download_requested_cb), NULL);
428 g_signal_connect(webview, "create-web-view",
429 G_CALLBACK(create_web_view_cb), window);
430 }
432 if (! nomenu) {
433 /* Connect WebKit contextual menu items */
434 g_object_connect(G_OBJECT(webview), "signal::populate-popup",
435 G_CALLBACK(populate_menu_cb), webview, NULL);
436 }
437 return browser;
438 }
440 static GtkWidget*
441 create_toolbar(GtkWidget* urientry, GtkWidget* search, WebKitWebView* webview)
442 {
443 GtkToolItem* item;
445 toolbar = gtk_toolbar_new();
446 gtk_toolbar_set_orientation(GTK_TOOLBAR(toolbar),
447 GTK_ORIENTATION_HORIZONTAL);
448 gtk_toolbar_set_style(GTK_TOOLBAR(toolbar),
449 GTK_TOOLBAR_BOTH_HORIZ);
451 /* The back button */
452 item = gtk_tool_button_new_from_stock(GTK_STOCK_GO_BACK);
453 g_signal_connect(G_OBJECT(item), "clicked",
454 G_CALLBACK(go_back_cb), webview);
455 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
457 /* The forward button */
458 item = gtk_tool_button_new_from_stock(GTK_STOCK_GO_FORWARD);
459 g_signal_connect(G_OBJECT(item), "clicked",
460 G_CALLBACK(go_forward_cb), webview);
461 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
463 /* URL entry */
464 item = gtk_tool_item_new();
465 gtk_tool_item_set_expand(item, TRUE);
466 gtk_container_add(GTK_CONTAINER(item), urientry);
467 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
468 g_signal_connect(G_OBJECT(urientry), "activate",
469 G_CALLBACK(uri_entry_cb), webview);
471 /* Separator */
472 item = gtk_separator_tool_item_new();
473 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
475 /* Search entry */
476 item = gtk_tool_item_new();
477 gtk_tool_item_set_expand(item, FALSE);
478 gtk_widget_set_size_request(GTK_WIDGET(item), 200, 0);
479 gtk_container_add(GTK_CONTAINER(item), search);
480 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
481 gtk_entry_set_icon_from_stock(GTK_ENTRY(search),
482 GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_FIND);
483 g_signal_connect(GTK_ENTRY(search), "icon-press",
484 G_CALLBACK(search_icon_press_cb), webview);
485 g_signal_connect(G_OBJECT(search), "activate",
486 G_CALLBACK(search_entry_cb), webview);
488 /* Home button */
489 item = gtk_tool_button_new_from_stock(GTK_STOCK_HOME);
490 g_signal_connect(G_OBJECT(item), "clicked",
491 G_CALLBACK(go_home_cb), webview);
492 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
494 /* Bookmark button */
495 item = gtk_tool_button_new_from_stock(GTK_STOCK_PROPERTIES);
496 g_signal_connect(G_OBJECT(item), "clicked",
497 G_CALLBACK(go_bookmarks_cb), webview);
498 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
500 return toolbar;
501 }
503 /* Main window */
504 static GtkWidget*
505 create_window(WebKitWebView** newwebview)
506 {
507 GtkWidget *window;
508 GtkWidget *urientry;
509 GtkWidget *search;
511 g_atomic_int_inc(&count);
513 /* Default TazWeb window */
514 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
515 gtk_window_set_default_size(GTK_WINDOW(window), width, height);
516 gtk_window_set_icon_name(GTK_WINDOW(window), "tazweb");
517 gtk_widget_set_name(window, "TazWeb");
518 gtk_window_set_wmclass(GTK_WINDOW(window), "tazweb", "TazWeb");
519 g_signal_connect(window, "destroy", G_CALLBACK(destroy_cb), NULL);
521 /* Webview and widgets */
522 webview = WEBKIT_WEB_VIEW(webkit_web_view_new());
523 urientry = gtk_entry_new();
524 search = gtk_entry_new();
525 vbox = gtk_vbox_new(FALSE, 0);
527 /* Pack box and container */
528 if (! notoolbar)
529 gtk_box_pack_start(GTK_BOX(vbox),
530 create_toolbar(urientry, search, webview), FALSE, FALSE, 0);
531 gtk_box_pack_start(GTK_BOX(vbox),
532 create_browser(window, urientry, search, webview), TRUE, TRUE, 0);
534 gtk_container_add(GTK_CONTAINER(window), vbox);
536 if (newwebview)
537 *newwebview = webview;
539 return window;
540 }
542 /* Cmdline Help & usage */
543 void
544 help(void)
545 {
546 printf("\nTazWeb - Light and fast web browser using Webkit engine\n\n\
547 Usage: tazweb [--options] [value] url\n\
548 \n\
549 Options:\n\
550 -h --help Print TazWeb command line help\n\
551 -p --private Private browsing without cookies support\n\
552 -u --useragent [ua] Configure the user agent string\n\
553 -k --kiosk Fullscreen, no bookmarks and download support\n\
554 -r --raw Raw webkit window without toolbar and menu\n\
555 -s --small Small Tazweb window for tiny web applications\n\
556 --notoolbar Disable the top toolbar\n\
557 --nomenu Disable TazWeb contextual menu\n\n");
559 return;
560 }
562 int
563 main(int argc, char *argv[])
564 {
565 textdomain (GETTEXT_PACKAGE);
566 int c;
568 /* Cmdline parsing with getopt_long to handle --option or -o */
569 while (1) {
570 static struct option long_options[] =
571 {
572 /* Set flag */
573 { "notoolbar", no_argument, &notoolbar, 1 },
574 { "nomenu", no_argument, &nomenu, 1 },
575 /* No flag */
576 { "help", no_argument, 0, 'h' },
577 { "private", no_argument, 0, 'p' },
578 { "useragent", required_argument, 0, 'u' },
579 { "kiosk", no_argument, 0, 'k' },
580 { "raw", no_argument, 0, 'r' },
581 { "small", no_argument, 0, 's' },
582 { 0, 0, 0, 0}
583 };
585 int index = 0;
586 c = getopt_long (argc, argv, "hpu:krs", long_options, &index);
588 /* Detect the end of the options */
589 if (c == -1)
590 break;
592 switch (c) {
593 case 0:
594 /* Options with flag */
595 if (debug) {
596 printf ("Option: %s", long_options[index].name);
597 if (optarg)
598 printf (" with arg: %s", optarg);
599 printf ("\n");
600 }
601 break;
603 case 'h':
604 help();
605 return 0;
607 case 'p':
608 private++;
609 break;
611 case 'u':
612 if (debug)
613 printf ("User agent option: %s\n", optarg);
614 useragent = optarg;
615 break;
617 case 'k':
618 kiosk++;
619 break;
621 case 'r':
622 notoolbar++;
623 nomenu++;
624 break;
626 case 's':
627 width = 640;
628 height = 480;
629 break;
631 case '?':
632 help();
633 return 0;
634 }
635 }
637 argc -= optind;
638 argv += optind;
641 /* Initialize GTK */
642 gtk_init(NULL, NULL);
644 /* Get a default bookmarks.txt if missing */
645 if (! g_file_test(BMTXT, G_FILE_TEST_EXISTS)) {
646 system("install -m 0700 -d $HOME/.config/tazweb");
647 system("install -m 0600 /usr/share/tazweb/bookmarks.txt \
648 $HOME/.config/tazweb/bookmarks.txt");
649 }
651 /* Load the start page or the url in argument */
652 uri =(char*)(argc == 1 ? argv[0] : WEBHOME);
653 if (argv[0])
654 check_requested_uri();
656 tazweb_window = create_window(&webview);
657 gtk_widget_show_all(tazweb_window);
659 /* Handle cookies */
660 if (! private) {
661 session = webkit_get_default_session();
662 snprintf(COOKIES, sizeof COOKIES, "%s", COOKIES);
663 cookies_setup();
664 }
666 /* Fullscreen for Kiosk mode */
667 if (kiosk)
668 gtk_window_fullscreen(GTK_WINDOW(tazweb_window));
670 webkit_web_view_load_uri(webview, uri);
671 gtk_widget_grab_focus(GTK_WIDGET(webview));
672 gtk_main();
674 return 0;
675 }