#include #include #include "mssh-gconf.h" #include "mssh-window.h" #include "mssh-terminal.h" void mssh_gconf_notify_font(GSettings *settings, const gchar *key, gpointer data) { PangoFontDescription *font_desc; gchar *value; int i; MSSHWindow *window = MSSH_WINDOW(data); value = g_settings_get_string(settings, key); font_desc = pango_font_description_from_string(value); for(i = 0; i < window->terminals->len; i++) { vte_terminal_set_font(VTE_TERMINAL(g_array_index( window->terminals, MSSHTerminal*, i)), font_desc); } g_free(value); pango_font_description_free(font_desc); } void mssh_gconf_notify_fg_colour(GSettings *settings, const gchar *key, gpointer data) { gchar *colour_s; GdkRGBA colour; int i; MSSHWindow *window = MSSH_WINDOW(data); colour_s = g_settings_get_string(settings, key); gdk_rgba_parse(&colour, colour_s); for(i = 0; i < window->terminals->len; i++) { vte_terminal_set_color_foreground(VTE_TERMINAL(g_array_index( window->terminals, MSSHTerminal*, i)), &colour); } g_free (colour_s); } void mssh_gconf_notify_bg_colour(GSettings *settings, const gchar *key, gpointer data) { gchar *colour_s; GdkRGBA colour; int i; MSSHWindow *window = MSSH_WINDOW(data); colour_s = g_settings_get_string(settings, key); gdk_rgba_parse(&colour, colour_s); for(i = 0; i < window->terminals->len; i++) { vte_terminal_set_color_background(VTE_TERMINAL(g_array_index( window->terminals, MSSHTerminal*, i)), &colour); } g_free(colour_s); } void mssh_gconf_notify_fg_colour_focus(GSettings *settings, const gchar *key, gpointer data) { gchar *colour_s; GdkRGBA colour; int i; int idx = -1; GtkWidget *focus; MSSHWindow *window = MSSH_WINDOW(data); colour_s = g_settings_get_string(settings, key); gdk_rgba_parse(&colour, colour_s); /* get the currently focused window */ focus = gtk_window_get_focus(GTK_WINDOW(window)); /* find the focused window in the terminal list */ for(i = 0; i < window->terminals->len; i++) { if(focus == GTK_WIDGET(g_array_index(window->terminals, MSSHTerminal*, i))) { idx = i; break; } } if (idx != -1) { /* found the currently focused terminal, update the color */ vte_terminal_set_color_foreground(VTE_TERMINAL(g_array_index( window->terminals, MSSHTerminal*, idx)), &colour); } g_free(colour_s); } void mssh_gconf_notify_bg_colour_focus(GSettings *settings, const gchar *key, gpointer data) { gchar *colour_s; GdkRGBA colour; int i; int idx = -1; GtkWidget *focus; MSSHWindow *window = MSSH_WINDOW(data); colour_s = g_settings_get_string(settings, key); gdk_rgba_parse(&colour, colour_s); /* get the currently focused window */ focus = gtk_window_get_focus(GTK_WINDOW(window)); /* find the focused window in the terminal list */ for(i = 0; i < window->terminals->len; i++) { if(focus == GTK_WIDGET(g_array_index(window->terminals, MSSHTerminal*, i))) { idx = i; break; } } if (idx != -1) { /* found the currently focused terminal, update the color */ vte_terminal_set_color_background(VTE_TERMINAL(g_array_index( window->terminals, MSSHTerminal*, idx)), &colour); } g_free(colour_s); } void mssh_gconf_notify_columns(GSettings *settings, const gchar *key, gpointer data) { int columns; MSSHWindow *window = MSSH_WINDOW(data); columns = g_settings_get_int(settings, key); if(columns <= 0) { columns = 1; g_settings_set_int(settings, MSSH_GCONF_KEY_COLUMNS, columns); } window->columns = columns; mssh_window_relayout(window); } void mssh_gconf_notify_timeout(GSettings *settings, const gchar *key, gpointer data) { int timeout; MSSHWindow *window = MSSH_WINDOW(data); timeout = g_settings_get_int(settings, key); if(timeout < 0) { timeout = 0; g_settings_set_int(settings, MSSH_GCONF_KEY_TIMEOUT, timeout); } window->timeout = timeout; mssh_window_relayout(window); } void mssh_gconf_notify_close_ended(GSettings *settings, const gchar *key, gpointer data) { gboolean close_ended; int i; MSSHWindow *window = MSSH_WINDOW(data); close_ended = g_settings_get_boolean(settings, key); window->close_ended_sessions = close_ended; if(close_ended) { for(i = 0; i < window->terminals->len; i++) { MSSHTerminal *terminal = g_array_index(window->terminals, MSSHTerminal*, i); if(terminal->ended) { mssh_window_session_closed(terminal, window); } } } } void mssh_gconf_notify_recolor_focused(GSettings *settings, const gchar *key, gpointer data) { gboolean recolor_focused; MSSHWindow *window = MSSH_WINDOW(data); recolor_focused = g_settings_get_boolean(settings, key); window->recolor_focused = recolor_focused; } void mssh_gconf_notify_quit_all_ended(GSettings *settings, const gchar *key, gpointer data) { MSSHWindow *window = MSSH_WINDOW(data); window->exit_on_all_closed = g_settings_get_boolean(settings, key); } void mssh_gconf_notify_dir_focus(GSettings *settings, const gchar *key, gpointer data) { MSSHWindow *window = MSSH_WINDOW(data); window->dir_focus = g_settings_get_boolean(settings, key); } void mssh_gconf_notify_modifier(GSettings *settings, const gchar *key, gpointer data) { MSSHWindow *window = MSSH_WINDOW(data); if(window->accel) { gtk_accel_group_disconnect_key(window->accel, GDK_KEY_Up, window->modifier); gtk_accel_group_disconnect_key(window->accel, GDK_KEY_Down, window->modifier); gtk_accel_group_disconnect_key(window->accel, GDK_KEY_Left, window->modifier); gtk_accel_group_disconnect_key(window->accel, GDK_KEY_Right, window->modifier); } window->modifier = g_settings_get_int(settings, key); if(window->accel) { gtk_accel_group_connect(window->accel, GDK_KEY_Up, window->modifier, GTK_ACCEL_VISIBLE, g_cclosure_new( G_CALLBACK(mssh_window_focus), window, NULL)); gtk_accel_group_connect(window->accel, GDK_KEY_Down, window->modifier, GTK_ACCEL_VISIBLE, g_cclosure_new( G_CALLBACK(mssh_window_focus), window, NULL)); gtk_accel_group_connect(window->accel, GDK_KEY_Left, window->modifier, GTK_ACCEL_VISIBLE, g_cclosure_new( G_CALLBACK(mssh_window_focus), window, NULL)); gtk_accel_group_connect(window->accel, GDK_KEY_Right, window->modifier, GTK_ACCEL_VISIBLE, g_cclosure_new( G_CALLBACK(mssh_window_focus), window, NULL)); } } void mssh_gconf_backscroll_buffer_size(GSettings *settings, const gchar *key, gpointer data) { gint backscroll_buffer_size; MSSHWindow *window = MSSH_WINDOW(data); int i; int len = window->terminals->len; backscroll_buffer_size = g_settings_get_int(settings, key); if (backscroll_buffer_size < -1) { backscroll_buffer_size = 5000; g_settings_set_int(settings, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE, backscroll_buffer_size); } window->backscroll_buffer_size = backscroll_buffer_size; /* reconfigure all terminals with the new size*/ for(i = 0; i < len; i++) { mssh_terminal_set_backscroll_size(g_array_index(window->terminals, MSSHTerminal*, i), &backscroll_buffer_size); } }