Merge branch 'experimental' into bf2
authorTom Adams <tom@holizz.com>
Wed, 26 Aug 2009 08:47:46 +0000 (09:47 +0100)
committerTom Adams <tom@holizz.com>
Wed, 26 Aug 2009 08:47:46 +0000 (09:47 +0100)
Conflicts:
examples/config/uzbl/config

1  2 
examples/config/uzbl/config
uzbl.c
uzbl.h

@@@ -4,13 -4,15 +4,14 @@@
  # keyboard behavior in this sample config is sort of vimstyle
  
  # Handlers
 -set history_handler  = spawn $XDG_DATA_HOME/uzbl/scripts/history.sh
  set download_handler = spawn $XDG_DATA_HOME/uzbl/scripts/download.sh
  set cookie_handler   = spawn $XDG_DATA_HOME/uzbl/scripts/cookies.py
  #set new_window      = sh 'echo uri "$8" > $4' # open in same window
  set new_window       = sh 'uzbl -u $8' # equivalent to the default behaviour
+ set scheme_handler   = spawn $XDG_DATA_HOME/uzbl/scripts/scheme.py
 -set load_start_handler = set status_message = <span foreground="khaki">wait</span>
 +set load_start_handler = chain 'set keycmd = ' 'set status_message = <span foreground="khaki">wait</span>'
  set load_commit_handler = set status_message = <span foreground="green">recv</span>
 -set load_finish_handler = set status_message = <span foreground="gold">done</span>
 +set load_finish_handler = chain 'set status_message = <span foreground="gold">done</span>' 'spawn $XDG_DATA_HOME/uzbl/scripts/history.sh'
  
  
  
diff --combined uzbl.c
--- 1/uzbl.c
--- 2/uzbl.c
+++ b/uzbl.c
@@@ -137,9 -137,11 +137,10 @@@ const struct var_name_to_ptr_t 
      { "load_finish_handler",    PTR_V_STR(uzbl.behave.load_finish_handler,      1,   NULL)},
      { "load_start_handler",     PTR_V_STR(uzbl.behave.load_start_handler,       1,   NULL)},
      { "load_commit_handler",    PTR_V_STR(uzbl.behave.load_commit_handler,      1,   NULL)},
 -    { "history_handler",        PTR_V_STR(uzbl.behave.history_handler,          1,   NULL)},
      { "download_handler",       PTR_V_STR(uzbl.behave.download_handler,         1,   NULL)},
      { "cookie_handler",         PTR_V_STR(uzbl.behave.cookie_handler,           1,   cmd_cookie_handler)},
-     { "new_window",             PTR_V_STR(uzbl.behave.new_window,               1,   cmd_new_window)},
+     { "new_window",             PTR_V_STR(uzbl.behave.new_window,               1,   NULL)},
+     { "scheme_handler",         PTR_V_STR(uzbl.behave.scheme_handler,           1,   cmd_scheme_handler)},
      { "fifo_dir",               PTR_V_STR(uzbl.behave.fifo_dir,                 1,   cmd_fifo_dir)},
      { "socket_dir",             PTR_V_STR(uzbl.behave.socket_dir,               1,   cmd_socket_dir)},
      { "http_debug",             PTR_V_INT(uzbl.behave.http_debug,               1,   cmd_http_debug)},
@@@ -509,6 -511,44 +510,44 @@@ catch_sigint(int s) 
  /* --- CALLBACKS --- */
  
  gboolean
+ navigation_decision_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data) {
+     (void) web_view;
+     (void) frame;
+     (void) navigation_action;
+     (void) user_data;
+     const gchar* uri = webkit_network_request_get_uri (request);
+     gboolean decision_made = FALSE;
+     if (uzbl.state.verbose)
+         printf("Navigation requested -> %s\n", uri);
+     if (uzbl.behave.scheme_handler) {
+         GString *s = g_string_new ("");
+         g_string_printf(s, "'%s'", uri);
+         run_handler(uzbl.behave.scheme_handler, s->str);
+         if(uzbl.comm.sync_stdout && strcmp (uzbl.comm.sync_stdout, "") != 0) {
+             char *p = strchr(uzbl.comm.sync_stdout, '\n' );
+             if ( p != NULL ) *p = '\0';
+             if (!strcmp(uzbl.comm.sync_stdout, "USED")) {
+                 webkit_web_policy_decision_ignore(policy_decision);
+                 decision_made = TRUE;
+             }
+         }
+         if (uzbl.comm.sync_stdout)
+             uzbl.comm.sync_stdout = strfree(uzbl.comm.sync_stdout);
+         g_string_free(s, TRUE);
+     }
+     if (!decision_made)
+         webkit_web_policy_decision_use(policy_decision);
+     return TRUE;
+ }
+ gboolean
  new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data) {
      (void) web_view;
      (void) frame;
@@@ -564,7 -604,17 +603,17 @@@ download_cb (WebKitWebView *web_view, G
          if (uzbl.state.verbose)
              printf("Download -> %s\n",uri);
          /* if urls not escaped, we may have to escape and quote uri before this call */
-         run_handler(uzbl.behave.download_handler, uri);
+         GString *args = g_string_new(uri);
+         if (uzbl.net.proxy_url) {
+            g_string_append_c(args, ' ');
+            g_string_append(args, uzbl.net.proxy_url);
+         }
+         run_handler(uzbl.behave.download_handler, args->str);
+         g_string_free(args, TRUE);
      }
      return (FALSE);
  }
@@@ -722,6 -772,7 +771,6 @@@ load_start_cb (WebKitWebView* page, Web
      (void) frame;
      (void) data;
      uzbl.gui.sbar.load_progress = 0;
 -    clear_keycmd(); // don't need old commands to remain on new page?
      if (uzbl.behave.load_start_handler)
          run_handler(uzbl.behave.load_start_handler, "");
  }
@@@ -748,6 -799,19 +797,6 @@@ destroy_cb (GtkWidget* widget, gpointe
      gtk_main_quit ();
  }
  
 -void
 -log_history_cb () {
 -   if (uzbl.behave.history_handler) {
 -       time_t rawtime;
 -       struct tm * timeinfo;
 -       char date [80];
 -       time ( &rawtime );
 -       timeinfo = localtime ( &rawtime );
 -       strftime (date, 80, "\"%Y-%m-%d %H:%M:%S\"", timeinfo);
 -       run_handler(uzbl.behave.history_handler, date);
 -   }
 -}
 -
  
  /* VIEW funcs (little webkit wrappers) */
  #define VIEWFUNC(name) void view_##name(WebKitWebView *page, GArray *argv, GString *result){(void)argv; (void)result; webkit_web_view_##name(page);}
@@@ -936,7 -1000,7 +985,7 @@@ load_uri (WebKitWebView *web_view, GArr
              run_js(web_view, argv, NULL);
              return;
          }
-         if (g_strrstr (argv_idx(argv, 0), "://") == NULL && g_strstr_len (argv_idx(argv, 0), 5, "data:") == NULL)
+         if (!soup_uri_new(argv_idx(argv, 0)))
              g_string_prepend (newuri, "http://");
          /* if we do handle cookies, ask our handler for them */
          webkit_web_view_load_uri (web_view, newuri->str);
@@@ -1744,14 -1808,14 +1793,14 @@@ cmd_cookie_handler() 
  }
  
  void
- cmd_new_window() {
-     gchar **split = g_strsplit(uzbl.behave.new_window, " ", 2);
+ cmd_scheme_handler() {
+     gchar **split = g_strsplit(uzbl.behave.scheme_handler, " ", 2);
      /* pitfall: doesn't handle chain actions; must the sync_ action manually */
      if ((g_strcmp0(split[0], "sh") == 0) ||
          (g_strcmp0(split[0], "spawn") == 0)) {
-         g_free (uzbl.behave.new_window);
-         uzbl.behave.new_window =
-             g_strdup_printf("%s %s", split[0], split[1]);
+         g_free (uzbl.behave.scheme_handler);
+         uzbl.behave.scheme_handler =
+             g_strdup_printf("sync_%s %s", split[0], split[1]);
      }
      g_strfreev (split);
  }
@@@ -2172,6 -2236,8 +2221,8 @@@ key_press_cb (GtkWidget* window, GdkEve
      if (event->type   != GDK_KEY_PRESS ||
          event->keyval == GDK_Page_Up   ||
          event->keyval == GDK_Page_Down ||
+         event->keyval == GDK_Home      ||
+         event->keyval == GDK_End       ||
          event->keyval == GDK_Up        ||
          event->keyval == GDK_Down      ||
          event->keyval == GDK_Left      ||
@@@ -2303,8 -2369,10 +2354,9 @@@ create_browser () 
      g_signal_connect (G_OBJECT (g->web_view), "load-progress-changed", G_CALLBACK (progress_change_cb), g->web_view);
      g_signal_connect (G_OBJECT (g->web_view), "load-committed", G_CALLBACK (load_commit_cb), g->web_view);
      g_signal_connect (G_OBJECT (g->web_view), "load-started", G_CALLBACK (load_start_cb), g->web_view);
 -    g_signal_connect (G_OBJECT (g->web_view), "load-finished", G_CALLBACK (log_history_cb), g->web_view);
      g_signal_connect (G_OBJECT (g->web_view), "load-finished", G_CALLBACK (load_finish_cb), g->web_view);
      g_signal_connect (G_OBJECT (g->web_view), "hovering-over-link", G_CALLBACK (link_hover_cb), g->web_view);
+     g_signal_connect (G_OBJECT (g->web_view), "navigation-policy-decision-requested", G_CALLBACK (navigation_decision_cb), g->web_view);
      g_signal_connect (G_OBJECT (g->web_view), "new-window-policy-decision-requested", G_CALLBACK (new_window_cb), g->web_view);
      g_signal_connect (G_OBJECT (g->web_view), "download-requested", G_CALLBACK (download_cb), g->web_view);
      g_signal_connect (G_OBJECT (g->web_view), "create-web-view", G_CALLBACK (create_web_view_cb), g->web_view);
@@@ -2842,6 -2910,7 +2894,7 @@@ main (int argc, char* argv[]) 
              printf("window_id %i\n",(int) uzbl.xwin);
          printf("pid %i\n", getpid ());
          printf("name: %s\n", uzbl.state.instance_name);
+         printf("commit: %s\n", uzbl.info.commit);
      }
  
      uzbl.gui.scbar_v = (GtkScrollbar*) gtk_vscrollbar_new (NULL);
      gboolean verbose_override = uzbl.state.verbose;
  
      settings_init ();
 -    set_insert_mode(FALSE);
 +
 +    if (!uzbl.behave.always_insert_mode)
 +      set_insert_mode(FALSE);
  
      if (!uzbl.behave.show_status)
          gtk_widget_hide(uzbl.gui.mainbar);
diff --combined uzbl.h
--- 1/uzbl.h
--- 2/uzbl.h
+++ b/uzbl.h
@@@ -93,6 -93,7 +93,6 @@@ typedef struct 
      gchar*   title_format_short;
      gchar*   title_format_long;
      gchar*   status_background;
 -    gchar*   history_handler;
      gchar*   fifo_dir;
      gchar*   socket_dir;
      gchar*   download_handler;
      gchar*   serif_font_family;
      gchar*   fantasy_font_family;
      gchar*   cursive_font_family;
+     gchar*   scheme_handler;
      gboolean always_insert_mode;
      gboolean show_status;
      gboolean insert_mode;
@@@ -226,6 -228,9 +227,9 @@@ voi
  print(WebKitWebView *page, GArray *argv, GString *result);
  
  gboolean
+ navigation_decision_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data);
+ gboolean
  new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data);
  
  gboolean
@@@ -265,6 -270,9 +269,6 @@@ voi
  destroy_cb (GtkWidget* widget, gpointer data);
  
  void
 -log_history_cb ();
 -
 -void
  commands_hash(void);
  
  void
@@@ -484,7 -492,7 +488,7 @@@ voi
  cmd_cookie_handler();
  
  void
- cmd_new_window();
+ cmd_scheme_handler();
  
  void
  move_statusbar();