tazweb diff src/main.c @ rev 130

Add a Kiosk mode and fullscreen button for normal use
author Christophe Lincoln <pankso@slitaz.org>
date Sat Jan 04 03:12:36 2014 +0100 (2014-01-04)
parents a8d926c59509
children 707f5eee5536
line diff
     1.1 --- a/src/main.c	Wed Feb 27 18:15:40 2013 +0000
     1.2 +++ b/src/main.c	Sat Jan 04 03:12:36 2014 +0100
     1.3 @@ -22,12 +22,13 @@
     1.4  
     1.5  /* Needs AppleWebKit/531.2+ to handle all sites ? */
     1.6  static gchar *useragent = "TazWeb (X11; SliTaz GNU/Linux; U; en_US)";
     1.7 -
     1.8  static GtkWidget* create_window(WebKitWebView** newwebview);
     1.9  static GtkWidget *mainwindow, *vbox, *browser, *toolbar;
    1.10  static WebKitWebView *webview;
    1.11  static WebKitWebFrame *frame;
    1.12  static gint count = 0;
    1.13 +static gboolean notoolbar;
    1.14 +static gboolean kiosk;
    1.15  const gchar* uri;
    1.16  
    1.17  /* Create an icon */
    1.18 @@ -167,17 +168,17 @@
    1.19  }
    1.20  
    1.21  /* Fullscreen and unfullscreen callback function */
    1.22 -//static void
    1.23 -//fullscreen_cb(GtkWindow* window, gpointer data)
    1.24 -//{
    1.25 -	//GdkWindowState state;
    1.26 -	//state = gdk_window_get_state(gtk_widget_get_window(GTK_WIDGET(mainwindow)));
    1.27 +static void
    1.28 +fullscreen_cb(GtkWindow* window, gpointer data)
    1.29 +{
    1.30 +	GdkWindowState state;
    1.31 +	state = gdk_window_get_state(gtk_widget_get_window(GTK_WIDGET(mainwindow)));
    1.32  
    1.33 -	//if(state & GDK_WINDOW_STATE_FULLSCREEN)
    1.34 -		//gtk_window_unfullscreen(GTK_WINDOW(mainwindow));
    1.35 -	//else
    1.36 -		//gtk_window_fullscreen(GTK_WINDOW(mainwindow));
    1.37 -//}
    1.38 +	if(state & GDK_WINDOW_STATE_FULLSCREEN)
    1.39 +		gtk_window_unfullscreen(GTK_WINDOW(mainwindow));
    1.40 +	else
    1.41 +		gtk_window_fullscreen(GTK_WINDOW(mainwindow));
    1.42 +}
    1.43  
    1.44  /* TazWeb doc callback function */
    1.45  static void
    1.46 @@ -293,15 +294,20 @@
    1.47  	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
    1.48  
    1.49  	/* Add to bookmarks */
    1.50 -	item = gtk_image_menu_item_new_with_label(_("Add a bookmark"));
    1.51 +	if (! kiosk) {
    1.52 +		item = gtk_image_menu_item_new_with_label(_("Add a bookmark"));
    1.53 +		gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
    1.54 +		gtk_image_new_from_stock(GTK_STOCK_ADD, GTK_ICON_SIZE_MENU));
    1.55 +		gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
    1.56 +		g_signal_connect(item, "activate", G_CALLBACK(add_bookmark_cb), webview);
    1.57 +	}
    1.58 +
    1.59 +	/* Printing */
    1.60 +	item = gtk_image_menu_item_new_with_label(_("Print this page"));
    1.61  	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
    1.62 -	gtk_image_new_from_stock(GTK_STOCK_ADD, GTK_ICON_SIZE_MENU));
    1.63 +	gtk_image_new_from_stock(GTK_STOCK_PRINT, GTK_ICON_SIZE_MENU));
    1.64  	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
    1.65 -	g_signal_connect(item, "activate", G_CALLBACK(add_bookmark_cb), webview);
    1.66 -
    1.67 -	/* Separator */
    1.68 -	item = gtk_separator_menu_item_new();
    1.69 -	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
    1.70 +	g_signal_connect(item, "activate", G_CALLBACK(print_page_cb), webview);
    1.71  
    1.72  	/* View source mode */
    1.73  	item = gtk_image_menu_item_new_with_label(_("View source mode"));
    1.74 @@ -310,13 +316,6 @@
    1.75  	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
    1.76  	g_signal_connect(item, "activate", G_CALLBACK(view_source_cb), webview);
    1.77  
    1.78 -	/* Printing */
    1.79 -	item = gtk_image_menu_item_new_with_label(_("Print this page"));
    1.80 -	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
    1.81 -	gtk_image_new_from_stock(GTK_STOCK_PRINT, GTK_ICON_SIZE_MENU));
    1.82 -	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
    1.83 -	g_signal_connect(item, "activate", G_CALLBACK(print_page_cb), webview);
    1.84 -
    1.85  	/* Separator */
    1.86  	item = gtk_separator_menu_item_new();
    1.87  	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
    1.88 @@ -328,6 +327,17 @@
    1.89  	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
    1.90  	g_signal_connect(item, "activate", G_CALLBACK(tazweb_doc_cb), webview);
    1.91  	
    1.92 +	/* Separator */
    1.93 +	item = gtk_separator_menu_item_new();
    1.94 +	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
    1.95 +	
    1.96 +	/* Quit TazWeb */
    1.97 +	item = gtk_image_menu_item_new_with_label(_("Quit TazWeb"));
    1.98 +	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
    1.99 +	gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU));
   1.100 +	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
   1.101 +	g_signal_connect(item, "activate", G_CALLBACK(destroy_cb), webview);
   1.102 +	
   1.103  	gtk_widget_show_all(GTK_WIDGET(menu));
   1.104  }
   1.105  
   1.106 @@ -355,14 +365,17 @@
   1.107  			G_CALLBACK(notify_progress_cb), window);
   1.108  	g_signal_connect(webview, "notify::load-status",
   1.109  			G_CALLBACK(notify_load_status_cb), urientry);
   1.110 -	g_signal_connect(webview, "download-requested",
   1.111 -			G_CALLBACK(download_requested_cb), NULL);
   1.112 -	g_signal_connect(webview, "create-web-view",
   1.113 -			G_CALLBACK(create_web_view_cb), window);
   1.114  	g_signal_connect(webview, "web-view-ready",
   1.115  			G_CALLBACK(webview_ready_cb), window);
   1.116  	g_signal_connect(webview, "close-web-view",
   1.117  			G_CALLBACK(close_webview_cb), window);
   1.118 +	/* Impossible to open in new window or download in kiosk mode */
   1.119 +	if (! kiosk) {
   1.120 +		g_signal_connect(webview, "download-requested",
   1.121 +			G_CALLBACK(download_requested_cb), NULL);
   1.122 +		g_signal_connect(webview, "create-web-view",
   1.123 +			G_CALLBACK(create_web_view_cb), window);
   1.124 +	}
   1.125  
   1.126  	/* Connect WebKit contextual menu items */
   1.127  	g_object_connect(G_OBJECT(webview), "signal::populate-popup",
   1.128 @@ -426,15 +439,16 @@
   1.129  			G_CALLBACK(search_entry_cb), webview);
   1.130  	
   1.131  	/* The Fullscreen button */
   1.132 -	//item = gtk_tool_button_new_from_stock(GTK_STOCK_FULLSCREEN);
   1.133 -	//g_signal_connect(G_OBJECT(item), "clicked",
   1.134 -			//G_CALLBACK(fullscreen_cb), NULL);
   1.135 -	//gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
   1.136 -
   1.137 +	if (! kiosk) {
   1.138 +		item = gtk_tool_button_new_from_stock(GTK_STOCK_FULLSCREEN);
   1.139 +		g_signal_connect(G_OBJECT(item), "clicked",
   1.140 +				G_CALLBACK(fullscreen_cb), NULL);
   1.141 +		gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
   1.142 +	}
   1.143 +	
   1.144  	return toolbar;
   1.145  }
   1.146  
   1.147 -static gboolean notoolbar;
   1.148  /* Main window */
   1.149  static GtkWidget*
   1.150  create_window(WebKitWebView** newwebview)
   1.151 @@ -464,7 +478,7 @@
   1.152  			create_browser(window, urientry, search, webview), TRUE, TRUE, 0);
   1.153  	if (! notoolbar)
   1.154  		gtk_box_pack_start(GTK_BOX(vbox),
   1.155 -				create_toolbar(urientry, search, webview), FALSE, FALSE, 0);
   1.156 +			create_toolbar(urientry, search, webview), FALSE, FALSE, 0);
   1.157  	gtk_container_add(GTK_CONTAINER(window), vbox);
   1.158  	
   1.159  	if (newwebview)
   1.160 @@ -482,6 +496,9 @@
   1.161  		if (!strcmp(argv[1],"--notoolbar")) {
   1.162  			notoolbar++;
   1.163  		}
   1.164 +		else if (!strcmp(argv[1],"--kiosk")) {
   1.165 +			kiosk++;
   1.166 +		}
   1.167  		else if (!strcmp(argv[1],"--useragent") && argc > 2) {
   1.168  			argc--;
   1.169  			argv++;
   1.170 @@ -508,8 +525,12 @@
   1.171  		check_requested_uri();
   1.172  		
   1.173  	mainwindow = create_window(&webview);
   1.174 +	gtk_widget_show_all(mainwindow);
   1.175  	
   1.176 -	gtk_widget_show_all(mainwindow);
   1.177 +	/* Fullscreen for Kiosk mode */
   1.178 +	if (kiosk)
   1.179 +		gtk_window_fullscreen(GTK_WINDOW(mainwindow));
   1.180 +	
   1.181  	webkit_web_view_load_uri(webview, uri);
   1.182  	gtk_widget_grab_focus(GTK_WIDGET(webview));
   1.183  	gtk_main();