fixed problem with hildonmessage window. fixed problem with Makefile.am
[livewp] / applet / src / livewp-settings.c
1 /* vim: set sw=4 ts=4 et: */
2 /*
3  * This file is part of Live Wallpaper (livewp)
4  * 
5  * Copyright (C) 2010 Vlad Vasiliev
6  * Copyright (C) 2010 Tanya Makova
7  *       for the code
8  * 
9  * This software is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation; either version 2 of
12  * the License, or (at your option) any later version.
13  * 
14  * This software is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  * 
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this software; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
22  * 02110-1301 USA
23 */
24 /*******************************************************************************/
25 #include "livewp-settings.h"
26 /*******************************************************************************/
27 void lw_about(void){
28     
29     gchar *about_string;
30     GtkWidget *window = NULL,
31     *vbox = NULL,
32     *label_about = NULL;
33     window = gtk_dialog_new();
34     gtk_window_set_title(GTK_WINDOW(window), _("About"));
35     gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
36     gtk_window_set_modal(GTK_WINDOW(window), TRUE);
37     vbox = gtk_vbox_new (FALSE, 5);
38     about_string = g_strdup_printf(_("Live Wallpaper Version %s \n Copyright(c) 2010\n \
39 Tanya Makova\n Vlad Vasiliev\n \
40 Copyright(c) 2010 for design themes Berlin, Modern and Accel Vasya Bobrikov\n \
41 Copyright(c) 2010 for design themes Matrix Fifteen and for icons Andrew Zhilin\n \
42 Translators:\n \
43 Finnish - Marko Vertainen\n \
44 Spain  - Alejandro López\n \
45 Italian  - Emanuele Cassioli\n \
46 Russian - Tanya Makova \n \
47           Vlad Vasiliev\n"), VERSION);
48
49     label_about = gtk_label_new (about_string);
50     gtk_box_pack_start (GTK_BOX (vbox), label_about, FALSE, FALSE, 0);
51     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
52                                    vbox, TRUE, TRUE, 0);
53     gtk_widget_show (label_about);
54     gtk_widget_show (vbox);
55     gtk_widget_show (window);
56     gtk_dialog_run(GTK_DIALOG(window));
57
58 }
59 /*******************************************************************************/
60 GtkWidget *
61 create_category_selector (Animation_WallpaperPrivate *priv){
62     GtkWidget *selector;
63     GSList *store = priv->extheme_list;
64     GList *category_list;
65     GHashTable *result_table = NULL;
66
67     selector = hildon_touch_selector_new_text();
68
69     hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), "LiveWallpaper" );
70
71     result_table = g_hash_table_new(g_str_hash, g_str_equal);
72     while (store){  
73         if (!g_hash_table_lookup(result_table, g_hash_table_lookup(store->data, "category"))){
74             g_hash_table_insert(result_table, g_hash_table_lookup(store->data, "category"), (gint *)1);     
75             hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), g_hash_table_lookup(store->data, "category"));
76         }
77         store = g_slist_next(store);
78     }
79     
80     /* Add Xscreensaver for install message */
81     if (!g_hash_table_lookup(result_table,"Xscreensaver")){
82             g_hash_table_insert(result_table, "Xscreensaver", (gint *)1);
83             hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), "Xscreensaver");
84     }
85 #if 0
86
87     category_list = g_hash_table_get_keys (result_table);
88     selector = hildon_touch_selector_new_text();
89
90     hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), "LiveWallpaper" );
91     while (category_list){  
92         hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector),category_list->data );
93         fprintf(stderr, "create %s\n", category_list->data);
94         category_list = g_list_next(category_list);
95     }
96 #endif
97     return selector;
98 }
99
100 /*******************************************************************************/
101 void
102 theme_button_clicked(GtkWidget *button, GdkEventButton *event, Animation_WallpaperPrivate *priv){
103     lw_theme_settings(GTK_WIDGET(button), priv);
104 }
105 /********************************************************************************/
106 void
107 set_button_image(GtkWidget * button, Animation_WallpaperPrivate *priv, gboolean enable){
108     GtkWidget * image = NULL; 
109     GdkPixbuf * pixbuf = NULL;
110     gchar *str = NULL;
111     gchar *icon_on = NULL;
112     gchar *icon_off = NULL;
113     GSList *store = priv->extheme_list;
114
115     while (store){
116         if (!strcmp(priv->theme, g_hash_table_lookup(store->data, "name"))){
117             icon_on = g_strdup(g_hash_table_lookup(store->data, "icon_on"));
118             icon_off = g_strdup(g_hash_table_lookup(store->data, "icon_off"));
119             break;
120         }
121         store = (GSList *)g_list_next(store);
122     }
123     if (enable){
124         if (icon_on)
125             str = g_strdup_printf("%s", icon_on);
126         else 
127             str = g_strdup_printf( "%s/%s/%s", THEME_PATH, 
128                             priv->theme, "icon.png");
129             if (access(str, F_OK) != 0){
130                 g_free(str);
131                 str = g_strdup_printf( "%s/%s/%s", THEME_PATH, 
132                             "Video", "icon.png");
133             }
134
135     }else {
136         if (icon_off)
137             str = g_strdup_printf("%s", icon_off);
138         else 
139             str = g_strdup_printf( "%s/%s/%s", THEME_PATH, 
140                             priv->theme, "icond.png");
141             if (access(str, F_OK) != 0){
142                 g_free(str);
143                 str = g_strdup_printf( "%s/%s/%s", THEME_PATH, 
144                             "Video", "icond.png");
145             }
146     }
147     pixbuf = gdk_pixbuf_new_from_file_at_size (str, 
148                                                  124, 
149                                                  79, 
150                                                  NULL);
151     if (str)
152         g_free(str);
153     if (icon_on)
154         g_free(icon_on);
155     if (icon_off)
156         g_free(icon_off);
157     if (pixbuf){
158         image = gtk_image_new_from_pixbuf (pixbuf);
159         g_object_unref(G_OBJECT(pixbuf));
160     }
161
162     //hildon_button_set_image (HILDON_BUTTON (button), image);
163     GList *list = gtk_container_get_children(GTK_CONTAINER (button));
164     if (list){
165         gtk_container_remove(GTK_CONTAINER (button), list->data);
166     }
167     gtk_container_add(GTK_CONTAINER (button), image);
168     gtk_widget_show(image);
169     gtk_widget_show(button);
170
171 }
172 /********************************************************************************/
173 GtkWidget *
174 create_image_button (gint view, DBusConnection *conn_sess){
175     GtkWidget *event_box;
176
177     Animation_WallpaperPrivate *priv = g_new0(Animation_WallpaperPrivate, 1);
178     /* Add external themes to priv */
179     priv->extheme_list = get_list_exthemes();
180
181     priv->view = view;
182     priv->theme_string_parametr1 = NULL;
183     priv->dbus_conn_session = conn_sess;
184     read_config(priv);
185
186     event_box = gtk_event_box_new();
187     g_object_set_data(G_OBJECT(event_box), "view", GINT_TO_POINTER(view));
188     g_object_set_data(G_OBJECT(event_box), "priv", priv);
189     set_button_image(event_box, priv, check_applet_state(view));
190     g_signal_connect(G_OBJECT (event_box), "button_press_event", G_CALLBACK(theme_button_clicked), priv);
191     return event_box;
192 #if 0
193     button = hildon_button_new(HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT,
194                                     HILDON_BUTTON_ARRANGEMENT_VERTICAL);
195     g_object_set_data(G_OBJECT(button), "view", GINT_TO_POINTER(view));
196     g_object_set_data(G_OBJECT(button), "priv", priv);
197     set_button_image(button, priv, check_applet_state(view));
198     g_signal_connect(button, "clicked", G_CALLBACK(theme_button_clicked), priv);
199     hildon_button_set_image_position (HILDON_BUTTON (button), GTK_POS_RIGHT);
200     return button;
201 #endif
202 }
203 /********************************************************************************/
204 void
205 changed_value_one_in_all_cb (GtkWidget *toggle, Animation_WallpaperPrivate *priv)
206 {
207     priv->one_in_all_view = hildon_check_button_get_active((HildonCheckButton *)toggle);
208     create_themes_buttons_hbox(priv);
209     fprintf(stderr, "changed_value_one_in_all_cb\n");
210 }
211 /********************************************************************************/
212 void
213 changed_value_theme_cb (HildonPickerButton *picker, Animation_WallpaperPrivate *priv)
214 {
215     const gchar *choice = hildon_button_get_value(HILDON_BUTTON (picker));
216     GtkWidget *vbox = NULL;
217     GtkWidget *area_vbox = NULL;
218         
219     area_vbox = g_object_get_data(G_OBJECT(priv->window), "area_vbox");
220     if (!area_vbox)
221         return;
222     vbox = g_object_get_data(G_OBJECT(priv->window), "custom_vbox");
223     if (vbox){
224         gtk_widget_destroy(vbox);
225     }
226     vbox = gtk_vbox_new (TRUE, 5);
227     g_object_set_data(G_OBJECT(priv->window), "custom_vbox", vbox);
228     gtk_box_pack_start(GTK_BOX(area_vbox),
229                                    vbox, FALSE, FALSE, 5);
230     if (choice) {
231         if (!strcmp(choice, _("Berlin"))){
232             rich_animation_additional_parametr(vbox,priv);
233         }
234         if (!strcmp(choice, _("Modern"))){
235             rich_animation_additional_parametr(vbox,priv);
236         }
237         if (!strcmp(choice, _("Matrix"))){
238             rich_animation_additional_parametr(vbox,priv);
239         }
240
241         if (!strcmp(choice, _("Accel"))){
242             rich_animation_additional_parametr(vbox,priv);
243         }
244         if (!strcmp(choice, _("Video"))){
245             additional_parametr_for_theme_video(vbox, priv);
246         }
247     }
248     gtk_widget_show(vbox);
249 }
250 /********************************************************************************/
251 void
252 changed_value_category_cb (HildonPickerButton *picker, Animation_WallpaperPrivate *priv)
253 {
254     GtkWidget *theme_button = NULL;
255     const gchar *choice = hildon_button_get_value(HILDON_BUTTON (picker));
256
257     theme_button = g_object_get_data(G_OBJECT(priv->window), "theme_button");
258     if (!theme_button) 
259         return;
260     HildonTouchSelector * selector =  hildon_picker_button_get_selector((HildonPickerButton *) theme_button);
261     hildon_touch_selector_remove_column(selector, 0); 
262     hildon_touch_selector_append_text_column(selector, (GtkTreeModel*)gtk_list_store_new (1, G_TYPE_STRING), TRUE);
263     fill_theme_button(priv, theme_button, (gchar *)hildon_button_get_value(HILDON_BUTTON (picker)));
264     /* check xscreensaver category */
265     if (choice){
266         if (!strcmp(choice,"Xscreensaver"))
267             if (access("/usr/bin/xscreensaver", F_OK) != 0){
268                 show_problem_package((GtkWidget *)picker, "Xscreensaver");
269             }
270
271     }
272 }
273 /********************************************************************************/
274 void
275 fill_theme_button (Animation_WallpaperPrivate *priv, GtkWidget *button, gchar *category){
276
277     gchar *theme = priv->theme;
278     gboolean flag = False;
279     gint num=0;
280         hildon_button_set_value(HILDON_BUTTON (button), NULL);
281     if (!category){
282         changed_value_theme_cb(HILDON_PICKER_BUTTON (button), priv);
283         return;
284     }
285     GSList *store = priv->extheme_list;
286     HildonTouchSelector * selector =  hildon_picker_button_get_selector((HildonPickerButton *) button);
287     if (!selector)
288         selector = (HildonTouchSelector *)hildon_touch_selector_new_text ();
289     
290     hildon_button_set_value(HILDON_BUTTON(button), NULL);
291     if (!strcmp(category, "LiveWallpaper")){
292         hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Berlin"));
293         hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Modern"));
294         hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Matrix"));
295         hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Accel"));
296         hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Video"));
297         num = 5;        
298         if (theme){ 
299             if (!strcmp(theme, "Berlin")){
300                 hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 0);
301                 hildon_button_set_value(HILDON_BUTTON(button), _("Berlin"));
302             }
303             if (!strcmp(theme, "Modern")){
304                 hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 1);
305                 hildon_button_set_value(HILDON_BUTTON(button), _("Modern"));
306             }
307             if (!strcmp(theme, "Matrix")){
308                 hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 2);
309                 hildon_button_set_value(HILDON_BUTTON(button), _("Matrix"));
310             }
311             if (!strcmp(theme, "Accel")){
312                 hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 3);
313                 hildon_button_set_value(HILDON_BUTTON(button), _("Accel"));
314             }
315             if (!strcmp(theme, "Video")){
316                 hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 4);
317                 hildon_button_set_value(HILDON_BUTTON(button), _("Video"));
318             }
319        }
320     }
321     while (store){  
322         if (!g_hash_table_lookup(store->data, "category"))
323             continue;
324         if (!strcmp(g_hash_table_lookup(store->data, "category"), category)){
325             hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), g_hash_table_lookup(store->data, "name"));
326             if (!strcmp(theme, g_hash_table_lookup(store->data, "name"))){
327                 hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, num);
328                 hildon_button_set_value(HILDON_BUTTON(button), _(g_hash_table_lookup(store->data, "name")));
329             }
330             num++;
331         }
332         store = g_slist_next(store);
333     }
334     /* Added Shreman's Aquarium for message */
335     if (!strcmp(category, "Unknown")){
336         store = priv->extheme_list;
337         while (store){  
338             if (!strcmp("Shermans Aquarium" , g_hash_table_lookup(store->data, "name"))){
339                 flag = TRUE;
340                 break;
341             }
342             store = g_slist_next(store);
343         }
344         if (!flag)
345             hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), "Shermans Aquarium");
346     }
347
348         hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button),
349                                                        HILDON_TOUCH_SELECTOR (selector));
350
351     changed_value_theme_cb(HILDON_PICKER_BUTTON (button), priv);
352 }
353 /********************************************************************************/
354 GtkWidget *
355 create_themes_button (Animation_WallpaperPrivate *priv, gchar *category){
356
357     GtkWidget *button;
358     button = hildon_picker_button_new (HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL);
359     hildon_button_set_title (HILDON_BUTTON (button), _("Theme"));
360
361    
362     return button;
363 }
364 /********************************************************************************/
365 GtkWidget *
366 create_categories_button (Animation_WallpaperPrivate *priv){
367
368     GtkWidget *button;
369     GtkWidget *selector;
370     gchar *theme = priv->theme;
371     gint num=0;
372     GHashTable *result_table = NULL;
373
374     result_table = g_hash_table_new(g_str_hash, g_str_equal);
375     selector = create_category_selector(priv);
376     button = hildon_picker_button_new (HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL);
377     hildon_button_set_title (HILDON_BUTTON (button), _("Category"));
378     hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button),
379                                                        HILDON_TOUCH_SELECTOR (selector));
380     if (theme) {
381         if (!strcmp(theme, "Berlin")){
382             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 0); 
383             hildon_button_set_value(HILDON_BUTTON(button), "LiveWallpaper");
384         }
385         if (!strcmp(theme, "Modern")){
386             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 0); 
387             hildon_button_set_value(HILDON_BUTTON(button), "LiveWallpaper");
388         }
389         if (!strcmp(theme, "Matrix")){
390             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 0); 
391             hildon_button_set_value(HILDON_BUTTON(button), "LiveWallpaper");
392         }
393         if (!strcmp(theme, "Accel")){
394             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 0); 
395             hildon_button_set_value(HILDON_BUTTON(button), "LiveWallpaper");
396         }
397         if (!strcmp(theme, "Video")){
398             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 0); 
399             hildon_button_set_value(HILDON_BUTTON(button), "LiveWallpaper");
400         }
401         GSList *store = priv->extheme_list;
402         num = 1;
403         while (store){
404             if (g_hash_table_lookup(result_table, g_hash_table_lookup(store->data, "category")) == NULL){
405                 g_hash_table_insert(result_table, g_hash_table_lookup(store->data, "category"), (gint *)num);     
406                 num++;
407             }
408             if (!strcmp(theme, g_hash_table_lookup(store->data, "name"))){
409                 if (g_hash_table_lookup(store->data, "category")){
410                     hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 
411                     (gint)g_hash_table_lookup(result_table, g_hash_table_lookup(store->data, "category"))); 
412                     hildon_button_set_value(HILDON_BUTTON(button), g_hash_table_lookup(store->data, "category"));
413                 }
414                 break;
415             }
416
417             store = g_slist_next(store);
418         }
419     }
420     return button;
421 }
422
423 /*******************************************************************************/
424 GtkWidget *
425 create_bool_button (gboolean active, gchar *name)
426 {
427     GtkWidget *button;
428     button = hildon_check_button_new (HILDON_SIZE_FINGER_HEIGHT);
429     gtk_button_set_label (GTK_BUTTON (button), name);
430     hildon_check_button_set_active(HILDON_CHECK_BUTTON(button), active);
431     return button;
432 }
433 /*******************************************************************************/
434 GtkWidget *
435 create_enable_button (gboolean active)
436 {
437     GtkWidget *button;
438     button = hildon_check_button_new (HILDON_SIZE_FINGER_HEIGHT);
439     gtk_button_set_label (GTK_BUTTON (button), _("Enable"));
440     hildon_check_button_set_active(HILDON_CHECK_BUTTON(button), active);
441     return button;
442 }
443
444 /*******************************************************************************/
445 void
446 show_settings(GtkWidget *widget, Animation_WallpaperPrivate *priv){
447     lw_main_settings(priv, NULL);
448 }
449 /*******************************************************************************/
450 void
451 create_themes_buttons_hbox(Animation_WallpaperPrivate *priv){
452     GtkWidget *hbox = NULL;
453     GtkWidget *area_hbox = NULL;
454     GtkWidget *theme_button1;
455     GtkWidget *theme_button2;
456     GtkWidget *theme_button3;
457     GtkWidget *theme_button4;    
458
459         
460     area_hbox = g_object_get_data(G_OBJECT(priv->window), "area_hbox");
461     if (!area_hbox)
462         return;
463     hbox = g_object_get_data(G_OBJECT(priv->window), "custom_hbox");
464     if (hbox){
465         gtk_widget_destroy(hbox);
466     }
467     hbox = gtk_hbox_new(FALSE, 0);
468     g_object_set_data(G_OBJECT(priv->window), "custom_hbox", hbox);
469     gtk_box_pack_start(GTK_BOX(area_hbox),
470                                    hbox, FALSE, FALSE, 5);
471     /* Create Theme buttons */
472     theme_button1 = create_image_button(1, priv->dbus_conn_session);
473     gtk_box_pack_start(GTK_BOX(hbox),
474                                    theme_button1, TRUE, TRUE, 0);
475     gtk_widget_show (theme_button1);
476     gtk_widget_show (hbox);
477     if (priv->one_in_all_view)
478         return;
479     theme_button2 = create_image_button(2, priv->dbus_conn_session);
480     gtk_box_pack_start(GTK_BOX(hbox),
481                                    theme_button2, TRUE, TRUE, 0);
482     gtk_widget_show (theme_button2);
483     theme_button3 = create_image_button(3, priv->dbus_conn_session);
484     gtk_box_pack_start(GTK_BOX(hbox),
485                                    theme_button3, TRUE, TRUE, 0);
486     gtk_widget_show (theme_button3);
487     theme_button4 = create_image_button(4, priv->dbus_conn_session);
488     gtk_box_pack_start(GTK_BOX(hbox),
489                                    theme_button4, TRUE, TRUE, 0);
490     gtk_widget_show (theme_button4);
491  
492 }
493 /*******************************************************************************/
494 void 
495 lw_main_settings(Animation_WallpaperPrivate *priv, gpointer data){
496     gint result;
497     GtkWidget *window = NULL;
498     GtkWidget *banner = NULL;
499     GtkWidget *area_hbox;
500     GtkWidget *one_in_all_view_button; 
501     gboolean one_in_all_view;
502     Animation_WallpaperPrivate *priv_temp = NULL;
503
504     window = gtk_dialog_new();
505     priv->window = window;
506
507     one_in_all_view = priv->one_in_all_view;
508     gtk_window_set_title(GTK_WINDOW(window), _("Live Wallpaper Settings"));
509     gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
510     gtk_window_set_modal(GTK_WINDOW(window), TRUE);
511     one_in_all_view_button = create_bool_button(priv->one_in_all_view, _("One theme in all views"));
512     g_signal_connect (G_OBJECT (one_in_all_view_button), "toggled",  G_CALLBACK (changed_value_one_in_all_cb), priv);
513     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox), one_in_all_view_button, TRUE, TRUE, 5);
514     area_hbox = gtk_vbox_new(FALSE, 2);
515     g_object_set_data(G_OBJECT(window), "area_hbox", area_hbox);
516     create_themes_buttons_hbox(priv);
517     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
518                                    area_hbox, TRUE, TRUE, 0);
519
520     gtk_widget_show (one_in_all_view_button);
521     gtk_widget_show_all (area_hbox);
522     gtk_widget_show (window);
523     gtk_dialog_add_button(GTK_DIALOG(window), _("About"), GTK_RESPONSE_NO);
524
525     result = gtk_dialog_run(GTK_DIALOG(window));
526 /*
527     priv_temp = g_object_get_data(G_OBJECT(theme_button1), "priv");
528     if (priv_temp){
529         g_free(priv_temp);
530         priv_temp =NULL;
531     }
532     priv_temp = g_object_get_data(G_OBJECT(theme_button2), "priv");
533     if (priv_temp){
534         g_free(priv_temp);
535         priv_temp =NULL;
536     }
537     priv_temp = g_object_get_data(G_OBJECT(theme_button3), "priv");
538     if (priv_temp){
539         g_free(priv_temp);
540         priv_temp =NULL;
541     }
542     priv_temp = g_object_get_data(G_OBJECT(theme_button4), "priv");
543     if (priv_temp){
544         g_free(priv_temp);
545         priv_temp =NULL;
546     }
547 */
548
549     switch(result){
550         case GTK_RESPONSE_NO:
551             gtk_widget_destroy(window);
552             window = NULL;
553             lw_about();
554         break;
555     }
556
557     if (hildon_check_button_get_active (HILDON_CHECK_BUTTON(one_in_all_view_button)) != one_in_all_view){
558         save_one_in_all_views_to_config(hildon_check_button_get_active (HILDON_CHECK_BUTTON(one_in_all_view_button)));
559         fprintf(stderr,"CHECK!!!!!!!!!!!!!!\n");
560         banner = hildon_banner_show_information (window, NULL, _("Livewallpaper is reloading..."));
561         hildon_banner_set_timeout(banner, 3000);
562         stop_applet(1);
563         stop_applet(2);
564         stop_applet(3);
565         stop_applet(4);
566         g_timeout_add(3000, (GSourceFunc)cb_timeout_settings, window);
567     }else{
568         if (window)
569             gtk_widget_destroy(window);
570     }
571 }
572 /*******************************************************************************/
573 gboolean
574 cb_timeout_settings(GtkWidget *window){
575
576     start_applet(1);
577     start_applet(2);
578     start_applet(3);
579     start_applet(4);
580
581     if (window)
582         gtk_widget_destroy(window);
583
584 }
585 /*******************************************************************************/
586 void
587 file_button_clicked(GtkButton *button, Animation_WallpaperPrivate *priv){
588
589     GtkWidget *dialog = hildon_file_chooser_dialog_new(GTK_WINDOW (priv->window), GTK_FILE_CHOOSER_ACTION_OPEN);
590
591     if (priv->theme_string_parametr1)
592         gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), priv->theme_string_parametr1);
593
594     gtk_widget_show_all (GTK_WIDGET (dialog));
595
596     if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK)
597     {
598       hildon_button_set_value (HILDON_BUTTON(button), gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)));
599     }
600     gtk_widget_destroy (dialog);
601
602 }
603 /*******************************************************************************/
604 void
605 rich_animation_additional_parametr(GtkWidget *vbox, Animation_WallpaperPrivate *priv){
606     GtkWidget *rich_animation_button;
607
608     /* Create rich animation button */  
609     rich_animation_button = create_bool_button(priv->rich_animation, _("Rich Animation"));
610     gtk_box_pack_start(GTK_BOX(vbox),
611                                    rich_animation_button, TRUE, TRUE, 5);
612     g_object_set_data(G_OBJECT(priv->window), "rich_animation_button", rich_animation_button);
613     gtk_widget_show (rich_animation_button);
614 }
615 /*******************************************************************************/
616 void
617 additional_parametr_for_theme_video(GtkWidget *vbox, Animation_WallpaperPrivate *priv){
618
619     GtkWidget *file_button;
620     GtkWidget *rich_animation_button;
621
622     if (priv->theme_string_parametr1)
623         file_button = hildon_button_new_with_text (HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL,
624                                                    _("Play file"), priv->theme_string_parametr1);
625     else
626         file_button = hildon_button_new_with_text (HILDON_SIZE_FINGER_HEIGHT,HILDON_BUTTON_ARRANGEMENT_VERTICAL,
627                                                    _("Play file")," ");
628
629     g_signal_connect (file_button, "clicked", G_CALLBACK (file_button_clicked), priv);
630
631     gtk_box_pack_start(GTK_BOX(vbox),
632                                    file_button, TRUE, TRUE, 5);
633     g_object_set_data(G_OBJECT(priv->window), "filename_button", file_button);    
634     /* Create rich animation button */  
635     rich_animation_button = create_bool_button(priv->rich_animation, _("Loop"));
636     gtk_box_pack_start(GTK_BOX(vbox),
637                                    rich_animation_button, TRUE, TRUE, 5);
638     g_object_set_data(G_OBJECT(priv->window), "rich_animation_button", rich_animation_button);
639     /* Create sound button */  
640 #if 0
641
642     /* Doesn't work in real device. Hardware volume buttons can to change volume for mutted track */
643     sound_button = create_bool_button(priv->theme_bool_parametr1, _("Sound"));
644     gtk_box_pack_start(GTK_BOX(vbox),
645                                    sound_button, TRUE, TRUE, 5);
646     g_object_set_data(G_OBJECT(priv->window), "sound_button", sound_button);
647     gtk_widget_show (sound_button);
648 #endif
649     gtk_widget_show (file_button);
650     gtk_widget_show (rich_animation_button);
651
652 }
653 /*******************************************************************************/
654 void
655 show_problem_package (GtkWidget *widget, gchar *package_name){
656     gchar *text;
657     text = g_strdup_printf(_("You haven't got the installed package %s. Please install it via using Application Manager"), package_name);
658     hildon_banner_show_information(GTK_WIDGET(widget), NULL, text);
659     g_free(text);
660 }
661 /*******************************************************************************/
662 void 
663 lw_theme_settings(GtkWidget *button, Animation_WallpaperPrivate *priv) {
664     gint result;
665     GtkWidget *window = NULL;
666     GtkWidget *scrolled_window = NULL;
667     GtkWidget *save_button;
668     GtkWidget *theme_button;
669     GtkWidget *category_button;
670     GtkWidget *enable_button;
671     GtkWidget *vbox;
672     GtkWidget *area_vbox;
673     GtkWidget *button1 = NULL;
674     GtkWidget *rich_animation_button = NULL;
675     gint view = priv->view;
676
677     window = gtk_dialog_new();
678     priv->window = window;
679
680     gtk_window_set_title(GTK_WINDOW(window), _("View Settings"));
681     gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
682     gtk_window_set_modal(GTK_WINDOW(window), TRUE);
683
684     /* Create panarea */
685     area_vbox = gtk_vbox_new(FALSE, 2);
686     g_object_set_data(G_OBJECT(window), "area_vbox", area_vbox);
687     scrolled_window = hildon_pannable_area_new ();
688     hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA (scrolled_window), GTK_WIDGET (area_vbox));
689     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
690                                    scrolled_window, FALSE, FALSE, 0);
691
692     gtk_widget_set_size_request(scrolled_window, -1, 370);
693
694     /* Create Enable button */
695     enable_button = create_enable_button(check_applet_state(view)); 
696     gtk_box_pack_start(GTK_BOX(area_vbox),
697                                    enable_button, FALSE, FALSE, 5);
698     /* Create Category button */
699     category_button = create_categories_button(priv);
700     g_object_set_data(G_OBJECT(window), "category_button", category_button);
701     g_signal_connect (G_OBJECT (category_button), "value-changed",  G_CALLBACK (changed_value_category_cb), priv);
702     gtk_box_pack_start(GTK_BOX(area_vbox),
703                                    category_button, FALSE, FALSE, 5);
704     /* Create Custom vbox */
705     vbox = gtk_vbox_new (FALSE, 5);
706     g_object_set_data(G_OBJECT(window), "custom_vbox", vbox);
707
708     /* Create Theme button */
709     theme_button = create_themes_button(priv, (gchar *)hildon_button_get_value(HILDON_BUTTON (category_button)));
710     g_object_set_data(G_OBJECT(window), "theme_button", theme_button);
711     g_signal_connect (G_OBJECT (theme_button), "value-changed",  G_CALLBACK (changed_value_theme_cb), priv);
712     gtk_box_pack_start(GTK_BOX(area_vbox),
713                                    theme_button, FALSE, FALSE, 5);
714     fill_theme_button(priv, theme_button, (gchar *)hildon_button_get_value(HILDON_BUTTON (category_button)));
715
716     /* Pack custom vbox. It must be last widget */
717     gtk_box_pack_start(GTK_BOX(area_vbox),
718                                    vbox, FALSE, FALSE, 5);
719
720     gtk_widget_show (enable_button);
721     gtk_widget_show (category_button);
722     gtk_widget_show (theme_button);
723     gtk_widget_show (vbox);
724     gtk_widget_show (area_vbox);
725     gtk_widget_show (scrolled_window);
726     gtk_widget_show (window);
727
728     save_button = gtk_dialog_add_button(GTK_DIALOG(window), _("Save"), GTK_RESPONSE_YES);
729
730     result = gtk_dialog_run(GTK_DIALOG(window));
731
732     switch(result){
733         case GTK_RESPONSE_YES:
734             /* Check theme */
735             if (hildon_button_get_value(HILDON_BUTTON (theme_button)) &&
736                 strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), "")){
737                 /* Check Xsnow program */
738                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Xsnow"))){
739                     if (access("/usr/bin/xsnow", F_OK) != 0){
740                         show_problem_package(button, "Xsnow");
741                         /* if not scuccess exit from wthout saving */ 
742                         break;
743                     }
744                 }
745                 /* Check Shermans program */
746                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), "Shermans Aquarium")){
747                     if (access("/usr/bin/shermans", F_OK) != 0){
748                         show_problem_package(button,"'Sherman's Aquarium'");
749                         /* if not scuccess exit from wthout saving */ 
750                         break;
751                     }
752                 }
753                 /* Check Conky program */
754                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), "Conky")){
755                     if (access("/usr/bin/conky", F_OK) != 0){
756                         show_problem_package(button,"'Conky'");
757                         /* if not scuccess exit from wthout saving */ 
758                         break;
759                     }
760                 }
761                 /* Check Orrery program */
762                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), "Orrery")){
763                     if (access("/opt/maemo/usr/bin/orrery", F_OK) != 0){
764                         show_problem_package(button,"'Orrery'");
765                         /* if not scuccess exit from wthout saving */ 
766                         break;
767                     }
768                 }
769                 /* Check Colorflood program */
770                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), "Colorflood")){
771                     if (access("/usr/bin/colorflood", F_OK) != 0){
772                         show_problem_package(button,"'Colorflood'");
773                         /* if not scuccess exit from wthout saving */ 
774                         break;
775                     }
776                 }
777
778                 if (priv->theme)
779                     g_free(priv->theme);
780                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Berlin")))
781                     priv->theme = g_strdup("Berlin");
782                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Modern")))
783                     priv->theme = g_strdup("Modern");
784                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Matrix")))
785                     priv->theme = g_strdup("Matrix");
786                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Accel")))
787                     priv->theme = g_strdup("Accel");
788                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Video"))){
789                     priv->theme = g_strdup("Video");
790                     button1 = g_object_get_data(G_OBJECT(priv->window), "filename_button");
791                     if (button1){
792                         if (priv->theme_string_parametr1)
793                             g_free(priv->theme_string_parametr1);
794                         priv->theme_string_parametr1 = g_strdup((gchar*)hildon_button_get_value (HILDON_BUTTON(button1)));
795                     }
796                     /* 
797                     temp_button = g_object_get_data(G_OBJECT(priv->window), "sound_button");
798                     if (temp_button){
799                         if (hildon_check_button_get_active (HILDON_CHECK_BUTTON(temp_button)))
800                             priv->theme_bool_parametr1 = TRUE;
801                         else
802                             priv->theme_bool_parametr1 = FALSE;
803                     }
804                     */
805                 }
806                 /* Check external themes */
807                 GSList *store = priv->extheme_list;
808                 while (store){
809                     if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _(g_hash_table_lookup(store->data, "name")))){
810                         priv->theme = g_strdup(g_hash_table_lookup(store->data, "name"));
811                         //priv->hash_theme = store->data;
812                         break;
813                     }
814                     store = g_slist_next(store);
815                 }
816
817             }
818
819             rich_animation_button = g_object_get_data(G_OBJECT(priv->window), "rich_animation_button");
820             if (rich_animation_button){
821                 /* Check rich animation */
822                 if (hildon_check_button_get_active (HILDON_CHECK_BUTTON(rich_animation_button)))
823                     priv->rich_animation = TRUE;
824                 else
825                     priv->rich_animation = FALSE;
826             }
827             /* Save config */
828             save_config(priv);
829             /* action with applet */
830             if (hildon_check_button_get_active (HILDON_CHECK_BUTTON(enable_button))){
831                     if (!check_applet_state(view)){
832                         start_applet(view);
833                     }else {
834                         send_dbus_signal (priv,
835                               LIVEWP_SIGNAL_INTERFACE,
836                               LIVEWP_SIGNAL_PATH,
837                               LIVEWP_RELOAD_CONFIG);
838                     }
839             }else
840                     if (check_applet_state(view))
841                         stop_applet(view);
842
843             set_button_image(button, priv, check_applet_state(view));
844             break;
845         default:
846         case GTK_RESPONSE_OK:
847         break;
848         case GTK_RESPONSE_NO:
849             gtk_widget_destroy(window);
850             window = NULL;
851             lw_about();
852         break;
853     }
854     if (window)
855         gtk_widget_destroy(window);
856 }
857 /*******************************************************************************/
858 gboolean
859 check_applet_state(gint number){
860
861     HDConfigFile *config_file = NULL;
862     GKeyFile *gkey_file = NULL;
863     gchar *str = NULL;
864     gboolean result = FALSE;
865     if (number > 4 || number < 1)
866         return FALSE;
867
868     str = g_strdup_printf("livewp-home-widget.desktop-%i", (number - 1));
869     config_file = hd_config_file_new(NULL, "/home/user/.config/hildon-desktop/", "home.plugins");
870     
871     gkey_file = hd_config_file_load_file(config_file, FALSE);
872     if (gkey_file && str){
873         result = g_key_file_has_group(gkey_file, str);
874         g_free(str);
875     }
876     return result;
877 }
878 /*******************************************************************************/
879 void
880 start_applet(gint number){
881
882     HDConfigFile *config_file = NULL;
883     GKeyFile *gkey_file = NULL;
884     gchar *str = NULL;
885
886     if (number > 4 || number < 1)
887         return;
888     str = g_strdup_printf("livewp-home-widget.desktop-%i",(number - 1));
889     config_file = hd_config_file_new(NULL, "/home/user/.config/hildon-desktop/", "home.plugins");
890     
891     gkey_file = hd_config_file_load_file(config_file, FALSE);
892     if (gkey_file){
893         g_key_file_set_string (gkey_file, str, "X-Desktop-File", "/usr/share/applications/hildon-home/livewp-home-widget.desktop");
894         hd_config_file_save_file( config_file, gkey_file);
895         g_key_file_free(gkey_file);
896     }else
897         fprintf(stderr, "Problem with config file");
898     if (str)
899         g_free(str);
900     g_object_unref(config_file);
901 }
902 /*******************************************************************************/
903 void
904 stop_applet(gint number){
905     HDConfigFile *config_file = NULL;
906     GKeyFile *gkey_file = NULL;
907     gchar *str = NULL;
908
909     if (number > 4 || number < 1)
910         return;
911     str = g_strdup_printf("livewp-home-widget.desktop-%i", (number - 1));
912     config_file = hd_config_file_new(NULL, "/home/user/.config/hildon-desktop/", "home.plugins");
913     
914     gkey_file = hd_config_file_load_file(config_file, FALSE);
915     if (gkey_file){
916          g_key_file_remove_group(gkey_file, str, NULL);  
917         hd_config_file_save_file( config_file, gkey_file);
918         g_key_file_free(gkey_file);
919     }else
920         fprintf(stderr, "Problem with config file");
921     if (str)
922         g_free(str);
923     g_object_unref(config_file);
924
925 }