diff options
| author | mutantturkey <crazycal00@gmail.com> | 2011-04-30 00:44:51 -0400 | 
|---|---|---|
| committer | mutantturkey <crazycal00@gmail.com> | 2011-04-30 00:44:51 -0400 | 
| commit | aca5010ae70a327df22432cf2d653aecb6caf82f (patch) | |
| tree | 26aa72a5309aed9bc7a189b63d99e4bd2b0d842d | |
| parent | 3464dd9de2f3470464611a442722f2cac44f00e9 (diff) | |
if hidden w.bar will bring up bar upon CTRL+L then disappear after RETURN
| -rw-r--r-- | sb.c | 226 | 
1 files changed, 133 insertions, 93 deletions
| @@ -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); | 
