static void compose_attach_update_label(Compose *compose);
static void compose_set_folder_prefs(Compose *compose, FolderItem *folder,
gboolean respect_default_to);
+static void compose_subject_entry_activated(GtkWidget *widget, gpointer data);
static GtkActionEntry compose_popup_entries[] =
{
/* mailto defines a from, check if we can get account prefs from it,
if not, the account prefs will be guessed using other ways, but we'll keep
the from anyway */
- if (mailto_from)
+ if (mailto_from) {
mailto_account = account_find_from_address(mailto_from, TRUE);
+ if (mailto_account == NULL) {
+ gchar *tmp_from;
+ Xstrdup_a(tmp_from, mailto_from, return NULL);
+ extract_address(tmp_from);
+ mailto_account = account_find_from_address(tmp_from, TRUE);
+ }
+ }
if (mailto_account)
account = mailto_account;
}
ref_id_list = g_slist_remove
(ref_id_list, ref_id_list->next->data);
} else {
- slist_free_strings(ref_id_list);
- g_slist_free(ref_id_list);
+ slist_free_strings_full(ref_id_list);
return NULL;
}
} else
g_string_append_printf(new_ref, "<%s>", (gchar *)cur->data);
}
- slist_free_strings(ref_id_list);
- g_slist_free(ref_id_list);
+ slist_free_strings_full(ref_id_list);
new_ref_str = new_ref->str;
g_string_free(new_ref, FALSE);
g_free(addr);
}
- slist_free_strings(cc_list);
- g_slist_free(cc_list);
+ slist_free_strings_full(cc_list);
}
g_free(ac_email);
gboolean badtxt = FALSE;
struct stat file_stat;
int ret;
+ GString *file_contents = NULL;
cm_return_val_if_fail(file != NULL, COMPOSE_INSERT_NO_FILE);
cur_encoding = conv_get_locale_charset_str_no_utf8();
+ file_contents = g_string_new("");
while (fgets(buf, sizeof(buf), fp) != NULL) {
gchar *str;
if (str[len] == '\r') str[len] = '\n';
}
- gtk_text_buffer_insert(buffer, &iter, str, -1);
+ file_contents = g_string_append(file_contents, str);
g_free(str);
}
+ gtk_text_buffer_insert(buffer, &iter, file_contents->str, -1);
+ g_string_free(file_contents, TRUE);
+
+ compose_changed_cb(NULL, compose);
g_signal_handlers_unblock_by_func(G_OBJECT(buffer),
G_CALLBACK(text_inserted),
compose);
static void compose_select_account(Compose *compose, PrefsAccount *account,
gboolean init)
{
- gchar *from = NULL, *header;
+ gchar *from = NULL, *header = NULL;
ComposeHeaderEntry *header_entry;
+#if GTK_CHECK_VERSION(2, 24, 0)
+ GtkTreeIter iter;
+#endif
cm_return_if_fail(account != NULL);
}
header_entry = (ComposeHeaderEntry *) compose->header_list->data;
+#if !GTK_CHECK_VERSION(2, 24, 0)
header = gtk_combo_box_get_active_text(GTK_COMBO_BOX(header_entry->combo));
+#else
+ if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(header_entry->combo), &iter))
+ gtk_tree_model_get(gtk_combo_box_get_model(GTK_COMBO_BOX(
+ header_entry->combo)), &iter, COMBOBOX_TEXT, &header, -1);
+#endif
if (header && !strlen(gtk_entry_get_text(GTK_ENTRY(header_entry->entry)))) {
if (account->protocol == A_NNTP) {
gchar **strptr;
/* free to and newsgroup list */
- slist_free_strings(compose->to_list);
- g_slist_free(compose->to_list);
+ slist_free_strings_full(compose->to_list);
compose->to_list = NULL;
- slist_free_strings(compose->newsgroup_list);
- g_slist_free(compose->newsgroup_list);
+ slist_free_strings_full(compose->newsgroup_list);
compose->newsgroup_list = NULL;
/* search header entries for to and newsgroup entries */
goto extra_headers_done;
}
while (fgets(buf, BUFFSIZE, exh) != NULL) {
- lastc = strlen(buf) - 1; /* remove trailing \n */
- buf[lastc] = (buf[lastc] == '\n')? '\0': buf[lastc];
- --lastc;
+ lastc = strlen(buf) - 1; /* remove trailing control chars */
+ while (lastc >= 0 && buf[lastc] != ':')
+ buf[lastc--] = '\0';
if (lastc > 0 && buf[0] != '#' && buf[lastc] == ':') {
buf[lastc] = '\0'; /* remove trailing : for comparison */
if (custom_header_is_allowed(buf)) {
headerentry = g_new0(ComposeHeaderEntry, 1);
- /* Combo box */
+ /* Combo box model */
model = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
+#if !GTK_CHECK_VERSION(2, 24, 0)
combo = gtk_combo_box_entry_new_with_model(GTK_TREE_MODEL(model), 0);
+#endif
COMBOBOX_ADD(model, prefs_common_translated_header_name("To:"),
COMPOSE_TO);
COMBOBOX_ADD(model, prefs_common_translated_header_name("Cc:"),
COMPOSE_FOLLOWUPTO);
compose_add_extra_header_entries(model);
+ /* Combo box */
+#if GTK_CHECK_VERSION(2, 24, 0)
+ combo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(model));
+ GtkCellRenderer *cell = gtk_cell_renderer_text_new();
+ gtk_cell_renderer_set_alignment(cell, 0.0, 0.5);
+ gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), cell, TRUE);
+ gtk_combo_box_set_entry_text_column(combo, 0);
+#endif
gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN(combo))), "grab_focus",
G_CALLBACK(compose_grab_focus_cb), compose);
g_signal_connect(G_OBJECT(savemsg_checkbtn), "toggled",
G_CALLBACK(compose_savemsg_checkbtn_cb), compose);
+#if !GTK_CHECK_VERSION(2, 24, 0)
savemsg_combo = gtk_combo_box_entry_new_text();
+#else
+ savemsg_combo = gtk_combo_box_text_new_with_entry();
+#endif
compose->savemsg_checkbtn = savemsg_checkbtn;
compose->savemsg_combo = savemsg_combo;
gtk_widget_show(savemsg_combo);
compose->account = account;
compose->folder = folder;
- compose->mutex = g_mutex_new();
+ compose->mutex = cm_mutex_new();
compose->set_cursor_pos = -1;
#if !(GTK_CHECK_VERSION(2,12,0))
G_CALLBACK(compose_popup_menu), compose);
#endif
g_signal_connect(G_OBJECT(subject_entry), "changed",
- G_CALLBACK(compose_changed_cb), compose);
+ G_CALLBACK(compose_changed_cb), compose);
+ g_signal_connect(G_OBJECT(subject_entry), "activate",
+ G_CALLBACK(compose_subject_entry_activated), compose);
/* drag and drop */
gtk_drag_dest_set(text, GTK_DEST_DEFAULT_ALL, compose_mime_types,
* however this may change. */
address_completion_end(compose->window);
- slist_free_strings(compose->to_list);
- g_slist_free(compose->to_list);
- slist_free_strings(compose->newsgroup_list);
- g_slist_free(compose->newsgroup_list);
- slist_free_strings(compose->header_list);
- g_slist_free(compose->header_list);
+ slist_free_strings_full(compose->to_list);
+ slist_free_strings_full(compose->newsgroup_list);
+ slist_free_strings_full(compose->header_list);
- slist_free_strings(extra_headers);
- g_slist_free(extra_headers);
+ slist_free_strings_full(extra_headers);
extra_headers = NULL;
compose->header_list = compose->newsgroup_list = compose->to_list = NULL;
gtk_widget_destroy(compose->window);
toolbar_destroy(compose->toolbar);
g_free(compose->toolbar);
- g_mutex_free(compose->mutex);
+ cm_mutex_free(compose->mutex);
g_free(compose);
}
gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, (0 + 1),
GTK_FILL, 0, 0, 0);
gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+#if !GTK_CHECK_VERSION(2, 24, 0)
mimetype_entry = gtk_combo_box_entry_new_text();
+#else
+ mimetype_entry = gtk_combo_box_text_new_with_entry();
+#endif
gtk_table_attach(GTK_TABLE(table), mimetype_entry, 1, 2, 0, (0 + 1),
GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
for (mime_type_list = strlist; mime_type_list != NULL;
mime_type_list = mime_type_list->next) {
+#if !GTK_CHECK_VERSION(2, 24, 0)
gtk_combo_box_append_text(GTK_COMBO_BOX(mimetype_entry), mime_type_list->data);
+#else
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(mimetype_entry), mime_type_list->data);
+#endif
g_free(mime_type_list->data);
}
g_list_free(strlist);
GSList *list, *saved_list = NULL;
HeaderEntryState *state;
GtkRcStyle *style = NULL;
+#if !GTK_CHECK_VERSION(3, 0, 0)
static GdkColor yellow;
static gboolean color_set = FALSE;
+#else
+ static GdkColor yellow = { (guint32)0, (guint32)0xf5, (guint32)0xf6, (guint32)0xbe };
+#endif
/* Get ID of active account in the combo box */
menu = gtk_combo_box_get_model(optmenu);
GTK_EDITABLE(hentry->entry), 0, -1);
state->type = hentry->type;
+#if !GTK_CHECK_VERSION(3, 0, 0)
if (!color_set) {
gdk_color_parse("#f5f6be", &yellow);
color_set = gdk_colormap_alloc_color(
gdk_colormap_get_system(),
&yellow, FALSE, TRUE);
}
+#endif
style = gtk_widget_get_modifier_style(hentry->entry);
state->entry_marked = gdk_color_equal(&yellow,
tmpl = g_object_get_data(G_OBJECT(widget), "template");
cm_return_if_fail(tmpl != NULL);
- msg = g_strdup_printf(_("Do you want to apply the template '%s' ?"),
+ msg = g_strdup_printf(_("Do you want to apply the template '%s'?"),
tmpl->name);
val = alertpanel(_("Apply template"), msg,
_("_Replace"), _("_Insert"), GTK_STOCK_CANCEL);
}
#endif
+static void compose_subject_entry_activated(GtkWidget *widget, gpointer data)
+{
+ Compose *compose = (Compose *)data;
+
+ cm_return_if_fail(compose != NULL);
+
+ gtk_widget_grab_focus(compose->text);
+}
+
/*
* End of Source.
*/