diff --git a/terminal/terminal-screen.c b/terminal/terminal-screen.c index 1aaced5..8cec375 100644 --- a/terminal/terminal-screen.c +++ b/terminal/terminal-screen.c @@ -39,6 +39,8 @@ #include #endif +#include + #include #include #include @@ -146,6 +148,8 @@ struct _TerminalScreen gchar **custom_command; gchar *custom_title; + guint temporary_font_size; + guint hold : 1; guint background_timer_id; @@ -247,6 +251,8 @@ terminal_screen_init (TerminalScreen *screen) NULL); gtk_box_pack_start (GTK_BOX (screen), screen->terminal, TRUE, TRUE, 0); + screen->temporary_font_size = 0; + screen->scrollbar = gtk_vscrollbar_new (VTE_TERMINAL (screen->terminal)->adjustment); gtk_box_pack_start (GTK_BOX (screen), screen->scrollbar, FALSE, FALSE, 0); g_signal_connect_after (G_OBJECT (screen->scrollbar), "button-press-event", G_CALLBACK (exo_noop_true), NULL); @@ -1883,3 +1889,52 @@ terminal_screen_focus (TerminalScreen *screen) gtk_widget_grab_focus (GTK_WIDGET (screen->terminal)); } + + + +void +terminal_screen_temporary_fontsize_change (TerminalScreen *screen, guint change) +{ + gchar *font_name; + gchar *font_name_new; + guint str_offset; + guint font_size; + gchar font_size_new[G_MAXINT8]; + + + /*FIXME Does it return right font name (+size) every time? */ + g_object_get (G_OBJECT (screen->preferences), + "font-name", &font_name, + NULL); + + /*Position in "font string" where font size (integer) begins*/ + str_offset = strlen(font_name); + while ((font_name[str_offset-1] != ' ') && (str_offset > 1)) + { + str_offset--; + } + + + if (screen->temporary_font_size == 0) + { + font_size = atoi(&font_name[str_offset]); + } + else + { + font_size = screen->temporary_font_size; + } + + /* We have to change the "font size" integer on the end of the string*/ + screen->temporary_font_size = (font_size + change > 0) ? font_size + change : 1; + g_sprintf(font_size_new, "%d", screen->temporary_font_size); + font_name[str_offset] = '\0'; + //g_stpcpy(font_name_new, font_name); + font_name_new = g_strconcat(font_name, font_size_new, NULL); + + vte_terminal_set_font_from_string (VTE_TERMINAL (screen->terminal), font_name_new); + + g_free(font_name); + g_free(font_name_new); +} + + diff --git a/terminal/terminal-screen.h b/terminal/terminal-screen.h index 7498409..b898222 100644 --- a/terminal/terminal-screen.h +++ b/terminal/terminal-screen.h @@ -88,6 +88,9 @@ GtkWidget *terminal_screen_get_tab_label (TerminalScreen *scree void terminal_screen_focus (TerminalScreen *screen); +void terminal_screen_temporary_fontsize_change (TerminalScreen *screen, + guint change); + G_END_DECLS #endif /* !__TERMINAL_SCREEN_H__ */ diff --git a/terminal/terminal-window-ui.xml b/terminal/terminal-window-ui.xml index 9709078..c767676 100644 --- a/terminal/terminal-window-ui.xml +++ b/terminal/terminal-window-ui.xml @@ -30,6 +30,9 @@ + + + diff --git a/terminal/terminal-window.c b/terminal/terminal-window.c index 6294ef2..1603147 100644 --- a/terminal/terminal-window.c +++ b/terminal/terminal-window.c @@ -166,6 +166,10 @@ static void terminal_window_action_show_borders (GtkToggleA TerminalWindow *window); static void terminal_window_action_fullscreen (GtkToggleAction *action, TerminalWindow *window); +static void terminal_window_action_increase_font (GtkToggleAction *action, + TerminalWindow *window); +static void terminal_window_action_decrease_font (GtkToggleAction *action, + TerminalWindow *window); static void terminal_window_action_prev_tab (GtkAction *action, TerminalWindow *window); static void terminal_window_action_next_tab (GtkAction *action, @@ -231,6 +235,8 @@ static const GtkActionEntry action_entries[] = { "edit-toolbars", NULL, N_ ("_Toolbars..."), NULL, N_ ("Customize the toolbars"), G_CALLBACK (terminal_window_action_edit_toolbars), }, { "preferences", GTK_STOCK_PREFERENCES, N_ ("Pr_eferences..."), NULL, N_ ("Open the Terminal preferences dialog"), G_CALLBACK (terminal_window_action_prefs), }, { "view-menu", NULL, N_ ("_View"), NULL, NULL, NULL, }, + { "increase-font", NULL, N_ ("_Increase font"), "a", NULL, G_CALLBACK (terminal_window_action_increase_font), }, + { "decrease-font", NULL, N_ ("_Decrease font"), "s", NULL, G_CALLBACK (terminal_window_action_decrease_font), }, { "terminal-menu", NULL, N_ ("_Terminal"), NULL, NULL, NULL, }, { "set-title", NULL, N_ ("_Set Title..."), NULL, N_ ("Set a custom title for the current tab"), G_CALLBACK (terminal_window_action_set_title), }, { "reset", GTK_STOCK_REFRESH, N_ ("_Reset"), NULL, N_ ("Reset"), G_CALLBACK (terminal_window_action_reset), }, @@ -1471,6 +1477,30 @@ terminal_window_action_fullscreen (GtkToggleAction *action, static void +terminal_window_action_increase_font (GtkToggleAction *action, + TerminalWindow *window) +{ + if (G_LIKELY (window->active != NULL)) + { + terminal_screen_temporary_fontsize_change(window->active, 1); + } +} + + + +static void +terminal_window_action_decrease_font (GtkToggleAction *action, + TerminalWindow *window) +{ + if (G_LIKELY (window->active != NULL)) + { + terminal_screen_temporary_fontsize_change(window->active, -1); + } +} + + + +static void terminal_window_action_prev_tab (GtkAction *action, TerminalWindow *window) {