summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefano Karapetsas <[email protected]>2014-02-17 15:55:42 +0100
committerStefano Karapetsas <[email protected]>2014-02-17 15:55:42 +0100
commit851092258498b7a8f526726d117a78c12fbf5513 (patch)
treecc68ded4db29e108876f5cc8f2396b0cd340e648
parentf81293abbae8885771f5d5c78e14da1d4bde15a0 (diff)
downloadmate-session-manager-851092258498b7a8f526726d117a78c12fbf5513.tar.bz2
mate-session-manager-851092258498b7a8f526726d117a78c12fbf5513.tar.xz
Show a progress bar in logout dialog
-rw-r--r--mate-session/gsm-logout-dialog.c48
1 files changed, 27 insertions, 21 deletions
diff --git a/mate-session/gsm-logout-dialog.c b/mate-session/gsm-logout-dialog.c
index 323f123..4d70d58 100644
--- a/mate-session/gsm-logout-dialog.c
+++ b/mate-session/gsm-logout-dialog.c
@@ -62,6 +62,8 @@ struct _GsmLogoutDialogPrivate
#endif
GsmConsolekit *consolekit;
+ GtkWidget *progressbar;
+
int timeout;
unsigned int timeout_id;
@@ -300,7 +302,6 @@ gsm_logout_dialog_timeout (gpointer data)
GsmLogoutDialog *logout_dialog;
char *seconds_warning;
char *secondary_text;
- int seconds_to_show;
static char *session_type = NULL;
static gboolean is_not_login;
@@ -313,35 +314,27 @@ gsm_logout_dialog_timeout (gpointer data)
return FALSE;
}
- if (logout_dialog->priv->timeout <= 30) {
- seconds_to_show = logout_dialog->priv->timeout;
- } else {
- seconds_to_show = (logout_dialog->priv->timeout/10) * 10;
-
- if (logout_dialog->priv->timeout % 10)
- seconds_to_show += 10;
- }
-
switch (logout_dialog->priv->type) {
case GSM_DIALOG_LOGOUT_TYPE_LOGOUT:
seconds_warning = ngettext ("You will be automatically logged "
- "out in %d second.",
+ "out in %d second",
"You will be automatically logged "
- "out in %d seconds.",
- seconds_to_show);
+ "out in %d seconds",
+ logout_dialog->priv->timeout);
break;
case GSM_DIALOG_LOGOUT_TYPE_SHUTDOWN:
seconds_warning = ngettext ("This system will be automatically "
- "shut down in %d second.",
+ "shut down in %d second",
"This system will be automatically "
- "shut down in %d seconds.",
- seconds_to_show);
+ "shut down in %d seconds",
+ logout_dialog->priv->timeout);
break;
default:
g_assert_not_reached ();
}
+ seconds_warning = g_strdup_printf (seconds_warning, logout_dialog->priv->timeout);
if (session_type == NULL) {
#ifdef HAVE_SYSTEMD
@@ -365,7 +358,7 @@ gsm_logout_dialog_timeout (gpointer data)
}
if (is_not_login) {
- char *name, *tmp;
+ char *name;
name = g_locale_to_utf8 (g_get_real_name (), -1, NULL, NULL, NULL);
@@ -377,23 +370,26 @@ gsm_logout_dialog_timeout (gpointer data)
name = g_strdup (g_get_user_name ());
}
- tmp = g_strdup_printf (_("You are currently logged in as \"%s\"."), name);
- secondary_text = g_strconcat (tmp, "\n", seconds_warning, NULL);
- g_free (tmp);
+ secondary_text = g_strdup_printf (_("You are currently logged in as \"%s\"."), name);
g_free (name);
} else {
secondary_text = g_strdup (seconds_warning);
}
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (logout_dialog->priv->progressbar),
+ logout_dialog->priv->timeout / 60.0);
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (logout_dialog->priv->progressbar),
+ seconds_warning);
+
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (logout_dialog),
secondary_text,
- seconds_to_show,
NULL);
logout_dialog->priv->timeout--;
g_free (secondary_text);
+ g_free (seconds_warning);
return TRUE;
}
@@ -422,6 +418,7 @@ gsm_get_dialog (GsmDialogLogoutType type,
{
GsmLogoutDialog *logout_dialog;
GtkWidget *dialog_image;
+ GtkWidget *hbox;
const char *primary_text;
const char *icon_name;
@@ -502,6 +499,15 @@ gsm_get_dialog (GsmDialogLogoutType type,
dialog_image = gtk_message_dialog_get_image (GTK_MESSAGE_DIALOG (logout_dialog));
+ hbox = gtk_hbox_new (FALSE, 0);
+ logout_dialog->priv->progressbar = gtk_progress_bar_new ();
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (logout_dialog->priv->progressbar), 1.0);
+ gtk_box_pack_start (GTK_BOX (hbox),
+ logout_dialog->priv->progressbar,
+ TRUE, TRUE, 12);
+ gtk_widget_show_all (hbox);
+ gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (logout_dialog))), hbox);
+
gtk_image_set_from_icon_name (GTK_IMAGE (dialog_image),
icon_name, GTK_ICON_SIZE_DIALOG);
gtk_window_set_icon_name (GTK_WINDOW (logout_dialog), icon_name);