diff options
-rw-r--r-- | configure.in.in | 4 | ||||
-rw-r--r-- | icons/48x48/Makefile.am | 2 | ||||
-rw-r--r-- | icons/48x48/xfsm-logout.png | bin | 0 -> 1682 bytes | |||
-rw-r--r-- | icons/48x48/xfsm-reboot.png | bin | 0 -> 3752 bytes | |||
-rw-r--r-- | xfce4-session/shutdown.c | 183 |
5 files changed, 131 insertions, 58 deletions
diff --git a/configure.in.in b/configure.in.in index 20cc0825..04223103 100644 --- a/configure.in.in +++ b/configure.in.in @@ -9,7 +9,7 @@ dnl dnl Version information m4_define([xfsm_version_major], [4]) m4_define([xfsm_version_minor], [3]) -m4_define([xfsm_version_micro], [1]) +m4_define([xfsm_version_micro], [2]) m4_define([xfsm_version_build], [@REVISION@]) m4_define([xfsm_version_tag], [svn]) m4_define([xfsm_version], [xfsm_version_major().xfsm_version_minor().xfsm_version_micro()ifelse(xfsm_version_build(), [], [], [xfsm_version_tag()[-r]xfsm_version_build()])]) @@ -46,10 +46,10 @@ AC_PROG_LIBTOOL() dnl check for standard header files AC_HEADER_STDC -AC_CHECK_FUNCS([getaddrinfo gethostbyname gethostname sigaction strdup sync]) AC_CHECK_HEADERS([errno.h fcntl.h limits.h netdb.h signal.h stdarg.h \ sys/param.h sys/resource.h sys/socket.h sys/time.h sys/wait.h sys/utsname.h \ time.h unistd.h]) +AC_CHECK_FUNCS([getaddrinfo gethostbyname gethostname sigaction strdup sync]) dnl Check for X11 installed XDT_CHECK_LIBX11_REQUIRE() diff --git a/icons/48x48/Makefile.am b/icons/48x48/Makefile.am index 43cd6d6e..0dc46a09 100644 --- a/icons/48x48/Makefile.am +++ b/icons/48x48/Makefile.am @@ -2,6 +2,8 @@ iconsdir = $(datadir)/icons/hicolor/48x48/apps icons_DATA = \ xfce4-session.png \ xfce4-splash.png \ + xfsm-logout.png \ + xfsm-reboot.png \ xfsm-shutdown.png EXTRA_DIST = $(icons_DATA) diff --git a/icons/48x48/xfsm-logout.png b/icons/48x48/xfsm-logout.png Binary files differnew file mode 100644 index 00000000..4170b6d4 --- /dev/null +++ b/icons/48x48/xfsm-logout.png diff --git a/icons/48x48/xfsm-reboot.png b/icons/48x48/xfsm-reboot.png Binary files differnew file mode 100644 index 00000000..1556089c --- /dev/null +++ b/icons/48x48/xfsm-reboot.png diff --git a/xfce4-session/shutdown.c b/xfce4-session/shutdown.c index 709080a7..107ea5a7 100644 --- a/xfce4-session/shutdown.c +++ b/xfce4-session/shutdown.c @@ -59,6 +59,7 @@ static XfsmShutdownHelper *shutdown_helper = NULL; +static GtkWidget *shutdown_dialog = NULL; #ifdef SESSION_SCREENSHOTS static void @@ -109,6 +110,29 @@ entry_activate_cb (GtkWidget *entry, GtkDialog *dialog) gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); } +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); +} /* */ @@ -123,17 +147,18 @@ shutdownDialog(gint *shutdownType, gboolean *saveSession) GtkWidget *dbox; GtkWidget *hbox; GtkWidget *vbox; + GtkWidget *vbox2; GtkWidget *image; - GtkWidget *radio_vbox; - GtkWidget *radio_logout; - GtkWidget *radio_reboot; - GtkWidget *radio_halt; GtkWidget *checkbox; GtkWidget *entry_vbox; GtkWidget *entry; GtkWidget *hidden; - GtkWidget *ok_button; + GtkWidget *logout_button; + GtkWidget *reboot_button; + GtkWidget *halt_button; GtkWidget *cancel_button; + GtkWidget *ok_button; + GtkWidget *header; GdkPixbuf *icon; gboolean saveonexit; gboolean autosave; @@ -262,11 +287,16 @@ shutdownDialog(gint *shutdownType, gboolean *saveSession) gtk_window_set_decorated (GTK_WINDOW (dialog), FALSE); } + shutdown_dialog = dialog; + 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_widget_hide (ok_button); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL); gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); @@ -274,44 +304,91 @@ shutdownDialog(gint *shutdownType, gboolean *saveSession) 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 (NULL, _("End Session")); + gtk_container_set_border_width (GTK_CONTAINER (GTK_BIN (header)->child), + BORDER+2); + gtk_widget_show (header); + gtk_box_pack_start (GTK_BOX (dbox), header, TRUE, TRUE, 0); + + vbox = gtk_vbox_new(FALSE, BORDER); + gtk_box_pack_start(GTK_BOX(dbox), vbox, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (vbox), BORDER); 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); + hbox = gtk_hbox_new (TRUE, BORDER); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + + /* logout */ + logout_button = gtk_button_new (); + 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); + + vbox2 = gtk_vbox_new (FALSE, BORDER); + gtk_container_set_border_width (GTK_CONTAINER (vbox2), BORDER); + gtk_widget_show (vbox2); + gtk_container_add (GTK_CONTAINER (logout_button), vbox2); + + icon = xfce_themed_icon_load ("xfsm-logout", 32); + image = gtk_image_new_from_pixbuf (icon); + gtk_widget_show (image); + gtk_box_pack_start (GTK_BOX (vbox2), image, FALSE, FALSE, 0); + g_object_unref (icon); - 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); + label = gtk_label_new (_("Log Out")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0); + + /* reboot */ + reboot_button = gtk_button_new (); + 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); + + vbox2 = gtk_vbox_new (FALSE, BORDER); + gtk_container_set_border_width (GTK_CONTAINER (vbox2), BORDER); + gtk_widget_show (vbox2); + gtk_container_add (GTK_CONTAINER (reboot_button), vbox2); + + icon = xfce_themed_icon_load ("xfsm-reboot", 32); + image = gtk_image_new_from_pixbuf (icon); + gtk_widget_show (image); + gtk_box_pack_start (GTK_BOX (vbox2), image, FALSE, FALSE, 0); + g_object_unref (icon); + label = gtk_label_new (_("Restart")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0); + + /* halt */ + halt_button = gtk_button_new (); + 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); + + vbox2 = gtk_vbox_new (FALSE, BORDER); + gtk_container_set_border_width (GTK_CONTAINER (vbox2), BORDER); + gtk_widget_show (vbox2); + gtk_container_add (GTK_CONTAINER (halt_button), vbox2); + + icon = xfce_themed_icon_load ("xfsm-shutdown", 32); + image = gtk_image_new_from_pixbuf (icon); + gtk_widget_show (image); + gtk_box_pack_start (GTK_BOX (vbox2), image, FALSE, FALSE, 0); + g_object_unref (icon); + + label = gtk_label_new (_("Shut Down")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0); + + /* save session */ if (!autosave) { checkbox = gtk_check_button_new_with_mnemonic( @@ -333,11 +410,11 @@ shutdownDialog(gint *shutdownType, gboolean *saveSession) 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 +427,7 @@ shutdownDialog(gint *shutdownType, gboolean *saveSession) /* 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 +439,6 @@ shutdownDialog(gint *shutdownType, gboolean *saveSession) 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 +447,14 @@ shutdownDialog(gint *shutdownType, gboolean *saveSession) if (result == GTK_RESPONSE_OK && *shutdownType != SHUTDOWN_LOGOUT && xfsm_shutdown_helper_need_password (shutdown_helper)) { + gtk_widget_show (ok_button); + if (checkbox != NULL) gtk_widget_destroy (checkbox); - gtk_widget_destroy (radio_vbox); + gtk_widget_destroy (vbox); entry_vbox = gtk_vbox_new (FALSE, BORDER); - gtk_box_pack_start (GTK_BOX (vbox), entry_vbox, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (dbox), entry_vbox, TRUE, TRUE, BORDER); gtk_widget_show (entry_vbox); #if GTK_CHECK_VERSION(2,4,0) @@ -417,10 +490,6 @@ shutdownDialog(gint *shutdownType, gboolean *saveSession) if (!xfsm_shutdown_helper_send_password (shutdown_helper, pw)) { - gtk_image_set_from_stock (GTK_IMAGE (image), - GTK_STOCK_DIALOG_ERROR, - GTK_ICON_SIZE_DIALOG); - gtk_label_set_text (GTK_LABEL (label), _("<b>An error occured</b>")); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); @@ -464,6 +533,8 @@ shutdownDialog(gint *shutdownType, gboolean *saveSession) gtk_widget_destroy(dialog); gtk_widget_destroy(hidden); + shutdown_dialog = NULL; + /* Release Keyboard/Mouse pointer grab */ if (!accessibility) { |