done external themes for control panel
authortanya <tanyshk@gmail.com>
Mon, 9 Aug 2010 10:43:18 +0000 (13:43 +0300)
committertanya <tanyshk@gmail.com>
Mon, 9 Aug 2010 10:43:18 +0000 (13:43 +0300)
applet/src/livewp-common.h
applet/src/livewp-exthemes.c
applet/src/livewp-settings.c

index 31422e3..24154f6 100644 (file)
@@ -108,6 +108,7 @@ struct _Animation_WallpaperPrivate
     guint theme_int_parametr1;
     GstElement *pipeline;
     gboolean running;
+    GSList *extheme_list;
 };
 
 struct _AWallpaperPlugin
index d6610f7..1b58c83 100644 (file)
@@ -37,13 +37,11 @@ parse_theme(gchar *file){
     for (node = first_child; node; node = node->next){
         if (node->type == XML_ELEMENT_NODE){ 
             fprintf(stderr, "%s => %s\n", node->name, xmlNodeGetContent(node));
-            g_hash_table_insert(hash, node->name, xmlNodeGetContent(node));
+            g_hash_table_insert(hash, g_strdup(node->name), g_strdup(xmlNodeGetContent(node)));
         }
     }
     xmlFreeDoc(doc);
     xmlCleanupParser();
-    //g_hash_table_insert(hash, g_strdup("name"),  g_strdup("Xsnow"));
-    //g_hash_table_insert(hash, g_strdup("exec_path"),  g_strdup("/usr/bin/xsnow"));
     return hash;
 }
 
index 76aa4e7..1f9dc5a 100644 (file)
@@ -54,10 +54,9 @@ Russian - Tanya Makova \n \
 }
 /*******************************************************************************/
 GtkWidget *
-create_theme_selector (void){
+create_theme_selector (Animation_WallpaperPrivate *priv){
     GtkWidget *selector;
-    GSList * store = get_list_exthemes();
-          
+    GSList *store = priv->extheme_list;
     selector = hildon_touch_selector_new_text ();
 
     hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), _("Berlin"));
@@ -69,7 +68,6 @@ create_theme_selector (void){
         hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), g_hash_table_lookup(store->data, "name"));
         store = g_slist_next(store);
     }
-
     return selector;
 }
 /*******************************************************************************/
@@ -109,6 +107,9 @@ create_image_button (gint view, DBusConnection *conn_sess){
     GtkWidget *button;
     
     Animation_WallpaperPrivate *priv = g_new0(Animation_WallpaperPrivate, 1);
+    /* Add external themes to priv */
+    priv->extheme_list = get_list_exthemes();
+
     priv->view = view;
     priv->theme_string_parametr1 = NULL;
     priv->dbus_conn_session = conn_sess;
@@ -160,12 +161,14 @@ changed_value_theme_cb (HildonPickerButton *picker, Animation_WallpaperPrivate *
 
 /********************************************************************************/
 GtkWidget *
-create_themes_button (gchar *theme){
+create_themes_button (Animation_WallpaperPrivate *priv){
 
     GtkWidget *button;
     GtkWidget *selector;
+    gchar *theme = priv->theme;
+    gint num=0;
 
-    selector = create_theme_selector();
+    selector = create_theme_selector(priv);
     button = hildon_picker_button_new (HILDON_SIZE_AUTO, HILDON_BUTTON_ARRANGEMENT_VERTICAL);
     hildon_button_set_title (HILDON_BUTTON (button), _("Theme"));
     hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button),
@@ -191,6 +194,17 @@ create_themes_button (gchar *theme){
             hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, 4);
             hildon_button_set_value(HILDON_BUTTON(button), _("Video"));
         }
+        num = 5;
+        GSList *store = priv->extheme_list;
+        while (store){
+            if (!strcmp(theme, g_hash_table_lookup(store->data, "name"))){
+                hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector), 0, num);
+                hildon_button_set_value(HILDON_BUTTON(button), _(g_hash_table_lookup(store->data, "name")));
+                break;
+            }
+            num++;
+            store = g_slist_next(store);
+        }
     }
     
     return button;
@@ -381,7 +395,7 @@ lw_theme_settings(GtkWidget *button, Animation_WallpaperPrivate *priv) {
     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
                                    enable_button, TRUE, TRUE, 5);
     /* Create Theme button */
-    theme_button = create_themes_button(priv->theme);
+    theme_button = create_themes_button(priv);
     g_signal_connect (G_OBJECT (theme_button), "value-changed",  G_CALLBACK (changed_value_theme_cb), priv);
     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),
                                    theme_button, TRUE, TRUE, 5);
@@ -426,7 +440,6 @@ lw_theme_settings(GtkWidget *button, Animation_WallpaperPrivate *priv) {
 
                 if (priv->theme)
                     g_free(priv->theme);
-
                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Berlin")))
                     priv->theme = g_strdup("Berlin");
                 if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _("Modern")))
@@ -444,6 +457,15 @@ lw_theme_settings(GtkWidget *button, Animation_WallpaperPrivate *priv) {
                         priv->theme_string_parametr1 = g_strdup((gchar*)hildon_button_get_value (HILDON_BUTTON(button1)));
                     }
                 }
+                /* Check external themes */
+                GSList *store = priv->extheme_list;
+                while (store){
+                    if (!strcmp(hildon_button_get_value(HILDON_BUTTON (theme_button)), _(g_hash_table_lookup(store->data, "name")))){
+                        priv->theme = g_strdup(g_hash_table_lookup(store->data, "name"));
+                        break;
+                    }
+                    store = g_slist_next(store);
+                }
 
             }