Revert "Merge branch 'dieter/experimental' into experimental"
authorBarrucadu <mike@barrucadu.co.uk>
Tue, 19 May 2009 11:49:31 +0000 (12:49 +0100)
committerBarrucadu <mike@barrucadu.co.uk>
Tue, 19 May 2009 11:49:31 +0000 (12:49 +0100)
This reverts commit 992230601106aadf0146cb022cd240136ae2f261, reversing
changes made to 7e301b27e4e61e0c1bd1bc40f1008608969033e6.

AUTHORS
README
docs/CONTRIBUTING
uzbl.c
uzbl.h

diff --git a/AUTHORS b/AUTHORS
index 66bd93e..f77735f 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -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:
diff --git a/README b/README
index bf4b35c..b46c236 100644 (file)
--- a/README
+++ b/README
@@ -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
index 9a2ff35..f351da9 100644 (file)
@@ -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
diff --git a/uzbl.c b/uzbl.c
index e9af965..0663b47 100644 (file)
--- a/uzbl.c
+++ b/uzbl.c
@@ -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();
 
diff --git a/uzbl.h b/uzbl.h
index f8ef19b..36c5f6a 100644 (file)
--- a/uzbl.h
+++ b/uzbl.h
@@ -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;