/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2012 Hiroyuki Yamamoto and the Claws Mail team
+ * Copyright (C) 1999-2013 Hiroyuki Yamamoto and the Claws Mail team
*
* 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
void gtkut_widget_set_composer_icon(GtkWidget *widget)
{
- static GdkPixbuf *icon = NULL;
-
+ static GList *icon_list = NULL;
+
cm_return_if_fail(widget != NULL);
cm_return_if_fail(gtk_widget_get_window(widget) != NULL);
- if (!icon) {
+ if (!icon_list) {
+ GdkPixbuf *icon = NULL, *big_icon = NULL;
stock_pixbuf_gdk(widget, STOCK_PIXMAP_MAIL_COMPOSE, &icon);
- }
- if (icon)
- gtk_window_set_icon(GTK_WINDOW(widget), icon);
+ stock_pixbuf_gdk(widget, STOCK_PIXMAP_MAIL_COMPOSE_LOGO, &big_icon);
+ if (icon)
+ icon_list = g_list_append(icon_list, icon);
+ if (big_icon)
+ icon_list = g_list_append(icon_list, big_icon);
+ }
+ if (icon_list)
+ gtk_window_set_icon_list(GTK_WINDOW(widget), icon_list);
}
static gboolean move_bar = FALSE;
}
#if HAVE_LIBCOMPFACE
-GtkWidget *xface_get_from_header(const gchar *o_xface, GdkColor *background,
- GdkWindow *window)
+GtkWidget *xface_get_from_header(const gchar *o_xface)
{
static gchar *xpm_xface[XPM_XFACE_HEIGHT];
static gboolean xpm_xface_init = TRUE;
gchar xface[2048];
strncpy(xface, o_xface, sizeof(xface));
- if (!window) {
- g_warning("no window\n");
- return NULL;
- }
if (uncompface(xface) < 0) {
g_warning("uncompface failed\n");
return NULL;
if( txt == NULL )
return TRUE;
+
+ g_free(txt);
return FALSE;
}
GtkWidget *gtkut_window_new (GtkWindowType type,
const gchar *class)
{
-#ifndef MAEMO
GtkWidget *window = gtk_window_new(type);
-#else
- GtkWidget *window = hildon_window_new();
- hildon_program_add_window(hildon_program, HILDON_WINDOW(window));
-#endif
gtk_window_set_role(GTK_WINDOW(window), class);
return window;
}
return pixbuf;
}
+
+#if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
+static void auto_configure_done(const gchar *hostname, gint port, gboolean ssl, AutoConfigureData *data)
+{
+ if (hostname != NULL) {
+ if (data->hostname_entry)
+ gtk_entry_set_text(data->hostname_entry, hostname);
+ if (data->set_port)
+ gtk_toggle_button_set_active(data->set_port,
+ (ssl && port == data->default_ssl_port) || (!ssl && port == data->default_port));
+ if (data->port)
+ gtk_spin_button_set_value(data->port, port);
+ else if (data->hostname_entry) {
+ gchar *tmp = g_strdup_printf("%s:%d", hostname, port);
+ gtk_entry_set_text(data->hostname_entry, tmp);
+ g_free(tmp);
+ }
+
+ if (ssl && data->ssl_checkbtn) {
+ gtk_toggle_button_set_active(data->ssl_checkbtn, TRUE);
+ gtk_toggle_button_set_active(data->tls_checkbtn, FALSE);
+ } else if (data->tls_checkbtn) {
+ if (!GTK_IS_RADIO_BUTTON(data->ssl_checkbtn)) {
+ /* Wizard where TLS is [x]SSL + [x]TLS */
+ gtk_toggle_button_set_active(data->ssl_checkbtn, TRUE);
+ }
+ gtk_toggle_button_set_active(data->tls_checkbtn, TRUE);
+ }
+
+ gtk_label_set_text(data->info_label, _("Done."));
+ } else {
+ gtk_label_set_text(data->info_label, _("Failed."));
+ }
+ gtk_widget_show(GTK_WIDGET(data->configure_button));
+ gtk_widget_hide(GTK_WIDGET(data->cancel_button));
+ g_free(data->domain);
+ g_free(data);
+}
+
+static void resolve_done(GObject *source, GAsyncResult *result, gpointer user_data)
+{
+ AutoConfigureData *data = (AutoConfigureData *)user_data;
+ GResolver *resolver = (GResolver *)source;
+ GError *error = NULL;
+ gchar *hostname = NULL;
+ guint16 port;
+ GList *answers, *cur;
+ gboolean found = FALSE;
+ gboolean abort = FALSE;
+
+ answers = g_resolver_lookup_service_finish(resolver, result, &error);
+
+ if (answers) {
+ for (cur = g_srv_target_list_sort(answers); cur; cur = cur->next) {
+ GSrvTarget *target = (GSrvTarget *)cur->data;
+ const gchar *h = g_srv_target_get_hostname(target);
+ port = g_srv_target_get_port(target);
+ if (h && strcmp(h,"") && port > 0) {
+ hostname = g_strdup(h);
+ found = TRUE;
+ break;
+ }
+ }
+ g_resolver_free_targets(answers);
+ } else if (error) {
+ if (error->code == G_IO_ERROR_CANCELLED)
+ abort = TRUE;
+ debug_print("error %s\n", error->message);
+ g_error_free(error);
+ }
+
+ if (found) {
+ auto_configure_done(hostname, port, data->ssl_service != NULL, data);
+ } else if (data->ssl_service && !abort) {
+ /* Fallback to TLS */
+ data->ssl_service = NULL;
+ auto_configure_service(data);
+ } else {
+ auto_configure_done(NULL, 0, FALSE, data);
+ }
+ g_free(hostname);
+ g_object_unref(resolver);
+}
+
+void auto_configure_service(AutoConfigureData *data)
+{
+ GResolver *resolver;
+ const gchar *cur_service = data->ssl_service != NULL ? data->ssl_service : data->tls_service;
+
+ cm_return_if_fail(cur_service != NULL);
+ cm_return_if_fail(data->domain != NULL);
+
+ resolver = g_resolver_get_default();
+ if (resolver != NULL) {
+ gtk_label_set_text(data->info_label, _("Configuring..."));
+ gtk_widget_hide(GTK_WIDGET(data->configure_button));
+ gtk_widget_show(GTK_WIDGET(data->cancel_button));
+ g_resolver_lookup_service_async(resolver, cur_service, "tcp", data->domain,
+ data->cancel, resolve_done, data);
+ }
+}
+#endif
\ No newline at end of file