mssh-pref.c 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. #include <gconf/gconf-client.h>
  2. #include "mssh-gconf.h"
  3. #include "mssh-pref.h"
  4. static void mssh_pref_init(MSSHPref* pref);
  5. static void mssh_pref_class_init(MSSHPrefClass *klass);
  6. G_DEFINE_TYPE(MSSHPref, mssh_pref, GTK_TYPE_WINDOW)
  7. GtkWidget* mssh_pref_new(void)
  8. {
  9. return g_object_new(MSSH_TYPE_PREF, NULL);
  10. }
  11. static void mssh_pref_close(GtkWidget *widget, gpointer data)
  12. {
  13. MSSHPref *pref = MSSH_PREF(data);
  14. gtk_widget_destroy(GTK_WIDGET(pref));
  15. }
  16. static void mssh_pref_font_select(GtkWidget *widget, gpointer data)
  17. {
  18. GConfClient *client;
  19. const gchar *font;
  20. client = gconf_client_get_default();
  21. font = gtk_font_button_get_font_name(GTK_FONT_BUTTON(widget));
  22. gconf_client_set_string(client, MSSH_GCONF_KEY_FONT, font, NULL);
  23. }
  24. static void mssh_pref_fg_colour_select(GtkWidget *widget, gpointer data)
  25. {
  26. GConfClient *client;
  27. GdkColor colour;
  28. const gchar *colour_s;
  29. client = gconf_client_get_default();
  30. gtk_color_button_get_color(GTK_COLOR_BUTTON(widget), &colour);
  31. colour_s = gdk_color_to_string(&colour);
  32. gconf_client_set_string(client, MSSH_GCONF_KEY_FG_COLOUR, colour_s,
  33. NULL);
  34. }
  35. static void mssh_pref_bg_colour_select(GtkWidget *widget, gpointer data)
  36. {
  37. GConfClient *client;
  38. GdkColor colour;
  39. const gchar *colour_s;
  40. client = gconf_client_get_default();
  41. gtk_color_button_get_color(GTK_COLOR_BUTTON(widget), &colour);
  42. colour_s = gdk_color_to_string(&colour);
  43. gconf_client_set_string(client, MSSH_GCONF_KEY_BG_COLOUR, colour_s,
  44. NULL);
  45. }
  46. static void mssh_pref_init(MSSHPref* pref)
  47. {
  48. GConfClient *client;
  49. GConfEntry *entry;
  50. GConfValue *value;
  51. GdkVisual *visual = gdk_visual_get_system();
  52. GdkColormap *colour_map = gdk_colormap_new(visual, TRUE);
  53. GdkColor colour;
  54. const gchar *colour_s;
  55. GtkWidget *frame = gtk_vbox_new(FALSE, 5);
  56. GtkWidget *notebook = gtk_notebook_new();
  57. GtkWidget *content = gtk_vbox_new(FALSE, 4);
  58. GtkWidget *font_hbox = gtk_hbox_new(FALSE, 10);
  59. GtkWidget *font_label = gtk_label_new("Font:");
  60. GtkWidget *font_select = gtk_font_button_new();
  61. GtkWidget *colour_table = gtk_table_new(2, 2, FALSE);
  62. GtkWidget *bg_colour_label = gtk_label_new("Background:");
  63. GtkWidget *bg_colour_select = gtk_color_button_new();
  64. GtkWidget *fg_colour_label = gtk_label_new("Foreground:");
  65. GtkWidget *fg_colour_select = gtk_color_button_new();
  66. GtkWidget *exit_check = gtk_check_button_new_with_label(
  67. "Enable Ctrl+W quit shortcut");
  68. GtkWidget *close_check = gtk_check_button_new_with_label(
  69. "Close ended sessions");
  70. GtkWidget *timeout_hbox = gtk_hbox_new(FALSE, 10);
  71. GtkWidget *timeout_label1 = gtk_label_new(
  72. "Closed ended sessions after");
  73. GtkObject *timeout_adj = gtk_adjustment_new(3, 0, 100, 1, 10, 0);
  74. GtkWidget *timeout_select = gtk_spin_button_new(
  75. GTK_ADJUSTMENT(timeout_adj), 1, 0);
  76. GtkWidget *timeout_label2 = gtk_label_new("seconds");
  77. GtkWidget *columns_hbox = gtk_hbox_new(FALSE, 10);
  78. GtkWidget *columns_label = gtk_label_new("Columns:");
  79. GtkObject *columns_adj = gtk_adjustment_new(2, 1, 10, 1, 10, 0);
  80. GtkWidget *columns_select = gtk_spin_button_new(
  81. GTK_ADJUSTMENT(columns_adj), 1, 0);
  82. GtkWidget *close_hbox = gtk_hbox_new(FALSE, 0);
  83. GtkWidget *close_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
  84. gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), FALSE);
  85. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), content, NULL);
  86. gtk_box_pack_start(GTK_BOX(font_hbox), font_label, FALSE, TRUE, 0);
  87. gtk_box_pack_start(GTK_BOX(font_hbox), font_select, FALSE, TRUE, 0);
  88. gtk_box_pack_start(GTK_BOX(content), font_hbox, FALSE, TRUE, 0);
  89. gtk_table_attach(GTK_TABLE(colour_table), bg_colour_label,
  90. 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
  91. gtk_table_attach(GTK_TABLE(colour_table), bg_colour_select,
  92. 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
  93. gtk_table_attach(GTK_TABLE(colour_table), fg_colour_label,
  94. 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
  95. gtk_table_attach(GTK_TABLE(colour_table), fg_colour_select,
  96. 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
  97. gtk_box_pack_start(GTK_BOX(content), colour_table, FALSE, TRUE, 0);
  98. gtk_box_pack_start(GTK_BOX(content), exit_check, FALSE, TRUE, 0);
  99. gtk_box_pack_start(GTK_BOX(content), close_check, FALSE, TRUE, 0);
  100. gtk_box_pack_start(GTK_BOX(timeout_hbox), timeout_label1, FALSE,
  101. TRUE, 0);
  102. gtk_box_pack_start(GTK_BOX(timeout_hbox), timeout_select, FALSE,
  103. TRUE, 0);
  104. gtk_box_pack_start(GTK_BOX(timeout_hbox), timeout_label2, FALSE,
  105. TRUE, 0);
  106. gtk_box_pack_start(GTK_BOX(content), timeout_hbox, FALSE, TRUE, 0);
  107. gtk_box_pack_start(GTK_BOX(columns_hbox), columns_label, FALSE,
  108. TRUE, 0);
  109. gtk_box_pack_start(GTK_BOX(columns_hbox), columns_select, FALSE,
  110. TRUE, 0);
  111. gtk_box_pack_start(GTK_BOX(content), columns_hbox, FALSE, TRUE, 0);
  112. gtk_box_pack_end(GTK_BOX(close_hbox), close_button, FALSE, TRUE, 0);
  113. gtk_box_pack_start(GTK_BOX(frame), notebook, TRUE, TRUE, 0);
  114. gtk_box_pack_start(GTK_BOX(frame), close_hbox, FALSE, TRUE, 0);
  115. gtk_container_add(GTK_CONTAINER(pref), frame);
  116. g_signal_connect(G_OBJECT(close_button), "clicked",
  117. G_CALLBACK(mssh_pref_close), pref);
  118. gtk_container_set_border_width(GTK_CONTAINER(content), 6);
  119. gtk_container_set_border_width(GTK_CONTAINER(pref), 15);
  120. gtk_window_set_title(GTK_WINDOW(pref), "Preferences");
  121. gtk_window_set_resizable(GTK_WINDOW(pref), FALSE);
  122. g_signal_connect(G_OBJECT(font_select), "font-set",
  123. G_CALLBACK(mssh_pref_font_select), NULL);
  124. g_signal_connect(G_OBJECT(fg_colour_select), "color-set",
  125. G_CALLBACK(mssh_pref_fg_colour_select), NULL);
  126. g_signal_connect(G_OBJECT(bg_colour_select), "color-set",
  127. G_CALLBACK(mssh_pref_bg_colour_select), NULL);
  128. client = gconf_client_get_default();
  129. entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FONT, NULL,
  130. TRUE, NULL);
  131. value = gconf_entry_get_value(entry);
  132. gtk_font_button_set_font_name(GTK_FONT_BUTTON(font_select),
  133. gconf_value_get_string(value));
  134. entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR, NULL,
  135. TRUE, NULL);
  136. value = gconf_entry_get_value(entry);
  137. colour_s = gconf_value_get_string(value);
  138. gdk_colormap_alloc_color(colour_map, &colour, TRUE, TRUE);
  139. gdk_color_parse(colour_s, &colour);
  140. gtk_color_button_set_color(GTK_COLOR_BUTTON(fg_colour_select),
  141. &colour);
  142. entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR, NULL,
  143. TRUE, NULL);
  144. value = gconf_entry_get_value(entry);
  145. colour_s = gconf_value_get_string(value);
  146. gdk_colormap_alloc_color(colour_map, &colour, TRUE, TRUE);
  147. gdk_color_parse(colour_s, &colour);
  148. gtk_color_button_set_color(GTK_COLOR_BUTTON(bg_colour_select),
  149. &colour);
  150. }
  151. static void mssh_pref_class_init(MSSHPrefClass *klass)
  152. {
  153. }