aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormutantturkey <crazycal00@gmail.com>2011-04-30 00:44:51 -0400
committermutantturkey <crazycal00@gmail.com>2011-04-30 00:44:51 -0400
commitaca5010ae70a327df22432cf2d653aecb6caf82f (patch)
tree26aa72a5309aed9bc7a189b63d99e4bd2b0d842d
parent3464dd9de2f3470464611a442722f2cac44f00e9 (diff)
if hidden w.bar will bring up bar upon CTRL+L then disappear after RETURN
-rw-r--r--sb.c226
1 files changed, 133 insertions, 93 deletions
diff --git a/sb.c b/sb.c
index f97a630..881477d 100644
--- a/sb.c
+++ b/sb.c
@@ -13,12 +13,27 @@
#include <webkit/webkit.h>
#include <glib/gstdio.h>
-typedef struct tab { GtkWidget *scroll; GtkWidget *label; gchar *main_title; gint load_progress; guint status_context_id; WebKitWebView *view; } tab;
-static struct { WebKitWebSettings *webkitsettings; GtkWidget *win; GtkWidget *bar; GtkWidget *search; GtkWidget *vbox; GtkWidget *notebook; GtkWidget *status; } w;
-
-#define get_tab(x, page_idx ) (struct tab*)g_object_get_qdata(G_OBJECT( gtk_notebook_get_nth_page( (GtkNotebook*)w.notebook, page_idx ) ), term_data_id);
-
-
+typedef struct tab {
+ GtkWidget *scroll;
+ GtkWidget *label;
+ gchar *main_title;
+ gchar *url_entry;
+ gint load_progress;
+ guint status_context_id;
+ WebKitWebView *view;
+ } tab;
+
+static struct {
+ WebKitWebSettings *webkitsettings;
+ gboolean hide;
+ GtkWidget *win;
+ GtkWidget *bar;
+ GtkWidget *search;
+ GtkWidget *vbox;
+ GtkWidget *notebook;
+ GtkWidget *status; } w;
+
+#define get_tab(x, page_idx ) (struct tab*)g_object_get_qdata(G_OBJECT( gtk_notebook_get_nth_page( (GtkNotebook*)w.notebook, page_idx ) ), term_data_id);
#define DEFAULT_DOWNLOAD "xterm -bg black -fg white -e wget -P "
#define DEFAULT_SEARCH "http://www.google.com/search?q="
#define DEFAULT_FONT "san-serif"
@@ -33,9 +48,10 @@ static void activate_uri_entry_cb(GtkWidget* entry, gpointer data);
static void link_hover(WebKitWebView* page, const gchar* title, const gchar* link, gpointer data);
static void title_change_cb(WebKitWebView *v, WebKitWebFrame *f, const char *title, tab *t);
static void load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, tab *t);
+//static void load_error(WebKitWebView *v, WebKitWebFrame *f, gchar *uri, gpointer web_error, user_data);
static void load_uri(gchar *uri);
static void go_cb(gboolean b);
-static void tab_new();
+static void tab_new(gboolean b);
static void tab_zoom(gboolean b);
static void tab_close();
static void tab_and_go();
@@ -59,29 +75,40 @@ static void search(GtkEntry *entry, gboolean b) {
webkit_web_view_search_text(t->view, gtk_entry_get_text(GTK_ENTRY(w.search)), FALSE, b, TRUE);
}
+
+
static void show_search(gboolean b) {
if(b) { gtk_widget_show(w.search); gtk_widget_grab_focus(w.search); } else { gtk_widget_hide(w.search); }
}
+
+
static void activate_uri_entry_cb (GtkWidget* entry, gpointer data) {
struct tab *t = get_tab(NULL, gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook)));
load_uri(g_strdup(gtk_entry_get_text (GTK_ENTRY (w.bar))));
gtk_widget_grab_focus(GTK_WIDGET(t->view));
+if(w.hide) { gtk_widget_hide(w.bar); }
+w.hide = FALSE;
}
+
static void reload() {
struct tab *t = get_tab(NULL, gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook)));
webkit_web_view_reload(t->view);
}
+
+
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);
-if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(w.notebook)) == 1) { gtk_notebook_set_show_tabs(GTK_NOTEBOOK(w.notebook), FALSE); gtk_widget_grab_focus(gtk_notebook_get_nth_page(GTK_NOTEBOOK(w.notebook), gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook)))); }
+if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(w.notebook)) == 1) { gtk_notebook_set_show_tabs(GTK_NOTEBOOK(w.notebook), FALSE); gtk_widget_grab_focus(gtk_notebook_get_nth_page(GTK_NOTEBOOK(w.notebook), gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook)))); focus_view();}
if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(w.notebook)) == 0) { gtk_main_quit(); }
}
+
+
static void download(WebKitWebView *web_view, GObject *d, gpointer user_data) {
const gchar *c = webkit_download_get_uri(WEBKIT_DOWNLOAD(d));
gchar *command = g_strconcat(DEFAULT_DOWNLOAD, g_get_home_dir(), "/ ", g_strdup(c), NULL);
@@ -89,48 +116,48 @@ puts(command);
g_spawn_command_line_async(command, NULL);
g_free(command);
}
+
+
static void link_hover (WebKitWebView* page, const gchar* title, const gchar* link, gpointer data) {
if(link != NULL) { gtk_statusbar_push(GTK_STATUSBAR(w.status), 0, link); }
else { gtk_statusbar_push(GTK_STATUSBAR(w.status), 0, ""); }
-
}
+
static void title_change_cb(WebKitWebView *v, WebKitWebFrame *f, const char *title, tab *t) {
gchar *tabtitle;
-
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook)) == gtk_notebook_page_num(GTK_NOTEBOOK(w.notebook), t->scroll)) {
gtk_window_set_title(GTK_WINDOW(w.win), title);
}
-
if(strlen(title) < DEFAULT_TAB_LENGTH ) { tabtitle = g_strdup(title); }
else { tabtitle = g_strndup(title, DEFAULT_TAB_LENGTH); strcat(tabtitle, "..."); }
gtk_label_set_label(GTK_LABEL(t->label), tabtitle);
-
}
+
static void load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, tab *t) {
const gchar* uri = webkit_web_frame_get_uri(frame);
+
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook)) == gtk_notebook_page_num(GTK_NOTEBOOK(w.notebook), t->scroll)) {
gtk_entry_set_text (GTK_ENTRY (w.bar), uri);
}
-
-
FILE *history = fopen(g_strconcat(g_get_home_dir(), DEFAULT_HISTORY_FILE, NULL), "a+");
fprintf(history, "%s \n", uri);
fclose(history);
}
+
static void tab_and_go() {
-
+
gchar *returned;
g_spawn_command_line_sync("sh -c 'sort ~"DEFAULT_HISTORY_FILE" | dmenu -l 15 -xs -c'", &returned, NULL, NULL, NULL);
-if(strcmp(returned, "") == 0) { focus_view(); } else { tab_new(); load_uri(returned); }
-
+if(strcmp(returned, "") == 0) { focus_view(); } else { tab_new(FALSE); load_uri(returned); }
g_free(returned);
-
}
+
+
static void load_uri(gchar *uri) {
gchar *u;
//Barrowed from surf, no point creating another method, this seems to work well
@@ -140,60 +167,85 @@ u = g_strrstr(uri, "://") ? g_strdup(uri)
webkit_web_view_load_uri(t->view, u);
g_free(u);
};
+
+
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)); }
+ 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 grab_bar( ) {
+ if(!gtk_widget_get_visible(w.bar)) {
+ gtk_widget_grab_focus(GTK_WIDGET(w.bar));
+ gtk_widget_show(w.bar);
+ w.hide = TRUE;
+}
+}
+
+
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 toggle() {
-if(gtk_widget_get_visible(w.bar)) {
-gtk_widget_hide(w.bar);
-gtk_widget_hide(w.status);
-gtk_notebook_set_show_tabs(GTK_NOTEBOOK(w.notebook), FALSE);
-} else {
-gtk_widget_show_all(w.vbox);
-gtk_widget_hide(w.search);
-if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(w.notebook)) == 1) { } else { gtk_notebook_set_show_tabs(GTK_NOTEBOOK(w.notebook), TRUE);}
-}
+ if(gtk_widget_get_visible(w.bar)) {
+ gtk_widget_hide(w.bar);
+ gtk_widget_hide(w.status);
+ gtk_notebook_set_show_tabs(GTK_NOTEBOOK(w.notebook), FALSE);
+ }
+
+ else {
+ gtk_widget_show_all(w.vbox);
+ gtk_widget_hide(w.search);
+ if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(w.notebook)) == 1) { } else { gtk_notebook_set_show_tabs(GTK_NOTEBOOK(w.notebook), TRUE);}
+ }
}
+
static void tab_switch(gboolean b) {
gint(current) = gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook));
-if(b) {
-if (current == gtk_notebook_get_n_pages(GTK_NOTEBOOK(w.notebook)) -1 ) { current = 0; }
-else { current = current + 1;}
-} else{
-if (current == 0) {
-current = gtk_notebook_get_n_pages(GTK_NOTEBOOK(w.notebook)) - 1; }
-else {current = current -1; }
+ if(b) {
+ if (current == gtk_notebook_get_n_pages(GTK_NOTEBOOK(w.notebook)) -1 ) { current = 0; }
+ else { current = current + 1;}
+ }
+ else {
+ if (current == 0) { current = gtk_notebook_get_n_pages(GTK_NOTEBOOK(w.notebook)) - 1; }
+ else {current = current -1; }
+ }
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(w.notebook), current);
}
-gtk_notebook_set_current_page(GTK_NOTEBOOK(w.notebook), current);
-
-}
WebKitWebView * tab_new_requested(WebKitWebView *v, WebKitWebFrame *f) {
-tab_new();
-struct tab *t = get_tab(NULL, gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook)));
-return t->view;
+ tab_new(TRUE);
+ struct tab *t = get_tab(NULL, gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook)));
+ return t->view;
}
+
+
static void tab_view_source() {
-struct tab *t = get_tab(NULL, gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook)));
+
+ struct tab *t = get_tab(NULL, gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook)));
-if(webkit_web_view_get_view_source_mode(t->view)) { webkit_web_view_set_view_source_mode(t->view, FALSE); }
-else { webkit_web_view_set_view_source_mode(t->view, TRUE); }
-webkit_web_view_reload(t->view);
+ if(webkit_web_view_get_view_source_mode(t->view)) {
+ webkit_web_view_set_view_source_mode(t->view, FALSE);
+ }
+
+ else {
+ webkit_web_view_set_view_source_mode(t->view, TRUE);
+ }
+ webkit_web_view_reload(t->view);
}
-static void tab_new() {
+
+
+static void tab_new(gboolean b) {
tab *t;
t = g_new0(tab, 1);
@@ -213,10 +265,14 @@ if (index == 0) {
gtk_notebook_set_show_tabs(GTK_NOTEBOOK(w.notebook), FALSE);
} else { gtk_notebook_set_show_tabs(GTK_NOTEBOOK(w.notebook), TRUE); }
+g_object_set(G_OBJECT(w.webkitsettings), "enable-page-cache", TRUE, NULL);
+g_object_set(G_OBJECT(w.webkitsettings), "enable-java-applet", FALSE, NULL);
+g_object_set(G_OBJECT(w.webkitsettings), "user-stylesheet-uri", "file:///home/calvin/.surf/style.css", NULL);
//webkit_web_view_set_settings (WEBKIT_WEB_VIEW(t->view), w.webkitsettings);
gtk_statusbar_push(GTK_STATUSBAR(w.status), 0, "");
-gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(t->scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(t->scroll), GTK_POLICY_NEVER, GTK_POLICY_NEVER);
+webkit_web_view_set_zoom_level(t->view, .80);
/*callbacks*/
g_signal_connect (G_OBJECT (t->view), "title-changed", G_CALLBACK (title_change_cb), t);
@@ -230,10 +286,11 @@ g_object_set_qdata_full(G_OBJECT(gtk_notebook_get_nth_page((GtkNotebook*)w.noteb
gtk_widget_show_all(w.win);
gtk_widget_hide(w.search);
-gtk_notebook_set_current_page(GTK_NOTEBOOK(w.notebook), index);
+if (!b) { gtk_notebook_set_current_page(GTK_NOTEBOOK(w.notebook), index); }
gtk_widget_grab_focus(w.bar);
}
+
static void history_command() {
gchar *returned;
g_spawn_command_line_sync("sh -c 'sort ~" DEFAULT_HISTORY_FILE " | dmenu -l 15 -xs -c'", &returned, NULL, NULL, NULL);
@@ -241,6 +298,7 @@ if(strcmp(returned, "") == 0) { focus_view(); } else { load_uri(returned); }
g_free(returned);
}
+
static void tab_focus(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer user_data) {
gtk_statusbar_push(GTK_STATUSBAR(w.status), 0, "");
@@ -259,6 +317,8 @@ static void focus_view() {
struct tab *t = get_tab(NULL, gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook)));
gtk_widget_grab_focus(GTK_WIDGET(t->view));
}
+
+
static void window_setup() {
term_data_id = g_quark_from_static_string("s");
@@ -281,34 +341,11 @@ gtk_box_pack_start(GTK_BOX(w.vbox), w.status, FALSE, FALSE, 0);
w.win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-// gtk_window_set_default_icon_name("gtk-network");
gtk_window_set_default_size(GTK_WINDOW(w.win), 800, 800);
-/*
-char property[256], setting[256];
-FILE *webkitrc;
-webkitrc = fopen(g_strconcat(g_get_home_dir(), "/.webkitrc", NULL), "r");
w.webkitsettings = webkit_web_settings_new();
-while (!feof(webkitrc)) {
- if (fscanf(webkitrc, "%s %s", property, setting) != 2) break;
-
-
-if(strcmp(setting, "FALSE") == 0) {
- g_object_set(G_OBJECT(w.webkitsettings), property, FALSE, NULL);
- break;
-}
-if(strcmp(setting, "TRUE") == 0) {
-g_object_set(G_OBJECT(w.webkitsettings), property, TRUE, NULL);
-break;
-}
-
-if(atoi(setting) == 0)
- { g_object_set(G_OBJECT(w.webkitsettings), property, setting, NULL); break; }
-else { g_object_set(G_OBJECT(w.webkitsettings), property, atoi(setting), NULL); break; }
-}
-*/
-tab_new();
+tab_new(FALSE);
g_signal_connect (G_OBJECT (w.search), "activate", G_CALLBACK (search), GINT_TO_POINTER(1));
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);
@@ -322,29 +359,31 @@ gtk_widget_hide(w.search);
gtk_widget_grab_focus(w.bar);
}
+
gboolean key_press_cb (GtkWidget *widget, GdkEventKey *event) {
guint(g) = event->keyval;
if ( (event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK ) {
-switch(g) {
- case GDK_l: gtk_widget_grab_focus(GTK_WIDGET(w.bar)); return TRUE; break;
- case GDK_f: show_search(TRUE); return TRUE; break;
- case GDK_g: tab_and_go(); return TRUE; break;
- case GDK_j: go_cb(FALSE); return TRUE; break;
- case GDK_k: go_cb(TRUE); return TRUE; break;
- case GDK_o: history_command(); return TRUE; break;
- case GDK_h: toggle(); focus_view(); return TRUE; break;
- case GDK_Page_Up: tab_switch(FALSE); return TRUE; break;
- case GDK_Page_Down: tab_switch(TRUE); return TRUE; break;
- case GDK_t: tab_new(); gtk_widget_grab_focus(w.bar); return TRUE; break;
- case GDK_w: tab_close(); focus_view(); return TRUE; break;
- case GDK_bracketright: tab_zoom(TRUE); return TRUE; break;
- case GDK_bracketleft: tab_zoom(FALSE); return TRUE; break;
- case GDK_r: reload(); return TRUE; break;
- case GDK_s: tab_view_source(); return TRUE; break;
- case GDK_Return: load_uri(g_strconcat(DEFAULT_SEARCH, gtk_entry_get_text(GTK_ENTRY(w.bar)), NULL)); return TRUE; break;
- default: return FALSE; break;
-}
+ switch(g) {
+ case GDK_l: grab_bar(); return TRUE; break;
+ case GDK_f: show_search(TRUE); return TRUE; break;
+ case GDK_g: tab_and_go(); return TRUE; break;
+ case GDK_a: go_cb(FALSE); return TRUE; break;
+ case GDK_b: go_cb(TRUE); return TRUE; break;
+ case GDK_o: history_command(); return TRUE; break;
+ case GDK_h: toggle(); focus_view(); return TRUE; break;
+ case GDK_Page_Up: tab_switch(FALSE); return TRUE; break;
+ case GDK_Page_Down: tab_switch(TRUE); return TRUE; break;
+ case GDK_t: tab_new(FALSE); gtk_widget_grab_focus(w.bar); return TRUE; break;
+ case GDK_w: tab_close(); return TRUE; break;
+ case GDK_bracketright: tab_zoom(TRUE); return TRUE; break;
+ case GDK_bracketleft: tab_zoom(FALSE); return TRUE; break;
+ case GDK_r: reload(); return TRUE; break;
+ case GDK_s: tab_view_source(); return TRUE; break;
+ case GDK_Return: load_uri(g_strconcat(DEFAULT_SEARCH, gtk_entry_get_text(GTK_ENTRY(w.bar)), NULL)); return TRUE; break;
+ default: return FALSE; break;
+ }
+
}
if (gtk_widget_has_focus(w.bar) && g == GDK_Escape) { gtk_widget_grab_focus(GTK_WIDGET(w.notebook)); return TRUE; }
@@ -355,6 +394,7 @@ if (gtk_widget_has_focus(w.search)) {
return FALSE;
}
+
int main (int argc, char* argv[]) {
gtk_init (&argc, &argv);