Skip to content

Commit

Permalink
Support dynamic title mutation
Browse files Browse the repository at this point in the history
  • Loading branch information
endaaman committed Jul 21, 2018
1 parent dda9461 commit b657773
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 12 deletions.
5 changes: 5 additions & 0 deletions src/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,11 @@ char* config_get_shell(Config* c)
return config_get_str(c, "shell");
}

char* config_get_title(Config* c)
{
return config_get_str(c, "title");
}

bool config_get_use_default_keymap(Config* c)
{
return config_get_bool(c, "use_default_keymap");
Expand Down
1 change: 1 addition & 0 deletions src/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ void config_load(Config* c, char** error);
void config_load_option(Config* c, Option* option);
void config_apply(Config* c, VteTerminal* vte);
char* config_get_shell(Config* c);
char* config_get_title(Config* c);
bool config_get_use_default_keymap(Config* c);


Expand Down
11 changes: 11 additions & 0 deletions src/context.c
Original file line number Diff line number Diff line change
Expand Up @@ -234,3 +234,14 @@ bool context_perform_keymap(Context* context, unsigned key, GdkModifierType mod)
}
return false;
}

void context_on_change_vte_title(Context* context) {
GtkWindow* window = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(context->vte)));

const char* terminal_title = vte_terminal_get_window_title(context->vte);
const char* title = terminal_title
? terminal_title
: config_get_title(context->config);

gtk_window_set_title(window, title);
}
3 changes: 2 additions & 1 deletion src/context.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ typedef struct {
} Context;


Context* context_init(Option* option,GtkApplication* app, VteTerminal* vte);
Context* context_init(Option* option, GtkApplication* app, VteTerminal* vte);
void context_close(Context* context);
void context_load(Context* context);
bool context_perform_keymap(Context* context, unsigned key, GdkModifierType mod);
void context_on_change_vte_title(Context* context);

#endif
30 changes: 19 additions & 11 deletions src/tym.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,14 @@
#include "option.h"


static void on_shutdown(GApplication* app, void* user_data)
{
UNUSED(app);

Context* context = (Context*) user_data;
context_close(context);
}

static bool on_key_press(GtkWidget *widget, GdkEventKey *event, void* user_data)
{
UNUSED(widget);
Expand All @@ -26,15 +34,6 @@ static bool on_key_press(GtkWidget *widget, GdkEventKey *event, void* user_data)
return false;
}


static void on_shutdown(GApplication* app, void* user_data)
{
UNUSED(app);

Context* context = (Context*) user_data;
context_close(context);
}

static void on_child_exited(VteTerminal *vte, int status, void* user_data)
{
UNUSED(vte);
Expand All @@ -44,6 +43,14 @@ static void on_child_exited(VteTerminal *vte, int status, void* user_data)
g_application_quit(app);
}

static void on_vte_title_changed(VteTerminal *vte, void* user_data)
{
UNUSED(vte);

Context* context = (Context*)user_data;
context_on_change_vte_title(context);
}

#ifdef USE_ASYNC_SPAWN
static void on_spawn(VteTerminal *vte, GPid pid, GError *error, void* user_data)
{
Expand All @@ -61,7 +68,7 @@ static void on_activate(GtkApplication* app, void* user_data)
{
dd("app activate");

Option* option = (Option*) user_data;
Option* option = (Option*)user_data;

GList* list = gtk_application_get_windows(app);
if (list) {
Expand All @@ -81,8 +88,9 @@ static void on_activate(GtkApplication* app, void* user_data)
context_load(context);

g_signal_connect(app, "shutdown", G_CALLBACK(on_shutdown), context);
g_signal_connect(G_OBJECT(vte), "child-exited", G_CALLBACK(on_child_exited), app);
g_signal_connect(G_OBJECT(vte), "key-press-event", G_CALLBACK(on_key_press), context);
g_signal_connect(G_OBJECT(vte), "child-exited", G_CALLBACK(on_child_exited), app);
g_signal_connect(G_OBJECT(vte), "window-title-changed", G_CALLBACK(on_vte_title_changed), context);

char* argv[] = { config_get_shell(context->config), NULL };
char** env = g_get_environ();
Expand Down

0 comments on commit b657773

Please sign in to comment.