gboolean cooperative_instances;
gboolean enable_console_to_stdout;
gboolean javascript_disabled;
+ gboolean private;
gboolean spellcheck_disabled;
gchar *download_dir;
gchar *fifo_suffix;
webkit_settings_set_enable_developer_extras(settings, TRUE);
+ GtkWidget *locbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
c->location = gtk_entry_new();
+ gtk_box_pack_start(GTK_BOX(locbox), c->location, TRUE, TRUE, 5);
+ if (cfg.private) {
+ GtkWidget *privindicator = gtk_label_new("Private mode");
+ gtk_widget_set_tooltip_text(
+ privindicator, "You are in private mode. No history, caches, or "
+ "cookies will be saved beyond this session.");
+ gtk_box_pack_end(GTK_BOX(locbox), privindicator, FALSE, FALSE, 0);
+ }
+
g_signal_connect(G_OBJECT(c->location), "key-press-event",
G_CALLBACK(key_location), c);
g_signal_connect(G_OBJECT(c->location), "icon-release",
GTK_ENTRY_ICON_PRIMARY, NULL);
c->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
- gtk_box_pack_start(GTK_BOX(c->vbox), c->location, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(c->vbox), locbox, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(c->vbox), c->web_view, TRUE, TRUE, 0);
gtk_container_set_focus_child(GTK_CONTAINER(c->vbox), c->web_view);
GIOChannel *towatch;
gchar *fifofilename, *fifopath;
- fifofilename = g_strdup_printf("%s-%s", __NAME__ ".fifo", cfg.fifo_suffix);
+ gchar *priv = (cfg.private) ? "-private" : "";
+ fifofilename =
+ g_strdup_printf("%s%s%s-%s", __NAME__, priv, ".fifo", cfg.fifo_suffix);
fifopath = g_build_filename(g_get_user_runtime_dir(), fifofilename, NULL);
g_free(fifofilename);
if (t != NULL && strlen(t) > 0) {
gtk_entry_set_text(GTK_ENTRY(c->location), t);
- if (cfg.history_file != NULL) {
+ if (cfg.history_file != NULL && !cfg.private) {
fp = fopen(cfg.history_file, "a");
if (fp != NULL) {
fprintf(fp, "%s\n", t);
WebKitWebContext *wc;
WebKitCookieManager *cm;
- wc = webkit_web_context_get_default();
+ wc = (cfg.private) ? webkit_web_context_new_ephemeral()
+ : webkit_web_context_get_default();
p = g_build_filename(g_get_user_config_dir(), __NAME__, "adblock", NULL);
webkit_web_context_set_sandbox_enabled(wc, TRUE);
cm = webkit_web_context_get_cookie_manager(wc);
webkit_cookie_manager_set_accept_policy(cm, cfg.cookie_policy);
- webkit_web_context_set_favicon_database_directory(wc, NULL);
- gchar *fname = g_build_filename("/", g_get_user_cache_dir(), __NAME__,
- "cookies.db", NULL);
+ if (!cfg.private) {
+ webkit_web_context_set_favicon_database_directory(wc, NULL);
- WebKitCookiePersistentStorage type =
- WEBKIT_COOKIE_PERSISTENT_STORAGE_SQLITE;
- webkit_cookie_manager_set_persistent_storage(cm, fname, type);
+ gchar *fname = g_build_filename("/", g_get_user_cache_dir(), __NAME__,
+ "cookies.db", NULL);
+ WebKitCookiePersistentStorage type =
+ WEBKIT_COOKIE_PERSISTENT_STORAGE_SQLITE;
+ webkit_cookie_manager_set_persistent_storage(cm, fname, type);
+ }
const gchar *const languages[2] = {(const gchar *)cfg.spellcheck_language,
NULL};
mw.win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(mw.win), 800, 600);
g_signal_connect(G_OBJECT(mw.win), "destroy", gtk_main_quit, NULL);
- gtk_window_set_title(GTK_WINDOW(mw.win), __NAME__);
+
+ gchar *priv = (cfg.private) ? "-private" : "";
+ gchar *title = malloc(strlen(priv) + strlen(__NAME__));
+ sprintf(title, "%s%s", __NAME__, priv);
+ gtk_window_set_title(GTK_WINDOW(mw.win), title);
mw.notebook = gtk_notebook_new();
gtk_notebook_set_scrollable(GTK_NOTEBOOK(mw.notebook), TRUE);
main(int argc, char **argv) {
int opt, i;
- while ((opt = getopt(argc, argv, "Cv")) != -1) {
+ while ((opt = getopt(argc, argv, "Cpv")) != -1) {
switch (opt) {
case 'C':
cfg.cooperative_instances = FALSE;
break;
+ case 'p':
+ cfg.private = true;
+ break;
case 'v':
printf("%s %s\n", __NAME__, VERSION);
exit(0);