[gtk+] Add a testcase for various dialog headerbar scenarios



commit be60724d087278126cf1db2de74b78fcc1c4ff9e
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Feb 2 17:27:34 2014 -0500

    Add a testcase for various dialog headerbar scenarios

 tests/Makefile.am  |    1 +
 tests/testdialog.c |  314 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 315 insertions(+), 0 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7f250bc..ca43e6d 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -48,6 +48,7 @@ noinst_PROGRAMS =  $(TEST_PROGS)      \
        testcombo                       \
        testcombochange                 \
        testcellrenderertext            \
+       testdialog                      \
        testdnd                         \
        testellipsise                   \
        testentrycompletion             \
diff --git a/tests/testdialog.c b/tests/testdialog.c
new file mode 100644
index 0000000..5683d18
--- /dev/null
+++ b/tests/testdialog.c
@@ -0,0 +1,314 @@
+#include <gtk/gtk.h>
+
+static void
+show_color_chooser (GtkWindow *parent)
+{
+  GtkWidget *dialog;
+
+  dialog = gtk_color_chooser_dialog_new ("Builtin", parent);
+
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+}
+
+static void
+show_color_chooser_generic (GtkWindow *parent)
+{
+  GtkWidget *dialog;
+
+  dialog = g_object_new (GTK_TYPE_COLOR_CHOOSER_DIALOG,
+                         "title", "Generic Builtin",
+                         "transient-for", parent,
+                         NULL);
+
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+}
+
+static void
+add_content (GtkWidget *dialog)
+{
+  GtkWidget *label;
+
+  label = gtk_label_new ("content");
+  g_object_set (label, "margin", 50, NULL);
+  gtk_widget_show (label);
+
+  gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), label);
+}
+
+static void
+add_buttons (GtkWidget *dialog)
+{
+  gtk_dialog_add_button (GTK_DIALOG (dialog), "Done", GTK_RESPONSE_OK);
+  gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
+}
+
+static void
+show_dialog (GtkWindow *parent)
+{
+  GtkWidget *dialog;
+
+  dialog = gtk_dialog_new_with_buttons ("Simple", parent, 
+                                       GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+                                       "Close", GTK_RESPONSE_CLOSE,
+                                        NULL);
+
+  add_content (dialog);
+
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+}
+
+static void
+show_dialog_with_header (GtkWindow *parent)
+{
+  GtkWidget *dialog;
+
+  dialog = gtk_dialog_new_with_buttons ("With Header", parent, 
+                                       
GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT|GTK_DIALOG_USE_HEADER_BAR,
+                                       "Close", GTK_RESPONSE_CLOSE,
+                                        NULL);
+
+  add_content (dialog);
+
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+}
+
+static void
+show_dialog_with_buttons (GtkWindow *parent)
+{
+  GtkWidget *dialog;
+
+  dialog = gtk_dialog_new_with_buttons ("With Buttons", parent, 
+                                       GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+                                       "Close", GTK_RESPONSE_CLOSE,
+                                       "Frob", 25,
+                                        NULL);
+
+  add_content (dialog);
+
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+}
+
+static void
+show_dialog_with_header_buttons (GtkWindow *parent)
+{
+  GtkWidget *dialog;
+
+  dialog = gtk_dialog_new_with_buttons ("Header & Buttons", parent, 
+                                       
GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT|GTK_DIALOG_USE_HEADER_BAR,
+                                       "Close", GTK_RESPONSE_CLOSE,
+                                       "Frob", 25,
+                                        NULL);
+
+  add_content (dialog);
+
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+}
+
+typedef struct {
+  GtkDialog parent;
+} MyDialog;
+
+typedef struct {
+  GtkDialogClass parent_class;
+} MyDialogClass;
+
+G_DEFINE_TYPE (MyDialog, my_dialog, GTK_TYPE_DIALOG);
+
+static void
+my_dialog_init (MyDialog *dialog)
+{
+  gtk_widget_init_template (GTK_WIDGET (dialog));
+}
+
+static void
+my_dialog_class_init (MyDialogClass *class)
+{
+  gchar *buffer;
+  gsize size;
+  GBytes *bytes;
+
+  g_file_get_contents ("mydialog.ui", &buffer, &size, NULL);
+  bytes = g_bytes_new_static (buffer, size);
+  gtk_widget_class_set_template (GTK_WIDGET_CLASS (class), bytes);
+  g_bytes_unref (bytes);
+}
+
+static void
+show_dialog_from_template (GtkWindow *parent)
+{
+  GtkWidget *dialog;
+
+  dialog = g_object_new (my_dialog_get_type (),
+                         "title", "Template",
+                         "transient-for", parent,
+                         NULL);
+
+  add_buttons (dialog);
+  add_content (dialog);
+
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+}
+
+static void
+show_dialog_flex_template (GtkWindow *parent)
+{
+  GtkWidget *dialog;
+  gboolean use_header;
+
+  g_object_get (gtk_settings_get_default (),
+                "gtk-dialogs-use-header", &use_header,
+                NULL);
+  dialog = g_object_new (my_dialog_get_type (),
+                         "title", "Flexible Template",
+                         "transient-for", parent,
+                         "use-header-bar", use_header,
+                         NULL);
+
+  add_buttons (dialog);
+  add_content (dialog);
+
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+}
+
+typedef struct {
+  GtkDialog parent;
+
+  GtkWidget *content;
+} MyDialog2;
+
+typedef struct {
+  GtkDialogClass parent_class;
+} MyDialog2Class;
+
+G_DEFINE_TYPE (MyDialog2, my_dialog2, GTK_TYPE_DIALOG);
+
+static void
+my_dialog2_init (MyDialog2 *dialog)
+{
+  gtk_widget_init_template (GTK_WIDGET (dialog));
+}
+
+static void
+my_dialog2_class_init (MyDialog2Class *class)
+{
+  gchar *buffer;
+  gsize size;
+  GBytes *bytes;
+
+  g_file_get_contents ("mydialog2.ui", &buffer, &size, NULL);
+  bytes = g_bytes_new_static (buffer, size);
+  gtk_widget_class_set_template (GTK_WIDGET_CLASS (class), bytes);
+  g_bytes_unref (bytes);
+
+  gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), MyDialog2, content);
+}
+
+static void
+show_dialog_from_template_with_header (GtkWindow *parent)
+{
+  GtkWidget *dialog;
+
+  dialog = g_object_new (my_dialog2_get_type (),
+                         "transient-for", parent,
+                         "use-header-bar", TRUE,
+                         NULL);
+
+  add_buttons (dialog);
+  add_content (dialog);
+
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+}
+
+int
+main (int argc, char *argv[])
+{
+  GtkWidget *window;
+  GtkWidget *vbox;
+  GtkWidget *box;
+  GtkWidget *button;
+
+  gtk_init (NULL, NULL);
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
+
+  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
+  gtk_widget_set_halign (vbox, GTK_ALIGN_FILL);
+  gtk_widget_set_valign (vbox, GTK_ALIGN_CENTER);
+  gtk_widget_show (vbox);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+  
+  box = gtk_flow_box_new ();
+  gtk_flow_box_set_selection_mode (GTK_FLOW_BOX (box), GTK_SELECTION_NONE);
+  gtk_widget_set_hexpand (box, TRUE);
+  gtk_widget_show (box);
+  gtk_container_add (GTK_CONTAINER (vbox), box);
+
+  button = gtk_button_new_with_label ("Builtin");
+  g_signal_connect_swapped (button, "clicked", G_CALLBACK (show_color_chooser), window);
+  gtk_widget_show (button);
+  gtk_container_add (GTK_CONTAINER (box), button);
+
+  button = gtk_button_new_with_label ("Generic Builtin");
+  g_signal_connect_swapped (button, "clicked", G_CALLBACK (show_color_chooser_generic), window);
+  gtk_widget_show (button);
+  gtk_container_add (GTK_CONTAINER (box), button);
+
+  button = gtk_button_new_with_label ("Simple");
+  g_signal_connect_swapped (button, "clicked", G_CALLBACK (show_dialog), window);
+  gtk_widget_show (button);
+  gtk_container_add (GTK_CONTAINER (box), button);
+
+  button = gtk_button_new_with_label ("With Header");
+  g_signal_connect_swapped (button, "clicked", G_CALLBACK (show_dialog_with_header), window);
+  gtk_widget_show (button);
+  gtk_container_add (GTK_CONTAINER (box), button);
+
+  button = gtk_button_new_with_label ("With Buttons");
+  g_signal_connect_swapped (button, "clicked", G_CALLBACK (show_dialog_with_buttons), window);
+  gtk_widget_show (button);
+  gtk_container_add (GTK_CONTAINER (box), button);
+
+  button = gtk_button_new_with_label ("Header & Buttons");
+  g_signal_connect_swapped (button, "clicked", G_CALLBACK (show_dialog_with_header_buttons), window);
+  gtk_widget_show (button);
+  gtk_container_add (GTK_CONTAINER (box), button);
+
+  button = gtk_button_new_with_label ("Template");
+  g_signal_connect_swapped (button, "clicked", G_CALLBACK (show_dialog_from_template), window);
+  gtk_widget_show (button);
+  gtk_container_add (GTK_CONTAINER (box), button);
+
+  button = gtk_button_new_with_label ("Template With Header");
+  g_signal_connect_swapped (button, "clicked", G_CALLBACK (show_dialog_from_template_with_header), window);
+  gtk_widget_show (button);
+  gtk_container_add (GTK_CONTAINER (box), button);
+
+  button = gtk_button_new_with_label ("Flexible Template");
+  g_signal_connect_swapped (button, "clicked", G_CALLBACK (show_dialog_flex_template), window);
+  gtk_widget_show (button);
+  gtk_container_add (GTK_CONTAINER (box), button);
+
+  button = gtk_check_button_new_with_label ("Dialogs have headers");
+  g_object_bind_property (gtk_settings_get_default (), "gtk-dialogs-use-header",
+                          button, "active",
+                          G_BINDING_BIDIRECTIONAL|G_BINDING_SYNC_CREATE);
+  gtk_widget_show (button);
+  gtk_widget_set_halign (button, GTK_ALIGN_CENTER);
+  gtk_container_add (GTK_CONTAINER (vbox), button);
+
+  gtk_widget_show (window);
+  gtk_main ();
+  
+  return 0;
+}
+


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]