1 #include "gcin.h"
2 #include "gtab.h"
3 #include "config.h"
4 #if UNIX
5 #include <signal.h>
6 #endif
7 #if GCIN_i18n_message
8 #include <libintl.h>
9 #endif
10 #include "lang.h"
11 
12 static GtkWidget *check_button_root_style_use,
13                  *check_button_gcin_pop_up_win,
14                  *check_button_gcin_inner_frame,
15 #if TRAY_ENABLED
16                  *check_button_gcin_status_tray,
17                  *check_button_gcin_win32_icon,
18                  *check_button_gcin_tray_hf_win_kbm,
19                  *check_button_gcin_status_win,
20 #endif
21                  *check_button_gcin_win_color_use,
22                  *check_button_gcin_on_the_spot_key;
23 
24 
25 static GtkWidget *gcin_kbm_window = NULL, *gcin_appearance_conf_window;
26 static GtkClipboard *pclipboard;
27 static GtkWidget *opt_gcin_edit_display;
28 extern GtkWidget *main_window;
29 static GdkColor gcin_win_gcolor_fg, gcin_win_gcolor_bg, gcin_sel_key_gcolor;
30 static GtkWidget *opt_tray;
31 static GtkWidget *label_cursor;
32 extern gboolean button_order;
33 
34 #if USE_INDICATOR
35 static struct {
36   char *name;
37   int key;
38 } tray_options[]={
39   {"單一圖示", GCIN_TRAY_UNIX},
40   {"GTK 雙圖示", GCIN_TRAY_WIN32},
41   {"Unity indicator", GCIN_TRAY_INDICATOR}
42 };
43 int tray_optionsN = sizeof(tray_options)/sizeof(tray_options[0]);
44 #endif
45 
46 typedef struct {
47   GdkColor *color;
48   char **color_str;
49   GtkWidget *color_selector;
50   char *title;
51 } COLORSEL;
52 
53 COLORSEL colorsel[2] =
54   { {&gcin_win_gcolor_fg, &gcin_win_color_fg, NULL, "前景顏色"},
55     {&gcin_win_gcolor_bg, &gcin_win_color_bg, NULL, "背景顏色"}
56   };
57 
58 struct {
59   char *keystr;
60   int keynum;
61 } edit_disp[] = {
62   {"gcin視窗", GCIN_EDIT_DISPLAY_OVER_THE_SPOT},
63   {"應用程式編輯區", GCIN_EDIT_DISPLAY_ON_THE_SPOT},
64   {"同時顯示",  GCIN_EDIT_DISPLAY_BOTH},
65   { NULL, 0},
66 };
67 
68 
69 
70 void create_kbm_window();
71 
cb_kbm()72 static void cb_kbm()
73 {
74   create_kbm_window();
75 }
76 
77 
78 #include <string.h>
79 
80 
81 static GtkWidget *spinner_gcin_font_size, *spinner_gcin_font_size_tsin_presel,
82                  *spinner_gcin_font_size_symbol,*spinner_gcin_font_size_pho_near,
83                  *spinner_gcin_font_size_win_kbm,
84                  *spinner_gcin_font_size_win_kbm_en,
85                  *spinner_gcin_font_size_tsin_pho_in, *spinner_gcin_font_size_gtab_in, *spinner_root_style_x,
86                  *spinner_root_style_y, *font_sel;
87 static GdkColor tsin_cursor_gcolor;
88 
89 static GtkWidget *label_win_color_test, *event_box_win_color_test;
90 
cb_appearance_conf_ok(GtkWidget * widget,GdkEvent * event,gpointer data)91 static gboolean cb_appearance_conf_ok( GtkWidget *widget,
92                                    GdkEvent  *event,
93                                    gpointer   data )
94 {
95   int font_size = (int) gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinner_gcin_font_size));
96   save_gcin_conf_int(GCIN_FONT_SIZE, font_size);
97 
98 #if GTK_CHECK_VERSION(2,4,0)
99   char fname[128];
100   strcpy(fname, gtk_font_button_get_font_name(GTK_FONT_BUTTON(font_sel)));
101   int len = strlen(fname)-1;
102 
103   while (len > 0 && isdigit(fname[len])) {
104        fname[len--]=0;
105   }
106 
107   while (len > 0 && fname[len]==' ') {
108        fname[len--]=0;
109   }
110 
111   save_gcin_conf_str(GCIN_FONT_NAME, fname);
112 #endif
113 
114   int font_size_tsin_presel = (int) gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinner_gcin_font_size_tsin_presel));
115   save_gcin_conf_int(GCIN_FONT_SIZE_TSIN_PRESEL, font_size_tsin_presel);
116 
117   int font_size_symbol = (int) gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinner_gcin_font_size_symbol));
118   save_gcin_conf_int(GCIN_FONT_SIZE_SYMBOL, font_size_symbol);
119 
120   int font_size_tsin_pho_in = (int) gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinner_gcin_font_size_tsin_pho_in));
121   save_gcin_conf_int(GCIN_FONT_SIZE_TSIN_PHO_IN, font_size_tsin_pho_in);
122 
123   int font_size_pho_near = (int) gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinner_gcin_font_size_pho_near));
124   save_gcin_conf_int(GCIN_FONT_SIZE_PHO_NEAR, font_size_pho_near);
125 
126   int font_size_gtab_in = (int) gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinner_gcin_font_size_gtab_in));
127   save_gcin_conf_int(GCIN_FONT_SIZE_GTAB_IN, font_size_gtab_in);
128 
129   int font_size_win_kbm = (int) gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinner_gcin_font_size_win_kbm));
130   save_gcin_conf_int(GCIN_FONT_SIZE_WIN_KBM, font_size_win_kbm);
131   int font_size_win_kbm_en = (int) gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinner_gcin_font_size_win_kbm_en));
132   save_gcin_conf_int(GCIN_FONT_SIZE_WIN_KBM_EN, font_size_win_kbm_en);
133 
134   int gcin_pop_up_win = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_button_gcin_pop_up_win));
135   save_gcin_conf_int(GCIN_POP_UP_WIN, gcin_pop_up_win);
136 
137   int gcin_root_x = (int) gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinner_root_style_x));
138   save_gcin_conf_int(GCIN_ROOT_X, gcin_root_x);
139 
140   int gcin_root_y = (int) gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinner_root_style_y));
141   save_gcin_conf_int(GCIN_ROOT_Y, gcin_root_y);
142 
143   int style = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_button_root_style_use)) ?
144             InputStyleRoot : InputStyleOverSpot;
145   save_gcin_conf_int(GCIN_INPUT_STYLE, style);
146 
147   save_gcin_conf_int(GCIN_INNER_FRAME, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_button_gcin_inner_frame)));
148 #if TRAY_ENABLED
149   save_gcin_conf_int(GCIN_STATUS_TRAY, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_button_gcin_status_tray)));
150 #if USE_INDICATOR
151  save_gcin_conf_int(GCIN_WIN32_ICON,
152                      tray_options[gtk_combo_box_get_active(GTK_COMBO_BOX(opt_tray))].key);
153 #else
154   save_gcin_conf_int(GCIN_WIN32_ICON, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_button_gcin_win32_icon)));
155 #endif
156 #endif
157 
158   gchar *cstr = gtk_color_selection_palette_to_string(&gcin_win_gcolor_fg, 1);
159   dbg("color fg %s\n", cstr);
160   save_gcin_conf_str(GCIN_WIN_COLOR_FG, cstr);
161   g_free(cstr);
162 
163   cstr = gtk_color_selection_palette_to_string(&gcin_win_gcolor_bg, 1);
164   dbg("color bg %s\n", cstr);
165   save_gcin_conf_str(GCIN_WIN_COLOR_BG, cstr);
166   g_free(cstr);
167 
168   save_gcin_conf_int(GCIN_WIN_COLOR_USE, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_button_gcin_win_color_use)));
169   save_gcin_conf_int(GCIN_ON_THE_SPOT_KEY, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_button_gcin_on_the_spot_key)));
170   save_gcin_conf_int(GCIN_TRAY_HF_WIN_KBM, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_button_gcin_tray_hf_win_kbm)));
171   save_gcin_conf_int(GCIN_STATUS_WIN, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_button_gcin_status_win)));
172 
173   cstr = gtk_color_selection_palette_to_string(&gcin_sel_key_gcolor, 1);
174   dbg("selkey color %s\n", cstr);
175   save_gcin_conf_str(GCIN_SEL_KEY_COLOR, cstr);
176   g_free(cstr);
177 
178   int idx = gtk_combo_box_get_active (GTK_COMBO_BOX (opt_gcin_edit_display));
179   save_gcin_conf_int(GCIN_EDIT_DISPLAY, edit_disp[idx].keynum);
180 
181   cstr = gtk_color_selection_palette_to_string(&tsin_cursor_gcolor, 1);
182   dbg("color %s\n", cstr);
183   save_gcin_conf_str(TSIN_CURSOR_COLOR, cstr);
184   g_free(cstr);
185 
186 
187   send_gcin_message(
188 #if UNIX
189 	  GDK_DISPLAY(),
190 #endif
191 	  CHANGE_FONT_SIZE);
192   gtk_widget_destroy(gcin_appearance_conf_window); gcin_appearance_conf_window = NULL;
193 
194   return TRUE;
195 }
196 
close_appearance_conf_window(GtkWidget * widget,GdkEvent * event,gpointer data)197 static gboolean close_appearance_conf_window( GtkWidget *widget,
198                                    GdkEvent  *event,
199                                    gpointer   data )
200 {
201   gtk_widget_destroy(gcin_appearance_conf_window); gcin_appearance_conf_window = NULL;
202   return TRUE;
203 }
204 
205 
cb_savecb_gcin_win_color_fg(GtkWidget * widget,gpointer user_data)206 static void cb_savecb_gcin_win_color_fg(GtkWidget *widget, gpointer user_data)
207 {
208   COLORSEL *sel = (COLORSEL *)user_data;
209   GtkWidget *color_selector = sel->color_selector;
210   GdkColor *col = sel->color;
211   gtk_color_selection_get_current_color(GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(color_selector))), col);
212 
213   if (sel->color == &gcin_win_gcolor_fg) {
214 #if !GTK_CHECK_VERSION(2,91,6)
215     gtk_widget_modify_fg(label_win_color_test, GTK_STATE_NORMAL, col);
216 #else
217     GdkRGBA rgbfg;
218     gdk_rgba_parse(&rgbfg, gdk_color_to_string(col));
219     gtk_widget_override_color(label_win_color_test, GTK_STATE_FLAG_NORMAL, &rgbfg);
220 #endif
221   } else {
222 #if !GTK_CHECK_VERSION(2,91,6)
223     gtk_widget_modify_bg(event_box_win_color_test, GTK_STATE_NORMAL, col);
224 #else
225     GdkRGBA rgbbg;
226     gdk_rgba_parse(&rgbbg, gdk_color_to_string(col));
227     gtk_widget_override_background_color(event_box_win_color_test, GTK_STATE_FLAG_NORMAL, &rgbbg);
228 #endif
229   }
230 }
231 
cb_gcin_win_color_fg(GtkWidget * widget,gpointer data)232 static gboolean cb_gcin_win_color_fg( GtkWidget *widget,
233                                    gpointer   data)
234 {
235   COLORSEL *sel = (COLORSEL *)data;
236   GtkWidget *color_selector = gtk_color_selection_dialog_new (sel->title);
237 
238   gdk_color_parse(*sel->color_str, sel->color);
239 
240   gtk_color_selection_set_current_color(
241           GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(color_selector))),
242           sel->color);
243 
244 
245   sel->color_selector = color_selector;
246 
247   gtk_widget_show((GtkWidget*)color_selector);
248 #if 1
249   if (gtk_dialog_run(GTK_DIALOG(color_selector)) == GTK_RESPONSE_OK)
250     cb_savecb_gcin_win_color_fg((GtkWidget *)color_selector, (gpointer) sel);
251   gtk_widget_destroy(color_selector);
252 #endif
253   return TRUE;
254 }
255 
disp_fg_bg_color()256 void disp_fg_bg_color()
257 {
258   dbg("disp_fg_bg_color\n");
259   if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(check_button_gcin_win_color_use))) {
260     gtk_widget_modify_fg(label_win_color_test, GTK_STATE_NORMAL, &gcin_win_gcolor_fg);
261     dbg("gcin_win_gcolor_bg %d\n", gcin_win_gcolor_bg);
262     gtk_widget_modify_bg(event_box_win_color_test, GTK_STATE_NORMAL, &gcin_win_gcolor_bg);
263   } else {
264     gtk_widget_modify_fg(label_win_color_test, GTK_STATE_NORMAL, NULL);
265     gtk_widget_modify_bg(event_box_win_color_test, GTK_STATE_NORMAL, NULL);
266   }
267 
268   char *key_color = gtk_color_selection_palette_to_string(&gcin_sel_key_gcolor, 1);
269   char tt[512];
270 #if UNIX
271 #if PANGO_VERSION_CHECK(1,22,0)
272   sprintf(tt, "<span foreground=\"%s\" font=\"%d\">7</span><span font=\"%d\">測試</span>", key_color, gcin_font_size_tsin_presel, gcin_font_size_tsin_presel);
273 #else
274   sprintf(tt, "<span foreground=\"%s\" font_desc=\"%d\">7</span><span font_desc=\"%d\">測試</span>", key_color, gcin_font_size_tsin_presel, gcin_font_size_tsin_presel);
275 #endif
276 #else
277   sprintf(tt, "<span foreground=\"%s\" font=\"%d\">7</span><span font=\"%d\">測試</span>", key_color, gcin_font_size_tsin_presel, gcin_font_size_tsin_presel);
278 #endif
279 
280   gtk_label_set_markup(GTK_LABEL(label_win_color_test), tt);
281 }
282 
cb_save_gcin_sel_key_color(GtkWidget * widget,gpointer user_data)283 static void cb_save_gcin_sel_key_color(GtkWidget *widget, gpointer user_data)
284 {
285   GtkColorSelectionDialog *color_selector = (GtkColorSelectionDialog *)user_data;
286   gtk_color_selection_get_current_color(GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(color_selector)), &gcin_sel_key_gcolor);
287   gcin_sel_key_color = gtk_color_selection_palette_to_string(&gcin_sel_key_gcolor, 1);
288 
289   g_snprintf(eng_color_full_str, 128, "<span foreground=\"%s\">%s</span>", gcin_sel_key_color, eng_full_str);
290   g_snprintf(cht_color_full_str, 128, "<span foreground=\"%s\">%s</span>", gcin_sel_key_color, cht_full_str);
291 
292   disp_fg_bg_color();
293 }
294 
295 
cb_gcin_sel_key_color(GtkWidget * widget,gpointer data)296 static gboolean cb_gcin_sel_key_color( GtkWidget *widget, gpointer data)
297 {
298    GtkWidget *color_selector = gtk_color_selection_dialog_new (_(_L("選擇鍵的顏色")));
299 
300    gtk_color_selection_set_current_color(
301            GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(color_selector))),
302            &gcin_sel_key_gcolor);
303 
304 
305    gtk_widget_show(color_selector);
306    if (gtk_dialog_run(GTK_DIALOG(color_selector)) == GTK_RESPONSE_OK)
307      cb_save_gcin_sel_key_color(color_selector, (gpointer) color_selector);
308    gtk_widget_destroy(color_selector);
309 
310    return TRUE;
311 }
312 
cb_button_gcin_on_the_spot_key(GtkToggleButton * togglebutton,gpointer user_data)313 void cb_button_gcin_on_the_spot_key(GtkToggleButton *togglebutton, gpointer user_data)
314 {
315   if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(togglebutton)))
316     return;
317   int i;
318   for (i=0; edit_disp[i].keystr; i++)
319    if (edit_disp[i].keynum == GCIN_EDIT_DISPLAY_ON_THE_SPOT)
320      gtk_combo_box_set_active (GTK_COMBO_BOX (opt_gcin_edit_display), i);
321 }
322 
combo_selected(GtkWidget * widget,gpointer window)323 void combo_selected(GtkWidget *widget, gpointer window)
324 {
325   int idx = gtk_combo_box_get_active (GTK_COMBO_BOX (opt_gcin_edit_display));
326   if (edit_disp[idx].keynum !=  GCIN_EDIT_DISPLAY_ON_THE_SPOT) {
327 	  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(check_button_gcin_on_the_spot_key), FALSE);
328   }
329 }
330 
create_gcin_edit_display()331 static GtkWidget *create_gcin_edit_display()
332 {
333 
334   GtkWidget *hbox = gtk_hbox_new (FALSE, 1);
335   GtkWidget *label = gtk_label_new(_(_L("編輯區顯示")));
336   gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
337 
338   opt_gcin_edit_display = gtk_combo_box_new_text ();
339 #if !GTK_CHECK_VERSION(2,4,0)
340   GtkWidget *menu = gtk_menu_new ();
341 #endif
342   gtk_box_pack_start (GTK_BOX (hbox), opt_gcin_edit_display, FALSE, FALSE, 0);
343 
344   int i, current_idx=0;
345 
346   for(i=0; edit_disp[i].keystr; i++) {
347 #if !GTK_CHECK_VERSION(2,4,0)
348     GtkWidget *item = gtk_menu_item_new_with_label (_(edit_disp[i].keystr));
349 #endif
350 
351     if (edit_disp[i].keynum == gcin_edit_display)
352       current_idx = i;
353 
354 #if GTK_CHECK_VERSION(2,4,0)
355     gtk_combo_box_append_text (GTK_COMBO_BOX_TEXT (opt_gcin_edit_display), edit_disp[i].keystr);
356 #else
357     gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
358 #endif
359   }
360 
361 #if !GTK_CHECK_VERSION(2,4,0)
362   gtk_option_menu_set_menu (GTK_OPTION_MENU (opt_gcin_edit_display), menu);
363 #endif
364   gtk_combo_box_set_active (GTK_COMBO_BOX (opt_gcin_edit_display), current_idx);
365 
366   label = gtk_label_new(_(_L("按鍵顯示於\n應用程式")));
367   gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
368 
369   check_button_gcin_on_the_spot_key = gtk_check_button_new ();
370   g_signal_connect (G_OBJECT (check_button_gcin_on_the_spot_key), "toggled",
371                     G_CALLBACK (cb_button_gcin_on_the_spot_key), NULL);
372   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button_gcin_on_the_spot_key),
373        gcin_on_the_spot_key);
374   gtk_box_pack_start (GTK_BOX (hbox), check_button_gcin_on_the_spot_key, FALSE, FALSE, 0);
375 
376   g_signal_connect(G_OBJECT(opt_gcin_edit_display), "changed",
377         G_CALLBACK(combo_selected), (gpointer) NULL);
378 
379   return hbox;
380 }
381 
382 
383 
cb_gcin_win_color_use(GtkToggleButton * togglebutton,gpointer user_data)384 static gboolean cb_gcin_win_color_use(GtkToggleButton *togglebutton, gpointer user_data)
385 {
386   dbg("cb_gcin_win_color_use\n");
387   disp_fg_bg_color();
388   return TRUE;
389 }
390 
391 // static GtkWidget *da_cursor;
392 
cb_save_tsin_cursor_color(GtkWidget * widget,gpointer user_data)393 static void cb_save_tsin_cursor_color(GtkWidget *widget, gpointer user_data)
394 {
395   GtkColorSelectionDialog *color_selector = (GtkColorSelectionDialog *)user_data;
396   gtk_color_selection_get_current_color(GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(color_selector)), &tsin_cursor_gcolor);
397 
398   gtk_widget_modify_bg(label_cursor, GTK_STATE_NORMAL, &tsin_cursor_gcolor);
399 }
400 
cb_tsin_cursor_color(GtkWidget * widget,gpointer data)401 static gboolean cb_tsin_cursor_color( GtkWidget *widget, gpointer   data )
402 {
403    GtkWidget *color_selector = gtk_color_selection_dialog_new (_(_L("編輯區游標的顏色")));
404 
405    gtk_color_selection_set_current_color(
406            GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(color_selector))),
407            &tsin_cursor_gcolor);
408 
409    gtk_widget_show((GtkWidget*)color_selector);
410 #if 1
411    if (gtk_dialog_run(GTK_DIALOG(color_selector)) == GTK_RESPONSE_OK)
412      cb_save_tsin_cursor_color((GtkWidget *)color_selector, (gpointer) color_selector);
413    gtk_widget_destroy((GtkWidget *)color_selector);
414 #endif
415    return TRUE;
416 }
417 
418 int html_browser(char *s);
419 
cb_appearance_help(GtkWidget * widget,GdkEvent * event,gpointer data)420 static gboolean cb_appearance_help( GtkWidget *widget,
421                                    GdkEvent  *event,
422                                    gpointer   data )
423 {
424   html_browser("http://hyperrate.com/topic-files-dir/48/26548-L0IuDjFh0n/appearance_setting_help.html");
425   return TRUE;
426 }
427 
428 #if USE_INDICATOR
get_currnet_tray_option_idx()429 static int get_currnet_tray_option_idx()
430 {
431   int i;
432   for(i=0; i < tray_optionsN; i++)
433     if (tray_options[i].key == gcin_win32_icon)
434       return i;
435 
436   p_err("tsin-space-opt->%d is not valid", gcin_win32_icon);
437   return -1;
438 }
439 
create_status_icon_opts()440 GtkWidget *create_status_icon_opts()
441 {
442   GtkWidget *hbox = gtk_hbox_new (FALSE, 1);
443 
444   opt_tray = gtk_combo_box_new_text ();
445   gtk_box_pack_start (GTK_BOX (hbox), opt_tray, FALSE, FALSE, 0);
446 
447   int i;
448   int current_idx = get_currnet_tray_option_idx();
449 
450   for(i=0; i < tray_optionsN; i++) {
451     gtk_combo_box_append_text (GTK_COMBO_BOX_TEXT (opt_tray), tray_options[i].name);
452   }
453 
454   dbg("current_idx:%d\n", current_idx);
455 
456   gtk_combo_box_set_active (GTK_COMBO_BOX (opt_tray), current_idx);
457 
458   return hbox;
459 }
460 #endif
461 
462 
create_appearance_conf_window()463 void create_appearance_conf_window()
464 {
465   if (gcin_appearance_conf_window) {
466     gtk_window_present(GTK_WINDOW(gcin_appearance_conf_window));
467     return;
468   }
469 
470   load_setttings();
471 
472   gcin_appearance_conf_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
473   gtk_window_set_position(GTK_WINDOW(gcin_appearance_conf_window), GTK_WIN_POS_MOUSE);
474 
475 
476   gtk_window_set_has_resize_grip(GTK_WINDOW(gcin_appearance_conf_window), FALSE);
477 
478   g_signal_connect (G_OBJECT (gcin_appearance_conf_window), "delete_event",
479                     G_CALLBACK (close_appearance_conf_window),
480                     NULL);
481 
482   gtk_window_set_title (GTK_WINDOW (gcin_appearance_conf_window), _(_L("輸入視窗外觀設定")));
483   gtk_container_set_border_width (GTK_CONTAINER (gcin_appearance_conf_window), 3);
484 
485   GtkWidget *vbox_top = gtk_vbox_new (FALSE, 0);
486   gtk_container_add (GTK_CONTAINER (gcin_appearance_conf_window), vbox_top);
487 
488   GtkWidget *hboxLR = gtk_hbox_new (FALSE, 20);
489   gtk_box_pack_start (GTK_BOX (vbox_top), hboxLR, FALSE, FALSE, 0);
490 
491   GtkWidget *vbox_L = gtk_vbox_new (FALSE, 0);
492   gtk_box_pack_start (GTK_BOX (hboxLR), vbox_L, FALSE, FALSE, 0);
493   GtkWidget *vbox_R = gtk_vbox_new (FALSE, 0);
494   gtk_box_pack_start (GTK_BOX (hboxLR), vbox_R, FALSE, FALSE, 0);
495 
496 
497   GtkWidget *hbox_gcin_font_size = gtk_hbox_new (FALSE, 10);
498   gtk_box_pack_start (GTK_BOX (vbox_L), hbox_gcin_font_size, FALSE, FALSE, 0);
499   GtkWidget *label_gcin_font_size = gtk_label_new(_(_L("字型大小")));
500   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size), label_gcin_font_size, FALSE, FALSE, 0);
501   GtkAdjustment *adj_gcin_font_size =
502    (GtkAdjustment *) gtk_adjustment_new (gcin_font_size, 8.0, 32.0, 1.0, 1.0, 0.0);
503   spinner_gcin_font_size = gtk_spin_button_new (adj_gcin_font_size, 0, 0);
504   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size), spinner_gcin_font_size, FALSE, FALSE, 0);
505 
506 
507   GtkWidget *hbox_gcin_font_size_symbol = gtk_hbox_new (FALSE, 10);
508   gtk_box_pack_start (GTK_BOX (vbox_L), hbox_gcin_font_size_symbol, FALSE, FALSE, 0);
509   GtkWidget *label_gcin_font_size_symbol = gtk_label_new(_(_L("符號選擇視窗字型大小")));
510   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size_symbol), label_gcin_font_size_symbol, FALSE, FALSE, 0);
511   GtkAdjustment *adj_gcin_font_size_symbol =
512    (GtkAdjustment *) gtk_adjustment_new (gcin_font_size_symbol, 8.0, 32.0, 1.0, 1.0, 0.0);
513   spinner_gcin_font_size_symbol = gtk_spin_button_new (adj_gcin_font_size_symbol, 0, 0);
514   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size_symbol), spinner_gcin_font_size_symbol, FALSE, FALSE, 0);
515 
516 
517   GtkWidget *hbox_gcin_font_size_tsin_presel = gtk_hbox_new (FALSE, 10);
518   gtk_box_pack_start (GTK_BOX (vbox_L), hbox_gcin_font_size_tsin_presel, FALSE, FALSE, 0);
519   GtkWidget *label_gcin_font_size_tsin_presel = gtk_label_new(_(_L("詞音&gtab預選詞視窗字型大小")));
520   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size_tsin_presel), label_gcin_font_size_tsin_presel, FALSE, FALSE, 0);
521   GtkAdjustment *adj_gcin_font_size_tsin_presel =
522    (GtkAdjustment *) gtk_adjustment_new (gcin_font_size_tsin_presel, 8.0, 32.0, 1.0, 1.0, 0.0);
523   spinner_gcin_font_size_tsin_presel = gtk_spin_button_new (adj_gcin_font_size_tsin_presel, 0, 0);
524   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size_tsin_presel), spinner_gcin_font_size_tsin_presel, FALSE, FALSE, 0);
525 
526 
527   GtkWidget *hbox_gcin_font_size_tsin_pho_in = gtk_hbox_new (FALSE, 10);
528   gtk_box_pack_start (GTK_BOX (vbox_L), hbox_gcin_font_size_tsin_pho_in, FALSE, FALSE, 0);
529   GtkWidget *label_gcin_font_size_tsin_pho_in = gtk_label_new(_(_L("詞音注音輸入區字型大小")));
530   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size_tsin_pho_in), label_gcin_font_size_tsin_pho_in, FALSE, FALSE, 0);
531   GtkAdjustment *adj_gcin_font_size_tsin_pho_in =
532    (GtkAdjustment *) gtk_adjustment_new (gcin_font_size_tsin_pho_in, 8.0, 32.0, 1.0, 1.0, 0.0);
533   spinner_gcin_font_size_tsin_pho_in = gtk_spin_button_new (adj_gcin_font_size_tsin_pho_in, 0, 0);
534   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size_tsin_pho_in), spinner_gcin_font_size_tsin_pho_in, FALSE, FALSE, 0);
535 
536 
537   GtkWidget *hbox_gcin_font_size_pho_near = gtk_hbox_new (FALSE, 10);
538   gtk_box_pack_start (GTK_BOX (vbox_L), hbox_gcin_font_size_pho_near, FALSE, FALSE, 0);
539   GtkWidget *label_gcin_font_size_pho_near = gtk_label_new(_(_L("詞音近似音顯示字型大小")));
540   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size_pho_near), label_gcin_font_size_pho_near, FALSE, FALSE, 0);
541   GtkAdjustment *adj_gcin_font_size_pho_near =
542    (GtkAdjustment *) gtk_adjustment_new (gcin_font_size_pho_near, 8.0, 32.0, 1.0, 1.0, 0.0);
543   spinner_gcin_font_size_pho_near = gtk_spin_button_new (adj_gcin_font_size_pho_near, 0, 0);
544   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size_pho_near), spinner_gcin_font_size_pho_near, FALSE, FALSE, 0);
545 
546 
547   GtkWidget *hbox_gcin_font_size_gtab_in = gtk_hbox_new (FALSE, 10);
548   gtk_box_pack_start (GTK_BOX (vbox_L), hbox_gcin_font_size_gtab_in, FALSE, FALSE, 0);
549   GtkWidget *label_gcin_font_size_gtab_in = gtk_label_new(_(_L("gtab(倉頡…)輸入區字型大小")));
550   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size_gtab_in), label_gcin_font_size_gtab_in, FALSE, FALSE, 0);
551   GtkAdjustment *adj_gcin_font_size_gtab_in =
552    (GtkAdjustment *) gtk_adjustment_new (gcin_font_size_gtab_in, 8.0, 32.0, 1.0, 1.0, 0.0);
553   spinner_gcin_font_size_gtab_in = gtk_spin_button_new (adj_gcin_font_size_gtab_in, 0, 0);
554   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size_gtab_in), spinner_gcin_font_size_gtab_in, FALSE, FALSE, 0);
555 
556   GtkWidget *hbox_gcin_font_size_win_kbm = gtk_hbox_new (FALSE, 10);
557   gtk_box_pack_start (GTK_BOX (vbox_L), hbox_gcin_font_size_win_kbm, FALSE, FALSE, 0);
558   GtkWidget *label_gcin_font_size_win_kbm = gtk_label_new(_(_L("小鍵盤字型大小")));
559   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size_win_kbm), label_gcin_font_size_win_kbm, FALSE, FALSE, 0);
560   GtkAdjustment *adj_gcin_font_size_win_kbm =
561    (GtkAdjustment *) gtk_adjustment_new (gcin_font_size_win_kbm, 8.0, 32.0, 1.0, 1.0, 0.0);
562   spinner_gcin_font_size_win_kbm = gtk_spin_button_new (adj_gcin_font_size_win_kbm, 0, 0);
563   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size_win_kbm), spinner_gcin_font_size_win_kbm, FALSE, FALSE, 0);
564   GtkWidget *label_gcin_font_size_win_kbm_en = gtk_label_new(_(_L("英數")));
565   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size_win_kbm), label_gcin_font_size_win_kbm_en, FALSE, FALSE, 0);
566   GtkAdjustment *adj_gcin_font_size_win_kbm_en =
567    (GtkAdjustment *) gtk_adjustment_new (gcin_font_size_win_kbm_en, 8.0, 32.0, 1.0, 1.0, 0.0);
568   spinner_gcin_font_size_win_kbm_en = gtk_spin_button_new (adj_gcin_font_size_win_kbm_en, 0, 0);
569   gtk_box_pack_start (GTK_BOX (hbox_gcin_font_size_win_kbm), spinner_gcin_font_size_win_kbm_en, FALSE, FALSE, 0);
570 
571 
572 #if GTK_CHECK_VERSION(2,4,0)
573   char tt[128];
574   sprintf(tt, "%s %d", gcin_font_name, gcin_font_size);
575   font_sel = gtk_font_button_new_with_font (tt);
576   gtk_box_pack_start (GTK_BOX (vbox_L), font_sel, FALSE, FALSE, 0);
577 #endif
578 
579   GtkWidget *hbox_gcin_pop_up_win = gtk_hbox_new (FALSE, 10);
580   gtk_box_pack_start (GTK_BOX(vbox_R), hbox_gcin_pop_up_win, FALSE, FALSE, 0);
581   GtkWidget *label_gcin_pop_up_win = gtk_label_new(_(_L("彈出式輸入視窗")));
582   gtk_box_pack_start (GTK_BOX(hbox_gcin_pop_up_win), label_gcin_pop_up_win, FALSE, FALSE, 0);
583   check_button_gcin_pop_up_win = gtk_check_button_new ();
584   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button_gcin_pop_up_win),
585        gcin_pop_up_win);
586   gtk_box_pack_start (GTK_BOX(hbox_gcin_pop_up_win), check_button_gcin_pop_up_win, FALSE, FALSE, 0);
587 
588   GtkWidget *frame_root_style = gtk_frame_new(_(_L("固定 gcin 視窗位置")));
589   gtk_box_pack_start (GTK_BOX (vbox_R), frame_root_style, FALSE, FALSE, 0);
590   gtk_container_set_border_width (GTK_CONTAINER (frame_root_style), 3);
591   GtkWidget *vbox_root_style = gtk_vbox_new (FALSE, 10);
592   gtk_container_add (GTK_CONTAINER (frame_root_style), vbox_root_style);
593 
594   GtkWidget *hbox_root_style = gtk_hbox_new (FALSE, 10);
595 
596 //  GtkWidget *hbox_root_style_use = gtk_hbox_new (FALSE, 10);
597 //  gtk_box_pack_start (GTK_BOX(vbox_root_style), hbox_root_style_use, FALSE, FALSE, 0);
598   GtkWidget *label_root_style_use = gtk_label_new(_(_L("使用")));
599   gtk_box_pack_start (GTK_BOX(hbox_root_style), label_root_style_use, FALSE, FALSE, 0);
600   check_button_root_style_use = gtk_check_button_new ();
601   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button_root_style_use),
602        gcin_input_style == InputStyleRoot);
603   gtk_box_pack_start (GTK_BOX(hbox_root_style), check_button_root_style_use, FALSE, FALSE, 0);
604 
605 
606   gtk_box_pack_start (GTK_BOX(vbox_root_style), hbox_root_style, FALSE, FALSE, 0);
607 
608   GtkAdjustment *adj_root_style_x =
609    (GtkAdjustment *) gtk_adjustment_new (gcin_root_x, 0.0, 5120.0, 1.0, 1.0, 0.0);
610   spinner_root_style_x = gtk_spin_button_new (adj_root_style_x, 0, 0);
611   gtk_widget_set_hexpand (spinner_root_style_x, TRUE);
612   gtk_container_add (GTK_CONTAINER (hbox_root_style), spinner_root_style_x);
613 
614   GtkAdjustment *adj_root_style_y =
615    (GtkAdjustment *) gtk_adjustment_new (gcin_root_y, 0.0, 2880.0, 1.0, 1.0, 0.0);
616   spinner_root_style_y = gtk_spin_button_new (adj_root_style_y, 0, 0);
617   gtk_widget_set_hexpand (spinner_root_style_y, TRUE);
618   gtk_container_add (GTK_CONTAINER (hbox_root_style), spinner_root_style_y);
619 
620 
621   gtk_box_pack_start (GTK_BOX(vbox_R), create_gcin_edit_display(), FALSE, FALSE, 0);
622 
623   GtkWidget *hbox_gcin_inner_frame = gtk_hbox_new (FALSE, 10);
624   gtk_box_pack_start (GTK_BOX(vbox_L), hbox_gcin_inner_frame, FALSE, FALSE, 0);
625   GtkWidget *label_gcin_inner_frame = gtk_label_new(_(_L("顯示邊框線")));
626   gtk_box_pack_start (GTK_BOX(hbox_gcin_inner_frame), label_gcin_inner_frame, FALSE, FALSE, 0);
627   check_button_gcin_inner_frame = gtk_check_button_new ();
628   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button_gcin_inner_frame),
629        gcin_inner_frame);
630   gtk_box_pack_start (GTK_BOX(hbox_gcin_inner_frame), check_button_gcin_inner_frame, FALSE, FALSE, 0);
631 
632 #if TRAY_ENABLED
633   GtkWidget *hbox_gcin_status_tray = gtk_hbox_new (FALSE, 0);
634   gtk_box_pack_start (GTK_BOX(vbox_R), hbox_gcin_status_tray, FALSE, FALSE, 0);
635 
636   GtkWidget *hbox_label_gcin_status_tray = gtk_hbox_new(FALSE, 0);
637   gtk_box_pack_start (GTK_BOX(hbox_gcin_status_tray), hbox_label_gcin_status_tray, FALSE, FALSE, 0);
638   GtkWidget *label_gcin_status_tray = gtk_label_new(_(_L("面板狀態(tray)")));
639   gtk_box_pack_start (GTK_BOX(hbox_label_gcin_status_tray), label_gcin_status_tray, FALSE, FALSE, 0);
640   check_button_gcin_status_tray = gtk_check_button_new ();
641   gtk_box_pack_start (GTK_BOX(hbox_label_gcin_status_tray), check_button_gcin_status_tray, FALSE, FALSE, 0);
642   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button_gcin_status_tray), gcin_status_tray);
643 
644 
645   GtkWidget *hbox_label_gcin_status_tray_windows_style = gtk_hbox_new(FALSE, 0);
646 #if UNIX
647 #if USE_INDICATOR
648   gtk_box_pack_start (GTK_BOX(hbox_gcin_status_tray), create_status_icon_opts(), FALSE, FALSE, 20);
649 #else
650   gtk_box_pack_start (GTK_BOX(hbox_gcin_status_tray), hbox_label_gcin_status_tray_windows_style, FALSE, FALSE, 20);
651   GtkWidget *label_gcin_status_tray_windows_style = gtk_label_new(_(_L("雙圖示")));
652   gtk_box_pack_start (GTK_BOX(hbox_label_gcin_status_tray_windows_style), label_gcin_status_tray_windows_style, FALSE, FALSE, 0);
653   check_button_gcin_win32_icon = gtk_check_button_new ();
654   gtk_box_pack_start (GTK_BOX(hbox_label_gcin_status_tray_windows_style), check_button_gcin_win32_icon, FALSE, FALSE, 0);
655   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button_gcin_win32_icon), gcin_win32_icon);
656 #endif
657 #else
658   gtk_box_pack_start (GTK_BOX(hbox_gcin_status_tray), hbox_label_gcin_status_tray_windows_style, FALSE, FALSE, 10);
659 #endif
660 
661   GtkWidget *hbox_label_gcin_tray_hf_win_kbm = gtk_hbox_new(FALSE, 0);
662   gtk_box_pack_start (GTK_BOX(hbox_gcin_status_tray), hbox_label_gcin_tray_hf_win_kbm, FALSE, FALSE, 0);
663   GtkWidget *label_gcin_tray_hf_win_kbm = gtk_label_new(_(_L("全半形左鍵\n切換小鍵盤")));
664   gtk_box_pack_start (GTK_BOX(hbox_label_gcin_tray_hf_win_kbm), label_gcin_tray_hf_win_kbm, FALSE, FALSE, 0);
665   check_button_gcin_tray_hf_win_kbm = gtk_check_button_new ();
666   gtk_box_pack_start (GTK_BOX(hbox_label_gcin_tray_hf_win_kbm), check_button_gcin_tray_hf_win_kbm, FALSE, FALSE, 0);
667   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button_gcin_tray_hf_win_kbm),
668        gcin_tray_hf_win_kbm);
669 
670   GtkWidget *hbox_gcin_status_win = gtk_hbox_new (FALSE, 0);
671   gtk_box_pack_start (GTK_BOX(vbox_R), hbox_gcin_status_win, FALSE, FALSE, 0);
672   GtkWidget *label_gcin_status_win = gtk_label_new(_(_L("狀態跳出顯示")));
673   gtk_box_pack_start (GTK_BOX(hbox_gcin_status_win), label_gcin_status_win, FALSE, FALSE, 0);
674   check_button_gcin_status_win = gtk_check_button_new ();
675   gtk_box_pack_start (GTK_BOX(hbox_gcin_status_win), check_button_gcin_status_win, FALSE, FALSE, 0);
676   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button_gcin_status_win), gcin_status_win);
677 #endif
678 
679   GtkWidget *frame_win_color = gtk_frame_new(_(_L("顏色選擇")));
680   gtk_box_pack_start (GTK_BOX (vbox_L), frame_win_color, FALSE, FALSE, 0);
681   gtk_container_set_border_width (GTK_CONTAINER (frame_win_color), 1);
682   GtkWidget *vbox_win_color = gtk_vbox_new (FALSE, 0);
683   gtk_container_add (GTK_CONTAINER (frame_win_color), vbox_win_color);
684 
685   GtkWidget *hbox_win_color_use = gtk_hbox_new (FALSE, 10);
686   gtk_box_pack_start (GTK_BOX(vbox_win_color), hbox_win_color_use, FALSE, FALSE, 0);
687   GtkWidget *label_win_color_use = gtk_label_new(_(_L("取代主題顏色")));
688   gtk_box_pack_start (GTK_BOX(hbox_win_color_use), label_win_color_use, FALSE, FALSE, 0);
689   check_button_gcin_win_color_use = gtk_check_button_new ();
690   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button_gcin_win_color_use),
691        gcin_win_color_use);
692 
693   g_signal_connect (G_OBJECT (check_button_gcin_win_color_use), "clicked",
694                     G_CALLBACK (cb_gcin_win_color_use), NULL);
695 
696   gtk_box_pack_start (GTK_BOX(hbox_win_color_use), check_button_gcin_win_color_use, FALSE, FALSE, 0);
697   event_box_win_color_test = gtk_event_box_new();
698 // this will make the color test failed
699 //  gtk_event_box_set_visible_window (GTK_EVENT_BOX(event_box_win_color_test), FALSE);
700   gtk_box_pack_start (GTK_BOX(vbox_win_color), event_box_win_color_test, FALSE, FALSE, 0);
701   label_win_color_test = gtk_label_new(NULL);
702   gtk_container_add (GTK_CONTAINER(event_box_win_color_test), label_win_color_test);
703   GtkWidget *hbox_win_color_fbg = gtk_hbox_new (FALSE, 10);
704   gtk_box_pack_start (GTK_BOX(vbox_win_color), hbox_win_color_fbg, FALSE, FALSE, 0);
705   GtkWidget *button_fg = gtk_button_new_with_label(_(_L("前景顏色")));
706   gtk_widget_set_hexpand (button_fg, TRUE);
707   gtk_widget_set_halign (button_fg, GTK_ALIGN_FILL);
708   gtk_box_pack_start (GTK_BOX(hbox_win_color_fbg), button_fg, TRUE, TRUE, 0);
709   g_signal_connect (G_OBJECT (button_fg), "clicked",
710                     G_CALLBACK (cb_gcin_win_color_fg), &colorsel[0]);
711   gdk_color_parse(gcin_win_color_fg, &gcin_win_gcolor_fg);
712   gdk_color_parse(gcin_win_color_bg, &gcin_win_gcolor_bg);
713 
714   GtkWidget *button_bg = gtk_button_new_with_label(_(_L("背景顏色")));
715   gtk_widget_set_hexpand (button_bg, TRUE);
716   gtk_widget_set_halign (button_bg, GTK_ALIGN_FILL);
717   gtk_box_pack_start (GTK_BOX(hbox_win_color_fbg), button_bg, TRUE, TRUE, 0);
718   g_signal_connect (G_OBJECT (button_bg), "clicked",
719                     G_CALLBACK (cb_gcin_win_color_fg), &colorsel[1]);
720 
721   GtkWidget *button_gcin_sel_key_color = gtk_button_new_with_label(_(_L("選擇鍵顏色")));
722   gtk_widget_set_hexpand (button_gcin_sel_key_color, TRUE);
723   gtk_widget_set_halign (button_gcin_sel_key_color, GTK_ALIGN_FILL);
724   g_signal_connect (G_OBJECT (button_gcin_sel_key_color), "clicked",
725                     G_CALLBACK (cb_gcin_sel_key_color), G_OBJECT (gcin_kbm_window));
726   gdk_color_parse(gcin_sel_key_color, &gcin_sel_key_gcolor);
727   gtk_container_add (GTK_CONTAINER (hbox_win_color_fbg), button_gcin_sel_key_color);
728 
729 
730   GtkWidget *frame_tsin_cursor_color = gtk_frame_new(_(_L("游標的顏色")));
731   gtk_box_pack_start (GTK_BOX (vbox_L), frame_tsin_cursor_color, FALSE, FALSE, 0);
732   gtk_container_set_border_width (GTK_CONTAINER (frame_tsin_cursor_color), 1);
733   GtkWidget *button_tsin_cursor_color = gtk_button_new();
734   g_signal_connect (G_OBJECT (button_tsin_cursor_color), "clicked",
735                     G_CALLBACK (cb_tsin_cursor_color), G_OBJECT (gcin_kbm_window));
736   label_cursor =  gtk_label_new("標");
737   GdkColor color;
738   gdk_color_parse ("#ffffff", &color);
739   gtk_widget_modify_fg(label_cursor, GTK_STATE_NORMAL, &color);
740   gtk_container_add (GTK_CONTAINER (button_tsin_cursor_color), label_cursor);
741   gdk_color_parse(tsin_cursor_color, &tsin_cursor_gcolor);
742   gtk_widget_modify_bg(label_cursor, GTK_STATE_NORMAL, &tsin_cursor_gcolor);
743   gtk_container_add (GTK_CONTAINER (frame_tsin_cursor_color), button_tsin_cursor_color);
744 
745   disp_fg_bg_color();
746 
747   GtkWidget *hbox_cancel_ok = gtk_hbox_new (FALSE, 10);
748 //  gtk_grid_set_column_homogeneous(GTK_GRID(hbox_cancel_ok), TRUE);
749   gtk_box_pack_start (GTK_BOX (vbox_top), hbox_cancel_ok, FALSE, FALSE, 0);
750 
751   GtkWidget *button_cancel = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
752   if (button_order)
753     gtk_box_pack_end (GTK_BOX (hbox_cancel_ok), button_cancel, TRUE, TRUE, 0);
754   else
755     gtk_box_pack_start (GTK_BOX (hbox_cancel_ok), button_cancel, TRUE, TRUE, 0);
756 
757   g_signal_connect (G_OBJECT (button_cancel), "clicked",
758                             G_CALLBACK (close_appearance_conf_window),
759                             G_OBJECT (gcin_appearance_conf_window));
760 
761   GtkWidget *button_close = gtk_button_new_from_stock (GTK_STOCK_OK);
762 
763   if (button_order)
764     gtk_box_pack_end (GTK_BOX (hbox_cancel_ok), button_close, TRUE, TRUE, 0);
765   else
766     gtk_box_pack_start (GTK_BOX (hbox_cancel_ok), button_close, TRUE, TRUE, 0);
767 
768   g_signal_connect_swapped (G_OBJECT (button_close), "clicked",
769                             G_CALLBACK (cb_appearance_conf_ok),
770                             G_OBJECT (gcin_kbm_window));
771 
772   GTK_WIDGET_SET_FLAGS (button_close, GTK_CAN_DEFAULT);
773   gtk_widget_grab_default (button_close);
774 
775   GtkWidget *button_help = gtk_button_new_from_stock (GTK_STOCK_HELP);
776   gtk_box_pack_end (GTK_BOX (hbox_cancel_ok), button_help, FALSE, FALSE, 0);
777 
778   g_signal_connect (G_OBJECT (button_help), "clicked",
779                             G_CALLBACK (cb_appearance_help),
780                             G_OBJECT (gcin_appearance_conf_window));
781 
782   gtk_widget_show_all (gcin_appearance_conf_window);
783 
784   return;
785 }
786