[krb5-auth-dialog] Add gnome-control-center panel
- From: Guido Günther <guidog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [krb5-auth-dialog] Add gnome-control-center panel
- Date: Tue, 25 Jan 2011 13:33:36 +0000 (UTC)
commit 0d489eac9ce9b7d7d4ef401e88afc5370c16fe39
Author: Guido Günther <agx sigxcpu org>
Date: Tue Jan 25 14:25:01 2011 +0100
Add gnome-control-center panel
.gitignore | 2 +
Makefile.am | 2 +-
cc-panel/.gitignore | 2 +
cc-panel/Makefile.am | 55 +++
cc-panel/cc-ka-panel.c | 843 ++++++++++++++++++++++++++++++++++++
cc-panel/cc-ka-panel.h | 45 ++
cc-panel/gnome-ka-panel.desktop.in | 17 +
cc-panel/ka-module.c | 20 +
cc-panel/ka-panel.ui | 675 +++++++++++++++++++++++++++++
configure.ac | 9 +
po/POTFILES.in | 3 +
11 files changed, 1672 insertions(+), 1 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 59d6393..8870ea5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,9 @@
*.a
*.o
+*.lo
autom4te.cache/
.deps/
+.libs/
aclocal.m4
config.cache
config.guess
diff --git a/Makefile.am b/Makefile.am
index 4bc81e1..953cd39 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,6 @@
NULL =
-SUBDIRS = secmem src po etpo icons preferences help examples plugins
+SUBDIRS = secmem src po etpo icons preferences help examples plugins cc-panel
EXTRA_DIST = \
krb5-auth-dialog.spec \
diff --git a/cc-panel/.gitignore b/cc-panel/.gitignore
new file mode 100644
index 0000000..a75ce07
--- /dev/null
+++ b/cc-panel/.gitignore
@@ -0,0 +1,2 @@
+libka.la
+gnome-ka-panel.desktop
diff --git a/cc-panel/Makefile.am b/cc-panel/Makefile.am
new file mode 100644
index 0000000..d4d412c
--- /dev/null
+++ b/cc-panel/Makefile.am
@@ -0,0 +1,55 @@
+NULL =
+
+ccpanelsdir = $(PANELS_DIR)
+ccpanels_LTLIBRARIES = libka.la
+
+libka_la_SOURCES = \
+ ka-module.c \
+ cc-ka-panel.c \
+ $(top_srcdir)/src/ka-gconf-tools.c \
+ $(top_srcdir)/src/ka-gconf-tools.h \
+ $(top_srcdir)/src/ka-tools.c \
+ $(top_srcdir)/src/ka-tools.h \
+ cc-ka-panel.h
+
+INCLUDES = \
+ -I$(top_srcdir)/src \
+ $(GTK_CFLAGS) \
+ $(GCONF_CFLAGS) \
+ $(CONTROL_CENTER_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(AM_CFLAGS) \
+ -DKA_DATA_DIR=\""$(pkgdatadir)"\" \
+ -DDATA_DIR=\""$(datadir)"\" \
+ -DLOCALE_DIR=\""$(localedir)/"\" \
+ $(NULL)
+
+libka_la_LIBADD = \
+ $(GCONF_LIBS) \
+ $(GTK_LIBS) \
+ $(CONTROL_CENTER_LIBS) \
+ $(NULL)
+
+AM_CPPFLAGS = \
+ $(DISABLE_DEPRECATED) \
+ $(NULL)
+
+libka_la_LDFLAGS = -export_dynamic -avoid-version -module -no-undefined -export-symbols-regex '^g_io_module_(load|unload)'
+
+desktopdir = $(datadir)/applications
+desktop_in_files = gnome-ka-panel.desktop.in
+desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
+
+ INTLTOOL_DESKTOP_RULE@
+
+pkgdatadir = $(datadir)/krb5-auth-dialog
+pkgdata_DATA = \
+ ka-panel.ui \
+ $(NULL)
+
+CLEANFILES = $(desktop_DATA)
+
+EXTRA_DIST = \
+ $(desktop_in_files) \
+ $(pkgdata_DATA) \
+ $(NULL)
diff --git a/cc-panel/cc-ka-panel.c b/cc-panel/cc-ka-panel.c
new file mode 100644
index 0000000..5f66234
--- /dev/null
+++ b/cc-panel/cc-ka-panel.c
@@ -0,0 +1,843 @@
+/*
+ * Copyright (C) 2011 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
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+#include "cc-ka-panel.h"
+
+#include "ka-gconf-tools.h"
+#include "ka-tools.h"
+
+#include <glib/gi18n.h>
+
+G_DEFINE_DYNAMIC_TYPE (CcKaPanel, cc_ka_panel, CC_TYPE_PANEL)
+
+#define GET_PRIVATE(o) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((o), CC_TYPE_KA_PANEL, CcKaPanelPrivate))
+
+#define WID(b, w) (GtkWidget *) gtk_builder_get_object (b, w)
+
+#define PKINIT_SMARTCARD "PKCS11:" SC_PKCS11
+#define PKINIT_FILE "FILE:"
+
+#define N_LISTENERS 8
+
+typedef struct _CcKaPanelPrivate CcKaPanelPrivate;
+
+struct _CcKaPanelPrivate {
+ GtkBuilder *builder;
+
+ GConfClient *client;
+
+ GtkWidget *notebook;
+ GtkWidget *principal_entry;
+ GtkWidget *pkuserid_entry;
+ GtkWidget *pkuserid_button;
+ GtkWidget *smartcard_toggle;
+ GtkWidget *pkanchors_entry;
+ GtkWidget *pkanchors_button;
+ GtkWidget *forwardable_toggle;
+ GtkWidget *proxiable_toggle;
+ GtkWidget *renewable_toggle;
+ GtkWidget *trayicon_toggle;
+ GtkWidget *prompt_mins_entry;
+
+ guint listeners [N_LISTENERS];
+ int n_listeners;
+};
+
+static void
+cc_ka_panel_principal_notify (GConfClient *client G_GNUC_UNUSED,
+ guint cnx_id G_GNUC_UNUSED,
+ GConfEntry *entry,
+ CcKaPanelPrivate *priv)
+{
+ const char *principal;
+
+ if (!entry->value || entry->value->type != GCONF_VALUE_STRING)
+ return;
+
+ principal = gconf_value_get_string (entry->value);
+
+ if (!principal || !strlen(principal))
+ gtk_entry_set_text (GTK_ENTRY (priv->principal_entry), "");
+ else {
+ const char *old_principal;
+
+ old_principal = gtk_entry_get_text (GTK_ENTRY (priv->principal_entry));
+ if (!old_principal || (old_principal && strcmp (old_principal, principal)))
+ gtk_entry_set_text (GTK_ENTRY (priv->principal_entry), principal);
+ }
+}
+
+static void
+cc_ka_panel_principal_changed (GtkEntry *entry,
+ CcKaPanelPrivate *priv)
+{
+ const char *principal;
+
+ principal = gtk_entry_get_text (entry);
+
+ if (!principal || !strlen(principal))
+ gconf_client_unset (priv->client, KA_GCONF_KEY_PRINCIPAL, NULL);
+ else
+ gconf_client_set_string (priv->client, KA_GCONF_KEY_PRINCIPAL, principal, NULL);
+}
+
+
+static void
+cc_ka_panel_setup_principal_entry (CcKaPanelPrivate *priv)
+{
+ char *principal = NULL;
+
+ priv->principal_entry = WID (priv->builder, "principal_entry");
+ g_assert (priv->principal_entry != NULL);
+
+ if (!ka_gconf_get_string (priv->client, KA_GCONF_KEY_PRINCIPAL, &principal))
+ g_warning ("Getting principal failed");
+
+ if (principal && strlen(principal))
+ gtk_entry_set_text (GTK_ENTRY (priv->principal_entry), principal);
+ if (principal)
+ g_free (principal);
+
+ g_signal_connect (priv->principal_entry, "changed",
+ G_CALLBACK (cc_ka_panel_principal_changed), priv);
+
+ if (!gconf_client_key_is_writable (priv->client, KA_GCONF_KEY_PRINCIPAL, NULL)) {
+ gtk_widget_set_sensitive (priv->principal_entry, FALSE);
+ }
+
+ priv->listeners [priv->n_listeners] =
+ gconf_client_notify_add (priv->client,
+ KA_GCONF_KEY_PRINCIPAL,
+ (GConfClientNotifyFunc) cc_ka_panel_principal_notify,
+ priv, NULL, NULL);
+ priv->n_listeners++;
+}
+
+
+static void
+cc_ka_panel_pkuserid_notify (GConfClient *client G_GNUC_UNUSED,
+ guint cnx_id G_GNUC_UNUSED,
+ GConfEntry *entry,
+ CcKaPanelPrivate *priv)
+{
+ const char *pkuserid;
+
+ if (!entry->value || entry->value->type != GCONF_VALUE_STRING)
+ return;
+
+ pkuserid = gconf_value_get_string (entry->value);
+
+ if (!pkuserid || !strlen(pkuserid))
+ gtk_entry_set_text (GTK_ENTRY (priv->pkuserid_entry), "");
+ else {
+ const char *old_pkuserid;
+
+ old_pkuserid = gtk_entry_get_text (GTK_ENTRY (priv->pkuserid_entry));
+ if (!old_pkuserid || (old_pkuserid && strcmp (old_pkuserid, pkuserid)))
+ gtk_entry_set_text (GTK_ENTRY (priv->pkuserid_entry), pkuserid);
+ }
+}
+
+
+static void
+cc_ka_panel_pkuserid_changed (GtkEntry *entry,
+ CcKaPanelPrivate *priv)
+{
+ const char *pkuserid;
+
+ pkuserid = gtk_entry_get_text (entry);
+
+ if (!pkuserid || !strlen(pkuserid))
+ gconf_client_unset (priv->client, KA_GCONF_KEY_PK_USERID, NULL);
+ else
+ gconf_client_set_string (priv->client, KA_GCONF_KEY_PK_USERID, pkuserid, NULL);
+}
+
+
+static void
+cc_ka_panel_setup_pkuserid_entry (CcKaPanelPrivate *priv)
+{
+ char *pkuserid = NULL;
+
+ priv->pkuserid_entry = WID(priv->builder, "pkuserid_entry");
+ g_assert (priv->pkuserid_entry != NULL);
+
+ if (!ka_gconf_get_string (priv->client, KA_GCONF_KEY_PK_USERID, &pkuserid))
+ g_warning ("Getting pkuserid failed");
+
+ if (pkuserid && strlen(pkuserid))
+ gtk_entry_set_text (GTK_ENTRY (priv->pkuserid_entry), pkuserid);
+ if (pkuserid)
+ g_free (pkuserid);
+
+ g_signal_connect (priv->pkuserid_entry, "changed",
+ G_CALLBACK (cc_ka_panel_pkuserid_changed), priv);
+ if (!gconf_client_key_is_writable (priv->client, KA_GCONF_KEY_PK_USERID, NULL)) {
+ gtk_widget_set_sensitive (priv->pkuserid_entry, FALSE);
+ }
+
+ priv->listeners [priv->n_listeners] =
+ gconf_client_notify_add (priv->client,
+ KA_GCONF_KEY_PK_USERID,
+ (GConfClientNotifyFunc) cc_ka_panel_pkuserid_notify,
+ priv, NULL, NULL);
+ priv->n_listeners++;
+}
+
+
+static void
+ka_preferences_pkanchors_notify (GConfClient *client G_GNUC_UNUSED,
+ guint cnx_id G_GNUC_UNUSED,
+ GConfEntry *entry,
+ CcKaPanelPrivate *priv)
+{
+ const char *pkanchors;
+
+ if (!entry->value || entry->value->type != GCONF_VALUE_STRING)
+ return;
+
+ pkanchors = gconf_value_get_string (entry->value);
+
+ if (!pkanchors || !strlen(pkanchors))
+ gtk_entry_set_text (GTK_ENTRY (priv->pkanchors_entry), "");
+ else {
+ const char *old_pkanchors;
+
+ old_pkanchors = gtk_entry_get_text (GTK_ENTRY (priv->pkanchors_entry));
+ if (!old_pkanchors || (old_pkanchors && strcmp (old_pkanchors, pkanchors)))
+ gtk_entry_set_text (GTK_ENTRY (priv->pkanchors_entry), pkanchors);
+ }
+}
+
+
+static void
+cc_ka_panel_pkanchors_changed (GtkEntry *entry,
+ CcKaPanelPrivate *priv)
+{
+ const char *pkanchors;
+
+ pkanchors = gtk_entry_get_text (entry);
+
+ if (!pkanchors || !strlen(pkanchors))
+ gconf_client_unset (priv->client, KA_GCONF_KEY_PK_ANCHORS, NULL);
+ else
+ gconf_client_set_string (priv->client, KA_GCONF_KEY_PK_ANCHORS,
+ pkanchors, NULL);
+}
+
+
+static void
+cc_ka_panel_setup_pkanchors_entry (CcKaPanelPrivate *priv)
+{
+ char *pkanchors = NULL;
+
+ priv->pkanchors_entry = WID(priv->builder, "pkanchors_entry");
+ g_assert (priv->pkanchors_entry != NULL);
+
+ if (!ka_gconf_get_string (priv->client, KA_GCONF_KEY_PK_ANCHORS, &pkanchors))
+ g_warning ("Getting pkanchors failed");
+
+ if (pkanchors && strlen(pkanchors))
+ gtk_entry_set_text (GTK_ENTRY (priv->pkanchors_entry), pkanchors);
+ if (pkanchors)
+ g_free (pkanchors);
+
+ g_signal_connect (priv->pkanchors_entry, "changed",
+ G_CALLBACK (cc_ka_panel_pkanchors_changed), priv);
+ if (!gconf_client_key_is_writable (priv->client, KA_GCONF_KEY_PK_ANCHORS, NULL)) {
+ gtk_widget_set_sensitive (priv->pkanchors_entry, FALSE);
+ }
+
+ priv->listeners [priv->n_listeners] =
+ gconf_client_notify_add (priv->client,
+ KA_GCONF_KEY_PK_ANCHORS,
+ (GConfClientNotifyFunc) ka_preferences_pkanchors_notify,
+ priv, NULL, NULL);
+ priv->n_listeners++;
+}
+
+
+static void
+ka_preferences_toggle_pkuserid_entry (gboolean state, CcKaPanelPrivate *priv)
+{
+ gtk_widget_set_sensitive (priv->pkuserid_entry, state);
+ gtk_widget_set_sensitive (priv->pkuserid_button, state);
+}
+
+
+static void
+cc_ka_panel_smartcard_toggled (GtkToggleButton *toggle,
+ CcKaPanelPrivate *priv)
+{
+ gboolean smartcard = gtk_toggle_button_get_active (toggle);
+ static gchar *old_path = NULL;
+
+ if (smartcard) {
+ const char *path;
+
+ path = gtk_entry_get_text (GTK_ENTRY(priv->pkuserid_entry));
+ if (g_strcmp0 (path, PKINIT_SMARTCARD)) {
+ g_free (old_path);
+ old_path = g_strdup (path);
+ }
+ ka_preferences_toggle_pkuserid_entry (FALSE, priv);
+ gconf_client_set_string (priv->client, KA_GCONF_KEY_PK_USERID, PKINIT_SMARTCARD, NULL);
+ } else {
+ ka_preferences_toggle_pkuserid_entry (TRUE, priv);
+ if (old_path)
+ gconf_client_set_string (priv->client, KA_GCONF_KEY_PK_USERID, old_path, NULL);
+ else
+ gconf_client_unset (priv->client, KA_GCONF_KEY_PK_USERID, NULL);
+ }
+}
+
+
+static void
+cc_ka_panel_setup_smartcard_toggle(CcKaPanelPrivate *priv)
+{
+ char *pkuserid = NULL;
+
+ priv->smartcard_toggle = WID (priv->builder, "smartcard_toggle");
+ g_assert (priv->smartcard_toggle != NULL);
+
+ if (!ka_gconf_get_string (priv->client, KA_GCONF_KEY_PK_USERID, &pkuserid))
+ g_warning ("Getting pkanchors failed");
+
+ g_signal_connect (priv->smartcard_toggle, "toggled",
+ G_CALLBACK (cc_ka_panel_smartcard_toggled), priv);
+
+ if (!g_strcmp0 (pkuserid, PKINIT_SMARTCARD))
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->smartcard_toggle), TRUE);
+ else
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->smartcard_toggle), FALSE);
+
+ if (pkuserid)
+ g_free (pkuserid);
+}
+
+
+static void
+cc_ka_panel_browse_certs (CcKaPanelPrivate *priv, GtkEntry *entry)
+{
+ GtkWidget *filechooser;
+ GtkFileFilter *cert_filter, *all_filter;
+ gchar *filename = NULL;
+ const gchar *current;
+ gint ret;
+
+ filechooser = gtk_file_chooser_dialog_new(_("Choose Certificate"),
+ GTK_WINDOW (gtk_widget_get_toplevel (priv->notebook)),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ current = gtk_entry_get_text (entry);
+ if (current && g_str_has_prefix (current, PKINIT_FILE) &&
+ strlen(current) > strlen (PKINIT_FILE)) {
+ gtk_file_chooser_select_filename (GTK_FILE_CHOOSER(filechooser),
+ (const gchar*)¤t[strlen(PKINIT_FILE)]);
+ }
+
+ cert_filter = g_object_ref_sink (gtk_file_filter_new ());
+ gtk_file_filter_add_mime_type (cert_filter, "application/x-x509-ca-cert");
+ gtk_file_filter_set_name (cert_filter, _("X509 Certificates"));
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (filechooser), cert_filter);
+ all_filter = g_object_ref_sink (gtk_file_filter_new ());
+ gtk_file_filter_add_pattern (all_filter, "*");
+ gtk_file_filter_set_name (all_filter, _("all files"));
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (filechooser), all_filter);
+
+ ret = gtk_dialog_run (GTK_DIALOG(filechooser));
+ if (ret == GTK_RESPONSE_ACCEPT)
+ filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(filechooser));
+ gtk_widget_destroy (GTK_WIDGET(filechooser));
+
+ if (filename) {
+ gchar *cert = g_strconcat( PKINIT_FILE, filename, NULL);
+ gtk_entry_set_text (entry, cert);
+ g_free (filename);
+ g_free (cert);
+ }
+ g_object_unref (cert_filter);
+ g_object_unref (all_filter);
+}
+
+static void
+cc_ka_panel_browse_pkuserids (GtkButton *button G_GNUC_UNUSED,
+ CcKaPanelPrivate *priv)
+{
+ cc_ka_panel_browse_certs (priv,
+ GTK_ENTRY(priv->pkuserid_entry));
+}
+
+static void
+cc_ka_panel_browse_pkanchors(GtkButton *button G_GNUC_UNUSED,
+ CcKaPanelPrivate *priv)
+{
+ cc_ka_panel_browse_certs (priv,
+ GTK_ENTRY(priv->pkanchors_entry));
+}
+
+static void
+cc_ka_panel_setup_pkuserid_button (CcKaPanelPrivate *priv)
+{
+ priv->pkuserid_button = WID (priv->builder, "pkuserid_button");
+ g_assert (priv->pkuserid_button != NULL);
+
+ g_signal_connect (priv->pkuserid_button, "clicked",
+ G_CALLBACK (cc_ka_panel_browse_pkuserids), priv);
+
+}
+
+static void
+cc_ka_panel_setup_pkanchors_button (CcKaPanelPrivate *priv)
+{
+ priv->pkanchors_button = WID (priv->builder, "pkanchors_button");
+ g_assert (priv->pkanchors_button != NULL);
+
+ g_signal_connect (priv->pkanchors_button, "clicked",
+ G_CALLBACK (cc_ka_panel_browse_pkanchors), priv);
+
+}
+
+
+static void
+cc_ka_panel_forwardable_toggled (GtkToggleButton *toggle,
+ CcKaPanelPrivate *priv)
+{
+ gboolean forwardable;
+
+ forwardable = gtk_toggle_button_get_active (toggle);
+
+ gconf_client_set_bool (priv->client, KA_GCONF_KEY_FORWARDABLE, forwardable, NULL);
+}
+
+
+static void
+cc_ka_panel_forwardable_notify (GConfClient *client G_GNUC_UNUSED,
+ guint cnx_id G_GNUC_UNUSED,
+ GConfEntry *entry,
+ CcKaPanelPrivate *priv)
+{
+ gboolean forwardable;
+
+ if (!entry->value || entry->value->type != GCONF_VALUE_BOOL)
+ return;
+
+ forwardable = gconf_value_get_bool (entry->value) != FALSE;
+
+ if (forwardable != gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->forwardable_toggle)))
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->forwardable_toggle), forwardable);
+}
+
+
+static gboolean
+cc_ka_panel_setup_forwardable_toggle (CcKaPanelPrivate *priv)
+{
+ gboolean forwardable;
+
+ priv->forwardable_toggle = WID (priv->builder, "forwardable_toggle");
+ g_assert (priv->forwardable_toggle != NULL);
+
+ forwardable = gconf_client_get_bool (priv->client, KA_GCONF_KEY_FORWARDABLE, NULL);
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->forwardable_toggle), forwardable);
+
+ g_signal_connect (priv->forwardable_toggle, "toggled",
+ G_CALLBACK (cc_ka_panel_forwardable_toggled), priv);
+
+ if (!gconf_client_key_is_writable (priv->client, KA_GCONF_KEY_FORWARDABLE, NULL)) {
+ gtk_widget_set_sensitive (priv->forwardable_toggle, FALSE);
+ }
+
+ priv->listeners [priv->n_listeners] =
+ gconf_client_notify_add (priv->client,
+ KA_GCONF_KEY_FORWARDABLE,
+ (GConfClientNotifyFunc) cc_ka_panel_forwardable_notify,
+ priv, NULL, NULL);
+ priv->n_listeners++;
+ return forwardable;
+}
+
+
+static void
+cc_ka_panel_proxiable_toggled (GtkToggleButton *toggle,
+ CcKaPanelPrivate *priv)
+{
+ gboolean proxiable;
+
+ proxiable = gtk_toggle_button_get_active (toggle);
+
+ gconf_client_set_bool (priv->client, KA_GCONF_KEY_PROXIABLE, proxiable, NULL);
+}
+
+
+static void
+cc_ka_panel_proxiable_notify (GConfClient *client G_GNUC_UNUSED,
+ guint cnx_id G_GNUC_UNUSED,
+ GConfEntry *entry,
+ CcKaPanelPrivate *priv)
+{
+ gboolean proxiable;
+
+ if (!entry->value || entry->value->type != GCONF_VALUE_BOOL)
+ return;
+
+ proxiable = gconf_value_get_bool (entry->value) != FALSE;
+
+ if (proxiable != gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->proxiable_toggle)))
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->proxiable_toggle), proxiable);
+}
+
+
+static gboolean
+cc_ka_panel_setup_proxiable_toggle (CcKaPanelPrivate *priv)
+{
+ gboolean proxiable;
+
+ priv->proxiable_toggle = WID (priv->builder, "proxiable_toggle");
+ g_assert (priv->proxiable_toggle != NULL);
+
+ proxiable = gconf_client_get_bool (priv->client, KA_GCONF_KEY_PROXIABLE, NULL);
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->proxiable_toggle), proxiable);
+
+ g_signal_connect (priv->proxiable_toggle, "toggled",
+ G_CALLBACK (cc_ka_panel_proxiable_toggled), priv);
+
+ if (!gconf_client_key_is_writable (priv->client, KA_GCONF_KEY_PROXIABLE, NULL)) {
+ gtk_widget_set_sensitive (priv->proxiable_toggle, FALSE);
+ }
+
+ priv->listeners [priv->n_listeners] =
+ gconf_client_notify_add (priv->client,
+ KA_GCONF_KEY_PROXIABLE,
+ (GConfClientNotifyFunc) cc_ka_panel_proxiable_notify,
+ priv, NULL, NULL);
+ priv->n_listeners++;
+ return proxiable;
+}
+
+
+static void
+cc_ka_panel_renewable_toggled (GtkToggleButton *toggle,
+ CcKaPanelPrivate *priv)
+{
+ gboolean renewable;
+
+ renewable = gtk_toggle_button_get_active (toggle);
+
+ gconf_client_set_bool (priv->client, KA_GCONF_KEY_RENEWABLE, renewable, NULL);
+}
+
+
+static void
+cc_ka_panel_renewable_notify (GConfClient *client G_GNUC_UNUSED,
+ guint cnx_id G_GNUC_UNUSED,
+ GConfEntry *entry,
+ CcKaPanelPrivate *priv)
+{
+ gboolean renewable;
+
+ if (!entry->value || entry->value->type != GCONF_VALUE_BOOL)
+ return;
+
+ renewable = gconf_value_get_bool (entry->value) != FALSE;
+
+ if (renewable != gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->renewable_toggle)))
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->renewable_toggle), renewable);
+}
+
+
+static gboolean
+cc_ka_panel_setup_renewable_toggle (CcKaPanelPrivate *priv)
+{
+ gboolean renewable;
+
+ priv->renewable_toggle = WID (priv->builder, "renewable_toggle");
+ g_assert (priv->renewable_toggle != NULL);
+
+ renewable = gconf_client_get_bool (priv->client, KA_GCONF_KEY_RENEWABLE, NULL);
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->renewable_toggle), renewable);
+
+ g_signal_connect (priv->renewable_toggle, "toggled",
+ G_CALLBACK (cc_ka_panel_renewable_toggled), priv);
+
+ if (!gconf_client_key_is_writable (priv->client, KA_GCONF_KEY_RENEWABLE, NULL)) {
+ gtk_widget_set_sensitive (priv->renewable_toggle, FALSE);
+ }
+
+ priv->listeners [priv->n_listeners] =
+ gconf_client_notify_add (priv->client,
+ KA_GCONF_KEY_RENEWABLE,
+ (GConfClientNotifyFunc) cc_ka_panel_renewable_notify,
+ priv, NULL, NULL);
+ priv->n_listeners++;
+ return renewable;
+}
+
+static void
+cc_ka_panel_trayicon_toggled (GtkToggleButton *toggle,
+ CcKaPanelPrivate *priv)
+{
+ gboolean trayicon;
+
+ trayicon = gtk_toggle_button_get_active (toggle);
+ gconf_client_set_bool (priv->client, KA_GCONF_KEY_SHOW_TRAYICON, trayicon, NULL);
+}
+
+
+static void
+cc_ka_panel_trayicon_notify (GConfClient *client G_GNUC_UNUSED,
+ guint cnx_id G_GNUC_UNUSED,
+ GConfEntry *entry,
+ CcKaPanelPrivate *priv)
+{
+ gboolean trayicon;
+
+ if (!entry->value || entry->value->type != GCONF_VALUE_BOOL)
+ return;
+
+ trayicon = gconf_value_get_bool (entry->value) != FALSE;
+
+ if (trayicon != gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->trayicon_toggle)))
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->trayicon_toggle), trayicon);
+}
+
+
+static gboolean
+cc_ka_panel_setup_trayicon_toggle (CcKaPanelPrivate *priv)
+{
+ gboolean trayicon;
+
+ priv->trayicon_toggle = WID (priv->builder, "trayicon_toggle");
+ g_assert (priv->trayicon_toggle != NULL);
+
+ trayicon = gconf_client_get_bool (priv->client, KA_GCONF_KEY_SHOW_TRAYICON, NULL);
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->trayicon_toggle), trayicon);
+
+ g_signal_connect (priv->trayicon_toggle, "toggled",
+ G_CALLBACK (cc_ka_panel_trayicon_toggled), priv);
+
+ if (!gconf_client_key_is_writable (priv->client, KA_GCONF_KEY_SHOW_TRAYICON, NULL)) {
+ gtk_widget_set_sensitive (priv->trayicon_toggle, FALSE);
+ }
+
+ priv->listeners [priv->n_listeners] =
+ gconf_client_notify_add (priv->client,
+ KA_GCONF_KEY_SHOW_TRAYICON,
+ (GConfClientNotifyFunc) cc_ka_panel_trayicon_notify,
+ priv, NULL, NULL);
+ priv->n_listeners++;
+ return trayicon;
+}
+
+
+static void
+cc_ka_panel_prompt_mins_changed (GtkSpinButton *button,
+ CcKaPanelPrivate *priv)
+{
+ gint prompt_mins;
+
+ prompt_mins = gtk_spin_button_get_value_as_int (button);
+ gconf_client_set_int (priv->client, KA_GCONF_KEY_PROMPT_MINS, prompt_mins, NULL);
+}
+
+
+static void
+cc_ka_panel_prompt_mins_notify (GConfClient *client G_GNUC_UNUSED,
+ guint cnx_id G_GNUC_UNUSED,
+ GConfEntry *entry,
+ CcKaPanelPrivate *priv)
+{
+ gint prompt_mins;
+
+ if (!entry->value || entry->value->type != GCONF_VALUE_INT)
+ return;
+
+ prompt_mins = gconf_value_get_int (entry->value);
+
+ if (prompt_mins != gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (priv->prompt_mins_entry)))
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (priv->prompt_mins_entry), prompt_mins);
+}
+
+
+static gint
+cc_ka_panel_setup_prompt_mins_entry (CcKaPanelPrivate *priv)
+{
+ gint prompt_mins;
+
+ priv->prompt_mins_entry = WID (priv->builder, "prompt_mins_entry");
+ g_assert (priv->prompt_mins_entry != NULL);
+
+ prompt_mins = gconf_client_get_int (priv->client, KA_GCONF_KEY_PROMPT_MINS, NULL);
+
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (priv->prompt_mins_entry), prompt_mins);
+
+ g_signal_connect (priv->prompt_mins_entry, "value-changed",
+ G_CALLBACK (cc_ka_panel_prompt_mins_changed), priv);
+
+ if (!gconf_client_key_is_writable (priv->client, KA_GCONF_KEY_PROMPT_MINS, NULL)) {
+ gtk_widget_set_sensitive (priv->prompt_mins_entry, FALSE);
+ }
+
+ priv->listeners [priv->n_listeners] =
+ gconf_client_notify_add (priv->client,
+ KA_GCONF_KEY_PROMPT_MINS,
+ (GConfClientNotifyFunc) cc_ka_panel_prompt_mins_notify,
+ priv, NULL, NULL);
+ priv->n_listeners++;
+ return prompt_mins;
+}
+
+static void
+cc_ka_panel_get_property (GObject *self,
+ guint property_id,
+ GValue *value G_GNUC_UNUSED,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (self, property_id, pspec);
+ }
+}
+
+static void
+cc_ka_panel_set_property (GObject *self,
+ guint property_id,
+ const GValue *value G_GNUC_UNUSED,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (self, property_id, pspec);
+ }
+}
+
+static void
+cc_ka_panel_dispose (GObject *self)
+{
+ CcKaPanelPrivate *priv = GET_PRIVATE (self);
+
+ if (priv->builder != NULL) {
+ g_object_unref (priv->builder);
+ priv->builder = NULL;
+ }
+ G_OBJECT_CLASS (cc_ka_panel_parent_class)->dispose (self);
+}
+
+static void
+cc_ka_panel_finalize (GObject *self)
+{
+ CcKaPanelPrivate *priv = GET_PRIVATE (self);
+
+ if (priv->client) {
+ int i;
+
+ for (i = 0; i < priv->n_listeners; i++) {
+ if (priv->listeners [i])
+ gconf_client_notify_remove (priv->client, priv->listeners [i]);
+ priv->listeners [i] = 0;
+ }
+ priv->n_listeners = 0;
+
+ gconf_client_remove_dir (priv->client, KA_GCONF_PATH, NULL);
+
+ g_object_unref (priv->client);
+ priv->client = NULL;
+ }
+
+ G_OBJECT_CLASS (cc_ka_panel_parent_class)->finalize (self);
+}
+
+static void
+cc_ka_panel_class_init (CcKaPanelClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (CcKaPanelPrivate));
+
+ object_class->get_property = cc_ka_panel_get_property;
+ object_class->set_property = cc_ka_panel_set_property;
+ object_class->dispose = cc_ka_panel_dispose;
+ object_class->finalize = cc_ka_panel_finalize;
+}
+
+static void
+cc_ka_panel_class_finalize (CcKaPanelClass *klass G_GNUC_UNUSED)
+{
+}
+
+static void
+cc_ka_panel_init (CcKaPanel *self)
+{
+ GError *error = NULL;
+
+ CcKaPanelPrivate *priv = GET_PRIVATE (self);
+
+ priv->builder = gtk_builder_new ();
+ gtk_builder_add_from_file(priv->builder, KA_DATA_DIR G_DIR_SEPARATOR_S
+ "ka-panel.ui", &error);
+ if (error != NULL) {
+ g_warning ("Could not load interface file: %s", error->message);
+ g_error_free (error);
+ return;
+
+ }
+ priv->client = gconf_client_get_default ();
+ gconf_client_add_dir (priv->client, KA_GCONF_PATH,
+ GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+
+ cc_ka_panel_setup_principal_entry (priv);
+ cc_ka_panel_setup_pkuserid_entry (priv);
+ cc_ka_panel_setup_pkuserid_button (priv);
+ cc_ka_panel_setup_smartcard_toggle (priv);
+ cc_ka_panel_setup_pkanchors_entry(priv);
+ cc_ka_panel_setup_pkanchors_button (priv);
+ cc_ka_panel_setup_forwardable_toggle (priv);
+ cc_ka_panel_setup_proxiable_toggle (priv);
+ cc_ka_panel_setup_renewable_toggle (priv);
+ cc_ka_panel_setup_trayicon_toggle (priv);
+ cc_ka_panel_setup_prompt_mins_entry (priv);
+
+ g_assert (priv->n_listeners == N_LISTENERS);
+
+ priv->notebook = WID (priv->builder, "ka_notebook");
+ gtk_widget_reparent (priv->notebook, (GtkWidget *) self);
+
+ gtk_widget_show (priv->notebook);
+}
+
+void
+cc_ka_panel_register (GIOModule *module)
+{
+ cc_ka_panel_register_type (G_TYPE_MODULE (module));
+ g_io_extension_point_implement (CC_SHELL_PANEL_EXTENSION_POINT,
+ CC_TYPE_KA_PANEL,
+ "ka-panel", 0);
+}
+
+/*
+ * vim:ts:sts=4:sw=4:et:
+ */
diff --git a/cc-panel/cc-ka-panel.h b/cc-panel/cc-ka-panel.h
new file mode 100644
index 0000000..d8fdda0
--- /dev/null
+++ b/cc-panel/cc-ka-panel.h
@@ -0,0 +1,45 @@
+/* cc-ka-panel.h */
+
+#ifndef _CC_KA_PANEL
+#define _CC_KA_PANEL
+
+#include <libgnome-control-center/cc-panel.h>
+
+G_BEGIN_DECLS
+
+#define CC_TYPE_KA_PANEL cc_ka_panel_get_type()
+
+#define CC_KA_PANEL(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj),CC_TYPE_KA_PANEL, CcKaPanel))
+
+#define CC_KA_PANEL_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), CC_TYPE_KA_PANEL, CcKaPanelClass))
+
+#define CC_IS_KA_PANEL(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CC_TYPE_KA_PANEL))
+
+#define CC_IS_KA_PANEL_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), CC_TYPE_KA_PANEL))
+
+#define CC_KA_PANEL_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), CC_TYPE_KA_PANEL, CcKaPanelClass))
+
+typedef struct {
+ CcPanel parent;
+} CcKaPanel;
+
+typedef struct {
+ CcPanelClass parent_class;
+} CcKaPanelClass;
+
+GType cc_ka_panel_get_type (void) G_GNUC_CONST;
+
+void cc_ka_panel_register (GIOModule *module);
+
+G_END_DECLS
+
+#endif /* _CC_KA_PANEL */
+
+/*
+ * vim:ts:sts=4:sw=4:et:
+ */
diff --git a/cc-panel/gnome-ka-panel.desktop.in b/cc-panel/gnome-ka-panel.desktop.in
new file mode 100644
index 0000000..f7105c5
--- /dev/null
+++ b/cc-panel/gnome-ka-panel.desktop.in
@@ -0,0 +1,17 @@
+[Desktop Entry]
+_Name=Kerberos Authentication
+_Comment=Set your Kerberos network authentication preferences
+Exec=gnome-ka-properties
+Icon=krb-valid-ticket
+Terminal=false
+Type=Application
+StartupNotify=true
+# The X-GNOME-Settings-Panel is necessary to show in the main shell UI
+Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel;
+OnlyShowIn=GNOME;
+X-GNOME-Settings-Panel=ka-panel
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=krb5-auth-dialog
+X-GNOME-Bugzilla-Component=general
+# Translators: those are keywords for the example control-center panel
+_X-GNOME-Keywords=Kerberos;Authentication
diff --git a/cc-panel/ka-module.c b/cc-panel/ka-module.c
new file mode 100644
index 0000000..17ab5bd
--- /dev/null
+++ b/cc-panel/ka-module.c
@@ -0,0 +1,20 @@
+#include <config.h>
+
+#include "cc-ka-panel.h"
+
+#include <glib/gi18n.h>
+
+void
+g_io_module_load (GIOModule *module)
+{
+ bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+
+ /* register the panel */
+ cc_ka_panel_register (module);
+}
+
+void
+g_io_module_unload (GIOModule *module G_GNUC_UNUSED)
+{
+}
diff --git a/cc-panel/ka-panel.ui b/cc-panel/ka-panel.ui
new file mode 100644
index 0000000..10dbc14
--- /dev/null
+++ b/cc-panel/ka-panel.ui
@@ -0,0 +1,675 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy project-wide -->
+ <object class="GtkWindow" id="window1">
+ <child>
+ <object class="GtkNotebook" id="ka_notebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <object class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkVBox" id="vbox2">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Kerberos User</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="access">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ <property name="icon_name">krb-valid-ticket</property>
+ <property name="icon-size">6</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox5">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkFrame" id="frame4">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment4">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkEntry" id="principal_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Kerberos principal:</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame1">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox6">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkFrame" id="frame2">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment2">
+ <property name="visible">True</property>
+ <property name="left_padding">24</property>
+ <child>
+ <object class="GtkVBox" id="vbox11">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkCheckButton" id="smartcard_toggle">
+ <property name="label" translatable="yes">Use Smartcard</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">If checked, use a security token (Smartcard) to authenticate.</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox13">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkEntry" id="pkuserid_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Certificate and private key used for authentication</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="pkuserid_button">
+ <property name="label" translatable="yes">_Browse...</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label21">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Userid:</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame3">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment3">
+ <property name="visible">True</property>
+ <property name="left_padding">24</property>
+ <child>
+ <object class="GtkHBox" id="hbox6">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkEntry" id="pkanchors_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="pkanchors_button">
+ <property name="label" translatable="yes">_Browse...</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label22">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">X509 trust anchors:</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="fram1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">PKINIT:</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox3">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Ticket Options</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox2">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ <property name="icon_name">system-lock-screen</property>
+ <property name="icon-size">6</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox4">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Requested Kerberos tickets should be:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox3">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="label11">
+ <property name="visible">True</property>
+ <property name="label"> </property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="forwardable_toggle">
+ <property name="label" translatable="yes">forwardable</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">If checked, request forwardable tickets</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox4">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="label12">
+ <property name="visible">True</property>
+ <property name="label"> </property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="renewable_toggle">
+ <property name="label" translatable="yes">renewable</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">If checked, request renewable tickets</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox11">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="label19">
+ <property name="visible">True</property>
+ <property name="label"> </property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="proxiable_toggle">
+ <property name="label" translatable="yes">proxiable</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">If checked, request proxiable tickets</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Kerberos</property>
+ </object>
+ <packing>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox9">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkVBox" id="vbox8">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="label17">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Notifications</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox9">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="image3">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ <property name="stock">gtk-dialog-warning</property>
+ <property name="icon-size">6</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox8">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label14">
+ <property name="visible">True</property>
+ <property name="label"> </property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label15">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Used in combination: 'Warn x minutes before expiry'">Warn</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="prompt_mins_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Send notification about ticket expiry that many minutes before it finally expires</property>
+ <property name="invisible_char">●</property>
+ <property name="snap_to_ticks">True</property>
+ <property name="numeric">True</property>
+ <property name="adjustment">adjustment1</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label16">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Used in combination: 'Warn x minutes before expiry'">minutes before expiry</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox10">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="label18">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Appearance</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox10">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="stock">gtk-zoom-in</property>
+ <property name="icon-size">6</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox7">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHBox" id="hbox7">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label13">
+ <property name="visible">True</property>
+ <property name="label"> </property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="trayicon_toggle">
+ <property name="label" translatable="yes">Show tray icon</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">If checked, display the tray icon in the status bar</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Applet</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkAdjustment" id="adjustment1">
+ <property name="upper">1000</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ <property name="page_size">10</property>
+ </object>
+</interface>
diff --git a/configure.ac b/configure.ac
index 8a02673..415ea10 100644
--- a/configure.ac
+++ b/configure.ac
@@ -221,6 +221,13 @@ if test "x$with_libnotify" = "xyes" ; then
LIBS="$savedLIBS"
fi
+dnl libgnome-control-center
+dnl for the new panel
+PKG_CHECK_MODULES(CONTROL_CENTER, [
+ libgnome-control-center >= 2.31.4])
+PANELS_DIR="${libdir}/control-center-1/panels"
+AC_SUBST(PANELS_DIR)
+
dnl secmem
dnl Checks for library functions.
AC_CHECK_FUNCS(seteuid stpcpy mmap)
@@ -301,6 +308,7 @@ preferences/krb5-auth-dialog-preferences.1
help/Makefile
examples/Makefile
plugins/Makefile
+cc-panel/Makefile
])
AC_MSG_NOTICE([])
@@ -324,6 +332,7 @@ AC_MSG_NOTICE([ Network Manager: $NETWORK_MANAGER_CFLAGS $NETWORK_MANAGER_LIBS]
else
AC_MSG_NOTICE([ Network Manager: no])
fi
+AC_MSG_NOTICE([ gnome-cc: $CONTROL_CENTER_CFLAGS $CONTROL_CENTER_LIBS])
AC_MSG_NOTICE([])
AC_MSG_NOTICE([Miscellaneous])
AC_MSG_NOTICE([])
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 1c06eb2..dbc8ecb 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -11,3 +11,6 @@ secmem/util.c
preferences/ka-preferences.c
preferences/krb5-auth-dialog-preferences.desktop.in
[type: gettext/glade]preferences/krb5-auth-dialog-preferences.xml
+cc-panel/gnome-ka-panel.desktop.in
+[type: gettext/glade]cc-panel/ka-panel.ui
+cc-panel/cc-ka-panel.c
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]