mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-10 10:50:10 +00:00
Add a test for the new session api
This commit is contained in:
parent
d2ed87fbdc
commit
0191f11a7a
@ -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 = \
|
||||
|
255
tests/testlogout.c
Normal file
255
tests/testlogout.c
Normal file
@ -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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user