From f01e39312c2b09d38f0ff7be38e68e91ba90efd6 Mon Sep 17 00:00:00 2001 From: Marco Peereboom Date: Mon, 28 Feb 2011 02:44:03 +0000 Subject: add kiosk mode --- xxxterm.1 | 14 ++++++-- xxxterm.c | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 106 insertions(+), 15 deletions(-) diff --git a/xxxterm.1 b/xxxterm.1 index b359f9c..366998f 100644 --- a/xxxterm.1 +++ b/xxxterm.1 @@ -649,10 +649,12 @@ as the last tab. .It Cm browser_mode The .Nm -browser has 2 default operating modes: +browser has 3 default operating modes: .Pa normal -(the default) or -.Pa whitelist . +(the default), +.Pa whitelist +and +.Pa kiosk . In the .Pa normal mode the browser allows all cookies and Java Script as any other browser @@ -672,6 +674,12 @@ If a domain does not appear in the whitelists .Nm disallows cookies and Java Script execution. .Pp +In +.Pa kiosk +mode the browse works just like +.Pa normal +mode however the toolbar only has the backward, forward and home button. +.Pp This setting must be the first entry in .Pa ~/.xxxterm.conf because it sets advanced settings that can be overridden later in the file. diff --git a/xxxterm.c b/xxxterm.c index a26ab32..7a576f9 100644 --- a/xxxterm.c +++ b/xxxterm.c @@ -170,6 +170,7 @@ struct tab { GtkWidget *backward; GtkWidget *forward; GtkWidget *stop; + GtkWidget *gohome; GtkWidget *js_toggle; GtkEntryCompletion *completion; guint tab_id; @@ -427,8 +428,9 @@ struct karg { #define XT_SES_DONOTHING (0) #define XT_SES_CLOSETABS (1) -#define XT_COOKIE_NORMAL (0) -#define XT_COOKIE_WHITELIST (1) +#define XT_BM_NORMAL (0) +#define XT_BM_WHITELIST (1) +#define XT_BM_KIOSK (2) /* mime types */ struct mime_type { @@ -452,7 +454,7 @@ int tabless = 0; /* allow only 1 tab */ int enable_socket = 0; int single_instance = 0; /* only allow one xxxterm to run */ int fancy_bar = 1; /* fancy toolbar */ -int browser_mode = XT_COOKIE_NORMAL; +int browser_mode = XT_BM_NORMAL; /* runtime settings */ int show_tabs = 1; /* show tabs on notebook */ @@ -924,7 +926,7 @@ int set_browser_mode(struct settings *s, char *val) { if (!strcmp(val, "whitelist")) { - browser_mode = XT_COOKIE_WHITELIST; + browser_mode = XT_BM_WHITELIST; allow_volatile_cookies = 0; cookie_policy = SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY; cookies_enabled = 1; @@ -935,7 +937,7 @@ set_browser_mode(struct settings *s, char *val) enable_scripts = 0; enable_js_whitelist = 1; } else if (!strcmp(val, "normal")) { - browser_mode = XT_COOKIE_NORMAL; + browser_mode = XT_BM_NORMAL; allow_volatile_cookies = 0; cookie_policy = SOUP_COOKIE_JAR_ACCEPT_ALWAYS; cookies_enabled = 1; @@ -945,6 +947,18 @@ set_browser_mode(struct settings *s, char *val) session_timeout = 3600; enable_scripts = 1; enable_js_whitelist = 0; + } else if (!strcmp(val, "kiosk")) { + browser_mode = XT_BM_KIOSK; + allow_volatile_cookies = 0; + cookie_policy = SOUP_COOKIE_JAR_ACCEPT_ALWAYS; + cookies_enabled = 1; + enable_cookie_whitelist = 0; + read_only_cookies = 0; + save_rejected_cookies = 0; + session_timeout = 3600; + enable_scripts = 1; + enable_js_whitelist = 0; + show_tabs = 0; } else return (1); @@ -956,10 +970,12 @@ get_browser_mode(struct settings *s) { char *r = NULL; - if (browser_mode == XT_COOKIE_WHITELIST) + if (browser_mode == XT_BM_WHITELIST) r = g_strdup("whitelist"); - else if (browser_mode == XT_COOKIE_NORMAL) + else if (browser_mode == XT_BM_NORMAL) r = g_strdup("normal"); + else if (browser_mode == XT_BM_KIOSK) + r = g_strdup("kiosk"); else return (NULL); @@ -6526,6 +6542,19 @@ forward_cb(GtkWidget *w, struct tab *t) navaction(t, &a); } +void +home_cb(GtkWidget *w, struct tab *t) +{ + if (t == NULL) { + show_oops_s("home_cb invalid parameters"); + return; + } + + DNPRINTF(XT_D_NAV, "home_cb: tab %d\n", t->tab_id); + + load_uri(t, home); +} + void stop_cb(GtkWidget *w, struct tab *t) { @@ -6622,6 +6651,45 @@ create_window(void) return (w); } +GtkWidget * +create_kiosk_toolbar(struct tab *t) +{ + GtkWidget *toolbar = NULL, *b; + + b = gtk_hbox_new(FALSE, 0); + toolbar = b; + gtk_container_set_border_width(GTK_CONTAINER(toolbar), 0); + + /* backward button */ + t->backward = create_button("GoBack", GTK_STOCK_GO_BACK, 0); + gtk_widget_set_sensitive(t->backward, FALSE); + g_signal_connect(G_OBJECT(t->backward), "clicked", + G_CALLBACK(backward_cb), t); + gtk_box_pack_start(GTK_BOX(b), t->backward, TRUE, TRUE, 0); + + /* forward button */ + t->forward = create_button("GoForward", GTK_STOCK_GO_FORWARD, 0); + gtk_widget_set_sensitive(t->forward, FALSE); + g_signal_connect(G_OBJECT(t->forward), "clicked", + G_CALLBACK(forward_cb), t); + gtk_box_pack_start(GTK_BOX(b), t->forward, TRUE, TRUE, 0); + + /* home button */ + t->gohome = create_button("GoForward", GTK_STOCK_HOME, 0); + gtk_widget_set_sensitive(t->gohome, true); + g_signal_connect(G_OBJECT(t->gohome), "clicked", + G_CALLBACK(home_cb), t); + gtk_box_pack_start(GTK_BOX(b), t->gohome, TRUE, TRUE, 0); + + /* create widgets but don't use them */ + t->uri_entry = gtk_entry_new(); + t->stop = create_button("Stop", GTK_STOCK_STOP, 0); + t->js_toggle = create_button("JS-Toggle", enable_scripts ? + GTK_STOCK_MEDIA_PLAY : GTK_STOCK_MEDIA_PAUSE, 0); + + return (toolbar); +} + GtkWidget * create_toolbar(struct tab *t) { @@ -6782,15 +6850,25 @@ delete_tab(struct tab *t) webkit_web_view_stop_loading(t->wv); undo_close_tab_save(t); + if (browser_mode == XT_BM_KIOSK) { + gtk_widget_destroy(t->uri_entry); + gtk_widget_destroy(t->stop); + gtk_widget_destroy(t->js_toggle); + + } + gtk_widget_destroy(t->vbox); g_free(t->user_agent); g_free(t->stylesheet); g_free(t); recalc_tabs(); - if (TAILQ_EMPTY(&tabs)) - create_new_tab(NULL, NULL, 1); - + if (TAILQ_EMPTY(&tabs)) { + if (browser_mode == XT_BM_KIOSK) + create_new_tab(home, NULL, 1); + else + create_new_tab(NULL, NULL, 1); + } /* recreate session */ if (session_autosave) { @@ -6884,7 +6962,11 @@ create_new_tab(char *title, struct undo *u, int focus) #endif /* toolbar */ - t->toolbar = create_toolbar(t); + if (browser_mode == XT_BM_KIOSK) + t->toolbar = create_kiosk_toolbar(t); + else + t->toolbar = create_toolbar(t); + gtk_box_pack_start(GTK_BOX(t->vbox), t->toolbar, FALSE, FALSE, 0); /* browser */ @@ -7161,7 +7243,8 @@ create_button(char *name, char *stockid, int size) void button_set_stockid(GtkWidget *button, char *stockid) { - GtkWidget *image; + GtkWidget *image; + image = gtk_image_new_from_stock(stockid, icon_size_map(icon_size)); gtk_widget_set_size_request(GTK_WIDGET(image), -1, -1); gtk_button_set_image(GTK_BUTTON(button), image); -- cgit 1.4.1-2-gfad0