Correctly hide the real Profile button, and assume its name and icon.
authorSalvatore Iovene <salvatore@iovene.com>
Sun, 10 Jan 2010 14:20:27 +0000 (16:20 +0200)
committerSalvatore Iovene <salvatore@iovene.com>
Sun, 10 Jan 2010 14:20:27 +0000 (16:20 +0200)
modules/tweakr-profile-status-menu-widget.c

index 8ccce3e..ade651e 100644 (file)
@@ -173,19 +173,35 @@ _button_clicked (HildonButton *b, TweakrProfileStatusPlugin *plugin)
 }
 
 static void
-_hide_profile_button (GtkWidget *widget,
-                      TweakrProfileStatusPlugin *plugin)
+_hide_profile_button_real (GtkWidget *widget,
+                          TweakrProfileStatusPlugin *plugin)
 {
-    if (HILDON_IS_BUTTON (widget))
+    if (g_strcmp0 (G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS (widget)),
+                   "ProfilesStatusMenuItem")  == 0)
     {
-        const gchar *title;
+        gtk_widget_hide (widget);
+    }
+}
 
-        title = hildon_button_get_title (HILDON_BUTTON (widget));
-        if (g_strcmp0 (title, dgettext ("Hildon", "general_profile")) == 0)
-        {
-            gtk_widget_hide (widget);
-        }
+static void
+_hide_profile_button (TweakrProfileStatusPlugin *plugin, gpointer data)
+{
+    GtkWidget *parent;
+    const gchar *class_name;
+
+    parent = gtk_widget_get_parent (plugin->priv->button);
+    class_name = G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS (G_OBJECT (parent)));
+    while (parent != NULL && g_strcmp0 (class_name, "HDStatusMenuBox") != 0)
+    {
+        parent = gtk_widget_get_parent (parent);
+        if (parent != NULL)
+            class_name =
+                G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS (G_OBJECT (parent)));
     }
+    if (parent != NULL)
+        gtk_container_foreach (GTK_CONTAINER (parent),
+                               (GtkCallback) _hide_profile_button_real,
+                               plugin);
 }
 
 static void
@@ -193,13 +209,12 @@ _create_main_button (TweakrProfileStatusPlugin *plugin)
 {
     gchar *current;
     GtkWidget *image;
-    GtkWidget *container;
 
     plugin->priv->button = hildon_button_new
         (HILDON_SIZE_AUTO | HILDON_SIZE_FINGER_HEIGHT,
          HILDON_BUTTON_ARRANGEMENT_VERTICAL);
     hildon_button_set_title (HILDON_BUTTON (plugin->priv->button),
-                             _("Profile preset"));
+                             dgettext ("osso-profiles", "profi_ti_menu_plugin"));
 
     current = gconf_client_get_string (plugin->priv->gconf,
                                        GCONF_PATH "/current-preset",
@@ -209,7 +224,7 @@ _create_main_button (TweakrProfileStatusPlugin *plugin)
     g_free (current);
     gtk_button_set_alignment (GTK_BUTTON (plugin->priv->button), 0.0f, 0.5f);
 
-    image = gtk_image_new_from_icon_name ("control_tweakr",
+    image = gtk_image_new_from_icon_name ("general_profile",
                                           GTK_ICON_SIZE_BUTTON);
     hildon_button_set_image (HILDON_BUTTON (plugin->priv->button), image);
 
@@ -219,11 +234,12 @@ _create_main_button (TweakrProfileStatusPlugin *plugin)
     gtk_container_add (GTK_CONTAINER (plugin), plugin->priv->button);
 
     /* Now go ahead and hide the real Profile button. Nasty, I know. */
-    container = gtk_widget_get_ancestor (plugin->priv->button,
-                                         GTK_TYPE_CONTAINER);
-    gtk_container_foreach (GTK_CONTAINER (container),
-                           (GtkCallback) _hide_profile_button,
-                           plugin);
+    if (GTK_WIDGET_REALIZED (plugin))
+        _hide_profile_button (plugin, NULL);
+    else
+        g_signal_connect (plugin, "realize",
+                          G_CALLBACK (_hide_profile_button), NULL);
+
     gtk_widget_show_all (plugin->priv->button);
 }