aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/textadept.c
diff options
context:
space:
mode:
authorGravatar mitchell <70453897+orbitalquark@users.noreply.github.com>2021-02-09 12:58:21 -0500
committerGravatar mitchell <70453897+orbitalquark@users.noreply.github.com>2021-02-09 12:58:21 -0500
commitd807c2c2b005badbef80c45cc79d0f5ed5730ba9 (patch)
treec5b56dc8e9f364dc99a230502ccedcfc4c2c8486 /src/textadept.c
parentf001ff09ff3a8b34c8550a66a31e1dd89955f038 (diff)
Added `ui.SHOW_ALL_TABS` option for `ui.tabs`.
Textadept hides the first tab by default since its information is duplicated in the titlebar and screen space is wasted. However, some users choose to hide titlebars (e.g. on window maximize/fullscreen), so this option now exists.
Diffstat (limited to 'src/textadept.c')
-rw-r--r--src/textadept.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/textadept.c b/src/textadept.c
index fe16f120..e8dc5584 100644
--- a/src/textadept.c
+++ b/src/textadept.c
@@ -189,7 +189,9 @@ static lua_State *lua;
#if CURSES
static bool quitting;
#endif
-static bool initing, closing, show_tabs = true, tab_sync, dialog_active;
+static bool initing, closing, tab_sync, dialog_active;
+static int tabs = 1; // int for more options than true/false
+#define show_tabs(condition) tabs && (condition || tabs > 1)
enum {SVOID, SINT, SLEN, SINDEX, SCOLOR, SBOOL, SKEYMOD, SSTRING, SSTRINGRET};
// Forward declarations.
@@ -679,8 +681,8 @@ static void sync_tabbar() {
lua_pushdoc(lua, SS(focused_view, SCI_GETDOCPOINTER, 0, 0)),
lua_gettable(lua, -2), lua_tointeger(lua, -1) - 1);
lua_pop(lua, 2); // index and buffers
- GtkNotebook *tabs = GTK_NOTEBOOK(tabbar);
- tab_sync = true, gtk_notebook_set_current_page(tabs, i), tab_sync = false;
+ GtkNotebook *notebook = GTK_NOTEBOOK(tabbar);
+ tab_sync = true, gtk_notebook_set_current_page(notebook, i), tab_sync = false;
//#elif CURSES
// TODO: tabs
#endif
@@ -864,7 +866,7 @@ static int ui_index(lua_State *L) {
lua_pushinteger(L, width), lua_rawseti(L, -2, 1);
lua_pushinteger(L, height), lua_rawseti(L, -2, 2);
} else if (strcmp(key, "tabs") == 0)
- lua_pushboolean(L, show_tabs);
+ tabs <= 1 ? lua_pushboolean(L, tabs) : lua_pushinteger(L, tabs);
else
lua_rawget(L, 1);
return 1;
@@ -937,10 +939,10 @@ static int ui_newindex(lua_State *L) {
if (w > 0 && h > 0) gtk_window_resize(GTK_WINDOW(window), w, h);
#endif
} else if (strcmp(key, "tabs") == 0) {
- show_tabs = lua_toboolean(L, 3);
+ tabs = !lua_isinteger(L, 3) ? lua_toboolean(L, 3) : lua_tointeger(L, 3);
#if GTK
gtk_widget_set_visible(
- tabbar, show_tabs && gtk_notebook_get_n_pages(GTK_NOTEBOOK(tabbar)) > 1);
+ tabbar, show_tabs(gtk_notebook_get_n_pages(GTK_NOTEBOOK(tabbar)) > 1));
//#elif CURSES
// TODO: tabs
#endif
@@ -1059,7 +1061,7 @@ static void remove_doc(lua_State *L, sptr_t doc) {
#if GTK
// Remove the tab from the tabbar.
gtk_notebook_remove_page(GTK_NOTEBOOK(tabbar), i - 1);
- gtk_widget_set_visible(tabbar, show_tabs && lua_rawlen(L, -2) > 2);
+ gtk_widget_set_visible(tabbar, show_tabs(lua_rawlen(L, -2) > 2));
//#elif CURSES
// TODO: tabs
#endif
@@ -1225,10 +1227,10 @@ static void show_context_menu(lua_State *L, GdkEventButton *event, char *k) {
/** Signal for a tab label mouse click. */
static bool tab_clicked(GtkWidget *label, GdkEventButton *event, void *L) {
- GtkNotebook *tabs = GTK_NOTEBOOK(tabbar);
- for (int i = 0; i < gtk_notebook_get_n_pages(tabs); i++) {
- GtkWidget *page = gtk_notebook_get_nth_page(tabs, i);
- if (label != gtk_notebook_get_tab_label(tabs, page)) continue;
+ GtkNotebook *notebook = GTK_NOTEBOOK(tabbar);
+ for (int i = 0; i < gtk_notebook_get_n_pages(notebook); i++) {
+ GtkWidget *page = gtk_notebook_get_nth_page(notebook, i);
+ if (label != gtk_notebook_get_tab_label(notebook, page)) continue;
emit(
L, "tab_clicked", LUA_TNUMBER, i + 1, LUA_TNUMBER, event->button,
LUA_TBOOLEAN, event->state & GDK_SHIFT_MASK,
@@ -1426,7 +1428,7 @@ static void new_buffer(sptr_t doc) {
lua_getfield(lua, -1, "tab_pointer"), lua_touserdata(lua, -1));
tab_sync = true;
int i = gtk_notebook_append_page(GTK_NOTEBOOK(tabbar), tab, NULL);
- gtk_widget_show(tab), gtk_widget_set_visible(tabbar, show_tabs && i > 0);
+ gtk_widget_show(tab), gtk_widget_set_visible(tabbar, show_tabs(i > 0));
gtk_notebook_set_current_page(GTK_NOTEBOOK(tabbar), i);
tab_sync = false;
lua_pop(lua, 2); // tab_pointer and buffer
@@ -1611,7 +1613,7 @@ static bool init_lua(lua_State *L, int argc, char **argv, bool reinit) {
if (platform) lua_pushboolean(L, true), lua_setglobal(L, platform);
#if CURSES
lua_pushboolean(L, true), lua_setglobal(L, "CURSES");
- show_tabs = false; // TODO: tabs
+ show_tabs = 0; // TODO: tabs
#endif
const char *charset = NULL;
#if GTK