]> Pileus Git - ~andy/gtk/blobdiff - examples/packbox/packbox.c
configure: Fix build of pixbuf-demo
[~andy/gtk] / examples / packbox / packbox.c
index 009d33b55725ca5621835855f9180a7ca0b1cd70..d5dd98abbe4f162b4f7d28e8914fb92d3f6fc572 100644 (file)
@@ -1,69 +1,73 @@
-/* This file extracted from the GTK tutorial. */
-
-/* packbox.c */
 
+#include <stdio.h>
+#include <stdlib.h>
 #include "gtk/gtk.h"
 
-void
-delete_event (GtkWidget *widget, gpointer *data)
+static gboolean delete_event( GtkWidget *widget,
+                              GdkEvent  *event,
+                              gpointer   data )
 {
     gtk_main_quit ();
+    return FALSE;
 }
 
-/* Make a new hbox filled with button-labels. Arguments for the 
- * variables we're interested are passed in to this function. 
+/* Make a new hbox filled with button-labels. Arguments for the
+ * variables we're interested are passed in to this function.
  * We do not show the box, but do show everything inside. */
-GtkWidget *make_box (gint homogeneous, gint spacing,
-                    gint expand, gint fill, gint padding) 
+static GtkWidget *make_box( gboolean homogeneous,
+                            gint     spacing,
+                            gboolean expand,
+                            gboolean fill,
+                            guint    padding )
 {
     GtkWidget *box;
     GtkWidget *button;
     char padstr[80];
-    
-    /* create a new hbox with the appropriate homogeneous and spacing
-     * settings */
-    box = gtk_hbox_new (homogeneous, spacing);
-    
-    /* create a series of buttons with the appropriate settings */
+
+    /* Create a new hbox with the appropriate homogeneous
+     * and spacing settings */
+    box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, homogeneous, spacing);
+
+    /* Create a series of buttons with the appropriate settings */
     button = gtk_button_new_with_label ("gtk_box_pack");
     gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
     gtk_widget_show (button);
-    
+
     button = gtk_button_new_with_label ("(box,");
     gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
     gtk_widget_show (button);
-    
+
     button = gtk_button_new_with_label ("button,");
     gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
     gtk_widget_show (button);
-    
-    /* create a button with the label depending on the value of
+
+    /* Create a button with the label depending on the value of
      * expand. */
     if (expand == TRUE)
            button = gtk_button_new_with_label ("TRUE,");
     else
            button = gtk_button_new_with_label ("FALSE,");
-    
+
     gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
     gtk_widget_show (button);
-    
+
     /* This is the same as the button creation for "expand"
      * above, but uses the shorthand form. */
     button = gtk_button_new_with_label (fill ? "TRUE," : "FALSE,");
     gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
     gtk_widget_show (button);
-    
+
     sprintf (padstr, "%d);", padding);
-    
+
     button = gtk_button_new_with_label (padstr);
     gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
     gtk_widget_show (button);
-    
+
     return box;
 }
 
-int
-main (int argc, char *argv[])
+int main( int   argc,
+          char *argv[])
 {
     GtkWidget *window;
     GtkWidget *button;
@@ -73,213 +77,215 @@ main (int argc, char *argv[])
     GtkWidget *label;
     GtkWidget *quitbox;
     int which;
-    
+
     /* Our init, don't forget this! :) */
     gtk_init (&argc, &argv);
-    
+
     if (argc != 2) {
        fprintf (stderr, "usage: packbox num, where num is 1, 2, or 3.\n");
-       /* this just does cleanup in GTK, and exits with an exit status of 1. */
-       gtk_exit (1);
+       /* This just does cleanup in GTK and exits with an exit status of 1. */
+       exit (1);
     }
-    
+
     which = atoi (argv[1]);
 
     /* Create our window */
     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
-    /* You should always remember to connect the destroy signal to the
-     * main window.  This is very important for proper intuitive
+    /* You should always remember to connect the "delete-event" signal
+     * to the main window. This is very important for proper intuitive
      * behavior */
-    gtk_signal_connect (GTK_OBJECT (window), "delete_event",
-                       GTK_SIGNAL_FUNC (delete_event), NULL);
-    gtk_container_border_width (GTK_CONTAINER (window), 10);
-    
+    g_signal_connect (window, "delete-event",
+                     G_CALLBACK (delete_event), NULL);
+    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
     /* We create a vertical box (vbox) to pack the horizontal boxes into.
      * This allows us to stack the horizontal boxes filled with buttons one
      * on top of the other in this vbox. */
-    box1 = gtk_vbox_new (FALSE, 0);
-    
-    /* which example to show.  These correspond to the pictures above. */
+    box1 = gtk_box_new (GTK_ORIENTATION_VERTICAL, FALSE, 0);
+
+    /* which example to show. These correspond to the pictures above. */
     switch (which) {
     case 1:
        /* create a new label. */
-       label = gtk_label_new ("gtk_hbox_new (FALSE, 0);");
-       
-       /* Align the label to the left side.  We'll discuss this function and 
+       label = gtk_label_new ("gtk_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 0);");
+
+       /* Align the label to the left side.  We'll discuss this function and
         * others in the section on Widget Attributes. */
        gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
 
-       /* Pack the label into the vertical box (vbox box1).  Remember that 
+       /* Pack the label into the vertical box (vbox box1).  Remember that
         * widgets added to a vbox will be packed one on top of the other in
         * order. */
        gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
-       
-       /* show the label */
+
+       /* Show the label */
        gtk_widget_show (label);
-       
-       /* call our make box function - homogeneous = FALSE, spacing = 0,
+
+       /* Call our make box function - homogeneous = FALSE, spacing = 0,
         * expand = FALSE, fill = FALSE, padding = 0 */
        box2 = make_box (FALSE, 0, FALSE, FALSE, 0);
        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
        gtk_widget_show (box2);
 
-       /* call our make box function - homogeneous = FALSE, spacing = 0,
-        * expand = FALSE, fill = FALSE, padding = 0 */
+       /* Call our make box function - homogeneous = FALSE, spacing = 0,
+        * expand = TRUE, fill = FALSE, padding = 0 */
        box2 = make_box (FALSE, 0, TRUE, FALSE, 0);
        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
        gtk_widget_show (box2);
-       
+
        /* Args are: homogeneous, spacing, expand, fill, padding */
        box2 = make_box (FALSE, 0, TRUE, TRUE, 0);
        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
        gtk_widget_show (box2);
-       
-       /* creates a separator, we'll learn more about these later, 
+
+       /* Creates a separator, we'll learn more about these later,
         * but they are quite simple. */
-       separator = gtk_hseparator_new ();
-       
-       /* pack the separator into the vbox.  Remember each of these
-        * widgets are being packed into a vbox, so they'll be stacked
+       separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+
+        /* Pack the separator into the vbox. Remember each of these
+         * widgets is being packed into a vbox, so they'll be stacked
         * vertically. */
        gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
        gtk_widget_show (separator);
-       
-       /* create another new label, and show it. */
-       label = gtk_label_new ("gtk_hbox_new (TRUE, 0);");
+
+       /* Create another new label, and show it. */
+       label = gtk_label_new ("gtk_box_new (GTK_ORIENTATION_HORIZONTAL, TRUE, 0);");
        gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
        gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
        gtk_widget_show (label);
-       
+
        /* Args are: homogeneous, spacing, expand, fill, padding */
        box2 = make_box (TRUE, 0, TRUE, FALSE, 0);
        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
        gtk_widget_show (box2);
-       
+
        /* Args are: homogeneous, spacing, expand, fill, padding */
        box2 = make_box (TRUE, 0, TRUE, TRUE, 0);
        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
        gtk_widget_show (box2);
-       
-       /* another new separator. */
-       separator = gtk_hseparator_new ();
-       /* The last 3 arguments to gtk_box_pack_start are: expand, fill, padding. */
+
+       /* Another new separator. */
+       separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+       /* The last 3 arguments to gtk_box_pack_start are:
+        * expand, fill, padding. */
        gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
        gtk_widget_show (separator);
-       
+
        break;
 
     case 2:
 
-       /* create a new label, remember box1 is a vbox as created 
+       /* Create a new label, remember box1 is a vbox as created
         * near the beginning of main() */
-       label = gtk_label_new ("gtk_hbox_new (FALSE, 10);");
+       label = gtk_label_new ("gtk_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 10);");
        gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
        gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
        gtk_widget_show (label);
-       
+
        /* Args are: homogeneous, spacing, expand, fill, padding */
        box2 = make_box (FALSE, 10, TRUE, FALSE, 0);
        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
        gtk_widget_show (box2);
-       
+
        /* Args are: homogeneous, spacing, expand, fill, padding */
        box2 = make_box (FALSE, 10, TRUE, TRUE, 0);
        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
        gtk_widget_show (box2);
-       
-       separator = gtk_hseparator_new ();
-       /* The last 3 arguments to gtk_box_pack_start are: expand, fill, padding. */
+
+       separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+       /* The last 3 arguments to gtk_box_pack_start are:
+        * expand, fill, padding. */
        gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
        gtk_widget_show (separator);
-       
-       label = gtk_label_new ("gtk_hbox_new (FALSE, 0);");
+
+       label = gtk_label_new ("gtk_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 0);");
        gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
        gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
        gtk_widget_show (label);
-       
+
        /* Args are: homogeneous, spacing, expand, fill, padding */
        box2 = make_box (FALSE, 0, TRUE, FALSE, 10);
        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
        gtk_widget_show (box2);
-       
+
        /* Args are: homogeneous, spacing, expand, fill, padding */
        box2 = make_box (FALSE, 0, TRUE, TRUE, 10);
        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
        gtk_widget_show (box2);
-       
-       separator = gtk_hseparator_new ();
+
+       separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
        /* The last 3 arguments to gtk_box_pack_start are: expand, fill, padding. */
        gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
        gtk_widget_show (separator);
        break;
-    
+
     case 3:
 
-    /* This demonstrates the ability to use gtk_box_pack_end() to
-        * right justify widgets.  First, we create a new box as before. */
+        /* This demonstrates the ability to use gtk_box_pack_end() to
+        * right justify widgets. First, we create a new box as before. */
        box2 = make_box (FALSE, 0, FALSE, FALSE, 0);
-       /* create the label that will be put at the end. */
+
+       /* Create the label that will be put at the end. */
        label = gtk_label_new ("end");
-       /* pack it using gtk_box_pack_end(), so it is put on the right side
-        * of the hbox created in the make_box() call. */
+       /* Pack it using gtk_box_pack_end(), so it is put on the right
+        * side of the hbox created in the make_box() call. */
        gtk_box_pack_end (GTK_BOX (box2), label, FALSE, FALSE, 0);
-       /* show the label. */
+       /* Show the label. */
        gtk_widget_show (label);
-       
-       /* pack box2 into box1 (the vbox remember ? :) */
+
+       /* Pack box2 into box1 (the vbox remember ? :) */
        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
        gtk_widget_show (box2);
-       
-       /* a separator for the bottom. */
-       separator = gtk_hseparator_new ();
-       /* this explicitly sets the separator to 400 pixels wide by 5 pixels
-        * high.  This is so the hbox we created will also be 400 pixels wide,
+
+       /* A separator for the bottom. */
+       separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+       /* This explicitly sets the separator to 400 pixels wide by 5 pixels
+        * high. This is so the hbox we created will also be 400 pixels wide,
         * and the "end" label will be separated from the other labels in the
-        * hbox.  Otherwise, all the widgets in the hbox would be packed as
+        * hbox. Otherwise, all the widgets in the hbox would be packed as
         * close together as possible. */
-       gtk_widget_set_usize (separator, 400, 5);
-       /* pack the separator into the vbox (box1) created near the start 
+       gtk_widget_set_size_request (separator, 400, 5);
+       /* pack the separator into the vbox (box1) created near the start
         * of main() */
        gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
-       gtk_widget_show (separator);    
+       gtk_widget_show (separator);
     }
-    
+
     /* Create another new hbox.. remember we can use as many as we need! */
-    quitbox = gtk_hbox_new (FALSE, 0);
-    
+    quitbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 0);
+
     /* Our quit button. */
     button = gtk_button_new_with_label ("Quit");
-    
-    /* setup the signal to destroy the window.  Remember that this will send
-     * the "destroy" signal to the window which will be caught by our signal
-     * handler as defined above. */
-    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
-                              GTK_SIGNAL_FUNC (gtk_main_quit),
-                              GTK_OBJECT (window));
-    /* pack the button into the quitbox.
-     * The last 3 arguments to gtk_box_pack_start are: expand, fill, padding. */
+
+    /* Setup the signal to terminate the program when the button is clicked */
+    g_signal_connect_swapped (button, "clicked",
+                             G_CALLBACK (gtk_main_quit),
+                             window);
+    /* Pack the button into the quitbox.
+     * The last 3 arguments to gtk_box_pack_start are:
+     * expand, fill, padding. */
     gtk_box_pack_start (GTK_BOX (quitbox), button, TRUE, FALSE, 0);
     /* pack the quitbox into the vbox (box1) */
     gtk_box_pack_start (GTK_BOX (box1), quitbox, FALSE, FALSE, 0);
-    
-    /* pack the vbox (box1) which now contains all our widgets, into the
+
+    /* Pack the vbox (box1) which now contains all our widgets, into the
      * main window. */
     gtk_container_add (GTK_CONTAINER (window), box1);
-    
-    /* and show everything left */
+
+    /* And show everything left */
     gtk_widget_show (button);
     gtk_widget_show (quitbox);
-    
+
     gtk_widget_show (box1);
     /* Showing the window last so everything pops up at once. */
     gtk_widget_show (window);
-    
+
     /* And of course, our main function. */
     gtk_main ();
 
-    /* control returns here when gtk_main_quit() is called, but not when 
-     * gtk_exit is used. */
-    
+    /* Control returns here when gtk_main_quit() is called, but not when
+     * exit() is used. */
+
     return 0;
 }