diff options
author | Matthias Clasen <mclasen@redhat.com> | 2012-01-08 02:15:49 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2012-01-08 02:15:49 -0500 |
commit | 0191f11a7a72c04ae3100820687b9963d1175f74 (patch) | |
tree | a150130cf778160f4c1b93454d8b9a6dbc9ebe06 /tests/testlogout.c | |
parent | d2ed87fbdc2677621427fca6a610777a836132f0 (diff) | |
download | gtk+-0191f11a7a72c04ae3100820687b9963d1175f74.tar.gz |
Add a test for the new session api
Diffstat (limited to 'tests/testlogout.c')
-rw-r--r-- | tests/testlogout.c | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/tests/testlogout.c b/tests/testlogout.c new file mode 100644 index 0000000000..a896bd4584 --- /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; +} |