Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Feb 8th, 2012  |  syntax: None  |  size: 5.93 KB  |  hits: 37  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. diff --git a/xxxterm.c b/xxxterm.c
  2. index 3c47fa4..ace5cba 100644
  3. --- a/xxxterm.c
  4. +++ b/xxxterm.c
  5. @@ -197,6 +197,8 @@ TAILQ_HEAD(command_list, command_entry);
  6.  #define XT_STATUS_LINK         (1)
  7.  #define XT_STATUS_URI          (2)
  8.  #define XT_STATUS_LOADING      (3)
  9. +#define XT_STATUS_STOPPED      (4)
  10. +#define XT_STATUS_FAILED       (5)
  11.  
  12.  #define XT_SES_DONOTHING       (0)
  13.  #define XT_SES_CLOSETABS       (1)
  14. @@ -476,10 +478,15 @@ set_status(struct tab *t, gchar *s, int status)
  15.  {
  16.         gchar *type = NULL;
  17.  
  18. -       if (s == NULL)
  19. +       if (s == NULL || (status == XT_STATUS_STOPPED &&
  20. +           webkit_web_view_get_load_status(t->wv) == WEBKIT_LOAD_FINISHED))
  21.                 return;
  22.  
  23.         switch (status) {
  24. +       case XT_STATUS_FAILED:
  25. +               type = g_strdup_printf("Failed: %s", s);
  26. +               s = type;
  27. +               break;
  28.         case XT_STATUS_LOADING:
  29.                 type = g_strdup_printf("Loading: %s", s);
  30.                 s = type;
  31. @@ -491,6 +498,10 @@ set_status(struct tab *t, gchar *s, int status)
  32.                             GTK_ENTRY(t->sbe.statusbar)));
  33.                 s = type;
  34.                 break;
  35. +       case XT_STATUS_STOPPED:
  36. +               type = g_strdup_printf("Stopped: %s", s);
  37. +               s = type;
  38. +               break;
  39.         case XT_STATUS_URI:
  40.                 type = g_strdup_printf("%s", s);
  41.                 if (!t->status) {
  42. @@ -843,6 +854,7 @@ load_uri(struct tab *t, gchar *uri)
  43.         }
  44.  
  45.         set_status(t, (char *)uri, XT_STATUS_LOADING);
  46. +       gtk_entry_set_text(GTK_ENTRY(t->uri_entry), uri);
  47.         marks_clear(t);
  48.         webkit_web_view_load_uri(t->wv, uri);
  49.  done:
  50. @@ -863,7 +875,7 @@ get_uri(struct tab *t)
  51.                 /* use tmp_uri to make sure it is g_freed */
  52.                 if (t->tmp_uri)
  53.                         g_free(t->tmp_uri);
  54. -               t->tmp_uri =g_strdup_printf("%s%s", XT_URI_ABOUT,
  55. +               t->tmp_uri = g_strdup_printf("%s%s", XT_URI_ABOUT,
  56.                     about_list[t->xtp_meaning].name);
  57.                 uri = t->tmp_uri;
  58.         }
  59. @@ -2130,6 +2142,9 @@ navaction(struct tab *t, struct karg *args)
  60.                 webkit_web_frame_reload(frame);
  61.                 break;
  62.         case XT_NAV_STOP:
  63. +               /* order is relevant, else get_uri(t) will return NULL */
  64. +               t->stopped = 1;
  65. +               set_status(t, (char *)get_uri(t), XT_STATUS_STOPPED);
  66.                 frame = webkit_web_view_get_main_frame(t->wv);
  67.                 webkit_web_frame_stop_loading(frame);
  68.                 break;
  69. @@ -3827,6 +3842,9 @@ notify_load_status_cb(WebKitWebView* wview, GParamSpec* pspec, struct tab *t)
  70.                 gtk_widget_modify_base(t->uri_entry, GTK_STATE_NORMAL, &color);
  71.                 statusbar_modify_attr(t, "white", XT_COLOR_BLACK);
  72.  
  73. +               gdk_color_parse(XT_COLOR_RED, &color);
  74. +               gtk_widget_modify_bg(t->tab_elems.loadbox, GTK_STATE_NORMAL, &color);  
  75. +
  76.                 /* take focus if we are visible */
  77.                 focus_webview(t);
  78.                 t->focus_wv = 1;
  79. @@ -3843,6 +3861,7 @@ notify_load_status_cb(WebKitWebView* wview, GParamSpec* pspec, struct tab *t)
  80.                 uri = get_uri(t);
  81.                 if (uri == NULL)
  82.                         return;
  83. +               /* already set, but should update it here */
  84.                 gtk_entry_set_text(GTK_ENTRY(t->uri_entry), uri);
  85.  
  86.                 if (t->status) {
  87. @@ -3887,6 +3906,9 @@ notify_load_status_cb(WebKitWebView* wview, GParamSpec* pspec, struct tab *t)
  88.                                 color_visited(get_current_tab(),
  89.                                     g_strdup_printf("{'%s' : 'dummy'}", uri));
  90.                 }
  91. +
  92. +               gdk_color_parse(XT_COLOR_BLUE, &color);
  93. +               gtk_widget_modify_bg(t->tab_elems.loadbox, GTK_STATE_NORMAL, &color);
  94.                 break;
  95.  
  96.         case WEBKIT_LOAD_FINISHED:
  97. @@ -3907,16 +3929,39 @@ notify_load_status_cb(WebKitWebView* wview, GParamSpec* pspec, struct tab *t)
  98.                 }
  99.  
  100.                 set_status(t, (char *)uri, XT_STATUS_URI);
  101. +
  102. +               gdk_color_parse(XT_COLOR_GREEN, &color);
  103. +               gtk_widget_modify_bg(t->tab_elems.loadbox, GTK_STATE_NORMAL, &color);
  104. +
  105. +               gtk_widget_set_sensitive(GTK_WIDGET(t->stop), FALSE);
  106. +#if GTK_CHECK_VERSION(2, 20, 0)
  107. +               gtk_spinner_stop(GTK_SPINNER(t->spinner));
  108. +               gtk_widget_hide(t->spinner);
  109. +#endif
  110. +               break;
  111. +
  112.  #if WEBKIT_CHECK_VERSION(1, 1, 18)
  113. +       /* also when user stopped the loading */
  114.         case WEBKIT_LOAD_FAILED:
  115.                 /* 4 */
  116.  #endif
  117. +       default:
  118. +               /* XXX can't call get_uri since it will return NULL. Fix it? */
  119. +               uri = gtk_entry_get_text(GTK_ENTRY(t->uri_entry));
  120. +
  121. +               if (t->stopped) {
  122. +                       set_status(t, (char *)uri, XT_STATUS_STOPPED);
  123. +                       t->stopped = 0;
  124. +               } else
  125. +                       set_status(t, (char *)uri, XT_STATUS_FAILED);
  126. +
  127. +               gtk_widget_set_sensitive(GTK_WIDGET(t->stop), FALSE);
  128. +               gdk_color_parse(XT_COLOR_RED, &color);
  129. +               gtk_widget_modify_bg(t->tab_elems.loadbox, GTK_STATE_NORMAL, &color);
  130.  #if GTK_CHECK_VERSION(2, 20, 0)
  131.                 gtk_spinner_stop(GTK_SPINNER(t->spinner));
  132.                 gtk_widget_hide(t->spinner);
  133.  #endif
  134. -       default:
  135. -               gtk_widget_set_sensitive(GTK_WIDGET(t->stop), FALSE);
  136.                 break;
  137.         }
  138.  
  139. @@ -5893,6 +5938,8 @@ stop_cb(GtkWidget *w, struct tab *t)
  140.                 return;
  141.         }
  142.  
  143. +       t->stopped = 1;
  144. +       set_status(t, (char *)get_uri(t), XT_STATUS_STOPPED);
  145.         webkit_web_frame_stop_loading(frame);
  146.         abort_favicon_download(t);
  147.  }
  148. @@ -6487,6 +6534,7 @@ create_new_tab(char *title, struct undo *u, int focus, int position)
  149.         }
  150.  
  151.         t = g_malloc0(sizeof *t);
  152. +       t->stopped = 0;
  153.  
  154.         if (title == NULL) {
  155.                 title = "(untitled)";
  156. @@ -6640,10 +6688,12 @@ create_new_tab(char *title, struct undo *u, int focus, int position)
  157.         /* compact tab bar */
  158.         t->tab_elems.label = gtk_label_new(title);
  159.         t->tab_elems.favicon = gtk_image_new();
  160. +       t->tab_elems.loadbox = gtk_drawing_area_new();
  161.         gtk_label_set_width_chars(GTK_LABEL(t->tab_elems.label), 1.0);
  162.         gtk_misc_set_alignment(GTK_MISC(t->tab_elems.label), 0.0, 0.0);
  163.         gtk_misc_set_padding(GTK_MISC(t->tab_elems.label), 4.0, 4.0);
  164.         gtk_widget_modify_font(GTK_WIDGET(t->tab_elems.label), tabbar_font);
  165. +       gtk_widget_set_size_request(t->tab_elems.loadbox, 2, -1);
  166.  
  167.         t->tab_elems.eventbox = gtk_event_box_new();
  168.         t->tab_elems.box = gtk_hbox_new(FALSE, 0);
  169. @@ -6655,7 +6705,11 @@ create_new_tab(char *title, struct undo *u, int focus, int position)
  170.         gtk_widget_modify_fg(t->tab_elems.label, GTK_STATE_NORMAL, &color);
  171.         gdk_color_parse(XT_COLOR_CT_SEPARATOR, &color);
  172.         gtk_widget_modify_bg(t->tab_elems.sep, GTK_STATE_NORMAL, &color);
  173. +       gdk_color_parse(XT_COLOR_GREEN, &color);
  174. +       gtk_widget_modify_bg(t->tab_elems.loadbox, GTK_STATE_NORMAL, &color);
  175.  
  176. +       gtk_box_pack_start(GTK_BOX(t->tab_elems.box), t->tab_elems.loadbox, FALSE,
  177. +           FALSE, 0);
  178.         gtk_box_pack_start(GTK_BOX(t->tab_elems.box), t->tab_elems.favicon, FALSE,
  179.             FALSE, 0);
  180.         gtk_box_pack_start(GTK_BOX(t->tab_elems.box), t->tab_elems.label, TRUE,