use generic toolbar handling

This commit is contained in:
Oliver Haertel 2002-12-24 14:38:23 +00:00
parent 2cd2f95d46
commit fda5525dc3
10 changed files with 164 additions and 1458 deletions

View file

@ -1,3 +1,12 @@
2002-12-24 [oliver] 0.8.7claws6
* src/mainwindow.[ch]
* src/messageview.[ch]
* src/compose.[ch]
* src/inc.c
* src/summaryview.c
changes to use updated toolbar handling
2002-12-24 [oliver] 0.8.7claws5
* src/toolbar.[ch]

View file

@ -11,7 +11,7 @@ MINOR_VERSION=8
MICRO_VERSION=7
INTERFACE_AGE=0
BINARY_AGE=0
EXTRA_VERSION=claws5
EXTRA_VERSION=claws6
VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
dnl set $target

View file

@ -164,11 +164,6 @@ Compose *compose_generic_new (PrefsAccount *account,
static Compose *compose_create (PrefsAccount *account,
ComposeMode mode);
static void compose_toolbar_create (Compose *compose,
GtkWidget *container);
static void compose_toolbar_update (Compose *compose);
static void compose_toolbar_set_sensitive (Compose *compose,
gboolean sensitive);
static GtkWidget *compose_account_option_menu_create
(Compose *compose);
@ -296,31 +291,8 @@ static void compose_update_priority_menu_item(Compose * compose);
static gboolean compose_edit_size_alloc (GtkEditable *widget,
GtkAllocation *allocation,
GtkSHRuler *shruler);
static void toolbar_send_cb (GtkWidget *widget,
gpointer data);
static void toolbar_send_later_cb (GtkWidget *widget,
gpointer data);
static void toolbar_draft_cb (GtkWidget *widget,
gpointer data);
static void toolbar_insert_cb (GtkWidget *widget,
gpointer data);
static void toolbar_attach_cb (GtkWidget *widget,
gpointer data);
static void toolbar_sig_cb (GtkWidget *widget,
gpointer data);
static void toolbar_ext_editor_cb (GtkWidget *widget,
gpointer data);
static void toolbar_linewrap_cb (GtkWidget *widget,
gpointer data);
static void toolbar_address_cb (GtkWidget *widget,
gpointer data);
static void toolbar_compose_buttons_cb (GtkWidget *widget,
ToolbarItem *item);
static void account_activated (GtkMenuItem *menuitem,
gpointer data);
static void attach_selected (GtkCList *clist,
gint row,
gint column,
@ -1379,6 +1351,46 @@ void compose_entry_select (Compose *compose, const gchar *mailto)
}
}
void compose_toolbar_cb(gint action, gpointer data)
{
ToolbarItem *toolbar_item = (ToolbarItem*)data;
Compose *compose = (Compose*)toolbar_item->parent;
g_return_if_fail(compose != NULL);
switch(action) {
case A_SEND:
compose_send_cb(compose, 0, NULL);
break;
case A_SENDL:
compose_send_later_cb(compose, 0, NULL);
break;
case A_DRAFT:
compose_draft_cb(compose, 0, NULL);
break;
case A_INSERT:
compose_insert_file_cb(compose, 0, NULL);
break;
case A_ATTACH:
compose_attach_cb(compose, 0, NULL);
break;
case A_SIG:
compose_insert_sig(compose);
break;
case A_EXTEDITOR:
compose_ext_editor_cb(compose, 0, NULL);
break;
case A_LINEWRAP:
compose_wrap_line(compose);
break;
case A_ADDRBOOK:
compose_address_cb(compose, 0, NULL);
break;
default:
break;
}
}
static void compose_entries_set(Compose *compose, const gchar *mailto)
{
gchar *to = NULL;
@ -4658,7 +4670,8 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode)
handlebox = gtk_handle_box_new();
gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0);
compose_toolbar_create(compose, handlebox);
compose->toolbar = toolbar_create(TOOLBAR_COMPOSE, handlebox,
(gpointer)compose);
vbox2 = gtk_vbox_new(FALSE, 2);
gtk_box_pack_start(GTK_BOX(vbox), vbox2, TRUE, TRUE, 0);
@ -4993,230 +5006,12 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode)
#if USE_GPGME
activate_gnupg_mode(compose, account);
#endif
common_toolbar_set_style(compose, TOOLBAR_COMPOSE);
toolbar_set_style(compose->toolbar->toolbar, compose->handlebox, prefs_common.toolbar_style);
gtk_widget_show(window);
return compose;
}
static void toolbar_compose_buttons_cb(GtkWidget *widget,
ToolbarItem *item)
{
struct {
gint index;
void (*func)(GtkWidget *widget, gpointer data);
} compose_action[] = {
{ A_SEND, toolbar_send_cb },
{ A_SENDL, toolbar_send_later_cb },
{ A_DRAFT, toolbar_draft_cb },
{ A_INSERT, toolbar_insert_cb },
{ A_ATTACH, toolbar_attach_cb },
{ A_SIG, toolbar_sig_cb },
{ A_EXTEDITOR, toolbar_ext_editor_cb },
{ A_LINEWRAP, toolbar_linewrap_cb },
{ A_ADDRBOOK, toolbar_address_cb },
{ A_SYL_ACTIONS, common_toolbar_actions_execute_cb }};
gint num_items = sizeof(compose_action)/sizeof(compose_action[0]);
gint i;
for (i = 0; i < num_items; i++) {
if (compose_action[i].index == item->index) {
if (item->index == A_SYL_ACTIONS)
compose_action[i].func(widget, (gpointer)item->parent);
else /* this won`t be necessary if everything is moved to toolbar.c */
compose_action[i].func(widget, (gpointer)item->parent->data);
break;
}
}
}
static void compose_toolbar_update(Compose *compose)
{
gtk_container_remove(GTK_CONTAINER(compose->handlebox),
GTK_WIDGET(compose->toolbar->toolbar));
compose->toolbar->toolbar = NULL;
compose->toolbar->send_btn = NULL;
compose->toolbar->sendl_btn = NULL;
compose->toolbar->draft_btn = NULL;
compose->toolbar->insert_btn = NULL;
compose->toolbar->attach_btn = NULL;
compose->toolbar->sig_btn = NULL;
compose->toolbar->exteditor_btn = NULL;
compose->toolbar->linewrap_btn = NULL;
compose->toolbar->addrbook_btn = NULL;
TOOLBAR_DESTROY_ITEMS(compose->toolbar->item_list);
TOOLBAR_DESTROY_ACTIONS(compose->toolbar->action_list);
compose_toolbar_create(compose, compose->handlebox);
}
static void compose_toolbar_create(Compose *compose,
GtkWidget *container)
{
ToolbarItem *toolbar_item;
GtkWidget *toolbar;
GtkWidget *icon_wid = NULL;
GtkWidget *item;
GtkTooltips *toolbar_tips;
ToolbarSylpheedActions *action_item;
GSList *cur;
GSList *toolbar_list;
toolbar_tips = gtk_tooltips_new();
toolbar_read_config_file(TOOLBAR_COMPOSE);
toolbar_list = toolbar_get_list(TOOLBAR_COMPOSE);
compose->toolbar = g_new0(Toolbar, 1);
toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL,
GTK_TOOLBAR_BOTH);
gtk_container_add(GTK_CONTAINER(container), toolbar);
gtk_container_set_border_width(GTK_CONTAINER(container), 2);
gtk_toolbar_set_button_relief(GTK_TOOLBAR(toolbar), GTK_RELIEF_NONE);
gtk_toolbar_set_space_style(GTK_TOOLBAR(toolbar),
GTK_TOOLBAR_SPACE_LINE);
for (cur = toolbar_list; cur != NULL; cur = cur->next) {
if (g_strcasecmp(((ToolbarItem*)cur->data)->file, SEPARATOR) == 0) {
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
continue;
}
toolbar_item = g_new0(ToolbarItem, 1);
toolbar_item->file = g_strdup(((ToolbarItem*)cur->data)->file);
toolbar_item->text = g_strdup(((ToolbarItem*)cur->data)->text);
toolbar_item->index = ((ToolbarItem*)cur->data)->index;
toolbar_item->parent = g_new0(ToolbarParent, 1);
toolbar_item->parent->data = (gpointer)compose;
toolbar_item->parent->type = TOOLBAR_COMPOSE;
/* collect toolbar items in list to keep track */
compose->toolbar->item_list = g_slist_append(compose->toolbar->item_list,
toolbar_item);
icon_wid = stock_pixmap_widget(container, stock_pixmap_get_icon(toolbar_item->file));
item = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
toolbar_item->text,
(""),
(""),
icon_wid, toolbar_compose_buttons_cb,
toolbar_item);
switch (toolbar_item->index) {
case A_SEND:
compose->toolbar->send_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
compose->toolbar->send_btn,
_("Send Message"), NULL);
break;
case A_SENDL:
compose->toolbar->sendl_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
compose->toolbar->sendl_btn,
_("Put into queue folder and send later"), NULL);
break;
case A_DRAFT:
compose->toolbar->draft_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
compose->toolbar->draft_btn,
_("Save to draft folder"), NULL);
break;
case A_INSERT:
compose->toolbar->insert_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
compose->toolbar->insert_btn,
_("Insert file"), NULL);
break;
case A_ATTACH:
compose->toolbar->attach_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
compose->toolbar->attach_btn,
_("Attach file"), NULL);
break;
case A_SIG:
compose->toolbar->sig_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
compose->toolbar->sig_btn,
_("Insert signature"), NULL);
break;
case A_EXTEDITOR:
compose->toolbar->exteditor_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
compose->toolbar->exteditor_btn,
_("Edit with external editor"), NULL);
break;
case A_LINEWRAP:
compose->toolbar->linewrap_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
compose->toolbar->linewrap_btn,
_("Wrap all long lines"), NULL);
break;
case A_ADDRBOOK:
compose->toolbar->addrbook_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
compose->toolbar->addrbook_btn,
_("Address book"), NULL);
break;
case A_SYL_ACTIONS:
action_item = g_new0(ToolbarSylpheedActions, 1);
action_item->widget = item;
action_item->name = g_strdup(toolbar_item->text);
compose->toolbar->action_list =
g_slist_append(compose->toolbar->action_list,
action_item);
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
item,
action_item->name, NULL);
gtk_widget_show(item);
break;
default:
break;
}
}
compose->toolbar->toolbar = toolbar;
gtk_widget_show_all(toolbar);
}
static void compose_toolbar_set_sensitive (Compose * compose, gboolean sensitive)
{
GSList *items = compose->toolbar->action_list;
if (compose->toolbar->send_btn)
gtk_widget_set_sensitive(compose->toolbar->send_btn, sensitive);
if (compose->toolbar->sendl_btn)
gtk_widget_set_sensitive(compose->toolbar->sendl_btn, sensitive);
if (compose->toolbar->draft_btn )
gtk_widget_set_sensitive(compose->toolbar->draft_btn , sensitive);
if (compose->toolbar->insert_btn )
gtk_widget_set_sensitive(compose->toolbar->insert_btn , sensitive);
if (compose->toolbar->attach_btn)
gtk_widget_set_sensitive(compose->toolbar->attach_btn, sensitive);
if (compose->toolbar->sig_btn)
gtk_widget_set_sensitive(compose->toolbar->sig_btn, sensitive);
if (compose->toolbar->exteditor_btn)
gtk_widget_set_sensitive(compose->toolbar->exteditor_btn, sensitive);
if (compose->toolbar->linewrap_btn)
gtk_widget_set_sensitive(compose->toolbar->linewrap_btn, sensitive);
if (compose->toolbar->addrbook_btn)
gtk_widget_set_sensitive(compose->toolbar->addrbook_btn, sensitive);
for (; items != NULL; items = g_slist_next(items)) {
ToolbarSylpheedActions *item = (ToolbarSylpheedActions *)items->data;
gtk_widget_set_sensitive(item->widget, sensitive);
}
}
static GtkWidget *compose_account_option_menu_create(Compose *compose)
{
GList *accounts;
@ -5379,8 +5174,7 @@ void compose_reflect_prefs_pixmap_theme(void)
for (cur = compose_list; cur != NULL; cur = cur->next) {
compose = (Compose *)cur->data;
compose_toolbar_update(compose);
common_toolbar_set_style(compose, TOOLBAR_COMPOSE);
toolbar_update(TOOLBAR_COMPOSE, compose);
}
}
@ -5491,8 +5285,7 @@ static void compose_destroy(Compose *compose)
gtk_widget_destroy(compose->paned);
TOOLBAR_DESTROY_ITEMS(compose->toolbar->item_list);
TOOLBAR_DESTROY_ACTIONS(compose->toolbar->action_list);
toolbar_destroy(compose->toolbar);
g_free(compose->toolbar);
g_free(compose);
@ -6156,57 +5949,6 @@ static gboolean compose_edit_size_alloc(GtkEditable *widget,
return TRUE;
}
static void toolbar_send_cb(GtkWidget *widget, gpointer data)
{
compose_send_cb(data, 0, NULL);
}
static void toolbar_send_later_cb(GtkWidget *widget, gpointer data)
{
compose_send_later_cb(data, 0, NULL);
}
static void toolbar_draft_cb(GtkWidget *widget, gpointer data)
{
compose_draft_cb(data, 0, NULL);
}
static void toolbar_insert_cb(GtkWidget *widget, gpointer data)
{
compose_insert_file_cb(data, 0, NULL);
}
static void toolbar_attach_cb(GtkWidget *widget, gpointer data)
{
compose_attach_cb(data, 0, NULL);
}
static void toolbar_sig_cb(GtkWidget *widget, gpointer data)
{
Compose *compose = (Compose *)data;
compose_insert_sig(compose);
}
static void toolbar_ext_editor_cb(GtkWidget *widget, gpointer data)
{
Compose *compose = (Compose *)data;
compose_exec_ext_editor(compose);
}
static void toolbar_linewrap_cb(GtkWidget *widget, gpointer data)
{
Compose *compose = (Compose *)data;
compose_wrap_line(compose);
}
static void toolbar_address_cb(GtkWidget *widget, gpointer data)
{
compose_address_cb(data, 0, NULL);
}
static void account_activated(GtkMenuItem *menuitem, gpointer data)
{
Compose *compose = (Compose *)data;
@ -6271,7 +6013,7 @@ static void attach_key_pressed(GtkWidget *widget, GdkEventKey *event,
static void compose_allow_user_actions (Compose *compose, gboolean allow)
{
GtkItemFactory *ifactory = gtk_item_factory_from_widget(compose->menubar);
compose_toolbar_set_sensitive(compose, allow);
toolbar_comp_set_sensitive(compose, allow);
menu_set_sensitive(ifactory, "/File", allow);
menu_set_sensitive(ifactory, "/Edit", allow);
menu_set_sensitive(ifactory, "/Spelling", allow);

View file

@ -257,5 +257,7 @@ void compose_reflect_prefs_pixmap_theme (void);
void compose_destroy_all (void);
void compose_draft (gpointer data);
void compose_toolbar_cb (gint action,
gpointer data);
#endif /* __COMPOSE_H__ */

View file

@ -270,7 +270,7 @@ static gint inc_account_mail(PrefsAccount *account, MainWindow *mainwin)
gtk_clist_append(GTK_CLIST(inc_dialog->dialog->clist), text);
if (mainwin) {
toolbar_set_sensitive(mainwin);
toolbar_main_set_sensitive(mainwin);
main_window_set_menu_sensitive(mainwin);
}
@ -370,7 +370,7 @@ void inc_all_account_mail(MainWindow *mainwin, gboolean notify)
gtk_clist_append(GTK_CLIST(inc_dialog->dialog->clist), text);
}
toolbar_set_sensitive(mainwin);
toolbar_main_set_sensitive(mainwin);
main_window_set_menu_sensitive(mainwin);
new_msgs += inc_start(inc_dialog);

File diff suppressed because it is too large Load diff

View file

@ -166,8 +166,6 @@ void main_window_toolbar_set_compose_button (MainWindow *mainwin,
SensitiveCond main_window_get_current_state (MainWindow *mainwin);
void toolbar_set_sensitive (MainWindow *mainwin);
void toolbar_set_compose_button (Toolbar *toolbar,
ComposeButtonType compose_btn_type);
void main_window_destroy_all (void);

View file

@ -65,10 +65,6 @@ static void key_pressed (GtkWidget *widget,
static void focus_in (GtkWidget *widget,
GdkEventFocus *event,
gpointer data);
static void messageview_toolbar_create (MessageView *messageview,
GtkWidget *container);
static void toolbar_messageview_buttons_cb (GtkWidget *widget,
ToolbarItem *item);
static void return_receipt_show (NoticeView *noticeview,
MsgInfo *msginfo);
@ -78,17 +74,14 @@ static void return_receipt_send_clicked (NoticeView *noticeview,
static PrefsAccount *select_account_from_list
(GList *ac_list);
static void messageview_reply_cb (gpointer data,
guint action,
GtkWidget *widget);
static void messageview_delete_cb (gpointer data,
guint action,
GtkWidget *widget);
static void messageview_menubar_cb (gpointer data,
guint action,
GtkWidget *widget);
static void messageview_close_cb (gpointer data,
guint action,
GtkWidget *widget);
static GList *msgview_list = NULL;
MessageView *messageview_create(MainWindow *mainwin)
{
@ -154,32 +147,58 @@ static GtkItemFactoryEntry messageview_entries[] =
{N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_File/_Close"), "<control>W", messageview_close_cb, 0, NULL},
{N_("/_Message"), NULL, NULL, 0, "<Branch>"},
{N_("/_Message/_Reply"), "<control>R", messageview_reply_cb, COMPOSE_REPLY, NULL},
{N_("/_Message"), NULL, NULL, 0, "<Branch>"},
{N_("/_Message/_Reply"), "<control>R", messageview_menubar_cb, COMPOSE_REPLY, NULL},
{N_("/_Message/Repl_y to"), NULL, NULL, 0, "<Branch>"},
{N_("/_Message/Repl_y to/_all"), "<shift><control>R", messageview_reply_cb, COMPOSE_REPLY_TO_ALL, NULL},
{N_("/_Message/Repl_y to/_sender"), NULL, messageview_reply_cb, COMPOSE_REPLY_TO_SENDER, NULL},
{N_("/_Message/Repl_y to/_all"), "<shift><control>R", messageview_menubar_cb, COMPOSE_REPLY_TO_ALL, NULL},
{N_("/_Message/Repl_y to/_sender"), NULL, messageview_menubar_cb, COMPOSE_REPLY_TO_SENDER, NULL},
{N_("/_Message/Repl_y to/mailing _list"),
"<control>L", messageview_reply_cb, COMPOSE_REPLY_TO_LIST, NULL},
{N_("/_Message/Follow-up and reply to"),NULL, messageview_reply_cb, COMPOSE_FOLLOWUP_AND_REPLY_TO, NULL},
"<control>L", messageview_menubar_cb, COMPOSE_REPLY_TO_LIST, NULL},
{N_("/_Message/Follow-up and reply to"),NULL, messageview_menubar_cb, COMPOSE_FOLLOWUP_AND_REPLY_TO, NULL},
{N_("/_Message/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_Message/_Delete"), "<control>D", messageview_delete_cb, 0, NULL},
{N_("/_Message/_Delete"), "<control>D", delete_msgview_cb, 0, NULL},
{N_("/_Help"), NULL, NULL, 0, "<Branch>"},
{N_("/_Help/_About"), NULL, about_show, 0, NULL}
{N_("/_Help"), NULL, NULL, 0, "<Branch>"},
{N_("/_Help/_About"), NULL, about_show, 0, NULL}
};
GList *messageview_get_msgview_list(void)
{
return msgview_list;
}
void messageview_add_toolbar(MessageView *msgview, GtkWidget *window)
{
GtkWidget *handlebox;
GtkWidget *vbox;
GtkWidget *menubar;
guint n_menu_entries;
vbox = gtk_vbox_new(FALSE, 0);
gtk_widget_show(vbox);
gtk_container_add(GTK_CONTAINER(window), vbox);
n_menu_entries = sizeof(messageview_entries) / sizeof(messageview_entries[0]);
menubar = menubar_create(window, messageview_entries,
n_menu_entries, "<MessageView>", msgview);
gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);
handlebox = gtk_handle_box_new();
gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0);
msgview->toolbar = toolbar_create(TOOLBAR_MSGVIEW, handlebox,
(gpointer)msgview);
msgview->handlebox = handlebox;
msgview->menubar = menubar;
gtk_container_add(GTK_CONTAINER(vbox),
GTK_WIDGET_PTR(msgview));
}
MessageView *messageview_create_with_new_window(MainWindow *mainwin)
{
GtkWidget *window;
MessageView *msgview;
GtkWidget *vbox;
GtkWidget *menubar;
GtkWidget *handlebox;
guint n_menu_entries;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), _("Sylpheed - Message View"));
@ -188,10 +207,6 @@ MessageView *messageview_create_with_new_window(MainWindow *mainwin)
gtk_widget_set_usize(window, prefs_common.msgwin_width,
prefs_common.msgwin_height);
vbox = gtk_vbox_new(FALSE, 0);
gtk_widget_show(vbox);
gtk_container_add(GTK_CONTAINER(window), vbox);
msgview = messageview_create(mainwin);
gtk_signal_connect(GTK_OBJECT(window), "size_allocate",
@ -204,28 +219,19 @@ MessageView *messageview_create_with_new_window(MainWindow *mainwin)
gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
GTK_SIGNAL_FUNC(focus_in), msgview);
n_menu_entries = sizeof(messageview_entries) / sizeof(messageview_entries[0]);
menubar = menubar_create(window, messageview_entries,
n_menu_entries, "<MessageView>", msgview);
gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);
messageview_add_toolbar(msgview, window);
handlebox = gtk_handle_box_new();
gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0);
messageview_toolbar_create(msgview,handlebox);
gtk_container_add(GTK_CONTAINER(vbox), GTK_WIDGET_PTR(msgview));
gtk_widget_grab_focus(msgview->textview->text);
gtk_widget_show_all(window);
msgview->new_window = TRUE;
msgview->window = window;
msgview->visible = TRUE;
msgview->menubar = menubar;
msgview->handlebox = handlebox;
toolbar_set_style(msgview->toolbar->toolbar, msgview->handlebox,
prefs_common.toolbar_style);
messageview_init(msgview);
common_toolbar_set_style(msgview, TOOLBAR_MSGVIEW);
msgview_list = g_list_append(msgview_list, msgview);
return msgview;
}
@ -581,6 +587,17 @@ static void messageview_change_view_type(MessageView *messageview,
messageview->type = type;
}
void messageview_reflect_prefs_pixmap_theme(void)
{
GList *cur;
MessageView *msgview;
for (cur = msgview_list; cur != NULL; cur = cur->next) {
msgview = (MessageView*)cur->data;
toolbar_update(TOOLBAR_MSGVIEW, msgview);
}
}
void messageview_clear(MessageView *messageview)
{
messageview_change_view_type(messageview, MVIEW_TEXT);
@ -596,6 +613,7 @@ void messageview_destroy(MessageView *messageview)
GtkWidget *imageview = GTK_WIDGET_PTR(messageview->imageview);
GtkWidget *mimeview = GTK_WIDGET_PTR(messageview->mimeview);
debug_print("destroy messageview\n");
headerview_destroy(messageview->headerview);
textview_destroy(messageview->textview);
imageview_destroy(messageview->imageview);
@ -603,8 +621,12 @@ void messageview_destroy(MessageView *messageview)
noticeview_destroy(messageview->noticeview);
toolbar_clear_list(TOOLBAR_MSGVIEW);
TOOLBAR_DESTROY_ITEMS(messageview->toolbar->item_list);
TOOLBAR_DESTROY_ACTIONS(messageview->toolbar->action_list);
if (messageview->toolbar) {
toolbar_destroy(messageview->toolbar);
g_free(messageview->toolbar);
}
msgview_list = g_list_remove(msgview_list, messageview);
g_free(messageview);
@ -817,197 +839,18 @@ static PrefsAccount *select_account_from_list(GList *ac_list)
return account_find_from_id(account_id);
}
static void messageview_toolbar_create(MessageView *messageview,
GtkWidget *container)
static void messageview_menubar_cb(gpointer data, guint action, GtkWidget *widget)
{
ToolbarItem *toolbar_item;
MessageView *msgview = (MessageView*)data;
MainWindow *mainwin = (MainWindow*)msgview->mainwin;
GtkWidget *toolbar;
GtkWidget *icon_wid = NULL;
GtkWidget *item;
GtkTooltips *toolbar_tips;
ToolbarSylpheedActions *action_item;
GSList *cur;
GSList *toolbar_list;
toolbar_tips = gtk_tooltips_new();
toolbar_read_config_file(TOOLBAR_MSGVIEW);
toolbar_list = toolbar_get_list(TOOLBAR_MSGVIEW);
messageview->toolbar = g_new0(Toolbar, 1);
toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL,
GTK_TOOLBAR_BOTH);
gtk_container_add(GTK_CONTAINER(container), toolbar);
gtk_container_set_border_width(GTK_CONTAINER(container), 2);
gtk_toolbar_set_button_relief(GTK_TOOLBAR(toolbar), GTK_RELIEF_NONE);
gtk_toolbar_set_space_style(GTK_TOOLBAR(toolbar),
GTK_TOOLBAR_SPACE_LINE);
for (cur = toolbar_list; cur != NULL; cur = cur->next) {
if (g_strcasecmp(((ToolbarItem*)cur->data)->file, SEPARATOR) == 0) {
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
continue;
}
toolbar_item = g_new0(ToolbarItem, 1);
toolbar_item->file = g_strdup(((ToolbarItem*)cur->data)->file);
toolbar_item->text = g_strdup(((ToolbarItem*)cur->data)->text);
toolbar_item->index = ((ToolbarItem*)cur->data)->index;
toolbar_item->parent = g_new0(ToolbarParent, 1);
toolbar_item->parent->data = (gpointer)messageview;
toolbar_item->parent->type = TOOLBAR_MSGVIEW;
/* collect toolbar items in list to keep track */
messageview->toolbar->item_list =
g_slist_append(messageview->toolbar->item_list,
toolbar_item);
icon_wid = stock_pixmap_widget(container, stock_pixmap_get_icon(toolbar_item->file));
item = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
toolbar_item->text,
(""),
(""),
icon_wid, toolbar_messageview_buttons_cb,
toolbar_item);
switch (toolbar_item->index) {
case A_COMPOSE_EMAIL:
messageview->toolbar->compose_mail_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
messageview->toolbar->compose_mail_btn,
_("Compose Email"), NULL);
break;
case A_REPLY_MESSAGE:
messageview->toolbar->reply_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
messageview->toolbar->reply_btn,
_("Reply to Message"), NULL);
break;
case A_REPLY_SENDER:
messageview->toolbar->replysender_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
messageview->toolbar->replysender_btn,
_("Reply to Sender"), NULL);
break;
case A_REPLY_ALL:
messageview->toolbar->replyall_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
messageview->toolbar->replyall_btn,
_("Reply to All"), NULL);
break;
case A_REPLY_ML:
messageview->toolbar->replylist_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
messageview->toolbar->replylist_btn,
_("Reply to Mailing-list"), NULL);
break;
case A_FORWARD:
messageview->toolbar->fwd_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
messageview->toolbar->fwd_btn,
_("Forward Message"), NULL);
break;
case A_DELETE:
messageview->toolbar->delete_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
messageview->toolbar->delete_btn,
_("Delete Message"), NULL);
break;
case A_GOTO_NEXT:
messageview->toolbar->next_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
messageview->toolbar->next_btn,
_("Goto Next Message"), NULL);
break;
case A_SYL_ACTIONS:
action_item = g_new0(ToolbarSylpheedActions, 1);
action_item->widget = item;
action_item->name = g_strdup(toolbar_item->text);
messageview->toolbar->action_list =
g_slist_append(messageview->toolbar->action_list,
action_item);
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
item,
action_item->name, NULL);
gtk_widget_show(item);
break;
default:
break;
}
}
messageview->toolbar->toolbar = toolbar;
gtk_widget_show_all(toolbar);
}
static void toolbar_messageview_buttons_cb(GtkWidget *widget,
ToolbarItem *item)
{
struct {
gint index;
void (*func)(GtkWidget *widget, gpointer data);
} messageview_action[] = {
{ A_COMPOSE_EMAIL, common_toolbar_compose_cb },
{ A_REPLY_MESSAGE, common_toolbar_reply_cb },
{ A_REPLY_SENDER, common_toolbar_reply_to_sender_cb },
{ A_REPLY_ALL, common_toolbar_reply_to_all_cb },
{ A_REPLY_ML, common_toolbar_reply_to_list_cb },
{ A_FORWARD, common_toolbar_forward_cb },
{ A_DELETE, common_toolbar_delete_cb },
{ A_GOTO_NEXT, common_toolbar_next_unread_cb },
{ A_SYL_ACTIONS, common_toolbar_actions_execute_cb },
};
gint num_items = sizeof(messageview_action)/sizeof(messageview_action[0]);
gint i;
for (i = 0; i < num_items; i++) {
if (messageview_action[i].index == item->index) {
messageview_action[i].func(widget, (gpointer)item->parent);
break;
}
}
}
void messageview_reply_cb(gpointer data, guint action, GtkWidget *widget)
{
MessageView *messageview = (MessageView *)data;
switch (action) {
case COMPOSE_REPLY:
common_toolbar_reply_cb(NULL,messageview);
break;
case COMPOSE_REPLY_TO_ALL:
common_toolbar_reply_to_all_cb(NULL,messageview);
break;
case COMPOSE_REPLY_TO_SENDER:
common_toolbar_reply_to_sender_cb(NULL,messageview);
break;
case COMPOSE_REPLY_TO_LIST:
common_toolbar_reply_to_list_cb(NULL,messageview);
break;
}
}
static void messageview_delete_cb(gpointer data, guint action, GtkWidget *widget)
{
MessageView *messageview = (MessageView *)data;
common_toolbar_delete_cb(NULL,messageview);
g_return_if_fail(mainwin != NULL);
reply_cb(mainwin, action, widget);
}
static void messageview_close_cb(gpointer data, guint action, GtkWidget *widget)
{
MessageView *messageview = (MessageView *)data;
gtk_widget_destroy(messageview->window);
}

View file

@ -43,7 +43,6 @@ typedef enum
struct _MessageView
{
GtkWidget *vbox;
GtkWidget *menubar;
MessageType type;
gboolean new_window;
@ -52,6 +51,7 @@ struct _MessageView
/* Toolbar handlebox */
GtkWidget *handlebox;
Toolbar *toolbar;
GtkWidget *menubar;
HeaderView *headerview;
TextView *textview;
@ -86,8 +86,8 @@ void messageview_copy_clipboard (MessageView *messageview);
void messageview_select_all (MessageView *messageview);
void messageview_set_position (MessageView *messageview,
gint pos);
void messageview_toggle_view_real(MessageView *messageview);
void messageview_toggle_view_real (MessageView *messageview);
GList *messageview_get_msgview_list (void);
gboolean messageview_search_string (MessageView *messageview,
const gchar *str,
gboolean case_sens);
@ -97,4 +97,7 @@ gboolean messageview_search_string_backward (MessageView *messageview,
gboolean messageview_is_visible (MessageView *messageview);
void messageview_add_toolbar (MessageView *msgview,
GtkWidget *vbox);
void messageview_reflect_prefs_pixmap_theme (void);
#endif /* __MESSAGEVIEW_H__ */

View file

@ -1068,7 +1068,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item)
summary_status_show(summaryview);
summary_set_menu_sensitive(summaryview);
toolbar_set_sensitive(summaryview->mainwin);
toolbar_main_set_sensitive(summaryview->mainwin);
debug_print("\n");
STATUSBAR_PUSH(summaryview->mainwin, _("Done."));
@ -1131,7 +1131,7 @@ void summary_clear_all(SummaryView *summaryview)
{
summary_clear_list(summaryview);
summary_set_menu_sensitive(summaryview);
toolbar_set_sensitive(summaryview->mainwin);
toolbar_main_set_sensitive(summaryview->mainwin);
summary_status_show(summaryview);
}
@ -2409,7 +2409,7 @@ static void summary_display_msg_full(SummaryView *summaryview,
}
summary_set_menu_sensitive(summaryview);
toolbar_set_sensitive(summaryview->mainwin);
toolbar_main_set_sensitive(summaryview->mainwin);
summary_unlock(summaryview);
}
@ -4785,7 +4785,7 @@ static void summary_selected(GtkCTree *ctree, GtkCTreeNode *row,
GTK_CLIST(ctree)->selection->next) {
summaryview->display_msg = FALSE;
summary_set_menu_sensitive(summaryview);
toolbar_set_sensitive(summaryview->mainwin);
toolbar_main_set_sensitive(summaryview->mainwin);
return;
}
@ -4829,7 +4829,7 @@ static void summary_selected(GtkCTree *ctree, GtkCTreeNode *row,
summaryview->display_msg = FALSE;
} else {
summary_set_menu_sensitive(summaryview);
toolbar_set_sensitive(summaryview->mainwin);
toolbar_main_set_sensitive(summaryview->mainwin);
}
}