4 #define _(String) gettext (String)
6 #include <m17n-im-config.h>
8 struct ConfigSaveRevert
10 GtkWidget *config, *save, *revert;
14 status_changed_cb (gboolean modified, gpointer data)
16 struct ConfigSaveRevert *config_save_revert = data;
18 if (GTK_WIDGET_SENSITIVE (config_save_revert->save))
22 gtk_widget_set_sensitive (config_save_revert->save, FALSE);
23 gtk_widget_set_sensitive (config_save_revert->revert, FALSE);
30 gtk_widget_set_sensitive (config_save_revert->save, TRUE);
31 gtk_widget_set_sensitive (config_save_revert->revert, TRUE);
37 delete (GtkWidget *widget, GdkEvent *event, gpointer data)
45 revert_clicked_cb (GtkButton *button, gpointer data)
47 struct ConfigSaveRevert *config_save_revert = data;
49 mim_config_revert (config_save_revert->config);
50 status_changed_cb (FALSE, data);
54 save_clicked_cb (GtkButton *button, gpointer data)
56 struct ConfigSaveRevert *config_save_revert = data;
58 mim_config_save (config_save_revert->config);
59 status_changed_cb (FALSE, data);
63 quit_clicked_cb (GtkButton *button, gpointer data)
65 struct ConfigSaveRevert *config_save_revert = data;
67 if (mim_config_modified (config_save_revert->config))
69 GtkWidget *dialog, *label;
72 dialog = (gtk_dialog_new_with_buttons
74 GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (button))),
75 GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
76 GTK_STOCK_NO, GTK_RESPONSE_NO,
77 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
78 GTK_STOCK_SAVE, GTK_RESPONSE_YES,
80 label = gtk_label_new (_("Save configuration?"));
81 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), label);
82 gtk_widget_show_all (dialog);
83 response = gtk_dialog_run (GTK_DIALOG (dialog));
84 gtk_widget_destroy (dialog);
85 if (response == GTK_RESPONSE_CANCEL)
87 if (response == GTK_RESPONSE_YES)
88 mim_config_save (config_save_revert->config);
95 ok_clicked_cb (GtkButton *button, gpointer data)
97 struct ConfigSaveRevert *config_save_revert = data;
99 if (mim_config_modified (config_save_revert->config))
100 mim_config_save (config_save_revert->config);
105 main (int argc, char **argv)
107 GtkWidget *window, *vbox, *config, *hbox;
108 GtkWidget *revert, *save, *ok, *quit;
109 struct ConfigSaveRevert config_save_revert;
110 MimConfigCallback callback;
113 bindtextdomain ("m17n-im-config", GETTEXTDIR);
114 bind_textdomain_codeset ("m17n-im-config", "UTF-8");
116 gtk_init (&argc, &argv);
117 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
118 gtk_widget_set_size_request (window, 400, 300);
119 gtk_window_set_title (GTK_WINDOW (window), _("M17N-IM Configuration"));
120 g_signal_connect (G_OBJECT (window), "delete_event",
121 G_CALLBACK (delete), NULL);
123 /* We create these widgets:
124 +-vbox----------------------------------+
125 |+-config------------------------------+|
128 || M17N-IM Configuration ||
131 |+-------------------------------------+|
132 |+-hbox--------------------------------+|
133 || +------+ +-----++----+ +--+||
134 || |revert| |save| |quit| |ok|||
135 || +------+ +-----++----+ +--+||
136 |+-------------------------------------+|
137 +---------------------------------------+
140 vbox = gtk_vbox_new (FALSE, 10);
141 gtk_container_add (GTK_CONTAINER (window), vbox);
143 revert = gtk_button_new_from_stock (GTK_STOCK_REVERT_TO_SAVED);
144 gtk_widget_set_sensitive (revert, FALSE);
145 save = gtk_button_new_from_stock (GTK_STOCK_SAVE);
146 gtk_widget_set_sensitive (save, FALSE);
147 quit = gtk_button_new_from_stock (GTK_STOCK_QUIT);
148 ok = gtk_button_new_from_stock (GTK_STOCK_OK);
150 config_save_revert.save = save;
151 config_save_revert.revert = revert;
152 callback.func = status_changed_cb;
153 callback.arg = &config_save_revert;
154 config = mim_config_widget (&callback);
155 config_save_revert.config = config;
156 gtk_box_pack_start (GTK_BOX (vbox), config, TRUE, TRUE, 0);
158 g_signal_connect (G_OBJECT (revert), "clicked",
159 G_CALLBACK (revert_clicked_cb), &config_save_revert);
160 g_signal_connect (G_OBJECT (save), "clicked",
161 G_CALLBACK (save_clicked_cb), &config_save_revert);
162 g_signal_connect (G_OBJECT (quit), "clicked",
163 G_CALLBACK (quit_clicked_cb), &config_save_revert);
164 g_signal_connect (G_OBJECT (ok), "clicked",
165 G_CALLBACK (ok_clicked_cb), &config_save_revert);
167 hbox = gtk_hbutton_box_new ();
168 gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_END);
169 gtk_box_set_spacing (GTK_BOX (hbox), 10);
170 gtk_container_add (GTK_CONTAINER (hbox), revert);
171 gtk_container_add (GTK_CONTAINER (hbox), save);
172 gtk_container_add (GTK_CONTAINER (hbox), quit);
173 gtk_container_add (GTK_CONTAINER (hbox), ok);
174 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
176 gtk_widget_show_all (window);