X-Git-Url: http://git.chise.org/gitweb/?p=m17n%2Fm17n-im-config.git;a=blobdiff_plain;f=src%2Fmain.c;h=3c1f622a7ed959fdb775c905d21cb53014761788;hp=498d651b63898abc40196415c675f49a091b2642;hb=HEAD;hpb=958c782e41408abd35fa3e1eedc5557dea780781 diff --git a/src/main.c b/src/main.c index 498d651..3c1f622 100644 --- a/src/main.c +++ b/src/main.c @@ -28,12 +28,14 @@ #include #include -/* Argument to callback functions. */ +/* Common argument to all callback functions. */ -struct ConfigSaveRevert +struct CallbackArgument { - /* IM configuration widget created by mim_config_widget (). */ + /* IM configuration widget created by mim_config_new (). */ GtkWidget *config; + /* Button widget "default" */ + GtkWidget *default_; /* Button widget "revert" */ GtkWidget *revert; /* Button widget "save" */ @@ -41,55 +43,68 @@ struct ConfigSaveRevert }; -/* Called when the status of configuration (modified or not) is - changed. */ +/* Called when the status of configuration is changed. */ void -status_changed_cb (gboolean modified, gpointer data) +status_changed_cb (GtkWidget *config, gpointer data) { - struct ConfigSaveRevert *config_save_revert = data; + struct CallbackArgument *arg = data; + gboolean modified = mim_config_modified (config); - if (GTK_WIDGET_SENSITIVE (config_save_revert->save)) + if (GTK_WIDGET_SENSITIVE (arg->save)) { if (! modified) { - gtk_widget_set_sensitive (config_save_revert->revert, FALSE); - gtk_widget_set_sensitive (config_save_revert->save, FALSE); + gtk_widget_set_sensitive (arg->revert, FALSE); + gtk_widget_set_sensitive (arg->save, FALSE); } } else { if (modified) { - gtk_widget_set_sensitive (config_save_revert->revert, TRUE); - gtk_widget_set_sensitive (config_save_revert->save, TRUE); + gtk_widget_set_sensitive (arg->revert, TRUE); + gtk_widget_set_sensitive (arg->save, TRUE); } } } +/* Called when "default" button is clicked. */ +static void +default_clicked_cb (GtkButton *button, gpointer data) +{ + struct CallbackArgument *arg = data; + + mim_config_default (arg->config); + status_changed_cb (arg->config, data); +} + +/* Called when "revert" button is clicked. */ static void revert_clicked_cb (GtkButton *button, gpointer data) { - struct ConfigSaveRevert *config_save_revert = data; + struct CallbackArgument *arg = data; - mim_config_revert (config_save_revert->config); - status_changed_cb (FALSE, data); + mim_config_revert (arg->config); + status_changed_cb (arg->config, data); } +/* Called when "save" button is clicked. */ static void save_clicked_cb (GtkButton *button, gpointer data) { - struct ConfigSaveRevert *config_save_revert = data; + struct CallbackArgument *arg = data; - mim_config_save (config_save_revert->config); - status_changed_cb (FALSE, data); + mim_config_save (arg->config); + status_changed_cb (arg->config, data); } +/* Called when "quit" button is clicked. */ static void quit_clicked_cb (GtkButton *button, gpointer data) { - struct ConfigSaveRevert *config_save_revert = data; + struct CallbackArgument *arg = data; - if (mim_config_modified (config_save_revert->config)) + if (mim_config_modified (arg->config)) { GtkWidget *dialog, *label; gint response; @@ -110,40 +125,36 @@ quit_clicked_cb (GtkButton *button, gpointer data) if (response == GTK_RESPONSE_CANCEL) return; if (response == GTK_RESPONSE_YES) - mim_config_save (config_save_revert->config); + mim_config_save (arg->config); } + gtk_widget_destroy (arg->config); gtk_main_quit (); } - +/* Called when "ok" button is clicked. */ static void ok_clicked_cb (GtkButton *button, gpointer data) { - struct ConfigSaveRevert *config_save_revert = data; + struct CallbackArgument *arg = data; - if (mim_config_modified (config_save_revert->config)) - mim_config_save (config_save_revert->config); + if (mim_config_modified (arg->config)) + mim_config_save (arg->config); + gtk_widget_destroy (arg->config); gtk_main_quit (); } int main (int argc, char **argv) { - GtkWidget *window, *vbox, *config, *hbox; - GtkWidget *revert, *save, *ok, *quit; - struct ConfigSaveRevert config_save_revert; - MimConfigCallback callback; + GtkWidget *window, *vbox, *hbox; + GtkWidget *default_, *revert, *save, *ok, *quit; + struct CallbackArgument arg; #if ENABLE_NLS bindtextdomain ("m17n-im-config", GETTEXTDIR); bind_textdomain_codeset ("m17n-im-config", "UTF-8"); #endif gtk_init (&argc, &argv); - if (mim_config_init () < 0) - { - g_print ("m17n-im-config initialization error\n"); - exit (1); - } window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request (window, 500, 300); @@ -161,16 +172,18 @@ main (int argc, char **argv) || || |+-------------------------------------+| |+-hbox--------------------------------+| - || +------+ +-----++----+ +--+|| - || |revert| |save| |quit| |ok||| - || +------+ +-----++----+ +--+|| + ||+-------+ +------+ +----+ +----+ +--+|| + |||default| |revert| |save| |quit| |ok||| + ||+-------+ +------+ +----+ +----+ +--+|| |+-------------------------------------+| +---------------------------------------+ */ - vbox = gtk_vbox_new (FALSE, 0); + vbox = gtk_vbox_new (FALSE, 12); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); gtk_container_add (GTK_CONTAINER (window), vbox); + default_ = gtk_button_new_from_stock (_("_Default")); revert = gtk_button_new_from_stock (GTK_STOCK_REVERT_TO_SAVED); gtk_widget_set_sensitive (revert, FALSE); save = gtk_button_new_from_stock (GTK_STOCK_SAVE); @@ -178,26 +191,26 @@ main (int argc, char **argv) quit = gtk_button_new_from_stock (GTK_STOCK_QUIT); ok = gtk_button_new_from_stock (GTK_STOCK_OK); - config_save_revert.revert = revert; - config_save_revert.save = save; - callback.func = status_changed_cb; - callback.arg = &config_save_revert; - config = mim_config_widget (&callback); - config_save_revert.config = config; - gtk_box_pack_start (GTK_BOX (vbox), config, TRUE, TRUE, 0); + arg.revert = revert; + arg.save = save; + arg.config = mim_config_new (G_CALLBACK (status_changed_cb), &arg); + gtk_box_pack_start (GTK_BOX (vbox), arg.config, TRUE, TRUE, 0); + g_signal_connect (G_OBJECT (default_), "clicked", + G_CALLBACK (default_clicked_cb), &arg); g_signal_connect (G_OBJECT (revert), "clicked", - G_CALLBACK (revert_clicked_cb), &config_save_revert); + G_CALLBACK (revert_clicked_cb), &arg); g_signal_connect (G_OBJECT (save), "clicked", - G_CALLBACK (save_clicked_cb), &config_save_revert); + G_CALLBACK (save_clicked_cb), &arg); g_signal_connect (G_OBJECT (quit), "clicked", - G_CALLBACK (quit_clicked_cb), &config_save_revert); + G_CALLBACK (quit_clicked_cb), &arg); g_signal_connect (G_OBJECT (ok), "clicked", - G_CALLBACK (ok_clicked_cb), &config_save_revert); + G_CALLBACK (ok_clicked_cb), &arg); hbox = gtk_hbutton_box_new (); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_END); gtk_box_set_spacing (GTK_BOX (hbox), 5); + gtk_container_add (GTK_CONTAINER (hbox), default_); gtk_container_add (GTK_CONTAINER (hbox), revert); gtk_container_add (GTK_CONTAINER (hbox), save); gtk_container_add (GTK_CONTAINER (hbox), quit); @@ -206,7 +219,6 @@ main (int argc, char **argv) gtk_widget_show_all (window); gtk_main (); - mim_config_fini (); return 0; }