]> Pileus Git - ~andy/gtk/blobdiff - tests/testgtk.c
Really create a native window when getting xid
[~andy/gtk] / tests / testgtk.c
index 3607cf7c643822708ec9e38dfb44c2722510708a..568bb1a54c11f724c284a6b6018e0bb59f034aba 100644 (file)
@@ -26,7 +26,7 @@
 
 #undef GTK_DISABLE_DEPRECATED
 
-#include <config.h>
+#include "config.h"
 
 #undef G_LOG_DOMAIN
 
@@ -1739,7 +1739,7 @@ create_statusbar (GtkWidget *widget)
                        G_CALLBACK (statusbar_popped),
                        NULL);
 
-      button = gtk_widget_new (gtk_button_get_type (),
+      button = g_object_new (gtk_button_get_type (),
                               "label", "push something",
                               "visible", TRUE,
                               "parent", box2,
@@ -1748,7 +1748,7 @@ create_statusbar (GtkWidget *widget)
                        "signal::clicked", statusbar_push, statusbar,
                        NULL);
 
-      button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
+      button = g_object_connect (g_object_new (gtk_button_get_type (),
                                                 "label", "pop",
                                                 "visible", TRUE,
                                                 "parent", box2,
@@ -1756,7 +1756,7 @@ create_statusbar (GtkWidget *widget)
                                 "signal_after::clicked", statusbar_pop, statusbar,
                                 NULL);
 
-      button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
+      button = g_object_connect (g_object_new (gtk_button_get_type (),
                                                 "label", "steal #4",
                                                 "visible", TRUE,
                                                 "parent", box2,
@@ -1764,7 +1764,7 @@ create_statusbar (GtkWidget *widget)
                                 "signal_after::clicked", statusbar_steal, statusbar,
                                 NULL);
 
-      button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
+      button = g_object_connect (g_object_new (gtk_button_get_type (),
                                                 "label", "test contexts",
                                                 "visible", TRUE,
                                                 "parent", box2,
@@ -1772,7 +1772,7 @@ create_statusbar (GtkWidget *widget)
                                 "swapped_signal_after::clicked", statusbar_contexts, statusbar,
                                 NULL);
 
-      button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
+      button = g_object_connect (g_object_new (gtk_button_get_type (),
                                                 "label", "push something long",
                                                 "visible", TRUE,
                                                 "parent", box2,
@@ -2401,6 +2401,7 @@ static void
 create_gridded_geometry (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
+  gpointer window_ptr;
   GtkWidget *entry;
   GtkWidget *label;
 
@@ -2424,7 +2425,8 @@ create_gridded_geometry (GtkWidget *widget)
 
       g_signal_connect (window, "response",
                        G_CALLBACK (gridded_geometry_response), entry);
-      g_object_add_weak_pointer (G_OBJECT (window), (gpointer) &window);
+      window_ptr = &window;
+      g_object_add_weak_pointer (G_OBJECT (window), window_ptr);
 
       gtk_widget_show_all (window);
     }
@@ -2847,7 +2849,7 @@ create_get_image (GtkWidget *widget)
 
       vbox = gtk_vbox_new (FALSE, 3);
 
-      snap = gtk_widget_new (GTK_TYPE_IMAGE, NULL);
+      snap = g_object_new (GTK_TYPE_IMAGE, NULL);
 
       gid->snap = snap;
 
@@ -3656,7 +3658,7 @@ create_saved_position (GtkWidget *widget)
       GtkWidget *label;
       GtkWidget *any;
 
-      window = g_object_connect (gtk_widget_new (GTK_TYPE_WINDOW,
+      window = g_object_connect (g_object_new (GTK_TYPE_WINDOW,
                                                 "type", GTK_WINDOW_TOPLEVEL,
                                                 "title", "Saved Position",
                                                 NULL),
@@ -3678,13 +3680,13 @@ create_saved_position (GtkWidget *widget)
       gtk_container_add (GTK_CONTAINER (window), main_vbox);
 
       vbox =
-       gtk_widget_new (gtk_vbox_get_type (),
+       g_object_new (gtk_vbox_get_type (),
                        "GtkBox::homogeneous", FALSE,
                        "GtkBox::spacing", 5,
                        "GtkContainer::border_width", 10,
                        "GtkWidget::parent", main_vbox,
                        "GtkWidget::visible", TRUE,
-                       "child", g_object_connect (gtk_widget_new (GTK_TYPE_TOGGLE_BUTTON,
+                       "child", g_object_connect (g_object_new (GTK_TYPE_TOGGLE_BUTTON,
                                                                   "label", "Stop Events",
                                                                   "active", FALSE,
                                                                   "visible", TRUE,
@@ -3718,7 +3720,7 @@ create_saved_position (GtkWidget *widget)
       g_object_set_data (G_OBJECT (window), "y", y_label);
 
       any =
-       gtk_widget_new (gtk_hseparator_get_type (),
+       g_object_new (gtk_hseparator_get_type (),
                        "GtkWidget::visible", TRUE,
                        NULL);
       gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
@@ -3874,7 +3876,7 @@ create_tooltips (GtkWidget *widget)
   if (!window)
     {
       window =
-       gtk_widget_new (gtk_window_get_type (),
+       g_object_new (gtk_window_get_type (),
                        "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
                        "GtkContainer::border_width", 0,
                        "GtkWindow::title", "Tooltips",
@@ -3926,7 +3928,7 @@ create_tooltips (GtkWidget *widget)
                            "Hi msw! ;)");
 
       box3 =
-       gtk_widget_new (gtk_vbox_get_type (),
+       g_object_new (gtk_vbox_get_type (),
                        "homogeneous", FALSE,
                        "spacing", 5,
                        "border_width", 5,
@@ -3936,7 +3938,7 @@ create_tooltips (GtkWidget *widget)
       tips_query = gtk_tips_query_new ();
 
       button =
-       gtk_widget_new (gtk_button_get_type (),
+       g_object_new (gtk_button_get_type (),
                        "label", "[?]",
                        "visible", TRUE,
                        "parent", box3,
@@ -3960,7 +3962,7 @@ create_tooltips (GtkWidget *widget)
                    "caller", button,
                    NULL);
       
-      frame = gtk_widget_new (gtk_frame_get_type (),
+      frame = g_object_new (gtk_frame_get_type (),
                              "label", "ToolTips Inspector",
                              "label_xalign", (double) 0.5,
                              "border_width", 0,
@@ -4779,6 +4781,7 @@ static void
 create_key_lookup (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
+  gpointer window_ptr;
 
   if (!window)
     {
@@ -4826,8 +4829,9 @@ create_key_lookup (GtkWidget *widget)
       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), button, FALSE, FALSE, 0);
       button = accel_button_new (accel_group, "Button 15", "<Shift><Mod4>b");
       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), button, FALSE, FALSE, 0);
-      
-      g_object_add_weak_pointer (G_OBJECT (window), (gpointer) &window);
+
+      window_ptr = &window;
+      g_object_add_weak_pointer (G_OBJECT (window), window_ptr);
       g_signal_connect (window, "response", G_CALLBACK (gtk_object_destroy), NULL);
 
       gtk_widget_show_all (window);
@@ -5189,6 +5193,65 @@ entry_toggle_sensitive (GtkWidget *checkbutton,
    gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
 }
 
+static gboolean
+entry_progress_timeout (gpointer data)
+{
+  if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (data), "progress-pulse")))
+    {
+      gtk_entry_progress_pulse (GTK_ENTRY (data));
+    }
+  else
+    {
+      gdouble fraction;
+
+      fraction = gtk_entry_get_progress_fraction (GTK_ENTRY (data));
+
+      fraction += 0.05;
+      if (fraction > 1.0001)
+        fraction = 0.0;
+
+      gtk_entry_set_progress_fraction (GTK_ENTRY (data), fraction);
+    }
+
+  return TRUE;
+}
+
+static void
+entry_remove_timeout (gpointer data)
+{
+  g_source_remove (GPOINTER_TO_UINT (data));
+}
+
+static void
+entry_toggle_progress (GtkWidget *checkbutton,
+                       GtkWidget *entry)
+{
+  if (GTK_TOGGLE_BUTTON (checkbutton)->active)
+    {
+      guint timeout = gdk_threads_add_timeout (100,
+                                               entry_progress_timeout,
+                                               entry);
+      g_object_set_data_full (G_OBJECT (entry), "timeout-id",
+                              GUINT_TO_POINTER (timeout),
+                              entry_remove_timeout);
+    }
+  else
+    {
+      g_object_set_data (G_OBJECT (entry), "timeout-id",
+                         GUINT_TO_POINTER (0));
+
+      gtk_entry_set_progress_fraction (GTK_ENTRY (entry), 0.0);
+    }
+}
+
+static void
+entry_toggle_pulse (GtkWidget *checkbutton,
+                    GtkWidget *entry)
+{
+  g_object_set_data (G_OBJECT (entry), "progress-pulse",
+                     GINT_TO_POINTER (GTK_TOGGLE_BUTTON (checkbutton)->active));
+}
+
 static void
 entry_props_clicked (GtkWidget *button,
                     GObject   *entry)
@@ -5207,6 +5270,7 @@ create_entry (GtkWidget *widget)
   GtkWidget *hbox;
   GtkWidget *has_frame_check;
   GtkWidget *sensitive_check;
+  GtkWidget *progress_check;
   GtkWidget *entry, *cb;
   GtkWidget *button;
   GtkWidget *separator;
@@ -5277,7 +5341,17 @@ create_entry (GtkWidget *widget)
       g_signal_connect (has_frame_check, "toggled",
                        G_CALLBACK (entry_toggle_frame), entry);
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (has_frame_check), TRUE);
-      
+
+      progress_check = gtk_check_button_new_with_label("Show Progress");
+      gtk_box_pack_start (GTK_BOX (box2), progress_check, FALSE, TRUE, 0);
+      g_signal_connect (progress_check, "toggled",
+                       G_CALLBACK (entry_toggle_progress), entry);
+
+      progress_check = gtk_check_button_new_with_label("Pulse Progress");
+      gtk_box_pack_start (GTK_BOX (box2), progress_check, FALSE, TRUE, 0);
+      g_signal_connect (progress_check, "toggled",
+                       G_CALLBACK (entry_toggle_pulse), entry);
+
       separator = gtk_hseparator_new ();
       gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
 
@@ -6169,7 +6243,7 @@ create_cursors (GtkWidget *widget)
       gtk_container_add (GTK_CONTAINER (window), main_vbox);
 
       vbox =
-       gtk_widget_new (gtk_vbox_get_type (),
+       g_object_new (gtk_vbox_get_type (),
                        "GtkBox::homogeneous", FALSE,
                        "GtkBox::spacing", 5,
                        "GtkContainer::border_width", 10,
@@ -6216,7 +6290,7 @@ create_cursors (GtkWidget *widget)
       gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
 
       frame =
-       gtk_widget_new (gtk_frame_get_type (),
+       g_object_new (gtk_frame_get_type (),
                        "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
                        "GtkFrame::label_xalign", 0.5,
                        "GtkFrame::label", "Cursor Area",
@@ -6243,7 +6317,7 @@ create_cursors (GtkWidget *widget)
                        G_CALLBACK (set_cursor),
                        darea);
 
-      label = gtk_widget_new (GTK_TYPE_LABEL,
+      label = g_object_new (GTK_TYPE_LABEL,
                              "visible", TRUE,
                              "label", "XXX",
                              "parent", vbox,
@@ -6254,7 +6328,7 @@ create_cursors (GtkWidget *widget)
       g_object_set_data (G_OBJECT (spinner), "user_data", label);
 
       any =
-       gtk_widget_new (gtk_hseparator_get_type (),
+       g_object_new (gtk_hseparator_get_type (),
                        "GtkWidget::visible", TRUE,
                        NULL);
       gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
@@ -8208,6 +8282,40 @@ flipping_toggled_cb (GtkWidget *widget, gpointer data)
   gtk_widget_set_default_direction (new_direction);
 }
 
+static void
+orientable_toggle_orientation (GtkOrientable *orientable)
+{
+  GtkOrientation orientation;
+
+  orientation = gtk_orientable_get_orientation (orientable);
+  gtk_orientable_set_orientation (orientable,
+                                  orientation == GTK_ORIENTATION_HORIZONTAL ?
+                                  GTK_ORIENTATION_VERTICAL :
+                                  GTK_ORIENTATION_HORIZONTAL);
+
+  if (GTK_IS_CONTAINER (orientable))
+    {
+      GList *children;
+      GList *child;
+
+      children = gtk_container_get_children (GTK_CONTAINER (orientable));
+
+      for (child = children; child; child = child->next)
+        {
+          if (GTK_IS_ORIENTABLE (child->data))
+            orientable_toggle_orientation (child->data);
+        }
+
+      g_list_free (children);
+    }
+}
+
+void
+flipping_orientation_toggled_cb (GtkWidget *widget, gpointer data)
+{
+  orientable_toggle_orientation (GTK_ORIENTABLE (GTK_DIALOG (gtk_widget_get_toplevel (widget))->vbox));
+}
+
 static void
 set_direction_recurse (GtkWidget *widget,
                       gpointer   data)
@@ -8261,9 +8369,24 @@ create_flipping (GtkWidget *widget)
       gtk_window_set_title (GTK_WINDOW (window), "Bidirectional Flipping");
 
       check_button = gtk_check_button_new_with_label ("Right-to-left global direction");
+      gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
+      gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
+                         check_button, TRUE, TRUE, 0);
+
+      if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
+
+      g_signal_connect (check_button, "toggled",
+                       G_CALLBACK (flipping_toggled_cb), NULL);
+
+      check_button = gtk_check_button_new_with_label ("Toggle orientation of all boxes");
+      gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), 
                          check_button, TRUE, TRUE, 0);
 
+      g_signal_connect (check_button, "toggled",
+                       G_CALLBACK (flipping_orientation_toggled_cb), NULL);
+
       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), 
                          create_forward_back ("Default", GTK_TEXT_DIR_NONE),
                          TRUE, TRUE, 0);
@@ -8276,14 +8399,6 @@ create_flipping (GtkWidget *widget)
                          create_forward_back ("Right-to-Left", GTK_TEXT_DIR_RTL),
                          TRUE, TRUE, 0);
 
-      if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
-       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
-
-      g_signal_connect (check_button, "toggled",
-                       G_CALLBACK (flipping_toggled_cb), NULL);
-
-      gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
-      
       button = gtk_button_new_with_label ("Close");
       g_signal_connect_swapped (button, "clicked",
                                G_CALLBACK (gtk_widget_destroy), window);
@@ -8661,7 +8776,7 @@ create_display_screen (GtkWidget *widget)
   
   GdkDisplay *display = gdk_screen_get_display (screen);
 
-  window = gtk_widget_new (gtk_window_get_type (),
+  window = g_object_new (gtk_window_get_type (),
                           "screen", screen,
                           "user_data", NULL,
                           "type", GTK_WINDOW_TOPLEVEL,
@@ -11716,7 +11831,7 @@ create_progress_bar (GtkWidget *widget)
       g_signal_connect (adj, "value_changed",
                        G_CALLBACK (progress_value_changed), pdata);
 
-      pdata->pbar = gtk_widget_new (GTK_TYPE_PROGRESS_BAR,
+      pdata->pbar = g_object_new (GTK_TYPE_PROGRESS_BAR,
                                    "adjustment", adj,
                                    "ellipsize", PANGO_ELLIPSIZE_MIDDLE,
                                    NULL);
@@ -12030,7 +12145,12 @@ find_widget_at_pointer (GdkDisplay *display)
  pointer_window = gdk_display_get_window_at_pointer (display, NULL, NULL);
  
  if (pointer_window)
-   gdk_window_get_user_data (pointer_window, (gpointer) &widget);
+   {
+     gpointer widget_ptr;
+
+     gdk_window_get_user_data (pointer_window, &widget_ptr);
+     widget = widget_ptr;
+   }
 
  if (widget)
    {
@@ -13072,9 +13192,9 @@ create_idle_test (GtkWidget *widget)
       gtk_widget_show (label);
       
       container =
-       gtk_widget_new (GTK_TYPE_HBOX,
+       g_object_new (GTK_TYPE_HBOX,
                        "visible", TRUE,
-                       /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
+                       /* "GtkContainer::child", g_object_new (GTK_TYPE_HBOX,
                         * "GtkWidget::visible", TRUE,
                         */
                         "child", label,
@@ -13084,19 +13204,19 @@ create_idle_test (GtkWidget *widget)
                          container, TRUE, TRUE, 0);
 
       frame =
-       gtk_widget_new (GTK_TYPE_FRAME,
+       g_object_new (GTK_TYPE_FRAME,
                        "border_width", 5,
                        "label", "Label Container",
                        "visible", TRUE,
                        "parent", GTK_DIALOG (window)->vbox,
                        NULL);
       box =
-       gtk_widget_new (GTK_TYPE_VBOX,
+       g_object_new (GTK_TYPE_VBOX,
                        "visible", TRUE,
                        "parent", frame,
                        NULL);
       button =
-       g_object_connect (gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
+       g_object_connect (g_object_new (GTK_TYPE_RADIO_BUTTON,
                                          "label", "Resize-Parent",
                                          "user_data", (void*)GTK_RESIZE_PARENT,
                                          "visible", TRUE,
@@ -13104,7 +13224,7 @@ create_idle_test (GtkWidget *widget)
                                          NULL),
                          "signal::clicked", toggle_idle_container, container,
                          NULL);
-      button = gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
+      button = g_object_new (GTK_TYPE_RADIO_BUTTON,
                               "label", "Resize-Queue",
                               "user_data", (void*)GTK_RESIZE_QUEUE,
                               "group", button,
@@ -13114,7 +13234,7 @@ create_idle_test (GtkWidget *widget)
       g_object_connect (button,
                        "signal::clicked", toggle_idle_container, container,
                        NULL);
-      button2 = gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
+      button2 = g_object_new (GTK_TYPE_RADIO_BUTTON,
                                "label", "Resize-Immediate",
                                "user_data", (void*)GTK_RESIZE_IMMEDIATE,
                                NULL);
@@ -13886,6 +14006,10 @@ main (int argc, char *argv[])
    */
   if (file_exists ("testgtkrc"))
     gtk_rc_add_default_file ("testgtkrc");
+  else if (file_exists ("tests/testgtkrc"))
+    gtk_rc_add_default_file ("tests/testgtkrc");
+  else
+    g_warning ("Couldn't find file \"testgtkrc\".");
 
   g_set_application_name ("GTK+ Test Program");