]> git.armaanb.net Git - chorizo.git/blobdiff - browser.c
draft 4
[chorizo.git] / browser.c
index 84a2a4a3a1dad2c0a8a78dadf086c3e2be90ee82..385f1671d2741eeb24f5e4ded80d5662aa85b4fe 100644 (file)
--- a/browser.c
+++ b/browser.c
@@ -31,8 +31,10 @@ void show_web_view(WebKitWebView *, gpointer);
 void trust_user_certs(WebKitWebContext *);
 
 struct Client {
-       GtkWidget *jsbutton;
        GtkWidget *location;
+       GtkWidget *search;
+       GtkWidget *search_switch;
+       GtkWidget *isearch;
        GtkWidget *tabicon;
        GtkWidget *tablabel;
        GtkWidget *vbox;
@@ -72,16 +74,6 @@ allocfail(void)
        exit(EXIT_FAILURE);
 }
 
-void
-togglejs(GtkButton *jsbutton, gpointer data)
-{
-       struct Client *c = (struct Client *)data;
-       webkit_settings_set_enable_javascript(
-               c->settings,
-               !webkit_settings_get_enable_javascript(c->settings));
-       webkit_web_view_set_settings(WEBKIT_WEB_VIEW(c->web_view), c->settings);
-}
-
 void
 client_destroy(GtkWidget *widget, gpointer data)
 {
@@ -212,7 +204,6 @@ client_new(const gchar *uri, WebKitWebView *related_wv, gboolean show,
 
        c->settings =
                webkit_web_view_get_settings(WEBKIT_WEB_VIEW(c->web_view));
-       webkit_settings_set_enable_javascript(c->settings, cfg_js_default);
        if (cfg.verbose)
                webkit_settings_set_enable_write_console_messages_to_stdout(
                        c->settings, true);
@@ -235,8 +226,6 @@ client_new(const gchar *uri, WebKitWebView *related_wv, gboolean show,
                         G_CALLBACK(decide_policy), NULL);
        g_signal_connect(G_OBJECT(c->web_view), "key-press-event",
                         G_CALLBACK(key_web_view), c);
-       g_signal_connect(G_OBJECT(c->web_view), "button-release-event",
-                        G_CALLBACK(key_web_view), c);
        g_signal_connect(G_OBJECT(c->web_view), "scroll-event",
                         G_CALLBACK(key_web_view), c);
        g_signal_connect(G_OBJECT(c->web_view), "mouse-target-changed",
@@ -245,16 +234,15 @@ client_new(const gchar *uri, WebKitWebView *related_wv, gboolean show,
                         G_CALLBACK(crashed_web_view), c);
 
        GtkWidget *locbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-       c->jsbutton = gtk_toggle_button_new_with_label("JS");
-       gtk_widget_set_tooltip_text(c->jsbutton, "Toggle JavaScript execution");
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(c->jsbutton),
-                                    cfg_js_default);
-       g_signal_connect(G_OBJECT(c->jsbutton), "toggled", G_CALLBACK(togglejs),
-                        c);
 
        c->location = gtk_entry_new();
+       gtk_entry_set_placeholder_text(GTK_ENTRY(c->location), "Web address");
        gtk_box_pack_start(GTK_BOX(locbox), c->location, TRUE, TRUE, 0);
 
+       c->search = gtk_entry_new();
+       gtk_entry_set_placeholder_text(GTK_ENTRY(c->search), "Search");
+       gtk_box_pack_start(GTK_BOX(locbox), c->search, FALSE, TRUE, 0);
+
        if (cfg.private) {
                GtkWidget *privindicator = gtk_label_new("Private mode");
                gtk_widget_set_tooltip_text(
@@ -264,7 +252,6 @@ client_new(const gchar *uri, WebKitWebView *related_wv, gboolean show,
                gtk_box_pack_end(GTK_BOX(locbox), privindicator, FALSE, FALSE,
                                 5);
        }
-       gtk_box_pack_start(GTK_BOX(locbox), c->jsbutton, FALSE, FALSE, 0);
 
        g_signal_connect(G_OBJECT(c->location), "key-press-event",
                         G_CALLBACK(key_location), c);
@@ -284,6 +271,15 @@ client_new(const gchar *uri, WebKitWebView *related_wv, gboolean show,
        c->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 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);
+
+       GtkWidget *overlay = gtk_overlay_new();
+       c->isearch = gtk_entry_new();
+       gtk_container_add(GTK_CONTAINER(c->vbox), overlay);
+       gtk_container_add(GTK_CONTAINER(overlay), c->isearch);
+      gtk_widget_set_halign (overlay, GTK_ALIGN_CENTER);
+           gtk_widget_set_valign (overlay, GTK_ALIGN_CENTER);
+       gtk_widget_show_all(overlay);
+
        gtk_container_set_focus_child(GTK_CONTAINER(c->vbox), c->web_view);
 
        c->tabicon = gtk_image_new_from_icon_name("text-html",
@@ -291,7 +287,7 @@ client_new(const gchar *uri, WebKitWebView *related_wv, gboolean show,
 
        c->tablabel = gtk_label_new("chorizo");
        gtk_label_set_ellipsize(GTK_LABEL(c->tablabel), PANGO_ELLIPSIZE_END);
-       gtk_label_set_width_chars(GTK_LABEL(c->tablabel), 20);
+       gtk_label_set_width_chars(GTK_LABEL(c->tablabel), cfg_tab_width);
        gtk_widget_set_has_tooltip(c->tablabel, TRUE);
 
        /*
@@ -531,8 +527,8 @@ changed_uri(GObject *obj, GParamSpec *pspec, gpointer data)
                //No g_get_user_state_dir unfortunately
                gchar *state_env = getenv("XDG_STATE_DIR");
                gchar *state_dir = (state_env) ?
-                                                state_env :
-                                                g_build_filename(g_get_home_dir(),
+                                          state_env :
+                                          g_build_filename(g_get_home_dir(),
                                                            ".local", "state",
                                                            "chorizo", NULL);
 
@@ -732,7 +728,7 @@ init_default_web_context(void)
        WebKitWebContext *wc;
        WebKitCookieManager *cm;
        wc = (cfg.private) ? webkit_web_context_new_ephemeral() :
-                                  webkit_web_context_get_default();
+                            webkit_web_context_get_default();
 
        p = g_build_filename(g_get_user_config_dir(), "chorizo", "adblock",
                             NULL);
@@ -816,6 +812,7 @@ search_init(struct Client *c, int direction)
                search(c, direction);
        }
 }
+
 gboolean
 key_common(GtkWidget *widget, GdkEvent *event, gpointer data)
 {
@@ -962,17 +959,6 @@ key_common(GtkWidget *widget, GdkEvent *event, gpointer data)
                                gtk_notebook_next_page(
                                        GTK_NOTEBOOK(mw.notebook));
                                return TRUE;
-                       } else if (GDK_KEY_p == key) {
-                               gboolean on =
-                                       webkit_settings_get_enable_javascript(
-                                               c->settings);
-                               webkit_settings_set_enable_javascript(
-                                       c->settings, !on);
-                               webkit_web_view_set_settings(
-                                       WEBKIT_WEB_VIEW(c->web_view),
-                                       c->settings);
-                               gtk_toggle_button_set_active(
-                                       GTK_TOGGLE_BUTTON(c->jsbutton), !on);
                        } else if (GDK_KEY_d == key) {
                                gtk_widget_grab_focus(c->location);
                                gtk_entry_set_text(GTK_ENTRY(c->location),
@@ -1071,6 +1057,7 @@ key_tablabel(GtkWidget *widget, GdkEvent *event, gpointer data)
        }
        return FALSE;
 }
+
 gboolean
 key_web_view(GtkWidget *widget, GdkEvent *event, gpointer data)
 {
@@ -1086,26 +1073,6 @@ key_web_view(GtkWidget *widget, GdkEvent *event, gpointer data)
                        gtk_entry_set_progress_fraction(GTK_ENTRY(c->location),
                                                        0);
                }
-       } else if (event->type == GDK_BUTTON_RELEASE) {
-               GdkModifierType modifiers =
-                       gtk_accelerator_get_default_mod_mask();
-               switch (((GdkEventButton *)event)->button) {
-               case 1:
-                       if ((((GdkEventButton *)event)->state & modifiers) ==
-                                   GDK_CONTROL_MASK &&
-                           c->hover_uri != NULL) {
-                               client_new(c->hover_uri, NULL, TRUE, FALSE);
-                               return TRUE;
-                       }
-                       break;
-               case 8:
-                       webkit_web_view_go_back(WEBKIT_WEB_VIEW(c->web_view));
-                       return TRUE;
-               case 9:
-                       webkit_web_view_go_forward(
-                               WEBKIT_WEB_VIEW(c->web_view));
-                       return TRUE;
-               }
        } else if (event->type == GDK_SCROLL) {
                event->scroll.delta_y *= cfg_scroll_lines;
                if (((GdkEventScroll *)event)->state & GDK_CONTROL_MASK) {
@@ -1138,9 +1105,21 @@ mainwindow_setup(void)
 
        mw.notebook = gtk_notebook_new();
        gtk_notebook_set_scrollable(GTK_NOTEBOOK(mw.notebook), TRUE);
+       gtk_notebook_set_tab_pos(GTK_NOTEBOOK(mw.notebook), GTK_POS_LEFT);
        gtk_container_add(GTK_CONTAINER(mw.win), mw.notebook);
        g_signal_connect(G_OBJECT(mw.notebook), "switch-page",
                         G_CALLBACK(notebook_switch_page), NULL);
+
+       GtkCssProvider *css = gtk_css_provider_new();
+       const char *css_data = "notebook header.left * { \
+                                       margin: 0; \
+                                       padding-top: 0; \
+                                       padding-bottom: 0; \
+                               }";
+       gtk_css_provider_load_from_data(css, css_data, strlen(css_data), NULL);
+       gtk_style_context_add_provider_for_screen(
+               gdk_screen_get_default(), GTK_STYLE_PROVIDER(css),
+               GTK_STYLE_PROVIDER_PRIORITY_USER);
 }
 
 void
@@ -1163,6 +1142,7 @@ notebook_switch_page(GtkNotebook *nb, GtkWidget *p, guint idx, gpointer data)
 {
        mainwindow_title(idx);
 }
+
 gboolean
 quit_if_nothing_active(void)
 {
@@ -1308,7 +1288,6 @@ main(int argc, char **argv)
                gtk_main();
                remove(fifopath);
        }
-       for (int i = 0; i < clients; i++) { free(&(client_arr[i])); }
 
        exit(EXIT_SUCCESS);
 }