Index: shutdown.c =================================================================== --- shutdown.c (revision 19127) +++ shutdown.c (working copy) @@ -59,6 +59,8 @@ static XfsmShutdownHelper *shutdown_helper = NULL; +static GtkWidget *shutdown_dialog = NULL; + #ifdef SESSION_SCREENSHOTS static void @@ -112,6 +114,32 @@ /* */ +static void +logout_button_clicked (GtkWidget *b, gint *shutdownType) +{ + *shutdownType = SHUTDOWN_LOGOUT; + + gtk_dialog_response (GTK_DIALOG (shutdown_dialog), GTK_RESPONSE_OK); +} + +static void +reboot_button_clicked (GtkWidget *b, gint *shutdownType) +{ + *shutdownType = SHUTDOWN_REBOOT; + + gtk_dialog_response (GTK_DIALOG (shutdown_dialog), GTK_RESPONSE_OK); +} + +static void +halt_button_clicked (GtkWidget *b, gint *shutdownType) +{ + *shutdownType = SHUTDOWN_HALT; + + gtk_dialog_response (GTK_DIALOG (shutdown_dialog), GTK_RESPONSE_OK); +} + +/* + */ gboolean shutdownDialog(gint *shutdownType, gboolean *saveSession) { @@ -124,14 +152,14 @@ GtkWidget *hbox; GtkWidget *vbox; GtkWidget *image; - GtkWidget *radio_vbox; - GtkWidget *radio_logout; - GtkWidget *radio_reboot; - GtkWidget *radio_halt; GtkWidget *checkbox; GtkWidget *entry_vbox; GtkWidget *entry; GtkWidget *hidden; + GtkWidget *header; + GtkWidget *logout_button; + GtkWidget *reboot_button; + GtkWidget *halt_button; GtkWidget *ok_button; GtkWidget *cancel_button; GdkPixbuf *icon; @@ -262,62 +290,35 @@ gtk_window_set_decorated (GTK_WINDOW (dialog), FALSE); } - cancel_button = gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, - GTK_RESPONSE_CANCEL); - ok_button = gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_OK, - GTK_RESPONSE_OK); - - gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL); + shutdown_dialog = dialog; + gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); gtk_window_set_screen (GTK_WINDOW (dialog), screen); + gtk_container_set_border_width (GTK_CONTAINER (dialog), 2); + dbox = GTK_DIALOG(dialog)->vbox; - - hbox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(dbox), hbox, TRUE, TRUE, BORDER); - gtk_widget_show(hbox); - + icon = xfce_themed_icon_load ("xfsm-shutdown", 48); image = gtk_image_new_from_pixbuf (icon); - gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, TRUE, BORDER); - gtk_widget_show(image); g_object_unref (icon); - vbox = gtk_vbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, BORDER); + header = xfce_create_header_with_image (image, _("End Session")); + gtk_widget_show (header); + gtk_box_pack_start (GTK_BOX (dbox), header, TRUE, TRUE, 0); + + vbox = gtk_vbox_new(FALSE, BORDER + 2); + gtk_container_set_border_width (GTK_CONTAINER (vbox), BORDER + 2); + gtk_box_pack_start(GTK_BOX(dbox), vbox, TRUE, TRUE, BORDER + 2); gtk_widget_show(vbox); - label = gtk_label_new(_("What do you want to do next?")); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, BORDER); - gtk_widget_show(label); - - radio_vbox = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox), radio_vbox, TRUE, FALSE, BORDER); - gtk_widget_show (radio_vbox); - - radio_logout = gtk_radio_button_new_with_label ( - NULL, _("Quit current session")); - gtk_box_pack_start (GTK_BOX (radio_vbox), radio_logout, FALSE, FALSE, 0); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_logout), TRUE); - gtk_widget_show (radio_logout); - - radio_reboot = gtk_radio_button_new_with_label_from_widget ( - GTK_RADIO_BUTTON (radio_logout), _("Reboot the computer")); - gtk_box_pack_start (GTK_BOX (radio_vbox), radio_reboot, FALSE, FALSE, 0); - gtk_widget_show (radio_reboot); - - radio_halt = gtk_radio_button_new_with_label_from_widget ( - GTK_RADIO_BUTTON (radio_logout), _("Turn off the computer")); - gtk_box_pack_start (GTK_BOX (radio_vbox), radio_halt, FALSE, FALSE, 0); - gtk_widget_show (radio_halt); - if (!autosave) { checkbox = gtk_check_button_new_with_mnemonic( _("_Save session for future logins")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox), saveonexit); - gtk_box_pack_start(GTK_BOX(vbox), checkbox, FALSE, TRUE, BORDER); + gtk_box_pack_start(GTK_BOX(vbox), checkbox, FALSE, TRUE, 0); gtk_widget_show(checkbox); } else @@ -325,6 +326,38 @@ checkbox = NULL; } + hbox = GTK_DIALOG (dialog)->action_area; + + /* logout */ + logout_button = gtk_button_new_with_label (_("Log Out")); + gtk_widget_show (logout_button); + gtk_box_pack_start (GTK_BOX (hbox), logout_button, TRUE, TRUE, 0); + + g_signal_connect (logout_button, "clicked", + G_CALLBACK (logout_button_clicked), shutdownType); + + /* reboot */ + reboot_button = gtk_button_new_with_label (_("Restart Computer")); + gtk_widget_show (reboot_button); + gtk_box_pack_start (GTK_BOX (hbox), reboot_button, TRUE, TRUE, 0); + + g_signal_connect (reboot_button, "clicked", + G_CALLBACK (reboot_button_clicked), shutdownType); + + /* halt */ + halt_button = gtk_button_new_with_label (_("Shut Down")); + gtk_widget_show (halt_button); + gtk_box_pack_start (GTK_BOX (hbox), halt_button, TRUE, TRUE, 0); + + g_signal_connect (halt_button, "clicked", + G_CALLBACK (halt_button_clicked), shutdownType); + + /* cancel */ + cancel_button = gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL); + + gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL); + /* create small border */ if (!accessibility) xfsm_window_add_border (GTK_WINDOW (dialog)); @@ -333,11 +366,11 @@ xfce_gtk_window_center_on_monitor (GTK_WINDOW (dialog), screen, monitor); /* connect to the shutdown helper */ - shutdown_helper = xfsm_shutdown_helper_spawn (); - if (shutdown_helper == NULL || !kiosk_can_shutdown) + if (!kiosk_can_shutdown || + (shutdown_helper = xfsm_shutdown_helper_spawn ()) == NULL) { - gtk_widget_set_sensitive (radio_reboot, FALSE); - gtk_widget_set_sensitive (radio_halt, FALSE); + gtk_widget_set_sensitive (reboot_button, FALSE); + gtk_widget_set_sensitive (halt_button, FALSE); } /* save portion of the root window covered by the dialog */ @@ -350,7 +383,7 @@ /* need to realize the dialog first! */ gtk_widget_show_now (dialog); - gtk_widget_grab_focus (ok_button); + gtk_widget_grab_focus (logout_button); /* Grab Keyboard and Mouse pointer */ if (!accessibility) @@ -362,12 +395,6 @@ if (result == GTK_RESPONSE_OK) { *saveSession = autosave || gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(checkbox)); - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radio_logout))) - *shutdownType = SHUTDOWN_LOGOUT; - else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radio_reboot))) - *shutdownType = SHUTDOWN_REBOOT; - else - *shutdownType = SHUTDOWN_HALT; } gtk_widget_hide (dialog); @@ -376,12 +403,17 @@ if (result == GTK_RESPONSE_OK && *shutdownType != SHUTDOWN_LOGOUT && xfsm_shutdown_helper_need_password (shutdown_helper)) { - if (checkbox != NULL) - gtk_widget_destroy (checkbox); - gtk_widget_destroy (radio_vbox); - + gtk_widget_destroy (vbox); + gtk_widget_destroy (logout_button); + gtk_widget_destroy (reboot_button); + gtk_widget_destroy (halt_button); + + ok_button = gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_OK, + GTK_RESPONSE_OK); + entry_vbox = gtk_vbox_new (FALSE, BORDER); - gtk_box_pack_start (GTK_BOX (vbox), entry_vbox, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (entry_vbox), BORDER + 2); + gtk_box_pack_start (GTK_BOX (dbox), entry_vbox, TRUE, TRUE, 0); gtk_widget_show (entry_vbox); #if GTK_CHECK_VERSION(2,4,0) @@ -464,6 +496,8 @@ gtk_widget_destroy(dialog); gtk_widget_destroy(hidden); + shutdown_dialog = NULL; + /* Release Keyboard/Mouse pointer grab */ if (!accessibility) {