aboutsummaryrefslogtreecommitdiff
path: root/src/krb5-auth-applet.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/krb5-auth-applet.c')
-rw-r--r--src/krb5-auth-applet.c66
1 files changed, 59 insertions, 7 deletions
diff --git a/src/krb5-auth-applet.c b/src/krb5-auth-applet.c
index cc3f50e..bfe99c2 100644
--- a/src/krb5-auth-applet.c
+++ b/src/krb5-auth-applet.c
@@ -27,6 +27,7 @@
#include "krb5-auth-gconf-tools.h"
#include "krb5-auth-gconf.h"
#include "krb5-auth-tools.h"
+#include "krb5-auth-tickets.h"
#ifdef HAVE_LIBNOTIFY
#include <libnotify/notify.h>
#endif
@@ -72,7 +73,7 @@ struct _KaAppletPrivate
const char* icons[3]; /* for invalid, expiring and valid tickts */
gboolean show_trayicon; /* show the trayicon */
- KaPwDialog* pwdialog; /* the password dialog */
+ KaPwDialog *pwdialog; /* the password dialog */
int pw_prompt_secs; /* when to start prompting for a password */
#ifdef HAVE_LIBNOTIFY
@@ -389,7 +390,16 @@ ka_show_notification (KaApplet *applet)
{
/* wait for the panel to be settled before showing a bubble */
if (gtk_status_icon_is_embedded (applet->priv->tray_icon)) {
- notify_notification_show (applet->priv->notification, NULL);
+ GError *error = NULL;
+ gboolean ret;
+
+ ret = notify_notification_show (applet->priv->notification, &error);
+ if (!ret) {
+ g_assert (error);
+ g_assert (error->message);
+ g_warning ("Failed to show notification: %s", error->message);
+ g_clear_error (&error);
+ }
} else {
g_timeout_add_seconds (5, (GSourceFunc)ka_show_notification, applet);
}
@@ -544,9 +554,29 @@ static void
ka_applet_cb_preferences (GtkWidget* menuitem G_GNUC_UNUSED,
gpointer user_data G_GNUC_UNUSED)
{
+ GError *error = NULL;
+
g_spawn_command_line_async (BIN_DIR
G_DIR_SEPARATOR_S
- "krb5-auth-dialog-preferences", NULL);
+ "krb5-auth-dialog-preferences",
+ &error);
+ if (error) {
+ GtkWidget *message_dialog;
+
+ message_dialog = gtk_message_dialog_new (NULL,
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ _("There was an error launching the preferences dialog: %s"),
+ error->message);
+ gtk_window_set_resizable (GTK_WINDOW (message_dialog), FALSE);
+
+ g_signal_connect (message_dialog, "response",
+ G_CALLBACK (gtk_widget_destroy),
+ NULL);
+ gtk_widget_show (message_dialog);
+ g_error_free (error);
+ }
}
@@ -599,7 +629,7 @@ ka_applet_cb_about_dialog (GtkMenuItem* menuitem G_GNUC_UNUSED,
"Christopher Aillon <caillon@redhat.com>",
"Jonathan Blandford <jrb@redhat.com>",
"Colin Walters <walters@verbum.org>",
- "Guido Günther <agx@sigxpcu.org>",
+ "Guido Günther <agx@sigxcpu.org>",
NULL };
gtk_about_dialog_set_url_hook (ka_about_dialog_url_hook, NULL, NULL);
@@ -637,6 +667,13 @@ ka_applet_cb_destroy_ccache(GtkMenuItem* menuitem G_GNUC_UNUSED,
ka_destroy_ccache(applet);
}
+static void
+ka_applet_cb_show_tickets(GtkMenuItem* menuitem G_GNUC_UNUSED,
+ gpointer user_data G_GNUC_UNUSED)
+{
+ ka_tickets_dialog_run();
+}
+
/* The tray icon's context menu */
static gboolean
@@ -658,6 +695,12 @@ ka_applet_create_context_menu (KaApplet* applet)
ka_applet_menu_add_separator_item (menu);
+ /* Ticket dialog */
+ menu_item = gtk_image_menu_item_new_with_mnemonic("_List Tickets");
+ g_signal_connect (G_OBJECT (menu_item), "activate",
+ G_CALLBACK (ka_applet_cb_show_tickets), applet);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+
/* Preferences */
menu_item = gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, NULL);
g_signal_connect (G_OBJECT (menu_item), "activate",
@@ -796,6 +839,8 @@ KaApplet*
ka_applet_create()
{
KaApplet* applet = ka_applet_new();
+ GError *error = NULL;
+ gboolean ret;
if (!(ka_applet_setup_icons (applet)))
g_error ("Failure to setup icons");
@@ -808,15 +853,22 @@ ka_applet_create()
G_CALLBACK (ka_applet_cb_show_trayicon), NULL);
applet->priv->uixml = gtk_builder_new();
- g_assert(gtk_builder_add_from_file(applet->priv->uixml,
- KA_DATA_DIR G_DIR_SEPARATOR_S
- PACKAGE ".xml", NULL));
+ ret = gtk_builder_add_from_file(applet->priv->uixml,
+ KA_DATA_DIR G_DIR_SEPARATOR_S
+ PACKAGE ".xml", &error);
+ if (!ret) {
+ g_assert (error);
+ g_assert (error->message);
+ g_error ("Failed to load UI XML: %s", error->message);
+ }
applet->priv->pwdialog = ka_pwdialog_create(applet->priv->uixml);
g_return_val_if_fail (applet->priv->pwdialog != NULL, NULL);
applet->priv->gconf = ka_gconf_init (applet);
g_return_val_if_fail (applet->priv->gconf != NULL, NULL);
+ ka_tickets_dialog_create(applet->priv->uixml);
+
return applet;
}
bgstack15