diff options
-rw-r--r-- | sb.c | 58 |
1 files changed, 39 insertions, 19 deletions
@@ -16,10 +16,12 @@ static void link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* static void title_change_cb(WebKitWebView *v, WebKitWebFrame *f, const char *title, tab *t); static void progress_change_cb (WebKitWebView* page, gint progress, gpointer data); static void load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data); -static void destroy_cb (GtkWidget* widget, gpointer data); static void go_cb(gboolean b); -static void new_tab(); -static void close_tab(); +static void tab_new(); +static void tab_zoom(gboolean b); +static void tab_close(); +static void tab_focus(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer user_data); + static void config(); gboolean key_press_cb(GtkWidget *widget, GdkEventKey *event); @@ -31,7 +33,7 @@ static void activate_uri_entry_cb (GtkWidget* entry, gpointer data) { gtk_widget_grab_focus(GTK_WIDGET(t->view)); } -static void close_tab() { +static void tab_close() { struct tab *t = get_tab(NULL, gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook))); gtk_notebook_remove_page(GTK_NOTEBOOK(w.notebook), gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook))); g_free(t); @@ -63,17 +65,18 @@ static void load_commit_cb (WebKitWebView* p, WebKitWebFrame* frame, gpointer da gtk_entry_set_text (GTK_ENTRY (w.bar), uri); } -static void destroy_cb (GtkWidget* widget, gpointer data) { - gtk_main_quit (); +static void tab_zoom (gboolean b) { + struct tab *t = get_tab(NULL, gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook))); + if (b) { webkit_web_view_set_zoom_level(t->view, (webkit_web_view_get_zoom_level(t->view) + .05)); } + else { webkit_web_view_set_zoom_level(t->view, (webkit_web_view_get_zoom_level(t->view) - .05)); } } - static void go_cb (gboolean b) { struct tab *t = get_tab(NULL, gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook))); if (b) { webkit_web_view_go_forward(t->view); } else { webkit_web_view_go_back(t->view); } } -static void new_tab() { +static void tab_new() { /*seperate function so it will be easier to setup the webkit crap*/ tab *t; t = g_new0(tab, 1); @@ -112,6 +115,21 @@ static void new_tab() { gtk_notebook_set_current_page(GTK_NOTEBOOK(w.notebook), index); } + +static void tab_focus(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer user_data) { + struct tab *t = get_tab(NULL, page_num); + const char *title = webkit_web_view_get_title(t->view); + const char *url = webkit_web_view_get_uri(t->view); + + if (title == NULL && url == NULL) { + title = "sb"; + url = ""; + } + gtk_window_set_title(GTK_WINDOW(w.win), title); + gtk_entry_set_text(GTK_ENTRY(w.bar), url); +} + + static void config() { term_data_id = g_quark_from_static_string("sb"); @@ -123,9 +141,7 @@ static void config() { gtk_entry_set_has_frame(GTK_ENTRY(w.bar), FALSE); gtk_notebook_set_scrollable(GTK_NOTEBOOK(w.notebook), TRUE); - - g_signal_connect (G_OBJECT (w.bar), "activate", G_CALLBACK (activate_uri_entry_cb), NULL); - + gtk_box_pack_start(GTK_BOX (w.vbox), w.bar, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(w.vbox), w.notebook, TRUE, TRUE, 0); @@ -135,12 +151,16 @@ static void config() { w.win = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(w.win), 800, 800); - - g_signal_connect (G_OBJECT (w.win), "destroy", G_CALLBACK (destroy_cb), NULL); + + tab_new(); + + g_signal_connect (G_OBJECT (w.bar), "activate", G_CALLBACK (activate_uri_entry_cb), NULL); + g_signal_connect (G_OBJECT(w.notebook), "switch-page", G_CALLBACK(tab_focus), NULL); + g_signal_connect (G_OBJECT (w.win), "destroy", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect(w.win, "key-press-event", G_CALLBACK(key_press_cb), NULL); - gtk_container_add (GTK_CONTAINER (w.win), w.vbox); - new_tab(); + + gtk_widget_show_all (w.win); } @@ -151,10 +171,10 @@ if (event->state == GDK_CONTROL_MASK) { if (gdk_keyval_to_lower(event->keyval) == GDK_l) { gtk_widget_grab_focus(GTK_WIDGET(w.bar)); return TRUE; } if (gdk_keyval_to_lower(event->keyval) == GDK_j) { go_cb(FALSE); return TRUE; } if (gdk_keyval_to_lower(event->keyval) == GDK_k) { go_cb(TRUE); return TRUE; } - if (gdk_keyval_to_lower(event->keyval) == GDK_t) { new_tab(); return TRUE; } - if (gdk_keyval_to_lower(event->keyval) == GDK_w) { close_tab(); return TRUE; } - //if (gdk_keyval_to_lower(event->keyval) == GDK_bracketright) { webkit_web_view_set_zoom_level(t->view, (webkit_web_view_get_zoom_level(t->view) + .05)); return TRUE; } - //if (gdk_keyval_to_lower(event->keyval) == GDK_bracketleft) { webkit_web_view_set_zoom_level(t->view, (webkit_web_view_get_zoom_level(t->view) - .05)); return TRUE; } + if (gdk_keyval_to_lower(event->keyval) == GDK_t) { tab_new(); return TRUE; } + if (gdk_keyval_to_lower(event->keyval) == GDK_w) { tab_close(); return TRUE; } + if (gdk_keyval_to_lower(event->keyval) == GDK_bracketright) { tab_zoom(TRUE); return TRUE; } + if (gdk_keyval_to_lower(event->keyval) == GDK_bracketleft) { tab_zoom(FALSE); return TRUE; } else { return FALSE; } } if (gtk_widget_has_focus(w.bar) && gdk_keyval_to_lower(event->keyval) == GDK_Escape) { gtk_widget_grab_focus(GTK_WIDGET(w.notebook)); return TRUE; } |