From e77d9be90d86066ecf0f81b6c2cb31d634e7e01e Mon Sep 17 00:00:00 2001 From: Colin Leroy Date: Thu, 30 Oct 2008 17:46:46 +0000 Subject: [PATCH] 2008-10-30 [colin] 3.6.1cvs13 * src/mimeview.c * src/mimeview.h * src/textview.c * src/textview.h Use one UI Manager per mimeview, instead of the global one -- else user_data pointer gets broken if opening and closing another message- view, then using right-click on a mimeview's mimepart. Probably fixes bug 1711, 'Save-as attachment crashes' --- ChangeLog | 13 +++++++++++++ PATCHSETS | 1 + configure.ac | 2 +- src/mimeview.c | 38 +++++++++++++++++++++++--------------- src/mimeview.h | 2 ++ src/textview.c | 49 ++++++++++++++++++++++++++++++++----------------- src/textview.h | 1 + 7 files changed, 73 insertions(+), 33 deletions(-) diff --git a/ChangeLog b/ChangeLog index 014e1039d..be143514c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2008-10-30 [colin] 3.6.1cvs13 + + * src/mimeview.c + * src/mimeview.h + * src/textview.c + * src/textview.h + Use one UI Manager per mimeview, instead of + the global one -- else user_data pointer gets + broken if opening and closing another message- + view, then using right-click on a mimeview's + mimepart. Probably fixes bug 1711, 'Save-as + attachment crashes' + 2008-10-24 [paul] 3.6.1cvs12 * tools/Makefile.am diff --git a/PATCHSETS b/PATCHSETS index cb79c9f41..49f79243d 100644 --- a/PATCHSETS +++ b/PATCHSETS @@ -3594,3 +3594,4 @@ ( cvs diff -u -r 1.2.2.12 -r 1.2.2.13 tools/kdeservicemenu/README; cvs diff -u -r 1.2.2.6 -r 1.2.2.7 tools/kdeservicemenu/install.sh; ) > 3.6.1cvs10.patchset ( cvs diff -u -r 1.2.2.7 -r 1.2.2.8 tools/kdeservicemenu/install.sh; ) > 3.6.1cvs11.patchset ( cvs diff -u -r 1.25.2.27 -r 1.25.2.28 tools/Makefile.am; diff -u /dev/null tools/kdeservicemenu/claws-mail-attach-files.desktop.kde4template; cvs diff -u -r 1.2.2.8 -r 1.2.2.9 tools/kdeservicemenu/install.sh; ) > 3.6.1cvs12.patchset +( cvs diff -u -r 1.83.2.145 -r 1.83.2.146 src/mimeview.c; cvs diff -u -r 1.20.2.26 -r 1.20.2.27 src/mimeview.h; cvs diff -u -r 1.96.2.208 -r 1.96.2.209 src/textview.c; cvs diff -u -r 1.12.2.24 -r 1.12.2.25 src/textview.h; ) > 3.6.1cvs13.patchset diff --git a/configure.ac b/configure.ac index d5a7da1c8..5841a092e 100644 --- a/configure.ac +++ b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=6 MICRO_VERSION=1 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=12 +EXTRA_VERSION=13 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/mimeview.c b/src/mimeview.c index ed0d4e33d..8d54ed9fc 100644 --- a/src/mimeview.c +++ b/src/mimeview.c @@ -250,8 +250,6 @@ MimeView *mimeview_create(MainWindow *mainwin) GtkWidget *arrow; GtkWidget *scrollbutton; GtkWidget *hbox; - GtkUIManager *gui_manager = gtkut_ui_manager(); - GtkActionGroup *actions; NoticeView *siginfoview; GtkRequisition r; @@ -350,27 +348,37 @@ MimeView *mimeview_create(MainWindow *mainwin) ctree_mainbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(ctree_mainbox), scrolledwin, TRUE, TRUE, 0); - actions = cm_menu_create_action_group("MimeView", mimeview_menu_actions, + mimeview->ui_manager = gtk_ui_manager_new(); + mimeview->action_group = cm_menu_create_action_group_full(mimeview->ui_manager, + "MimeView", mimeview_menu_actions, G_N_ELEMENTS(mimeview_menu_actions), (gpointer)mimeview); - MENUITEM_ADDUI("/Menus/", "MimeView", "MimeView", GTK_UI_MANAGER_MENU); - MENUITEM_ADDUI("/Menus/MimeView/", "Open", "MimeView/Open", + MENUITEM_ADDUI_MANAGER(mimeview->ui_manager, "/", "Menus", "Menus", GTK_UI_MANAGER_MENUBAR) + MENUITEM_ADDUI_MANAGER(mimeview->ui_manager, + "/Menus/", "MimeView", "MimeView", GTK_UI_MANAGER_MENU); + MENUITEM_ADDUI_MANAGER(mimeview->ui_manager, + "/Menus/MimeView/", "Open", "MimeView/Open", GTK_UI_MANAGER_MENUITEM); #ifndef MAEMO - MENUITEM_ADDUI("/Menus/MimeView/", "OpenWith", "MimeView/OpenWith", + MENUITEM_ADDUI_MANAGER(mimeview->ui_manager, + "/Menus/MimeView/", "OpenWith", "MimeView/OpenWith", GTK_UI_MANAGER_MENUITEM); #endif - MENUITEM_ADDUI("/Menus/MimeView/", "DisplayAsText", "MimeView/DisplayAsText", + MENUITEM_ADDUI_MANAGER(mimeview->ui_manager, + "/Menus/MimeView/", "DisplayAsText", "MimeView/DisplayAsText", GTK_UI_MANAGER_MENUITEM); - MENUITEM_ADDUI("/Menus/MimeView/", "SaveAs", "MimeView/SaveAs", + MENUITEM_ADDUI_MANAGER(mimeview->ui_manager, + "/Menus/MimeView/", "SaveAs", "MimeView/SaveAs", GTK_UI_MANAGER_MENUITEM); - MENUITEM_ADDUI("/Menus/MimeView/", "SaveAll", "MimeView/SaveAll", + MENUITEM_ADDUI_MANAGER(mimeview->ui_manager, + "/Menus/MimeView/", "SaveAll", "MimeView/SaveAll", GTK_UI_MANAGER_MENUITEM); - MENUITEM_ADDUI("/Menus/MimeView/", "NextPart", "MimeView/NextPart", + MENUITEM_ADDUI_MANAGER(mimeview->ui_manager, + "/Menus/MimeView/", "NextPart", "MimeView/NextPart", GTK_UI_MANAGER_MENUITEM); popupmenu = gtk_menu_item_get_submenu(GTK_MENU_ITEM( - gtk_ui_manager_get_widget(gui_manager, "/Menus/MimeView")) ); + gtk_ui_manager_get_widget(mimeview->ui_manager, "/Menus/MimeView")) ); vbox = gtk_vbox_new(FALSE, 0); @@ -1301,15 +1309,15 @@ static gboolean part_button_pressed(MimeView *mimeview, GdkEventButton *event, if (partinfo && (partinfo->type == MIMETYPE_MESSAGE || partinfo->type == MIMETYPE_IMAGE || partinfo->type == MIMETYPE_MULTIPART)) - cm_menu_set_sensitive("MimeView/DisplayAsText", FALSE); + cm_menu_set_sensitive_full(mimeview->ui_manager, "Menus/MimeView/DisplayAsText", FALSE); else - cm_menu_set_sensitive("MimeView/DisplayAsText", TRUE); + cm_menu_set_sensitive_full(mimeview->ui_manager, "Menus/MimeView/DisplayAsText", TRUE); if (partinfo && partinfo->type == MIMETYPE_APPLICATION && !g_ascii_strcasecmp(partinfo->subtype, "octet-stream")) - cm_menu_set_sensitive("MimeView/Open", FALSE); + cm_menu_set_sensitive_full(mimeview->ui_manager, "Menus/MimeView/Open", FALSE); else - cm_menu_set_sensitive("MimeView/Open", TRUE); + cm_menu_set_sensitive_full(mimeview->ui_manager, "Menus/MimeView/Open", TRUE); g_object_set_data(G_OBJECT(mimeview->popupmenu), "pop_partinfo", partinfo); diff --git a/src/mimeview.h b/src/mimeview.h index 9b9d91f59..b4da128a6 100644 --- a/src/mimeview.h +++ b/src/mimeview.h @@ -101,6 +101,8 @@ struct _MimeView SigCheckData *check_data; #endif MimeInfo *spec_part; + GtkUIManager *ui_manager; + GtkActionGroup *action_group; }; struct _MimeViewerFactory diff --git a/src/textview.c b/src/textview.c index c6e6b4a64..463a83fb1 100644 --- a/src/textview.c +++ b/src/textview.c @@ -314,34 +314,49 @@ TextView *textview_create(void) gtk_widget_show(vbox); - textview->link_action_group = cm_menu_create_action_group("TextviewPopupLink", + textview->ui_manager = gtk_ui_manager_new(); + textview->link_action_group = cm_menu_create_action_group_full(textview->ui_manager, + "TextviewPopupLink", textview_link_popup_entries, G_N_ELEMENTS(textview_link_popup_entries), (gpointer)textview); - textview->mail_action_group = cm_menu_create_action_group("TextviewPopupMail", + textview->mail_action_group = cm_menu_create_action_group_full(textview->ui_manager, + "TextviewPopupMail", textview_mail_popup_entries, G_N_ELEMENTS(textview_mail_popup_entries), (gpointer)textview); - textview->file_action_group = cm_menu_create_action_group("TextviewPopupFile", + textview->file_action_group = cm_menu_create_action_group_full(textview->ui_manager, + "TextviewPopupFile", textview_file_popup_entries, G_N_ELEMENTS(textview_file_popup_entries), (gpointer)textview); - MENUITEM_ADDUI("/Menus", "TextviewPopupLink", "TextviewPopupLink", GTK_UI_MANAGER_MENU) - MENUITEM_ADDUI("/Menus", "TextviewPopupMail", "TextviewPopupMail", GTK_UI_MANAGER_MENU) - MENUITEM_ADDUI("/Menus", "TextviewPopupFile", "TextviewPopupFile", GTK_UI_MANAGER_MENU) - - MENUITEM_ADDUI("/Menus/TextviewPopupLink", "Open", "TextviewPopupLink/Open", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI("/Menus/TextviewPopupLink", "Copy", "TextviewPopupLink/Copy", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI("/Menus/TextviewPopupMail", "Compose", "TextviewPopupMail/Compose", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI("/Menus/TextviewPopupMail", "AddAB", "TextviewPopupMail/AddAB", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI("/Menus/TextviewPopupMail", "Copy", "TextviewPopupMail/Copy", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI("/Menus/TextviewPopupFile", "Open", "TextviewPopupFile/Open", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI("/Menus/TextviewPopupFile", "Save", "TextviewPopupFile/Save", GTK_UI_MANAGER_MENUITEM) + MENUITEM_ADDUI_MANAGER(textview->ui_manager, "/", "Menus", "Menus", GTK_UI_MANAGER_MENUBAR) + MENUITEM_ADDUI_MANAGER(textview->ui_manager, + "/Menus", "TextviewPopupLink", "TextviewPopupLink", GTK_UI_MANAGER_MENU) + MENUITEM_ADDUI_MANAGER(textview->ui_manager, + "/Menus", "TextviewPopupMail", "TextviewPopupMail", GTK_UI_MANAGER_MENU) + MENUITEM_ADDUI_MANAGER(textview->ui_manager, + "/Menus", "TextviewPopupFile", "TextviewPopupFile", GTK_UI_MANAGER_MENU) + + MENUITEM_ADDUI_MANAGER(textview->ui_manager, + "/Menus/TextviewPopupLink", "Open", "TextviewPopupLink/Open", GTK_UI_MANAGER_MENUITEM) + MENUITEM_ADDUI_MANAGER(textview->ui_manager, + "/Menus/TextviewPopupLink", "Copy", "TextviewPopupLink/Copy", GTK_UI_MANAGER_MENUITEM) + MENUITEM_ADDUI_MANAGER(textview->ui_manager, + "/Menus/TextviewPopupMail", "Compose", "TextviewPopupMail/Compose", GTK_UI_MANAGER_MENUITEM) + MENUITEM_ADDUI_MANAGER(textview->ui_manager, + "/Menus/TextviewPopupMail", "AddAB", "TextviewPopupMail/AddAB", GTK_UI_MANAGER_MENUITEM) + MENUITEM_ADDUI_MANAGER(textview->ui_manager, + "/Menus/TextviewPopupMail", "Copy", "TextviewPopupMail/Copy", GTK_UI_MANAGER_MENUITEM) + MENUITEM_ADDUI_MANAGER(textview->ui_manager, + "/Menus/TextviewPopupFile", "Open", "TextviewPopupFile/Open", GTK_UI_MANAGER_MENUITEM) + MENUITEM_ADDUI_MANAGER(textview->ui_manager, + "/Menus/TextviewPopupFile", "Save", "TextviewPopupFile/Save", GTK_UI_MANAGER_MENUITEM) textview->link_popup_menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM( - gtk_ui_manager_get_widget(gtkut_ui_manager(), "/Menus/TextviewPopupLink")) ); + gtk_ui_manager_get_widget(textview->ui_manager, "/Menus/TextviewPopupLink")) ); textview->mail_popup_menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM( - gtk_ui_manager_get_widget(gtkut_ui_manager(), "/Menus/TextviewPopupMail")) ); + gtk_ui_manager_get_widget(textview->ui_manager, "/Menus/TextviewPopupMail")) ); textview->file_popup_menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM( - gtk_ui_manager_get_widget(gtkut_ui_manager(), "/Menus/TextviewPopupFile")) ); + gtk_ui_manager_get_widget(textview->ui_manager, "/Menus/TextviewPopupFile")) ); textview->vbox = vbox; textview->scrolledwin = scrolledwin; diff --git a/src/textview.h b/src/textview.h index fb06b2088..9778dca6c 100644 --- a/src/textview.h +++ b/src/textview.h @@ -56,6 +56,7 @@ struct _TextView GtkWidget *scrolledwin; GtkWidget *text; + GtkUIManager *ui_manager; GtkActionGroup *link_action_group; GtkWidget *link_popup_menu; GtkActionGroup *mail_action_group; -- 2.25.1