Bump version to 0.0.16.
[tweakr] / modules / tweakr-profile-status-menu-widget.c
index ade651e..84bec28 100644 (file)
@@ -98,18 +98,25 @@ _preset_clicked (HildonButton *button, TweakrProfileStatusPlugin *plugin)
     const gchar *path = g_object_get_data (G_OBJECT (button), "path");
     gchar *basename;
 
-    entries = gconf_client_all_entries (plugin->priv->gconf, path, NULL);
+    if (strcmp (path, "silent") == 0)
+    {
+        profile_set_profile ("silent");
+    }
+    else
+    {
+        entries = gconf_client_all_entries (plugin->priv->gconf, path, NULL);
 
-    g_slist_foreach (entries, (GFunc) _process_entry, plugin);
-    g_slist_free (entries);
+        g_slist_foreach (entries, (GFunc) _process_entry, plugin);
+        g_slist_free (entries);
 
-    profile_set_profile ("general");
+        profile_set_profile ("general");
 
-    basename = g_path_get_basename (path);
-    hildon_button_set_value (HILDON_BUTTON (plugin->priv->button), basename);
-    gconf_client_set_string (plugin->priv->gconf,
-                             GCONF_PATH "/current-preset", basename, NULL);
-    g_free (basename);
+        basename = g_path_get_basename (path);
+        hildon_button_set_value (HILDON_BUTTON (plugin->priv->button), basename);
+        gconf_client_set_string (plugin->priv->gconf,
+                                 GCONF_PATH "/current-preset", basename, NULL);
+        g_free (basename);
+    }
 
     gtk_dialog_response (GTK_DIALOG (plugin->priv->dialog), GTK_RESPONSE_OK);
     hildon_banner_show_information (NULL, NULL,
@@ -161,10 +168,25 @@ _button_clicked (HildonButton *b, TweakrProfileStatusPlugin *plugin)
     presets = gconf_client_all_dirs (plugin->priv->gconf, GCONF_PATH, NULL);
 
     g_object_set (G_OBJECT (panarea), "height-request",
-                  MIN (350, g_slist_length (presets) * 70), NULL);
+                  MIN (350, (g_slist_length (presets) + 1) * 70), NULL);
+    /*                        For the hardcoded Silent: ^ */
 
     g_slist_foreach (presets, (GFunc) _add_preset, plugin);
 
+    /* Add hard coded Silent profile. */
+    {
+        GtkWidget *button;
+
+        button = hildon_button_new_with_text
+            (HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL,
+             dgettext("osso-profiles", "profi_bd_silent"), NULL);
+        gtk_button_set_alignment (GTK_BUTTON (button), 0.0f, 0.5f);
+        gtk_box_pack_start (GTK_BOX (plugin->priv->box), button, FALSE, FALSE, 0);
+        g_object_set_data_full (G_OBJECT (button), "path", "silent", NULL);
+        g_signal_connect (button, "clicked", G_CALLBACK (_preset_clicked),
+                          plugin);
+    }
+
     gtk_widget_show_all (GTK_DIALOG (plugin->priv->dialog)->vbox);
     ret = gtk_dialog_run (GTK_DIALOG (plugin->priv->dialog));
     gtk_widget_destroy (plugin->priv->dialog);
@@ -173,6 +195,17 @@ _button_clicked (HildonButton *b, TweakrProfileStatusPlugin *plugin)
 }
 
 static void
+_reshow_profile_button_real (GtkWidget *widget,
+                             TweakrProfileStatusPlugin *plugin)
+{
+    if (g_strcmp0 (G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS (widget)),
+                   "ProfilesStatusMenuItem")  == 0)
+    {
+        gtk_widget_show (widget);
+    }
+}
+
+static void
 _hide_profile_button_real (GtkWidget *widget,
                           TweakrProfileStatusPlugin *plugin)
 {
@@ -183,8 +216,8 @@ _hide_profile_button_real (GtkWidget *widget,
     }
 }
 
-static void
-_hide_profile_button (TweakrProfileStatusPlugin *plugin, gpointer data)
+static GtkWidget *
+_find_hds_container (TweakrProfileStatusPlugin *plugin)
 {
     GtkWidget *parent;
     const gchar *class_name;
@@ -198,8 +231,30 @@ _hide_profile_button (TweakrProfileStatusPlugin *plugin, gpointer data)
             class_name =
                 G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS (G_OBJECT (parent)));
     }
-    if (parent != NULL)
-        gtk_container_foreach (GTK_CONTAINER (parent),
+
+    return parent;
+}
+
+static void
+_reshow_profile_button (TweakrProfileStatusPlugin *plugin, gpointer data)
+{
+    GtkWidget *container;
+
+    container = _find_hds_container (plugin);
+    if (container != NULL)
+        gtk_container_foreach (GTK_CONTAINER (container),
+                               (GtkCallback) _reshow_profile_button_real,
+                               plugin);
+}
+
+static void
+_hide_profile_button (TweakrProfileStatusPlugin *plugin, gpointer data)
+{
+    GtkWidget *container;
+
+    container = _find_hds_container (plugin);
+    if (container != NULL)
+        gtk_container_foreach (GTK_CONTAINER (container),
                                (GtkCallback) _hide_profile_button_real,
                                plugin);
 }
@@ -227,7 +282,8 @@ _create_main_button (TweakrProfileStatusPlugin *plugin)
     image = gtk_image_new_from_icon_name ("general_profile",
                                           GTK_ICON_SIZE_BUTTON);
     hildon_button_set_image (HILDON_BUTTON (plugin->priv->button), image);
-
+    hildon_button_set_style (HILDON_BUTTON (plugin->priv->button),
+                             HILDON_BUTTON_STYLE_PICKER);
     g_signal_connect (G_OBJECT (plugin->priv->button), "clicked",
                       G_CALLBACK (_button_clicked), plugin);
 
@@ -240,6 +296,10 @@ _create_main_button (TweakrProfileStatusPlugin *plugin)
         g_signal_connect (plugin, "realize",
                           G_CALLBACK (_hide_profile_button), NULL);
 
+    g_signal_connect (plugin, "unrealize",
+                      G_CALLBACK (_reshow_profile_button), NULL);
+
+
     gtk_widget_show_all (plugin->priv->button);
 }