[gtk+] Add a test for the new session api



commit 0191f11a7a72c04ae3100820687b9963d1175f74
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Jan 8 02:15:49 2012 -0500

    Add a test for the new session api

 tests/Makefile.am  |    5 +-
 tests/testlogout.c |  255 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 259 insertions(+), 1 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 6aa0112..7173805 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -122,7 +122,8 @@ noinst_PROGRAMS =  $(TEST_PROGS)	\
 	testpixbuf-color		\
 	testpixbuf-scale		\
 	widget-factory 			\
-	testgmenu
+	testgmenu			\
+	testlogout
 
 if USE_X11
 noinst_PROGRAMS += testerrors
@@ -239,6 +240,7 @@ testpixbuf_color_DEPENDENCIES = $(TEST_DEPS)
 testpixbuf_scale_DEPENDENCIES = $(TEST_DEPS)
 widget_factory_DEPENDENCIES = $(TEST_DEPS)
 testgmenu_DEPENDENCIES = $(TEST_DEPS)
+testlogout_DEPENDENCIES = $(TEST_DEPS)
 
 flicker_LDADD = $(LDADDS)
 simple_LDADD = $(LDADDS)
@@ -339,6 +341,7 @@ testpixbuf_color_LDADD = $(LDADDS)
 testpixbuf_scale_LDADD = $(LDADDS)
 widget_factory_LDADD = $(LDADDS)
 testgmenu_LDADD = $(LDADDS)
+testlogout_LDADD = $(LDADDS)
 
 
 testboxcss_SOURCES =	\
diff --git a/tests/testlogout.c b/tests/testlogout.c
new file mode 100644
index 0000000..a896bd4
--- /dev/null
+++ b/tests/testlogout.c
@@ -0,0 +1,255 @@
+#include <gtk/gtk.h>
+
+static gboolean will_quit = TRUE;
+static gchar *reason;
+static GtkWidget *inhibit_entry;
+static GtkWidget *inhibit_logout;
+static GtkWidget *inhibit_switch;
+static GtkWidget *inhibit_suspend;
+static GtkWidget *inhibit_idle;
+static GtkWidget *inhibit_label;
+static GtkWidget *end_combo;
+static GtkWidget *end_confirm;
+
+static void
+end_session (GtkButton *button, GtkApplication *app)
+{
+  const gchar *id;
+  GtkApplicationEndStyle style;
+  gboolean confirm;
+
+  id = gtk_combo_box_get_active_id (GTK_COMBO_BOX (end_combo));
+  if (g_strcmp0 (id, "logout") == 0)
+    style = GTK_APPLICATION_LOGOUT;
+  else if (g_strcmp0 (id, "reboot") == 0)
+    style = GTK_APPLICATION_REBOOT;
+  else if (g_strcmp0 (id, "shutdown") == 0)
+    style = GTK_APPLICATION_SHUTDOWN;
+  else
+    style = GTK_APPLICATION_LOGOUT;
+
+  confirm = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (end_confirm));
+
+  g_print ("Calling gtk_application_end_session: %d, %d\n", style, confirm);
+
+  gtk_application_end_session (app, style, confirm);
+}
+
+static void
+toggle_will_quit (GtkToggleButton *button, gpointer data)
+{
+  will_quit = gtk_toggle_button_get_active (button);
+}
+
+static void
+reason_changed (GtkEntry *entry, GParamSpec *pspec, GtkApplication *app)
+{
+  g_free (reason);
+  reason = g_strdup (gtk_entry_get_text (entry));
+}
+
+static void
+inhibitor_toggled (GtkToggleButton *button, GtkApplication *app)
+{
+  gboolean active;
+  const gchar *reason;
+  GtkApplicationInhibitFlags flags;
+  GtkWidget *toplevel;
+  guint cookie;
+
+  active = gtk_toggle_button_get_active (button);
+  reason = gtk_entry_get_text (GTK_ENTRY (inhibit_entry));
+
+  flags = 0;
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (inhibit_logout)))
+    flags |= GTK_APPLICATION_INHIBIT_LOGOUT;
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (inhibit_switch)))
+    flags |= GTK_APPLICATION_INHIBIT_SWITCH;
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (inhibit_suspend)))
+    flags |= GTK_APPLICATION_INHIBIT_SUSPEND;
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (inhibit_idle)))
+    flags |= GTK_APPLICATION_INHIBIT_IDLE;
+
+  toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button));
+
+  if (active)
+    {
+      gchar *text;
+
+      g_print ("Calling gtk_application_inhibit: %d, '%s'\n", flags, reason);
+
+      cookie = gtk_application_inhibit (app, GTK_WINDOW (toplevel), flags, reason);
+      g_object_set_data (G_OBJECT (button), "cookie", GUINT_TO_POINTER (cookie));
+      if (cookie == 0)
+        {
+          g_signal_handlers_block_by_func (button, inhibitor_toggled, app);
+          gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
+          g_signal_handlers_unblock_by_func (button, inhibitor_toggled, app);
+          active = FALSE;
+        }
+      else
+        {
+          text = g_strdup_printf ("%#x", cookie);
+          gtk_label_set_label (GTK_LABEL (inhibit_label), text);
+          g_free (text);
+        }
+    }
+  else
+    {
+      cookie = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (button), "cookie"));
+      g_print ("Calling gtk_application_uninhibit: %#x\n", cookie);
+      gtk_application_uninhibit (app, cookie);
+      gtk_label_set_label (GTK_LABEL (inhibit_label), "");
+    }
+
+  gtk_widget_set_sensitive (inhibit_entry, !active);
+  gtk_widget_set_sensitive (inhibit_logout, !active);
+  gtk_widget_set_sensitive (inhibit_switch, !active);
+  gtk_widget_set_sensitive (inhibit_suspend, !active);
+  gtk_widget_set_sensitive (inhibit_idle, !active);
+}
+
+static void
+activate (GtkApplication *app,
+          gpointer        data)
+{
+  GtkWidget *win;
+  GtkWidget *box;
+  GtkWidget *separator;
+  GtkWidget *grid;
+  GtkWidget *button;
+  GtkWidget *entry;
+  GtkWidget *label;
+
+  win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+  box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
+  g_object_set (box, "margin", 12, NULL);
+  gtk_container_add (GTK_CONTAINER (win), box);
+
+  grid = gtk_grid_new ();
+  gtk_grid_set_row_spacing (GTK_GRID (grid), 6);
+  gtk_grid_set_column_spacing (GTK_GRID (grid), 6);
+
+  gtk_container_add (GTK_CONTAINER (box), grid);
+
+  label = gtk_label_new ("Inhibitor");
+  gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1);
+
+  inhibit_label = gtk_label_new ("");
+  gtk_grid_attach (GTK_GRID (grid), inhibit_label, 1, 0, 1, 1);
+
+  inhibit_logout = gtk_check_button_new_with_label ("Logout");
+  gtk_grid_attach (GTK_GRID (grid), inhibit_logout, 1, 1, 1, 1);
+
+  inhibit_switch = gtk_check_button_new_with_label ("User switching");
+  gtk_grid_attach (GTK_GRID (grid), inhibit_switch, 1, 2, 1, 1);
+
+  inhibit_suspend = gtk_check_button_new_with_label ("Suspend");
+  gtk_grid_attach (GTK_GRID (grid), inhibit_suspend, 1, 4, 1, 1);
+
+  inhibit_idle = gtk_check_button_new_with_label ("Idle");
+  gtk_grid_attach (GTK_GRID (grid), inhibit_idle, 1, 5, 1, 1);
+
+  inhibit_entry = gtk_entry_new ();
+  gtk_grid_attach (GTK_GRID (grid), inhibit_entry, 1, 6, 1, 1);
+
+  button = gtk_toggle_button_new_with_label ("Inhibit");
+  g_signal_connect (button, "toggled",
+                    G_CALLBACK (inhibitor_toggled), app);
+  gtk_grid_attach (GTK_GRID (grid), button, 2, 6, 1, 1);
+
+  separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+  gtk_container_add (GTK_CONTAINER (box), separator);
+
+  grid = gtk_grid_new ();
+  gtk_grid_set_row_spacing (GTK_GRID (grid), 6);
+  gtk_grid_set_column_spacing (GTK_GRID (grid), 6);
+
+  gtk_container_add (GTK_CONTAINER (box), grid);
+
+  button = gtk_check_button_new_with_label ("Will quit");
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), will_quit);
+  g_signal_connect (button, "toggled",
+                    G_CALLBACK (toggle_will_quit), NULL);
+  gtk_grid_attach (GTK_GRID (grid), button, 0, 0, 1, 1);
+
+  entry = gtk_entry_new ();
+  g_signal_connect (entry, "notify::text",
+                    G_CALLBACK (reason_changed), app);
+  gtk_grid_attach (GTK_GRID (grid), entry, 1, 0, 1, 1);
+
+  separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+  gtk_container_add (GTK_CONTAINER (box), separator);
+
+  grid = gtk_grid_new ();
+  gtk_grid_set_row_spacing (GTK_GRID (grid), 6);
+  gtk_grid_set_column_spacing (GTK_GRID (grid), 6);
+
+  gtk_container_add (GTK_CONTAINER (box), grid);
+
+  end_combo = gtk_combo_box_text_new ();
+  gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (end_combo), "logout", "Logout");
+  gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (end_combo), "reboot", "Reboot");
+  gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (end_combo), "shutdown", "Shutdown");
+  gtk_combo_box_set_active_id (GTK_COMBO_BOX (end_combo), "logout");
+  gtk_grid_attach (GTK_GRID (grid), end_combo, 0, 0, 1, 1);
+
+  end_confirm = gtk_check_button_new_with_label ("Confirm");
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (end_confirm), TRUE);
+  gtk_grid_attach (GTK_GRID (grid), end_confirm, 1, 0, 1, 1);
+
+  button = gtk_button_new_with_label ("Go");
+  g_signal_connect (button, "clicked",
+                    G_CALLBACK (end_session), app);
+
+  gtk_grid_attach (GTK_GRID (grid), button, 2, 0, 1, 1);
+
+  gtk_widget_show_all (win);
+
+  gtk_application_add_window (app, GTK_WINDOW (win));
+}
+
+static void
+quit_requested (GtkApplication *app,
+                gpointer        data)
+{
+  g_print ("Received quit-requested, reply: %d, '%s'\n", will_quit, reason);
+  gtk_application_quit_response (app, will_quit, reason);
+}
+
+static void
+quit (GtkApplication *app,
+      gpointer        data)
+{
+  g_print ("Received quit\n");
+}
+
+static void
+quit_cancelled (GtkApplication *app,
+                gpointer        data)
+{
+  g_print ("received quit-cancelled\n");
+}
+
+int
+main (int argc, char *argv[])
+{
+  GtkApplication *app;
+
+  app = gtk_application_new ("org.gtk.Test.session", 0);
+  g_object_set (app, "register-session", TRUE, NULL);
+
+  g_signal_connect (app, "activate",
+                    G_CALLBACK (activate), NULL);
+  g_signal_connect (app, "quit-requested",
+                    G_CALLBACK (quit_requested), NULL);
+  g_signal_connect (app, "quit",
+                    G_CALLBACK (quit), NULL);
+  g_signal_connect (app, "quit-cancelled",
+                    G_CALLBACK (quit_cancelled), NULL);
+
+  g_application_run (G_APPLICATION (app), argc, argv);
+
+  return 0;
+}



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