fixed gcc warnings
[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 Lesser General Public License
11  * as published by the Free Software Foundation; either version 2.1 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     GtkWidget *window = NULL,
30     *vbox = NULL,
31     *label_about = NULL;
32     window = gtk_dialog_new();
33     gtk_window_set_title(GTK_WINDOW(window), _("About"));
34     gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
35     gtk_window_set_modal(GTK_WINDOW(window), TRUE);
36     vbox = gtk_vbox_new (FALSE, 5);
37     label_about = gtk_label_new (_("Live Wallpaper\n Version 0.5 \n Copyright(c) 2010\n \
38 Tanya Makova\n Vlad Vasiliev\n \
39 Copyright(c) 2010 for design themes Berlin and Modern Vasya Bobrikov\n \
40 Copyright(c) 2010 for design theme Matrix Andrew Zhilin\n \
41 Translators:\n \
42 Finnish - Marko Vertainen\n \
43 Russian - Tanya Makova \n \
44           Vlad Vasiliev\n")); 
45     gtk_box_pack_start (GTK_BOX (vbox), label_about, FALSE, FALSE, 0);
46     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
47                                    vbox, TRUE, TRUE, 0);
48     gtk_widget_show (label_about);
49     gtk_widget_show (vbox);
50     gtk_widget_show (window);
51     gtk_dialog_run(GTK_DIALOG(window));
52
53 }
54 /*******************************************************************************/
55 GtkWidget *
56 create_theme_selector (void)
57 {
58       GtkWidget *selector;
59
60       selector = hildon_touch_selector_new_text ();
61
62       hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Berlin"));
63       hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Modern"));
64       hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Matrix"));
65       return selector;
66 }
67 /*******************************************************************************/
68 GtkWidget *
69 create_themes_button (gchar *theme){
70
71     GtkWidget *button;
72     GtkWidget *selector;
73
74     selector = create_theme_selector();
75     button = hildon_picker_button_new (HILDON_SIZE_AUTO, HILDON_BUTTON_ARRANGEMENT_VERTICAL);
76     hildon_button_set_title (HILDON_BUTTON (button), _("Theme"));
77     hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button),
78                                                        HILDON_TOUCH_SELECTOR (selector));
79     if (theme) {
80         if (!strcmp(theme, "Berlin")){
81             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 0);
82             hildon_button_set_value(HILDON_BUTTON(button), _("Berlin"));
83         }
84         if (!strcmp(theme, "Modern")){
85             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 1);
86             hildon_button_set_value(HILDON_BUTTON(button), _("Modern"));
87         }
88         if (!strcmp(theme, "Matrix")){
89             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 2);
90             hildon_button_set_value(HILDON_BUTTON(button), _("Matrix"));
91         }
92
93     }
94     return button;
95 }
96
97 /*******************************************************************************/
98 GtkWidget *
99 create_rich_animation_button (gboolean active)
100 {
101     GtkWidget *button;
102     button = hildon_check_button_new (HILDON_SIZE_AUTO);
103     gtk_button_set_label (GTK_BUTTON (button), _("Rich Animation"));
104     hildon_check_button_set_active(HILDON_CHECK_BUTTON(button), active);
105     return button;
106 }
107 /*******************************************************************************/
108 GtkWidget *
109 create_enable_button (gboolean active)
110 {
111     GtkWidget *button;
112     button = hildon_check_button_new (HILDON_SIZE_AUTO);
113     gtk_button_set_label (GTK_BUTTON (button), _("Enable"));
114     hildon_check_button_set_active(HILDON_CHECK_BUTTON(button), active);
115     return button;
116 }
117
118 /*******************************************************************************/
119 void
120 show_settings(GtkWidget *widget, Animation_WallpaperPrivate *priv){
121     lw_settings(priv, NULL);
122 }
123 /*******************************************************************************/
124 void 
125 lw_settings(Animation_WallpaperPrivate *priv, gpointer data){
126     gint result;
127     GtkWidget *window = NULL;
128     GtkWidget *save_button;
129     GtkWidget *theme_button;
130     GtkWidget *enable_button;
131     GtkWidget *rich_animation_button;
132
133     window = gtk_dialog_new();
134
135     gtk_window_set_title(GTK_WINDOW(window), _("Live Wallpaper Settings"));
136     gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
137     gtk_window_set_modal(GTK_WINDOW(window), TRUE);
138     /* Create Enable button */
139     enable_button = create_enable_button(check_applet_state()); 
140     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
141                                    enable_button, TRUE, TRUE, 5);
142     /* Create Theme button */
143     theme_button = create_themes_button(priv->theme);
144     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
145                                    theme_button, TRUE, TRUE, 5);
146     /* Create rich animation button */  
147     rich_animation_button = create_rich_animation_button(priv->rich_animation);
148     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
149                                    rich_animation_button, TRUE, TRUE, 5);
150     gtk_widget_show (enable_button);
151     gtk_widget_show (theme_button);
152     gtk_widget_show (rich_animation_button);
153     gtk_widget_show (window);
154     gtk_dialog_add_button(GTK_DIALOG(window), _("About"), GTK_RESPONSE_NO);
155     save_button = gtk_dialog_add_button(GTK_DIALOG(window), _("Save"), GTK_RESPONSE_YES);
156     result = gtk_dialog_run(GTK_DIALOG(window));
157
158     switch(result){
159         case GTK_RESPONSE_YES:
160             /* Check theme */
161             if (hildon_button_get_value(HILDON_BUTTON (theme_button))){
162                 if (priv->theme)
163                     g_free(priv->theme);
164                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Berlin")))
165                     priv->theme = g_strdup("Berlin");
166                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Modern")))
167                     priv->theme = g_strdup("Modern");
168                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Matrix")))
169                     priv->theme = g_strdup("Matrix");
170             }
171             /* Check rich animation */
172             if (hildon_check_button_get_active (HILDON_CHECK_BUTTON(rich_animation_button)))
173                 priv->rich_animation = TRUE;
174             else
175                 priv->rich_animation = FALSE;
176             /* Save config */
177             save_config(priv);
178             /* action with applet */
179             if (hildon_check_button_get_active (HILDON_CHECK_BUTTON(enable_button))){
180                     if (!check_applet_state())
181                         start_applet();
182                     else
183                         send_dbus_signal (priv,
184                               LIVEWP_SIGNAL_INTERFACE,
185                               LIVEWP_SIGNAL_PATH,
186                               LIVEWP_RELOAD_CONFIG);
187             }else
188                     if (check_applet_state())
189                         stop_applet();
190
191             break;
192         default:
193         case GTK_RESPONSE_OK:
194         break;
195         case GTK_RESPONSE_NO:
196             gtk_widget_destroy(window);
197             window = NULL;
198             lw_about();
199         break;
200     }
201     if (window)
202         gtk_widget_destroy(window);
203 }
204 /*******************************************************************************/
205 gboolean
206 check_applet_state(void){
207     FILE    *file_in;
208     gchar buffer[2048];
209     gboolean result = FALSE;
210
211     file_in = fopen("/home/user/.config/hildon-desktop/home.plugins","r");
212     while (!feof(file_in)) {
213             memset(buffer, 0, sizeof(buffer));
214             fgets(buffer, sizeof(buffer) - 1, file_in);
215             if (!strcmp(buffer, 
216                         "X-Desktop-File=/usr/share/applications/hildon-home/livewp-home-widget.desktop\n")){
217                 result = TRUE;
218                 break;
219             }
220    }
221    fclose(file_in);
222
223     return result;
224 }
225 /*******************************************************************************/
226 void
227 start_applet(void){
228     FILE    *file_out;
229
230     file_out = fopen("/home/user/.config/hildon-desktop/home.plugins","w+");
231     if (file_out){
232         fputs("\n", file_out);
233         fputs("[livewp-home-widget.desktop-0]\n",file_out);
234         fputs("X-Desktop-File=/usr/share/applications/hildon-home/livewp-home-widget.desktop\n",file_out);
235         fclose(file_out);
236     }
237 }
238 /*******************************************************************************/
239 void
240 stop_applet(void){
241     FILE    *file_in;
242     FILE    *file_out;
243     gchar buffer[2048];
244
245     file_in = fopen("/home/user/.config/hildon-desktop/home.plugins","r");
246     file_out = fopen("/tmp/livewallpaper.plugins","w");
247     if (file_in && file_out){
248         while (!feof(file_in)) {
249             memset(buffer, 0, sizeof(buffer));
250             fgets(buffer, sizeof(buffer) - 1, file_in);
251             if (strcmp(buffer, "[livewp-home-widget.desktop-0]\n") &&
252                 strcmp(buffer, "X-Desktop-File=/usr/share/applications/hildon-home/livewp-home-widget.desktop\n"))
253                 fputs(buffer, file_out);
254         }
255         fclose(file_out);
256         fclose(file_in);
257         file_in = fopen("/tmp/livewallpaper.plugins","r");
258         file_out = fopen("/home/user/.config/hildon-desktop/home.plugins","w");
259         if (file_in && file_out){
260             while (!feof(file_in)){
261                 memset(buffer, 0, sizeof(buffer));
262                 fgets(buffer, sizeof(buffer) - 1, file_in);
263                 fputs(buffer, file_out);
264             }
265             fclose(file_out);
266             fclose(file_in);
267             unlink ("/tmp/livewallpaper.plugins");
268         }
269     }
270 }