]> Pileus Git - ~andy/gtk/blobdiff - tests/testgtk.c
stylecontext: Do invalidation on first resize container
[~andy/gtk] / tests / testgtk.c
index 78520c4fa64295fae9757cfa66ece010e72a1b8e..d7d63ff53004dd3a9838c2263855b78bfd1bc877 100644 (file)
@@ -12,9 +12,7 @@
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
 /*
@@ -430,14 +428,14 @@ pattern_set_bg (GtkWidget   *widget,
                GdkWindow   *child,
                gint         level)
 {
-  static const GdkColor colors[] = {
-    { 0, 0x4444, 0x4444, 0xffff },
-    { 0, 0x8888, 0x8888, 0xffff },
-    { 0, 0xaaaa, 0xaaaa, 0xffff }
+  static GdkRGBA colors[] = {
+    { 0.27, 0.27, 1.0, 1.0 },
+    { 0.53, 0.53, 1.0, 1.0},
+    { 0.67, 0.67, 1.0, 1.0 }
   };
     
   gdk_window_set_user_data (child, widget);
-  gdk_window_set_background (child, &colors[level]);
+  gdk_window_set_background_rgba (child, &colors[level]);
 }
 
 static void
@@ -1502,6 +1500,118 @@ create_statusbar (GtkWidget *widget)
     gtk_widget_destroy (window);
 }
 
+/* Alpha demo */
+
+static void
+alpha_changed (GtkRange *range, GtkWidget *widget)
+{
+  gdouble alpha;
+
+  alpha = gtk_range_get_value (range);
+
+  gtk_widget_set_opacity (widget, alpha / 100.0);
+}
+
+
+void
+create_alpha_widgets (GtkWidget *widget)
+{
+  static GtkWidget *window = NULL;
+
+  if (!window)
+    {
+      GtkWidget *vbox2, *vbox, *main_hbox;
+      GtkWidget *button, *event_box, *label, *scale;
+      GtkWidget *alpha1, *alpha2, *alpha3;
+
+      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window),
+                             gtk_widget_get_screen (widget));
+      gtk_window_set_default_size (GTK_WINDOW (window),
+                                   450, 450);
+
+      g_signal_connect (window, "destroy",
+                        G_CALLBACK (gtk_widget_destroyed), &window);
+
+      gtk_window_set_title (GTK_WINDOW (window), "Alpha");
+      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
+
+      main_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+      gtk_container_add (GTK_CONTAINER (window), main_hbox);
+
+      vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+
+      gtk_box_pack_start (GTK_BOX (main_hbox), vbox, FALSE, FALSE, 0);
+
+      /* Plain button (no gdkwindows */
+
+      label = gtk_label_new ("non-window widget");
+      gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+
+      alpha1 = button = gtk_button_new_with_label ("A Button");
+      gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
+
+      /* windowed container with both windowed and normal button */
+      label = gtk_label_new ("\nwindow widget");
+      gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+
+      alpha2 = event_box = gtk_event_box_new ();
+      gtk_box_pack_start (GTK_BOX (vbox), event_box, FALSE, FALSE, 0);
+
+      vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+      gtk_container_add (GTK_CONTAINER (event_box), vbox2);
+
+      button = gtk_button_new_with_label ("A Button");
+      gtk_box_pack_start (GTK_BOX (vbox2), button, FALSE, FALSE, 0);
+
+      event_box = gtk_event_box_new ();
+      button = gtk_button_new_with_label ("A Button (in window)");
+      gtk_container_add (GTK_CONTAINER (event_box), button);
+      gtk_box_pack_start (GTK_BOX (vbox2), event_box, FALSE, FALSE, 0);
+
+      /* non-windowed container with both windowed and normal button */
+      label = gtk_label_new ("\nnon-window widget with widget child");
+      gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+
+      alpha3 = vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+      gtk_box_pack_start (GTK_BOX (vbox), vbox2, FALSE, FALSE, 0);
+
+      button = gtk_button_new_with_label ("A Button");
+      gtk_box_pack_start (GTK_BOX (vbox2), button, FALSE, FALSE, 0);
+
+      event_box = gtk_event_box_new ();
+      button = gtk_button_new_with_label ("A Button (in window)");
+      gtk_container_add (GTK_CONTAINER (event_box), button);
+      gtk_box_pack_start (GTK_BOX (vbox2), event_box, FALSE, FALSE, 0);
+
+      scale = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL,
+                                         0, 100, 1);
+      gtk_box_pack_start (GTK_BOX (main_hbox), scale, FALSE, FALSE, 0);
+      g_signal_connect (scale, "value_changed", G_CALLBACK (alpha_changed), alpha1);
+      gtk_range_set_value (GTK_RANGE (scale), 50);
+
+      scale = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL,
+                                         0, 100, 1);
+      gtk_box_pack_start (GTK_BOX (main_hbox), scale, FALSE, FALSE, 0);
+      g_signal_connect (scale, "value_changed", G_CALLBACK (alpha_changed), alpha2);
+      gtk_range_set_value (GTK_RANGE (scale), 50);
+
+      scale = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL,
+                                         0, 100, 1);
+      gtk_box_pack_start (GTK_BOX (main_hbox), scale, FALSE, FALSE, 0);
+      g_signal_connect (scale, "value_changed", G_CALLBACK (alpha_changed), alpha3);
+      gtk_range_set_value (GTK_RANGE (scale), 50);
+
+      gtk_widget_show_all (main_hbox);
+    }
+
+  if (!gtk_widget_get_visible (window))
+    gtk_widget_show (window);
+  else
+    gtk_widget_destroy (window);
+}
+
+
 /* 
  * Label Demo
  */
@@ -2121,11 +2231,11 @@ grippy_button_press (GtkWidget *area, GdkEventButton *event, GdkWindowEdge edge)
 {
   if (event->type == GDK_BUTTON_PRESS) 
     {
-      if (event->button == 1)
+      if (event->button == GDK_BUTTON_PRIMARY)
        gtk_window_begin_resize_drag (GTK_WINDOW (gtk_widget_get_toplevel (area)), edge,
                                      event->button, event->x_root, event->y_root,
                                      event->time);
-      else if (event->button == 2)
+      else if (event->button == GDK_BUTTON_MIDDLE)
        gtk_window_begin_move_drag (GTK_WINDOW (gtk_widget_get_toplevel (area)), 
                                    event->button, event->x_root, event->y_root,
                                    event->time);
@@ -3298,35 +3408,16 @@ static void
 cmw_color (GtkWidget *widget, GtkWidget *parent)
 {
     GtkWidget *csd;
-    GtkWidget *colorsel;
-    GtkWidget *ok_button, *cancel_button;
-
-    csd = gtk_color_selection_dialog_new ("This is a modal color selection dialog");
 
-    gtk_window_set_screen (GTK_WINDOW (csd), gtk_widget_get_screen (parent));
+    csd = gtk_color_chooser_dialog_new ("This is a modal color selection dialog", GTK_WINDOW (parent));
 
-    colorsel = gtk_color_selection_dialog_get_color_selection (GTK_COLOR_SELECTION_DIALOG (csd));
-    gtk_color_selection_set_has_palette (GTK_COLOR_SELECTION (colorsel),
-                                         TRUE);
-    
     /* Set as modal */
     gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
 
-    /* And mark it as a transient dialog */
-    gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
-    
     g_signal_connect (csd, "destroy",
                      G_CALLBACK (cmw_destroy_cb), NULL);
-
-    g_object_get (csd,
-                  "ok-button", &ok_button,
-                  "cancel-button", &cancel_button,
-                  NULL);
-
-    g_signal_connect_swapped (ok_button,
-                            "clicked", G_CALLBACK (gtk_widget_destroy), csd);
-    g_signal_connect_swapped (cancel_button,
-                            "clicked", G_CALLBACK (gtk_widget_destroy), csd);
+    g_signal_connect (csd, "response",
+                      G_CALLBACK (gtk_widget_destroy), NULL);
     
     /* wait until destroy calls gtk_main_quit */
     gtk_widget_show (csd);    
@@ -3572,7 +3663,7 @@ create_scrolled_windows (GtkWidget *widget)
       grid = gtk_grid_new ();
       gtk_grid_set_row_spacing (GTK_GRID (grid), 10);
       gtk_grid_set_column_spacing (GTK_GRID (grid), 10);
-      gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), grid);
+      gtk_container_add (GTK_CONTAINER (scrolled_window), grid);
       gtk_container_set_focus_hadjustment (GTK_CONTAINER (grid),
                                           gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
       gtk_container_set_focus_vadjustment (GTK_CONTAINER (grid),
@@ -3656,7 +3747,7 @@ entry_progress_timeout (gpointer data)
       gtk_entry_set_progress_fraction (GTK_ENTRY (data), fraction);
     }
 
-  return TRUE;
+  return G_SOURCE_CONTINUE;
 }
 
 static void
@@ -4631,10 +4722,10 @@ cursor_event (GtkWidget          *widget,
              GtkSpinButton      *spinner)
 {
   if ((event->type == GDK_BUTTON_PRESS) &&
-      ((event->button.button == 1) ||
-       (event->button.button == 3)))
+      ((event->button.button == GDK_BUTTON_PRIMARY) ||
+       (event->button.button == GDK_BUTTON_SECONDARY)))
     {
-      gtk_spin_button_spin (spinner, event->button.button == 1 ?
+      gtk_spin_button_spin (spinner, event->button.button == GDK_BUTTON_PRIMARY ?
                            GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
       return TRUE;
     }
@@ -4710,27 +4801,30 @@ create_cursors (GtkWidget *widget)
                        NULL);
 
 #ifdef GDK_WINDOWING_X11
-      hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
-      gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
-      gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
-
-      label = gtk_label_new ("Cursor Theme : ");
-      gtk_widget_set_halign (label, GTK_ALIGN_START);
-      gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
-      gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
-
-      entry = gtk_entry_new ();
-      gtk_entry_set_text (GTK_ENTRY (entry), "default");
-      gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, TRUE, 0);
-
-      size = gtk_spin_button_new_with_range (1.0, 64.0, 1.0);
-      gtk_spin_button_set_value (GTK_SPIN_BUTTON (size), 24.0);
-      gtk_box_pack_start (GTK_BOX (hbox), size, TRUE, TRUE, 0);
-      
-      g_signal_connect (entry, "changed", 
-                       G_CALLBACK (change_cursor_theme), hbox);
-      g_signal_connect (size, "changed", 
-                       G_CALLBACK (change_cursor_theme), hbox);
+      if (GDK_IS_X11_DISPLAY (gtk_widget_get_display (vbox)))
+        {
+          hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+          gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
+          gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
+
+          label = gtk_label_new ("Cursor Theme : ");
+          gtk_widget_set_halign (label, GTK_ALIGN_START);
+          gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
+          gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
+
+          entry = gtk_entry_new ();
+          gtk_entry_set_text (GTK_ENTRY (entry), "default");
+          gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, TRUE, 0);
+
+          size = gtk_spin_button_new_with_range (1.0, 64.0, 1.0);
+          gtk_spin_button_set_value (GTK_SPIN_BUTTON (size), 24.0);
+          gtk_box_pack_start (GTK_BOX (hbox), size, TRUE, TRUE, 0);
+
+          g_signal_connect (entry, "changed", 
+                            G_CALLBACK (change_cursor_theme), hbox);
+          g_signal_connect (size, "changed", 
+                            G_CALLBACK (change_cursor_theme), hbox);
+        }
 #endif
 
       hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
@@ -4842,7 +4936,7 @@ create_color_selection (GtkWidget *widget)
       gtk_container_add (GTK_CONTAINER (hbox), label);
 
       picker = gtk_color_button_new ();
-      gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (picker), TRUE);
+      gtk_color_chooser_set_use_alpha (GTK_COLOR_CHOOSER (picker), TRUE);
       gtk_container_add (GTK_CONTAINER (hbox), picker);
 
       button = gtk_button_new_with_mnemonic ("_Props");
@@ -6020,6 +6114,31 @@ create_notebook (GtkWidget *widget)
     gtk_widget_destroy (window);
 }
 
+void
+create_settings (GtkWidget *widget)
+{
+  static GtkWidget *window = NULL;
+
+  if (!window)
+    {
+      window = create_prop_editor (G_OBJECT (gtk_settings_get_default ()), GTK_TYPE_SETTINGS);
+      gtk_window_set_screen (GTK_WINDOW (window),
+                             gtk_widget_get_screen (widget));
+
+      gtk_widget_hide (window);
+      gtk_window_set_title (GTK_WINDOW (window), "GTK+ Settings");
+
+      g_signal_connect (window, "destroy",
+                        G_CALLBACK (gtk_widget_destroyed),
+                        &window);
+    }
+
+  if (!gtk_widget_get_visible (window))
+    gtk_widget_show (window);
+  else
+    gtk_widget_destroy (window);
+}
+
 /*
  * GtkPanes
  */
@@ -7995,7 +8114,6 @@ create_progress_bar (GtkWidget *widget)
   GtkWidget *frame;
   GtkWidget *grid;
   GtkWidget *label;
-  GtkWidget *align;
   static ProgressData *pdata = NULL;
 
   static gchar *items1[] =
@@ -8046,20 +8164,17 @@ create_progress_bar (GtkWidget *widget)
       vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
       gtk_container_add (GTK_CONTAINER (frame), vbox2);
 
-      align = gtk_alignment_new (0.5, 0.5, 0, 0);
-      gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
-
       pdata->pbar = gtk_progress_bar_new ();
       gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (pdata->pbar),
                                       PANGO_ELLIPSIZE_MIDDLE);
-
-      gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
-
-      align = gtk_alignment_new (0.5, 0.5, 0, 0);
-      gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
+      gtk_widget_set_halign (pdata->pbar, GTK_ALIGN_CENTER);
+      gtk_widget_set_valign (pdata->pbar, GTK_ALIGN_CENTER);
+      gtk_box_pack_start (GTK_BOX (vbox2), pdata->pbar, FALSE, FALSE, 5);
 
       hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
-      gtk_container_add (GTK_CONTAINER (align), hbox);
+      gtk_widget_set_halign (hbox, GTK_ALIGN_CENTER);
+      gtk_widget_set_valign (hbox, GTK_ALIGN_CENTER);
+      gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 5);
       label = gtk_label_new ("Label updated by user :"); 
       gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
       pdata->label = gtk_label_new ("");
@@ -8719,7 +8834,7 @@ create_selection_test (GtkWidget *widget)
 
       store = gtk_list_store_new (1, G_TYPE_STRING);
       tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
-      gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), tree_view);
+      gtk_container_add (GTK_CONTAINER (scrolled_win), tree_view);
 
       renderer = gtk_cell_renderer_text_new ();
       column = gtk_tree_view_column_new_with_attributes ("Target", renderer,
@@ -9047,7 +9162,7 @@ idle_test (GtkWidget *label)
   sprintf (buffer, "count: %d", ++count);
   gtk_label_set_text (GTK_LABEL (label), buffer);
 
-  return TRUE;
+  return G_SOURCE_CONTINUE;
 }
 
 static void
@@ -9627,6 +9742,7 @@ struct {
 } buttons[] =
 {
   { "alpha window", create_alpha_window },
+  { "alpha widget", create_alpha_widgets },
   { "big windows", create_big_windows },
   { "button box", create_button_box },
   { "buttons", create_buttons },
@@ -9665,6 +9781,7 @@ struct {
   { "rotated text", create_rotated_text },
   { "saved position", create_saved_position },
   { "scrolled windows", create_scrolled_windows },
+  { "settings", create_settings },
   { "shapes", create_shapes },
   { "size groups", create_size_groups },
   { "snapshot", create_snapshot },
@@ -9749,7 +9866,7 @@ create_main_window (void)
 
   box2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
   gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
-  gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
+  gtk_container_add (GTK_CONTAINER (scrolled_window), box2);
   gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
                                       gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
   gtk_widget_show (box2);