Created fork of mafw-gst-renderer with subtitles support
[mafwsubrenderer] / applet / cpmpsubtitles.c
1 /*
2  *  Subtitles control panel applet.
3  *  Copyright (C) 2010 Roman Moravcik
4  *
5  * encodings structure imported from totem-subtitle-encoding.c
6  * Copyright (C) 2001-2006 Bastien Nocera <hadess@hadess.net>
7  *
8  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2 of the License, or
11  *  (at your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with this program; if not, write to the Free Software
20  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  */
22
23 #include <glib.h>
24
25 #include <gtk/gtk.h>
26 #include <hildon/hildon.h>
27 #include <hildon-cp-plugin/hildon-cp-plugin-interface.h>
28
29 #include <gconf/gconf-client.h>
30
31
32 #define GETTEXT_PACKAGE "osso-applet-subtitles"
33 #include <glib/gi18n-lib.h>
34
35 #define GCONF_MAFW_GST_SUBTITLE_RENDERER "/system/mafw/mafw-gst-renderer"
36 #define _HL(str) dgettext("hildon-libs",str)
37
38 typedef enum
39 {
40         SUBTITLE_ENCODING_CURRENT_LOCALE,
41
42         SUBTITLE_ENCODING_ISO_8859_6,
43         SUBTITLE_ENCODING_IBM_864,
44         SUBTITLE_ENCODING_MAC_ARABIC,
45         SUBTITLE_ENCODING_WINDOWS_1256,
46
47         SUBTITLE_ENCODING_ARMSCII_8,
48
49         SUBTITLE_ENCODING_ISO_8859_4,
50         SUBTITLE_ENCODING_ISO_8859_13,
51         SUBTITLE_ENCODING_WINDOWS_1257,
52
53         SUBTITLE_ENCODING_ISO_8859_14,
54
55         SUBTITLE_ENCODING_ISO_8859_2,
56         SUBTITLE_ENCODING_IBM_852,
57         SUBTITLE_ENCODING_MAC_CE,
58         SUBTITLE_ENCODING_WINDOWS_1250,
59
60         SUBTITLE_ENCODING_GB18030,
61         SUBTITLE_ENCODING_GB2312,
62         SUBTITLE_ENCODING_GBK,
63         SUBTITLE_ENCODING_HZ,
64
65         SUBTITLE_ENCODING_BIG5,
66         SUBTITLE_ENCODING_BIG5_HKSCS,
67         SUBTITLE_ENCODING_EUC_TW,
68
69         SUBTITLE_ENCODING_MAC_CROATIAN,
70
71         SUBTITLE_ENCODING_ISO_8859_5,
72         SUBTITLE_ENCODING_IBM_855,
73         SUBTITLE_ENCODING_ISO_IR_111,
74         SUBTITLE_ENCODING_KOI8_R,
75         SUBTITLE_ENCODING_MAC_CYRILLIC,
76         SUBTITLE_ENCODING_WINDOWS_1251,
77
78         SUBTITLE_ENCODING_CP_866,
79
80         SUBTITLE_ENCODING_MAC_UKRAINIAN,
81         SUBTITLE_ENCODING_KOI8_U,
82
83         SUBTITLE_ENCODING_GEOSTD8,
84
85         SUBTITLE_ENCODING_ISO_8859_7,
86         SUBTITLE_ENCODING_MAC_GREEK,
87         SUBTITLE_ENCODING_WINDOWS_1253,
88
89         SUBTITLE_ENCODING_MAC_GUJARATI,
90
91         SUBTITLE_ENCODING_MAC_GURMUKHI,
92
93         SUBTITLE_ENCODING_ISO_8859_8_I,
94         SUBTITLE_ENCODING_IBM_862,
95         SUBTITLE_ENCODING_MAC_HEBREW,
96         SUBTITLE_ENCODING_WINDOWS_1255,
97
98         SUBTITLE_ENCODING_ISO_8859_8,
99
100         SUBTITLE_ENCODING_MAC_DEVANAGARI,
101
102         SUBTITLE_ENCODING_MAC_ICELANDIC,
103
104         SUBTITLE_ENCODING_EUC_JP,
105         SUBTITLE_ENCODING_ISO_2022_JP,
106         SUBTITLE_ENCODING_SHIFT_JIS,
107
108         SUBTITLE_ENCODING_EUC_KR,
109         SUBTITLE_ENCODING_ISO_2022_KR,
110         SUBTITLE_ENCODING_JOHAB,
111         SUBTITLE_ENCODING_UHC,
112
113         SUBTITLE_ENCODING_ISO_8859_10,
114
115         SUBTITLE_ENCODING_MAC_FARSI,
116
117         SUBTITLE_ENCODING_ISO_8859_16,
118         SUBTITLE_ENCODING_MAC_ROMANIAN,
119
120         SUBTITLE_ENCODING_ISO_8859_3,
121
122         SUBTITLE_ENCODING_TIS_620,
123
124         SUBTITLE_ENCODING_ISO_8859_9,
125         SUBTITLE_ENCODING_IBM_857,
126         SUBTITLE_ENCODING_MAC_TURKISH,
127         SUBTITLE_ENCODING_WINDOWS_1254,
128
129         SUBTITLE_ENCODING_UTF_7,
130         SUBTITLE_ENCODING_UTF_8,
131         SUBTITLE_ENCODING_UTF_16,
132         SUBTITLE_ENCODING_UCS_2,
133         SUBTITLE_ENCODING_UCS_4,
134
135         SUBTITLE_ENCODING_ISO_8859_1,
136         SUBTITLE_ENCODING_ISO_8859_15,
137         SUBTITLE_ENCODING_IBM_850,
138         SUBTITLE_ENCODING_MAC_ROMAN,
139         SUBTITLE_ENCODING_WINDOWS_1252,
140
141         SUBTITLE_ENCODING_TCVN,
142         SUBTITLE_ENCODING_VISCII,
143         SUBTITLE_ENCODING_WINDOWS_1258,
144
145         SUBTITLE_ENCODING_LAST
146 } SubtitleEncodingIndex;
147
148
149 typedef struct {
150         int index;
151         const char *charset;
152         const char *name;
153 } SubtitleEncoding;
154
155
156 static SubtitleEncoding encodings[] = {
157         {SUBTITLE_ENCODING_CURRENT_LOCALE,      NULL,                   "Current Locale"},
158
159         {SUBTITLE_ENCODING_ISO_8859_6,          "ISO-8859-6",           "Arabic"},
160         {SUBTITLE_ENCODING_IBM_864,             "IBM864",               "Arabic"},
161         {SUBTITLE_ENCODING_MAC_ARABIC,          "MAC_ARABIC",           "Arabic"},
162         {SUBTITLE_ENCODING_WINDOWS_1256,        "WINDOWS-1256",         "Arabic"},
163
164         {SUBTITLE_ENCODING_ARMSCII_8,           "ARMSCII-8",            "Armenian"},
165
166         {SUBTITLE_ENCODING_ISO_8859_4,          "ISO-8859-4",           "Baltic"},
167         {SUBTITLE_ENCODING_ISO_8859_13,         "ISO-8859-13",          "Baltic"},
168         {SUBTITLE_ENCODING_WINDOWS_1257,        "WINDOWS-1257",         "Baltic"},
169
170         {SUBTITLE_ENCODING_ISO_8859_14,         "ISO-8859-14",          "Celtic"},
171
172         {SUBTITLE_ENCODING_ISO_8859_2,          "ISO-8859-2",           "Central European"},
173         {SUBTITLE_ENCODING_IBM_852,             "IBM852",               "Central European"},
174         {SUBTITLE_ENCODING_MAC_CE,              "MAC_CE",               "Central European"},
175         {SUBTITLE_ENCODING_WINDOWS_1250,        "WINDOWS-1250",         "Central European"},
176
177         {SUBTITLE_ENCODING_GB18030,             "GB18030",              "Chinese Simplified"},
178         {SUBTITLE_ENCODING_GB2312,              "GB2312",               "Chinese Simplified"},
179         {SUBTITLE_ENCODING_GBK,                 "GBK",                  "Chinese Simplified"},
180         {SUBTITLE_ENCODING_HZ,                  "HZ",                   "Chinese Simplified"},
181
182         {SUBTITLE_ENCODING_BIG5,                "BIG5",                 "Chinese Traditional"},
183         {SUBTITLE_ENCODING_BIG5_HKSCS,          "BIG5-HKSCS",           "Chinese Traditional"},
184         {SUBTITLE_ENCODING_EUC_TW,              "EUC-TW",               "Chinese Traditional"},
185
186         {SUBTITLE_ENCODING_MAC_CROATIAN,        "MAC_CROATIAN",         "Croatian"},
187
188         {SUBTITLE_ENCODING_ISO_8859_5,          "ISO-8859-5",           "Cyrillic"},
189         {SUBTITLE_ENCODING_IBM_855,             "IBM855",               "Cyrillic"},
190         {SUBTITLE_ENCODING_ISO_IR_111,          "ISO-IR-111",           "Cyrillic"},
191         {SUBTITLE_ENCODING_KOI8_R,              "KOI8-R",               "Cyrillic"},
192         {SUBTITLE_ENCODING_MAC_CYRILLIC,        "MAC-CYRILLIC",         "Cyrillic"},
193         {SUBTITLE_ENCODING_WINDOWS_1251,        "WINDOWS-1251",         "Cyrillic"},
194
195         {SUBTITLE_ENCODING_CP_866,              "CP866",                "Cyrillic/Russian"},
196
197         {SUBTITLE_ENCODING_MAC_UKRAINIAN,       "MAC_UKRAINIAN",        "Cyrillic/Ukrainian"},
198         {SUBTITLE_ENCODING_KOI8_U,              "KOI8-U",               "Cyrillic/Ukrainian"},
199
200         {SUBTITLE_ENCODING_GEOSTD8,             "GEORGIAN-PS",          "Georgian"},
201
202         {SUBTITLE_ENCODING_ISO_8859_7,          "ISO-8859-7",           "Greek"},
203         {SUBTITLE_ENCODING_MAC_GREEK,           "MAC_GREEK",            "Greek"},
204         {SUBTITLE_ENCODING_WINDOWS_1253,        "WINDOWS-1253",         "Greek"},
205
206         {SUBTITLE_ENCODING_MAC_GUJARATI,        "MAC_GUJARATI",         "Gujarati"},
207
208         {SUBTITLE_ENCODING_MAC_GURMUKHI,        "MAC_GURMUKHI",         "Gurmukhi"},
209
210         {SUBTITLE_ENCODING_ISO_8859_8_I,        "ISO-8859-8-I",         "Hebrew"},
211         {SUBTITLE_ENCODING_IBM_862,             "IBM862",               "Hebrew"},
212         {SUBTITLE_ENCODING_MAC_HEBREW,          "MAC_HEBREW",           "Hebrew"},
213         {SUBTITLE_ENCODING_WINDOWS_1255,        "WINDOWS-1255",         "Hebrew"},
214
215         {SUBTITLE_ENCODING_ISO_8859_8,          "ISO-8859-8",           "Hebrew Visual"},
216
217         {SUBTITLE_ENCODING_MAC_DEVANAGARI,      "MAC_DEVANAGARI",       "Hindi"},
218
219         {SUBTITLE_ENCODING_MAC_ICELANDIC,       "MAC_ICELANDIC",        "Icelandic"},
220
221         {SUBTITLE_ENCODING_EUC_JP,              "EUC-JP",               "Japanese"},
222         {SUBTITLE_ENCODING_ISO_2022_JP,         "ISO2022JP",            "Japanese"},
223         {SUBTITLE_ENCODING_SHIFT_JIS,           "SHIFT-JIS",            "Japanese"},
224
225         {SUBTITLE_ENCODING_EUC_KR,              "EUC-KR",               "Korean"},
226         {SUBTITLE_ENCODING_ISO_2022_KR,         "ISO2022KR",            "Korean"},
227         {SUBTITLE_ENCODING_JOHAB,               "JOHAB",                "Korean"},
228         {SUBTITLE_ENCODING_UHC,                 "UHC",                  "Korean"},
229
230         {SUBTITLE_ENCODING_ISO_8859_10,         "ISO-8859-10",          "Nordic"},
231
232         {SUBTITLE_ENCODING_MAC_FARSI,           "MAC_FARSI",            "Persian"},
233
234         {SUBTITLE_ENCODING_ISO_8859_16,         "ISO-8859-16",          "Romanian"},
235         {SUBTITLE_ENCODING_MAC_ROMANIAN,        "MAC_ROMANIAN",         "Romanian"},
236
237         {SUBTITLE_ENCODING_ISO_8859_3,          "ISO-8859-3",           "South European"},
238
239         {SUBTITLE_ENCODING_TIS_620,             "TIS-620",              "Thai"},
240
241         {SUBTITLE_ENCODING_ISO_8859_9,          "ISO-8859-9",           "Turkish"},
242         {SUBTITLE_ENCODING_IBM_857,             "IBM857",               "Turkish"},
243         {SUBTITLE_ENCODING_MAC_TURKISH,         "MAC_TURKISH",          "Turkish"},
244         {SUBTITLE_ENCODING_WINDOWS_1254,        "WINDOWS-1254",         "Turkish"},
245
246         {SUBTITLE_ENCODING_UTF_7,               "UTF-7",                "Unicode"},
247         {SUBTITLE_ENCODING_UTF_8,               "UTF-8",                "Unicode"},
248         {SUBTITLE_ENCODING_UTF_16,              "UTF-16",               "Unicode"},
249         {SUBTITLE_ENCODING_UCS_2,               "UCS-2",                "Unicode"},
250         {SUBTITLE_ENCODING_UCS_4,               "UCS-4",                "Unicode"},
251
252         {SUBTITLE_ENCODING_ISO_8859_1,          "ISO-8859-1",           "Western"},
253         {SUBTITLE_ENCODING_ISO_8859_15,         "ISO-8859-15",          "Western"},
254         {SUBTITLE_ENCODING_IBM_850,             "IBM850",               "Western"},
255         {SUBTITLE_ENCODING_MAC_ROMAN,           "MAC_ROMAN",            "Western"},
256         {SUBTITLE_ENCODING_WINDOWS_1252,        "WINDOWS-1252",         "Western"},
257
258         {SUBTITLE_ENCODING_TCVN,                "TCVN",                 "Vietnamese"},
259         {SUBTITLE_ENCODING_VISCII,              "VISCII",               "Vietnamese"},
260         {SUBTITLE_ENCODING_WINDOWS_1258,        "WINDOWS-1258",         "Vietnamese"}
261 };
262
263 static gboolean
264 gconf_get_bool (GConfClient *client,
265                 const gchar *key)
266 {
267         gboolean value = FALSE;
268         gchar *tmp = NULL;
269
270         tmp = g_strdup_printf ("%s/%s", GCONF_MAFW_GST_SUBTITLE_RENDERER, key);
271
272         value = gconf_client_get_bool (client, tmp, NULL);
273
274         if (tmp)
275                 g_free (tmp);
276
277         return value;
278 }
279
280 static void
281 gconf_set_bool (GConfClient *client,
282                 const gchar *key,
283                 gboolean value)
284 {
285         gchar *tmp = NULL;
286
287         tmp = g_strdup_printf ("%s/%s", GCONF_MAFW_GST_SUBTITLE_RENDERER, key);
288
289         gconf_client_set_bool (client, tmp, value, NULL);
290
291         if (tmp)
292                 g_free (tmp);
293 }
294
295 static gchar *
296 gconf_get_string (GConfClient *client,
297                   gchar *key)
298 {
299         gchar *value = FALSE;
300         gchar *tmp = NULL;
301
302         tmp = g_strdup_printf ("%s/%s", GCONF_MAFW_GST_SUBTITLE_RENDERER, key);
303
304         value = gconf_client_get_string (client, tmp, NULL);
305
306         if (tmp)
307                 g_free (tmp);
308
309         return value;
310 }
311
312 static void
313 gconf_set_string (GConfClient *client,
314                 gchar *key,
315                 const gchar *value)
316 {
317         gchar *tmp = NULL;
318
319         tmp = g_strdup_printf ("%s/%s", GCONF_MAFW_GST_SUBTITLE_RENDERER, key);
320
321         if (value)
322                 gconf_client_set_string (client, tmp, value, NULL);
323         else
324                 gconf_client_unset (client, tmp, NULL);
325
326         if (tmp)
327                 g_free (tmp);
328 }
329
330 static void
331 font_selector_dialog (HildonButton *button,
332                       gpointer user_data)
333 {
334         GtkWidget *dialog, *hbox;
335
336         dialog = gtk_dialog_new ();
337         gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
338         gtk_window_set_title (GTK_WINDOW (dialog), _("Subtitle font"));
339         gtk_dialog_add_button(GTK_DIALOG (dialog), "OK", GTK_RESPONSE_ACCEPT);
340
341         hbox = gtk_hbox_new (FALSE, 0);
342         gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
343
344         // pango_font_description_from_string
345
346         /* Run the dialog */
347         gtk_widget_show_all (GTK_WIDGET (dialog));
348         if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
349                 // pango_font_description_to_string
350         }
351
352         gtk_widget_destroy(GTK_WIDGET(dialog));
353 }
354
355
356 static GtkWidget *
357 create_encoding_selector (void)
358 {
359         GtkWidget *selector;
360         gint index = 0;
361
362         selector = hildon_touch_selector_new_text ();
363
364         while (index < SUBTITLE_ENCODING_LAST) {
365                 gchar *encoding = NULL;
366
367                 if (encodings[index].charset) {
368                         encoding = g_strdup_printf ("%s (%s)", encodings[index].name,
369                                                     encodings[index].charset);
370                 } else {
371                         encoding = g_strdup_printf ("%s", encodings[index].name);
372                 }
373
374                 hildon_touch_selector_insert_text (HILDON_TOUCH_SELECTOR (selector),
375                                                    encodings[index].index,
376                                                    encoding);
377                 if (encoding)
378                         g_free (encoding);
379                 index++;
380         }
381
382         return selector;
383 }
384
385 static GtkWidget *
386 create_autoload_subtitles_button (GConfClient *gconf_client)
387 {
388         GtkWidget *button;
389         gboolean autoload_subtitles = FALSE;
390
391         button = hildon_check_button_new (HILDON_SIZE_FINGER_HEIGHT);
392         gtk_button_set_label (GTK_BUTTON (button), _("Automatically load subtitle files"));
393
394         autoload_subtitles = gconf_get_bool (gconf_client, "autoload_subtitles");
395         if (autoload_subtitles)
396                 hildon_check_button_set_active (HILDON_CHECK_BUTTON (button), TRUE);
397         else
398                 hildon_check_button_set_active (HILDON_CHECK_BUTTON (button), FALSE);
399
400         return button;
401 }
402
403 static void
404 save_autoload_subtitles (GConfClient *gconf_client,
405                          GtkWidget *widget)
406 {
407         if (hildon_check_button_get_active (HILDON_CHECK_BUTTON (widget)))
408                 gconf_set_bool (gconf_client, "autoload_subtitles", TRUE);
409         else
410                 gconf_set_bool (gconf_client, "autoload_subtitles", FALSE);
411 }
412
413 static GtkWidget *
414 create_subtitles_font_button (GConfClient *gconf_client)
415 {
416         GtkWidget *button;
417         const gchar *font = NULL;
418
419         button = hildon_button_new (HILDON_SIZE_FINGER_HEIGHT,
420                                     HILDON_BUTTON_ARRANGEMENT_VERTICAL);
421         hildon_button_set_title (HILDON_BUTTON (button), _("Font"));
422         hildon_button_set_alignment (HILDON_BUTTON (button), 0.0, 0.5, 1.0, 0.0);
423         hildon_button_set_title_alignment (HILDON_BUTTON(button), 0.0, 0.5);
424         hildon_button_set_value_alignment (HILDON_BUTTON (button), 0.0, 0.5);
425
426         g_signal_connect (button, "clicked", G_CALLBACK (font_selector_dialog), NULL);
427
428         font = gconf_get_string (gconf_client, "subtitle_font");
429         if (font) {
430                 hildon_button_set_value (HILDON_BUTTON (button), font);
431         } else {
432                 hildon_button_set_value (HILDON_BUTTON (button), "Sans Bold 18");
433         }
434         return button;
435 }
436
437 static void
438 save_subtitles_font (GConfClient *gconf_client,
439                      GtkWidget *widget)
440 {
441         const gchar *font = NULL;
442
443         font = hildon_button_get_value (HILDON_BUTTON (widget));
444         gconf_set_string (gconf_client, "subtitle_font", font);
445 }
446
447 static GtkWidget *
448 create_subtitles_encoding_button (GConfClient *gconf_client)
449 {
450         GtkWidget *button, *selector;
451         const gchar *encoding = NULL;
452
453         button = hildon_picker_button_new (HILDON_SIZE_FINGER_HEIGHT,
454                                            HILDON_BUTTON_ARRANGEMENT_VERTICAL);
455         hildon_button_set_title (HILDON_BUTTON (button), _("Encoding"));
456         hildon_button_set_alignment (HILDON_BUTTON (button), 0.0, 0.5, 1.0, 0.0);
457         hildon_button_set_title_alignment (HILDON_BUTTON(button), 0.0, 0.5);
458         hildon_button_set_value_alignment (HILDON_BUTTON (button), 0.0, 0.5);
459
460         selector = create_encoding_selector ();
461         hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button),
462                                            HILDON_TOUCH_SELECTOR (selector));
463
464         encoding = gconf_get_string (gconf_client, "subtitle_encoding");
465         if (encoding) {
466                 /* skip current locale */
467                 gint index = 1;
468
469                 while (index < SUBTITLE_ENCODING_LAST) {
470                         if (strcmp (encodings[index].charset, encoding) == 0) {
471                                 hildon_picker_button_set_active (HILDON_PICKER_BUTTON (button),
472                                                                  index);
473                                 break;
474                         }
475                         index++;
476                 }
477         } else {
478                 hildon_picker_button_set_active (HILDON_PICKER_BUTTON (button),
479                                                  SUBTITLE_ENCODING_CURRENT_LOCALE);
480         }
481
482         return button;
483 }
484
485 static void
486 save_subtitles_encoding (GConfClient *gconf_client,
487                          GtkWidget *widget)
488 {
489         gint encoding = 0, index = 0;
490
491         encoding = hildon_picker_button_get_active (HILDON_PICKER_BUTTON (widget));
492
493         while (index < SUBTITLE_ENCODING_LAST) {
494                 if (encoding == index) {
495                         gconf_set_string (gconf_client, "subtitle_encoding",
496                                           encodings[index].charset);
497                         break;
498                 }
499                 index++;
500         }
501 }
502
503 osso_return_t
504 execute (osso_context_t *osso,
505          gpointer data,
506          gboolean user_activated)
507 {
508         GConfClient *gconf_client = NULL;
509         GtkWidget *dialog, *vbox, *autoload_subtitles_button;
510         GtkWidget *subtitles_font_button, *subtitles_encoding_button;
511
512         gconf_client = gconf_client_get_default ();
513         if (gconf_client == NULL) {
514                 return OSSO_ERROR;
515         }
516
517         dialog = gtk_dialog_new ();
518         gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
519         gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (data));
520         gtk_window_set_title (GTK_WINDOW (dialog), _("Subtitles"));
521         gtk_dialog_add_button(GTK_DIALOG (dialog), _HL("wdgt_bd_save"), GTK_RESPONSE_ACCEPT);
522
523         vbox = gtk_vbox_new (FALSE, 0);
524         gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox);
525
526         /* autoload subtitles button */
527         autoload_subtitles_button = create_autoload_subtitles_button (gconf_client);
528         gtk_box_pack_start (GTK_BOX (vbox), autoload_subtitles_button, TRUE, TRUE, 0);
529
530         /* font selector */
531         subtitles_font_button = create_subtitles_font_button (gconf_client);
532         gtk_box_pack_start (GTK_BOX (vbox), subtitles_font_button, TRUE, TRUE, 0);
533
534         /* font encoding */
535         subtitles_encoding_button = create_subtitles_encoding_button (gconf_client);
536         gtk_box_pack_start (GTK_BOX (vbox), subtitles_encoding_button, TRUE, TRUE, 0);
537
538         /* Run the dialog */
539         gtk_widget_show_all (GTK_WIDGET (dialog));
540         if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
541                 /* save autoload subtitles option */
542                 save_autoload_subtitles (gconf_client, autoload_subtitles_button);
543
544                 /* save subtitle font option */
545                 save_subtitles_font (gconf_client, subtitles_font_button);
546
547                 /* save subtitle encoding option */
548                 save_subtitles_encoding (gconf_client, subtitles_encoding_button);
549         }
550
551         gtk_widget_destroy(GTK_WIDGET(dialog));
552         return OSSO_OK;
553 }
554
555 osso_return_t
556 save_state (osso_context_t *osso,
557             gpointer data)
558 {
559         return OSSO_OK;
560 }
561