diff options
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | README | 3 | ||||
-rw-r--r-- | docs/CONTRIBUTING | 4 | ||||
-rw-r--r-- | uzbl.c | 125 | ||||
-rw-r--r-- | uzbl.h | 7 |
5 files changed, 57 insertions, 83 deletions
@@ -14,7 +14,6 @@ Contributors: Evgeny Grablyk - libsoup settings Damien Leon - misc Peter Suschlik - backwards searching - (salinasv) - move some variables to heap Originaly based on http://trac.webkit.org/browser/trunk/WebKitTools/GtkLauncher/main.c Which is copyrighted: @@ -129,9 +129,6 @@ This tells uzbl to execute an action immediately. The simplest example of this KEYCMD <string> This sets the interactive command buffer to `<string>`. Keycmd is primarily useful for scripts that help you type a command while still letting you edit it before execution. For example, if you have a binding like "o _" that opens an URL, then you could create a binding `O` that spawns a script which will set the command buffer to "o current-uri-here", letting you enter relative URLs easily. - - KEYCMDN <string> -Like KEYCMD, but also emulates a press of return which causes binds with an asterisk or underscore to execute. (See sample config) ### ACTIONS diff --git a/docs/CONTRIBUTING b/docs/CONTRIBUTING index 9a2ff35..f351da9 100644 --- a/docs/CONTRIBUTING +++ b/docs/CONTRIBUTING @@ -25,10 +25,6 @@ If you're new to Git/github, have no fear: * [Github guides (highly recommended)](http://github.com/guides/home) * [Guides: Fork a project and submit your modifications](http://github.com/guides/fork-a-project-and-submit-your-modifications) -Our convention is to develop in the *experimental* branch, and keep only stable, tested stuff in *master*. -So ideally, all contributors develop in their experimental, that gets merged into the mainline experimental, and after QA it gets merged into the main master. - - ### VALGRIND PROFILING $ add this to Makefile header: CFLAGS=-g $ recompile @@ -151,14 +151,7 @@ itos(int val) { static char * str_replace (const char* search, const char* replace, const char* string) { - gchar **buf; - char *ret; - - buf = g_strsplit (string, search, -1); - ret = g_strjoinv (replace, buf); - g_strfreev(buf); - - return ret; + return g_strjoinv (replace, g_strsplit (string, search, -1)); } static gchar** @@ -232,7 +225,6 @@ clean_up(void) { if (uzbl.behave.socket_dir) unlink (uzbl.comm.socket_path); - g_free(uzbl.state.executable_path); g_string_free(uzbl.state.keycmd, TRUE); g_hash_table_destroy(uzbl.bindings); g_hash_table_destroy(uzbl.behave.commands); @@ -275,7 +267,7 @@ create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer us (void) web_view; (void) frame; (void) user_data; - if (uzbl.state.selected_url != NULL) { + if (uzbl.state.selected_url[0]!=0) { if (uzbl.state.verbose) printf("\nNew web view -> %s\n",uzbl.state.selected_url); new_window_load_uri(uzbl.state.selected_url); @@ -362,10 +354,9 @@ link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpoin (void) title; (void) data; //Set selected_url state variable - g_free(uzbl.state.selected_url); - uzbl.state.selected_url = NULL; + uzbl.state.selected_url[0] = '\0'; if (link) { - uzbl.state.selected_url = g_strdup(link); + strcpy (uzbl.state.selected_url, link); } update_title(); } @@ -520,7 +511,7 @@ new_action(const gchar *name, const gchar *param) { static bool file_exists (const char * filename) { - return (access(filename, F_OK) == 0); + return (access(filename, F_OK) == 0); } void @@ -547,7 +538,7 @@ load_uri (WebKitWebView * web_view, const gchar *param) { GString* newuri = g_string_new (param); if (g_strrstr (param, "://") == NULL) g_string_prepend (newuri, "http://"); - /* if we do handle cookies, ask our handler for them */ + /* if we do handle cookies, ask our handler for them */ webkit_web_view_load_uri (web_view, newuri->str); g_string_free (newuri, TRUE); } @@ -596,9 +587,9 @@ run_external_js (WebKitWebView * web_view, const gchar *param) { static void search_text (WebKitWebView *page, const char *param, const gboolean forward) { if ((param) && (param[0] != '\0')) { - uzbl.state.searchtx = g_strdup(param); + strcpy(uzbl.state.searchtx, param); } - if (uzbl.state.searchtx != NULL) { + if (uzbl.state.searchtx[0] != '\0') { if (uzbl.state.verbose) printf ("Searching: %s\n", uzbl.state.searchtx); @@ -614,8 +605,6 @@ search_text (WebKitWebView *page, const char *param, const gboolean forward) { webkit_web_view_set_highlight_text_matches (page, TRUE); webkit_web_view_search_text (page, uzbl.state.searchtx, FALSE, forward, TRUE); - g_free(uzbl.state.searchtx); - uzbl.state.searchtx = NULL; } } @@ -747,11 +736,9 @@ expand_template(const char *template) { sym = (int)g_scanner_cur_value(uzbl.scan).v_symbol; switch(sym) { case SYM_URI: - buf = uzbl.state.uri? - g_markup_printf_escaped("%s", uzbl.state.uri) : - g_strdup(""); - g_string_append(ret, buf); - free(buf); + g_string_append(ret, + uzbl.state.uri? + g_markup_printf_escaped("%s", uzbl.state.uri):""); break; case SYM_LOADPRGS: buf = itos(uzbl.gui.sbar.load_progress); @@ -764,18 +751,14 @@ expand_template(const char *template) { g_free(buf); break; case SYM_TITLE: - buf = uzbl.gui.main_title? - g_markup_printf_escaped("%s", uzbl.gui.main_title) : - g_strdup(""); - g_string_append(ret, buf); - free(buf); + g_string_append(ret, + uzbl.gui.main_title? + g_markup_printf_escaped("%s", uzbl.gui.main_title):""); break; case SYM_SELECTED_URI: - buf = uzbl.state.selected_url? - g_markup_printf_escaped("%s", uzbl.state.selected_url) : - g_strdup(""); - g_string_append(ret, buf); - free(buf); + g_string_append(ret, + uzbl.state.selected_url? + g_markup_printf_escaped("%s", uzbl.state.selected_url):""); break; case SYM_NAME: buf = itos(uzbl.xwin); @@ -784,11 +767,9 @@ expand_template(const char *template) { free(buf); break; case SYM_KEYCMD: - buf = uzbl.state.keycmd->str? - g_markup_printf_escaped("%s", uzbl.state.keycmd->str) : - g_strdup(""); - g_string_append(ret, buf); - free(buf); + g_string_append(ret, + uzbl.state.keycmd->str ? + g_markup_printf_escaped("%s", uzbl.state.keycmd->str):""); break; case SYM_MODE: g_string_append(ret, @@ -1093,7 +1074,6 @@ static gboolean set_var_value(gchar *name, gchar *val) { void **p = NULL; char *endp = NULL; - char *buf=NULL; if( (p = g_hash_table_lookup(uzbl.comm.proto_var, name)) ) { if(var_is("status_message", name) @@ -1124,13 +1104,11 @@ set_var_value(gchar *name, gchar *val) { } else if(var_is("fifo_dir", name)) { if(*p) free(*p); - buf = init_fifo(val); - *p = buf?buf:g_strdup(""); + *p = init_fifo(g_strdup(val)); } else if(var_is("socket_dir", name)) { if(*p) free(*p); - buf = init_socket(val); - *p = buf?buf:g_strdup(""); + *p = init_socket(g_strdup(val)); } else if(var_is("modkey", name)) { if(*p) free(*p); @@ -1144,8 +1122,7 @@ set_var_value(gchar *name, gchar *val) { } else if(var_is("useragent", name)) { if(*p) free(*p); - buf = set_useragent(val); - *p = buf?buf:g_strdup(""); + *p = set_useragent(g_strdup(val)); } else if(var_is("shell_cmd", name)) { if(*p) free(*p); @@ -1173,6 +1150,8 @@ set_var_value(gchar *name, gchar *val) { SOUP_SESSION_MAX_CONNS_PER_HOST, uzbl.net.max_conns_host, NULL); } else if (var_is("http_debug", name)) { + //soup_session_remove_feature + // (uzbl.net.soup_session, uzbl.net.soup_logger); soup_session_remove_feature (uzbl.net.soup_session, SOUP_SESSION_FEATURE(uzbl.net.soup_logger)); /* do we leak if this doesn't get freed? why does it occasionally crash if freed? */ @@ -1260,8 +1239,6 @@ parse_cmd_line(const char *ctl_line) { sent in a loop or the whole string in one go like now? */ g_string_assign(uzbl.state.keycmd, tokens[1]); run_keycmd(FALSE); - if (g_strstr_len(ctl_line, 7, "n") || g_strstr_len(ctl_line, 7, "N")) - run_keycmd(TRUE); update_title(); g_strfreev(tokens); } @@ -1333,6 +1310,7 @@ init_fifo(gchar *dir) { /* return dir or, on error, free dir and return NULL */ } if (*dir == ' ') { /* space unsets the variable */ + g_free(dir); return NULL; } @@ -1358,16 +1336,22 @@ init_fifo(gchar *dir) { /* return dir or, on error, free dir and return NULL */ /* if we got this far, there was an error; cleanup */ if (error) g_error_free (error); g_free(path); + g_free(dir); return NULL; } static gboolean control_stdin(GIOChannel *gio, GIOCondition condition) { - (void) condition; gchar *ctl_line = NULL; + gsize ctl_line_len = 0; GIOStatus ret; - ret = g_io_channel_read_line(gio, &ctl_line, NULL, NULL, NULL); + if (condition & G_IO_HUP) { + ret = g_io_channel_shutdown (gio, FALSE, NULL); + return FALSE; + } + + ret = g_io_channel_read_line(gio, &ctl_line, &ctl_line_len, NULL, NULL); if ( (ret == G_IO_STATUS_ERROR) || (ret == G_IO_STATUS_EOF) ) return FALSE; @@ -1648,6 +1632,7 @@ create_browser () { GUI *g = &uzbl.gui; GtkWidget* scrolled_window = gtk_scrolled_window_new (NULL, NULL); + //main_window_ref = g_object_ref(scrolled_window); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_NEVER); //todo: some sort of display of position/total length. like what emacs does g->web_view = WEBKIT_WEB_VIEW (webkit_web_view_new ()); @@ -1674,6 +1659,9 @@ create_mainbar () { g->mainbar = gtk_hbox_new (FALSE, 0); + /* keep a reference to the bar so we can re-pack it at runtime*/ + //sbar_ref = g_object_ref(g->mainbar); + g->mainbar_label = gtk_label_new (""); gtk_label_set_selectable((GtkLabel *)g->mainbar_label, TRUE); gtk_label_set_ellipsize(GTK_LABEL(g->mainbar_label), PANGO_ELLIPSIZE_END); @@ -1726,9 +1714,11 @@ add_binding (const gchar *key, const gchar *act) { //Debug: if (uzbl.state.verbose) printf ("Binding %-10s : %s\n", key, act); - action = new_action(parts[0], parts[1]); - g_hash_table_replace(uzbl.bindings, g_strdup(key), action); + + if(g_hash_table_lookup(uzbl.bindings, key)) + g_hash_table_remove(uzbl.bindings, key); + g_hash_table_insert(uzbl.bindings, g_strdup(key), action); g_strfreev(parts); } @@ -1738,15 +1728,16 @@ get_xdg_var (XDG_Var xdg) { const gchar* actual_value = getenv (xdg.environmental); const gchar* home = getenv ("HOME"); - gchar* return_value = str_replace ("~", home, actual_value); + gchar* return_value = str_replace ("~", home, g_strdup (actual_value)); if (! actual_value || strcmp (actual_value, "") == 0) { if (xdg.default_value) { - return_value = str_replace ("~", home, xdg.default_value); + return_value = str_replace ("~", home, g_strdup (xdg.default_value)); } else { return_value = NULL; } } + return return_value; } @@ -1756,21 +1747,17 @@ find_xdg_file (int xdg_type, char* filename) { xdg_type = 1 => data xdg_type = 2 => cache*/ - gchar* temporary_file = malloc (1024); + gchar* temporary_file = (char *)malloc (1024); gchar* temporary_string = NULL; char* saveptr; - char* buf; - buf = get_xdg_var (XDG[xdg_type]); - strcpy (temporary_file, buf); + strcpy (temporary_file, get_xdg_var (XDG[xdg_type])); + strcat (temporary_file, filename); - free(buf); if (! file_exists (temporary_file) && xdg_type != 2) { - buf = get_xdg_var (XDG[3 + xdg_type]); - temporary_string = (char *) strtok_r (buf, ":", &saveptr); - free(buf); - + temporary_string = (char *) strtok_r (get_xdg_var (XDG[3 + xdg_type]), ":", &saveptr); + while (temporary_string && ! file_exists (temporary_file)) { strcpy (temporary_file, temporary_string); strcat (temporary_file, filename); @@ -1793,7 +1780,7 @@ settings_init () { uzbl.behave.reset_command_mode = 1; if (!s->config_file) { - s->config_file = find_xdg_file (0, "/uzbl/config"); + s->config_file = g_strdup (find_xdg_file (0, "/uzbl/config")); } if (s->config_file) { @@ -1893,15 +1880,12 @@ main (int argc, char* argv[]) { if (!g_thread_supported ()) g_thread_init (NULL); - uzbl.state.executable_path = g_strdup(argv[0]); - uzbl.state.selected_url = NULL; - uzbl.state.searchtx = NULL; + strcpy(uzbl.state.executable_path,argv[0]); GOptionContext* context = g_option_context_new ("- some stuff here maybe someday"); g_option_context_add_main_entries (context, entries, NULL); g_option_context_add_group (context, gtk_get_option_group (TRUE)); g_option_context_parse (context, &argc, &argv, NULL); - g_option_context_free(context); /* initialize hash table */ uzbl.bindings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, free_action); @@ -1933,6 +1917,7 @@ main (int argc, char* argv[]) { uzbl.gui.main_window = create_window (); gtk_container_add (GTK_CONTAINER (uzbl.gui.main_window), uzbl.gui.vbox); + load_uri (uzbl.gui.web_view, uzbl.state.uri); //TODO: is this needed? gtk_widget_grab_focus (GTK_WIDGET (uzbl.gui.web_view)); gtk_widget_show_all (uzbl.gui.main_window); @@ -1960,10 +1945,6 @@ main (int argc, char* argv[]) { create_stdin(); - if(uzbl.state.uri) - load_uri (uzbl.gui.web_view, uzbl.state.uri); - - gtk_main (); clean_up(); @@ -104,10 +104,11 @@ typedef struct { gchar *uri; gchar *config_file; char *instance_name; - gchar *selected_url; - gchar *executable_path; + gchar config_file_path[500]; + gchar selected_url[500]; + char executable_path[500]; GString* keycmd; - gchar *searchtx; + gchar searchtx[500]; gchar* searchold; struct utsname unameinfo; /* system info */ gboolean verbose; |