mssh-gconf.c 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. #include <vte/vte.h>
  2. #include <gdk/gdkkeysyms.h>
  3. #include "mssh-gconf.h"
  4. #include "mssh-window.h"
  5. #include "mssh-terminal.h"
  6. void mssh_gconf_notify_font(GSettings *settings, const gchar *key,
  7. gpointer data)
  8. {
  9. PangoFontDescription *font_desc;
  10. gchar *value;
  11. int i;
  12. MSSHWindow *window = MSSH_WINDOW(data);
  13. value = g_settings_get_string(settings, key);
  14. font_desc = pango_font_description_from_string(value);
  15. for(i = 0; i < window->terminals->len; i++)
  16. {
  17. vte_terminal_set_font(VTE_TERMINAL(g_array_index(
  18. window->terminals, MSSHTerminal*, i)), font_desc);
  19. }
  20. g_free(value);
  21. pango_font_description_free(font_desc);
  22. }
  23. void mssh_gconf_notify_fg_colour(GSettings *settings, const gchar *key,
  24. gpointer data)
  25. {
  26. gchar *colour_s;
  27. GdkRGBA colour;
  28. int i;
  29. MSSHWindow *window = MSSH_WINDOW(data);
  30. colour_s = g_settings_get_string(settings, key);
  31. gdk_rgba_parse(&colour, colour_s);
  32. for(i = 0; i < window->terminals->len; i++)
  33. {
  34. vte_terminal_set_color_foreground(VTE_TERMINAL(g_array_index(
  35. window->terminals, MSSHTerminal*, i)), &colour);
  36. }
  37. g_free (colour_s);
  38. }
  39. void mssh_gconf_notify_bg_colour(GSettings *settings, const gchar *key,
  40. gpointer data)
  41. {
  42. gchar *colour_s;
  43. GdkRGBA colour;
  44. int i;
  45. MSSHWindow *window = MSSH_WINDOW(data);
  46. colour_s = g_settings_get_string(settings, key);
  47. gdk_rgba_parse(&colour, colour_s);
  48. for(i = 0; i < window->terminals->len; i++)
  49. {
  50. vte_terminal_set_color_background(VTE_TERMINAL(g_array_index(
  51. window->terminals, MSSHTerminal*, i)), &colour);
  52. }
  53. g_free(colour_s);
  54. }
  55. void mssh_gconf_notify_fg_colour_focus(GSettings *settings, const gchar *key,
  56. gpointer data)
  57. {
  58. gchar *colour_s;
  59. GdkRGBA colour;
  60. int i;
  61. int idx = -1;
  62. GtkWidget *focus;
  63. MSSHWindow *window = MSSH_WINDOW(data);
  64. colour_s = g_settings_get_string(settings, key);
  65. gdk_rgba_parse(&colour, colour_s);
  66. /* get the currently focused window */
  67. focus = gtk_window_get_focus(GTK_WINDOW(window));
  68. /* find the focused window in the terminal list */
  69. for(i = 0; i < window->terminals->len; i++)
  70. {
  71. if(focus == GTK_WIDGET(g_array_index(window->terminals,
  72. MSSHTerminal*, i)))
  73. {
  74. idx = i;
  75. break;
  76. }
  77. }
  78. if (idx != -1) {
  79. /* found the currently focused terminal, update the color */
  80. vte_terminal_set_color_foreground(VTE_TERMINAL(g_array_index(
  81. window->terminals, MSSHTerminal*, idx)), &colour);
  82. }
  83. g_free(colour_s);
  84. }
  85. void mssh_gconf_notify_bg_colour_focus(GSettings *settings, const gchar *key,
  86. gpointer data)
  87. {
  88. gchar *colour_s;
  89. GdkRGBA colour;
  90. int i;
  91. int idx = -1;
  92. GtkWidget *focus;
  93. MSSHWindow *window = MSSH_WINDOW(data);
  94. colour_s = g_settings_get_string(settings, key);
  95. gdk_rgba_parse(&colour, colour_s);
  96. /* get the currently focused window */
  97. focus = gtk_window_get_focus(GTK_WINDOW(window));
  98. /* find the focused window in the terminal list */
  99. for(i = 0; i < window->terminals->len; i++)
  100. {
  101. if(focus == GTK_WIDGET(g_array_index(window->terminals,
  102. MSSHTerminal*, i)))
  103. {
  104. idx = i;
  105. break;
  106. }
  107. }
  108. if (idx != -1) {
  109. /* found the currently focused terminal, update the color */
  110. vte_terminal_set_color_background(VTE_TERMINAL(g_array_index(
  111. window->terminals, MSSHTerminal*, idx)), &colour);
  112. }
  113. g_free(colour_s);
  114. }
  115. void mssh_gconf_notify_columns(GSettings *settings, const gchar *key,
  116. gpointer data)
  117. {
  118. int columns;
  119. MSSHWindow *window = MSSH_WINDOW(data);
  120. columns = g_settings_get_int(settings, key);
  121. if(columns <= 0)
  122. {
  123. columns = 1;
  124. g_settings_set_int(settings, MSSH_GCONF_KEY_COLUMNS, columns);
  125. }
  126. window->columns = columns;
  127. mssh_window_relayout(window);
  128. }
  129. void mssh_gconf_notify_timeout(GSettings *settings, const gchar *key,
  130. gpointer data)
  131. {
  132. int timeout;
  133. MSSHWindow *window = MSSH_WINDOW(data);
  134. timeout = g_settings_get_int(settings, key);
  135. if(timeout < 0)
  136. {
  137. timeout = 0;
  138. g_settings_set_int(settings, MSSH_GCONF_KEY_TIMEOUT, timeout);
  139. }
  140. window->timeout = timeout;
  141. mssh_window_relayout(window);
  142. }
  143. void mssh_gconf_notify_close_ended(GSettings *settings, const gchar *key,
  144. gpointer data)
  145. {
  146. gboolean close_ended;
  147. int i;
  148. MSSHWindow *window = MSSH_WINDOW(data);
  149. close_ended = g_settings_get_boolean(settings, key);
  150. window->close_ended_sessions = close_ended;
  151. if(close_ended)
  152. {
  153. for(i = 0; i < window->terminals->len; i++)
  154. {
  155. MSSHTerminal *terminal = g_array_index(window->terminals,
  156. MSSHTerminal*, i);
  157. if(terminal->ended)
  158. {
  159. mssh_window_session_closed(terminal, window);
  160. }
  161. }
  162. }
  163. }
  164. void mssh_gconf_notify_recolor_focused(GSettings *settings, const gchar *key,
  165. gpointer data)
  166. {
  167. gboolean recolor_focused;
  168. MSSHWindow *window = MSSH_WINDOW(data);
  169. recolor_focused = g_settings_get_boolean(settings, key);
  170. window->recolor_focused = recolor_focused;
  171. }
  172. void mssh_gconf_notify_quit_all_ended(GSettings *settings, const gchar *key,
  173. gpointer data)
  174. {
  175. MSSHWindow *window = MSSH_WINDOW(data);
  176. window->exit_on_all_closed = g_settings_get_boolean(settings, key);
  177. }
  178. void mssh_gconf_notify_dir_focus(GSettings *settings, const gchar *key,
  179. gpointer data)
  180. {
  181. MSSHWindow *window = MSSH_WINDOW(data);
  182. window->dir_focus = g_settings_get_boolean(settings, key);
  183. }
  184. void mssh_gconf_notify_modifier(GSettings *settings, const gchar *key,
  185. gpointer data)
  186. {
  187. MSSHWindow *window = MSSH_WINDOW(data);
  188. if(window->accel)
  189. {
  190. gtk_accel_group_disconnect_key(window->accel, GDK_KEY_Up,
  191. window->modifier);
  192. gtk_accel_group_disconnect_key(window->accel, GDK_KEY_Down,
  193. window->modifier);
  194. gtk_accel_group_disconnect_key(window->accel, GDK_KEY_Left,
  195. window->modifier);
  196. gtk_accel_group_disconnect_key(window->accel, GDK_KEY_Right,
  197. window->modifier);
  198. }
  199. window->modifier = g_settings_get_int(settings, key);
  200. if(window->accel)
  201. {
  202. gtk_accel_group_connect(window->accel, GDK_KEY_Up, window->modifier,
  203. GTK_ACCEL_VISIBLE, g_cclosure_new(
  204. G_CALLBACK(mssh_window_focus), window, NULL));
  205. gtk_accel_group_connect(window->accel, GDK_KEY_Down, window->modifier,
  206. GTK_ACCEL_VISIBLE, g_cclosure_new(
  207. G_CALLBACK(mssh_window_focus), window, NULL));
  208. gtk_accel_group_connect(window->accel, GDK_KEY_Left, window->modifier,
  209. GTK_ACCEL_VISIBLE, g_cclosure_new(
  210. G_CALLBACK(mssh_window_focus), window, NULL));
  211. gtk_accel_group_connect(window->accel, GDK_KEY_Right, window->modifier,
  212. GTK_ACCEL_VISIBLE, g_cclosure_new(
  213. G_CALLBACK(mssh_window_focus), window, NULL));
  214. }
  215. }
  216. void mssh_gconf_backscroll_buffer_size(GSettings *settings, const gchar *key,
  217. gpointer data)
  218. {
  219. gint backscroll_buffer_size;
  220. MSSHWindow *window = MSSH_WINDOW(data);
  221. int i;
  222. int len = window->terminals->len;
  223. backscroll_buffer_size = g_settings_get_int(settings, key);
  224. if (backscroll_buffer_size < -1)
  225. {
  226. backscroll_buffer_size = 5000;
  227. g_settings_set_int(settings, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE, backscroll_buffer_size);
  228. }
  229. window->backscroll_buffer_size = backscroll_buffer_size;
  230. /* reconfigure all terminals with the new size*/
  231. for(i = 0; i < len; i++)
  232. {
  233. mssh_terminal_set_backscroll_size(g_array_index(window->terminals,
  234. MSSHTerminal*, i), &backscroll_buffer_size);
  235. }
  236. }