krb5-auth-dialog r126 - in trunk: . src



Author: guidog
Date: Sat Feb 28 13:42:48 2009
New Revision: 126
URL: http://svn.gnome.org/viewvc/krb5-auth-dialog?rev=126&view=rev

Log:
Turn Krb5AuthAppliet into a GObject

called ka_applet.

Removed:
   trunk/src/krb5-auth-notify.c
   trunk/src/krb5-auth-notify.h
Modified:
   trunk/ChangeLog
   trunk/src/Makefile.am
   trunk/src/krb5-auth-applet.c
   trunk/src/krb5-auth-applet.h
   trunk/src/krb5-auth-dbus.c
   trunk/src/krb5-auth-dialog.c
   trunk/src/krb5-auth-dialog.h
   trunk/src/krb5-auth-gconf.c
   trunk/src/krb5-auth-gconf.h

Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am	(original)
+++ trunk/src/Makefile.am	Sat Feb 28 13:42:48 2009
@@ -24,8 +24,6 @@
 	krb5-auth-applet.h	\
 	krb5-auth-gconf.c	\
 	krb5-auth-gconf.h	\
-	krb5-auth-notify.c	\
-	krb5-auth-notify.h	\
 	krb5-auth-dbus.c	\
 	krb5-auth-dbus.h	\
 	dummy-strings.c

Modified: trunk/src/krb5-auth-applet.c
==============================================================================
--- trunk/src/krb5-auth-applet.c	(original)
+++ trunk/src/krb5-auth-applet.c	Sat Feb 28 13:42:48 2009
@@ -1,6 +1,6 @@
 /* Krb5 Auth Applet -- Acquire and release kerberos tickets
  *
- * (C) 2008 Guido Guenther <agx sigxcpu org>
+ * (C) 2008,2009 Guido Guenther <agx sigxcpu org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -24,7 +24,9 @@
 
 #include "krb5-auth-applet.h"
 #include "krb5-auth-dialog.h"
-#include "krb5-auth-notify.h"
+#ifdef HAVE_LIBNOTIFY
+#include <libnotify/notify.h>
+#endif
 
 #define NOTIFY_SECONDS 300
 
@@ -34,10 +36,222 @@
 	val_icon,
 };
 
+enum
+{
+  KA_PROP_0 = 0,
+  KA_PROP_PRINCIPAL,
+  KA_PROP_PK_USERID,
+  KA_PROP_TRAYICON,
+  KA_PROP_PW_PROMPT_MINS,
+};
+
+struct _KaApplet {
+  GObject parent;
+
+  KaAppletPrivate *priv;
+};
+
+struct _KaAppletClass {
+  GObjectClass parent;
+};
+
+G_DEFINE_TYPE(KaApplet, ka_applet, G_TYPE_OBJECT);
+
+struct _KaAppletPrivate
+{
+	GtkStatusIcon* tray_icon;	/* the tray icon */
+	GtkWidget* context_menu;	/* the tray icon's context menu */
+	const char* icons[3]; 		/* for invalid, expiring and valid tickts */
+	gboolean show_trayicon;		/* show the trayicon */
+
+	/* The password dialog */
+	GtkWidget* pw_dialog;		/* the password dialog itself */
+	GladeXML*  pw_xml;		/* the dialog's glade xml */
+	GtkWidget* pw_label;		/* the wrong password/timeout label */
+	int	   pw_prompt_secs;	/* when to start prompting for a password */
+	gboolean   pw_dialog_persist;	/* don't hide the dialog when creds are still valid */
+
+#ifdef HAVE_LIBNOTIFY
+	NotifyNotification* notification;/* notification messages */
+#endif /* HAVE_LIBNOTIFY */
+	char* principal;		/* the principal to request */
+	gboolean renewable;		/* credentials renewable? */
+	char* pk_userid;		/* "userid" for pkint */
+};
+
+static void
+ka_applet_set_property (GObject      *object,
+                        guint         property_id,
+                        const GValue *value,
+                        GParamSpec   *pspec)
+{
+  KaApplet* self = KA_APPLET (object);
+
+  switch (property_id) {
+    case KA_PROP_PRINCIPAL:
+	g_free (self->priv->principal);
+	self->priv->principal = g_value_dup_string (value);
+	KA_DEBUG ("%s: %s", pspec->name, self->priv->principal);
+	break;
+
+     case KA_PROP_PK_USERID:
+	g_free (self->priv->pk_userid);
+	self->priv->pk_userid = g_value_dup_string (value);
+	KA_DEBUG ("%s: %s", pspec->name, self->priv->pk_userid);
+	break;
+
+    case KA_PROP_TRAYICON:
+	self->priv->show_trayicon = g_value_get_boolean (value);
+	KA_DEBUG ("%s: %s", pspec->name, self->priv->show_trayicon ? "True" : "False");
+	break;
+
+    case KA_PROP_PW_PROMPT_MINS:
+	self->priv->pw_prompt_secs = g_value_get_uint (value) * 60;
+	KA_DEBUG ("%s: %d", pspec->name, self->priv->pw_prompt_secs/60);
+	break;
+
+    default:
+	/* We don't have any other property... */
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+	break;
+    }
+}
+
+static void
+ka_applet_get_property (GObject    *object,
+                        guint       property_id,
+                        GValue     *value,
+                        GParamSpec *pspec)
+{
+  KaApplet *self = KA_APPLET (object);
+
+  switch (property_id)
+    {
+    case KA_PROP_PRINCIPAL:
+	g_value_set_string (value, self->priv->principal);
+	break;
+
+    case KA_PROP_PK_USERID:
+	g_value_set_string (value, self->priv->pk_userid);
+	break;
+
+    case KA_PROP_TRAYICON:
+	g_value_set_boolean (value, self->priv->show_trayicon);
+	break;
+
+    case KA_PROP_PW_PROMPT_MINS:
+	g_value_set_uint (value, self->priv->pw_prompt_secs / 60);
+	break;
+
+    default:
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+	break;
+    }
+}
+
+
+static void
+ka_applet_dispose(GObject* object)
+{
+	KaApplet* applet = KA_APPLET(object);
+	GObjectClass *parent_class = G_OBJECT_CLASS (ka_applet_parent_class);
+
+	if (applet->priv->tray_icon) {
+		g_object_unref(applet->priv->tray_icon);
+		applet->priv->tray_icon = NULL;
+	}
+	if (applet->priv->pw_xml) {
+		g_object_unref(applet->priv->pw_xml);
+		applet->priv->pw_xml = NULL;
+	}
+
+	if (parent_class->dispose != NULL)
+		parent_class->dispose (object);
+}
+
+
+static void
+ka_applet_finalize(GObject *object)
+{
+	KaApplet* applet = KA_APPLET(object);
+	GObjectClass *parent_class = G_OBJECT_CLASS (ka_applet_parent_class);
+
+	g_free (applet->priv->principal);
+	g_free (applet->priv->pk_userid);
+	/* no need to free applet->priv */
+
+	if (parent_class->finalize != NULL)
+		parent_class->finalize (object);
+}
+
+static void
+ka_applet_init(KaApplet *applet)
+{
+	applet->priv = G_TYPE_INSTANCE_GET_PRIVATE(applet,
+						   KA_TYPE_APPLET,
+						   KaAppletPrivate);
+}
+
+static void
+ka_applet_class_init(KaAppletClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS(klass);
+	GParamSpec *pspec;
+
+	object_class->dispose = ka_applet_dispose;
+	object_class->finalize = ka_applet_finalize;
+	g_type_class_add_private(klass, sizeof(KaAppletPrivate));
+
+	object_class->set_property = ka_applet_set_property;
+	object_class->get_property = ka_applet_get_property;
+
+	pspec = g_param_spec_string ("principal",
+				     "Principal",
+				     "Get/Set Kerberos Principal",
+				     "",
+				     G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
+	g_object_class_install_property (object_class,
+                                         KA_PROP_PRINCIPAL,
+                                         pspec);
+
+	pspec = g_param_spec_string ("pk-userid",
+				     "PKinit Identifier",
+				     "Get/Set Pkinit identifier",
+				     "",
+				     G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
+	g_object_class_install_property (object_class,
+                                         KA_PROP_PK_USERID,
+                                         pspec);
+
+	pspec = g_param_spec_boolean("show-trayicon",
+				     "Show tray icon",
+				     "Show/Hide the tray icon",
+				     TRUE,
+				     G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
+	g_object_class_install_property (object_class,
+                                         KA_PROP_TRAYICON,
+                                         pspec);
+
+	pspec = g_param_spec_uint   ("pw-prompt-mins",
+				     "Password Prompting Interval",
+				     "Password Prompting Interval in Minutes",
+				     0, G_MAXUINT, MINUTES_BEFORE_PROMPTING,
+				     G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
+	g_object_class_install_property (object_class,
+                                         KA_PROP_PW_PROMPT_MINS,
+                                         pspec);
+}
+
+
+KaApplet *ka_applet_new(void)
+{
+	return g_object_new (KA_TYPE_APPLET, NULL);
+}
+
 
 /* determine the new tooltip text */
 static char*
-ka_tooltip_text(Krb5AuthApplet* applet, int remaining) 
+ka_applet_tooltip_text(KaApplet* applet, int remaining)
 {
 	int hours, minutes;
 	gchar* tooltip_text;
@@ -62,32 +276,64 @@
 
 /* determine the current icon */
 static const char*
-ka_select_icon(Krb5AuthApplet* applet, int remaining)
+ka_applet_select_icon(KaApplet* applet, int remaining)
 {
 	enum ka_icon tray_icon = inv_icon;
 
 	if (remaining > 0) {
-		if (remaining < applet->pw_prompt_secs &&
-		    !applet->renewable)
+		if (remaining < applet->priv->pw_prompt_secs &&
+		    !applet->priv->renewable)
 		    	tray_icon = exp_icon;
 		else			
 			tray_icon = val_icon;
 	}
 
-	return applet->icons[tray_icon];
+	return applet->priv->icons[tray_icon];
+}
+
+
+void
+ka_send_event_notification (KaApplet *applet __attribute__((__unused__)),
+			    const char *summary __attribute__((__unused__)),
+			    const char *message __attribute__((__unused__)),
+			    const char *icon __attribute__((__unused__)))
+{
+#ifdef HAVE_LIBNOTIFY
+        const char *notify_icon;
+
+	g_return_if_fail (applet != NULL);
+	g_return_if_fail (summary != NULL);
+	g_return_if_fail (message != NULL);
+
+	if (!notify_is_initted ())
+		notify_init (PACKAGE);
+
+	if (applet->priv->notification != NULL) {
+		notify_notification_close (applet->priv->notification, NULL);
+		g_object_unref (applet->priv->notification);
+	}
+
+	notify_icon = icon ? icon : "gtk-dialog-authentication";
+
+	applet->priv->notification = \
+		notify_notification_new_with_status_icon(summary, message, notify_icon, applet->priv->tray_icon);
+
+	notify_notification_set_urgency (applet->priv->notification, NOTIFY_URGENCY_NORMAL);
+	notify_notification_show (applet->priv->notification, NULL);
+#endif /* HAVE_LIBNOTIFY */
 }
 
 
 /* update the tray icon's tooltip and icon */
 int
-ka_update_status(Krb5AuthApplet* applet, krb5_timestamp expiry)
+ka_applet_update_status(KaApplet* applet, krb5_timestamp expiry)
 {
 	int now = time(0);
 	int remaining = expiry - now;
 	static int last_warn = 0;
 	static gboolean expiry_notified = FALSE;
-	const char* tray_icon = ka_select_icon (applet, remaining);
-	char* tooltip_text = ka_tooltip_text (applet, remaining);
+	const char* tray_icon = ka_applet_select_icon (applet, remaining);
+	char* tooltip_text = ka_applet_tooltip_text (applet, remaining);
 
 	if (remaining > 0) {
 		if (expiry_notified) {
@@ -95,8 +341,8 @@
 						_("Network credentials valid"),
 						_("Your Kerberos credentials have been refreshed."), NULL);
 			expiry_notified = FALSE;
-		} else if (remaining < applet->pw_prompt_secs && (now - last_warn) > NOTIFY_SECONDS &&
-		           !applet->renewable) {
+		} else if (remaining < applet->priv->pw_prompt_secs && (now - last_warn) > NOTIFY_SECONDS &&
+			   !applet->priv->renewable) {
 			ka_send_event_notification (applet,
 						_("Network credentials expiring"),
 						tooltip_text, NULL);
@@ -112,54 +358,53 @@
 		}
 	}
 
-	gtk_status_icon_set_from_icon_name (applet->tray_icon, tray_icon);
-	gtk_status_icon_set_tooltip (applet->tray_icon, tooltip_text);
+	gtk_status_icon_set_from_icon_name (applet->priv->tray_icon, tray_icon);
+	gtk_status_icon_set_tooltip (applet->priv->tray_icon, tooltip_text);
 	g_free(tooltip_text);
 	return 0;
 }
 
 
 static void
-ka_menu_add_separator_item (GtkWidget* menu)
+ka_applet_menu_add_separator_item (GtkWidget* menu)
 {
-        GtkWidget* menu_item;
+	GtkWidget* menu_item;
 
-        menu_item = gtk_separator_menu_item_new ();
-        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
-        gtk_widget_show (menu_item);
+	menu_item = gtk_separator_menu_item_new ();
+	gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+	gtk_widget_show (menu_item);
 }
 
 
 /* Free all resources and quit */
 static void
-ka_quit_applet (GtkMenuItem* menuitem, gpointer user_data)
+ka_applet_cb_quit (GtkMenuItem* menuitem, gpointer user_data)
 {
-	Krb5AuthApplet* applet = (Krb5AuthApplet*) user_data;
+	KaApplet* applet = KA_APPLET(user_data);
 
-	g_free (applet->principal);
-	g_free (applet);
+	g_object_unref (applet);
 	gtk_main_quit ();
 }
 
 
 static void
-ka_about_dialog (GtkMenuItem* menuitem, gpointer user_data)
+ka_applet_cb_about_dialog (GtkMenuItem* menuitem, gpointer user_data)
 {
 	gchar* authors[] = {  "Christopher Aillon <caillon redhat com>",
 			      "Colin Walters <walters verbum org>",
-		              "Guido GÃnther <agx sigxpcu org>",
+			      "Guido GÃnther <agx sigxpcu org>",
 			      NULL };
 	gtk_show_about_dialog (NULL,
-                              "authors", authors,
-                              "version", VERSION,
-                              "copyright", "Copyright (C) 2004,2005,2006 Red Hat, Inc.,\n2008 Guido GÃnther",
-                               NULL);
+			      "authors", authors,
+			      "version", VERSION,
+			      "copyright", "Copyright (C) 2004,2005,2006 Red Hat, Inc.,\n2008,2009 Guido GÃnther",
+			       NULL);
 }
 
 
 /* The tray icon's context menu */
-static GtkWidget*
-ka_create_context_menu (Krb5AuthApplet* applet)
+static gboolean
+ka_applet_create_context_menu (KaApplet* applet)
 {
 	GtkWidget* menu;
 	GtkWidget* menu_item;
@@ -170,43 +415,44 @@
 	/* kdestroy */
 	menu_item = gtk_image_menu_item_new_with_mnemonic (_("Remove Credentials _Cache"));
 	g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ka_destroy_cache), applet);
-        image = gtk_image_new_from_stock (GTK_STOCK_CANCEL, GTK_ICON_SIZE_MENU);
-        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image);
+	image = gtk_image_new_from_stock (GTK_STOCK_CANCEL, GTK_ICON_SIZE_MENU);
+	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image);
 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
 
-	ka_menu_add_separator_item (menu);
+	ka_applet_menu_add_separator_item (menu);
 
 	/* About item */
 	menu_item = gtk_image_menu_item_new_with_mnemonic (_("_About"));
-	g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ka_about_dialog), applet);
+	g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ka_applet_cb_about_dialog), applet);
 	image = gtk_image_new_from_stock (GTK_STOCK_ABOUT, GTK_ICON_SIZE_MENU);
 	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image);
 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
 
-	ka_menu_add_separator_item (menu);
+	ka_applet_menu_add_separator_item (menu);
 
 	/* Quit */
 	menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Quit"));
-	g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ka_quit_applet), applet);
-        image = gtk_image_new_from_stock (GTK_STOCK_QUIT, GTK_ICON_SIZE_MENU);
-        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image);
+	g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ka_applet_cb_quit), applet);
+	image = gtk_image_new_from_stock (GTK_STOCK_QUIT, GTK_ICON_SIZE_MENU);
+	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image);
 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
 
 	gtk_widget_show_all (menu);
+	applet->priv->context_menu = menu;
 
-	return menu;
+	return TRUE;
 }
 
 
 static void
 ka_tray_icon_on_menu (GtkStatusIcon* status_icon, guint button,
-                       guint activate_time, gpointer user_data)
+		       guint activate_time, gpointer user_data)
 {
-	Krb5AuthApplet* applet = (Krb5AuthApplet*) user_data;
+	KaApplet *applet = KA_APPLET(user_data);
 
-	KA_DEBUG("Trayicon right clicked: %d", applet->pw_prompt_secs);
-	gtk_menu_popup (GTK_MENU (applet->context_menu), NULL, NULL,
-	                gtk_status_icon_position_menu, applet->tray_icon,
+	KA_DEBUG("Trayicon right clicked: %d", applet->priv->pw_prompt_secs);
+	gtk_menu_popup (GTK_MENU (applet->priv->context_menu), NULL, NULL,
+			gtk_status_icon_position_menu, applet->priv->tray_icon,
 			button, activate_time);
 }
 
@@ -214,70 +460,143 @@
 static gboolean
 ka_tray_icon_on_click (GtkStatusIcon* status_icon, gpointer data)
 {
-	Krb5AuthApplet* applet = (Krb5AuthApplet*) data;
-	g_return_val_if_fail (applet != NULL, FALSE);
+	KaApplet *applet = KA_APPLET(data);
 
-	KA_DEBUG("Trayicon clicked: %d", applet->pw_prompt_secs);
+	KA_DEBUG("Trayicon clicked: %d", applet->priv->pw_prompt_secs);
 	ka_grab_credentials (applet);
 	return TRUE;
 }
 
 
-gboolean
-ka_show_tray_icon (Krb5AuthApplet* applet)
+static gboolean
+ka_applet_cb_show_trayicon (KaApplet* applet, GParamSpec* property, gpointer data)
 {
 	g_return_val_if_fail (applet != NULL, FALSE);
-	g_return_val_if_fail (applet->tray_icon != NULL, FALSE);
+	g_return_val_if_fail (applet->priv->tray_icon != NULL, FALSE);
 
-	gtk_status_icon_set_visible (applet->tray_icon, applet->show_trayicon);
+	gtk_status_icon_set_visible (applet->priv->tray_icon, applet->priv->show_trayicon);
 	return TRUE;
 }
 
 
-static GtkStatusIcon*
-ka_create_tray_icon (Krb5AuthApplet* applet)
+static gboolean
+ka_applet_create_tray_icon (KaApplet* applet)
 {
 	GtkStatusIcon* tray_icon;
 
 	tray_icon = gtk_status_icon_new ();
+
 	g_signal_connect (G_OBJECT(tray_icon), "activate",
-                          G_CALLBACK(ka_tray_icon_on_click), applet);
+			  G_CALLBACK(ka_tray_icon_on_click), applet);
 	g_signal_connect (G_OBJECT(tray_icon),
 			  "popup-menu",
 			  G_CALLBACK(ka_tray_icon_on_menu), applet);
-        gtk_status_icon_set_from_icon_name (tray_icon, applet->icons[exp_icon]);
-        gtk_status_icon_set_tooltip (tray_icon, PACKAGE);
-        return tray_icon;
+	gtk_status_icon_set_from_icon_name (tray_icon, applet->priv->icons[exp_icon]);
+	gtk_status_icon_set_tooltip (tray_icon, PACKAGE);
+        applet->priv->tray_icon = tray_icon;
+	return TRUE;
 }
 
 
-int
-ka_setup_icons (Krb5AuthApplet* applet)
+static int
+ka_applet_setup_icons (KaApplet* applet)
 {
 	/* Add application specific icons to search path */
 	gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
 					   KA_DATA_DIR G_DIR_SEPARATOR_S "icons");
-	applet->icons[val_icon] = "krb-valid-ticket";
-	applet->icons[exp_icon] = "krb-expiring-ticket";
-	applet->icons[inv_icon] = "krb-no-valid-ticket";
+	applet->priv->icons[val_icon] = "krb-valid-ticket";
+	applet->priv->icons[exp_icon] = "krb-expiring-ticket";
+	applet->priv->icons[inv_icon] = "krb-no-valid-ticket";
 	return TRUE;
 }
 
 
+static gboolean
+ka_applet_glade_init(KaApplet *applet)
+{
+	KaAppletPrivate *priv = applet->priv;
+
+	priv->pw_xml = glade_xml_new (KA_DATA_DIR G_DIR_SEPARATOR_S
+				      PACKAGE ".glade", NULL, NULL);
+	priv->pw_label = glade_xml_get_widget (priv->pw_xml, "krb5_wrong_label");
+	priv->pw_dialog = glade_xml_get_widget (priv->pw_xml, "krb5_dialog");
+
+	return TRUE;
+}
+
+
+GladeXML*
+ka_applet_get_pwdialog_xml(const KaApplet* applet)
+{
+	return applet->priv->pw_xml;
+}
+
+guint
+ka_applet_get_pw_prompt_secs(const KaApplet* applet)
+{
+	return applet->priv->pw_prompt_secs;
+}
+
+gboolean
+ka_applet_get_show_trayicon(const KaApplet* applet)
+{
+	return applet->priv->show_trayicon;
+}
+
+void
+ka_applet_set_tgt_renewable(KaApplet* applet, gboolean renewable)
+{
+	applet->priv->renewable = renewable;
+}
+
+gboolean
+ka_applet_get_tgt_renewable(const KaApplet* applet)
+{
+	return applet->priv->renewable;
+}
+
+gint ka_applet_run_pw_dialog(const KaApplet* applet)
+{
+	return gtk_dialog_run (GTK_DIALOG (applet->priv->pw_dialog));
+}
+
+void
+ka_applet_hide_pw_dialog(KaApplet* applet, gboolean force)
+{
+	KA_DEBUG("PW Dialog persist: %d", applet->priv->pw_dialog_persist);
+	if (!applet->priv->pw_dialog_persist || force)
+		gtk_widget_hide(applet->priv->pw_dialog);
+}
+
+void
+ka_applet_set_pw_dialog_persist(KaApplet* applet, gboolean persist)
+{
+	applet->priv->pw_dialog_persist = persist;
+}
+
+GtkWidget*
+ka_applet_get_pw_label(const KaApplet* applet)
+{
+	return applet->priv->pw_label;
+}
+
 /* create the tray icon applet */
-Krb5AuthApplet*
-ka_create_applet()
+KaApplet*
+ka_applet_create()
 {
-	Krb5AuthApplet* applet = g_malloc0 (sizeof(Krb5AuthApplet));
+	KaApplet* applet = ka_applet_new();
+
+	ka_applet_glade_init(applet);
 
-	if (!(ka_setup_icons (applet)))
+	if (!(ka_applet_setup_icons (applet)))
 		g_error ("Failure to setup icons");
-	if (!(applet->tray_icon = ka_create_tray_icon (applet)))
+	if (!ka_applet_create_tray_icon (applet))
 		g_error ("Failure to create tray icon");
-	if (!(applet->context_menu = ka_create_context_menu (applet)))
+	if (!ka_applet_create_context_menu (applet))
 		g_error ("Failure to create context menu");
-	gtk_window_set_default_icon_name (applet->icons[val_icon]);
-	ka_show_tray_icon (applet);
+	gtk_window_set_default_icon_name (applet->priv->icons[val_icon]);
+	g_signal_connect (applet, "notify::show-trayicon",
+	                  G_CALLBACK (ka_applet_cb_show_trayicon), NULL);
 
 	return applet;
 }

Modified: trunk/src/krb5-auth-applet.h
==============================================================================
--- trunk/src/krb5-auth-applet.h	(original)
+++ trunk/src/krb5-auth-applet.h	Sat Feb 28 13:42:48 2009
@@ -22,6 +22,7 @@
 #define KRB5_AUTH_APPLET_H
 
 #include <glib.h>
+#include <glib-object.h>
 #include <glib/gprintf.h>
 #include <gtk/gtk.h>
 #include <glade/glade.h>
@@ -32,32 +33,46 @@
 
 #include "config.h"
 
-typedef struct {
-	GtkStatusIcon* tray_icon;	/* the tray icon */
-	GtkWidget* context_menu;	/* the tray icon's context menu */
-	const char* icons[3]; 		/* for invalid, expiring and valid tickts */
-	gboolean show_trayicon;		/* show the trayicon */
-
-	/* The password dialog */
-	GtkWidget* pw_dialog;		/* the password dialog itself */
-	GladeXML*  pw_xml;		/* the dialog's glade xml */
-	GtkWidget* pw_wrong_label;	/* the wrong password/timeout label */
-	int	   pw_prompt_secs;	/* when to start prompting for a password */
-	gboolean   pw_dialog_persist;	/* don't hide the dialog when creds are still valid */
+G_BEGIN_DECLS
 
-#ifdef HAVE_LIBNOTIFY
-	NotifyNotification* notification;/* notification messages */
-#endif /* HAVE_LIBNOTIFY */
-	char* principal;		/* the principal to request */
-	gboolean renewable;		/* credentials renewable? */
-	char* pk_userid;		/* "userid" for pkint */
-} Krb5AuthApplet;
+#define KA_TYPE_APPLET            (ka_applet_get_type ())
+#define KA_APPLET(obj)            \
+    (G_TYPE_CHECK_INSTANCE_CAST ((obj), KA_TYPE_APPLET, KaApplet))
+#define KA_APPLET_CLASS(klass)    \
+    (G_TYPE_CHECK_CLASS_CAST ((klass), KA_TYPE_APPLET, KaAppletClass))
+#define KA_IS_APPLET(obj)         \
+    (G_TYPE_CHECK_INSTANCE_TYPE ((obj), KA_TYPE_APPLET))
+#define KA_IS_APPLET_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE ((klass), KA_TYPE_APPLET))
+#define KA_APPLET_GET_CLASS(obj)  \
+    (G_TYPE_INSTANCE_GET_CLASS ((obj), KA_TYPE_APPLET, KaAppletClass))
+
+typedef struct _KaApplet        KaApplet;
+typedef struct _KaAppletClass   KaAppletClass;
+typedef struct _KaAppletPrivate KaAppletPrivate;
+
+GType ka_applet_get_type (void);
+KaApplet* ka_applet_new(void) G_GNUC_MALLOC;
+
+/* public functions */
+gboolean ka_applet_get_show_trayicon(const KaApplet* applet);
+void ka_applet_set_tgt_renewable(KaApplet* applet, gboolean renewable);
+gboolean ka_applet_get_tgt_renewable(const KaApplet* applet);
+guint ka_applet_get_pw_prompt_secs(const KaApplet* applet);
+
+/* password dialog */
+gint ka_applet_run_pw_dialog(const KaApplet* applet);
+GladeXML* ka_applet_get_pwdialog_xml(const KaApplet* applet);
+void ka_applet_hide_pw_dialog(KaApplet* applet, gboolean force);
+GtkWidget* ka_applet_get_pw_label(const KaApplet* applet);
+void ka_applet_set_pw_dialog_persist(KaApplet* applet, gboolean persist);
+
+G_END_DECLS
 
-Krb5AuthApplet* ka_create_applet();
+/* create the applet */
+KaApplet* ka_applet_create();
 /* update tooltip and icon */
-int ka_update_status(Krb5AuthApplet* applet, krb5_timestamp expiry);
-/* show or hide the tray icon */
-gboolean ka_show_tray_icon(Krb5AuthApplet* applet);
+int ka_applet_update_status(KaApplet* applet, krb5_timestamp expiry);
 
 #ifdef ENABLE_DEBUG
 #define KA_DEBUG(fmt,...) \

Modified: trunk/src/krb5-auth-dbus.c
==============================================================================
--- trunk/src/krb5-auth-dbus.c	(original)
+++ trunk/src/krb5-auth-dbus.c	Sat Feb 28 13:42:48 2009
@@ -1,6 +1,6 @@
 /* Krb5 Auth Applet -- Acquire and release kerberos tickets
  *
- * (C) 2008 Guido Guenther <agx sigxcpu org>
+ * (C) 2008,2009 Guido Guenther <agx sigxcpu org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by

Modified: trunk/src/krb5-auth-dialog.c
==============================================================================
--- trunk/src/krb5-auth-dialog.c	(original)
+++ trunk/src/krb5-auth-dialog.c	Sat Feb 28 13:42:48 2009
@@ -2,6 +2,8 @@
  * Copyright (C) 2004,2005,2006 Red Hat, Inc.
  * Authored by Christopher Aillon <caillon redhat com>
  *
+ * Copyright (C) 2008,2009 Guido Guenther <agx sigxcup org>
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2, or (at your option)
@@ -55,8 +57,8 @@
 static gboolean invalid_auth;
 static gboolean always_run;
 
-static int grab_credentials (Krb5AuthApplet* applet);
-static int ka_renew_credentials (Krb5AuthApplet* applet);
+static int grab_credentials (KaApplet* applet);
+static int ka_renew_credentials (KaApplet* applet);
 static gboolean ka_get_tgt_from_ccache (krb5_context context, krb5_creds *creds);
 
 /* YAY for different Kerberos implementations */
@@ -160,13 +162,13 @@
 /* ***************************************************************** */
 
 static gboolean
-credentials_expiring_real (Krb5AuthApplet* applet)
+credentials_expiring_real (KaApplet* applet)
 {
 	krb5_creds my_creds;
 	krb5_timestamp now;
 	gboolean retval = FALSE;
-	applet->renewable = FALSE;
 
+	ka_applet_set_tgt_renewable(applet, FALSE);
 	if (!ka_get_tgt_from_ccache (kcontext, &my_creds)) {
 		creds_expiry = 0;
 		retval = TRUE;
@@ -179,18 +181,18 @@
 	}
 	creds_expiry = my_creds.times.endtime;
 	if ((krb5_timeofday(kcontext, &now) == 0) &&
-	    (now + applet->pw_prompt_secs > my_creds.times.endtime))
+	    (now + ka_applet_get_pw_prompt_secs(applet) > my_creds.times.endtime))
 		retval = TRUE;
 
 	/* If our creds are expiring, determine whether they are renewable */
 	if (retval && get_cred_renewable(&my_creds) && my_creds.times.renew_till > now) {
-		applet->renewable = TRUE;
+		ka_applet_set_tgt_renewable(applet, TRUE);
 	}
 
 	krb5_free_cred_contents (kcontext, &my_creds);
 
 out:
-	ka_update_status(applet, creds_expiry);
+	ka_applet_update_status(applet, creds_expiry);
 	return retval;
 }
 
@@ -246,25 +248,21 @@
 static gboolean
 krb5_auth_dialog_do_updates (gpointer data)
 {
-	Krb5AuthApplet* applet = (Krb5AuthApplet*)data;
+	KaApplet* applet = KA_APPLET(data);
 
 	g_return_val_if_fail (applet != NULL, FALSE);
-
 	/* Update creds_expiry and close the applet if we got the creds by other means (e.g. kinit) */
-	if (!credentials_expiring_real(applet)) {
-		KA_DEBUG("PW Dialog persist: %d", applet->pw_dialog_persist);
-		if (!applet->pw_dialog_persist)
-			gtk_widget_hide(applet->pw_dialog);
-	}
+	if (!credentials_expiring_real(applet))
+		ka_applet_hide_pw_dialog(applet, FALSE);
 
 	/* Update the expiry information in the dialog */
-	krb5_auth_dialog_wrong_label_update_expiry (applet->pw_wrong_label);
+	krb5_auth_dialog_wrong_label_update_expiry (ka_applet_get_pw_label(applet));
 	return TRUE;
 }
 
 
 static void
-krb5_auth_dialog_setup (Krb5AuthApplet *applet,
+krb5_auth_dialog_setup (KaApplet *applet,
                         const gchar *krb5prompt,
                         gboolean hide_password)
 {
@@ -275,7 +273,6 @@
 	gchar *prompt;
 	int pw4len;
 
-
 	if (krb5prompt == NULL) {
 		prompt = g_strdup (_("Please enter your Kerberos password."));
 	} else {
@@ -295,17 +292,19 @@
 	}
 
 	/* Clear the password entry field */
-	entry = glade_xml_get_widget (applet->pw_xml, "krb5_entry");
+	entry = glade_xml_get_widget (ka_applet_get_pwdialog_xml(applet),
+                                      "krb5_entry");
 	gtk_secure_entry_set_text (GTK_SECURE_ENTRY (entry), "");
 
 	/* Use the prompt label that krb5 provides us */
-	label = glade_xml_get_widget (applet->pw_xml, "krb5_message_label");
+	label = glade_xml_get_widget (ka_applet_get_pwdialog_xml(applet),
+                                      "krb5_message_label");
 	gtk_label_set_text (GTK_LABEL (label), prompt);
 
 	/* Add our extra message hints, if any */
 	wrong_text = NULL;
 
-	if (applet->pw_wrong_label) {
+	if (ka_applet_get_pw_label(applet)) {
 		if (invalid_auth) {
 			wrong_text = g_strdup (_("The password you entered is invalid"));
 		} else {
@@ -322,11 +321,11 @@
 
 	if (wrong_text) {
 		wrong_markup = g_strdup_printf ("<span size=\"smaller\" style=\"italic\">%s</span>", wrong_text);
-		gtk_label_set_markup (GTK_LABEL (applet->pw_wrong_label), wrong_markup);
+		gtk_label_set_markup (GTK_LABEL (ka_applet_get_pw_label(applet)), wrong_markup);
 		g_free(wrong_text);
 		g_free(wrong_markup);
 	} else {
-		gtk_label_set_text (GTK_LABEL (applet->pw_wrong_label), "");
+		gtk_label_set_text (GTK_LABEL (ka_applet_get_pw_label(applet)), "");
 	}
 	g_free (prompt);
 }
@@ -340,7 +339,7 @@
                       int num_prompts,
                       krb5_prompt prompts[])
 {
-	Krb5AuthApplet* applet = (Krb5AuthApplet*)data;
+	KaApplet* applet = KA_APPLET(data);
 	krb5_error_code errcode;
 	int i;
 
@@ -359,11 +358,11 @@
 		errcode = KRB5_LIBOS_CANTREADPWD;
 
 		krb5_auth_dialog_setup (applet, (gchar *) prompts[i].prompt, prompts[i].hidden);
-		entry = glade_xml_get_widget (applet->pw_xml, "krb5_entry");
+		entry = glade_xml_get_widget (ka_applet_get_pwdialog_xml(applet), "krb5_entry");
 		gtk_widget_grab_focus (entry);
 
 		source_id = g_timeout_add_seconds (5, (GSourceFunc)krb5_auth_dialog_do_updates, applet);
-		response = gtk_dialog_run (GTK_DIALOG (applet->pw_dialog));
+		response = ka_applet_run_pw_dialog (applet);
 		switch (response)
 		{
 			case GTK_RESPONSE_OK:
@@ -394,8 +393,8 @@
 		errcode = 0;
 	}
 cleanup:
+	ka_applet_hide_pw_dialog (applet, TRUE);
 	/* Reset this, so we know the next time we get a TRUE value, it is accurate. */
-	gtk_widget_hide (applet->pw_dialog);
 	invalid_auth = FALSE;
 
 	return errcode;
@@ -436,9 +435,9 @@
 {
 	int retval;
 	gboolean give_up;
-	Krb5AuthApplet* applet = (Krb5AuthApplet*) data;
+	KaApplet* applet = KA_APPLET(data);
 
-	KA_DEBUG("Checking expiry <%ds", applet->pw_prompt_secs);
+	KA_DEBUG("Checking expiry <%ds", ka_applet_get_pw_prompt_secs(applet));
 	if (credentials_expiring_real (applet) && is_online) {
 		KA_DEBUG("Expiry @ %ld", creds_expiry);
 
@@ -448,7 +447,7 @@
 		}
 
 		/* no popup when using a trayicon */
-		if (applet->show_trayicon)
+		if (ka_applet_get_show_trayicon(applet))
 			goto out;
 
 		give_up = canceled && (creds_expiry == canceled_creds_expiry);
@@ -465,13 +464,13 @@
 		}
 	}
 out:
-	ka_update_status(applet, creds_expiry);
+	ka_applet_update_status(applet, creds_expiry);
 	return TRUE;
 }
 
 
 static void
-set_options_from_creds(const Krb5AuthApplet* applet,
+set_options_from_creds(const KaApplet* applet,
 		       krb5_context context,
 		       krb5_creds *in,
 		       krb5_get_init_creds_opt *out)
@@ -496,7 +495,7 @@
 						       renew_lifetime);
 	}
 	if (in->times.endtime >
-	    in->times.starttime + applet->pw_prompt_secs) {
+	    in->times.starttime + ka_applet_get_pw_prompt_secs(applet)) {
 		krb5_get_init_creds_opt_set_tkt_life(out,
 						     in->times.endtime -
 						     in->times.starttime);
@@ -507,16 +506,13 @@
 
 
 static krb5_error_code
-ka_auth_pkinit(Krb5AuthApplet* applet, krb5_creds* creds)
+ka_auth_pkinit(KaApplet* applet, krb5_creds* creds, const char* pk_userid)
 {
 #ifdef ENABLE_PKINIT
 	krb5_get_init_creds_opt *opts = NULL;
 	krb5_error_code retval;
 
-	KA_DEBUG("pkinit with '%s'", applet->pk_userid);
-
-	if (!applet->pk_userid)
-		return 0;
+	KA_DEBUG("pkinit with '%s'", pk_userid);
 
 	retval = krb5_get_init_creds_opt_alloc (kcontext, &opts);
 	if (retval)
@@ -525,7 +521,7 @@
 
 	retval = krb5_get_init_creds_opt_set_pkinit(kcontext, opts,
 						    kprincipal,
-						    applet->pk_userid,
+						    pk_userid,
 						    NULL, /* x509 anchors */
 						    NULL,
 						    NULL,
@@ -549,35 +545,54 @@
 }
 
 
+krb5_error_code
+ka_parse_name(KaApplet* applet, krb5_context kcontext, krb5_principal* kprinc)
+{
+	krb5_error_code ret;
+	gchar *principal = NULL;
+
+	g_object_get(applet, "principal", &principal,
+			     NULL);
+
+	ret = krb5_parse_name(kcontext, principal,
+			      kprinc);
+
+	g_free(principal);
+	return ret;
+}
+
+
 /* grab credentials interactively */
 static int
-grab_credentials (Krb5AuthApplet* applet)
+grab_credentials (KaApplet* applet)
 {
 	krb5_error_code retval;
 	krb5_creds my_creds;
 	krb5_ccache ccache;
 	krb5_get_init_creds_opt *opt = NULL;
+	gchar *pk_userid = NULL;
+
+	g_object_get(applet, "pk-userid", &pk_userid,
+			     NULL);
 
 	memset(&my_creds, 0, sizeof(my_creds));
 
 	if (kprincipal == NULL) {
-		retval = krb5_parse_name(kcontext, applet->principal,
-					 &kprincipal);
-		if (retval) {
-			return retval;
-		}
+		retval = ka_parse_name(applet, kcontext, &kprincipal);
+		if (retval)
+			goto out2;
 	}
 
 	retval = krb5_cc_default (kcontext, &ccache);
 	if (retval)
-		return retval;
+		goto out2;
 
 #if ENABLE_PKINIT
-	if (applet->pk_userid && strlen(applet->pk_userid)) { /* try pkinit */
+	if (pk_userid && strlen(pk_userid)) { /* try pkinit */
 #else
 	if (0) {
 #endif
-		retval = ka_auth_pkinit(applet, &my_creds);
+		retval = ka_auth_pkinit(applet, &my_creds, pk_userid);
 	} else {
 		retval = krb5_get_init_creds_opt_alloc (kcontext, &opt);
 		if (retval)
@@ -620,13 +635,15 @@
 		krb5_get_init_creds_opt_free(kcontext, opt);
 	krb5_free_cred_contents (kcontext, &my_creds);
 	krb5_cc_close (kcontext, ccache);
+out2:
+	g_free(pk_userid);
 
 	return retval;
 }
 
 /* try to renew the credentials noninteractively */
 static int
-ka_renew_credentials (Krb5AuthApplet* applet)
+ka_renew_credentials (KaApplet* applet)
 {
 	krb5_error_code retval;
 	krb5_creds my_creds;
@@ -634,8 +651,7 @@
 	krb5_get_init_creds_opt opts;
 
 	if (kprincipal == NULL) {
-		retval = krb5_parse_name(kcontext, applet->principal,
-					 &kprincipal);
+		retval = ka_parse_name(applet, kcontext, &kprincipal);
 		if (retval)
 			return retval;
 	}
@@ -653,7 +669,7 @@
 	krb5_get_init_creds_opt_init (&opts);
 	set_options_from_creds (applet, kcontext, &my_creds, &opts);
 
-	if (applet->renewable) {
+	if (ka_applet_get_tgt_renewable(applet)) {
 		retval = get_renewed_creds (kcontext, &my_creds, kprincipal, ccache, NULL);
 		if (retval)
 			goto out;
@@ -741,7 +757,7 @@
 void
 ka_destroy_cache (GtkMenuItem  *menuitem, gpointer data)
 {
-	Krb5AuthApplet* applet = (Krb5AuthApplet*) data;
+	KaApplet *applet = KA_APPLET(data);
 	krb5_ccache  ccache;
 	const char* cache;
 	krb5_error_code ret;
@@ -770,12 +786,12 @@
 
 /* this is done on leftclick, update the tooltip immediately */
 void
-ka_grab_credentials (Krb5AuthApplet* applet)
+ka_grab_credentials (KaApplet* applet)
 {
 	int retval;
 	gboolean retry;
 
-	applet->pw_dialog_persist = TRUE;
+	ka_applet_set_pw_dialog_persist(applet, TRUE);
 	do {
 		retry = TRUE;
 		retval = grab_credentials (applet);
@@ -795,7 +811,7 @@
 		}
 	} while(retry);
 
-	applet->pw_dialog_persist = FALSE;
+	ka_applet_set_pw_dialog_persist(applet, FALSE);
 	credentials_expiring_real(applet);
 }
 
@@ -835,7 +851,7 @@
 int
 main (int argc, char *argv[])
 {
-	Krb5AuthApplet *applet;
+	KaApplet *applet;
 	GOptionContext *context;
 	GError *error = NULL;
 
@@ -878,21 +894,15 @@
 		always_run = TRUE;
 	}
 	if (using_krb5 () || always_run) {
-		applet = ka_create_applet ();
+		g_set_application_name (_("Network Authentication"));
+		glade_set_custom_handler (&ka_create_gtk_secure_entry, NULL);
+
+		applet = ka_applet_create ();
 		if (!applet)
 			return 1;
 		if (!ka_gconf_init (applet, argc, argv))
 			return 1;
 
-		/* setup the pw dialog */
-		glade_set_custom_handler (&ka_create_gtk_secure_entry, NULL);
-		applet->pw_xml = glade_xml_new (KA_DATA_DIR G_DIR_SEPARATOR_S
-						"krb5-auth-dialog.glade", NULL, NULL);
-		applet->pw_wrong_label = glade_xml_get_widget (applet->pw_xml, "krb5_wrong_label");
-		applet->pw_dialog = glade_xml_get_widget (applet->pw_xml, "krb5_dialog");
-
-		g_set_application_name (_("Network Authentication"));
-
 #ifdef ENABLE_NETWORK_MANAGER
 		nm_context = libnm_glib_init ();
 		if (!nm_context) {

Modified: trunk/src/krb5-auth-dialog.h
==============================================================================
--- trunk/src/krb5-auth-dialog.h	(original)
+++ trunk/src/krb5-auth-dialog.h	Sat Feb 28 13:42:48 2009
@@ -24,7 +24,7 @@
 #include "krb5-auth-applet.h"
 
 void ka_destroy_cache (GtkMenuItem  *menuitem, gpointer user_data);
-void ka_grab_credentials(Krb5AuthApplet* applet);
+void ka_grab_credentials(KaApplet* applet);
 
 #endif
 

Modified: trunk/src/krb5-auth-gconf.c
==============================================================================
--- trunk/src/krb5-auth-gconf.c	(original)
+++ trunk/src/krb5-auth-gconf.c	Sat Feb 28 13:42:48 2009
@@ -1,6 +1,6 @@
 /* Krb5 Auth Applet -- Acquire and release kerberos tickets
  *
- * (C) 2008 Guido Guenther <agx sigxcpu org>
+ * (C) 2008,2009 Guido Guenther <agx sigxcpu org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -111,52 +111,55 @@
 
 
 static gboolean
-ka_gconf_set_principal (GConfClient* client, Krb5AuthApplet* applet)
+ka_gconf_set_principal (GConfClient* client, KaApplet* applet)
 {
-	g_free (applet->principal);
-	applet->principal = NULL;
-	if(!ka_gconf_get_string (client, KA_GCONF_KEY_PRINCIPAL, &applet->principal)) {
-		applet->principal = g_strdup (g_get_user_name());
+	gchar* principal = NULL;
+
+	if(!ka_gconf_get_string (client, KA_GCONF_KEY_PRINCIPAL, &principal)) {
+		principal = g_strdup (g_get_user_name());
 	}
-	KA_DEBUG("Setting principal to '%s'", applet->principal);
-	// FIXME: need to send set-principal signal
+	g_object_set(applet, "principal", principal, NULL);
+	g_free (principal);
 	return TRUE;
 }
 
 
 static gboolean
-ka_gconf_set_pk_userid (GConfClient* client, Krb5AuthApplet* applet)
+ka_gconf_set_pk_userid (GConfClient* client, KaApplet* applet)
 {
-	g_free (applet->pk_userid);
-	if(!ka_gconf_get_string (client, KA_GCONF_KEY_PK_USERID, &applet->pk_userid)) {
-		applet->pk_userid = NULL;
+	gchar*  pk_userid = NULL;
+
+	if(!ka_gconf_get_string (client, KA_GCONF_KEY_PK_USERID, &pk_userid)) {
+		pk_userid = g_strdup ("");
 	}
-	KA_DEBUG("Setting pk_userid to '%s'", applet->pk_userid ? applet->pk_userid : "<disabled>");
+	g_object_set(applet, "pk_userid", pk_userid, NULL);
+	g_free (pk_userid);
 	return TRUE;
 }
 
 
 static gboolean
-ka_gconf_set_prompt_mins (GConfClient* client, Krb5AuthApplet* applet)
+ka_gconf_set_prompt_mins (GConfClient* client, KaApplet* applet)
 {
-	if(!ka_gconf_get_int (client, KA_GCONF_KEY_PROMPT_MINS, &applet->pw_prompt_secs)) {
-		applet->pw_prompt_secs = MINUTES_BEFORE_PROMPTING;
+	gint prompt_mins = 0;
+
+	if(!ka_gconf_get_int (client, KA_GCONF_KEY_PROMPT_MINS, &prompt_mins)) {
+		prompt_mins = MINUTES_BEFORE_PROMPTING;
 	}
-	applet->pw_prompt_secs *= 60;
-	KA_DEBUG("Setting prompting timer to %d seconds", applet->pw_prompt_secs);
+	g_object_set(applet, "pw-prompt-mins", prompt_mins, NULL);
 	return TRUE;
 }
 
 
 static gboolean
-ka_gconf_set_show_trayicon (GConfClient* client, Krb5AuthApplet* applet)
+ka_gconf_set_show_trayicon (GConfClient* client, KaApplet* applet)
 {
-	if(!ka_gconf_get_bool(client, KA_GCONF_KEY_SHOW_TRAYICON, &applet->show_trayicon)) {
-		applet->show_trayicon = TRUE;
+	gboolean show_trayicon = FALSE;
+
+	if(!ka_gconf_get_bool(client, KA_GCONF_KEY_SHOW_TRAYICON, &show_trayicon)) {
+		show_trayicon = TRUE;
 	}
-	KA_DEBUG("Show trayicon: %s", (applet->show_trayicon ? "yes" : "no" ));
-	// FIXME: send show trayicon signal
-	ka_show_tray_icon(applet);
+	g_object_set(applet, "show-trayicon", show_trayicon, NULL);
 	return TRUE;
 }
 
@@ -169,7 +172,7 @@
 {
 	const char* key;
 
-	Krb5AuthApplet* applet = (Krb5AuthApplet*)user_data;
+	KaApplet* applet = KA_APPLET(user_data);
 	key = gconf_entry_get_key (entry);
 	if (!key)
 		return;
@@ -190,7 +193,7 @@
 
 
 gboolean
-ka_gconf_init (Krb5AuthApplet* applet, int argc, char* argv[])
+ka_gconf_init (KaApplet* applet, int argc, char* argv[])
 {
 	GError *error = NULL;
 	GConfClient* client;

Modified: trunk/src/krb5-auth-gconf.h
==============================================================================
--- trunk/src/krb5-auth-gconf.h	(original)
+++ trunk/src/krb5-auth-gconf.h	Sat Feb 28 13:42:48 2009
@@ -23,6 +23,6 @@
 
 #include "krb5-auth-applet.h"
 
-gboolean ka_gconf_init (Krb5AuthApplet* applet, int argc, char* argv[]);
+gboolean ka_gconf_init (KaApplet* applet, int argc, char* argv[]);
 
 #endif



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