/*
- * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 2001-2013 Hiroyuki Yamamoto and the Claws Mail team
+ * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001-2017 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
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-/*
- * General functions for accessing address book files.
*/
#ifdef HAVE_CONFIG_H
static void toolbar_lock_cb (GtkWidget *widget,
gpointer data);
-static void toolbar_ulock_cb (GtkWidget *widget,
+static void toolbar_unlock_cb (GtkWidget *widget,
gpointer data);
static void toolbar_all_read_cb (GtkWidget *widget,
#ifdef USE_ENCHANT
{ "A_CHECK_SPELLING", N_("Check spelling") },
#endif
+ { "A_PRIVACY_SIGN", N_("Sign") },
+ { "A_PRIVACY_ENCRYPT", N_("Encrypt") },
{ "A_CLAWS_ACTIONS", N_("Claws Mail Actions Feature") },
{ "A_CANCEL_INC", N_("Cancel receiving") },
{ "A_CANCEL_SEND", N_("Cancel sending") },
#ifdef USE_ENCHANT
A_CHECK_SPELLING,
#endif
+ A_PRIVACY_SIGN, A_PRIVACY_ENCRYPT,
A_CLOSE };
for (i = 0; i < sizeof comp_items / sizeof comp_items[0]; i++)
item->text = g_strdup(C_("Toolbar", "Trash"));
*rewrite = TRUE;
}
+ if (!strcmp(item->file, "mail") && !strcmp(value, "A_DRAFT")) {
+ /* switch icon file */
+ g_free(item->file);
+ item->file = g_strdup("mail_draft");
+ *rewrite = TRUE;
+ }
if (item->index == -1) {
/* item not found in table: try migrating old action names to current ones */
gint i;
case A_COMPOSE_NEWS: return C_("Toolbar", "Compose");
case A_REPLY_MESSAGE: return _("Reply");
case A_REPLY_SENDER: return C_("Toolbar", "Sender");
- case A_REPLY_ALL: return _("All");
- case A_REPLY_ML: return _("List");
- case A_OPEN_MAIL: return _("Open");
- case A_FORWARD: return _("Forward");
- case A_TRASH: return C_("Toolbar", "Trash");
- case A_DELETE_REAL: return _("Delete");
- case A_DELETE_DUP: return _("Delete duplicates");
- case A_EXECUTE: return _("Execute");
- case A_GOTO_PREV: return _("Prev");
- case A_GOTO_NEXT: return _("Next");
+ case A_REPLY_ALL: return _("All");
+ case A_REPLY_ML: return _("List");
+ case A_OPEN_MAIL: return _("Open");
+ case A_FORWARD: return _("Forward");
+ case A_TRASH: return C_("Toolbar", "Trash");
+ case A_DELETE_REAL: return _("Delete");
+ case A_DELETE_DUP: return _("Delete duplicates");
+ case A_EXECUTE: return _("Execute");
+ case A_GOTO_PREV: return _("Prev");
+ case A_GOTO_NEXT: return _("Next");
case A_IGNORE_THREAD: return _("Ignore thread");
case A_WATCH_THREAD: return _("Watch thread");
- case A_MARK: return _("Mark");
- case A_UNMARK: return _("Unmark");
- case A_LOCK: return _("Lock");
- case A_UNLOCK: return _("Unlock");
- case A_ALL_READ: return _("All read");
- case A_ALL_UNREAD: return _("All unread");
- case A_READ: return _("Read");
- case A_UNREAD: return _("Unread");
-
- case A_PRINT: return _("Print");
- case A_LEARN_SPAM: return _("Spam");
- case A_GO_FOLDERS: return _("Folders");
- case A_PREFERENCES: return _("Preferences");
-
- case A_SEND: return _("Send");
- case A_SEND_LATER: return _("Send later");
- case A_DRAFT: return _("Draft");
- case A_INSERT: return _("Insert");
- case A_ATTACH: return _("Attach");
- case A_SIG: return _("Insert sig.");
- case A_REP_SIG: return _("Replace sig.");
- case A_EXTEDITOR: return _("Edit");
+ case A_MARK: return _("Mark");
+ case A_UNMARK: return _("Unmark");
+ case A_LOCK: return _("Lock");
+ case A_UNLOCK: return _("Unlock");
+ case A_ALL_READ: return _("All read");
+ case A_ALL_UNREAD: return _("All unread");
+ case A_READ: return _("Read");
+ case A_UNREAD: return _("Unread");
+
+ case A_PRINT: return _("Print");
+ case A_LEARN_SPAM: return _("Spam");
+ case A_GO_FOLDERS: return _("Folders");
+ case A_PREFERENCES: return _("Preferences");
+
+ case A_SEND: return _("Send");
+ case A_SEND_LATER: return _("Send later");
+ case A_DRAFT: return _("Draft");
+ case A_INSERT: return _("Insert");
+ case A_ATTACH: return _("Attach");
+ case A_SIG: return _("Insert sig.");
+ case A_REP_SIG: return _("Replace sig.");
+ case A_EXTEDITOR: return _("Edit");
case A_LINEWRAP_CURRENT:return _("Wrap para.");
case A_LINEWRAP_ALL: return _("Wrap all");
- case A_ADDRBOOK: return _("Address");
+ case A_ADDRBOOK: return _("Address");
#ifdef USE_ENCHANT
case A_CHECK_SPELLING: return _("Check spelling");
#endif
+ case A_PRIVACY_SIGN: return _("Sign");
+ case A_PRIVACY_ENCRYPT: return _("Encrypt");
- case A_CANCEL_INC: return _("Stop");
- case A_CANCEL_SEND: return _("Stop");
- case A_CANCEL_ALL: return _("Stop all");
- case A_CLOSE: return _("Close");
- default: return "";
+ case A_CANCEL_INC: return _("Stop");
+ case A_CANCEL_SEND: return _("Stop");
+ case A_CANCEL_ALL: return _("Stop all");
+ case A_CLOSE: return _("Close");
+ default: return "";
}
}
case A_COMPOSE_NEWS: return STOCK_PIXMAP_NEWS_COMPOSE;
case A_REPLY_MESSAGE: return STOCK_PIXMAP_MAIL_REPLY;
case A_REPLY_SENDER: return STOCK_PIXMAP_MAIL_REPLY_TO_AUTHOR;
- case A_REPLY_ALL: return STOCK_PIXMAP_MAIL_REPLY_TO_ALL;
- case A_REPLY_ML: return STOCK_PIXMAP_MAIL_REPLY_TO_LIST;
- case A_OPEN_MAIL: return STOCK_PIXMAP_OPEN_MAIL;
- case A_FORWARD: return STOCK_PIXMAP_MAIL_FORWARD;
- case A_TRASH: return STOCK_PIXMAP_TRASH;
- case A_DELETE_REAL: return STOCK_PIXMAP_DELETE;
- case A_DELETE_DUP: return STOCK_PIXMAP_DELETE_DUP;
- case A_EXECUTE: return STOCK_PIXMAP_EXEC;
- case A_GOTO_PREV: return STOCK_PIXMAP_UP_ARROW;
- case A_GOTO_NEXT: return STOCK_PIXMAP_DOWN_ARROW;
+ case A_REPLY_ALL: return STOCK_PIXMAP_MAIL_REPLY_TO_ALL;
+ case A_REPLY_ML: return STOCK_PIXMAP_MAIL_REPLY_TO_LIST;
+ case A_OPEN_MAIL: return STOCK_PIXMAP_OPEN_MAIL;
+ case A_FORWARD: return STOCK_PIXMAP_MAIL_FORWARD;
+ case A_TRASH: return STOCK_PIXMAP_TRASH;
+ case A_DELETE_REAL: return STOCK_PIXMAP_DELETE;
+ case A_DELETE_DUP: return STOCK_PIXMAP_DELETE_DUP;
+ case A_EXECUTE: return STOCK_PIXMAP_EXEC;
+ case A_GOTO_PREV: return STOCK_PIXMAP_UP_ARROW;
+ case A_GOTO_NEXT: return STOCK_PIXMAP_DOWN_ARROW;
case A_IGNORE_THREAD: return STOCK_PIXMAP_MARK_IGNORETHREAD;
case A_WATCH_THREAD: return STOCK_PIXMAP_MARK_WATCHTHREAD;
- case A_MARK: return STOCK_PIXMAP_MARK_MARK;
- case A_UNMARK: return STOCK_PIXMAP_MARK_UNMARK;
- case A_LOCK: return STOCK_PIXMAP_MARK_LOCKED;
- case A_UNLOCK: return STOCK_PIXMAP_MARK_UNLOCKED;
- case A_ALL_READ: return STOCK_PIXMAP_MARK_ALLREAD;
- case A_ALL_UNREAD: return STOCK_PIXMAP_MARK_ALLUNREAD;
- case A_READ: return STOCK_PIXMAP_MARK_READ;
- case A_UNREAD: return STOCK_PIXMAP_MARK_UNREAD;
-
- case A_PRINT: return STOCK_PIXMAP_PRINTER;
- case A_LEARN_SPAM: return STOCK_PIXMAP_SPAM_BTN;
- case A_GO_FOLDERS: return STOCK_PIXMAP_GO_FOLDERS;
- case A_PREFERENCES: return STOCK_PIXMAP_PREFERENCES;
-
- case A_SEND: return STOCK_PIXMAP_MAIL_SEND;
- case A_SEND_LATER: return STOCK_PIXMAP_MAIL_SEND_QUEUE;
- case A_DRAFT: return STOCK_PIXMAP_MAIL;
- case A_INSERT: return STOCK_PIXMAP_INSERT_FILE;
- case A_ATTACH: return STOCK_PIXMAP_MAIL_ATTACH;
- case A_SIG: return STOCK_PIXMAP_MAIL_SIGN;
- case A_REP_SIG: return STOCK_PIXMAP_MAIL_SIGN;
- case A_EXTEDITOR: return STOCK_PIXMAP_EDIT_EXTERN;
+ case A_MARK: return STOCK_PIXMAP_MARK_MARK;
+ case A_UNMARK: return STOCK_PIXMAP_MARK_UNMARK;
+ case A_LOCK: return STOCK_PIXMAP_MARK_LOCKED;
+ case A_UNLOCK: return STOCK_PIXMAP_MARK_UNLOCKED;
+ case A_ALL_READ: return STOCK_PIXMAP_MARK_ALLREAD;
+ case A_ALL_UNREAD: return STOCK_PIXMAP_MARK_ALLUNREAD;
+ case A_READ: return STOCK_PIXMAP_MARK_READ;
+ case A_UNREAD: return STOCK_PIXMAP_MARK_UNREAD;
+
+ case A_PRINT: return STOCK_PIXMAP_PRINTER_BTN;
+ case A_LEARN_SPAM: return STOCK_PIXMAP_SPAM_BTN;
+ case A_GO_FOLDERS: return STOCK_PIXMAP_GO_FOLDERS;
+ case A_PREFERENCES: return STOCK_PIXMAP_PREFERENCES;
+
+ case A_SEND: return STOCK_PIXMAP_MAIL_SEND;
+ case A_SEND_LATER: return STOCK_PIXMAP_MAIL_SEND_QUEUE;
+ case A_DRAFT: return STOCK_PIXMAP_MAIL_DRAFT;
+ case A_INSERT: return STOCK_PIXMAP_INSERT_FILE;
+ case A_ATTACH: return STOCK_PIXMAP_MAIL_ATTACH;
+ case A_SIG: return STOCK_PIXMAP_MAIL_SIGN;
+ case A_REP_SIG: return STOCK_PIXMAP_MAIL_SIGN;
+ case A_EXTEDITOR: return STOCK_PIXMAP_EDIT_EXTERN;
case A_LINEWRAP_CURRENT:return STOCK_PIXMAP_LINEWRAP_CURRENT;
case A_LINEWRAP_ALL: return STOCK_PIXMAP_LINEWRAP_ALL;
- case A_ADDRBOOK: return STOCK_PIXMAP_ADDRESS_BOOK;
+ case A_ADDRBOOK: return STOCK_PIXMAP_ADDRESS_BOOK;
#ifdef USE_ENCHANT
case A_CHECK_SPELLING: return STOCK_PIXMAP_CHECK_SPELLING;
#endif
+ case A_PRIVACY_SIGN: return STOCK_PIXMAP_MAIL_PRIVACY_SIGNED;
+ case A_PRIVACY_ENCRYPT: return STOCK_PIXMAP_MAIL_PRIVACY_ENCRYPTED;
- case A_CANCEL_INC: return STOCK_PIXMAP_CANCEL;
- case A_CANCEL_SEND: return STOCK_PIXMAP_CANCEL;
- case A_CANCEL_ALL: return STOCK_PIXMAP_CANCEL;
- case A_CLOSE: return STOCK_PIXMAP_CLOSE;
- default: return -1;
+ case A_CANCEL_INC: return STOCK_PIXMAP_CANCEL;
+ case A_CANCEL_SEND: return STOCK_PIXMAP_CANCEL;
+ case A_CANCEL_ALL: return STOCK_PIXMAP_CANCEL;
+ case A_CLOSE: return STOCK_PIXMAP_CLOSE;
+ default: return -1;
}
}
compose_toolbar_cb(A_CHECK_SPELLING, data);
}
#endif
+
+static void toolbar_privacy_sign_cb(GtkWidget *widget, gpointer data)
+{
+ ToolbarItem *toolbar_item = (ToolbarItem*)data;
+ Compose *compose = (Compose *)toolbar_item->parent;
+ gboolean state = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(widget));
+
+ cm_return_if_fail(compose != NULL);
+ compose_use_signing(compose, state);
+}
+
+/* Any time the toggle button gets toggled, we want to update its tooltip. */
+static void toolbar_privacy_sign_toggled_cb(GtkWidget *widget, gpointer data)
+{
+ gboolean state = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(widget));
+
+ if (state)
+ gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(widget), _("Message will be signed"));
+ else
+ gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(widget), _("Message will not be signed"));
+}
+
+static void toolbar_privacy_encrypt_cb(GtkWidget *widget, gpointer data)
+{
+ ToolbarItem *toolbar_item = (ToolbarItem*)data;
+ Compose *compose = (Compose *)toolbar_item->parent;
+ gboolean state = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(widget));
+
+ cm_return_if_fail(compose != NULL);
+ compose_use_encryption(compose, state);
+}
+
+/* Any time the toggle button gets toggled, we want to update its tooltip. */
+static void toolbar_privacy_encrypt_toggled_cb(GtkWidget *widget, gpointer data)
+{
+ gboolean state = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(widget));
+
+ if (state)
+ gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(widget), _("Message will be encrypted"));
+ else
+ gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(widget), _("Message will not be encrypted"));
+}
+
/*
* Execute actions from toolbar
*/
gint index;
void (*func)(GtkWidget *widget, gpointer data);
} callbacks[] = {
- { A_RECEIVE_ALL, toolbar_inc_all_cb },
- { A_RECEIVE_CUR, toolbar_inc_cb },
- { A_SEND_QUEUED, toolbar_send_queued_cb },
- { A_COMPOSE_EMAIL, toolbar_compose_cb },
- { A_COMPOSE_NEWS, toolbar_compose_cb },
- { A_REPLY_MESSAGE, toolbar_reply_cb },
- { A_REPLY_SENDER, toolbar_reply_to_sender_cb },
- { A_REPLY_ALL, toolbar_reply_to_all_cb },
- { A_REPLY_ML, toolbar_reply_to_list_cb },
- { A_FORWARD, toolbar_forward_cb },
- { A_TRASH, toolbar_trash_cb },
- { A_DELETE_REAL, toolbar_delete_cb },
- { A_EXECUTE, toolbar_exec_cb },
+ { A_RECEIVE_ALL, toolbar_inc_all_cb },
+ { A_RECEIVE_CUR, toolbar_inc_cb },
+ { A_SEND_QUEUED, toolbar_send_queued_cb },
+ { A_COMPOSE_EMAIL, toolbar_compose_cb },
+ { A_COMPOSE_NEWS, toolbar_compose_cb },
+ { A_REPLY_MESSAGE, toolbar_reply_cb },
+ { A_REPLY_SENDER, toolbar_reply_to_sender_cb },
+ { A_REPLY_ALL, toolbar_reply_to_all_cb },
+ { A_REPLY_ML, toolbar_reply_to_list_cb },
+ { A_FORWARD, toolbar_forward_cb },
+ { A_TRASH, toolbar_trash_cb },
+ { A_DELETE_REAL, toolbar_delete_cb },
+ { A_EXECUTE, toolbar_exec_cb },
{ A_GOTO_PREV, toolbar_prev_unread_cb },
{ A_GOTO_NEXT, toolbar_next_unread_cb },
- { A_IGNORE_THREAD, toolbar_ignore_thread_cb },
- { A_WATCH_THREAD, toolbar_watch_thread_cb },
- { A_MARK, toolbar_mark_cb },
- { A_UNMARK, toolbar_unmark_cb },
- { A_LOCK, toolbar_lock_cb },
- { A_UNLOCK, toolbar_unlock_cb },
- { A_ALL_READ, toolbar_all_read_cb },
- { A_ALL_UNREAD, toolbar_all_unread_cb },
- { A_READ, toolbar_read_cb },
- { A_UNREAD, toolbar_unread_cb },
- { A_PRINT, toolbar_print_cb },
- { A_LEARN_SPAM, toolbar_learn_cb },
- { A_DELETE_DUP, toolbar_delete_dup_cb },
- { A_GO_FOLDERS, toolbar_go_folders_cb },
-
- { A_SEND, toolbar_send_cb },
- { A_SEND_LATER, toolbar_send_later_cb },
- { A_DRAFT, toolbar_draft_cb },
- { A_OPEN_MAIL, toolbar_open_mail_cb },
- { A_CLOSE, toolbar_close_cb },
- { A_PREFERENCES, toolbar_preferences_cb },
- { A_INSERT, toolbar_insert_cb },
- { A_ATTACH, toolbar_attach_cb },
- { A_SIG, toolbar_sig_cb },
- { A_REP_SIG, toolbar_replace_sig_cb },
- { A_EXTEDITOR, toolbar_ext_editor_cb },
- { A_LINEWRAP_CURRENT, toolbar_linewrap_current_cb },
- { A_LINEWRAP_ALL, toolbar_linewrap_all_cb },
- { A_ADDRBOOK, toolbar_addrbook_cb },
+ { A_IGNORE_THREAD, toolbar_ignore_thread_cb },
+ { A_WATCH_THREAD, toolbar_watch_thread_cb },
+ { A_MARK, toolbar_mark_cb },
+ { A_UNMARK, toolbar_unmark_cb },
+ { A_LOCK, toolbar_lock_cb },
+ { A_UNLOCK, toolbar_unlock_cb },
+ { A_ALL_READ, toolbar_all_read_cb },
+ { A_ALL_UNREAD, toolbar_all_unread_cb },
+ { A_READ, toolbar_read_cb },
+ { A_UNREAD, toolbar_unread_cb },
+ { A_PRINT, toolbar_print_cb },
+ { A_LEARN_SPAM, toolbar_learn_cb },
+ { A_DELETE_DUP, toolbar_delete_dup_cb },
+ { A_GO_FOLDERS, toolbar_go_folders_cb },
+
+ { A_SEND, toolbar_send_cb },
+ { A_SEND_LATER, toolbar_send_later_cb },
+ { A_DRAFT, toolbar_draft_cb },
+ { A_OPEN_MAIL, toolbar_open_mail_cb },
+ { A_CLOSE, toolbar_close_cb },
+ { A_PREFERENCES, toolbar_preferences_cb },
+ { A_INSERT, toolbar_insert_cb },
+ { A_ATTACH, toolbar_attach_cb },
+ { A_SIG, toolbar_sig_cb },
+ { A_REP_SIG, toolbar_replace_sig_cb },
+ { A_EXTEDITOR, toolbar_ext_editor_cb },
+ { A_LINEWRAP_CURRENT, toolbar_linewrap_current_cb },
+ { A_LINEWRAP_ALL, toolbar_linewrap_all_cb },
+ { A_ADDRBOOK, toolbar_addrbook_cb },
#ifdef USE_ENCHANT
- { A_CHECK_SPELLING, toolbar_check_spelling_cb },
+ { A_CHECK_SPELLING, toolbar_check_spelling_cb },
#endif
- { A_CLAWS_ACTIONS, toolbar_actions_execute_cb },
- { A_CANCEL_INC, toolbar_cancel_inc_cb },
- { A_CANCEL_SEND, toolbar_cancel_send_cb },
- { A_CANCEL_ALL, toolbar_cancel_all_cb },
- { A_CLAWS_PLUGINS, toolbar_plugins_execute_cb },
+ { A_PRIVACY_SIGN, toolbar_privacy_sign_cb },
+ { A_PRIVACY_ENCRYPT, toolbar_privacy_encrypt_cb },
+ { A_CLAWS_ACTIONS, toolbar_actions_execute_cb },
+ { A_CANCEL_INC, toolbar_cancel_inc_cb },
+ { A_CANCEL_SEND, toolbar_cancel_send_cb },
+ { A_CANCEL_ALL, toolbar_cancel_all_cb },
+ { A_CLAWS_PLUGINS, toolbar_plugins_execute_cb },
};
num_items = sizeof(callbacks)/sizeof(callbacks[0]);
#ifndef GENERIC_UMPC
#define TOOLBAR_ITEM(item,icon,text,tooltip) { \
item = GTK_WIDGET(gtk_tool_button_new(icon, text)); \
- gtkut_widget_set_can_focus(gtk_bin_get_child(GTK_BIN(item)), FALSE); \
+ gtk_widget_set_can_focus(gtk_bin_get_child(GTK_BIN(item)), FALSE); \
+ gtk_tool_item_set_homogeneous(GTK_TOOL_ITEM(item), FALSE); \
+ gtk_tool_item_set_is_important(GTK_TOOL_ITEM(item), TRUE); \
+ g_signal_connect (G_OBJECT(item), "clicked", G_CALLBACK(toolbar_buttons_cb), toolbar_item); \
+ gtk_toolbar_insert(GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(item), -1); \
+ CLAWS_SET_TOOL_ITEM_TIP(GTK_TOOL_ITEM(item), \
+ tooltip); \
+}
+
+#define TOOLBAR_TOGGLE_ITEM(item,icon,text,tooltip) { \
+ item = GTK_WIDGET(gtk_toggle_tool_button_new()); \
+ gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(item), icon); \
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), text); \
+ gtk_widget_set_can_focus(gtk_bin_get_child(GTK_BIN(item)), FALSE); \
gtk_tool_item_set_homogeneous(GTK_TOOL_ITEM(item), FALSE); \
gtk_tool_item_set_is_important(GTK_TOOL_ITEM(item), TRUE); \
g_signal_connect (G_OBJECT(item), "clicked", G_CALLBACK(toolbar_buttons_cb), toolbar_item); \
gchild = gtk_container_get_children( \
GTK_CONTAINER(child)); \
btn = (GtkWidget *)gchild->data; \
- gtkut_widget_set_can_focus(btn, FALSE); \
+ gtk_widget_set_can_focus(btn, FALSE); \
arr = (GtkWidget *)(gchild->next?gchild->next->data:NULL); \
- gtkut_widget_set_can_focus(arr, FALSE); \
+ gtk_widget_set_can_focus(arr, FALSE); \
g_list_free(gchild); \
gchild = gtk_container_get_children(GTK_CONTAINER(arr)); \
gtk_widget_set_size_request(GTK_WIDGET(gchild->data), 9, -1); \
g_list_free(gchild); \
}
+
#else
+
#define TOOLBAR_ITEM(item,icon,text,tooltip) { \
item = GTK_WIDGET(gtk_tool_button_new(icon, text)); \
- gtkut_widget_set_can_focus(gtk_bin_get_child(GTK_BIN(item)), FALSE); \
+ gtk_widget_set_can_focus(gtk_bin_get_child(GTK_BIN(item)), FALSE); \
+ gtk_tool_item_set_homogeneous(GTK_TOOL_ITEM(item), FALSE); \
+ gtk_tool_item_set_is_important(GTK_TOOL_ITEM(item), TRUE); \
+ g_signal_connect (G_OBJECT(item), "clicked", G_CALLBACK(toolbar_buttons_cb), toolbar_item); \
+ gtk_toolbar_insert(GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(item), -1); \
+}
+
+#define TOOLBAR_TOGGLE_ITEM(item,icon,text,tooltip) { \
+ item = GTK_WIDGET(gtk_toggle_tool_button_new()); \
+ gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(item), icon); \
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), text); \
+ gtk_widget_set_can_focus(gtk_bin_get_child(GTK_BIN(item)), FALSE); \
gtk_tool_item_set_homogeneous(GTK_TOOL_ITEM(item), FALSE); \
gtk_tool_item_set_is_important(GTK_TOOL_ITEM(item), TRUE); \
g_signal_connect (G_OBJECT(item), "clicked", G_CALLBACK(toolbar_buttons_cb), toolbar_item); \
gchild = gtk_container_get_children( \
GTK_CONTAINER(child)); \
btn = (GtkWidget *)gchild->data; \
- gtkut_widget_set_can_focus(btn, FALSE); \
+ gtk_widget_set_can_focus(btn, FALSE); \
arr = (GtkWidget *)(gchild->next?gchild->next->data:NULL); \
- gtkut_widget_set_can_focus(arr, FALSE); \
+ gtk_widget_set_can_focus(arr, FALSE); \
g_list_free(gchild); \
gchild = gtk_container_get_children(GTK_CONTAINER(arr)); \
gtk_widget_set_size_request(GTK_WIDGET(gchild->data), 9, -1); \
gtk_widget_show(item); \
}
+#ifndef GENERIC_UMPC
static void toolbar_reply_menu_cb(GtkWidget *widget, gpointer data)
{
gpointer int_value = g_object_get_data(G_OBJECT(widget), "int-value");
toolbar_reply(toolbar_item, GPOINTER_TO_INT(int_value));
}
-static void toolbar_learn_menu_cb(GtkWidget *widget, gpointer data)
+static void toolbar_delete_dup_menu_cb(GtkWidget *widget, gpointer data)
{
gpointer int_value = g_object_get_data(G_OBJECT(widget), "int-value");
ToolbarItem *toolbar_item = (ToolbarItem *)data;
- toolbar_learn(toolbar_item, GPOINTER_TO_INT(int_value));
+ toolbar_delete_dup(toolbar_item, GPOINTER_TO_INT(int_value));
}
+#endif
-static void toolbar_delete_dup_menu_cb(GtkWidget *widget, gpointer data)
+static void toolbar_learn_menu_cb(GtkWidget *widget, gpointer data)
{
gpointer int_value = g_object_get_data(G_OBJECT(widget), "int-value");
ToolbarItem *toolbar_item = (ToolbarItem *)data;
-
- toolbar_delete_dup(toolbar_item, GPOINTER_TO_INT(int_value));
+
+ toolbar_learn(toolbar_item, GPOINTER_TO_INT(int_value));
}
+
/**
* Create a new toolbar with specified type
* if a callback list is passed it will be used before the
_("Compose with selected Account"));
toolbar_data->compose_mail_btn = item;
toolbar_data->compose_mail_icon = icon_wid;
- g_object_ref(toolbar_data->compose_mail_icon);
+ g_object_ref_sink(toolbar_data->compose_mail_icon);
icon_news = stock_pixmap_widget(STOCK_PIXMAP_NEWS_COMPOSE);
toolbar_data->compose_news_icon = icon_news;
- g_object_ref(toolbar_data->compose_news_icon);
+ g_object_ref_sink(toolbar_data->compose_news_icon);
#else
TOOLBAR_ITEM(item,icon_wid,toolbar_item->text,
_("Compose Email"));
_("Learn as..."));
toolbar_data->learn_spam_btn = item;
toolbar_data->learn_spam_icon = icon_wid;
- g_object_ref(toolbar_data->learn_spam_icon);
+ g_object_ref_sink(toolbar_data->learn_spam_icon);
icon_ham = stock_pixmap_widget(STOCK_PIXMAP_HAM_BTN);
toolbar_data->learn_ham_icon = icon_ham;
- g_object_ref(toolbar_data->learn_ham_icon);
+ g_object_ref_sink(toolbar_data->learn_ham_icon);
menu = gtk_menu_new();
ADD_MENU_ITEM(_("Learn as _Spam"), toolbar_learn_menu_cb, TRUE);
toolbar_data->spellcheck_btn = item;
break;
#endif
+ case A_PRIVACY_SIGN:
+ TOOLBAR_TOGGLE_ITEM(item,icon_wid,toolbar_item->text,_("Sign"));
+ g_signal_connect (G_OBJECT(item), "toggled",
+ G_CALLBACK(toolbar_privacy_sign_toggled_cb), NULL);
+ /* Call the "toggled" handler to set correct tooltip. */
+ toolbar_privacy_sign_toggled_cb(item, NULL);
+ toolbar_data->privacy_sign_btn = item;
+ break;
+ case A_PRIVACY_ENCRYPT:
+ TOOLBAR_TOGGLE_ITEM(item,icon_wid,toolbar_item->text,_("Encrypt"));
+ g_signal_connect (G_OBJECT(item), "toggled",
+ G_CALLBACK(toolbar_privacy_encrypt_toggled_cb), NULL);
+ /* Call the "toggled" handler to set correct tooltip. */
+ toolbar_privacy_encrypt_toggled_cb(item, NULL);
+ toolbar_data->privacy_encrypt_btn = item;
+ break;
case A_CLAWS_ACTIONS:
TOOLBAR_ITEM(item,icon_wid,toolbar_item->text,toolbar_item->text);
/**
* Free toolbar structures
- */
-void toolbar_destroy(Toolbar * toolbar) {
+ */
- TOOLBAR_DESTROY_ITEMS(toolbar->item_list);
+#define UNREF_ICON(icon) if (toolbar->icon != NULL) \
+ g_object_unref(toolbar->icon)
+
+void toolbar_destroy(Toolbar * toolbar) {
+ UNREF_ICON(compose_mail_icon);
+ UNREF_ICON(compose_news_icon);
+ UNREF_ICON(learn_spam_icon);
+ UNREF_ICON(learn_ham_icon);
+ TOOLBAR_DESTROY_ITEMS(toolbar->item_list);
TOOLBAR_DESTROY_ACTIONS(toolbar->action_list);
}
+#undef UNREF_ICON
+
void toolbar_update(ToolbarType type, gpointer data)
{
Toolbar *toolbar_data;
if (toolbar->delete_dup_btn)
SET_WIDGET_COND(toolbar->delete_dup_btn,
- M_ALLOW_DELETE, M_SUMMARY_ISLIST);
+ M_MSG_EXIST, M_ALLOW_DELETE, M_SUMMARY_ISLIST);
if (toolbar->exec_btn)
SET_WIDGET_COND(toolbar->exec_btn,
toolbar->spellcheck_btn = NULL;
#endif
+ toolbar->privacy_sign_btn = NULL;
+ toolbar->privacy_encrypt_btn = NULL;
+
toolbar_destroy(toolbar);
}
MainWindow *mainwin;
MessageView *msgview;
GSList *msginfo_list = NULL;
+ gboolean msg_is_selected = FALSE;
+ gboolean msg_is_opened = FALSE;
cm_return_if_fail(toolbar_item != NULL);
mainwin = (MainWindow*)toolbar_item->parent;
msginfo_list = summary_get_selection(mainwin->summaryview);
msgview = (MessageView*)mainwin->messageview;
+ msg_is_opened = summary_has_opened_message(mainwin->summaryview);
+ msg_is_selected = summary_is_opened_message_selected(mainwin->summaryview);
break;
case TOOLBAR_MSGVIEW:
msgview = (MessageView*)toolbar_item->parent;
cm_return_if_fail(msgview != NULL);
msginfo_list = g_slist_append(msginfo_list, msgview->msginfo);
+ msg_is_opened = TRUE;
+ msg_is_selected = TRUE;
break;
default:
return;
cm_return_if_fail(msgview != NULL);
cm_return_if_fail(msginfo_list != NULL);
- compose_reply_from_messageview(msgview, msginfo_list, action);
+ if (!msg_is_opened) {
+ compose_reply_from_messageview(NULL, msginfo_list, action);
+ } else if (msg_is_selected) {
+ compose_reply_from_messageview(msgview, msginfo_list, action);
+ } else {
+ compose_reply_from_messageview(msgview, NULL, action);
+ }
g_slist_free(msginfo_list);
/* TODO: update reply state ion summaryview */
if (alertpanel(_("Offline warning"),
_("You're working offline. Override?"),
GTK_STOCK_NO, GTK_STOCK_YES,
- NULL) != G_ALERTALTERNATE)
+ NULL, ALERTFOCUS_FIRST) != G_ALERTALTERNATE)
return;
/* ask for confirmation before sending queued messages only
if (alertpanel(_("Send queued messages"),
_("Send all queued messages?"),
GTK_STOCK_CANCEL, _("_Send"),
- NULL) != G_ALERTALTERNATE)
+ NULL, ALERTFOCUS_FIRST) != G_ALERTALTERNATE)
return;
}
}