Grabbed the focus in the HildonTextView button press callback
[hildon] / examples / hildon-entry-example.c
index cb6bedc..cdb718d 100644 (file)
  */
 
 #include                                        <gtk/gtk.h>
-#include                                        <hildon.h>
+#include                                        <hildon/hildon.h>
+
+HildonEntry *mainentry;
+
+static void
+set_text_button_clicked                         (GtkButton   *button,
+                                                 HildonEntry *entry)
+{
+    hildon_entry_set_text (mainentry, hildon_entry_get_text (entry));
+}
 
 static void
-reset_entry                                     (HildonEntry *entry)
+set_placeholder_button_clicked                  (GtkButton   *button,
+                                                 HildonEntry *entry)
 {
-    hildon_entry_set_placeholder (entry, "Placeholder text");
+    hildon_entry_set_placeholder (mainentry, hildon_entry_get_text (entry));
 }
 
 static void
@@ -50,47 +60,64 @@ main                                            (int    argc,
 {
     GtkWidget *win;
     GtkWidget *label;
-    GtkWidget *entry;
-    GtkWidget *button;
-    GtkWidget *label3;
-    GtkWidget *label2;
+    GtkWidget *textentry, *textbutton, *texthbox;
+    GtkWidget *placeholderentry, *placeholderbutton, *placeholderhbox;
     GtkBox *vbox;
 
-    gtk_init (&argc, &argv);
-
-    gtk_rc_parse_string ("style \"placeholder\" {\n"
-                         "text[NORMAL] = \"#C03030\""
-                         "}\n"
-                         "widget \"*.hildon-entry-placeholder\" style \"placeholder\"\n");
+    hildon_gtk_init (&argc, &argv);
 
+    /* Window and vbox to pack everything */
     win = hildon_stackable_window_new ();
     vbox = GTK_BOX (gtk_vbox_new (FALSE, 10));
 
-    label = gtk_label_new ("HildonEntry example");
-    entry = hildon_entry_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH);
-    button = hildon_gtk_button_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH);
-    label2 = gtk_label_new ("Contents of the entry:");
-    label3 = gtk_label_new (NULL);
+    /* Entry to modify the text of the main HildonEntry */
+    textentry = hildon_entry_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH);
+    textbutton = hildon_gtk_button_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH);
+    gtk_button_set_label (GTK_BUTTON (textbutton), "Set entry text");
+    texthbox = gtk_hbox_new (FALSE, 10);
 
-    gtk_button_set_label (GTK_BUTTON (button), "Reset entry");
-    reset_entry (HILDON_ENTRY (entry));
-    text_changed (HILDON_ENTRY (entry), NULL, GTK_LABEL (label3));
+    /* Entry to modify the placeholder of the main HildonEntry */
+    placeholderentry = hildon_entry_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH);
+    placeholderbutton = hildon_gtk_button_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH);
+    gtk_button_set_label (GTK_BUTTON (placeholderbutton), "Set entry placeholder");
+    placeholderhbox = gtk_hbox_new (FALSE, 10);
 
+    /* Main HildonEntry - this is the one showcased in this example */
+    mainentry = HILDON_ENTRY (hildon_entry_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH));
+    hildon_entry_set_placeholder (mainentry, "This is a placeholder - change using the buttons above");
+
+    /* This label is used to show the contents -not the placeholder- of the HildonEntry */
+    label = gtk_label_new (NULL);
+
+    /* Pack all widgets */
+    gtk_box_pack_start (GTK_BOX (texthbox), textentry, TRUE, TRUE, 0);
+    gtk_box_pack_start (GTK_BOX (texthbox), textbutton, FALSE, FALSE, 0);
+
+    gtk_box_pack_start (GTK_BOX (placeholderhbox), placeholderentry, TRUE, TRUE, 0);
+    gtk_box_pack_start (GTK_BOX (placeholderhbox), placeholderbutton, FALSE, FALSE, 0);
+
+    gtk_box_pack_start (vbox, texthbox, FALSE, FALSE, 0);
+    gtk_box_pack_start (vbox, placeholderhbox, FALSE, FALSE, 0);
+    gtk_box_pack_start (vbox, GTK_WIDGET (mainentry), FALSE, FALSE, 0);
+    gtk_box_pack_start (vbox, gtk_label_new ("Contents of the entry:"), TRUE, TRUE, 0);
     gtk_box_pack_start (vbox, label, TRUE, TRUE, 0);
-    gtk_box_pack_start (vbox, button, FALSE, FALSE, 0);
-    gtk_box_pack_start (vbox, entry, FALSE, FALSE, 0);
-    gtk_box_pack_start (vbox, label2, TRUE, TRUE, 0);
-    gtk_box_pack_start (vbox, label3, TRUE, TRUE, 0);
 
     gtk_container_set_border_width (GTK_CONTAINER (win), 20);
     gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (vbox));
 
+    /* Connect signals */
     g_signal_connect (win, "destroy", G_CALLBACK (gtk_main_quit), NULL);
-    g_signal_connect (entry, "notify::text", G_CALLBACK (text_changed), label3);
-    g_signal_connect_swapped (button, "clicked", G_CALLBACK (reset_entry), entry);
+    g_signal_connect (mainentry, "notify::text", G_CALLBACK (text_changed), label);
+    g_signal_connect (textbutton, "clicked",
+                      G_CALLBACK (set_text_button_clicked), textentry);
+    g_signal_connect (placeholderbutton, "clicked",
+                      G_CALLBACK (set_placeholder_button_clicked), placeholderentry);
 
-    gtk_widget_show_all (win);
+    /* Set the initial state of the label */
+    text_changed (mainentry, NULL, GTK_LABEL (label));
 
+    /* Run example */
+    gtk_widget_show_all (win);
     gtk_main ();
 
     return 0;