[krb5-auth-dialog] Update the main window's ticket list when the ccache changes



commit 53dfb8407380dd82d32f80c5deed39da1f982cfa
Author: Guido GÃnther <agx sigxcpu org>
Date:   Sun Sep 4 18:47:32 2011 +0200

    Update the main window's ticket list when the ccache changes
    
    Introduce a krb-ccache-changed signal for that.

 src/ka-applet-priv.h |    4 +++-
 src/ka-applet.c      |   12 +++++++++---
 src/ka-dbus.c        |    2 +-
 src/ka-dialog.c      |    7 ++++---
 src/ka-main-window.c |   14 +++++++++++++-
 src/ka-main-window.h |    4 +++-
 6 files changed, 33 insertions(+), 10 deletions(-)
---
diff --git a/src/ka-applet-priv.h b/src/ka-applet-priv.h
index bd55996..d571230 100644
--- a/src/ka-applet-priv.h
+++ b/src/ka-applet-priv.h
@@ -34,11 +34,13 @@
 
 G_BEGIN_DECLS
 #define KA_NAME _("Kerberos Authentication")
+
 /* signals emitted by KaApplet */
-    typedef enum {
+typedef enum {
     KA_SIGNAL_ACQUIRED_TGT,     /* New TGT acquired */
     KA_SIGNAL_RENEWED_TGT,      /* TGT got renewed */
     KA_SIGNAL_EXPIRED_TGT,      /* TGT expired or ticket cache got destroyed */
+    KA_CCACHE_CHANGED,          /* The credential cache changed */
     KA_SIGNAL_COUNT
 } KaAppletSignalNumber;
 
diff --git a/src/ka-applet.c b/src/ka-applet.c
index b6216d3..89148a3 100644
--- a/src/ka-applet.c
+++ b/src/ka-applet.c
@@ -56,6 +56,7 @@ const gchar *ka_signal_names[KA_SIGNAL_COUNT] = {
     "krb-tgt-acquired",
     "krb-tgt-renewed",
     "krb-tgt-expired",
+    "krb-ccache-changed",
 };
 
 
@@ -318,8 +319,7 @@ ka_applet_class_init (KaAppletClass *klass)
                                   G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
     g_object_class_install_property (object_class,
                                      KA_PROP_TGT_RENEWABLE, pspec);
-
-    for (i = 0; i < KA_SIGNAL_COUNT; i++) {
+    for (i=0; i < KA_SIGNAL_COUNT-1; i++) {
         guint signalId;
 
         signalId = g_signal_new (ka_signal_names[i], G_OBJECT_CLASS_TYPE (klass),
@@ -329,6 +329,12 @@ ka_applet_class_init (KaAppletClass *klass)
                                  G_TYPE_STRING, G_TYPE_UINT);
         klass->signals[i] = signalId;
     }
+    klass->signals[KA_CCACHE_CHANGED] = g_signal_new (
+        ka_signal_names[KA_CCACHE_CHANGED], 
+        G_OBJECT_CLASS_TYPE (klass),
+        G_SIGNAL_RUN_LAST, 0, NULL, NULL,
+        g_cclosure_marshal_VOID__VOID,
+        G_TYPE_NONE, 0);
 }
 
 
@@ -1028,7 +1034,7 @@ ka_applet_create ()
     applet->priv->gconf = ka_gconf_init (applet);
     g_return_val_if_fail (applet->priv->gconf != NULL, NULL);
 
-    ka_main_window_create (applet->priv->uixml);
+    ka_main_window_create (applet, applet->priv->uixml);
     applet->priv->loader = ka_plugin_loader_create (applet);
     g_return_val_if_fail (applet->priv->loader != NULL, NULL);
 
diff --git a/src/ka-dbus.c b/src/ka-dbus.c
index a79f85f..7d5831e 100644
--- a/src/ka-dbus.c
+++ b/src/ka-dbus.c
@@ -156,7 +156,7 @@ ka_dbus_connect_signals(KaApplet *applet)
 {
     int i;
 
-    for (i = 0; i < KA_SIGNAL_COUNT; i++) {
+    for (i = 0; i < KA_SIGNAL_COUNT-1; i++) {
         g_signal_connect (applet, ka_signal_names[i],
                           G_CALLBACK (ka_dbus_signal_cb),
                           (gpointer)ka_signal_names[i]);
diff --git a/src/ka-dialog.c b/src/ka-dialog.c
index 72c346b..3cadc49 100644
--- a/src/ka-dialog.c
+++ b/src/ka-dialog.c
@@ -677,9 +677,9 @@ ka_unparse_name ()
 
 
 static void
-ccache_changed_cb (GFileMonitor * monitor G_GNUC_UNUSED,
-                   GFile * file,
-                   GFile * other_file G_GNUC_UNUSED,
+ccache_changed_cb (GFileMonitor *monitor G_GNUC_UNUSED,
+                   GFile *file,
+                   GFile *other_file G_GNUC_UNUSED,
                    GFileMonitorEvent event_type, gpointer data)
 {
     KaApplet *applet = KA_APPLET (data);
@@ -691,6 +691,7 @@ ccache_changed_cb (GFileMonitor * monitor G_GNUC_UNUSED,
     case G_FILE_MONITOR_EVENT_CHANGED:
         KA_DEBUG ("%s changed", ccache_name);
         credentials_expiring ((gpointer) applet);
+        g_signal_emit_by_name(applet, "krb-ccache-changed");
         break;
     default:
         KA_DEBUG ("%s unhandled event: %d", ccache_name, event_type);
diff --git a/src/ka-main-window.c b/src/ka-main-window.c
index ee259c8..a27f0ef 100644
--- a/src/ka-main-window.c
+++ b/src/ka-main-window.c
@@ -31,8 +31,16 @@
 static GtkListStore *tickets;
 static GtkWidget *main_window;
 
+static void
+ccache_changed_cb (KaApplet* applet G_GNUC_UNUSED,
+                   gpointer user_data G_GNUC_UNUSED)
+{
+    KA_DEBUG("Refreshing ticket list");
+    ka_get_service_tickets (tickets);
+}
+
 GtkWidget *
-ka_main_window_create (GtkBuilder *xml)
+ka_main_window_create (KaApplet *applet, GtkBuilder *xml)
 {
     GtkCellRenderer *text_renderer, *toggle_renderer;
     GtkTreeView *tickets_view;
@@ -90,6 +98,10 @@ ka_main_window_create (GtkBuilder *xml)
                                                 "active",
                                                 RENEWABLE_COLUMN,
                                                 NULL);
+
+    g_signal_connect (applet, "krb-ccache-changed",
+                      G_CALLBACK(ccache_changed_cb),
+                      NULL);
     return main_window;
 }
 
diff --git a/src/ka-main-window.h b/src/ka-main-window.h
index 5f8cdd7..6ae2262 100644
--- a/src/ka-main-window.h
+++ b/src/ka-main-window.h
@@ -21,6 +21,8 @@
 #ifndef KA_TICKETS_H
 #define KA_TICKETS_H
 
+#include "ka-applet.h"
+
 enum ticket_columns {
     PRINCIPAL_COLUMN,
     START_TIME_COLUMN,
@@ -32,7 +34,7 @@ enum ticket_columns {
 };
 
 
-GtkWidget *ka_main_window_create (GtkBuilder *xml);
+GtkWidget *ka_main_window_create (KaApplet *applet, GtkBuilder *xml);
 void ka_main_window_show (void);
 void ka_main_window_hide (void);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]