2 * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
3 * Copyright (c) 2009 Roman Moravcik <roman.moravcik@gmail.com>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24 #include <hildon-cp-plugin/hildon-cp-plugin-interface.h>
25 #include <gconf/gconf.h>
26 #include <gconf/gconf-client.h>
34 #define GETTEXT_PACKAGE "osso-applet-textinput"
36 #include <hildon/hildon.h>
37 #include <glib/gi18n-lib.h>
40 static init_func inits[] = { prefs_hw_init, prefs_onscreen_init, prefs_lang_init, prefs_about_init };
41 #define PLUGINS (sizeof(inits) / sizeof(init_func))
42 static struct prefs prefs[PLUGINS];
44 gboolean internal_kbd;
46 #define IM_CONF_DIR "/apps/osso/inputmethod"
48 gboolean get_bool(GConfClient *client, char *key)
50 char *tmp = g_strjoin("/", IM_CONF_DIR, key, NULL);
53 res = gconf_client_get_bool(client, tmp, NULL);
58 void set_bool(GConfClient *client, char *key, gboolean val)
60 char *tmp = g_strjoin("/", IM_CONF_DIR, key, NULL);
62 gconf_client_set_bool(client, tmp, val, NULL);
66 gint get_int(GConfClient *client, char *key)
68 char *tmp = g_strjoin("/", IM_CONF_DIR, key, NULL);
71 res = gconf_client_get_int(client, tmp, NULL);
76 void set_int(GConfClient *client, char *key, gint val)
78 char *tmp = g_strjoin("/", IM_CONF_DIR, key, NULL);
80 gconf_client_set_int(client, tmp, val, NULL);
84 gchar *get_str(GConfClient *client, char *key)
86 char *tmp = g_strjoin("/", IM_CONF_DIR, key, NULL);
89 res = gconf_client_get_string(client, tmp, NULL);
94 void set_str(GConfClient *client, char *key, gchar *val)
96 char *tmp = g_strjoin("/", IM_CONF_DIR, key, NULL);
98 gconf_client_set_string(client, tmp, val, NULL);
102 static GConfClient *init_conf(void)
106 client = gconf_client_get_default();
109 gconf_client_add_dir(client, IM_CONF_DIR, GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
110 internal_kbd = get_bool(client, "have-internal-keyboard");
114 static void deinit_conf(GConfClient *client)
116 g_object_unref(G_OBJECT(client));
120 osso_return_t execute(osso_context_t *osso, gpointer data, gboolean user_activated)
123 GtkDialog *dialog, *about;
124 GtkWidget *scroll, *widget, *vbox;
126 void *plugin_data[PLUGINS];
130 (void)osso; (void)user_activated; /* shut up, GCC */
136 for (i = 0; i < PLUGINS; i++) {
140 dialog = GTK_DIALOG(gtk_dialog_new());
145 gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(data));
147 title = g_strdup_printf("%s (ukeyboard)", _("tein_ti_text_input_title"));
148 gtk_window_set_title(GTK_WINDOW(dialog), title);
152 gtk_dialog_add_button(GTK_DIALOG(dialog), _HL("ecdg_ti_aboutdialog_title"), GTK_RESPONSE_HELP);
153 gtk_dialog_add_button(GTK_DIALOG(dialog), _HL("wdgt_bd_save"), GTK_RESPONSE_ACCEPT);
155 scroll = hildon_pannable_area_new();
156 gtk_widget_set_size_request(GTK_WIDGET (scroll), -1, 345);
157 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), scroll);
159 vbox = gtk_vbox_new(FALSE, 0);
160 hildon_pannable_area_add_with_viewport (HILDON_PANNABLE_AREA(scroll), vbox);
162 gtk_widget_show_all(GTK_WIDGET(dialog));
164 for (i = 0; i < PLUGINS - 1; i++) {
165 widget = prefs[i].start(conf, GTK_WIDGET(dialog), &plugin_data[i]);
167 gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, TRUE, 0);
170 while ((res = gtk_dialog_run(GTK_DIALOG(dialog))) == GTK_RESPONSE_HELP) {
171 about = GTK_DIALOG(gtk_dialog_new());
172 gtk_window_set_title(GTK_WINDOW(about), _HL("ecdg_ti_aboutdialog_title"));
173 gtk_widget_set_size_request (GTK_WIDGET (about), -1, 300);
175 widget = prefs[3].start(conf, GTK_WIDGET(about), &plugin_data[3]);
176 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(about)->vbox), widget);
178 gtk_widget_show_all(GTK_WIDGET(about));
179 gtk_dialog_run(GTK_DIALOG(about));
180 gtk_widget_destroy(GTK_WIDGET(about));
183 if (res == GTK_RESPONSE_ACCEPT) {
184 for (i = 0; i < PLUGINS; i++)
186 prefs[i].action(conf, plugin_data[i]);
188 gtk_widget_destroy(GTK_WIDGET(dialog));
190 for (i = 0; i < PLUGINS; i++)
192 prefs[i].stop(conf, plugin_data[i]);
198 osso_return_t execute(osso_context_t *osso, gpointer data, gboolean user_activated)
202 GtkWidget *widget, *notebook;
203 void *plugin_data[PLUGINS];
207 (void)osso; (void)user_activated; /* shut up, GCC */
213 for (i = 0; i < PLUGINS; i++) {
217 dialog = GTK_DIALOG(gtk_dialog_new());
222 gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(data));
223 gtk_window_set_title(GTK_WINDOW(dialog), "Text input (ukeyboard)");
224 gtk_dialog_set_has_separator(dialog, FALSE);
225 gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
227 gtk_dialog_add_action_widget(dialog, gtk_button_new_with_label("OK"), GTK_RESPONSE_ACCEPT);
228 gtk_dialog_add_action_widget(dialog, gtk_button_new_with_label("Cancel"), GTK_RESPONSE_REJECT);
229 notebook = gtk_notebook_new();
230 for (i = 0; i < PLUGINS; i++) {
231 widget = prefs[i].start(conf, GTK_WIDGET(dialog), &plugin_data[i]);
233 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), widget, gtk_label_new(prefs[i].name));
236 gtk_container_add(GTK_CONTAINER(dialog->vbox), notebook);
237 gtk_widget_show_all(GTK_WIDGET(dialog));
238 res = gtk_dialog_run(dialog);
239 if (res == GTK_RESPONSE_ACCEPT) {
240 for (i = 0; i < PLUGINS; i++)
242 prefs[i].action(conf, plugin_data[i]);
244 gtk_widget_destroy(GTK_WIDGET(dialog));
246 for (i = 0; i < PLUGINS; i++)
248 prefs[i].stop(conf, plugin_data[i]);