From 0c8dbfc17a82b877ec38e72fcfef1a6bdf2ab8ca Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 23 Feb 2010 11:10:21 -0600 Subject: Removing the old logout dialog. It's been through too much, better to start over. --- src/gtk-dialog/logout-dialog.c | 371 ----------------------------------------- src/gtk-dialog/logout-dialog.h | 99 ----------- 2 files changed, 470 deletions(-) delete mode 100644 src/gtk-dialog/logout-dialog.c delete mode 100644 src/gtk-dialog/logout-dialog.h (limited to 'src') diff --git a/src/gtk-dialog/logout-dialog.c b/src/gtk-dialog/logout-dialog.c deleted file mode 100644 index 65df9fe..0000000 --- a/src/gtk-dialog/logout-dialog.c +++ /dev/null @@ -1,371 +0,0 @@ -/* - * libgksuui -- Gtk+ widget and convenience functions for requesting passwords - * Copyright (C) 2004 Gustavo Noronha Silva - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA - */ - -#include -#include - -#include -#include -#include -#include - -#include "logout-dialog.h" -#include "ck-pk-helper.h" - -enum { - PROP_ZERO, - PROP_ACTION -}; - - -static void -logout_dialog_class_init (LogoutDialogClass *klass); - -static void -logout_dialog_init (LogoutDialog *logout_dialog); - -static void -set_property (GObject * object, guint param_id, const GValue * value, GParamSpec *pspec); - -static void -get_property (GObject * object, guint param_id, GValue * value, GParamSpec *pspec); - -static gboolean -timer_cb (gpointer data); - -static void -show_cb (GtkWidget * widget, gpointer data); - -static void -check_restart (LogoutDialog * dialog); - -static gchar* -get_plural_string (LogoutDialog * dialog); - -static const gchar * title_strings[LOGOUT_DIALOG_ACTION_CNT] = { - /* LOGOUT_DIALOG_LOGOUT, */ NC_("title", "Log Out"), - /* LOGOUT_DIALOG_RESTART, */ NC_("title", "Restart"), - /* LOGOUT_DIALOG_SHUTDOWN, */ NC_("title", "Shut Down") -}; - -static const gchar * button_strings[LOGOUT_DIALOG_ACTION_CNT] = { - /* LOGOUT_DIALOG_LOGOUT, */ NC_("button", "Log Out"), - /* LOGOUT_DIALOG_RESTART, */ NC_("button", "Restart"), - /* LOGOUT_DIALOG_SHUTDOWN, */ NC_("button", "Shut Down") -}; - -static const gchar * restart_auth = N_("Restart..."); - -static const gchar * body_logout_update = N_("You recently installed updates which will only take effect after a restart. Restart to apply software updates."); - -static const gchar * icon_strings[LOGOUT_DIALOG_ACTION_CNT] = { - /* LOGOUT_DIALOG_LOGOUT, */ "system-log-out", - /* LOGOUT_DIALOG_RESTART, */ "system-restart", - /* LOGOUT_DIALOG_SHUTDOWN, */ "system-shutdown" -}; - -GType -logout_dialog_get_type (void) -{ - static GType type = 0; - - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (LogoutDialogClass), /* size of class */ - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) logout_dialog_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (LogoutDialog), /* size of object */ - 0, /* n_preallocs */ - (GInstanceInitFunc) logout_dialog_init /* instance_init */ - }; - type = g_type_register_static (gtk_dialog_get_type (), - "LogoutDialogType", - &info, 0); - } - - return type; -} - -static gchar* -get_plural_string (LogoutDialog * dialog) -{ - static gchar *plural_string = ""; - - switch (dialog->action) - { - case LOGOUT_DIALOG_LOGOUT: - plural_string = ngettext("You will be logged out in %d second.", - "You will be logged out in %d seconds.", - dialog->timeout); - break; - case LOGOUT_DIALOG_RESTART: - plural_string = ngettext("The computer will restart in %d second.", - "The computer will restart in %d seconds.", - dialog->timeout); - break; - case LOGOUT_DIALOG_SHUTDOWN: - plural_string = ngettext("The computer will be shut down in %d second.", - "The computer will be shut down in %d seconds.", - dialog->timeout); - break; - default: - break; - } - - return plural_string; -} - -static void -logout_dialog_class_init (LogoutDialogClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - gobject_class->set_property = set_property; - gobject_class->get_property = get_property; - - g_object_class_install_property(gobject_class, PROP_ACTION, - g_param_spec_int("action", NULL, NULL, - LOGOUT_DIALOG_LOGOUT, LOGOUT_DIALOG_SHUTDOWN, - LOGOUT_DIALOG_LOGOUT, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); - - return; -} - -static void -set_property (GObject * object, guint param_id, const GValue * value, GParamSpec *pspec) -{ - g_return_if_fail(param_id == PROP_ACTION); - - LogoutDialog * dialog = LOGOUT_DIALOG(object); - dialog->action = (LogoutDialogAction)g_value_get_int(value); - - gtk_image_set_from_icon_name(GTK_IMAGE(dialog->image), icon_strings[dialog->action], GTK_ICON_SIZE_DIALOG); - gtk_window_set_title (GTK_WINDOW(dialog), _(title_strings[dialog->action])); - gtk_window_set_icon_name (GTK_WINDOW(dialog), icon_strings[dialog->action]); - gtk_widget_hide(dialog->message); - gtk_button_set_label(GTK_BUTTON(dialog->ok_button), _(button_strings[dialog->action])); - - gchar * timeouttxt = g_strdup_printf(get_plural_string(dialog), dialog->timeout); - gtk_label_set_text(GTK_LABEL(dialog->timeout_text), timeouttxt); - g_free(timeouttxt); - - check_restart(dialog); - - return; -} - -static void -get_property (GObject * object, guint param_id, GValue * value, GParamSpec *pspec) -{ - g_return_if_fail(param_id == PROP_ACTION); - g_value_set_int(value, LOGOUT_DIALOG(object)->action); -} - -static gboolean -timer_cb (gpointer data) -{ - LogoutDialog * dialog = LOGOUT_DIALOG(data); - - if (dialog->timeout == 0) { - gtk_dialog_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); - dialog->timerfunc = 0; - return FALSE; - } else { - dialog->timeout--; - - gchar * timeouttxt = g_strdup_printf(get_plural_string(dialog), dialog->timeout); - gtk_label_set_text(GTK_LABEL(dialog->timeout_text), timeouttxt); - g_free(timeouttxt); - } - - return TRUE; -} - -static void -show_cb (GtkWidget * widget, gpointer data) -{ - LogoutDialog * dialog = LOGOUT_DIALOG(widget); - - if (dialog->timerfunc != 0) { - g_source_remove(dialog->timerfunc); - dialog->timerfunc = 0; - } - - dialog->timerfunc = g_timeout_add_seconds(1, timer_cb, dialog); - return; -} - -static void -check_restart (LogoutDialog * dialog) -{ - if (dialog->action != LOGOUT_DIALOG_LOGOUT) { - return; - } - - if (g_file_test("/var/run/reboot-required", G_FILE_TEST_EXISTS)) { - if (pk_can_do_action("org.freedesktop.consolekit.system.restart", NULL) || - pk_can_do_action("org.freedesktop.consolekit.system.restart-multiple-users", NULL)) { - - gtk_label_set_text(GTK_LABEL(dialog->message), _(body_logout_update)); - gtk_widget_show(dialog->message); - if (pk_require_auth(LOGOUT_DIALOG_RESTART)) { - gtk_button_set_label(GTK_BUTTON(dialog->restart_button), _(restart_auth)); - } else { - gtk_button_set_label(GTK_BUTTON(dialog->restart_button), _(button_strings[LOGOUT_DIALOG_RESTART])); - } - gtk_widget_show(dialog->restart_button); - } - } - - return; -} - -static gboolean -focus_out_cb (GtkWidget *widget, GdkEventFocus *event, gpointer user_data) -{ - gtk_window_present (GTK_WINDOW(widget)); - return TRUE; -} - -static void -logout_dialog_init (LogoutDialog *logout_dialog) -{ - GtkDialog *dialog; - gint border_width = 6; - - logout_dialog->timeout = 60; - logout_dialog->timerfunc = 0; - - /* dialog window */ - dialog = GTK_DIALOG(logout_dialog); - - /* make sure that our window will always have the focus */ - g_signal_connect (G_OBJECT(dialog), "focus-out-event", - G_CALLBACK(focus_out_cb), NULL); - - logout_dialog->main_vbox = dialog->vbox; - - gtk_window_set_title (GTK_WINDOW(logout_dialog), ""); - gtk_dialog_set_has_separator (GTK_DIALOG(logout_dialog), FALSE); - gtk_container_set_border_width (GTK_CONTAINER(logout_dialog), border_width); - gtk_box_set_spacing (GTK_BOX(logout_dialog->main_vbox), 12); - gtk_window_set_resizable (GTK_WINDOW(logout_dialog), FALSE); - - gtk_window_stick(GTK_WINDOW(logout_dialog)); - gtk_window_set_keep_above(GTK_WINDOW(logout_dialog), TRUE); - gtk_widget_realize(GTK_WIDGET(logout_dialog)); - /* remove superfluous window buttons */ - gdk_window_set_functions (GTK_WIDGET(logout_dialog)->window, 0); - gdk_window_set_decorations (GTK_WIDGET(logout_dialog)->window, GDK_DECOR_BORDER | GDK_DECOR_TITLE); - - /* center window */ - gtk_window_set_position (GTK_WINDOW(logout_dialog), GTK_WIN_POS_CENTER); - - /* the action buttons */ - /* the cancel button */ - logout_dialog->restart_button = gtk_dialog_add_button (dialog, - GTK_STOCK_HELP, - GTK_RESPONSE_HELP); - gtk_button_set_label(GTK_BUTTON(logout_dialog->restart_button), _(button_strings[LOGOUT_DIALOG_RESTART])); - gtk_widget_hide(logout_dialog->restart_button); - - /* the cancel button */ - logout_dialog->cancel_button = gtk_dialog_add_button (dialog, - GTK_STOCK_CANCEL, - GTK_RESPONSE_CANCEL); - /* the ok button */ - logout_dialog->ok_button = gtk_dialog_add_button (dialog, - GTK_STOCK_OK, - GTK_RESPONSE_OK); - gtk_widget_grab_default (logout_dialog->ok_button); - - /* Window Title and Icon */ - gtk_window_set_title (GTK_WINDOW(logout_dialog), _(title_strings[logout_dialog->action])); - gtk_window_set_icon_name (GTK_WINDOW(logout_dialog), icon_strings[logout_dialog->action]); - - /* hbox */ - logout_dialog->hbox = gtk_hbox_new (FALSE, 12); - gtk_container_set_border_width (GTK_CONTAINER(logout_dialog->hbox), 6); - gtk_box_pack_start (GTK_BOX(logout_dialog->main_vbox), - logout_dialog->hbox, FALSE, FALSE, 0); - gtk_widget_show (logout_dialog->hbox); - - /* image */ - logout_dialog->image = - gtk_image_new_from_icon_name (icon_strings[logout_dialog->action], - GTK_ICON_SIZE_DIALOG); - gtk_misc_set_alignment (GTK_MISC(logout_dialog->image), 0.5, 0); - gtk_box_pack_start (GTK_BOX(logout_dialog->hbox), logout_dialog->image, - FALSE, FALSE, 0); - gtk_widget_show (logout_dialog->image); - - /* vbox for text */ - logout_dialog->vbox_text = gtk_vbox_new(FALSE, 12); - gtk_box_pack_start(GTK_BOX(logout_dialog->hbox), logout_dialog->vbox_text, TRUE, TRUE, 0); - gtk_widget_show(logout_dialog->vbox_text); - - /* Message */ - logout_dialog->message = gtk_label_new(""); - gtk_label_set_line_wrap(GTK_LABEL(logout_dialog->message), TRUE); - gtk_label_set_single_line_mode(GTK_LABEL(logout_dialog->message), FALSE); - gtk_label_set_selectable(GTK_LABEL(logout_dialog->message), TRUE); - gtk_misc_set_alignment (GTK_MISC(logout_dialog->message), 0.0, 0.0); - gtk_box_pack_start(GTK_BOX(logout_dialog->vbox_text), logout_dialog->message, TRUE, TRUE, 0); - gtk_widget_show(logout_dialog->message); - - /* timeout */ - logout_dialog->timeout_text = gtk_label_new(""); - gtk_label_set_line_wrap(GTK_LABEL(logout_dialog->timeout_text), TRUE); - gtk_label_set_single_line_mode(GTK_LABEL(logout_dialog->timeout_text), FALSE); - gtk_label_set_selectable(GTK_LABEL(logout_dialog->timeout_text), FALSE); - gtk_misc_set_alignment (GTK_MISC(logout_dialog->timeout_text), 0.0, 0.5); - gtk_box_pack_start(GTK_BOX(logout_dialog->vbox_text), logout_dialog->timeout_text, TRUE, TRUE, 0); - gtk_widget_show(logout_dialog->timeout_text); - - g_signal_connect(G_OBJECT(logout_dialog), "show", G_CALLBACK(show_cb), logout_dialog); - - return; -} - -/** - * logout_dialog_new: - * - * Creates a new #LogoutDialog. - * - * Returns: the new #LogoutDialog - */ -GtkWidget* -logout_dialog_new (LogoutDialogAction action) -{ - LogoutDialog * dialog = g_object_new (LOGOUT_TYPE_DIALOG, "action", action, NULL); - return GTK_WIDGET(dialog); -} - -LogoutDialogAction -logout_dialog_get_action (LogoutDialog * dialog) -{ - return dialog->action; -} - diff --git a/src/gtk-dialog/logout-dialog.h b/src/gtk-dialog/logout-dialog.h deleted file mode 100644 index 8b0ff09..0000000 --- a/src/gtk-dialog/logout-dialog.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * libgksuui -- Gtk+ widget and convenience functions for requesting passwords - * Copyright (C) 2004 Gustavo Noronha Silva - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA - */ - -#ifndef __LOGOUT_DIALOG_H__ -#define __LOGOUT_DIALOG_H__ - -#include - -G_BEGIN_DECLS - -#define LOGOUT_TYPE_DIALOG (logout_dialog_get_type ()) -#define LOGOUT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LOGOUT_TYPE_DIALOG, LogoutDialog)) -#define LOGOUT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LOGOUT_TYPE_DIALOG, LogoutDialogClass)) -#define LOGOUT_IS_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LOGOUT_TYPE_DIALOG)) -#define LOGOUT_IS_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LOGOUT_TYPE_CONTEXT)) -#define LOGOUT_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LOGOUT_TYPE_DIALOG, LogoutDialogClass)) - -typedef struct _LogoutDialogClass LogoutDialogClass; -typedef struct _LogoutDialog LogoutDialog; -typedef enum _LogoutDialogAction LogoutDialogAction; - -enum _LogoutDialogAction { - LOGOUT_DIALOG_LOGOUT, - LOGOUT_DIALOG_RESTART, - LOGOUT_DIALOG_SHUTDOWN, - LOGOUT_DIALOG_ACTION_CNT -}; - -struct _LogoutDialogClass -{ - GtkDialogClass parent_class; -}; - -/** - * LogoutDialog: - * @dialog: parent widget - * @main_vbox: GtkDialog's vbox - * @hbox: box to separate the image of the right-side widgets - * @image: the authorization image, left-side widget - * @entry_vbox: right-side widgets container - * @label: message describing what is required from the user, - * right-side widget - * @entry: place to type the password in, right-side widget - * @ok_button: OK button of the dialog - * @cancel_button: Cancel button of the dialog - * - * Convenience widget based on #GtkDialog to request a password. - */ -struct _LogoutDialog -{ - GtkDialog dialog; - - GtkWidget *main_vbox; - GtkWidget *hbox; - GtkWidget *image; - GtkWidget *ok_button; - GtkWidget *cancel_button; - GtkWidget *restart_button; - GtkWidget *vbox_text; - GtkWidget *message; - GtkWidget *timeout_text; - - LogoutDialogAction action; - - /* private */ - gchar * timeout_result; - guint timeout; - guint timerfunc; -}; - -GType -logout_dialog_get_type (void); - -GtkWidget* -logout_dialog_new (LogoutDialogAction action); - -LogoutDialogAction -logout_dialog_get_action (LogoutDialog * widget); - -G_END_DECLS - -#endif -- cgit v1.2.3 From c96dfa4fcf905cdf73b02589b2c64b83849160a6 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 23 Feb 2010 11:33:18 -0600 Subject: Place holder new object --- src/gtk-dialog/Makefile.am | 4 ++-- src/gtk-dialog/dialog.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++ src/gtk-dialog/dialog.h | 31 +++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 src/gtk-dialog/dialog.c create mode 100644 src/gtk-dialog/dialog.h (limited to 'src') diff --git a/src/gtk-dialog/Makefile.am b/src/gtk-dialog/Makefile.am index 3f14d78..2c7e61a 100644 --- a/src/gtk-dialog/Makefile.am +++ b/src/gtk-dialog/Makefile.am @@ -7,8 +7,8 @@ gtk_logout_helper_SOURCES = \ ck-pk-helper.h \ gconf-helper.c \ gconf-helper.h \ - logout-dialog.c \ - logout-dialog.h + dialog.c \ + dialog.h gtk_logout_helper_CFLAGS = $(SESSIONSERVICE_CFLAGS) $(GTKLOGOUTHELPER_CFLAGS) $(GCONF_CFLAGS) -Wall -Werror -DINDICATOR_ICONS_DIR="\"$(INDICATORICONSDIR)\"" gtk_logout_helper_LDADD = $(SESSIONSERVICE_LIBS) $(GTKLOGOUTHELPER_LIBS) $(GCONF_LIBS) diff --git a/src/gtk-dialog/dialog.c b/src/gtk-dialog/dialog.c new file mode 100644 index 0000000..c9d66b3 --- /dev/null +++ b/src/gtk-dialog/dialog.c @@ -0,0 +1,58 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "dialog.h" + +typedef struct _LogoutDialogPrivate LogoutDialogPrivate; +struct _LogoutDialogPrivate { + guint type; +}; + +#define LOGOUT_DIALOG_GET_PRIVATE(o) \ +(G_TYPE_INSTANCE_GET_PRIVATE ((o), LOGOUT_DIALOG_TYPE, LogoutDialogPrivate)) + +static void logout_dialog_class_init (LogoutDialogClass *klass); +static void logout_dialog_init (LogoutDialog *self); +static void logout_dialog_dispose (GObject *object); +static void logout_dialog_finalize (GObject *object); + +G_DEFINE_TYPE (LogoutDialog, logout_dialog, GTK_TYPE_DIALOG); + +static void +logout_dialog_class_init (LogoutDialogClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (LogoutDialogPrivate)); + + object_class->dispose = logout_dialog_dispose; + object_class->finalize = logout_dialog_finalize; + + return; +} + +static void +logout_dialog_init (LogoutDialog *self) +{ + + return; +} + +static void +logout_dialog_dispose (GObject *object) +{ + + + G_OBJECT_CLASS (logout_dialog_parent_class)->dispose (object); + return; +} + +static void +logout_dialog_finalize (GObject *object) +{ + + + G_OBJECT_CLASS (logout_dialog_parent_class)->finalize (object); + return; +} diff --git a/src/gtk-dialog/dialog.h b/src/gtk-dialog/dialog.h new file mode 100644 index 0000000..eeb93ed --- /dev/null +++ b/src/gtk-dialog/dialog.h @@ -0,0 +1,31 @@ +#ifndef __LOGOUT_DIALOG_H__ +#define __LOGOUT_DIALOG_H__ + +#include +#include + +G_BEGIN_DECLS + +#define LOGOUT_DIALOG_TYPE (logout_dialog_get_type ()) +#define LOGOUT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LOGOUT_DIALOG_TYPE, LogoutDialog)) +#define LOGOUT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LOGOUT_DIALOG_TYPE, LogoutDialogClass)) +#define IS_LOGOUT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LOGOUT_DIALOG_TYPE)) +#define IS_LOGOUT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LOGOUT_DIALOG_TYPE)) +#define LOGOUT_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LOGOUT_DIALOG_TYPE, LogoutDialogClass)) + +typedef struct _LogoutDialog LogoutDialog; +typedef struct _LogoutDialogClass LogoutDialogClass; + +struct _LogoutDialogClass { + GtkDialogClass parent_class; +}; + +struct _LogoutDialog { + GtkDialog parent; +}; + +GType logout_dialog_get_type (void); + +G_END_DECLS + +#endif -- cgit v1.2.3 From 40e989fdb054344be699414ae040585f4f87f657 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 24 Feb 2010 17:12:55 -0600 Subject: Adding some types of dialog and a new function. --- src/gtk-dialog/dialog.c | 7 +++++++ src/gtk-dialog/dialog.h | 8 ++++++++ 2 files changed, 15 insertions(+) (limited to 'src') diff --git a/src/gtk-dialog/dialog.c b/src/gtk-dialog/dialog.c index c9d66b3..06b146c 100644 --- a/src/gtk-dialog/dialog.c +++ b/src/gtk-dialog/dialog.c @@ -56,3 +56,10 @@ logout_dialog_finalize (GObject *object) G_OBJECT_CLASS (logout_dialog_parent_class)->finalize (object); return; } + +LogoutDialog * +logout_dialog_new (LogoutDialogType type) +{ + + return NULL; +} diff --git a/src/gtk-dialog/dialog.h b/src/gtk-dialog/dialog.h index eeb93ed..79c8a05 100644 --- a/src/gtk-dialog/dialog.h +++ b/src/gtk-dialog/dialog.h @@ -13,6 +13,13 @@ G_BEGIN_DECLS #define IS_LOGOUT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LOGOUT_DIALOG_TYPE)) #define LOGOUT_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LOGOUT_DIALOG_TYPE, LogoutDialogClass)) +typedef enum _LogoutDialogType LogoutDialogType; +enum _LogoutDialogType { + LOGOUT_DIALOG_TYPE_LOG_OUT, + LOGOUT_DIALOG_TYPE_RESTART, + LOGOUT_DIALOG_TYPE_SHUTDOWN +}; + typedef struct _LogoutDialog LogoutDialog; typedef struct _LogoutDialogClass LogoutDialogClass; @@ -25,6 +32,7 @@ struct _LogoutDialog { }; GType logout_dialog_get_type (void); +LogoutDialog * logout_dialog_new (LogoutDialogType type); G_END_DECLS -- cgit v1.2.3 From 64602f8dd39b0fd35b0bfc6697fe62bd7a2de0ad Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 24 Feb 2010 17:16:14 -0600 Subject: Changing to new enums and function prototypes. --- src/gtk-dialog/ck-pk-helper.c | 10 +++++----- src/gtk-dialog/ck-pk-helper.h | 2 +- src/gtk-dialog/dialog.h | 2 ++ src/gtk-dialog/gtk-logout-helper.c | 22 +++++++++++----------- 4 files changed, 19 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/gtk-dialog/ck-pk-helper.c b/src/gtk-dialog/ck-pk-helper.c index dc7d900..6879517 100644 --- a/src/gtk-dialog/ck-pk-helper.c +++ b/src/gtk-dialog/ck-pk-helper.c @@ -26,7 +26,7 @@ with this program. If not, see . #include #include -#include "logout-dialog.h" +#include "dialog.h" #include "ck-pk-helper.h" static gboolean @@ -150,20 +150,20 @@ ck_multiple_users (void) } gboolean -pk_require_auth (LogoutDialogAction action) { - if (action == LOGOUT_DIALOG_LOGOUT) { +pk_require_auth (LogoutDialogType action) { + if (action == LOGOUT_DIALOG_TYPE_LOG_OUT) { return FALSE; } gchar * pk_action; if (ck_multiple_users()) { - if (action == LOGOUT_DIALOG_RESTART) { + if (action == LOGOUT_DIALOG_TYPE_RESTART) { pk_action = "org.freedesktop.consolekit.system.restart-multiple-users"; } else { pk_action = "org.freedesktop.consolekit.system.stop-multiple-users"; } } else { - if (action == LOGOUT_DIALOG_RESTART) { + if (action == LOGOUT_DIALOG_TYPE_RESTART) { pk_action = "org.freedesktop.consolekit.system.restart"; } else { pk_action = "org.freedesktop.consolekit.system.stop"; diff --git a/src/gtk-dialog/ck-pk-helper.h b/src/gtk-dialog/ck-pk-helper.h index 501a8c8..dfbb432 100644 --- a/src/gtk-dialog/ck-pk-helper.h +++ b/src/gtk-dialog/ck-pk-helper.h @@ -26,7 +26,7 @@ with this program. If not, see . #include -gboolean pk_require_auth (LogoutDialogAction action); +gboolean pk_require_auth (LogoutDialogType action); gboolean pk_can_do_action (const gchar *action_id, PolkitAuthorizationResult ** pol_result); #endif /* __CK_PK_HELPER__ */ diff --git a/src/gtk-dialog/dialog.h b/src/gtk-dialog/dialog.h index 79c8a05..bd6abd2 100644 --- a/src/gtk-dialog/dialog.h +++ b/src/gtk-dialog/dialog.h @@ -4,6 +4,8 @@ #include #include +#include + G_BEGIN_DECLS #define LOGOUT_DIALOG_TYPE (logout_dialog_get_type ()) diff --git a/src/gtk-dialog/gtk-logout-helper.c b/src/gtk-dialog/gtk-logout-helper.c index d8aea6b..09e6e86 100644 --- a/src/gtk-dialog/gtk-logout-helper.c +++ b/src/gtk-dialog/gtk-logout-helper.c @@ -25,12 +25,12 @@ with this program. If not, see . #include #include #include -#include "logout-dialog.h" +#include "dialog.h" #include "ck-pk-helper.h" #include "gconf-helper.h" static void -session_action (LogoutDialogAction action) +session_action (LogoutDialogType action) { DBusGConnection * sbus; DBusGProxy * sm_proxy; @@ -55,13 +55,13 @@ session_action (LogoutDialogAction action) g_clear_error (&error); - if (action == LOGOUT_DIALOG_LOGOUT) { + if (action == LOGOUT_DIALOG_TYPE_LOG_OUT) { res = dbus_g_proxy_call_with_timeout (sm_proxy, "Logout", INT_MAX, &error, G_TYPE_UINT, 1, G_TYPE_INVALID, G_TYPE_INVALID); - } else if (action == LOGOUT_DIALOG_SHUTDOWN) { + } else if (action == LOGOUT_DIALOG_TYPE_SHUTDOWN) { res = dbus_g_proxy_call_with_timeout (sm_proxy, "RequestShutdown", INT_MAX, &error, G_TYPE_INVALID, G_TYPE_INVALID); - } else if (action == LOGOUT_DIALOG_RESTART) { + } else if (action == LOGOUT_DIALOG_TYPE_RESTART) { res = dbus_g_proxy_call_with_timeout (sm_proxy, "RequestReboot", INT_MAX, &error, G_TYPE_INVALID, G_TYPE_INVALID); } else { @@ -85,26 +85,26 @@ session_action (LogoutDialogAction action) return; } -static LogoutDialogAction type = LOGOUT_DIALOG_LOGOUT; +static LogoutDialogType type = LOGOUT_DIALOG_TYPE_LOG_OUT; static gboolean option_logout (const gchar * arg, const gchar * value, gpointer data, GError * error) { - type = LOGOUT_DIALOG_LOGOUT; + type = LOGOUT_DIALOG_TYPE_LOG_OUT; return TRUE; } static gboolean option_shutdown (const gchar * arg, const gchar * value, gpointer data, GError * error) { - type = LOGOUT_DIALOG_SHUTDOWN; + type = LOGOUT_DIALOG_TYPE_SHUTDOWN; return TRUE; } static gboolean option_restart (const gchar * arg, const gchar * value, gpointer data, GError * error) { - type = LOGOUT_DIALOG_RESTART; + type = LOGOUT_DIALOG_TYPE_RESTART; return TRUE; } @@ -150,7 +150,7 @@ main (int argc, char * argv[]) not getting a dialog at all. */ /* if (!pk_require_auth(type) && !supress_confirmations()) { */ if (!supress_confirmations()) { - dialog = logout_dialog_new(type); + dialog = GTK_WIDGET(logout_dialog_new(type)); } if (dialog != NULL) { @@ -158,7 +158,7 @@ main (int argc, char * argv[]) gtk_widget_hide(dialog); if (response == GTK_RESPONSE_HELP) { - type = LOGOUT_DIALOG_RESTART; + type = LOGOUT_DIALOG_TYPE_RESTART; response = GTK_RESPONSE_OK; } -- cgit v1.2.3 From bdd9261ccfbd3bf0e59a6cb495663c425a0dcbe3 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 13:39:51 -0600 Subject: Adding in all the strings. --- src/gtk-dialog/dialog.c | 34 ++++++++++++++++++++++++++++++++++ src/gtk-dialog/dialog.h | 3 ++- 2 files changed, 36 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gtk-dialog/dialog.c b/src/gtk-dialog/dialog.c index 06b146c..186a506 100644 --- a/src/gtk-dialog/dialog.c +++ b/src/gtk-dialog/dialog.c @@ -2,8 +2,42 @@ #include "config.h" #endif +#include + #include "dialog.h" +/* Strings */ + +static const gchar * title_strings[LOGOUT_DIALOG_TYPE_CNT] = { + /* LOGOUT_DIALOG_LOGOUT, */ NC_("title", "Log Out"), + /* LOGOUT_DIALOG_RESTART, */ NC_("title", "Restart"), + /* LOGOUT_DIALOG_SHUTDOWN, */ NC_("title", "Switch Off") +}; + +static const gchar * body_strings[LOGOUT_DIALOG_TYPE_CNT] = { + /* LOGOUT_DIALOG_LOGOUT, */ N_("Are you sure you want to close all programs and log out?"), + /* LOGOUT_DIALOG_RESTART, */ N_("Are you sure you want to close all programs and restart the computer?"), + /* LOGOUT_DIALOG_SHUTDOWN, */ N_("Are you sure you want to close all programs and shut down the computer?") +}; + +static const gchar * button_strings[LOGOUT_DIALOG_TYPE_CNT] = { + /* LOGOUT_DIALOG_LOGOUT, */ NC_("button", "Log Out"), + /* LOGOUT_DIALOG_RESTART, */ NC_("button", "Restart"), + /* LOGOUT_DIALOG_SHUTDOWN, */ NC_("button", "Switch Off") +}; + +static const gchar * restart_updates = N_("Restart Instead"); +static const gchar * restart_auth = N_("Restart..."); +static const gchar * body_logout_update = N_("Some software updates won't apply until the computer next restarts."); + +static const gchar * icon_strings[LOGOUT_DIALOG_TYPE_CNT] = { + /* LOGOUT_DIALOG_LOGOUT, */ "system-log-out", + /* LOGOUT_DIALOG_RESTART, */ "system-restart", + /* LOGOUT_DIALOG_SHUTDOWN, */ "system-shutdown" +}; + + + typedef struct _LogoutDialogPrivate LogoutDialogPrivate; struct _LogoutDialogPrivate { guint type; diff --git a/src/gtk-dialog/dialog.h b/src/gtk-dialog/dialog.h index bd6abd2..1e6f575 100644 --- a/src/gtk-dialog/dialog.h +++ b/src/gtk-dialog/dialog.h @@ -19,7 +19,8 @@ typedef enum _LogoutDialogType LogoutDialogType; enum _LogoutDialogType { LOGOUT_DIALOG_TYPE_LOG_OUT, LOGOUT_DIALOG_TYPE_RESTART, - LOGOUT_DIALOG_TYPE_SHUTDOWN + LOGOUT_DIALOG_TYPE_SHUTDOWN, + LOGOUT_DIALOG_TYPE_CNT }; typedef struct _LogoutDialog LogoutDialog; -- cgit v1.2.3 From 25a24b5af992231732e58763786d7fc82914da8e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 14:13:11 -0600 Subject: Provide the basis for the window --- src/gtk-dialog/dialog.c | 27 ++++++++++++++++++++++++--- src/gtk-dialog/dialog.h | 4 ++-- 2 files changed, 26 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/gtk-dialog/dialog.c b/src/gtk-dialog/dialog.c index 186a506..9dcc194 100644 --- a/src/gtk-dialog/dialog.c +++ b/src/gtk-dialog/dialog.c @@ -26,9 +26,11 @@ static const gchar * button_strings[LOGOUT_DIALOG_TYPE_CNT] = { /* LOGOUT_DIALOG_SHUTDOWN, */ NC_("button", "Switch Off") }; +/* static const gchar * restart_updates = N_("Restart Instead"); static const gchar * restart_auth = N_("Restart..."); static const gchar * body_logout_update = N_("Some software updates won't apply until the computer next restarts."); +*/ static const gchar * icon_strings[LOGOUT_DIALOG_TYPE_CNT] = { /* LOGOUT_DIALOG_LOGOUT, */ "system-log-out", @@ -51,7 +53,7 @@ static void logout_dialog_init (LogoutDialog *self); static void logout_dialog_dispose (GObject *object); static void logout_dialog_finalize (GObject *object); -G_DEFINE_TYPE (LogoutDialog, logout_dialog, GTK_TYPE_DIALOG); +G_DEFINE_TYPE (LogoutDialog, logout_dialog, GTK_TYPE_MESSAGE_DIALOG); static void logout_dialog_class_init (LogoutDialogClass *klass) @@ -94,6 +96,25 @@ logout_dialog_finalize (GObject *object) LogoutDialog * logout_dialog_new (LogoutDialogType type) { - - return NULL; + LogoutDialog * dialog = LOGOUT_DIALOG(g_object_new(LOGOUT_DIALOG_TYPE, + /* Window */ + "icon-name", icon_strings[type], + "modal", TRUE, + "resizable", FALSE, + "title", _(title_strings[type]), + "window-position", GTK_WIN_POS_CENTER_ALWAYS, + /* Dialog */ + "has-separator", FALSE, + /* Message Dialog */ + "message-type", GTK_MESSAGE_OTHER, + "buttons", GTK_BUTTONS_NONE, + "text", _(body_strings[type]), + NULL)); + + gtk_dialog_add_buttons(GTK_DIALOG(dialog), + _(button_strings[type]), GTK_RESPONSE_OK, + _("Cancel"), GTK_RESPONSE_CANCEL, + NULL); + + return dialog; } diff --git a/src/gtk-dialog/dialog.h b/src/gtk-dialog/dialog.h index 1e6f575..3240a8e 100644 --- a/src/gtk-dialog/dialog.h +++ b/src/gtk-dialog/dialog.h @@ -27,11 +27,11 @@ typedef struct _LogoutDialog LogoutDialog; typedef struct _LogoutDialogClass LogoutDialogClass; struct _LogoutDialogClass { - GtkDialogClass parent_class; + GtkMessageDialogClass parent_class; }; struct _LogoutDialog { - GtkDialog parent; + GtkMessageDialog parent; }; GType logout_dialog_get_type (void); -- cgit v1.2.3 From 84c4324d547a81969e0de563732eb923c83e7ea6 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 14:16:56 -0600 Subject: Putting the image in and cleaning up the props --- src/gtk-dialog/dialog.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/gtk-dialog/dialog.c b/src/gtk-dialog/dialog.c index 9dcc194..96ebf21 100644 --- a/src/gtk-dialog/dialog.c +++ b/src/gtk-dialog/dialog.c @@ -96,6 +96,9 @@ logout_dialog_finalize (GObject *object) LogoutDialog * logout_dialog_new (LogoutDialogType type) { + GtkWidget * image = gtk_image_new_from_icon_name(icon_strings[type], GTK_ICON_SIZE_DIALOG); + gtk_widget_show(image); + LogoutDialog * dialog = LOGOUT_DIALOG(g_object_new(LOGOUT_DIALOG_TYPE, /* Window */ "icon-name", icon_strings[type], @@ -103,11 +106,10 @@ logout_dialog_new (LogoutDialogType type) "resizable", FALSE, "title", _(title_strings[type]), "window-position", GTK_WIN_POS_CENTER_ALWAYS, - /* Dialog */ - "has-separator", FALSE, /* Message Dialog */ - "message-type", GTK_MESSAGE_OTHER, "buttons", GTK_BUTTONS_NONE, + "image", image, + "message-type", GTK_MESSAGE_OTHER, "text", _(body_strings[type]), NULL)); -- cgit v1.2.3 From 3f35021350143255280fe30b1f38c46219c72f6b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 14:51:57 -0600 Subject: Flipping button order --- src/gtk-dialog/dialog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/gtk-dialog/dialog.c b/src/gtk-dialog/dialog.c index 96ebf21..18f345f 100644 --- a/src/gtk-dialog/dialog.c +++ b/src/gtk-dialog/dialog.c @@ -114,8 +114,8 @@ logout_dialog_new (LogoutDialogType type) NULL)); gtk_dialog_add_buttons(GTK_DIALOG(dialog), - _(button_strings[type]), GTK_RESPONSE_OK, _("Cancel"), GTK_RESPONSE_CANCEL, + _(button_strings[type]), GTK_RESPONSE_OK, NULL); return dialog; -- cgit v1.2.3 From f998b8b0d4bb9d9965f804ad5004b089a61f0248 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 14:52:09 -0600 Subject: Removing the old ck-pk helpers. --- src/gtk-dialog/Makefile.am | 2 - src/gtk-dialog/ck-pk-helper.c | 222 ------------------------------------- src/gtk-dialog/ck-pk-helper.h | 32 ------ src/gtk-dialog/gtk-logout-helper.c | 6 - 4 files changed, 262 deletions(-) delete mode 100644 src/gtk-dialog/ck-pk-helper.c delete mode 100644 src/gtk-dialog/ck-pk-helper.h (limited to 'src') diff --git a/src/gtk-dialog/Makefile.am b/src/gtk-dialog/Makefile.am index 2c7e61a..508beb2 100644 --- a/src/gtk-dialog/Makefile.am +++ b/src/gtk-dialog/Makefile.am @@ -3,8 +3,6 @@ libexec_PROGRAMS = gtk-logout-helper gtk_logout_helper_SOURCES = \ gtk-logout-helper.c \ - ck-pk-helper.c \ - ck-pk-helper.h \ gconf-helper.c \ gconf-helper.h \ dialog.c \ diff --git a/src/gtk-dialog/ck-pk-helper.c b/src/gtk-dialog/ck-pk-helper.c deleted file mode 100644 index 6879517..0000000 --- a/src/gtk-dialog/ck-pk-helper.c +++ /dev/null @@ -1,222 +0,0 @@ -/* -A small wrapper utility to load indicators and put them as menu items -into the gnome-panel using it's applet interface. - -Copyright 2009 Canonical Ltd. - -Authors: - Ted Gould - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License version 3, as published -by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see . -*/ - - -#include -#include -#include -#include - -#include "dialog.h" -#include "ck-pk-helper.h" - -static gboolean -ck_multiple_users (void) -{ - DBusGConnection * sbus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL); - g_return_val_if_fail(sbus != NULL, TRUE); /* worst case */ - DBusGProxy * proxy = dbus_g_proxy_new_for_name(sbus, "org.freedesktop.ConsoleKit", - "/org/freedesktop/ConsoleKit/Manager", - "org.freedesktop.ConsoleKit.Manager"); - - if (proxy == NULL) { - return TRUE; - } - - gboolean result; - GPtrArray * seats = NULL; - - result = dbus_g_proxy_call(proxy, "GetSeats", NULL, G_TYPE_INVALID, - dbus_g_type_get_collection("GPtrArray", DBUS_TYPE_G_OBJECT_PATH), &seats, G_TYPE_INVALID); - - if (!result) { - g_warning("Unable to get the seats for ConsoleKit"); - g_object_unref(proxy); - return TRUE; - } - - gchar * this_session_id = NULL; - - result = dbus_g_proxy_call(proxy, "GetCurrentSession", NULL, G_TYPE_INVALID, - DBUS_TYPE_G_OBJECT_PATH, &this_session_id, G_TYPE_INVALID); - - g_object_unref(proxy); - - if (!result) { - g_warning("Unable to get current session from ConsoleKit"); - return TRUE; - } - - proxy = dbus_g_proxy_new_for_name(sbus, "org.freedesktop.ConsoleKit", - this_session_id, "org.freedesktop.ConsoleKit.Session"); - - if (proxy == NULL) { - return TRUE; - } - - guint this_session_uid; - - result = dbus_g_proxy_call(proxy, "GetUnixUser", NULL, G_TYPE_INVALID, - G_TYPE_UINT, &this_session_uid, G_TYPE_INVALID); - - if (!result) { - g_warning("Unable to get UID from ConsoleKit"); - return TRUE; - } - - guint seat; - gboolean multiple_users = FALSE; - for (seat = 0; seat < seats->len; seat++) { - gchar * seat_id = g_ptr_array_index(seats, seat); - DBusGProxy * seat_proxy = dbus_g_proxy_new_for_name(sbus, "org.freedesktop.ConsoleKit", - seat_id, "org.freedesktop.ConsoleKit.Seat"); - g_free(seat_id); - - if (seat_proxy == NULL) { - continue; - } - - GPtrArray * sessions = NULL; - - gboolean result = dbus_g_proxy_call(seat_proxy, - "GetSessions", NULL, G_TYPE_INVALID, - dbus_g_type_get_collection("GPtrArray", DBUS_TYPE_G_OBJECT_PATH), &sessions, G_TYPE_INVALID); - - g_object_unref(seat_proxy); - if (!result) { - continue; - } - - guint session; - for (session = 0; session < sessions->len; session++) { - gchar * session_id = g_ptr_array_index(sessions, session); - if (g_strcmp0(this_session_id, session_id) == 0) { - continue; - } - DBusGProxy * session_proxy = dbus_g_proxy_new_for_name(sbus, "org.freedesktop.ConsoleKit", - session_id, "org.freedesktop.ConsoleKit.Session"); - g_free(session_id); - - if (session_proxy == NULL) { - continue; - } - - guint session_uid; - result = dbus_g_proxy_call(session_proxy, "GetUnixUser", NULL, G_TYPE_INVALID, - G_TYPE_UINT, &session_uid, G_TYPE_INVALID); - g_object_unref(session_proxy); - - if (!result) { - continue; - } - - if (session_uid != this_session_uid) { - multiple_users = TRUE; - break; - } - } - - g_ptr_array_free(sessions, TRUE); - - if (multiple_users) { - break; - } - } - - g_ptr_array_free(seats, TRUE); - g_object_unref(proxy); - g_free(this_session_id); - - return multiple_users; -} - -gboolean -pk_require_auth (LogoutDialogType action) { - if (action == LOGOUT_DIALOG_TYPE_LOG_OUT) { - return FALSE; - } - - gchar * pk_action; - if (ck_multiple_users()) { - if (action == LOGOUT_DIALOG_TYPE_RESTART) { - pk_action = "org.freedesktop.consolekit.system.restart-multiple-users"; - } else { - pk_action = "org.freedesktop.consolekit.system.stop-multiple-users"; - } - } else { - if (action == LOGOUT_DIALOG_TYPE_RESTART) { - pk_action = "org.freedesktop.consolekit.system.restart"; - } else { - pk_action = "org.freedesktop.consolekit.system.stop"; - } - } - - PolkitAuthorizationResult *polres = NULL; - gboolean ret = FALSE; - if (pk_can_do_action(pk_action, &polres)) { - if (polkit_authorization_result_get_is_challenge (polres)) { - ret = TRUE; - } - g_debug ("pk_require_auth(%s): authorized, is_challenge: %i", pk_action, ret); - } else { - g_debug ("pk_require_auth(%s): not authorized", pk_action); - } - if (polres) { - g_object_unref (polres); - } - return ret; -} - -gboolean -pk_can_do_action (const gchar *action_id, PolkitAuthorizationResult ** pol_result) -{ - PolkitAuthority *authority; - PolkitSubject *subject; - PolkitAuthorizationResult *result; - gboolean ret; - - authority = polkit_authority_get(); - if (!authority) { - g_warning ("Could not get PolicyKit authority instance"); - return FALSE; - } - subject = polkit_unix_process_new (getpid()); - - result = polkit_authority_check_authorization_sync (authority, subject, action_id, NULL, 0, NULL, NULL); - g_object_unref (authority); - - ret = FALSE; - if (result) { - ret = polkit_authorization_result_get_is_authorized (result) || - polkit_authorization_result_get_is_challenge (result); - g_debug ("pk_can_do_action(%s): %i", action_id, ret); - } else { - g_warning ("pk_can_do_action(%s): check_authorization returned NULL", action_id); - } - if (pol_result) { - *pol_result = result; - } else { - g_object_unref (result); - } - return ret; - -} diff --git a/src/gtk-dialog/ck-pk-helper.h b/src/gtk-dialog/ck-pk-helper.h deleted file mode 100644 index dfbb432..0000000 --- a/src/gtk-dialog/ck-pk-helper.h +++ /dev/null @@ -1,32 +0,0 @@ -/* -A small wrapper utility to load indicators and put them as menu items -into the gnome-panel using it's applet interface. - -Copyright 2009 Canonical Ltd. - -Authors: - Ted Gould - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License version 3, as published -by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see . -*/ - - -#ifndef __CK_PK_HELPER_H__ -#define __CK_PK_HELPER_H__ 1 - -#include - -gboolean pk_require_auth (LogoutDialogType action); -gboolean pk_can_do_action (const gchar *action_id, PolkitAuthorizationResult ** pol_result); - -#endif /* __CK_PK_HELPER__ */ diff --git a/src/gtk-dialog/gtk-logout-helper.c b/src/gtk-dialog/gtk-logout-helper.c index 09e6e86..5f087ff 100644 --- a/src/gtk-dialog/gtk-logout-helper.c +++ b/src/gtk-dialog/gtk-logout-helper.c @@ -26,7 +26,6 @@ with this program. If not, see . #include #include #include "dialog.h" -#include "ck-pk-helper.h" #include "gconf-helper.h" static void @@ -144,11 +143,6 @@ main (int argc, char * argv[]) INDICATOR_ICONS_DIR); GtkWidget * dialog = NULL; - /* TODO: We're disabling PolicyKit checking here because there - is a bug in ConsoleKit where the dialog doesn't come up until - the session is entirely closed. Stupid, but it's better than - not getting a dialog at all. */ - /* if (!pk_require_auth(type) && !supress_confirmations()) { */ if (!supress_confirmations()) { dialog = GTK_WIDGET(logout_dialog_new(type)); } -- cgit v1.2.3 From b51d58db757ccec277216f3e4f3e74c67ea75884 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 15:27:51 -0600 Subject: Skeleton for checking the different states. --- src/gtk-dialog/dialog.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src') diff --git a/src/gtk-dialog/dialog.c b/src/gtk-dialog/dialog.c index 18f345f..7e2347e 100644 --- a/src/gtk-dialog/dialog.c +++ b/src/gtk-dialog/dialog.c @@ -93,6 +93,25 @@ logout_dialog_finalize (GObject *object) return; } +/* Checks for updates that would signal that a restart is + required for them to apply */ +static gboolean +check_restart_required (void) +{ + + return FALSE; +} + +/* Checks with console kit to see if we can do what we want */ +static gboolean +ck_check_allowed (LogoutDialogType type) +{ + + + + return TRUE; +} + LogoutDialog * logout_dialog_new (LogoutDialogType type) { @@ -113,6 +132,18 @@ logout_dialog_new (LogoutDialogType type) "text", _(body_strings[type]), NULL)); + gboolean allowed = FALSE; + if (type == LOGOUT_DIALOG_TYPE_LOG_OUT) { + allowed = ck_check_allowed(LOGOUT_DIALOG_TYPE_RESTART); + } else { + allowed = ck_check_allowed(type); + } + + gboolean restart_required = FALSE; + if (type == LOGOUT_DIALOG_TYPE_LOG_OUT) { + restart_required = check_restart_required(); + } + gtk_dialog_add_buttons(GTK_DIALOG(dialog), _("Cancel"), GTK_RESPONSE_CANCEL, _(button_strings[type]), GTK_RESPONSE_OK, -- cgit v1.2.3 From d9dd91ad86cfff9457140ee4debd68752e79a99c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 15:42:31 -0600 Subject: Updating merge to new enums. --- src/gtk-dialog/gtk-logout-helper.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/gtk-dialog/gtk-logout-helper.c b/src/gtk-dialog/gtk-logout-helper.c index a76a135..bf37ca7 100644 --- a/src/gtk-dialog/gtk-logout-helper.c +++ b/src/gtk-dialog/gtk-logout-helper.c @@ -29,7 +29,7 @@ with this program. If not, see . #include "gconf-helper.h" static void -consolekit_fallback (LogoutDialogAction action) +consolekit_fallback (LogoutDialogType action) { DBusGConnection * sbus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL); g_return_if_fail(sbus != NULL); /* worst case */ @@ -45,16 +45,16 @@ consolekit_fallback (LogoutDialogAction action) GError * error = NULL; switch (action) { - case LOGOUT_DIALOG_LOGOUT: + case LOGOUT_DIALOG_TYPE_LOG_OUT: g_warning("Unable to fallback to ConsoleKit for logout as it's a session issue. We need some sort of session handler."); break; - case LOGOUT_DIALOG_SHUTDOWN: + case LOGOUT_DIALOG_TYPE_SHUTDOWN: dbus_g_proxy_call(proxy, "Stop", &error, G_TYPE_INVALID); break; - case LOGOUT_DIALOG_RESTART: + case LOGOUT_DIALOG_TYPE_RESTART: dbus_g_proxy_call(proxy, "Restart", &error, -- cgit v1.2.3 From 68d13604c069937cdb1e6cab3ecd54cfb45fc593 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 15:49:41 -0600 Subject: Flattening the build tree. --- src/Makefile.am | 31 +++++- src/dialog.c | 153 ++++++++++++++++++++++++++ src/dialog.h | 42 ++++++++ src/gconf-helper.c | 73 +++++++++++++ src/gconf-helper.h | 50 +++++++++ src/gtk-dialog/Makefile.am | 13 --- src/gtk-dialog/dialog.c | 153 -------------------------- src/gtk-dialog/dialog.h | 42 -------- src/gtk-dialog/gconf-helper.c | 73 ------------- src/gtk-dialog/gconf-helper.h | 50 --------- src/gtk-dialog/gtk-logout-helper.c | 216 ------------------------------------- src/gtk-logout-helper.c | 216 +++++++++++++++++++++++++++++++++++++ src/session-service.c | 2 +- 13 files changed, 563 insertions(+), 551 deletions(-) create mode 100644 src/dialog.c create mode 100644 src/dialog.h create mode 100644 src/gconf-helper.c create mode 100644 src/gconf-helper.h delete mode 100644 src/gtk-dialog/Makefile.am delete mode 100644 src/gtk-dialog/dialog.c delete mode 100644 src/gtk-dialog/dialog.h delete mode 100644 src/gtk-dialog/gconf-helper.c delete mode 100644 src/gtk-dialog/gconf-helper.h delete mode 100644 src/gtk-dialog/gtk-logout-helper.c create mode 100644 src/gtk-logout-helper.c (limited to 'src') diff --git a/src/Makefile.am b/src/Makefile.am index a07c782..cd525bd 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,6 +1,7 @@ -SUBDIRS = gtk-dialog -libexec_PROGRAMS = indicator-session-service +libexec_PROGRAMS = \ + indicator-session-service \ + gtk-logout-helper ################### # Indicator Stuff @@ -50,13 +51,37 @@ indicator_session_service_SOURCES = \ lock-helper.h \ session-service.c \ dbusmenu-shared.h \ - gtk-dialog/gconf-helper.c \ + gconf-helper.c \ users-service-dbus.h \ users-service-dbus.c \ users-service-marshal.c indicator_session_service_CFLAGS = $(SESSIONSERVICE_CFLAGS) $(GCONF_CFLAGS) -DLIBEXECDIR=\"$(libexecdir)\" -Wall -Werror indicator_session_service_LDADD = $(SESSIONSERVICE_LIBS) $(GCONF_LIBS) +################# +# GTK Logout Stuff +################# + +gtk_logout_helper_SOURCES = \ + gtk-logout-helper.c \ + gconf-helper.c \ + gconf-helper.h \ + dialog.c \ + dialog.h + +gtk_logout_helper_CFLAGS = \ + $(SESSIONSERVICE_CFLAGS) \ + $(GTKLOGOUTHELPER_CFLAGS) \ + $(GCONF_CFLAGS) \ + -Wall -Werror \ + -DINDICATOR_ICONS_DIR="\"$(INDICATORICONSDIR)\"" + +gtk_logout_helper_LDADD = \ + $(SESSIONSERVICE_LIBS) \ + $(GTKLOGOUTHELPER_LIBS) \ + $(GCONF_LIBS) + + ############### # Other Stuff ############### diff --git a/src/dialog.c b/src/dialog.c new file mode 100644 index 0000000..7e2347e --- /dev/null +++ b/src/dialog.c @@ -0,0 +1,153 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#include "dialog.h" + +/* Strings */ + +static const gchar * title_strings[LOGOUT_DIALOG_TYPE_CNT] = { + /* LOGOUT_DIALOG_LOGOUT, */ NC_("title", "Log Out"), + /* LOGOUT_DIALOG_RESTART, */ NC_("title", "Restart"), + /* LOGOUT_DIALOG_SHUTDOWN, */ NC_("title", "Switch Off") +}; + +static const gchar * body_strings[LOGOUT_DIALOG_TYPE_CNT] = { + /* LOGOUT_DIALOG_LOGOUT, */ N_("Are you sure you want to close all programs and log out?"), + /* LOGOUT_DIALOG_RESTART, */ N_("Are you sure you want to close all programs and restart the computer?"), + /* LOGOUT_DIALOG_SHUTDOWN, */ N_("Are you sure you want to close all programs and shut down the computer?") +}; + +static const gchar * button_strings[LOGOUT_DIALOG_TYPE_CNT] = { + /* LOGOUT_DIALOG_LOGOUT, */ NC_("button", "Log Out"), + /* LOGOUT_DIALOG_RESTART, */ NC_("button", "Restart"), + /* LOGOUT_DIALOG_SHUTDOWN, */ NC_("button", "Switch Off") +}; + +/* +static const gchar * restart_updates = N_("Restart Instead"); +static const gchar * restart_auth = N_("Restart..."); +static const gchar * body_logout_update = N_("Some software updates won't apply until the computer next restarts."); +*/ + +static const gchar * icon_strings[LOGOUT_DIALOG_TYPE_CNT] = { + /* LOGOUT_DIALOG_LOGOUT, */ "system-log-out", + /* LOGOUT_DIALOG_RESTART, */ "system-restart", + /* LOGOUT_DIALOG_SHUTDOWN, */ "system-shutdown" +}; + + + +typedef struct _LogoutDialogPrivate LogoutDialogPrivate; +struct _LogoutDialogPrivate { + guint type; +}; + +#define LOGOUT_DIALOG_GET_PRIVATE(o) \ +(G_TYPE_INSTANCE_GET_PRIVATE ((o), LOGOUT_DIALOG_TYPE, LogoutDialogPrivate)) + +static void logout_dialog_class_init (LogoutDialogClass *klass); +static void logout_dialog_init (LogoutDialog *self); +static void logout_dialog_dispose (GObject *object); +static void logout_dialog_finalize (GObject *object); + +G_DEFINE_TYPE (LogoutDialog, logout_dialog, GTK_TYPE_MESSAGE_DIALOG); + +static void +logout_dialog_class_init (LogoutDialogClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (LogoutDialogPrivate)); + + object_class->dispose = logout_dialog_dispose; + object_class->finalize = logout_dialog_finalize; + + return; +} + +static void +logout_dialog_init (LogoutDialog *self) +{ + + return; +} + +static void +logout_dialog_dispose (GObject *object) +{ + + + G_OBJECT_CLASS (logout_dialog_parent_class)->dispose (object); + return; +} + +static void +logout_dialog_finalize (GObject *object) +{ + + + G_OBJECT_CLASS (logout_dialog_parent_class)->finalize (object); + return; +} + +/* Checks for updates that would signal that a restart is + required for them to apply */ +static gboolean +check_restart_required (void) +{ + + return FALSE; +} + +/* Checks with console kit to see if we can do what we want */ +static gboolean +ck_check_allowed (LogoutDialogType type) +{ + + + + return TRUE; +} + +LogoutDialog * +logout_dialog_new (LogoutDialogType type) +{ + GtkWidget * image = gtk_image_new_from_icon_name(icon_strings[type], GTK_ICON_SIZE_DIALOG); + gtk_widget_show(image); + + LogoutDialog * dialog = LOGOUT_DIALOG(g_object_new(LOGOUT_DIALOG_TYPE, + /* Window */ + "icon-name", icon_strings[type], + "modal", TRUE, + "resizable", FALSE, + "title", _(title_strings[type]), + "window-position", GTK_WIN_POS_CENTER_ALWAYS, + /* Message Dialog */ + "buttons", GTK_BUTTONS_NONE, + "image", image, + "message-type", GTK_MESSAGE_OTHER, + "text", _(body_strings[type]), + NULL)); + + gboolean allowed = FALSE; + if (type == LOGOUT_DIALOG_TYPE_LOG_OUT) { + allowed = ck_check_allowed(LOGOUT_DIALOG_TYPE_RESTART); + } else { + allowed = ck_check_allowed(type); + } + + gboolean restart_required = FALSE; + if (type == LOGOUT_DIALOG_TYPE_LOG_OUT) { + restart_required = check_restart_required(); + } + + gtk_dialog_add_buttons(GTK_DIALOG(dialog), + _("Cancel"), GTK_RESPONSE_CANCEL, + _(button_strings[type]), GTK_RESPONSE_OK, + NULL); + + return dialog; +} diff --git a/src/dialog.h b/src/dialog.h new file mode 100644 index 0000000..3240a8e --- /dev/null +++ b/src/dialog.h @@ -0,0 +1,42 @@ +#ifndef __LOGOUT_DIALOG_H__ +#define __LOGOUT_DIALOG_H__ + +#include +#include + +#include + +G_BEGIN_DECLS + +#define LOGOUT_DIALOG_TYPE (logout_dialog_get_type ()) +#define LOGOUT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LOGOUT_DIALOG_TYPE, LogoutDialog)) +#define LOGOUT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LOGOUT_DIALOG_TYPE, LogoutDialogClass)) +#define IS_LOGOUT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LOGOUT_DIALOG_TYPE)) +#define IS_LOGOUT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LOGOUT_DIALOG_TYPE)) +#define LOGOUT_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LOGOUT_DIALOG_TYPE, LogoutDialogClass)) + +typedef enum _LogoutDialogType LogoutDialogType; +enum _LogoutDialogType { + LOGOUT_DIALOG_TYPE_LOG_OUT, + LOGOUT_DIALOG_TYPE_RESTART, + LOGOUT_DIALOG_TYPE_SHUTDOWN, + LOGOUT_DIALOG_TYPE_CNT +}; + +typedef struct _LogoutDialog LogoutDialog; +typedef struct _LogoutDialogClass LogoutDialogClass; + +struct _LogoutDialogClass { + GtkMessageDialogClass parent_class; +}; + +struct _LogoutDialog { + GtkMessageDialog parent; +}; + +GType logout_dialog_get_type (void); +LogoutDialog * logout_dialog_new (LogoutDialogType type); + +G_END_DECLS + +#endif diff --git a/src/gconf-helper.c b/src/gconf-helper.c new file mode 100644 index 0000000..213592e --- /dev/null +++ b/src/gconf-helper.c @@ -0,0 +1,73 @@ +/* +A small wrapper utility for connecting to gconf. + +Copyright 2009 Canonical Ltd. + +Authors: + Christoph Korn + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License version 3, as published +by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see . +*/ + + +#include + +#include + +#include +#include + +#include +#include + +#include "gconf-helper.h" + +static GConfClient * gconf_client = NULL; + +gboolean +supress_confirmations (void) { + if(!gconf_client) { + gconf_client = gconf_client_get_default (); + } + return gconf_client_get_bool (gconf_client, SUPPRESS_KEY, NULL) ; +} + +static void update_menu_entries_callback (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer data) { + RestartShutdownLogoutMenuItems * restart_shutdown_logout_mi = (RestartShutdownLogoutMenuItems*) data; + GConfValue * value = gconf_entry_get_value (entry); + const gchar * key = gconf_entry_get_key (entry); + + if(g_strcmp0 (key, SUPPRESS_KEY) == 0) { + if (gconf_value_get_bool (value)) { + dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->logout_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Log Out")); + dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->restart_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Restart")); + dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->shutdown_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Shutdown")); + } else { + dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->logout_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Log Out...")); + dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->restart_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Restart...")); + dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->shutdown_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Shutdown...")); + } + } +} + +void +update_menu_entries(RestartShutdownLogoutMenuItems * restart_shutdown_logout_mi) { + if(!gconf_client) { + gconf_client = gconf_client_get_default (); + } + gconf_client_add_dir (gconf_client, GLOBAL_DIR, + GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); + gconf_client_notify_add (gconf_client, SUPPRESS_KEY, + update_menu_entries_callback, restart_shutdown_logout_mi, NULL, NULL); +} + diff --git a/src/gconf-helper.h b/src/gconf-helper.h new file mode 100644 index 0000000..951bb0f --- /dev/null +++ b/src/gconf-helper.h @@ -0,0 +1,50 @@ +/* +A small wrapper utility for connecting to gconf. + +Copyright 2009 Canonical Ltd. + +Authors: + Christoph Korn + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License version 3, as published +by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see . +*/ + + +#ifndef __GCONF_HELPER_H__ +#define __GCONF_HELPER_H__ 1 + +#include + +#include + +#include +#include + +#include +#include + +#define SUPPRESS_KEY "/apps/indicator-session/suppress_logout_restart_shutdown" +#define GLOBAL_DIR "/apps/indicator-session" + +typedef struct _RestartShutdownLogoutMenuItems +{ + DbusmenuMenuitem * logout_mi; + DbusmenuMenuitem * restart_mi; + DbusmenuMenuitem * shutdown_mi; +} +RestartShutdownLogoutMenuItems; + +void update_menu_entries(RestartShutdownLogoutMenuItems*); +gboolean supress_confirmations (void); + +#endif /* __GCONF_HELPER__ */ diff --git a/src/gtk-dialog/Makefile.am b/src/gtk-dialog/Makefile.am deleted file mode 100644 index 508beb2..0000000 --- a/src/gtk-dialog/Makefile.am +++ /dev/null @@ -1,13 +0,0 @@ - -libexec_PROGRAMS = gtk-logout-helper - -gtk_logout_helper_SOURCES = \ - gtk-logout-helper.c \ - gconf-helper.c \ - gconf-helper.h \ - dialog.c \ - dialog.h - -gtk_logout_helper_CFLAGS = $(SESSIONSERVICE_CFLAGS) $(GTKLOGOUTHELPER_CFLAGS) $(GCONF_CFLAGS) -Wall -Werror -DINDICATOR_ICONS_DIR="\"$(INDICATORICONSDIR)\"" -gtk_logout_helper_LDADD = $(SESSIONSERVICE_LIBS) $(GTKLOGOUTHELPER_LIBS) $(GCONF_LIBS) - diff --git a/src/gtk-dialog/dialog.c b/src/gtk-dialog/dialog.c deleted file mode 100644 index 7e2347e..0000000 --- a/src/gtk-dialog/dialog.c +++ /dev/null @@ -1,153 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "dialog.h" - -/* Strings */ - -static const gchar * title_strings[LOGOUT_DIALOG_TYPE_CNT] = { - /* LOGOUT_DIALOG_LOGOUT, */ NC_("title", "Log Out"), - /* LOGOUT_DIALOG_RESTART, */ NC_("title", "Restart"), - /* LOGOUT_DIALOG_SHUTDOWN, */ NC_("title", "Switch Off") -}; - -static const gchar * body_strings[LOGOUT_DIALOG_TYPE_CNT] = { - /* LOGOUT_DIALOG_LOGOUT, */ N_("Are you sure you want to close all programs and log out?"), - /* LOGOUT_DIALOG_RESTART, */ N_("Are you sure you want to close all programs and restart the computer?"), - /* LOGOUT_DIALOG_SHUTDOWN, */ N_("Are you sure you want to close all programs and shut down the computer?") -}; - -static const gchar * button_strings[LOGOUT_DIALOG_TYPE_CNT] = { - /* LOGOUT_DIALOG_LOGOUT, */ NC_("button", "Log Out"), - /* LOGOUT_DIALOG_RESTART, */ NC_("button", "Restart"), - /* LOGOUT_DIALOG_SHUTDOWN, */ NC_("button", "Switch Off") -}; - -/* -static const gchar * restart_updates = N_("Restart Instead"); -static const gchar * restart_auth = N_("Restart..."); -static const gchar * body_logout_update = N_("Some software updates won't apply until the computer next restarts."); -*/ - -static const gchar * icon_strings[LOGOUT_DIALOG_TYPE_CNT] = { - /* LOGOUT_DIALOG_LOGOUT, */ "system-log-out", - /* LOGOUT_DIALOG_RESTART, */ "system-restart", - /* LOGOUT_DIALOG_SHUTDOWN, */ "system-shutdown" -}; - - - -typedef struct _LogoutDialogPrivate LogoutDialogPrivate; -struct _LogoutDialogPrivate { - guint type; -}; - -#define LOGOUT_DIALOG_GET_PRIVATE(o) \ -(G_TYPE_INSTANCE_GET_PRIVATE ((o), LOGOUT_DIALOG_TYPE, LogoutDialogPrivate)) - -static void logout_dialog_class_init (LogoutDialogClass *klass); -static void logout_dialog_init (LogoutDialog *self); -static void logout_dialog_dispose (GObject *object); -static void logout_dialog_finalize (GObject *object); - -G_DEFINE_TYPE (LogoutDialog, logout_dialog, GTK_TYPE_MESSAGE_DIALOG); - -static void -logout_dialog_class_init (LogoutDialogClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - g_type_class_add_private (klass, sizeof (LogoutDialogPrivate)); - - object_class->dispose = logout_dialog_dispose; - object_class->finalize = logout_dialog_finalize; - - return; -} - -static void -logout_dialog_init (LogoutDialog *self) -{ - - return; -} - -static void -logout_dialog_dispose (GObject *object) -{ - - - G_OBJECT_CLASS (logout_dialog_parent_class)->dispose (object); - return; -} - -static void -logout_dialog_finalize (GObject *object) -{ - - - G_OBJECT_CLASS (logout_dialog_parent_class)->finalize (object); - return; -} - -/* Checks for updates that would signal that a restart is - required for them to apply */ -static gboolean -check_restart_required (void) -{ - - return FALSE; -} - -/* Checks with console kit to see if we can do what we want */ -static gboolean -ck_check_allowed (LogoutDialogType type) -{ - - - - return TRUE; -} - -LogoutDialog * -logout_dialog_new (LogoutDialogType type) -{ - GtkWidget * image = gtk_image_new_from_icon_name(icon_strings[type], GTK_ICON_SIZE_DIALOG); - gtk_widget_show(image); - - LogoutDialog * dialog = LOGOUT_DIALOG(g_object_new(LOGOUT_DIALOG_TYPE, - /* Window */ - "icon-name", icon_strings[type], - "modal", TRUE, - "resizable", FALSE, - "title", _(title_strings[type]), - "window-position", GTK_WIN_POS_CENTER_ALWAYS, - /* Message Dialog */ - "buttons", GTK_BUTTONS_NONE, - "image", image, - "message-type", GTK_MESSAGE_OTHER, - "text", _(body_strings[type]), - NULL)); - - gboolean allowed = FALSE; - if (type == LOGOUT_DIALOG_TYPE_LOG_OUT) { - allowed = ck_check_allowed(LOGOUT_DIALOG_TYPE_RESTART); - } else { - allowed = ck_check_allowed(type); - } - - gboolean restart_required = FALSE; - if (type == LOGOUT_DIALOG_TYPE_LOG_OUT) { - restart_required = check_restart_required(); - } - - gtk_dialog_add_buttons(GTK_DIALOG(dialog), - _("Cancel"), GTK_RESPONSE_CANCEL, - _(button_strings[type]), GTK_RESPONSE_OK, - NULL); - - return dialog; -} diff --git a/src/gtk-dialog/dialog.h b/src/gtk-dialog/dialog.h deleted file mode 100644 index 3240a8e..0000000 --- a/src/gtk-dialog/dialog.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef __LOGOUT_DIALOG_H__ -#define __LOGOUT_DIALOG_H__ - -#include -#include - -#include - -G_BEGIN_DECLS - -#define LOGOUT_DIALOG_TYPE (logout_dialog_get_type ()) -#define LOGOUT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LOGOUT_DIALOG_TYPE, LogoutDialog)) -#define LOGOUT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LOGOUT_DIALOG_TYPE, LogoutDialogClass)) -#define IS_LOGOUT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LOGOUT_DIALOG_TYPE)) -#define IS_LOGOUT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LOGOUT_DIALOG_TYPE)) -#define LOGOUT_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LOGOUT_DIALOG_TYPE, LogoutDialogClass)) - -typedef enum _LogoutDialogType LogoutDialogType; -enum _LogoutDialogType { - LOGOUT_DIALOG_TYPE_LOG_OUT, - LOGOUT_DIALOG_TYPE_RESTART, - LOGOUT_DIALOG_TYPE_SHUTDOWN, - LOGOUT_DIALOG_TYPE_CNT -}; - -typedef struct _LogoutDialog LogoutDialog; -typedef struct _LogoutDialogClass LogoutDialogClass; - -struct _LogoutDialogClass { - GtkMessageDialogClass parent_class; -}; - -struct _LogoutDialog { - GtkMessageDialog parent; -}; - -GType logout_dialog_get_type (void); -LogoutDialog * logout_dialog_new (LogoutDialogType type); - -G_END_DECLS - -#endif diff --git a/src/gtk-dialog/gconf-helper.c b/src/gtk-dialog/gconf-helper.c deleted file mode 100644 index 213592e..0000000 --- a/src/gtk-dialog/gconf-helper.c +++ /dev/null @@ -1,73 +0,0 @@ -/* -A small wrapper utility for connecting to gconf. - -Copyright 2009 Canonical Ltd. - -Authors: - Christoph Korn - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License version 3, as published -by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see . -*/ - - -#include - -#include - -#include -#include - -#include -#include - -#include "gconf-helper.h" - -static GConfClient * gconf_client = NULL; - -gboolean -supress_confirmations (void) { - if(!gconf_client) { - gconf_client = gconf_client_get_default (); - } - return gconf_client_get_bool (gconf_client, SUPPRESS_KEY, NULL) ; -} - -static void update_menu_entries_callback (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer data) { - RestartShutdownLogoutMenuItems * restart_shutdown_logout_mi = (RestartShutdownLogoutMenuItems*) data; - GConfValue * value = gconf_entry_get_value (entry); - const gchar * key = gconf_entry_get_key (entry); - - if(g_strcmp0 (key, SUPPRESS_KEY) == 0) { - if (gconf_value_get_bool (value)) { - dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->logout_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Log Out")); - dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->restart_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Restart")); - dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->shutdown_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Shutdown")); - } else { - dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->logout_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Log Out...")); - dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->restart_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Restart...")); - dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->shutdown_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Shutdown...")); - } - } -} - -void -update_menu_entries(RestartShutdownLogoutMenuItems * restart_shutdown_logout_mi) { - if(!gconf_client) { - gconf_client = gconf_client_get_default (); - } - gconf_client_add_dir (gconf_client, GLOBAL_DIR, - GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); - gconf_client_notify_add (gconf_client, SUPPRESS_KEY, - update_menu_entries_callback, restart_shutdown_logout_mi, NULL, NULL); -} - diff --git a/src/gtk-dialog/gconf-helper.h b/src/gtk-dialog/gconf-helper.h deleted file mode 100644 index 951bb0f..0000000 --- a/src/gtk-dialog/gconf-helper.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -A small wrapper utility for connecting to gconf. - -Copyright 2009 Canonical Ltd. - -Authors: - Christoph Korn - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License version 3, as published -by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see . -*/ - - -#ifndef __GCONF_HELPER_H__ -#define __GCONF_HELPER_H__ 1 - -#include - -#include - -#include -#include - -#include -#include - -#define SUPPRESS_KEY "/apps/indicator-session/suppress_logout_restart_shutdown" -#define GLOBAL_DIR "/apps/indicator-session" - -typedef struct _RestartShutdownLogoutMenuItems -{ - DbusmenuMenuitem * logout_mi; - DbusmenuMenuitem * restart_mi; - DbusmenuMenuitem * shutdown_mi; -} -RestartShutdownLogoutMenuItems; - -void update_menu_entries(RestartShutdownLogoutMenuItems*); -gboolean supress_confirmations (void); - -#endif /* __GCONF_HELPER__ */ diff --git a/src/gtk-dialog/gtk-logout-helper.c b/src/gtk-dialog/gtk-logout-helper.c deleted file mode 100644 index bf37ca7..0000000 --- a/src/gtk-dialog/gtk-logout-helper.c +++ /dev/null @@ -1,216 +0,0 @@ -/* -A small wrapper utility to load indicators and put them as menu items -into the gnome-panel using it's applet interface. - -Copyright 2009 Canonical Ltd. - -Authors: - Ted Gould - Christoph Korn - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License version 3, as published -by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see . -*/ - -#include -#include -#include -#include -#include "dialog.h" -#include "gconf-helper.h" - -static void -consolekit_fallback (LogoutDialogType action) -{ - DBusGConnection * sbus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL); - g_return_if_fail(sbus != NULL); /* worst case */ - DBusGProxy * proxy = dbus_g_proxy_new_for_name(sbus, "org.freedesktop.ConsoleKit", - "/org/freedesktop/ConsoleKit/Manager", - "org.freedesktop.ConsoleKit.Manager"); - - if (proxy == NULL) { - g_warning("Unable to get consolekit proxy"); - return; - } - - GError * error = NULL; - - switch (action) { - case LOGOUT_DIALOG_TYPE_LOG_OUT: - g_warning("Unable to fallback to ConsoleKit for logout as it's a session issue. We need some sort of session handler."); - break; - case LOGOUT_DIALOG_TYPE_SHUTDOWN: - dbus_g_proxy_call(proxy, - "Stop", - &error, - G_TYPE_INVALID); - break; - case LOGOUT_DIALOG_TYPE_RESTART: - dbus_g_proxy_call(proxy, - "Restart", - &error, - G_TYPE_INVALID); - break; - default: - g_warning("Unknown action"); - break; - } - - g_object_unref(proxy); - - if (error != NULL) { - g_error("Unable to signal ConsoleKit: %s", error->message); - g_error_free(error); - } - - return; -} - -static void -session_action (LogoutDialogType action) -{ - DBusGConnection * sbus; - DBusGProxy * sm_proxy; - GError * error = NULL; - gboolean res = FALSE; - - sbus = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); - if (sbus == NULL) { - g_warning("Unable to get DBus session bus."); - return; - } - sm_proxy = dbus_g_proxy_new_for_name_owner (sbus, - "org.gnome.SessionManager", - "/org/gnome/SessionManager", - "org.gnome.SessionManager", - &error); - if (sm_proxy == NULL) { - g_warning("Unable to get DBus proxy to SessionManager interface: %s", error->message); - g_error_free(error); - - consolekit_fallback(action); - return; - } - - g_clear_error (&error); - - if (action == LOGOUT_DIALOG_TYPE_LOG_OUT) { - res = dbus_g_proxy_call_with_timeout (sm_proxy, "Logout", INT_MAX, &error, - G_TYPE_UINT, 1, G_TYPE_INVALID, G_TYPE_INVALID); - } else if (action == LOGOUT_DIALOG_TYPE_SHUTDOWN) { - res = dbus_g_proxy_call_with_timeout (sm_proxy, "RequestShutdown", INT_MAX, &error, - G_TYPE_INVALID, G_TYPE_INVALID); - } else if (action == LOGOUT_DIALOG_TYPE_RESTART) { - res = dbus_g_proxy_call_with_timeout (sm_proxy, "RequestReboot", INT_MAX, &error, - G_TYPE_INVALID, G_TYPE_INVALID); - } else { - g_warning ("Unknown session action"); - } - - if (!res) { - if (error != NULL) { - g_warning ("SessionManager action failed: %s", error->message); - } else { - g_warning ("SessionManager action failed: unknown error"); - } - } - - g_object_unref(sm_proxy); - - if (error != NULL) { - g_error_free(error); - } - - return; -} - -static LogoutDialogType type = LOGOUT_DIALOG_TYPE_LOG_OUT; - -static gboolean -option_logout (const gchar * arg, const gchar * value, gpointer data, GError * error) -{ - type = LOGOUT_DIALOG_TYPE_LOG_OUT; - return TRUE; -} - -static gboolean -option_shutdown (const gchar * arg, const gchar * value, gpointer data, GError * error) -{ - type = LOGOUT_DIALOG_TYPE_SHUTDOWN; - return TRUE; -} - -static gboolean -option_restart (const gchar * arg, const gchar * value, gpointer data, GError * error) -{ - type = LOGOUT_DIALOG_TYPE_RESTART; - return TRUE; -} - -static GOptionEntry options[] = { - {"logout", 'l', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, option_logout, "Log out of the current session", NULL}, - {"shutdown", 's', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, option_shutdown, "Shutdown the entire system", NULL}, - {"restart", 'r', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, option_restart, "Restart the system", NULL}, - - {NULL} -}; - -int -main (int argc, char * argv[]) -{ - gtk_init(&argc, &argv); - - /* Setting up i18n and gettext. Apparently, we need - all of these. */ - setlocale (LC_ALL, ""); - bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); - textdomain (GETTEXT_PACKAGE); - - GError * error = NULL; - GOptionContext * context = g_option_context_new(" - logout of the current session"); - g_option_context_add_main_entries(context, options, "gtk-logout-helper"); - g_option_context_add_group(context, gtk_get_option_group(TRUE)); - g_option_context_set_help_enabled(context, TRUE); - - if (!g_option_context_parse(context, &argc, &argv, &error)) { - g_debug("Option parsing failed: %s", error->message); - g_error_free(error); - return 1; - } - - /* Init some theme/icon stuff */ - gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), - INDICATOR_ICONS_DIR); - - GtkWidget * dialog = NULL; - if (!supress_confirmations()) { - dialog = GTK_WIDGET(logout_dialog_new(type)); - } - - if (dialog != NULL) { - GtkResponseType response = gtk_dialog_run(GTK_DIALOG(dialog)); - gtk_widget_hide(dialog); - - if (response == GTK_RESPONSE_HELP) { - type = LOGOUT_DIALOG_TYPE_RESTART; - response = GTK_RESPONSE_OK; - } - - if (response != GTK_RESPONSE_OK) { - return 0; - } - } - - session_action(type); - - return 0; -} diff --git a/src/gtk-logout-helper.c b/src/gtk-logout-helper.c new file mode 100644 index 0000000..bf37ca7 --- /dev/null +++ b/src/gtk-logout-helper.c @@ -0,0 +1,216 @@ +/* +A small wrapper utility to load indicators and put them as menu items +into the gnome-panel using it's applet interface. + +Copyright 2009 Canonical Ltd. + +Authors: + Ted Gould + Christoph Korn + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License version 3, as published +by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see . +*/ + +#include +#include +#include +#include +#include "dialog.h" +#include "gconf-helper.h" + +static void +consolekit_fallback (LogoutDialogType action) +{ + DBusGConnection * sbus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL); + g_return_if_fail(sbus != NULL); /* worst case */ + DBusGProxy * proxy = dbus_g_proxy_new_for_name(sbus, "org.freedesktop.ConsoleKit", + "/org/freedesktop/ConsoleKit/Manager", + "org.freedesktop.ConsoleKit.Manager"); + + if (proxy == NULL) { + g_warning("Unable to get consolekit proxy"); + return; + } + + GError * error = NULL; + + switch (action) { + case LOGOUT_DIALOG_TYPE_LOG_OUT: + g_warning("Unable to fallback to ConsoleKit for logout as it's a session issue. We need some sort of session handler."); + break; + case LOGOUT_DIALOG_TYPE_SHUTDOWN: + dbus_g_proxy_call(proxy, + "Stop", + &error, + G_TYPE_INVALID); + break; + case LOGOUT_DIALOG_TYPE_RESTART: + dbus_g_proxy_call(proxy, + "Restart", + &error, + G_TYPE_INVALID); + break; + default: + g_warning("Unknown action"); + break; + } + + g_object_unref(proxy); + + if (error != NULL) { + g_error("Unable to signal ConsoleKit: %s", error->message); + g_error_free(error); + } + + return; +} + +static void +session_action (LogoutDialogType action) +{ + DBusGConnection * sbus; + DBusGProxy * sm_proxy; + GError * error = NULL; + gboolean res = FALSE; + + sbus = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); + if (sbus == NULL) { + g_warning("Unable to get DBus session bus."); + return; + } + sm_proxy = dbus_g_proxy_new_for_name_owner (sbus, + "org.gnome.SessionManager", + "/org/gnome/SessionManager", + "org.gnome.SessionManager", + &error); + if (sm_proxy == NULL) { + g_warning("Unable to get DBus proxy to SessionManager interface: %s", error->message); + g_error_free(error); + + consolekit_fallback(action); + return; + } + + g_clear_error (&error); + + if (action == LOGOUT_DIALOG_TYPE_LOG_OUT) { + res = dbus_g_proxy_call_with_timeout (sm_proxy, "Logout", INT_MAX, &error, + G_TYPE_UINT, 1, G_TYPE_INVALID, G_TYPE_INVALID); + } else if (action == LOGOUT_DIALOG_TYPE_SHUTDOWN) { + res = dbus_g_proxy_call_with_timeout (sm_proxy, "RequestShutdown", INT_MAX, &error, + G_TYPE_INVALID, G_TYPE_INVALID); + } else if (action == LOGOUT_DIALOG_TYPE_RESTART) { + res = dbus_g_proxy_call_with_timeout (sm_proxy, "RequestReboot", INT_MAX, &error, + G_TYPE_INVALID, G_TYPE_INVALID); + } else { + g_warning ("Unknown session action"); + } + + if (!res) { + if (error != NULL) { + g_warning ("SessionManager action failed: %s", error->message); + } else { + g_warning ("SessionManager action failed: unknown error"); + } + } + + g_object_unref(sm_proxy); + + if (error != NULL) { + g_error_free(error); + } + + return; +} + +static LogoutDialogType type = LOGOUT_DIALOG_TYPE_LOG_OUT; + +static gboolean +option_logout (const gchar * arg, const gchar * value, gpointer data, GError * error) +{ + type = LOGOUT_DIALOG_TYPE_LOG_OUT; + return TRUE; +} + +static gboolean +option_shutdown (const gchar * arg, const gchar * value, gpointer data, GError * error) +{ + type = LOGOUT_DIALOG_TYPE_SHUTDOWN; + return TRUE; +} + +static gboolean +option_restart (const gchar * arg, const gchar * value, gpointer data, GError * error) +{ + type = LOGOUT_DIALOG_TYPE_RESTART; + return TRUE; +} + +static GOptionEntry options[] = { + {"logout", 'l', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, option_logout, "Log out of the current session", NULL}, + {"shutdown", 's', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, option_shutdown, "Shutdown the entire system", NULL}, + {"restart", 'r', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, option_restart, "Restart the system", NULL}, + + {NULL} +}; + +int +main (int argc, char * argv[]) +{ + gtk_init(&argc, &argv); + + /* Setting up i18n and gettext. Apparently, we need + all of these. */ + setlocale (LC_ALL, ""); + bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); + textdomain (GETTEXT_PACKAGE); + + GError * error = NULL; + GOptionContext * context = g_option_context_new(" - logout of the current session"); + g_option_context_add_main_entries(context, options, "gtk-logout-helper"); + g_option_context_add_group(context, gtk_get_option_group(TRUE)); + g_option_context_set_help_enabled(context, TRUE); + + if (!g_option_context_parse(context, &argc, &argv, &error)) { + g_debug("Option parsing failed: %s", error->message); + g_error_free(error); + return 1; + } + + /* Init some theme/icon stuff */ + gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), + INDICATOR_ICONS_DIR); + + GtkWidget * dialog = NULL; + if (!supress_confirmations()) { + dialog = GTK_WIDGET(logout_dialog_new(type)); + } + + if (dialog != NULL) { + GtkResponseType response = gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_hide(dialog); + + if (response == GTK_RESPONSE_HELP) { + type = LOGOUT_DIALOG_TYPE_RESTART; + response = GTK_RESPONSE_OK; + } + + if (response != GTK_RESPONSE_OK) { + return 0; + } + } + + session_action(type); + + return 0; +} diff --git a/src/session-service.c b/src/session-service.c index 289bff8..af3c3e5 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -40,7 +40,7 @@ with this program. If not, see . #include "dbus-shared-names.h" #include "dbusmenu-shared.h" -#include "gtk-dialog/gconf-helper.h" +#include "gconf-helper.h" #include "users-service-dbus.h" #include "lock-helper.h" -- cgit v1.2.3 From 2ae450d4f50ed3da4383ad5e4fcd470986deee3b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 16:18:00 -0600 Subject: Filling in the code to check and see if we can restart or stop. --- src/dialog.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/dialog.c b/src/dialog.c index 7e2347e..6dd7a90 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -4,6 +4,7 @@ #include +#include "consolekit-manager-client.h" #include "dialog.h" /* Strings */ @@ -106,10 +107,30 @@ check_restart_required (void) static gboolean ck_check_allowed (LogoutDialogType type) { + DBusGConnection * system_bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL); + g_return_val_if_fail(system_bus != NULL, TRUE); + + DBusGProxy * ck_proxy = dbus_g_proxy_new_for_name (system_bus, + "org.freedesktop.ConsoleKit", + "/org/freedesktop/ConsoleKit/Manager", + "org.freedesktop.ConsoleKit.Manager"); + g_return_val_if_fail(ck_proxy != NULL, TRUE); + + gboolean retval = TRUE; + switch (type) { + case LOGOUT_DIALOG_TYPE_RESTART: + org_freedesktop_ConsoleKit_Manager_can_restart(ck_proxy, &retval, NULL); + break; + case LOGOUT_DIALOG_TYPE_SHUTDOWN: + org_freedesktop_ConsoleKit_Manager_can_stop(ck_proxy, &retval, NULL); + break; + default: + break; + } + g_object_unref(ck_proxy); - - return TRUE; + return retval; } LogoutDialog * -- cgit v1.2.3 From a76563f00527498fd4121d2b824ef622bc062985 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 16:38:44 -0600 Subject: Adding in different button strings if we need authentication. --- src/dialog.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/dialog.c b/src/dialog.c index 6dd7a90..dd681b3 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -27,6 +27,14 @@ static const gchar * button_strings[LOGOUT_DIALOG_TYPE_CNT] = { /* LOGOUT_DIALOG_SHUTDOWN, */ NC_("button", "Switch Off") }; +/* TRANSLATORS: These strings have an ellipsis so that the user knows + they are also going to get a password dialog to do the action. */ +static const gchar * button_auth_strings[LOGOUT_DIALOG_TYPE_CNT] = { + /* LOGOUT_DIALOG_LOGOUT, */ NC_("button auth", "Log Out"), + /* LOGOUT_DIALOG_RESTART, */ NC_("button auth", "Restart..."), + /* LOGOUT_DIALOG_SHUTDOWN, */ NC_("button auth", "Switch Off...") +}; + /* static const gchar * restart_updates = N_("Restart Instead"); static const gchar * restart_auth = N_("Restart..."); @@ -165,9 +173,16 @@ logout_dialog_new (LogoutDialogType type) restart_required = check_restart_required(); } + const gchar * button_text; + if (allowed) { + button_text = _(button_strings[type]); + } else { + button_text = _(button_auth_strings[type]); + } + gtk_dialog_add_buttons(GTK_DIALOG(dialog), _("Cancel"), GTK_RESPONSE_CANCEL, - _(button_strings[type]), GTK_RESPONSE_OK, + button_text, GTK_RESPONSE_OK, NULL); return dialog; -- cgit v1.2.3 From 3928d091aaa4beacbf86dfc51b5ccc04c9ee4b36 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 16:55:50 -0600 Subject: Checking to see if we need updates and allowing that on logout dialogs. --- src/dialog.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/dialog.c b/src/dialog.c index dd681b3..f30eb17 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -35,11 +35,9 @@ static const gchar * button_auth_strings[LOGOUT_DIALOG_TYPE_CNT] = { /* LOGOUT_DIALOG_SHUTDOWN, */ NC_("button auth", "Switch Off...") }; -/* static const gchar * restart_updates = N_("Restart Instead"); static const gchar * restart_auth = N_("Restart..."); static const gchar * body_logout_update = N_("Some software updates won't apply until the computer next restarts."); -*/ static const gchar * icon_strings[LOGOUT_DIALOG_TYPE_CNT] = { /* LOGOUT_DIALOG_LOGOUT, */ "system-log-out", @@ -107,8 +105,7 @@ logout_dialog_finalize (GObject *object) static gboolean check_restart_required (void) { - - return FALSE; + return g_file_test("/var/run/reboot-required", G_FILE_TEST_EXISTS); } /* Checks with console kit to see if we can do what we want */ @@ -180,10 +177,27 @@ logout_dialog_new (LogoutDialogType type) button_text = _(button_auth_strings[type]); } - gtk_dialog_add_buttons(GTK_DIALOG(dialog), - _("Cancel"), GTK_RESPONSE_CANCEL, - button_text, GTK_RESPONSE_OK, - NULL); + if (restart_required) { + const gchar * restart_req; + if (allowed) { + restart_req = restart_updates; + } else { + restart_req = restart_auth; + } + + g_object_set(dialog, "secondary-text", _(body_logout_update), NULL); + + gtk_dialog_add_buttons(GTK_DIALOG(dialog), + _(restart_req), GTK_RESPONSE_HELP, + _("Cancel"), GTK_RESPONSE_CANCEL, + button_text, GTK_RESPONSE_OK, + NULL); + } else { + gtk_dialog_add_buttons(GTK_DIALOG(dialog), + _("Cancel"), GTK_RESPONSE_CANCEL, + button_text, GTK_RESPONSE_OK, + NULL); + } return dialog; } -- cgit v1.2.3 From 8d96a4fc56e194b1c4e8b1370d1a35703b92a3fe Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 16:57:37 -0600 Subject: String fixes and a comment. --- src/dialog.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/dialog.c b/src/dialog.c index f30eb17..b63ecef 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -35,8 +35,11 @@ static const gchar * button_auth_strings[LOGOUT_DIALOG_TYPE_CNT] = { /* LOGOUT_DIALOG_SHUTDOWN, */ NC_("button auth", "Switch Off...") }; +/* TRANSLATORS: This button appears on the logout dialog when + there are updates that require restart. It will do a restart + in place of a log out. */ static const gchar * restart_updates = N_("Restart Instead"); -static const gchar * restart_auth = N_("Restart..."); +static const gchar * restart_auth = N_("Restart Instead..."); static const gchar * body_logout_update = N_("Some software updates won't apply until the computer next restarts."); static const gchar * icon_strings[LOGOUT_DIALOG_TYPE_CNT] = { -- cgit v1.2.3 From 10e1e69dae2be7388dca78a253173e3e5e9e3641 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 17:00:45 -0600 Subject: Setting the default button. --- src/dialog.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src') diff --git a/src/dialog.c b/src/dialog.c index b63ecef..fcc3334 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -202,5 +202,7 @@ logout_dialog_new (LogoutDialogType type) NULL); } + gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); + return dialog; } -- cgit v1.2.3 From edeb525d966748a31e0abd7526c84c59f5c0e365 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 20:36:18 -0600 Subject: Slightly longer string for better wrapping. --- src/dialog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/dialog.c b/src/dialog.c index fcc3334..3e3799d 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -16,7 +16,7 @@ static const gchar * title_strings[LOGOUT_DIALOG_TYPE_CNT] = { }; static const gchar * body_strings[LOGOUT_DIALOG_TYPE_CNT] = { - /* LOGOUT_DIALOG_LOGOUT, */ N_("Are you sure you want to close all programs and log out?"), + /* LOGOUT_DIALOG_LOGOUT, */ N_("Are you sure you want to close all programs and log out of the computer?"), /* LOGOUT_DIALOG_RESTART, */ N_("Are you sure you want to close all programs and restart the computer?"), /* LOGOUT_DIALOG_SHUTDOWN, */ N_("Are you sure you want to close all programs and shut down the computer?") }; -- cgit v1.2.3 From 25e5df53f5584fa04ff0f9949f619f9031acc4a1 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 20:37:47 -0600 Subject: Copyright headers --- src/dialog.c | 22 ++++++++++++++++++++++ src/dialog.h | 22 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) (limited to 'src') diff --git a/src/dialog.c b/src/dialog.c index 3e3799d..deefe0b 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -1,3 +1,25 @@ +/* +A dialog to ask the user about the various logout options that +are available. + +Copyright 2010 Canonical Ltd. + +Authors: + Ted Gould + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License version 3, as published +by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see . +*/ + #ifdef HAVE_CONFIG_H #include "config.h" #endif diff --git a/src/dialog.h b/src/dialog.h index 3240a8e..18a55a7 100644 --- a/src/dialog.h +++ b/src/dialog.h @@ -1,3 +1,25 @@ +/* +A dialog to ask the user about the various logout options that +are available. + +Copyright 2010 Canonical Ltd. + +Authors: + Ted Gould + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License version 3, as published +by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see . +*/ + #ifndef __LOGOUT_DIALOG_H__ #define __LOGOUT_DIALOG_H__ -- cgit v1.2.3 From be3f65e45fb928f6afe189fe41ab7a25243d1d90 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 21:50:37 -0600 Subject: Adds a file watcher to see if we should change the menuitem to warn that a restart is recommended. --- src/session-service.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'src') diff --git a/src/session-service.c b/src/session-service.c index eb1966e..62ee0a7 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -27,6 +27,7 @@ with this program. If not, see . #include #include +#include #include #include @@ -605,6 +606,42 @@ service_shutdown (IndicatorService * service, gpointer user_data) return; } +static void +restart_dir_changed (void) +{ + gboolean restart_required = g_file_test("/var/run/reboot-required", G_FILE_TEST_EXISTS); + + if (restart_required) { + if (supress_confirmations()) { + dbusmenu_menuitem_property_set(restart_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Restart Required")); + } else { + dbusmenu_menuitem_property_set(restart_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Restart Required...")); + } + dbusmenu_menuitem_property_set(restart_mi, DBUSMENU_MENUITEM_PROP_ICON_NAME, "emblem-important"); + } else { + if (supress_confirmations()) { + dbusmenu_menuitem_property_set(restart_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Restart")); + } else { + dbusmenu_menuitem_property_set(restart_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Restart...")); + } + dbusmenu_menuitem_property_remove(restart_mi, DBUSMENU_MENUITEM_PROP_ICON_NAME); + } + + return; +} + +static void +setup_restart_watch (void) +{ + GFile * filedir = g_file_new_for_path("/var/run"); + GFileMonitor * filemon = g_file_monitor_directory(filedir, G_FILE_MONITOR_NONE, NULL, NULL); + if (filemon != NULL) { + g_signal_connect(G_OBJECT(filemon), "changed", G_CALLBACK(restart_dir_changed), NULL); + } + restart_dir_changed(); + return; +} + /* Main, is well, main. It brings everything up and throws us into the mainloop of no return. */ int @@ -642,6 +679,8 @@ main (int argc, char ** argv) G_CALLBACK (user_change), root_menuitem); + setup_restart_watch(); + setup_up(); DbusmenuServer * server = dbusmenu_server_new(INDICATOR_SESSION_DBUS_OBJECT); -- cgit v1.2.3 From d018794d6717df1f4dfcb1f26258d6cd2820d8bd Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Mar 2010 21:51:57 -0600 Subject: Some function comments. --- src/session-service.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src') diff --git a/src/session-service.c b/src/session-service.c index 62ee0a7..7183472 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -606,6 +606,8 @@ service_shutdown (IndicatorService * service, gpointer user_data) return; } +/* When the directory changes we need to figure out how our menu + item should look. */ static void restart_dir_changed (void) { @@ -630,6 +632,9 @@ restart_dir_changed (void) return; } +/* Buids a file watcher for the directory so that when it + changes we can check to see if our reboot-required is + there. */ static void setup_restart_watch (void) { -- cgit v1.2.3