aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sb.c58
1 files changed, 39 insertions, 19 deletions
diff --git a/sb.c b/sb.c
index 84edb0e..a5029ed 100644
--- a/sb.c
+++ b/sb.c
@@ -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; }