]> Pileus Git - ~andy/gtk/blobdiff - gtk/tests/builder.c
filechooserbutton: Do not propagate state from the dialog unless it is active
[~andy/gtk] / gtk / tests / builder.c
index 1422dfc92c4f9273077fdb86566f3bd201aca58c..e924a9a61b027accf9eb3e2c2a4883a3c5983872 100644 (file)
 #include <gtk/gtk.h>
 #include <gdk/gdkkeysyms.h>
 
+/* exported for GtkBuilder */
+void signal_normal (GtkWindow *window, GParamSpec spec);
+void signal_after (GtkWindow *window, GParamSpec spec);
+void signal_object (GtkButton *button, GParamSpec spec);
+void signal_object_after (GtkButton *button, GParamSpec spec);
+void signal_first (GtkButton *button, GParamSpec spec);
+void signal_second (GtkButton *button, GParamSpec spec);
+void signal_extra (GtkButton *button, GParamSpec spec);
+void signal_extra2 (GtkButton *button, GParamSpec spec);
+
 /* Copied from gtkiconfactory.c; keep in sync! */
 struct _GtkIconSet
 {
@@ -1145,7 +1155,6 @@ test_treeview_column (void)
   GtkTreeViewColumn *column;
   GList *renderers;
   GObject *renderer;
-  gchar *text;
 
   builder = builder_new_from_string (buffer, -1, NULL);
   treeview = gtk_builder_get_object (builder, "treeview1");
@@ -1162,25 +1171,9 @@ test_treeview_column (void)
   g_assert (GTK_IS_CELL_RENDERER_TEXT (renderer));
   g_list_free (renderers);
 
-  gtk_widget_realize (GTK_WIDGET (treeview));
-
-  renderer = gtk_builder_get_object (builder, "renderer1");
-  g_object_get (renderer, "text", &text, NULL);
-  g_assert (text);
-  g_assert (strcmp (text, "25") == 0);
-  g_free (text);
-  
-  renderer = gtk_builder_get_object (builder, "renderer2");
-  g_object_get (renderer, "text", &text, NULL);
-  g_assert (text);
-  g_assert (strcmp (text, "John") == 0);
-  g_free (text);
-
-  gtk_widget_unrealize (GTK_WIDGET (treeview));
-
   window = gtk_builder_get_object (builder, "window1");
   gtk_widget_destroy (GTK_WIDGET (window));
-  
+
   g_object_unref (builder);
 }
 
@@ -1218,22 +1211,13 @@ test_icon_view (void)
     "    </child>"
     "  </object>"
     "</interface>";
-  GObject *window, *iconview, *renderer;
-  gchar *text;
+  GObject *window, *iconview;
   
   builder = builder_new_from_string (buffer, -1, NULL);
   iconview = gtk_builder_get_object (builder, "iconview1");
   g_assert (iconview);
   g_assert (GTK_IS_ICON_VIEW (iconview));
 
-  gtk_widget_realize (GTK_WIDGET (iconview));
-
-  renderer = gtk_builder_get_object (builder, "renderer1");
-  g_object_get (renderer, "text", &text, NULL);
-  g_assert (text);
-  g_assert (strcmp (text, "test") == 0);
-  g_free (text);
-    
   window = gtk_builder_get_object (builder, "window1");
   gtk_widget_destroy (GTK_WIDGET (window));
   g_object_unref (builder);
@@ -1282,27 +1266,11 @@ test_combo_box (void)
     "    </child>"
     "  </object>"
     "</interface>";
-  GObject *window, *combobox, *renderer;
-  gchar *text;
+  GObject *window, *combobox;
 
   builder = builder_new_from_string (buffer, -1, NULL);
   combobox = gtk_builder_get_object (builder, "combobox1");
   g_assert (combobox);
-  gtk_widget_realize (GTK_WIDGET (combobox));
-
-  renderer = gtk_builder_get_object (builder, "renderer2");
-  g_assert (renderer);
-  g_object_get (renderer, "text", &text, NULL);
-  g_assert (text);
-  g_assert (strcmp (text, "Bar") == 0);
-  g_free (text);
-
-  renderer = gtk_builder_get_object (builder, "renderer1");
-  g_assert (renderer);
-  g_object_get (renderer, "text", &text, NULL);
-  g_assert (text);
-  g_assert (strcmp (text, "2") == 0);
-  g_free (text);
 
   window = gtk_builder_get_object (builder, "window1");
   gtk_widget_destroy (GTK_WIDGET (window));
@@ -1419,8 +1387,6 @@ test_cell_view (void)
   GObject *model, *window;
   GtkTreePath *path;
   GList *renderers;
-  GObject *renderer;
-  gchar *text;
   
   builder = builder_new_from_string (buffer, -1, NULL);
   cellview = gtk_builder_get_object (builder, "cellview1");
@@ -1437,18 +1403,9 @@ test_cell_view (void)
   renderers = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (cellview));
   g_assert (renderers);
   g_assert (g_list_length (renderers) == 1);
-  
-  gtk_widget_realize (GTK_WIDGET (cellview));
-
-  renderer = g_list_nth_data (renderers, 0);
-  g_list_free (renderers);
-  g_assert (renderer);
-  g_object_get (renderer, "text", &text, NULL);
-  g_assert (strcmp (text, "test") == 0);
-  g_free (text);
-  gtk_tree_path_free (path);
 
   window = gtk_builder_get_object (builder, "window1");
+  g_assert (window);
   gtk_widget_destroy (GTK_WIDGET (window));
   
   g_object_unref (builder);
@@ -2524,7 +2481,6 @@ static void
 test_message_area (void)
 {
   GtkBuilder *builder;
-  GError *error;
   GObject *obj, *obj1;
   const gchar buffer[] =
     "<interface>"
@@ -2535,6 +2491,9 @@ test_message_area (void)
     "          <object class=\"GtkLabel\" id=\"content\">"
     "            <property name=\"label\" translatable=\"yes\">Message</property>"
     "          </object>"
+    "          <packing>"
+    "            <property name='expand'>False</property>"
+    "          </packing>"
     "        </child>"
     "      </object>"
     "    </child>"
@@ -2554,9 +2513,7 @@ test_message_area (void)
     "  </object>"
     "</interface>";
 
-  error = NULL;
   builder = builder_new_from_string (buffer, -1, NULL);
-  g_assert (error == NULL);
   obj = gtk_builder_get_object (builder, "infobar1");
   g_assert (GTK_IS_INFO_BAR (obj));
   obj1 = gtk_builder_get_object (builder, "content");
@@ -2643,6 +2600,127 @@ test_gmenu (void)
   g_object_unref (builder);
 }
 
+static void
+test_level_bar (void)
+{
+  GtkBuilder *builder;
+  GError *error = NULL;
+  GObject *obj, *obj1;
+  const gchar buffer1[] =
+    "<interface>"
+    "  <object class=\"GtkWindow\" id=\"window\">"
+    "    <child>"
+    "      <object class=\"GtkLevelBar\" id=\"levelbar\">"
+    "        <property name=\"value\">4.70</property>"
+    "        <property name=\"min-value\">2</property>"
+    "        <property name=\"max-value\">5</property>"
+    "        <offsets>"
+    "          <offset name=\"low\" value=\"2.25\"/>"
+    "          <offset name=\"custom\" value=\"3\"/>"
+    "          <offset name=\"high\" value=\"3\"/>"
+    "        </offsets>"
+    "      </object>"
+    "    </child>"
+    "  </object>"
+    "</interface>";
+  const gchar buffer2[] =
+    "<interface>"
+    "  <object class=\"GtkLevelBar\" id=\"levelbar\">"
+    "    <offsets>"
+    "      <offset name=\"low\" bogus_attr=\"foo\"/>"
+    "    </offsets>"
+    "  </object>"
+    "</interface>";
+  const gchar buffer3[] =
+    "<interface>"
+    "  <object class=\"GtkLevelBar\" id=\"levelbar\">"
+    "    <offsets>"
+    "      <offset name=\"low\" value=\"1\"/>"
+    "    </offsets>"
+    "    <bogus_tag>"
+    "    </bogus_tag>"
+    "  </object>"
+    "</interface>";
+
+  builder = gtk_builder_new ();
+  gtk_builder_add_from_string (builder, buffer1, -1, &error);
+  g_assert (error == NULL);
+
+  obj = gtk_builder_get_object (builder, "window");
+  g_assert (GTK_IS_WINDOW (obj));
+  obj1 = gtk_builder_get_object (builder, "levelbar");
+  g_assert (GTK_IS_LEVEL_BAR (obj1));
+  g_object_unref (builder);
+
+  error = NULL;
+  builder = gtk_builder_new ();
+  gtk_builder_add_from_string (builder, buffer2, -1, &error);
+  g_assert (g_error_matches (error,
+                             GTK_BUILDER_ERROR,
+                             GTK_BUILDER_ERROR_INVALID_ATTRIBUTE));
+  g_error_free (error);
+  g_object_unref (builder);
+
+  error = NULL;
+  builder = gtk_builder_new ();
+  gtk_builder_add_from_string (builder, buffer3, -1, &error);
+  g_assert (g_error_matches (error,
+                             GTK_BUILDER_ERROR,
+                             GTK_BUILDER_ERROR_UNHANDLED_TAG));
+  g_error_free (error);
+  g_object_unref (builder);
+}
+
+static GObject *external_object = NULL, *external_object_swapped = NULL;
+
+void
+on_button_clicked (GtkButton *button, GObject *data)
+{
+  external_object = data;
+}
+
+void
+on_button_clicked_swapped (GObject *data, GtkButton *button)
+{
+  external_object_swapped = data;
+}
+
+static void
+test_expose_object (void)
+{
+  GtkBuilder *builder;
+  GError *error = NULL;
+  GtkWidget *image;
+  GObject *obj;
+  const gchar buffer[] =
+    "<interface>"
+    "  <object class=\"GtkButton\" id=\"button\">"
+    "    <property name=\"image\">external_image</property>"
+    "    <signal name=\"clicked\" handler=\"on_button_clicked\" object=\"builder\" swapped=\"no\"/>"
+    "    <signal name=\"clicked\" handler=\"on_button_clicked_swapped\" object=\"builder\"/>"
+    "  </object>"
+    "</interface>";
+
+  image = gtk_image_new ();
+  builder = gtk_builder_new ();
+  gtk_builder_expose_object (builder, "external_image", G_OBJECT (image));
+  gtk_builder_expose_object (builder, "builder", G_OBJECT (builder));
+  gtk_builder_add_from_string (builder, buffer, -1, &error);
+  g_assert (error == NULL);
+
+  obj = gtk_builder_get_object (builder, "button");
+  g_assert (GTK_IS_BUTTON (obj));
+
+  g_assert (gtk_button_get_image (GTK_BUTTON (obj)) == image);
+
+  /* Connect signals and fake clicked event */
+  gtk_builder_connect_signals (builder, NULL);
+  gtk_button_clicked (GTK_BUTTON (obj));
+
+  g_assert (external_object == G_OBJECT (builder));
+  g_assert (external_object_swapped == G_OBJECT (builder));
+}
+
 int
 main (int argc, char **argv)
 {
@@ -2690,6 +2768,9 @@ main (int argc, char **argv)
   g_test_add_func ("/Builder/MessageArea", test_message_area);
   g_test_add_func ("/Builder/MessageDialog", test_message_dialog);
   g_test_add_func ("/Builder/GMenu", test_gmenu);
+  g_test_add_func ("/Builder/LevelBar", test_level_bar);
+  g_test_add_func ("/Builder/Expose Object", test_expose_object);
 
   return g_test_run();
 }
+