aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--widgets/misc/e-port-entry.c180
-rw-r--r--widgets/misc/e-port-entry.h33
2 files changed, 138 insertions, 75 deletions
diff --git a/widgets/misc/e-port-entry.c b/widgets/misc/e-port-entry.c
index a353613039..dd27ffa371 100644
--- a/widgets/misc/e-port-entry.c
+++ b/widgets/misc/e-port-entry.c
@@ -23,6 +23,7 @@
struct _EPortEntryPrivate {
guint port;
gboolean is_valid;
+ CamelNetworkSecurityMethod method;
};
enum {
@@ -34,7 +35,8 @@ enum {
enum {
PROP_0,
PROP_IS_VALID,
- PROP_PORT
+ PROP_PORT,
+ PROP_SECURITY_METHOD
};
G_DEFINE_TYPE (
@@ -73,50 +75,6 @@ port_entry_get_model_active_port (EPortEntry *port_entry)
}
static void
-port_entry_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- switch (property_id) {
- case PROP_IS_VALID:
- port_entry_set_is_valid (
- E_PORT_ENTRY (object),
- g_value_get_boolean (value));
- return;
- case PROP_PORT:
- e_port_entry_set_port (
- E_PORT_ENTRY (object),
- g_value_get_uint (value));
- return;
- }
-
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-}
-
-static void
-port_entry_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- switch (property_id) {
- case PROP_IS_VALID:
- g_value_set_boolean (
- value, e_port_entry_is_valid (
- E_PORT_ENTRY (object)));
- return;
- case PROP_PORT:
- g_value_set_uint (
- value, e_port_entry_get_port (
- E_PORT_ENTRY (object)));
- return;
- }
-
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-}
-
-static void
port_entry_port_changed (EPortEntry *port_entry)
{
GtkTreeModel *model;
@@ -164,6 +122,81 @@ port_entry_port_changed (EPortEntry *port_entry)
}
static void
+port_entry_method_changed (EPortEntry *port_entry)
+{
+ CamelNetworkSecurityMethod method;
+
+ method = e_port_entry_get_security_method (port_entry);
+
+ switch (method) {
+ case CAMEL_NETWORK_SECURITY_METHOD_SSL_ON_ALTERNATE_PORT:
+ e_port_entry_activate_secured_port (port_entry, 0);
+ break;
+ default:
+ e_port_entry_activate_nonsecured_port (port_entry, 0);
+ break;
+ }
+}
+
+static void
+port_entry_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_IS_VALID:
+ port_entry_set_is_valid (
+ E_PORT_ENTRY (object),
+ g_value_get_boolean (value));
+ return;
+
+ case PROP_PORT:
+ e_port_entry_set_port (
+ E_PORT_ENTRY (object),
+ g_value_get_uint (value));
+ return;
+
+ case PROP_SECURITY_METHOD:
+ e_port_entry_set_security_method (
+ E_PORT_ENTRY (object),
+ g_value_get_enum (value));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+port_entry_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_IS_VALID:
+ g_value_set_boolean (
+ value, e_port_entry_is_valid (
+ E_PORT_ENTRY (object)));
+ return;
+
+ case PROP_PORT:
+ g_value_set_uint (
+ value, e_port_entry_get_port (
+ E_PORT_ENTRY (object)));
+ return;
+
+ case PROP_SECURITY_METHOD:
+ g_value_set_enum (
+ value, e_port_entry_get_security_method (
+ E_PORT_ENTRY (object)));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
port_entry_get_preferred_width (GtkWidget *widget,
gint *minimum_size,
gint *natural_size)
@@ -236,7 +269,8 @@ e_port_entry_class_init (EPortEntryClass *class)
NULL,
NULL,
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property (
object_class,
@@ -248,7 +282,20 @@ e_port_entry_class_init (EPortEntryClass *class)
0, /* Min port, 0 = invalid port */
G_MAXUINT16, /* Max port */
0,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_SECURITY_METHOD,
+ g_param_spec_enum (
+ "security-method",
+ "Security Method",
+ "Method used to establish a network connection",
+ CAMEL_TYPE_NETWORK_SECURITY_METHOD,
+ CAMEL_NETWORK_SECURITY_METHOD_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
static void
@@ -292,6 +339,10 @@ e_port_entry_init (EPortEntry *port_entry)
g_signal_connect (
port_entry, "changed",
G_CALLBACK (port_entry_port_changed), NULL);
+
+ g_signal_connect (
+ port_entry, "notify::security-method",
+ G_CALLBACK (port_entry_method_changed), NULL);
}
GtkWidget *
@@ -340,20 +391,6 @@ e_port_entry_set_camel_entries (EPortEntry *port_entry,
e_port_entry_set_port (port_entry, entries[0].port);
}
-void
-e_port_entry_security_port_changed (EPortEntry *port_entry,
- gchar *ssl)
-{
- g_return_if_fail (E_IS_PORT_ENTRY (port_entry));
- g_return_if_fail (ssl != NULL);
-
- if (strcmp (ssl, "always") == 0) {
- e_port_entry_activate_secured_port (port_entry, 0);
- } else {
- e_port_entry_activate_nonsecured_port (port_entry, 0);
- }
-}
-
gint
e_port_entry_get_port (EPortEntry *port_entry)
{
@@ -402,6 +439,27 @@ e_port_entry_is_valid (EPortEntry *port_entry)
return port_entry->priv->is_valid;
}
+CamelNetworkSecurityMethod
+e_port_entry_get_security_method (EPortEntry *port_entry)
+{
+ g_return_val_if_fail (
+ E_IS_PORT_ENTRY (port_entry),
+ CAMEL_NETWORK_SECURITY_METHOD_NONE);
+
+ return port_entry->priv->method;
+}
+
+void
+e_port_entry_set_security_method (EPortEntry *port_entry,
+ CamelNetworkSecurityMethod method)
+{
+ g_return_if_fail (E_IS_PORT_ENTRY (port_entry));
+
+ port_entry->priv->method = method;
+
+ g_object_notify (G_OBJECT (port_entry), "security-method");
+}
+
/**
* If there are more then one secured port in the model, you can specify
* which of the secured ports should be activated by specifying the index.
diff --git a/widgets/misc/e-port-entry.h b/widgets/misc/e-port-entry.h
index 64e0a6b234..2ef9b45cf7 100644
--- a/widgets/misc/e-port-entry.h
+++ b/widgets/misc/e-port-entry.h
@@ -60,22 +60,27 @@ struct _EPortEntryClass {
GtkComboBoxClass parent_class;
};
-GType e_port_entry_get_type (void) G_GNUC_CONST;
-GtkWidget * e_port_entry_new (void);
-void e_port_entry_set_camel_entries (EPortEntry *pentry,
- CamelProviderPortEntry *entries);
-void e_port_entry_security_port_changed
- (EPortEntry *pentry,
- gchar *ssl);
-gint e_port_entry_get_port (EPortEntry *pentry);
-void e_port_entry_set_port (EPortEntry *pentry, gint port);
-gboolean e_port_entry_is_valid (EPortEntry *pentry);
+GType e_port_entry_get_type (void) G_GNUC_CONST;
+GtkWidget * e_port_entry_new (void);
+void e_port_entry_set_camel_entries
+ (EPortEntry *port_entry,
+ CamelProviderPortEntry *entries);
+gint e_port_entry_get_port (EPortEntry *port_entry);
+void e_port_entry_set_port (EPortEntry *port_entry,
+ gint port);
+gboolean e_port_entry_is_valid (EPortEntry *port_entry);
+CamelNetworkSecurityMethod
+ e_port_entry_get_security_method
+ (EPortEntry *port_entry);
+void e_port_entry_set_security_method
+ (EPortEntry *port_entry,
+ CamelNetworkSecurityMethod method);
void e_port_entry_activate_secured_port
- (EPortEntry *pentry,
- gint index);
+ (EPortEntry *port_entry,
+ gint index);
void e_port_entry_activate_nonsecured_port
- (EPortEntry *pentry,
- gint index);
+ (EPortEntry *port_entry,
+ gint index);
G_END_DECLS