commit - cee823637088fe32b599f64e68987a55a420f706
commit + 9073042649752b844bd9b22f67aa88db8317b44d
blob - e764b8bc6ec95f6c30068a3abe73794e998e902f
blob + e4369a82c474c49f7d22c3d603a3fc81f031e582
--- cmd.c
+++ cmd.c
struct tab *tab, *t;
tab = current_tab;
- if (TAILQ_PREV(tab, tabshead, tabs) == NULL &&
- TAILQ_NEXT(tab, tabs) == NULL) {
- message("Can't close the only tab.");
- return;
- }
-
- if (evtimer_pending(&tab->loadingev, NULL))
- evtimer_del(&tab->loadingev);
- stop_tab(tab);
-
- if ((t = TAILQ_NEXT(tab, tabs)) == NULL)
- t =TAILQ_PREV(tab, tabshead, tabs);
- TAILQ_REMOVE(&tabshead, tab, tabs);
- free(tab);
+ if ((t = TAILQ_NEXT(tab, tabs)) != NULL ||
+ (t = TAILQ_PREV(tab, tabshead, tabs)) != NULL) {
+ switch_to_tab(t);
+ free_tab(tab);
+ } else
+ message("Can't close the only tab.");
- switch_to_tab(t);
}
void
if (t == current_tab)
continue;
- stop_tab(t);
- TAILQ_REMOVE(&tabshead, t, tabs);
- free(t);
+ free_tab(t);
}
}
blob - 929eb99ebf685048d9bacf7d7cf6cb9f618a5d7b
blob + 9eab390085611afbe1d8be27a1f96798f25041c3
--- telescope.c
+++ telescope.c
return 1;
}
+/*
+ * Free every resource linked to the tab, including the tab itself.
+ * Removes the tab from the tablist, but doesn't update the
+ * current_tab though.
+ */
void
+free_tab(struct tab *tab)
+{
+ stop_tab(tab);
+
+ if (evtimer_pending(&tab->loadingev, NULL))
+ evtimer_del(&tab->loadingev);
+
+ TAILQ_REMOVE(&tabshead, tab, tabs);
+ free(tab);
+}
+
+void
stop_tab(struct tab *tab)
{
ui_send_net(IMSG_STOP, tab->id, NULL, 0);
blob - 5ab3f09c94af932d9be2bb9188942c1d0d5923a7
blob + 38aa01a79427614007b2c917e1bb1c9e6497906b
--- telescope.h
+++ telescope.h
void load_url(struct tab *, const char *, const char *);
int load_previous_page(struct tab*);
int load_next_page(struct tab*);
+void free_tab(struct tab *);
void stop_tab(struct tab*);
void add_to_bookmarks(const char*);
void save_session(void);