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("詞音>ab預選詞視窗字型大小")));
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