commit - 81ea92ab8940bc75a4db7a1aa6b420acc633d4cb
commit + 8af5e5ed7d3241dbab8b862b93eabb320b12a801
blob - 4f0b597135810518b2c77c9cb396b34b6b6c778a
blob + b3843af884d65030adec705e5f5e5a61463884ab
--- telescope.c
+++ telescope.c
die();
ui_on_tab_refresh(t);
+ ui_on_tab_loaded(t);
}
static void
if (!tab->page.free(&tab->page))
die();
ui_on_tab_refresh(tab);
+ ui_on_tab_loaded(tab);
}
void
load_url(struct tab *tab, const char *url)
{
+ strlcpy(tab->url, url, sizeof(tab->url));
+
if (!strcmp(url, "about:new")) {
load_page_from_str(tab, about_new);
return;
blob - 9900036dcff323d80908cf44b7deee73ada44626
blob + 7bb35db2f1303dc2b2bd84586775d44b60c8758d
--- telescope.h
+++ telescope.h
uint32_t id;
uint32_t flags;
+ char url[GEMINI_URL_LEN];
+
int code;
char meta[GEMINI_URL_LEN];
int redirect_count;
/* ui.c */
int ui_init(void);
+void ui_on_tab_loaded(struct tab*);
void ui_on_tab_refresh(struct tab*);
void ui_end(void);
blob - 26fa8267b0daa1d5c11c0254fbc198b3171269d2
blob + 698b4fb14aae07254b36757d42dd726a60d36e51
--- ui.c
+++ ui.c
static int hardwrap_text(struct tab*, struct line*);
static int wrap_page(struct tab*);
static void print_line(struct line*);
+static void redraw_tabline(void);
+static void redraw_modeline(struct tab*);
static void redraw_tab(struct tab*);
static void message(const char*, ...) __attribute__((format(printf, 1, 2)));
+static void start_loading_anim(struct tab*);
+static void update_loading_anim(int, short, void*);
+static void stop_loading_anim(struct tab*);
static void new_tab(void);
typedef void (*interactivefn)(struct tab*);
static struct event clminibufev;
static int clminibufev_set;
static struct timeval clminibufev_timer = { 5, 0 };
+static struct timeval loadingev_timer = { 0, 250000 };
static uint32_t tab_counter;
size_t line_off;
size_t line_max;
+ short loading_anim;
+ short loading_anim_step;
+ struct event loadingev;
+
TAILQ_HEAD(, line) head;
};
}
static void
+redraw_tabline(void)
+{
+ wclear(tabline);
+ wbkgd(tabline, A_REVERSE);
+ mvwprintw(tabline, 0, 0, "TODO: tabs here");
+}
+
+static void
redraw_modeline(struct tab *tab)
{
int x, y, max_x, max_y;
- const char *url = "TODO:url";
const char *mode = "text/gemini-mode";
+ const char *spin = "-\\|/";
wclear(modeline);
wattron(modeline, A_REVERSE);
wmove(modeline, 0, 0);
- wprintw(modeline, "-- %s %s ", mode, url);
+ wprintw(modeline, "-%c %s %s ",
+ spin[tab->s->loading_anim_step], mode, tab->url);
getyx(modeline, y, x);
getmaxyx(modeline, max_y, max_x);
break;
}
+ redraw_tabline();
redraw_modeline(tab);
restore_cursor(tab);
}
static void
+start_loading_anim(struct tab *tab)
+{
+ if (tab->s->loading_anim)
+ return;
+ tab->s->loading_anim = 1;
+ evtimer_set(&tab->s->loadingev, update_loading_anim, tab);
+ evtimer_add(&tab->s->loadingev, &loadingev_timer);
+}
+
+static void
+update_loading_anim(int fd, short ev, void *d)
+{
+ struct tab *tab = d;
+
+ tab->s->loading_anim_step = (tab->s->loading_anim_step+1)%4;
+
+ redraw_modeline(tab);
+ wrefresh(modeline);
+ wrefresh(body);
+
+ evtimer_add(&tab->s->loadingev, &loadingev_timer);
+}
+
+static void
+stop_loading_anim(struct tab *tab)
+{
+ if (!tab->s->loading_anim)
+ return;
+ evtimer_del(&tab->s->loadingev);
+ tab->s->loading_anim = 0;
+ tab->s->loading_anim_step = 0;
+}
+
+static void
+ui_load_url_in_tab(struct tab *tab, const char *url)
+{
+ message("Loading %s...", url);
+ start_loading_anim(tab);
+ load_url(tab, url);
+}
+
+static void
new_tab(void)
{
struct tab *tab, *t;
else
TAILQ_INSERT_TAIL(&tabshead, tab, tabs);
- load_url(tab, url);
+ ui_load_url_in_tab(tab, url);
return;
err:
}
void
+ui_on_tab_loaded(struct tab *tab)
+{
+ stop_loading_anim(tab);
+ message("Loaded %s", tab->url);
+}
+
+void
ui_on_tab_refresh(struct tab *tab)
{
if (!(tab->flags & TAB_CURRENT))