From d01351502311c061d2747f32c4b7797b53144987 Mon Sep 17 00:00:00 2001 From: Thorsten Maerz Date: Sun, 5 Oct 2003 10:10:30 +0000 Subject: [PATCH 1/1] inital gtk2 patch --- ChangeLog-gtk2 | 130 +++ ChangeLog-gtk2.jp | 126 +++ Makefile.am | 6 +- TODO-gtk2 | 23 + TODO-gtk2.jp | 22 + autogen.sh | 4 + configure.ac | 71 +- po/Makefile.in.in | 406 +++----- src/Makefile.am | 18 +- src/account.c | 57 +- src/action.c | 167 ++- src/addr_compl.c | 135 ++- src/addressadd.c | 37 +- src/addressbook.c | 165 +-- src/addrgather.c | 2 +- src/alertpanel.c | 74 +- src/codeconv.c | 56 +- src/codeconv.h | 1 + src/common/defs.h | 3 +- src/common/intl.h | 8 + src/common/socket.c | 42 +- src/common/sylpheed.c | 3 + src/common/template.c | 114 +- src/common/utils.c | 52 +- src/common/utils.h | 22 +- src/common/xml.c | 59 +- src/compose.c | 1433 ++++++++++++++++---------- src/compose.h | 2 + src/editaddress.c | 87 +- src/editbook.c | 39 +- src/editgroup.c | 53 +- src/editjpilot.c | 45 +- src/editldap.c | 55 +- src/editldap_basedn.c | 36 +- src/editvcard.c | 45 +- src/exphtmldlg.c | 4 +- src/expldifdlg.c | 4 +- src/export.c | 67 +- src/folder.h | 10 +- src/foldersel.c | 37 +- src/folderview.c | 195 ++-- src/grouplistdialog.c | 77 +- src/gtk/Makefile.am | 15 +- src/gtk/about.c | 52 +- src/gtk/colorlabel.c | 32 +- src/gtk/colorlabel.h | 3 +- src/gtk/description_window.c | 2 +- src/gtk/filesel.c | 36 +- src/gtk/gtksctree.c | 155 +-- src/gtk/gtksctree.h | 2 +- src/gtk/gtkshruler.c | 40 +- src/gtk/gtkshruler.h | 2 +- src/gtk/gtkutils.c | 291 ++++-- src/gtk/gtkutils.h | 32 +- src/gtk/manage_window.h | 16 +- src/gtk/menu.c | 74 +- src/gtk/menu.h | 10 +- src/gtk/pluginwindow.c | 22 +- src/gtk/sylpheed-marshal.list | 2 + src/headerview.c | 46 +- src/imap.c | 38 +- src/import.c | 70 +- src/importldif.c | 84 +- src/importmutt.c | 4 +- src/importpine.c | 4 +- src/inc.c | 11 +- src/inputdialog.c | 36 +- src/jpilot.c | 2 +- src/logwindow.c | 111 +- src/main.c | 4 +- src/mainwindow.c | 135 +-- src/matcher.h | 2 +- src/matcher_parser.h | 10 +- src/matcher_parser_parse.y | 12 +- src/mbox.h | 4 + src/message_search.c | 47 +- src/messageview.c | 52 +- src/mh.c | 84 +- src/mimeview.c | 76 +- src/mutt.c | 2 +- src/passphrase.c | 53 +- src/pine.c | 2 +- src/plugins/image_viewer/Makefile.am | 2 - src/plugins/image_viewer/viewer.c | 7 +- src/prefs_account.c | 174 ++-- src/prefs_actions.c | 104 +- src/prefs_common.c | 894 ++++++++-------- src/prefs_common.h | 9 + src/prefs_customheader.c | 71 +- src/prefs_display_header.c | 79 +- src/prefs_filtering.c | 10 +- src/prefs_filtering_action.c | 4 +- src/prefs_folder_item.c | 10 +- src/prefs_gtk.c | 97 +- src/prefs_matcher.c | 8 +- src/prefs_scoring.c | 16 +- src/prefs_summary_column.c | 59 +- src/prefs_template.c | 83 +- src/prefs_toolbar.c | 4 +- src/procheader.c | 17 + src/procmime.c | 11 +- src/procmsg.h | 1 + src/progressdialog.c | 6 +- src/select-keys.c | 45 +- src/sigstatus.c | 19 +- src/sourcewindow.c | 61 +- src/stock_pixmap.c | 4 +- src/summary_search.c | 114 +- src/summaryview.c | 297 +++--- src/textview.c | 851 ++++++++------- src/textview.h | 9 - src/toolbar.c | 12 +- src/undo.c | 210 ++-- src/undo.h | 6 +- src/unmime.c | 2 +- src/vcard.c | 2 +- 116 files changed, 5284 insertions(+), 3681 deletions(-) create mode 100644 ChangeLog-gtk2 create mode 100644 ChangeLog-gtk2.jp create mode 100644 TODO-gtk2 create mode 100644 TODO-gtk2.jp create mode 100644 src/gtk/sylpheed-marshal.list diff --git a/ChangeLog-gtk2 b/ChangeLog-gtk2 new file mode 100644 index 000000000..d01a8644e --- /dev/null +++ b/ChangeLog-gtk2 @@ -0,0 +1,130 @@ +2003-09-14 Takuro Ashie + + * Enabled to compile on sylpheed-claws. + (tray-icon plugin still cannot compile yet.) + +2003-09-06 Takuro Ashie + + * Updated to 0.9.5. + +2003-08-02 Takuro Ashie + + * Updated to 0.9.4. + * Ported monitoring SSL mechanism to GSource of GLib2 + (I don't confirm it) + * Added _gtk2 suffix to key name of font preference to avoid + ovverwriting preference of Gtk+-1.2 version. + +2003-06-09 Takuro Ashie + + * Updated to 0.9.2. + +2003-05-30 Takuro Ashie + + * Updated to 0.9.1. + * Translate po files into UTF-8 when execute autogen.sh. + +2003-05-28 Takuro Ashie + + * Updated to 0.9.0. + +2003-04-29 Takuro Ashie + + * Plugged GError related memory leaks. + +2003-04-28 Takuro Ashie + + * Changed default size of fonts. + * Enabled to set titile font size of warning dialog. + +2003-04-23 Takuro Ashie + + * Embed a sylpheed icon into executable binary on Windows. + +2003-04-21 Takuro Ashie + + * I forgot to traslate character set of element string in src/xml.c. + +2003-04-18 Takuro Ashie + + * Fixed detecting bind_textdomain_codeset in configure.in. + * The bug in which "Example" of "Date fromat" preference isn't displayed + correctly has been fixed. + +2003-04-04 Takuro Ashie + + * Added bind_textdomain_codeset into AC_CHECK_FUNCS. + Replaced AM_GLIB_GNU_GETTEXT to AM_GNU_GETTEXT. + glib-gettextize + Removed intl directory. + Translated po files into UTF-8. + (Thanks! Ryuji Abe) + +2003-03-28 Takuro Ashie + + * The bug which doesn't unscape string in xml.c has been fixed. + +2003-03-27 Takuro Ashie + + * The bug which is failed to translate encoding of file name thorough + file dialog has been fixed. + +2003-03-25 Takuro Ashie + + * Modified to translate file names which is used in inporting/expoting + mbox feature and "Save as" feature into locale encoding. + * Translate file names into locale encoding when "Attache file" and + "Insert file". + * Force set G_BROKEN_FILENAMES environment variable. + * Other minor fixes. + +2003-03-17 Takuro Ashie + + * Modified to treat MH folder's name as locale encoding. + +2003-03-16 Takuro Ashie + + * The bug which clash on switching candidates of auto completion of + addresses, cannot use auto completion in Japanesse is fixed + (Thanks! Tokunaga-san)¡¥ + +2003-03-14 Takuro Ashie + + * The bug which cannot switch key accelerator preference has been fixed + (Thanks! smbd-san)¡¥ + +2003-03-14 Takuro Ashie + + * version 0.8.11-gtk2-20030314 + +2003-03-14 Takuro Ashie + + * The bug in which character set conversion of filtering messages has + been fixed.(Thanks! COCOA-san). + +2003-03-13 Takuro Ashie + + * Revived "Leave space on head" preference in "Message" category. + * A bug which clash when put the cursor to end of buffer and execute + "Wrap current paragraph" was fixed.(Thanks! Tokunaga-san) + +2003-03-12 Takuro Ashie + + * version 0.8.11-gtk2-20030312 + +2003-03-12 Takuro Ashie + + * Fixed position of switching account popup (Thanks! Ikezoe-san)¡¥ + * Modified to use Pango's API directly for font preference. + * Integrated GtkTextView of textview to one widget. + * Set fonts of header title in textview by "header_title" tag. + * Removed some deprecated codes. + +2003-03-11 Takuro Ashie + + * Updated to 0.8.11. + * Merged cygwin patch(Thanks! Sakai-san). + +2003-03-09 Takuro Ashie + + * version 0.8.10-gtk2-20030309 diff --git a/ChangeLog-gtk2.jp b/ChangeLog-gtk2.jp new file mode 100644 index 000000000..5e33ff699 --- /dev/null +++ b/ChangeLog-gtk2.jp @@ -0,0 +1,126 @@ +2003-09-14 Takuro Ashie + + * sylpheed-claws¤Ç¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿ + (¥È¥ì¥¤¥¢¥¤¥³¥ó¥×¥é¥°¥¤¥ó¤Ï¤Þ¤À¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤Ê¤¤) + +2003-09-06 Takuro Ashie + + * 0.9.5¤ËÄɽ¾ + +2003-08-02 Takuro Ashie + + * 0.9.4¤ËÄɽ¾ + * SSL´Æ»ëµ¡¹½¤òGLib2¤ÎGSource¤ËÂбþ¤µ¤»¤¿(Æ°ºî̤³Îǧ) + * ¥Õ¥©¥ó¥ÈÀßÄê¤Î¥­¡¼Ì¾¤Ë_gtk2¥µ¥Õ¥£¥Ã¥¯¥¹¤ò¤Ä¤±¡¤Gtk+-1.2¥Ð¡¼¥¸¥ç¥ó¤È + ¶¦Â¸¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿ + +2003-06-09 Takuro Ashie + + * 0.9.2¤ËÄɽ¾ + +2003-05-30 Takuro Ashie + + * 0.9.1¤ËÄɽ¾ + * po¥Õ¥¡¥¤¥ë¤Ïautogen.sh¤ÇÊÑ´¹¤¹¤ë¤è¤¦¤Ë¤·¤¿ + +2003-05-28 Takuro Ashie + + * 0.9.0¤ËÄɽ¾ + +2003-04-29 Takuro Ashie + + * GError¤Î¥á¥â¥ê¥ê¡¼¥¯¤ò½¤Àµ + +2003-04-28 Takuro Ashie + + * ¥Õ¥©¥ó¥È¤Î¥Ç¥Õ¥©¥ë¥È¥µ¥¤¥º¤òÊѹ¹ + * ·Ù¹ð¥À¥¤¥¢¥í¥°¤Î¥¿¥¤¥È¥ë¥Õ¥©¥ó¥È¤òÀßÄê¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿ + +2003-04-23 Takuro Ashie + + * Windows¤Ç¤Î¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¡¤¼Â¹Ô¥Õ¥¡¥¤¥ë¤Ë¥¢¥¤¥³¥ó¤òËä¤á¹þ¤à¤è¤¦¤Ë¤·¤¿ + +2003-04-21 Takuro Ashie + + * src/xml.cÆâ¤Ç¥¨¥ì¥á¥ó¥È¤Îʸ»ú¥³¡¼¥ÉÊÑ´¹¤¬È´¤±¤Æ¤¤¤¿ÌäÂê¤ò½¤Àµ + +2003-04-18 Takuro Ashie + + * bind_textdomain_codeset¤Î¸¡½Ð¤ò½¤Àµ + * ÆüÉդνñ¼°ÀßÄê¤Îɽ¼¨Î㤬Àµ¤·¤¯É½¼¨¤µ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¤Î¤ò½¤Àµ + +2003-04-04 Takuro Ashie + + * AC_CHECK_FUNCS¤Ëbind_textdomain_codeset¤òÄɲà + AM_GNU_GETTEXT¤òAM_GLIB_GNU_GETTEXT¤ËÃÖ¤­´¹¤¨ + glib-gettextize + intl¥Ç¥£¥ì¥¯¥È¥ê¤òºï½ü + po¥Õ¥¡¥¤¥ë¤òUTF-8¤ËÊÑ´¹ + (Thanks! °ÂÉôεÆ󤵤ó) + +2003-03-28 Takuro Ashie + + * xml.cÆâ¤ÇunescapeÁ°¤Ëʸ»ú¥³¡¼¥ÉÊÑ´¹¤ò¹Ô¤Ã¤Æ¤¤¤¿ÌäÂê¤ò½¤Àµ + +2003-03-27 Takuro Ashie + + * ¥Õ¥¡¥¤¥ëÁªÂò¥À¥¤¥¢¥í¥°·Ðͳ¤Î½èÍý¤ÎºÝ¤Ëʸ»ú¥³¡¼¥ÉÊÑ´¹¤Ë¼ºÇÔ¤·¤Æ¤¤¤¿ÌäÂê + ¤ò½¤Àµ + +2003-03-25 Takuro Ashie + + * ¡Ömbox¥Õ¥¡¥¤¥ë¤Î¥¤¥ó¥Ý¡¼¥È/¥¨¥¯¥¹¥Ý¡¼¥È¡×µÚ¤Ó¡Ö̾Á°¤òÉÕ¤±¤ÆÊݸ¡×»þ¤Î + ¥Õ¥¡¥¤¥ë̾¤òlocale¤Îʸ»ú¥³¡¼¥É¤ËÊÑ´¹¤¹¤ë¤è¤¦¤Ë¤·¤¿¡¥ + * ¡Ö¥Õ¥¡¥¤¥ëźÉաס֥ե¡¥¤¥ëÁÞÆþ¡×»þ¤Î¥Õ¥¡¥¤¥ë̾¤òlocale¤Îʸ»ú¥³¡¼¥É¤ËÊÑ + ´¹¤¹¤ë¤è¤¦¤Ë¤·¤¿¡¥ + * ¶¯À©Åª¤Ë´Ä¶­ÊÑ¿ôG_BROKEN_FILENAMES¤ò¥»¥Ã¥È¤¹¤ë¤è¤¦¤Ë¤·¤¿¡¥ + * ¤½¤Î¾ºÙ¤«¤¤½¤Àµ + +2003-03-17 Takuro Ashie + + * MH¥Õ¥©¥ë¥À¤Î¥Ç¥£¥ì¥¯¥È¥ê̾¤òlocale¤Îʸ»ú¥³¡¼¥É¤Ç°·¤¦¤è¤¦¤Ë½¤Àµ¡¥ + +2003-03-16 Takuro Ashie + + * ¥¢¥É¥ì¥¹Êä´°»þ¤Ë¸õÊä¤òÀÚÂؤ¨¤ë¤ÈÍî¤Á¤ëÌäÂꡤµÚ¤ÓÆüËܸì¤ÇÊä´°¤Ç¤­¤Ê¤¤Ìä + Âê¤ò½¤Àµ(Thanks! ÆÁ±Ê¤µ¤ó)¡¥ + +2003-03-14 Takuro Ashie + + * ¥­¡¼¥¢¥¯¥»¥é¥ì¡¼¥¿¤ÎÀßÄê¤òÀÚÂؤ¨¤é¤ì¤Ê¤¤ÌäÂê¤ò½¤Àµ(Thanks! smbd¤µ¤ó)¡¥ + +2003-03-14 Takuro Ashie + + * version 0.8.11-gtk2-20030314 + +2003-03-14 Takuro Ashie + + * ¿¶¤êʬ¤±ÀßÄê¤Îʸ»ú¥³¡¼¥ÉÊÑ´¹¤¬²õ¤ì¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ(Thanks! COCOA¤µ¤ó)¡¥ + +2003-03-13 Takuro Ashie + + * ¹Ô´Ö¤ª¤è¤Ó¹ÔƬ¤Î¶õÇò¤ÎÀßÄê¤òÉü¸µ¡¥ + * ¥«¡¼¥½¥ë¤òʸËö¤ËÃÖ¤¤¤¿¾õÂ֤ǡָ½ºß¤ÎÃÊÍî¤òÀ°·Á¤¹¤ë¡×¤ò¼Â¹Ô¤¹¤ë¤ÈÍî¤Á¤ë + ÌäÂê¤ò½¤Àµ(Thanks! ÆÁ±Ê¤µ¤ó)¡¥ + +2003-03-12 Takuro Ashie + + * version 0.8.11-gtk2-20030312 + +2003-03-12 Takuro Ashie + + * ¥¢¥«¥¦¥ó¥ÈÀÚÂؤ¨¥Ü¥¿¥ó¤Î¥á¥Ë¥å¡¼½Ð¸½°ÌÃÖ¤ò½¤Àµ(Thanks! ÃÓź¤µ¤ó)¡¥ + * ¥Õ¥©¥ó¥ÈÀßÄêÍѤΥ³¡¼¥É¤òPango¤ÎAPI¤òľÀÜ»ÈÍѤ¹¤ë¤è¤¦¤ËÊѹ¹¡¥ + * textview¤ÎGtkTextView¥¦¥£¥¸¥§¥Ã¥È¤ò°ì¤Ä¤ËÅý¹ç¡¥ + * textview¤Î¥Ø¥Ã¥À¥¿¥¤¥È¥ë¤Î¥Õ¥©¥ó¥È¤ò¡Öheader_title¡×¥¿¥°¤ÇÀßÄꤹ¤ë¤è¤¦ + ¤Ë¤·¤¿¡¥ + * Deprecated¤Ê¥³¡¼¥É¤òÀ°Íý¡¥ + +2003-03-11 Takuro Ashie + + * ¥Ù¡¼¥¹¤ò0.8.11¤Ë¹¹¿·¡¥ + * cygwin¥Ñ¥Ã¥Á¤ò¥Þ¡¼¥¸(Thanks! ¼ò°æ¤µ¤ó)¡¥ + +2003-03-09 Takuro Ashie + + * version 0.8.10-gtk2-20030309 diff --git a/Makefile.am b/Makefile.am index 945e0e191..97c77bd1d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,8 +1,10 @@ -SUBDIRS = ac po src man manual faq tools config intl +SUBDIRS = ac po src man manual faq tools config EXTRA_DIST = \ ChangeLog.claws \ ChangeLog.jp \ + ChangeLog-gtk2 \ + ChangeLog-gtk2.jp \ README.claws \ README.jp \ sylpheed-128x128.png \ @@ -15,6 +17,8 @@ EXTRA_DIST = \ TODO \ TODO.claws \ TODO.jp \ + TODO-gtk2 \ + TODO-gtk2.jp \ autogen.sh if SYLPHEED_GNOME diff --git a/TODO-gtk2 b/TODO-gtk2 new file mode 100644 index 000000000..7bfea4a26 --- /dev/null +++ b/TODO-gtk2 @@ -0,0 +1,23 @@ +Bugfixes + * SSL support seems broken. + * Chracter set conversion + * Modify codeconv.c for UTF-8 + * Should we prepare functions for locale <-> UTF-8? + (Use conv_localetodisp()?) + * Character set of file name. + (Should we use g_filename_from_locale() and g_filename_to_locale()?) + * Character set conversion for "Action" feature. + * Character set conversion for jpilot + * vCard is ok?(<- I don't understand about it) + * URI of uri_list_extract_filenames() + * Host name. + * Should we add a argument for length of string? + * Revive ruler of compose(adjust start point) + * Case sensitive searching feature in message. + * Remove all deprecated codes (About 90% completed except CList/CTree) + * Verify all #warning FIXME_GTK2 + * Remove all warnings of Gtk+ + * Fix other unknown bugs. + +Features + * I want a dialog for character set conversion when invoke external editor. diff --git a/TODO-gtk2.jp b/TODO-gtk2.jp new file mode 100644 index 000000000..8da3d0c1c --- /dev/null +++ b/TODO-gtk2.jp @@ -0,0 +1,22 @@ +¥Ð¥°¥Õ¥£¥Ã¥¯¥¹ + * SSL¥µ¥Ý¡¼¥È + * ʸ»ú¥³¡¼¥ÉÊÑ´¹¤Î¥³¡¼¥É¸«Ä¾¤· + * codeconv.c¤òUTF-8¤ò¥á¥¤¥ó¤Ë½¤Àµ? + * locale <-> UTF-8 ¤ÏŬÅö¤Ê´Ø¿ô¤òÍÑ°Õ¤¹¤Ù¤­?(conv_localetodisp()¤ò»ÈÍÑ?) + * ¥Õ¥¡¥¤¥ë̾¤Îʸ»ú¥³¡¼¥É¤Î°·¤¤ + (g_filename_from_locale()µÚ¤Óg_filename_to_locale()¤ò»ÈÍѤ¹¤Ù¤­?) + * ¡Ö¥¢¥¯¥·¥ç¥ó¡×Åù¤Ç¥³¥Þ¥ó¥É¤ËÅϤ¹Ê¸»úÎó¤Îʸ»ú¥³¡¼¥ÉÊÑ´¹ + * jpilot¤Îʸ»ú¥³¡¼¥ÉÊÑ´¹ + * vCard¤ÏÂç¾æÉ×?(<-Á´Á³Ê¬¤«¤Ã¤Æ¤Ê¤¤) + * uri_list_extract_filenames()¤Ç¤ÎURI¤Î°·¤¤ + * ¥Û¥¹¥È̾¤Î°·¤¤(»ö¼Â¾å¡¤Æ°ºî¤Ë¤Ï»Ù¾ã̵¤¤?) + * °ú¿ô¤Ëʸ»úÎóŤò²Ã¤¨¤ë¤Ù¤­? + * Compose¤Î¥ë¡¼¥é¤òÉü¸µ(»ÏÅÀ¤ÎÄ´À°) + * ¥á¥Ã¥»¡¼¥¸Æ⸡º÷¤Ç¤ÎÂçʸ»ú/¾®Ê¸»ú¤Î¶èÊÌ + * Deprecated¤Ê¥³¡¼¥É¤ò°ìÁÝ(CList/CTree°Ê³°¤Ï9³äÊý½ªÎ») + * Á´¤Æ¤Î #warning FIXME_GTK2 ¤ò¸¡¾Ú/Áݽü + * Gtk+¤¬ÅǤ¯Á´¤Æ¤ÎWarning¤òËõ»¦ + * ¤½¤Î¾Á´¤Æ¤Î̤ÃΤΥХ°¤Î½¤Àµ + +µ¡Ç½³ÈÄ¥ + * ³°Éô¥¨¥Ç¥£¥¿Åù¤ËÅϤ¹ºÝ¤Îʸ»ú¥³¡¼¥É»ØÄêÍѤΥÀ¥¤¥¢¥í¥°¤¬¤¢¤ë¤ÈÎɤ¤¤«¤â diff --git a/autogen.sh b/autogen.sh index 517d398b4..4f75a6da0 100644 --- a/autogen.sh +++ b/autogen.sh @@ -1,5 +1,9 @@ #!/bin/sh +cd po +/bin/sh poconv.sh +cd .. + aclocal -I ac \ && libtoolize --force --copy \ && autoheader \ diff --git a/configure.ac b/configure.ac index f3f4621f8..78ae27fd3 100644 --- a/configure.ac +++ b/configure.ac @@ -79,18 +79,58 @@ AC_PROG_YACC AM_PROG_LIBTOOL SYLPHEED_ACLOCAL_INCLUDE(ac) + +dnl ****************************** +dnl Checks for host +dnl ****************************** +AC_CANONICAL_HOST + +dnl Copied from the official gtk+-2 configure.in +AC_MSG_CHECKING([for some Win32 platform]) +case "$host" in + *-*-mingw*|*-*-cygwin*) + platform_win32=yes + LDFLAGS="$LDFLAGS -mwindows" + ;; + *) + platform_win32=no + ;; +esac +AC_MSG_RESULT([$platform_win32]) +AM_CONDITIONAL(PLATFORM_WIN32, test x"$platform_win32" = x"yes") + +if test x"$platform_win32" = x"yes"; then + WINDRES=windres + AC_SUBST(WINDRES) +fi + +AC_MSG_CHECKING([for native Win32]) +case "$host" in + *-*-mingw*) + os_win32=yes + ;; + *) + os_win32=no + ;; +esac +AC_MSG_RESULT([$os_win32]) +AM_CONDITIONAL(OS_WIN32, test x"$os_win32" = x"yes") case "$target" in *-darwin*) CFLAGS="$CFLAGS -traditional-cpp -fno-common" ;; esac - + +dnl Checks for iconv AM_ICONV dnl for gettext ALL_LINGUAS="bg cs de el en_GB es fr hr hu it ja ko nl pl pt_BR ru sk sr sv zh_TW.Big5" -AM_GNU_GETTEXT([use-libtool]) +GETTEXT_PACKAGE=sylpheed +AC_SUBST(GETTEXT_PACKAGE) +AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Define text domain.]) +AM_GLIB_GNU_GETTEXT dnl AC_CHECK_FUNC(gettext, AC_CHECK_LIB(intl, gettext)) localedir='${prefix}/${DATADIRNAME}/locale' AC_SUBST(localedir) @@ -187,9 +227,15 @@ dnl ** common code ** dnl ***************** dnl check for glib -AM_PATH_GLIB(1.2.6,, +AM_PATH_GLIB_2_0(2.0.0,, AC_MSG_ERROR(Test for GLIB failed. See the file 'INSTALL' for help.), - gthread) + gmodule gobject gthread) + +dnl Check for bind_textdomain_codeset, including -lintl if GLib brings it in. +syl_save_LIBS=$LIBS +LIBS="$LIBS $GTK_LIBS" +AC_CHECK_FUNCS(bind_textdomain_codeset) +LIBS=$syl_save_LIBS dnl check for IPv6 option AC_ARG_ENABLE(ipv6, @@ -240,7 +286,7 @@ dnl ** GTK user interface ** dnl ************************ dnl Checks for GTK -AM_PATH_GTK(1.2.6,, +AM_PATH_GTK_2_0(2.0.0,, AC_MSG_ERROR(Test for GTK failed. See the file 'INSTALL' for help.)) dnl check if gdk / gtk was compiled with USE_XIM @@ -433,20 +479,14 @@ if test x"$ac_cv_enable_image_viewer_plugin" = xyes; then [ac_cv_enable_imlib=$enableval], [ac_cv_enable_imlib=yes]) if test "$ac_cv_enable_gdk_pixbuf" = yes; then - AM_PATH_GDK_PIXBUF(0.8.0, - [AC_DEFINE(HAVE_GDK_PIXBUF, 1, Define if you use gdk-pixbuf to support image viewer) - ac_cv_enable_imlib=no], [ac_cv_enable_gdk_pixbuf=no]) - fi - if test "$ac_cv_enable_imlib" = yes; then - AM_PATH_GDK_IMLIB(1.9, - AC_DEFINE(HAVE_GDK_IMLIB, 1, Define if you use gdk_imlib to support image viewer), - [ac_cv_enable_imlib=no]) + PKG_CHECK_MODULES(GDK_PIXBUF, \ + [ gdk-pixbuf-2.0 ], + [ AC_DEFINE(HAVE_GDK_PIXBUF, 1, Define if you use gdk-pixbuf to support image viewer) ], + [ ac_cv_enable_gdk_pixbuf=no ]) fi if test "$ac_cv_enable_gdk_pixbuf" = yes; then PLUGINS="image-viewer(gdk-pixbuf) $PLUGINS" - elif test "$ac_cv_enable_imlib" = yes; then - PLUGINS="image-viewer(gdk_imlib) $PLUGINS" else ac_cv_enable_image_viewer_plugin=no fi @@ -496,7 +536,6 @@ dnl **************************** AC_OUTPUT([ Makefile sylpheed.spec -intl/Makefile ac/Makefile po/Makefile.in src/common/version.h diff --git a/po/Makefile.in.in b/po/Makefile.in.in index 27b721aa8..435cd1828 100644 --- a/po/Makefile.in.in +++ b/po/Makefile.in.in @@ -1,13 +1,18 @@ -# Makefile for PO directory in any package using GNU gettext. -# Copyright (C) 1995-1997, 2000-2003 by Ulrich Drepper +# Makefile for program source directory in GNU NLS utilities package. +# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # -# This file can be copied and used freely without restrictions. It can -# be used in projects which are not available under the GNU General Public -# License but which still want to provide support for the GNU gettext -# functionality. -# Please note that the actual code of GNU gettext is covered by the GNU -# General Public License and is *not* in the public domain. +# This file file be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. +# +# - Modified by Owen Taylor to use GETTEXT_PACKAGE +# instead of PACKAGE and to look for po2tbl in ./ not in intl/ +# +# - Modified by jacob berkman to install +# Makefile.in.in and po2tbl.sed.in for use with glib-gettextize +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ @@ -21,333 +26,218 @@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ -localedir = $(datadir)/locale -gettextsrcdir = $(datadir)/gettext/po +libdir = @libdir@ +localedir = $(libdir)/locale +gnulocaledir = $(datadir)/locale +gettextsrcdir = $(datadir)/glib-2.0/gettext/po +subdir = po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -MKINSTALLDIRS = @MKINSTALLDIRS@ -mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) +MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@ +CC = @CC@ +GENCAT = @GENCAT@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ MSGMERGE = msgmerge -MSGMERGE_UPDATE = @MSGMERGE@ --update -MSGINIT = msginit -MSGCONV = msgconv -MSGFILTER = msgfilter +DEFS = @DEFS@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ + +INCLUDES = -I.. -I$(top_srcdir)/intl + +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) + +SOURCES = POFILES = @POFILES@ GMOFILES = @GMOFILES@ -UPDATEPOFILES = @UPDATEPOFILES@ -DUMMYPOFILES = @DUMMYPOFILES@ -DISTFILES.common = Makefile.in.in remove-potcdate.sin \ -$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) -DISTFILES = $(DISTFILES.common) Makevars POTFILES.in $(DOMAIN).pot stamp-po \ -$(POFILES) $(GMOFILES) \ -$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) +DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(GETTEXT_PACKAGE).pot \ +$(POFILES) $(GMOFILES) $(SOURCES) POTFILES = \ CATALOGS = @CATALOGS@ - -# Makevars gets inserted here. (Don't remove this line!) +CATOBJEXT = @CATOBJEXT@ +INSTOBJEXT = @INSTOBJEXT@ .SUFFIXES: -.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-update +.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat + +.c.o: + $(COMPILE) $< + +.po.pox: + $(MAKE) $(GETTEXT_PACKAGE).pot + $(MSGMERGE) $< $(srcdir)/$(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: - @echo "$(MSGFMT) -c -o $@ $<"; \ - $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ + $(MSGFMT) -o $@ $< .po.gmo: - @lang=`echo $* | sed -e 's,.*/,,'`; \ - test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ - echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ - cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ + && rm -f $$file && $(GMSGFMT) -o $$file $< -.sin.sed: - sed -e '/^#/d' $< > t-$@ - mv t-$@ $@ +.po.cat: + sed -f ../intl/po2msg.sed < $< > $*.msg \ + && rm -f $@ && $(GENCAT) $@ $*.msg all: all-@USE_NLS@ -all-yes: stamp-po +all-yes: $(CATALOGS) all-no: -# stamp-po is a timestamp denoting the last time at which the CATALOGS have -# been loosely updated. Its purpose is that when a developer or translator -# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, -# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent -# invocations of "make" will do nothing. This timestamp would not be necessary -# if updating the $(CATALOGS) would always touch them; however, the rule for -# $(POFILES) has been designed to not touch files that don't need to be -# changed. -stamp-po: $(srcdir)/$(DOMAIN).pot - test -z "$(CATALOGS)" || $(MAKE) $(CATALOGS) - @echo "touch stamp-po" - @echo timestamp > stamp-poT - @mv stamp-poT stamp-po - -# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', -# otherwise packages like GCC can not be built if only parts of the source -# have been downloaded. - -# This target rebuilds $(DOMAIN).pot; it is an expensive operation. -# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. -$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed - $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ - --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ +$(srcdir)/$(GETTEXT_PACKAGE).pot: $(POTFILES) + $(XGETTEXT) --default-domain=$(GETTEXT_PACKAGE) --directory=$(top_srcdir) \ + --add-comments --keyword=_ --keyword=N_ \ --files-from=$(srcdir)/POTFILES.in \ - --copyright-holder='$(COPYRIGHT_HOLDER)' \ - --msgid-bugs-address='$(MSGID_BUGS_ADDRESS)' - test ! -f $(DOMAIN).po || { \ - if test -f $(srcdir)/$(DOMAIN).pot; then \ - sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ - sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ - if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ - rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ - else \ - rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ - mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ - fi; \ - else \ - mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ - fi; \ - } - -# This rule has no dependencies: we don't need to update $(DOMAIN).pot at -# every "make" invocation, only create it when it is missing. -# Only "make $(DOMAIN).pot-update" or "make dist" will force an update. -$(srcdir)/$(DOMAIN).pot: - $(MAKE) $(DOMAIN).pot-update - -# This target rebuilds a PO file if $(DOMAIN).pot has changed. -# Note that a PO file is not touched if it doesn't need to be changed. -$(POFILES): $(srcdir)/$(DOMAIN).pot - @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ - test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ - echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ - cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot - + && test ! -f $(GETTEXT_PACKAGE).po \ + || ( rm -f $(srcdir)/$(GETTEXT_PACKAGE).pot \ + && mv $(GETTEXT_PACKAGE).po $(srcdir)/$(GETTEXT_PACKAGE).pot ) install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ - if test "$(PACKAGE)" = "gettext-tools"; then \ - $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ - for file in $(DISTFILES.common) Makevars.template; do \ - $(INSTALL_DATA) $(srcdir)/$$file \ - $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - for file in Makevars; do \ - rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - else \ - : ; \ - fi install-data-no: all install-data-yes: all - $(mkinstalldirs) $(DESTDIR)$(datadir) + if test -r "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \ + fi @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ - lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ - dir=$(localedir)/$$lang/LC_MESSAGES; \ - $(mkinstalldirs) $(DESTDIR)$$dir; \ - if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ - $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ - echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ - for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ - if test -n "$$lc"; then \ - if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ - link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ - mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ - mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ - (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ - for file in *; do \ - if test -f $$file; then \ - ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ - fi; \ - done); \ - rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ - else \ - if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ - :; \ - else \ - rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ - mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ - fi; \ - fi; \ - rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ - ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ - ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ - cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ - echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ + case "$$cat" in \ + *.gmo) destdir=$(gnulocaledir);; \ + *) destdir=$(localedir);; \ + esac; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \ + if test -r "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $$dir; \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \ + fi; \ + if test -r $$cat; then \ + $(INSTALL_DATA) $$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + echo "installing $$cat as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ + else \ + $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ + fi; \ + if test -r $$cat.m; then \ + $(INSTALL_DATA) $$cat.m $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $$cat.m as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ + else \ + if test -r $(srcdir)/$$cat.m ; then \ + $(INSTALL_DATA) $(srcdir)/$$cat.m \ + $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ + else \ + true; \ fi; \ - done; \ + fi; \ done - -install-strip: install - -installdirs: installdirs-exec installdirs-data -installdirs-exec: -installdirs-data: installdirs-data-@USE_NLS@ - if test "$(PACKAGE)" = "gettext-tools"; then \ - $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + if test "$(PACKAGE)" = "glib"; then \ + if test -r "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \ + fi; \ + $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ + $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ else \ : ; \ fi -installdirs-data-no: -installdirs-data-yes: - $(mkinstalldirs) $(DESTDIR)$(datadir) - @catalogs='$(CATALOGS)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ - dir=$(localedir)/$$lang/LC_MESSAGES; \ - $(mkinstalldirs) $(DESTDIR)$$dir; \ - for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ - if test -n "$$lc"; then \ - if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ - link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ - mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ - mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ - (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ - for file in *; do \ - if test -f $$file; then \ - ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ - fi; \ - done); \ - rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ - else \ - if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ - :; \ - else \ - rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ - mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ - fi; \ - fi; \ - fi; \ - done; \ - done # Define this as empty until I found a useful application. installcheck: -uninstall: uninstall-exec uninstall-data -uninstall-exec: -uninstall-data: uninstall-data-@USE_NLS@ - if test "$(PACKAGE)" = "gettext-tools"; then \ - for file in $(DISTFILES.common) Makevars.template; do \ - rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - else \ - : ; \ - fi -uninstall-data-no: -uninstall-data-yes: +uninstall: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ - lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ - for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ - rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ - done; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ done + rm -f $(DESTDIR)$(gettextsrcdir)/po-Makefile.in.in check: all -info dvi ps pdf html tags TAGS ctags CTAGS ID: +dvi info tags TAGS ID: mostlyclean: - rm -f remove-potcdate.sed - rm -f stamp-poT - rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po + rm -f core core.* *.pox $(GETTEXT_PACKAGE).po *.old.po cat-id-tbl.tmp rm -fr *.o clean: mostlyclean distclean: clean - rm -f Makefile Makefile.in POTFILES *.mo + rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." - rm -f stamp-po $(GMOFILES) - -distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) -dist distdir: - $(MAKE) update-po - @$(MAKE) dist2 -# This is a separate target because 'update-po' must be executed before. -dist2: $(DISTFILES) + rm -f $(GMOFILES) + +distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir) +dist distdir: update-po $(DISTFILES) dists="$(DISTFILES)"; \ - if test "$(PACKAGE)" = "gettext-tools"; then \ - dists="$$dists Makevars.template"; \ - fi; \ - if test -f $(srcdir)/ChangeLog; then \ - dists="$$dists ChangeLog"; \ - fi; \ - for i in 0 1 2 3 4 5 6 7 8 9; do \ - if test -f $(srcdir)/ChangeLog.$$i; then \ - dists="$$dists ChangeLog.$$i"; \ - fi; \ - done; \ - if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ - if test -f $$file; then \ - cp -p $$file $(distdir); \ - else \ - cp -p $(srcdir)/$$file $(distdir); \ - fi; \ + ln $(srcdir)/$$file $(distdir) 2> /dev/null \ + || cp -p $(srcdir)/$$file $(distdir); \ done update-po: Makefile - $(MAKE) $(DOMAIN).pot-update - test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) - $(MAKE) update-gmo - -# General rule for updating PO files. - -.nop.po-update: - @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ - if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ - tmpdir=`pwd`; \ - echo "$$lang:"; \ - test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ - echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + $(MAKE) $(GETTEXT_PACKAGE).pot cd $(srcdir); \ - if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ - if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ - rm -f $$tmpdir/$$lang.new.po; \ + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + mv $$lang.po $$lang.old.po; \ + echo "$$lang:"; \ + if $(MSGMERGE) $$lang.old.po $(GETTEXT_PACKAGE).pot -o $$lang.po; then \ + rm -f $$lang.old.po; \ else \ - if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ - :; \ - else \ - echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ - exit 1; \ - fi; \ + echo "msgmerge for $$cat failed!"; \ + rm -f $$lang.po; \ + mv $$lang.old.po $$lang.po; \ fi; \ - else \ - echo "msgmerge for $$lang.po failed!" 1>&2; \ - rm -f $$tmpdir/$$lang.new.po; \ - fi - -$(DUMMYPOFILES): - -update-gmo: Makefile $(GMOFILES) - @: + done -Makefile: Makefile.in.in $(top_builddir)/config.status @POMAKEFILEDEPS@ - cd $(top_builddir) \ +# POTFILES is created from POTFILES.in by stripping comments, empty lines +# and Intltool tags (enclosed in square brackets), and appending a full +# relative path to them +POTFILES: POTFILES.in + ( if test 'x$(srcdir)' != 'x.'; then \ + posrcprefix='$(top_srcdir)/'; \ + else \ + posrcprefix="../"; \ + fi; \ + rm -f $@-t $@ \ + && (sed -e '/^#/d' \ + -e "s/^\[.*\] +//" \ + -e '/^[ ]*$$/d' \ + -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ + | sed -e '$$s/\\$$//') > $@-t \ + && chmod a-w $@-t \ + && mv $@-t $@ ) + +Makefile: Makefile.in.in ../config.status POTFILES + cd .. \ && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ $(SHELL) ./config.status -force: - # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/src/Makefile.am b/src/Makefile.am index 5e6672421..320f1a806 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,5 +1,19 @@ SUBDIRS = common gtk plugins + +if PLATFORM_WIN32 + +SYLPHEED_RES = sylpheed.res + +sylpheed.rc: + echo "SYLPHEED ICON sylpheed.ico" > sylpheed.rc + +sylpheed.res: sylpheed.rc + $(WINDRES) $< -O coff -o $@ + +endif + + bin_PROGRAMS = sylpheed sylpheed_SOURCES = \ @@ -246,6 +260,7 @@ BUILT_SOURCES = \ quote_fmt_parse.h EXTRA_DIST = \ + sylpheed.ico \ pixmaps/address_book.xpm \ pixmaps/address_search.xpm \ pixmaps/address.xpm \ @@ -346,7 +361,8 @@ sylpheed_LDADD = \ $(GPGME_LIBS) \ $(LDAP_LIBS) \ $(OPENSSL_LIBS) \ - $(LIBICONV) + $(LIBICONV) \ + $(SYLPHEED_RES) AM_CPPFLAGS = \ -DG_LOG_DOMAIN=\"Sylpheed\" \ diff --git a/src/account.c b/src/account.c index ecc47fb83..9930980a0 100644 --- a/src/account.c +++ b/src/account.c @@ -99,7 +99,7 @@ static void account_selected (GtkCList *clist, static void account_row_moved (GtkCList *clist, gint source_row, gint dest_row); -static void account_key_pressed (GtkWidget *widget, +static gboolean account_key_pressed (GtkWidget *widget, GdkEventKey *event, gpointer data); @@ -549,15 +549,15 @@ static void account_edit_create(void) debug_print("Creating account edit window...\n"); - window = gtk_window_new (GTK_WINDOW_DIALOG); - gtk_widget_set_usize (window, 500, 320); + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request (window, 500, 320); gtk_container_set_border_width (GTK_CONTAINER (window), 8); gtk_window_set_title (GTK_WINDOW (window), _("Edit accounts")); gtk_window_set_modal (GTK_WINDOW (window), TRUE); - gtk_signal_connect (GTK_OBJECT (window), "delete_event", - GTK_SIGNAL_FUNC (account_delete_event), NULL); - gtk_signal_connect (GTK_OBJECT (window), "key_press_event", - GTK_SIGNAL_FUNC (account_key_pressed), NULL); + g_signal_connect (G_OBJECT (window), "delete_event", + G_CALLBACK (account_delete_event), NULL); + g_signal_connect (G_OBJECT (window), "key_press_event", + G_CALLBACK (account_key_pressed), NULL); MANAGE_WINDOW_SIGNALS_CONNECT (window); gtk_widget_realize(window); @@ -612,10 +612,10 @@ static void account_edit_create(void) GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist)->column[i].button, GTK_CAN_FOCUS); - gtk_signal_connect (GTK_OBJECT (clist), "select_row", - GTK_SIGNAL_FUNC (account_selected), NULL); - gtk_signal_connect_after (GTK_OBJECT (clist), "row_move", - GTK_SIGNAL_FUNC (account_row_moved), NULL); + g_signal_connect (G_OBJECT (clist), "select_row", + G_CALLBACK (account_selected), NULL); + g_signal_connect_after (G_OBJECT (clist), "row_move", + G_CALLBACK (account_row_moved), NULL); vbox2 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox2); @@ -624,32 +624,32 @@ static void account_edit_create(void) add_btn = gtk_button_new_with_label (_("Add")); gtk_widget_show (add_btn); gtk_box_pack_start (GTK_BOX (vbox2), add_btn, FALSE, FALSE, 4); - gtk_signal_connect (GTK_OBJECT(add_btn), "clicked", - GTK_SIGNAL_FUNC (account_add), NULL); + g_signal_connect (G_OBJECT(add_btn), "clicked", + G_CALLBACK (account_add), NULL); edit_btn = gtk_button_new_with_label (_("Edit")); gtk_widget_show (edit_btn); gtk_box_pack_start (GTK_BOX (vbox2), edit_btn, FALSE, FALSE, 4); - gtk_signal_connect (GTK_OBJECT(edit_btn), "clicked", - GTK_SIGNAL_FUNC (account_edit_prefs), NULL); + g_signal_connect (G_OBJECT(edit_btn), "clicked", + G_CALLBACK (account_edit_prefs), NULL); del_btn = gtk_button_new_with_label (_(" Delete ")); gtk_widget_show (del_btn); gtk_box_pack_start (GTK_BOX (vbox2), del_btn, FALSE, FALSE, 4); - gtk_signal_connect (GTK_OBJECT(del_btn), "clicked", - GTK_SIGNAL_FUNC (account_delete), NULL); + g_signal_connect (G_OBJECT(del_btn), "clicked", + G_CALLBACK (account_delete), NULL); down_btn = gtk_button_new_with_label (_("Down")); gtk_widget_show (down_btn); gtk_box_pack_end (GTK_BOX (vbox2), down_btn, FALSE, FALSE, 4); - gtk_signal_connect (GTK_OBJECT(down_btn), "clicked", - GTK_SIGNAL_FUNC (account_down), NULL); + g_signal_connect (G_OBJECT(down_btn), "clicked", + G_CALLBACK (account_down), NULL); up_btn = gtk_button_new_with_label (_("Up")); gtk_widget_show (up_btn); gtk_box_pack_end (GTK_BOX (vbox2), up_btn, FALSE, FALSE, 4); - gtk_signal_connect (GTK_OBJECT(up_btn), "clicked", - GTK_SIGNAL_FUNC (account_up), NULL); + g_signal_connect (G_OBJECT(up_btn), "clicked", + G_CALLBACK (account_up), NULL); hbox = gtk_hbox_new (FALSE, 8); gtk_widget_show (hbox); @@ -662,8 +662,8 @@ static void account_edit_create(void) default_btn = gtk_button_new_with_label (_(" Set as default account ")); gtk_widget_show (default_btn); gtk_box_pack_start (GTK_BOX (vbox2), default_btn, TRUE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT(default_btn), "clicked", - GTK_SIGNAL_FUNC (account_set_default), NULL); + g_signal_connect (G_OBJECT(default_btn), "clicked", + G_CALLBACK (account_set_default), NULL); gtkut_button_set_create(&hbbox, &close_btn, _("Close"), NULL, NULL, NULL, NULL); @@ -671,9 +671,9 @@ static void account_edit_create(void) gtk_box_pack_end (GTK_BOX (hbox), hbbox, FALSE, FALSE, 0); gtk_widget_grab_default (close_btn); - gtk_signal_connect (GTK_OBJECT (close_btn), "clicked", - GTK_SIGNAL_FUNC (account_edit_close), - NULL); + g_signal_connect (G_OBJECT (close_btn), "clicked", + G_CALLBACK (account_edit_close), + NULL); stock_pixmap_gdk(clist, STOCK_PIXMAP_MARK, &markxpm, &markxpmmask); stock_pixmap_gdk(clist, STOCK_PIXMAP_CHECKBOX_ON, @@ -853,11 +853,12 @@ static void account_row_moved(GtkCList *clist, gint source_row, gint dest_row) gtk_clist_moveto(clist, dest_row, -1, 0.5, 0.0); } -static void account_key_pressed(GtkWidget *widget, GdkEventKey *event, - gpointer data) +static gboolean account_key_pressed(GtkWidget *widget, GdkEventKey *event, + gpointer data) { if (event && event->keyval == GDK_Escape) account_edit_close(); + return FALSE; } /* set one CList row or add new row */ diff --git a/src/action.c b/src/action.c index fc5bc801a..913a06fb5 100644 --- a/src/action.c +++ b/src/action.c @@ -26,7 +26,9 @@ #include #include #include -#include +#ifdef GDK_WINDOWING_X11 +# include +#endif /* GDK_WINDOWING_X11 */ #include #include #include @@ -47,7 +49,6 @@ #include "action.h" #include "compose.h" #include "procmsg.h" -#include "gtkstext.h" #include "textview.h" typedef struct _Children Children; @@ -74,7 +75,8 @@ struct _Children gboolean output; GtkWidget *msg_text; - GdkFont *msgfont; + + gboolean is_selection; }; struct _ChildInfo @@ -115,7 +117,6 @@ static void message_actions_execute (MessageView *msgview, static gboolean execute_actions (gchar *action, GSList *msg_list, GtkWidget *text, - GdkFont *msgfont, gint body_pos, MimeInfo *partinfo); @@ -475,7 +476,7 @@ static void compose_actions_execute_cb(Compose *compose, guint action_nb, return; } - execute_actions(action, NULL, compose->text, NULL, 0, NULL); + execute_actions(action, NULL, compose->text, 0, NULL); } static void mainwin_actions_execute_cb(MainWindow *mainwin, guint action_nb, @@ -507,7 +508,6 @@ static void message_actions_execute(MessageView *msgview, guint action_nb, gchar *buf; gchar *action; GtkWidget *text = NULL; - GdkFont *msgfont = NULL; guint body_pos = 0; ActionType action_type; @@ -516,7 +516,7 @@ static void message_actions_execute(MessageView *msgview, guint action_nb, buf = (gchar *)g_slist_nth_data(prefs_common.actions_list, action_nb); g_return_if_fail(buf); - g_return_if_fail(action = strstr(buf, ": ")); + g_return_if_fail((action = strstr(buf, ": "))); /* Point to the beginning of the command-line */ action += 2; @@ -524,7 +524,6 @@ static void message_actions_execute(MessageView *msgview, guint action_nb, textview = messageview_get_current_textview(msgview); if (textview) { text = textview->text; - msgfont = textview->msgfont; body_pos = textview->body_pos; } partinfo = messageview_get_selected_mime_part(msgview); @@ -534,11 +533,11 @@ static void message_actions_execute(MessageView *msgview, guint action_nb, if (action_type & (ACTION_PIPE_OUT | ACTION_INSERT)) msgview->filtered = TRUE; - execute_actions(action, msg_list, text, msgfont, body_pos, partinfo); + execute_actions(action, msg_list, text, body_pos, partinfo); } static gboolean execute_actions(gchar *action, GSList *msg_list, - GtkWidget *text, GdkFont *msgfont, + GtkWidget *text, gint body_pos, MimeInfo *partinfo) { GSList *children_list = NULL; @@ -549,11 +548,12 @@ static gboolean execute_actions(gchar *action, GSList *msg_list, ActionType action_type; MsgInfo *msginfo; gchar *cmd; - guint start = 0, end = 0; gchar *sel_str = NULL; gchar *msg_str = NULL; gchar *user_str = NULL; gchar *user_hidden_str = NULL; + GtkTextIter start_iter, end_iter; + gboolean is_selection = FALSE; g_return_val_if_fail(action && *action, FALSE); @@ -580,32 +580,21 @@ static gboolean execute_actions(gchar *action, GSList *msg_list, } if (text) { - if (GTK_EDITABLE(text)->has_selection) { - start = GTK_EDITABLE(text)->selection_start_pos; - end = GTK_EDITABLE(text)->selection_end_pos; - if (start > end) { - guint tmp; - tmp = start; - start = end; - end = tmp; - } - - if (start == end) { - start = body_pos; - end = gtk_stext_get_length(GTK_STEXT(text)); - msg_str = gtk_editable_get_chars - (GTK_EDITABLE(text), start, end); - } else { - sel_str = gtk_editable_get_chars - (GTK_EDITABLE(text), start, end); - msg_str = g_strdup(sel_str); - } - } else { - start = body_pos; - end = gtk_stext_get_length(GTK_STEXT(text)); - msg_str = gtk_editable_get_chars(GTK_EDITABLE(text), - start, end); + GtkTextBuffer *textbuf; + + textbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + is_selection = gtk_text_buffer_get_selection_bounds(textbuf, + &start_iter, + &end_iter); + if (!is_selection) { + gtk_text_buffer_get_start_iter(textbuf, &start_iter); + gtk_text_buffer_get_end_iter(textbuf, &end_iter); } + msg_str = gtk_text_buffer_get_text(textbuf, + &start_iter, &end_iter, + FALSE); + if (is_selection) + sel_str = g_strdup (msg_str); } if (action_type & ACTION_USER_STR) { @@ -626,11 +615,10 @@ static gboolean execute_actions(gchar *action, GSList *msg_list, } } - if (action_type & ACTION_PIPE_OUT) { - gtk_stext_freeze(GTK_STEXT(text)); - gtk_stext_set_point(GTK_STEXT(text), start); - gtk_stext_forward_delete(GTK_STEXT(text), end - start); - gtk_stext_thaw(GTK_STEXT(text)); + if (text && (action_type & ACTION_PIPE_OUT)) { + GtkTextBuffer *textbuf; + textbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + gtk_text_buffer_delete(textbuf, &start_iter, &end_iter); } children = g_new0(Children, 1); @@ -638,7 +626,7 @@ static gboolean execute_actions(gchar *action, GSList *msg_list, children->action = g_strdup(action); children->action_type = action_type; children->msg_text = text; - children->msgfont = msgfont; + children->is_selection = is_selection; if ((action_type & (ACTION_USER_IN | ACTION_USER_HIDDEN_IN)) && ((action_type & ACTION_SINGLE) == 0 || msg_list_len == 1)) @@ -749,7 +737,9 @@ static ChildInfo *fork_child(gchar *cmd, const gchar *msg_str, if (setpgid(0, 0)) perror("setpgid"); +#ifdef GDK_WINDOWING_X11 close(ConnectionNumber(gdk_display)); +#endif /* GDK_WINDOWING_X11 */ gch_pid = fork(); @@ -1015,22 +1005,24 @@ static void update_io_dialog(Children *children) if (children->input_hbox) gtk_widget_set_sensitive(children->input_hbox, FALSE); gtk_widget_grab_focus(children->close_btn); - gtk_signal_connect(GTK_OBJECT(children->dialog), - "key_press_event", - GTK_SIGNAL_FUNC(io_dialog_key_pressed_cb), - children); + g_signal_connect(G_OBJECT(children->dialog), + "key_press_event", + G_CALLBACK(io_dialog_key_pressed_cb), + children); } if (children->output) { GtkWidget *text = children->text; gchar *caption; ChildInfo *child_info; + GtkTextBuffer *textbuf; + GtkTextIter iter, start_iter, end_iter; gtk_widget_show(children->scrolledwin); - gtk_text_freeze(GTK_TEXT(text)); - gtk_text_set_point(GTK_TEXT(text), 0); - gtk_text_forward_delete(GTK_TEXT(text), - gtk_text_get_length(GTK_TEXT(text))); + textbuf = gtk_text_view_get_buffer (GTK_TEXT_VIEW(text)); + gtk_text_buffer_get_start_iter (textbuf, &start_iter); + gtk_text_buffer_get_end_iter (textbuf, &end_iter); + iter = start_iter; for (cur = children->list; cur; cur = cur->next) { child_info = (ChildInfo *)cur->data; if (child_info->pid) @@ -1042,14 +1034,13 @@ static void update_io_dialog(Children *children) (_("--- Ended: %s\n"), child_info->cmd); - gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, - caption, -1); - gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, - child_info->output->str, -1); + gtk_text_buffer_insert(textbuf, &iter, + caption, -1); + gtk_text_buffer_insert(textbuf, &iter, + child_info->output->str, -1); g_free(caption); child_info->new_out = FALSE; } - gtk_text_thaw(GTK_TEXT(text)); } } @@ -1077,11 +1068,11 @@ static void create_io_dialog(Children *children) gtk_window_set_title(GTK_WINDOW(dialog), _("Action's input/output")); gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); manage_window_set_transient(GTK_WINDOW(dialog)); - gtk_signal_connect(GTK_OBJECT(dialog), "delete_event", - GTK_SIGNAL_FUNC(delete_io_dialog_cb), children); - gtk_signal_connect(GTK_OBJECT(dialog), "destroy", - GTK_SIGNAL_FUNC(hide_io_dialog_cb), - children); + g_signal_connect(G_OBJECT(dialog), "delete_event", + G_CALLBACK(delete_io_dialog_cb), children); + g_signal_connect(G_OBJECT(dialog), "destroy", + G_CALLBACK(hide_io_dialog_cb), + children); vbox = gtk_vbox_new(FALSE, 8); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), vbox); @@ -1096,14 +1087,11 @@ static void create_io_dialog(Children *children) gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0); - gtk_widget_set_usize(scrolledwin, 480, 200); + gtk_widget_set_size_request(scrolledwin, 480, 200); gtk_widget_hide(scrolledwin); - text = gtk_text_new(gtk_scrolled_window_get_hadjustment - (GTK_SCROLLED_WINDOW(scrolledwin)), - gtk_scrolled_window_get_vadjustment - (GTK_SCROLLED_WINDOW(scrolledwin))); - gtk_text_set_editable(GTK_TEXT(text), FALSE); + text = gtk_text_view_new(); + gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE); gtk_container_add(GTK_CONTAINER(scrolledwin), text); gtk_widget_show(text); @@ -1112,17 +1100,17 @@ static void create_io_dialog(Children *children) gtk_widget_show(input_hbox); entry = gtk_entry_new(); - gtk_widget_set_usize(entry, 320, -1); - gtk_signal_connect(GTK_OBJECT(entry), "activate", - GTK_SIGNAL_FUNC(send_input), children); + gtk_widget_set_size_request(entry, 320, -1); + g_signal_connect(G_OBJECT(entry), "activate", + G_CALLBACK(send_input), children); gtk_box_pack_start(GTK_BOX(input_hbox), entry, TRUE, TRUE, 0); if (children->action_type & ACTION_USER_HIDDEN_IN) gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); gtk_widget_show(entry); send_button = gtk_button_new_with_label(_(" Send ")); - gtk_signal_connect(GTK_OBJECT(send_button), "clicked", - GTK_SIGNAL_FUNC(send_input), children); + g_signal_connect(G_OBJECT(send_button), "clicked", + G_CALLBACK(send_input), children); gtk_box_pack_start(GTK_BOX(input_hbox), send_button, FALSE, FALSE, 0); gtk_widget_show(send_button); @@ -1152,10 +1140,10 @@ static void create_io_dialog(Children *children) gtkut_button_set_create(&hbox, &abort_button, _("Abort"), &close_button, _("Close"), NULL, NULL); - gtk_signal_connect(GTK_OBJECT(abort_button), "clicked", - GTK_SIGNAL_FUNC(kill_children_cb), children); - gtk_signal_connect(GTK_OBJECT(close_button), "clicked", - GTK_SIGNAL_FUNC(hide_io_dialog_cb), children); + g_signal_connect(G_OBJECT(abort_button), "clicked", + G_CALLBACK(kill_children_cb), children); + g_signal_connect(G_OBJECT(close_button), "clicked", + G_CALLBACK(hide_io_dialog_cb), children); gtk_widget_show(hbox); if (children->nb) @@ -1240,29 +1228,26 @@ static void catch_output(gpointer data, gint source, GdkInputCondition cond) if (child_info->children->action_type & (ACTION_PIPE_OUT | ACTION_INSERT) && source == child_info->chld_out) { - gboolean is_selection = FALSE; - GtkWidget *text = child_info->children->msg_text; + GtkTextView *text = GTK_TEXT_VIEW(child_info->children->msg_text); + GtkTextBuffer *textbuf = gtk_text_view_get_buffer(text); + GtkTextIter iter1, iter2; + GtkTextMark *mark; + + mark = gtk_text_buffer_get_insert(textbuf); + gtk_text_buffer_get_iter_at_mark(textbuf, &iter1, mark); + gtk_text_buffer_get_iter_at_mark(textbuf, &iter2, mark); - if (GTK_EDITABLE(text)->has_selection) - is_selection = TRUE; - gtk_stext_freeze(GTK_STEXT(text)); while (TRUE) { c = read(source, buf, sizeof(buf) - 1); if (c == 0) break; - gtk_stext_insert(GTK_STEXT(text), - child_info->children->msgfont, - NULL, NULL, buf, c); + gtk_text_buffer_insert(textbuf, &iter2, buf, c); } - if (is_selection) { - /* Using the select_region draws things. Should not. - * so we just change selection position and - * defere drawing when thawing. Hack? - */ - GTK_EDITABLE(text)->selection_end_pos = - gtk_stext_get_point(GTK_STEXT(text)); + if (child_info->children->is_selection) { + gtk_text_buffer_place_cursor(textbuf, &iter1); + gtk_text_buffer_move_mark_by_name + (textbuf, "selection_bound", &iter2); } - gtk_stext_thaw(GTK_STEXT(text)); } else { c = read(source, buf, sizeof(buf) - 1); for (i = 0; i < c; i++) diff --git a/src/addr_compl.c b/src/addr_compl.c index de9368444..cf094ffe7 100644 --- a/src/addr_compl.c +++ b/src/addr_compl.c @@ -167,7 +167,7 @@ static void add_address1(const char *str, address_entry *ae) { completion_entry *ce1; ce1 = g_new0(completion_entry, 1), - ce1->string = g_strdup(str); + ce1->string = g_utf8_strdown(str, -1); /* GCompletion list is case sensitive */ g_strdown(ce1->string); ce1->ref = ae; @@ -277,69 +277,52 @@ gint start_address_completion(void) */ static gchar *get_address_from_edit(GtkEntry *entry, gint *start_pos) { - const gchar *edit_text; + const gchar *edit_text, *p; gint cur_pos; - wchar_t *wtext; - wchar_t *wp; - wchar_t rfc_mail_sep; - wchar_t quote; - wchar_t lt; - wchar_t gt; gboolean in_quote = FALSE; gboolean in_bracket = FALSE; gchar *str; - if (mbtowc(&rfc_mail_sep, ",", 1) < 0) return NULL; - if (mbtowc("e, "\"", 1) < 0) return NULL; - if (mbtowc(<, "<", 1) < 0) return NULL; - if (mbtowc(>, ">", 1) < 0) return NULL; - edit_text = gtk_entry_get_text(entry); if (edit_text == NULL) return NULL; - wtext = strdup_mbstowcs(edit_text); - g_return_val_if_fail(wtext != NULL, NULL); - cur_pos = gtk_editable_get_position(GTK_EDITABLE(entry)); /* scan for a separator. doesn't matter if walk points at null byte. */ - for (wp = wtext + cur_pos; wp > wtext; wp--) { - if (*wp == quote) - in_quote ^= TRUE; - else if (!in_quote) { - if (!in_bracket && *wp == rfc_mail_sep) + for (p = g_utf8_offset_to_pointer(edit_text, cur_pos); + p > edit_text; + p = g_utf8_prev_char(p)) { + if (*p == '"') { + in_quote = TRUE; + } else if (!in_quote) { + if (!in_bracket && *p == ',') { break; - else if (*wp == gt) + } else if (*p == '<') in_bracket = TRUE; - else if (*wp == lt) + else if (*p == '>') in_bracket = FALSE; } } /* have something valid */ - if (wcslen(wp) == 0) { - g_free(wtext); + if (g_utf8_strlen(p, -1) == 0) return NULL; - } #define IS_VALID_CHAR(x) \ - (iswalnum(x) || (x) == quote || (x) == lt || ((x) > 0x7f)) + (isalnum(x) || (x) == '"' || (x) == '<' || (((unsigned char)(x)) > 0x7f)) /* now scan back until we hit a valid character */ - for (; *wp && !IS_VALID_CHAR(*wp); wp++) + for (; *p && !IS_VALID_CHAR(*p); p = g_utf8_next_char(p)) ; #undef IS_VALID_CHAR - if (wcslen(wp) == 0) { - g_free(wtext); + if (g_utf8_strlen(p, -1) == 0) return NULL; - } - if (start_pos) *start_pos = wp - wtext; + if (start_pos) *start_pos = g_utf8_pointer_to_offset(edit_text, p); - str = strdup_wcstombs(wp); - g_free(wtext); + str = g_strdup(p); return str; } @@ -377,13 +360,12 @@ guint complete_address(const gchar *str) g_return_val_if_fail(str != NULL, 0); - Xstrdup_a(d, str, return 0); + /* g_completion is case sensitive */ + d = g_utf8_strdown(str, -1); clear_completion_cache(); g_completion_prefix = g_strdup(str); - /* g_completion is case sensitive */ - g_strdown(d); result = g_completion_complete(g_completion, d, NULL); count = g_list_length(result); @@ -409,6 +391,9 @@ guint complete_address(const gchar *str) } g_completion_count = count; + + g_free(d); + return count; } @@ -713,14 +698,14 @@ static void addrcompl_resize_window( CompletionWindow *cw ) { gdk_window_get_geometry( cw->window->window, &x, &y, &width, &height, &depth ); gtk_widget_size_request( cw->clist, &r ); - gtk_widget_set_usize( cw->window, width, r.height ); + gtk_widget_set_size_request( cw->window, width, r.height ); gtk_widget_show_all( cw->window ); gtk_widget_size_request( cw->clist, &r ); /* Adjust window height to available screen space */ if( ( y + r.height ) > gdk_screen_height() ) { gtk_window_set_policy( GTK_WINDOW( cw->window ), TRUE, FALSE, FALSE ); - gtk_widget_set_usize( cw->window, width, gdk_screen_height() - y ); + gtk_widget_set_size_request( cw->window, width, gdk_screen_height() - y ); } } @@ -919,7 +904,7 @@ static void completion_window_apply_selection(GtkCList *clist, GtkEntry *entry) /* Move focus to next widget */ parent = GTK_WIDGET(entry)->parent; if( parent ) { - gtk_container_focus( GTK_CONTAINER(parent), GTK_DIR_TAB_FORWARD ); + gtk_widget_child_focus( parent, GTK_DIR_TAB_FORWARD ); } } @@ -933,9 +918,9 @@ void address_completion_start(GtkWidget *mainwindow) start_address_completion(); /* register focus change hook */ - gtk_signal_connect(GTK_OBJECT(mainwindow), "set_focus", - GTK_SIGNAL_FUNC(address_completion_mainwindow_set_focus), - mainwindow); + g_signal_connect(G_OBJECT(mainwindow), "set_focus", + G_CALLBACK(address_completion_mainwindow_set_focus), + mainwindow); } /** @@ -954,16 +939,15 @@ void address_completion_register_entry(GtkEntry *entry) g_return_if_fail(GTK_IS_ENTRY(entry)); /* add hooked property */ - gtk_object_set_data(GTK_OBJECT(entry), ENTRY_DATA_TAB_HOOK, entry); + g_object_set_data(G_OBJECT(entry), ENTRY_DATA_TAB_HOOK, entry); /* add keypress event */ - gtk_signal_connect_full(GTK_OBJECT(entry), "key_press_event", - GTK_SIGNAL_FUNC(address_completion_entry_key_pressed), - NULL, + g_signal_connect_closure + (GTK_OBJECT(entry), "key_press_event", + g_cclosure_new(G_CALLBACK(address_completion_entry_key_pressed), COMPLETION_UNIQUE_DATA, - NULL, - 0, - 0); /* magic */ + NULL), + FALSE); /* magic */ } /** @@ -977,17 +961,17 @@ void address_completion_unregister_entry(GtkEntry *entry) g_return_if_fail(entry != NULL); g_return_if_fail(GTK_IS_ENTRY(entry)); - entry_obj = gtk_object_get_data(GTK_OBJECT(entry), ENTRY_DATA_TAB_HOOK); + entry_obj = g_object_get_data(G_OBJECT(entry), ENTRY_DATA_TAB_HOOK); g_return_if_fail(entry_obj); g_return_if_fail(entry_obj == GTK_OBJECT(entry)); /* has the hooked property? */ - gtk_object_set_data(GTK_OBJECT(entry), ENTRY_DATA_TAB_HOOK, NULL); + g_object_set_data(G_OBJECT(entry), ENTRY_DATA_TAB_HOOK, NULL); /* remove the hook */ - gtk_signal_disconnect_by_func(GTK_OBJECT(entry), - GTK_SIGNAL_FUNC(address_completion_entry_key_pressed), - COMPLETION_UNIQUE_DATA); + g_signal_handlers_disconnect_by_func(G_OBJECT(entry), + G_CALLBACK(address_completion_entry_key_pressed), + COMPLETION_UNIQUE_DATA); } /** @@ -1008,8 +992,11 @@ static void address_completion_mainwindow_set_focus(GtkWindow *window, GtkWidget *widget, gpointer data) { - if (widget) + + if (widget && GTK_IS_ENTRY(widget) && + g_object_get_data(G_OBJECT(widget), ENTRY_DATA_TAB_HOOK)) { clear_completion_cache(); + } } /** @@ -1032,14 +1019,14 @@ static gboolean address_completion_entry_key_pressed(GtkEntry *entry, * reported by the system. */ ev->keyval = GDK_AudibleBell_Enable; ev->state &= ~GDK_SHIFT_MASK; - gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), - "key_press_event"); /* Create window */ address_completion_create_completion_window(entry); /* Start remote queries */ addrcompl_start_search(); + + return TRUE; } else { /* old behaviour */ @@ -1058,7 +1045,7 @@ static gboolean address_completion_entry_key_pressed(GtkEntry *entry, } else clear_completion_cache(); - return TRUE; + return FALSE; } /** * Initialize search term for address completion. @@ -1137,26 +1124,26 @@ static void address_completion_create_completion_window( GtkEntry *entry_ ) gdk_window_get_geometry(entry->window, &x, &y, &width, &height, &depth); gdk_window_get_deskrelative_origin (entry->window, &x, &y); y += height; - gtk_widget_set_uposition(window, x, y); + gtk_window_move(GTK_WINDOW(window), x, y); /* Resize window to fit initial (empty) address list */ gtk_widget_size_request( clist, &r ); - gtk_widget_set_usize( window, width, r.height ); + gtk_widget_set_size_request( window, width, r.height ); gtk_widget_show_all( window ); gtk_widget_size_request( clist, &r ); /* Setup handlers */ - gtk_signal_connect(GTK_OBJECT(clist), "select_row", - GTK_SIGNAL_FUNC(completion_window_select_row), - _compWindow_ ); - gtk_signal_connect(GTK_OBJECT(window), - "button-press-event", - GTK_SIGNAL_FUNC(completion_window_button_press), - _compWindow_ ); - gtk_signal_connect(GTK_OBJECT(window), - "key-press-event", - GTK_SIGNAL_FUNC(completion_window_key_press), - _compWindow_ ); + g_signal_connect(G_OBJECT(clist), "select_row", + G_CALLBACK(completion_window_select_row), + _compWindow_ ); + g_signal_connect(G_OBJECT(window), + "button-press-event", + G_CALLBACK(completion_window_button_press), + _compWindow_ ); + g_signal_connect(G_OBJECT(window), + "key-press-event", + G_CALLBACK(completion_window_key_press), + _compWindow_ ); gdk_pointer_grab(window->window, TRUE, GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK, @@ -1307,7 +1294,7 @@ static gboolean completion_window_key_press(GtkWidget *widget, /* Move focus to next widget */ if( parent ) { - gtk_container_focus( GTK_CONTAINER(parent), GTK_DIR_TAB_FORWARD ); + gtk_widget_child_focus( parent, GTK_DIR_TAB_FORWARD ); } return FALSE; } @@ -1323,7 +1310,7 @@ static gboolean completion_window_key_press(GtkWidget *widget, /* Move focus to previous widget */ if( parent ) { - gtk_container_focus( GTK_CONTAINER(parent), GTK_DIR_TAB_BACKWARD ); + gtk_widget_child_focus( parent, GTK_DIR_TAB_BACKWARD ); } return FALSE; } diff --git a/src/addressadd.c b/src/addressadd.c index 928f53349..e39012b42 100644 --- a/src/addressadd.c +++ b/src/addressadd.c @@ -104,11 +104,12 @@ static gint addressadd_delete_event( GtkWidget *widget, GdkEventAny *event, gboo return TRUE; } -static void addressadd_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { +static gboolean addressadd_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { if (event && event->keyval == GDK_Escape) { addressadd_cancelled = TRUE; gtk_main_quit(); } + return FALSE; } static void addressadd_ok( GtkWidget *widget, gboolean *cancelled ) { @@ -127,8 +128,8 @@ static void addressadd_folder_select( GtkCTree *ctree, gint row, gint column, addressadd_dlg.fiSelected = gtk_clist_get_row_data( GTK_CLIST(ctree), row ); } -static void addressadd_tree_button( GtkCTree *ctree, GdkEventButton *event, gpointer data ) { - if( ! event ) return; +static gboolean addressadd_tree_button( GtkCTree *ctree, GdkEventButton *event, gpointer data ) { + if( ! event ) return FALSE; if( event->button == 1 ) { /* Handle double click */ if( event->type == GDK_2BUTTON_PRESS ) { @@ -136,6 +137,8 @@ static void addressadd_tree_button( GtkCTree *ctree, GdkEventButton *event, gpoi gtk_main_quit(); } } + + return FALSE; } static void addressadd_create( void ) { @@ -156,16 +159,16 @@ static void addressadd_create( void ) { GtkWidget *statusbar; gint top; - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize( window, 300, 400 ); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request( window, 300, 400 ); gtk_container_set_border_width( GTK_CONTAINER(window), 0 ); gtk_window_set_title( GTK_WINDOW(window), _("Add to address book") ); gtk_window_set_position( GTK_WINDOW(window), GTK_WIN_POS_MOUSE ); gtk_window_set_modal( GTK_WINDOW(window), TRUE ); - gtk_signal_connect( GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(addressadd_delete_event), NULL ); - gtk_signal_connect( GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(addressadd_key_pressed), NULL ); + g_signal_connect( G_OBJECT(window), "delete_event", + G_CALLBACK(addressadd_delete_event), NULL ); + g_signal_connect( G_OBJECT(window), "key_press_event", + G_CALLBACK(addressadd_key_pressed), NULL ); vbox = gtk_vbox_new(FALSE, 8); gtk_container_add(GTK_CONTAINER(window), vbox); @@ -243,14 +246,14 @@ static void addressadd_create( void ) { gtk_container_set_border_width( GTK_CONTAINER(hbbox), 0 ); gtk_widget_grab_default(ok_btn); - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(addressadd_ok), NULL); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(addressadd_cancel), NULL); - gtk_signal_connect(GTK_OBJECT(tree_folder), "select_row", - GTK_SIGNAL_FUNC(addressadd_folder_select), NULL); - gtk_signal_connect(GTK_OBJECT(tree_folder), "button_press_event", - GTK_SIGNAL_FUNC(addressadd_tree_button), NULL); + g_signal_connect(G_OBJECT(ok_btn), "clicked", + G_CALLBACK(addressadd_ok), NULL); + g_signal_connect(G_OBJECT(cancel_btn), "clicked", + G_CALLBACK(addressadd_cancel), NULL); + g_signal_connect(G_OBJECT(tree_folder), "select_row", + G_CALLBACK(addressadd_folder_select), NULL); + g_signal_connect(G_OBJECT(tree_folder), "button_press_event", + G_CALLBACK(addressadd_tree_button), NULL); gtk_widget_show_all(vbox); diff --git a/src/addressbook.c b/src/addressbook.c index 6daf69040..5511c0c05 100644 --- a/src/addressbook.c +++ b/src/addressbook.c @@ -199,16 +199,16 @@ static void addressbook_entry_gotfocus (GtkWidget *widget); static void addressbook_entry_changed (GtkWidget *widget); #endif -static void addressbook_list_button_pressed (GtkWidget *widget, +static gboolean addressbook_list_button_pressed (GtkWidget *widget, GdkEventButton *event, gpointer data); -static void addressbook_list_button_released (GtkWidget *widget, +static gboolean addressbook_list_button_released(GtkWidget *widget, GdkEventButton *event, gpointer data); -static void addressbook_tree_button_pressed (GtkWidget *ctree, +static gboolean addressbook_tree_button_pressed (GtkWidget *ctree, GdkEventButton *event, gpointer data); -static void addressbook_tree_button_released (GtkWidget *ctree, +static gboolean addressbook_tree_button_released(GtkWidget *ctree, GdkEventButton *event, gpointer data); static void addressbook_popup_close (GtkMenuShell *menu_shell, @@ -295,7 +295,7 @@ static void addressbook_move_nodes_up (GtkCTree *ctree, GtkCTreeNode *node); static GtkCTreeNode *addressbook_find_group_node (GtkCTreeNode *parent, ItemGroup *group); -static void key_pressed (GtkWidget *widget, +static gboolean key_pressed (GtkWidget *widget, GdkEventKey *event, gpointer data); static gint addressbook_treenode_compare_func (GtkCList *clist, @@ -621,15 +621,15 @@ static void addressbook_create(void) window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), _("Address book")); - gtk_widget_set_usize(window, ADDRESSBOOK_WIDTH, ADDRESSBOOK_HEIGHT); + gtk_widget_set_size_request(window, ADDRESSBOOK_WIDTH, ADDRESSBOOK_HEIGHT); gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, TRUE); gtk_window_set_wmclass(GTK_WINDOW(window), "addressbook", "Sylpheed"); gtk_widget_realize(window); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(addressbook_close), NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(key_pressed), NULL); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(addressbook_close), NULL); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(key_pressed), NULL); MANAGE_WINDOW_SIGNALS_CONNECT(window); vbox = gtk_vbox_new(FALSE, 0); @@ -650,7 +650,7 @@ static void addressbook_create(void) gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ctree_swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); - gtk_widget_set_usize(ctree_swin, COL_FOLDER_WIDTH + 40, -1); + gtk_widget_set_size_request(ctree_swin, COL_FOLDER_WIDTH + 40, -1); /* Address index */ ctree = gtk_ctree_new(1, 0); @@ -664,14 +664,14 @@ static void addressbook_create(void) gtk_clist_set_compare_func(GTK_CLIST(ctree), addressbook_treenode_compare_func); - gtk_signal_connect(GTK_OBJECT(ctree), "tree_select_row", - GTK_SIGNAL_FUNC(addressbook_tree_selected), NULL); - gtk_signal_connect(GTK_OBJECT(ctree), "button_press_event", - GTK_SIGNAL_FUNC(addressbook_tree_button_pressed), - NULL); - gtk_signal_connect(GTK_OBJECT(ctree), "button_release_event", - GTK_SIGNAL_FUNC(addressbook_tree_button_released), - NULL); + g_signal_connect(G_OBJECT(ctree), "tree_select_row", + G_CALLBACK(addressbook_tree_selected), NULL); + g_signal_connect(G_OBJECT(ctree), "button_press_event", + G_CALLBACK(addressbook_tree_button_pressed), + NULL); + g_signal_connect(G_OBJECT(ctree), "button_release_event", + G_CALLBACK(addressbook_tree_button_released), + NULL); clist_vbox = gtk_vbox_new(FALSE, 4); @@ -699,22 +699,22 @@ static void addressbook_create(void) GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist)->column[i].button, GTK_CAN_FOCUS); - gtk_signal_connect(GTK_OBJECT(clist), "tree_select_row", - GTK_SIGNAL_FUNC(addressbook_list_row_selected), NULL); - gtk_signal_connect(GTK_OBJECT(clist), "tree_unselect_row", - GTK_SIGNAL_FUNC(addressbook_list_row_unselected), NULL); - gtk_signal_connect(GTK_OBJECT(clist), "button_press_event", - GTK_SIGNAL_FUNC(addressbook_list_button_pressed), - NULL); - gtk_signal_connect(GTK_OBJECT(clist), "button_release_event", - GTK_SIGNAL_FUNC(addressbook_list_button_released), - NULL); - gtk_signal_connect(GTK_OBJECT(clist), "select_row", - GTK_SIGNAL_FUNC(addressbook_list_selected), NULL); - gtk_signal_connect(GTK_OBJECT(clist), "tree_expand", - GTK_SIGNAL_FUNC(addressbook_person_expand_node), NULL ); - gtk_signal_connect(GTK_OBJECT(clist), "tree_collapse", - GTK_SIGNAL_FUNC(addressbook_person_collapse_node), NULL ); + g_signal_connect(G_OBJECT(clist), "tree_select_row", + G_CALLBACK(addressbook_list_row_selected), NULL); + g_signal_connect(G_OBJECT(clist), "tree_unselect_row", + G_CALLBACK(addressbook_list_row_unselected), NULL); + g_signal_connect(G_OBJECT(clist), "button_press_event", + G_CALLBACK(addressbook_list_button_pressed), + NULL); + g_signal_connect(G_OBJECT(clist), "button_release_event", + G_CALLBACK(addressbook_list_button_released), + NULL); + g_signal_connect(G_OBJECT(clist), "select_row", + G_CALLBACK(addressbook_list_selected), NULL); + g_signal_connect(G_OBJECT(clist), "tree_expand", + G_CALLBACK(addressbook_person_expand_node), NULL ); + g_signal_connect(G_OBJECT(clist), "tree_collapse", + G_CALLBACK(addressbook_person_collapse_node), NULL ); hbox = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(clist_vbox), hbox, FALSE, FALSE, 0); @@ -726,12 +726,12 @@ static void addressbook_create(void) gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); address_completion_register_entry(GTK_ENTRY(entry)); - gtk_signal_connect(GTK_OBJECT(entry), "focus_in_event", - GTK_SIGNAL_FUNC(addressbook_entry_gotfocus), NULL); + g_signal_connect(G_OBJECT(entry), "focus_in_event", + G_CALLBACK(addressbook_entry_gotfocus), NULL); #if 0 - gtk_signal_connect(GTK_OBJECT(entry), "changed", - GTK_SIGNAL_FUNC(addressbook_entry_changed), NULL); + g_signal_connect(G_OBJECT(entry), "changed", + G_CALLBACK(addressbook_entry_changed), NULL); #endif paned = gtk_hpaned_new(); @@ -748,7 +748,7 @@ static void addressbook_create(void) /* Button panel */ hbbox = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(hbbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbbox), 2); + gtk_box_set_spacing(GTK_BOX(hbbox), 2); gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0); del_btn = gtk_button_new_with_label(_("Delete")); @@ -761,12 +761,12 @@ static void addressbook_create(void) GTK_WIDGET_SET_FLAGS(lup_btn, GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(hbbox), lup_btn, TRUE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(del_btn), "clicked", - GTK_SIGNAL_FUNC(addressbook_del_clicked), NULL); - gtk_signal_connect(GTK_OBJECT(reg_btn), "clicked", - GTK_SIGNAL_FUNC(addressbook_reg_clicked), NULL); - gtk_signal_connect(GTK_OBJECT(lup_btn), "clicked", - GTK_SIGNAL_FUNC(addressbook_lup_clicked), NULL); + g_signal_connect(G_OBJECT(del_btn), "clicked", + G_CALLBACK(addressbook_del_clicked), NULL); + g_signal_connect(G_OBJECT(reg_btn), "clicked", + G_CALLBACK(addressbook_reg_clicked), NULL); + g_signal_connect(G_OBJECT(lup_btn), "clicked", + G_CALLBACK(addressbook_lup_clicked), NULL); to_btn = gtk_button_new_with_label (prefs_common.trans_hdr ? _("To:") : "To:"); @@ -781,15 +781,15 @@ static void addressbook_create(void) GTK_WIDGET_SET_FLAGS(bcc_btn, GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(hbbox), bcc_btn, TRUE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(to_btn), "clicked", - GTK_SIGNAL_FUNC(addressbook_to_clicked), - GINT_TO_POINTER(COMPOSE_TO)); - gtk_signal_connect(GTK_OBJECT(cc_btn), "clicked", - GTK_SIGNAL_FUNC(addressbook_to_clicked), - GINT_TO_POINTER(COMPOSE_CC)); - gtk_signal_connect(GTK_OBJECT(bcc_btn), "clicked", - GTK_SIGNAL_FUNC(addressbook_to_clicked), - GINT_TO_POINTER(COMPOSE_BCC)); + g_signal_connect(G_OBJECT(to_btn), "clicked", + G_CALLBACK(addressbook_to_clicked), + GINT_TO_POINTER(COMPOSE_TO)); + g_signal_connect(G_OBJECT(cc_btn), "clicked", + G_CALLBACK(addressbook_to_clicked), + GINT_TO_POINTER(COMPOSE_CC)); + g_signal_connect(G_OBJECT(bcc_btn), "clicked", + G_CALLBACK(addressbook_to_clicked), + GINT_TO_POINTER(COMPOSE_BCC)); /* Build icons for interface */ stock_pixmap_gdk( window, STOCK_PIXMAP_INTERFACE, @@ -830,8 +830,8 @@ static void addressbook_create(void) n_entries, "", &tree_factory, NULL); - gtk_signal_connect(GTK_OBJECT(tree_popup), "selection_done", - GTK_SIGNAL_FUNC(addressbook_popup_close), NULL); + g_signal_connect(G_OBJECT(tree_popup), "selection_done", + G_CALLBACK(addressbook_popup_close), NULL); n_entries = sizeof(addressbook_list_popup_entries) / sizeof(addressbook_list_popup_entries[0]); list_popup = menu_create_items(addressbook_list_popup_entries, @@ -1142,7 +1142,8 @@ static void addressbook_to_clicked(GtkButton *button, gpointer data) Compose *compose; AddrSelectItem *item; AddrItemObject *aio; - gchar *addr; + const gchar *addr; + gchar *tmpaddr; compose = addrbook.target_compose; if( ! compose ) return; @@ -1163,10 +1164,10 @@ static void addressbook_to_clicked(GtkButton *button, gpointer data) aio = item->addressItem; if( aio->type == ADDR_ITEM_PERSON || aio->type == ADDR_ITEM_EMAIL ) { - addr = addressbook_format_address( aio ); + tmpaddr = addressbook_format_address( aio ); compose_entry_append( - compose, addr, (ComposeEntryType) data ); - g_free( addr ); + compose, tmpaddr, (ComposeEntryType) data ); + g_free( tmpaddr ); } else if( aio->type == ADDR_ITEM_GROUP ) { ItemGroup *group = ( ItemGroup * ) aio; @@ -1174,11 +1175,11 @@ static void addressbook_to_clicked(GtkButton *button, gpointer data) while( nodeMail ) { ItemEMail *email = nodeMail->data; - addr = addressbook_format_address( + tmpaddr = addressbook_format_address( ( AddrItemObject * ) email ); compose_entry_append( - compose, addr, (ComposeEntryType) data ); - g_free( addr ); + compose, tmpaddr, (ComposeEntryType) data ); + g_free( tmpaddr ); nodeMail = g_list_next( nodeMail ); } } @@ -1798,11 +1799,11 @@ static void addressbook_entry_gotfocus( GtkWidget *widget ) { gtk_editable_select_region( GTK_EDITABLE(addrbook.entry), 0, -1 ); } -static void addressbook_list_button_pressed(GtkWidget *widget, - GdkEventButton *event, - gpointer data) +static gboolean addressbook_list_button_pressed(GtkWidget *widget, + GdkEventButton *event, + gpointer data) { - if( ! event ) return; + if( ! event ) return FALSE; addressbook_list_menu_setup(); @@ -1810,17 +1811,18 @@ static void addressbook_list_button_pressed(GtkWidget *widget, gtk_menu_popup( GTK_MENU(addrbook.list_popup), NULL, NULL, NULL, NULL, event->button, event->time ); } + return FALSE; } -static void addressbook_list_button_released(GtkWidget *widget, - GdkEventButton *event, - gpointer data) +static gboolean addressbook_list_button_released(GtkWidget *widget, + GdkEventButton *event, + gpointer data) { } -static void addressbook_tree_button_pressed(GtkWidget *ctree, - GdkEventButton *event, - gpointer data) +static gboolean addressbook_tree_button_pressed(GtkWidget *ctree, + GdkEventButton *event, + gpointer data) { GtkCList *clist = GTK_CLIST(ctree); gint row, column; @@ -1837,7 +1839,7 @@ static void addressbook_tree_button_pressed(GtkWidget *ctree, gboolean canTreePaste = FALSE; gboolean canLookup = FALSE; - if( ! event ) return; + if( ! event ) return FALSE; addressbook_menubar_set_sensitive( FALSE ); if( gtk_clist_get_selection_info( clist, event->x, event->y, &row, &column ) ) { @@ -1849,7 +1851,7 @@ static void addressbook_tree_button_pressed(GtkWidget *ctree, menu_set_insensitive_all(GTK_MENU_SHELL(addrbook.tree_popup)); gtk_widget_set_sensitive( addrbook.lup_btn, FALSE ); - if( obj == NULL ) return; + if( obj == NULL ) return FALSE; if( ! addrclip_is_empty( _clipBoard_ ) ) { canTreePaste = TRUE; @@ -1930,14 +1932,16 @@ static void addressbook_tree_button_pressed(GtkWidget *ctree, event->button, event->time); } + return FALSE; } -static void addressbook_tree_button_released(GtkWidget *ctree, - GdkEventButton *event, - gpointer data) +static gboolean addressbook_tree_button_released(GtkWidget *ctree, + GdkEventButton *event, + gpointer data) { gtk_ctree_select(GTK_CTREE(addrbook.ctree), addrbook.opened); gtkut_ctree_set_focus_row(GTK_CTREE(addrbook.ctree), addrbook.opened); + return FALSE; } static void addressbook_popup_close(GtkMenuShell *menu_shell, gpointer data) @@ -3231,10 +3235,11 @@ void addressbook_export_to_file( void ) { } } -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) { if (event && event->keyval == GDK_Escape) addressbook_close(); + return FALSE; } /* diff --git a/src/addrgather.c b/src/addrgather.c index f8cabb1d8..fa2396bf4 100644 --- a/src/addrgather.c +++ b/src/addrgather.c @@ -470,7 +470,7 @@ static void addrgather_dlg_create( void ) { GtkWidget *hbbox; GtkWidget *hsbox; - window = gtk_window_new( GTK_WINDOW_DIALOG ); + window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); gtk_widget_set_usize( window, 380, -1 ); gtk_container_set_border_width(GTK_CONTAINER(window), 0); gtk_window_set_position( GTK_WINDOW(window), GTK_WIN_POS_CENTER ); diff --git a/src/alertpanel.c b/src/alertpanel.c index 811b4014b..1387c5f9c 100644 --- a/src/alertpanel.c +++ b/src/alertpanel.c @@ -33,15 +33,14 @@ #include "inc.h" #include "log.h" #include "logwindow.h" +#include "prefs_common.h" -#define TITLE_FONT "-*-helvetica-medium-r-normal--17-*-*-*-*-*-*-*," \ - "-*-*-medium-r-normal--16-*-*-*-*-*-*-*,*" -#define MESSAGE_FONT "-*-helvetica-medium-r-normal--14-*-*-*-*-*-*-*," \ - "-*-*-medium-r-normal--14-*-*-*-*-*-*-*,*" #define ALERT_PANEL_WIDTH 380 #define TITLE_HEIGHT 72 #define MESSAGE_HEIGHT 62 +#define DEFAULT_TITLE_FONT "Helvetica 16" + static gboolean alertpanel_is_open = FALSE; static AlertValue value; @@ -63,7 +62,7 @@ static void alertpanel_button_clicked (GtkWidget *widget, static gint alertpanel_deleted (GtkWidget *widget, GdkEventAny *event, gpointer data); -static void alertpanel_close (GtkWidget *widget, +static gboolean alertpanel_close (GtkWidget *widget, GdkEventAny *event, gpointer data); @@ -221,8 +220,7 @@ static void alertpanel_create(const gchar *title, gboolean can_disable, GtkWidget *custom_widget) { - static GdkFont *titlefont; - GtkStyle *style; + static PangoFontDescription *font_desc; GtkWidget *label; GtkWidget *hbox; GtkWidget *vbox; @@ -243,13 +241,13 @@ static void alertpanel_create(const gchar *title, gtk_window_set_policy(GTK_WINDOW(dialog), FALSE, FALSE, FALSE); gtk_container_set_border_width (GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 5); - gtk_window_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); - gtk_signal_connect(GTK_OBJECT(dialog), "delete_event", - GTK_SIGNAL_FUNC(alertpanel_deleted), - (gpointer)G_ALERTOTHER); - gtk_signal_connect(GTK_OBJECT(dialog), "key_press_event", - GTK_SIGNAL_FUNC(alertpanel_close), - (gpointer)G_ALERTOTHER); + gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); + g_signal_connect(G_OBJECT(dialog), "delete_event", + G_CALLBACK(alertpanel_deleted), + (gpointer)G_ALERTOTHER); + g_signal_connect(G_OBJECT(dialog), "key_press_event", + G_CALLBACK(alertpanel_close), + (gpointer)G_ALERTOTHER); gtk_widget_realize(dialog); /* for title label */ @@ -263,12 +261,15 @@ static void alertpanel_create(const gchar *title, label = gtk_label_new(title); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 16); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - style = gtk_style_copy(gtk_widget_get_style(label)); - if (!titlefont) - titlefont = gtkut_font_load(TITLE_FONT); - if (titlefont) - style->font = titlefont; - gtk_widget_set_style(label, style); + if (!font_desc) { + gchar *fontstr = prefs_common.titlefont + ? prefs_common.titlefont + : DEFAULT_TITLE_FONT; + font_desc = pango_font_description_from_string (fontstr); + } + if (font_desc) { + gtk_widget_modify_font (label, font_desc); + } /* for message and button(s) */ vbox = gtk_vbox_new(FALSE, 0); @@ -277,7 +278,7 @@ static void alertpanel_create(const gchar *title, spc_vbox = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), spc_vbox, FALSE, FALSE, 0); - gtk_widget_set_usize(spc_vbox, -1, 16); + gtk_widget_set_size_request(spc_vbox, -1, 16); msg_vbox = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), msg_vbox, FALSE, FALSE, 0); @@ -310,13 +311,13 @@ static void alertpanel_create(const gchar *title, TRUE); gtk_box_pack_start(GTK_BOX(hbox), disable_chkbtn, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(disable_chkbtn), "toggled", - GTK_SIGNAL_FUNC(alertpanel_button_toggled), - GUINT_TO_POINTER(G_ALERTDISABLE)); + g_signal_connect(G_OBJECT(disable_chkbtn), "toggled", + G_CALLBACK(alertpanel_button_toggled), + GUINT_TO_POINTER(G_ALERTDISABLE)); } else { spc_vbox = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), spc_vbox, FALSE, FALSE, 0); - gtk_widget_set_usize(spc_vbox, -1, 20); + gtk_widget_set_size_request(spc_vbox, -1, 20); } /* for button(s) */ @@ -344,17 +345,17 @@ static void alertpanel_create(const gchar *title, gtk_widget_grab_focus(button3); } - gtk_signal_connect(GTK_OBJECT(button1), "clicked", - GTK_SIGNAL_FUNC(alertpanel_button_clicked), - GUINT_TO_POINTER(G_ALERTDEFAULT)); + g_signal_connect(G_OBJECT(button1), "clicked", + G_CALLBACK(alertpanel_button_clicked), + GUINT_TO_POINTER(G_ALERTDEFAULT)); if (button2_label) - gtk_signal_connect(GTK_OBJECT(button2), "clicked", - GTK_SIGNAL_FUNC(alertpanel_button_clicked), - GUINT_TO_POINTER(G_ALERTALTERNATE)); + g_signal_connect(G_OBJECT(button2), "clicked", + G_CALLBACK(alertpanel_button_clicked), + GUINT_TO_POINTER(G_ALERTALTERNATE)); if (button3_label) - gtk_signal_connect(GTK_OBJECT(button3), "clicked", - GTK_SIGNAL_FUNC(alertpanel_button_clicked), - GUINT_TO_POINTER(G_ALERTOTHER)); + g_signal_connect(G_OBJECT(button3), "clicked", + G_CALLBACK(alertpanel_button_clicked), + GUINT_TO_POINTER(G_ALERTOTHER)); gtk_widget_show_all(dialog); } @@ -380,12 +381,13 @@ static gint alertpanel_deleted(GtkWidget *widget, GdkEventAny *event, return TRUE; } -static void alertpanel_close(GtkWidget *widget, GdkEventAny *event, +static gboolean alertpanel_close(GtkWidget *widget, GdkEventAny *event, gpointer data) { if (event->type == GDK_KEY_PRESS) if (((GdkEventKey *)event)->keyval != GDK_Escape) - return; + return FALSE; value = (value & ~G_ALERT_VALUE_MASK) | (AlertValue)data; + return FALSE; } diff --git a/src/codeconv.c b/src/codeconv.c index 0357f2a1e..53e6e8276 100644 --- a/src/codeconv.c +++ b/src/codeconv.c @@ -298,6 +298,32 @@ void conv_anytoeuc(gchar *outbuf, gint outlen, const gchar *inbuf) } } +void conv_anytoutf8(gchar *outbuf, gint outlen, const gchar *inbuf) +{ + gchar *tmpstr = NULL; + + switch (conv_guess_ja_encoding(inbuf)) { + case C_ISO_2022_JP: + tmpstr = conv_codeset_strdup(inbuf, CS_ISO_2022_JP, CS_UTF_8); + strncpy2(outbuf, tmpstr, outlen); + g_free(tmpstr); + break; + case C_SHIFT_JIS: + tmpstr = conv_codeset_strdup(inbuf, CS_SHIFT_JIS, CS_UTF_8); + strncpy2(outbuf, tmpstr, outlen); + g_free(tmpstr); + break; + case C_EUC_JP: + tmpstr = conv_codeset_strdup(inbuf, CS_EUC_JP, CS_UTF_8); + strncpy2(outbuf, tmpstr, outlen); + g_free(tmpstr); + break; + default: + strncpy2(outbuf, inbuf, outlen); + break; + } +} + void conv_anytojis(gchar *outbuf, gint outlen, const gchar *inbuf) { switch (conv_guess_ja_encoding(inbuf)) { @@ -616,11 +642,19 @@ void conv_euctodisp(gchar *outbuf, gint outlen, const gchar *inbuf) conv_unreadable_eucjp(outbuf); } +#warning FIXME_GTK2 +#if 0 void conv_anytodisp(gchar *outbuf, gint outlen, const gchar *inbuf) { conv_anytoeuc(outbuf, outlen, inbuf); conv_unreadable_eucjp(outbuf); } +#else +void conv_anytodisp(gchar *outbuf, gint outlen, const gchar *inbuf) +{ + conv_anytoutf8(outbuf, outlen, inbuf); +} +#endif void conv_ustodisp(gchar *outbuf, gint outlen, const gchar *inbuf) { @@ -650,7 +684,8 @@ CodeConverter *conv_code_converter_new(const gchar *charset) CodeConverter *conv; conv = g_new0(CodeConverter, 1); - conv->code_conv_func = conv_get_code_conv_func(charset, NULL); +#warning FIXME_GTK2 + conv->code_conv_func = conv_get_code_conv_func(charset, CS_UTF_8); conv->charset_str = g_strdup(charset); conv->charset = conv_get_charset_from_str(charset); @@ -672,7 +707,8 @@ gint conv_convert(CodeConverter *conv, gchar *outbuf, gint outlen, else { gchar *str; - str = conv_iconv_strdup(inbuf, conv->charset_str, NULL); +#warning FIXME_GTK2 + str = conv_iconv_strdup(inbuf, conv->charset_str, CS_UTF_8); if (!str) return -1; else { @@ -1339,7 +1375,7 @@ gboolean conv_is_multibyte_encoding(CharSet encoding) const gchar *conv_get_current_locale(void) { - gchar *cur_locale; + const gchar *cur_locale; cur_locale = g_getenv("LC_ALL"); if (!cur_locale) cur_locale = g_getenv("LC_CTYPE"); @@ -1357,10 +1393,15 @@ void conv_unmime_header_overwrite(gchar *str) gchar *buf; gint buflen; CharSet cur_charset; + const gchar *locale; cur_charset = conv_get_current_charset(); - if (cur_charset == C_EUC_JP) { +#warning FIXME_GTK2 +/* Should we always ensure to convert? */ + locale = conv_get_current_locale(); + + if (locale && !strncasecmp(locale, "ja", 2)) { buflen = strlen(str) * 2 + 1; Xalloca(buf, buflen, return); conv_anytodisp(buf, buflen, str); @@ -1377,10 +1418,15 @@ void conv_unmime_header(gchar *outbuf, gint outlen, const gchar *str, const gchar *charset) { CharSet cur_charset; + const gchar *locale; cur_charset = conv_get_current_charset(); - if (cur_charset == C_EUC_JP) { +#warning FIXME_GTK2 +/* Should we always ensure to convert? */ + locale = conv_get_current_locale(); + + if (locale && !strncasecmp(locale, "ja", 2)) { gchar *buf; gint buflen; diff --git a/src/codeconv.h b/src/codeconv.h index 19c24248f..9bd19d232 100644 --- a/src/codeconv.h +++ b/src/codeconv.h @@ -165,6 +165,7 @@ void conv_jistoeuc (gchar *outbuf, gint outlen, const gchar *inbuf); void conv_euctojis (gchar *outbuf, gint outlen, const gchar *inbuf); void conv_sjistoeuc (gchar *outbuf, gint outlen, const gchar *inbuf); void conv_anytoeuc (gchar *outbuf, gint outlen, const gchar *inbuf); +void conv_anytoutf8 (gchar *outbuf, gint outlen, const gchar *inbuf); void conv_anytojis (gchar *outbuf, gint outlen, const gchar *inbuf); void conv_unreadable_eucjp (gchar *str); diff --git a/src/common/defs.h b/src/common/defs.h index 5e24b3b85..2b55f6fe2 100644 --- a/src/common/defs.h +++ b/src/common/defs.h @@ -74,7 +74,8 @@ #define FOLDER_LIST "folderlist.xml" #define CACHE_FILE ".sylpheed_cache" #define MARK_FILE ".sylpheed_mark" -#define CACHE_VERSION 20 +/* #warning FIXME_GTK2 */ +#define CACHE_VERSION 2020 #define MARK_VERSION 2 #define DEFAULT_SIGNATURE ".signature" diff --git a/src/common/intl.h b/src/common/intl.h index 3cb08bf7b..5ce3ad820 100644 --- a/src/common/intl.h +++ b/src/common/intl.h @@ -1,6 +1,10 @@ #ifndef __INTL_H__ #define __INTL_H__ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif /* HAVE_CONFIG_H */ + #ifdef ENABLE_NLS # include # define _(String) gettext(String) @@ -9,6 +13,9 @@ # else # define N_(String) (String) # endif /* gettext_noop */ +# ifndef HAVE_BIND_TEXTDOMAIN_CODESET +# define bind_textdomain_codeset(Domain, Codeset) (Codeset) +# endif /* HAVE_BIND_TEXTDOMAIN_CODESET */ #else # define _(String) (String) # define N_(String) (String) @@ -17,6 +24,7 @@ # define dgettext(Domain,String) (String) # define dcgettext(Domain,String,Type) (String) # define bindtextdomain(Domain,Directory) (Domain) +# define bind_textdomain_codeset(Domain, Codeset) (Codeset) #endif /* ENABLE_NLS */ #endif /* __INTL_H__ */ diff --git a/src/common/socket.c b/src/common/socket.c index 8b5f07343..3fa5b5d0a 100644 --- a/src/common/socket.c +++ b/src/common/socket.c @@ -61,6 +61,7 @@ typedef gint (*SockAddrFunc) (GList *addr_list, typedef struct _SockConnectData SockConnectData; typedef struct _SockLookupData SockLookupData; typedef struct _SockAddrData SockAddrData; +typedef struct _SockSource SockSource; struct _SockConnectData { gint id; @@ -92,19 +93,20 @@ struct _SockAddrData { struct sockaddr *addr; }; +struct _SockSource { + GSource parent; + SockInfo *sock; +}; + static guint io_timeout = 60; static GList *sock_connect_data_list = NULL; -static gboolean sock_prepare (gpointer source_data, - GTimeVal *current_time, - gint *timeout, - gpointer data); -static gboolean sock_check (gpointer source_data, - GTimeVal *current_time, - gpointer user_data); -static gboolean sock_dispatch (gpointer source_data, - GTimeVal *current_time, +static gboolean sock_prepare (GSource *source, + gint *timeout); +static gboolean sock_check (GSource *source); +static gboolean sock_dispatch (GSource *source, + GSourceFunc callback, gpointer user_data); GSourceFuncs sock_watch_funcs = { @@ -269,17 +271,15 @@ gboolean sock_is_nonblocking_mode(SockInfo *sock) } -static gboolean sock_prepare(gpointer source_data, GTimeVal *current_time, - gint *timeout, gpointer data) +static gboolean sock_prepare(GSource *source, gint *timeout) { *timeout = 1; return FALSE; } -static gboolean sock_check(gpointer source_data, GTimeVal *current_time, - gpointer user_data) +static gboolean sock_check(GSource *source) { - SockInfo *sock = (SockInfo *)source_data; + SockInfo *sock = ((SockSource *)source)->sock; struct timeval timeout = {0, 0}; fd_set fds; GIOCondition condition = sock->condition; @@ -311,10 +311,10 @@ static gboolean sock_check(gpointer source_data, GTimeVal *current_time, return FD_ISSET(sock->sock, &fds) != 0; } -static gboolean sock_dispatch(gpointer source_data, GTimeVal *current_time, +static gboolean sock_dispatch(GSource *source, GSourceFunc callback, gpointer user_data) { - SockInfo *sock = (SockInfo *)source_data; + SockInfo *sock = ((SockSource *)source)->sock; return sock->callback(sock, sock->condition, user_data); } @@ -336,8 +336,14 @@ guint sock_add_watch(SockInfo *sock, GIOCondition condition, SockFunc func, #if USE_OPENSSL if (sock->ssl) - return g_source_add(G_PRIORITY_DEFAULT, FALSE, - &sock_watch_funcs, sock, data, NULL); + { + GSource *source = g_source_new(&sock_watch_funcs, + sizeof(SockSource)); + ((SockSource *) source)->sock = sock; + g_source_set_priority(source, G_PRIORITY_DEFAULT); + g_source_set_can_recurse(source, FALSE); + g_source_attach(source, NULL); + } #endif return g_io_add_watch(sock->sock_ch, condition, sock_watch_cb, sock); diff --git a/src/common/sylpheed.c b/src/common/sylpheed.c index e00231e26..99b82aa80 100644 --- a/src/common/sylpheed.c +++ b/src/common/sylpheed.c @@ -22,6 +22,7 @@ #endif #include "defs.h" +#include #include #if HAVE_LOCALE_H @@ -93,7 +94,9 @@ gboolean sylpheed_init(int *argc, char ***argv) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); + bind_textdomain_codeset (PACKAGE, "UTF-8"); textdomain(PACKAGE); + putenv("G_BROKEN_FILENAMES=1"); /* backup if old rc file exists */ if (is_file_exist(RC_DIR)) { diff --git a/src/common/template.c b/src/common/template.c index 15f12fe93..fdafcf8fb 100644 --- a/src/common/template.c +++ b/src/common/template.c @@ -29,6 +29,7 @@ #include "intl.h" #include "utils.h" #include "template.h" +#include "../codeconv.h" static GSList *template_list; @@ -38,6 +39,9 @@ static Template *template_load(gchar *filename) FILE *fp; gchar buf[BUFFSIZE]; gint bytes_read; +#warning FIXME_GTK2 + const gchar *src_codeset = conv_get_current_charset_str(); + const gchar *dest_codeset = CS_UTF_8; if ((fp = fopen(filename, "rb")) == NULL) { FILE_OP_ERROR(filename, "fopen"); @@ -53,18 +57,36 @@ static Template *template_load(gchar *filename) tmpl->value = NULL; while (fgets(buf, sizeof(buf), fp) != NULL) { + gchar *tmp = NULL; + if (buf[0] == '\n') break; - else if (!g_strncasecmp(buf, "Name:", 5)) - tmpl->name = g_strdup(g_strstrip(buf + 5)); - else if (!g_strncasecmp(buf, "Subject:", 8)) - tmpl->subject = g_strdup(g_strstrip(buf + 8)); - else if (!g_strncasecmp(buf, "To:", 3)) - tmpl->to = g_strdup(g_strstrip(buf + 3)); - else if (!g_strncasecmp(buf, "Cc:", 3)) - tmpl->cc = g_strdup(g_strstrip(buf + 3)); - else if (!g_strncasecmp(buf, "Bcc:", 4)) - tmpl->bcc = g_strdup(g_strstrip(buf + 4)); + else if (!g_strncasecmp(buf, "Name:", 5)) { + tmp = conv_codeset_strdup(buf + 5, + src_codeset, + dest_codeset); + tmpl->name = tmp ? g_strstrip(tmp) : g_strdup(buf + 5); + } else if (!g_strncasecmp(buf, "Subject:", 8)) { + tmp = conv_codeset_strdup(buf + 8, + src_codeset, + dest_codeset); + tmpl->subject = tmp ? g_strstrip(tmp) : g_strdup(buf + 8); + } else if (!g_strncasecmp(buf, "To:", 3)) { + tmp = conv_codeset_strdup(buf + 3, + src_codeset, + dest_codeset); + tmpl->to = tmp ? g_strstrip(tmp) : g_strdup(buf + 3); + } else if (!g_strncasecmp(buf, "Cc:", 3)) { + tmp = conv_codeset_strdup(buf + 3, + src_codeset, + dest_codeset); + tmpl->cc = tmp ? g_strstrip(tmp) : g_strdup(buf + 3); + } else if (!g_strncasecmp(buf, "Bcc:", 4)) { + tmp = conv_codeset_strdup(buf + 4, + src_codeset, + dest_codeset); + tmpl->bcc = tmp ? g_strstrip(tmp) : g_strdup(buf + 4); + } } if (!tmpl->name) { @@ -81,7 +103,10 @@ static Template *template_load(gchar *filename) } } fclose(fp); - tmpl->value = g_strndup(buf, bytes_read); + buf[bytes_read] = '\0'; + tmpl->value = conv_codeset_strdup(buf, src_codeset, dest_codeset); + if (!tmpl->value) + tmpl->value = g_strdup(buf); return tmpl; } @@ -111,7 +136,7 @@ void template_clear_config(GSList *tmpl_list) GSList *template_read_config(void) { - gchar *path; + const gchar *path; gchar *filename; DIR *dp; struct dirent *de; @@ -157,7 +182,7 @@ GSList *template_read_config(void) void template_write_config(GSList *tmpl_list) { - gchar *path; + const gchar *path; GSList *cur; Template *tmpl; FILE *fp; @@ -180,6 +205,10 @@ void template_write_config(GSList *tmpl_list) for (cur = tmpl_list, tmpl_num = 1; cur != NULL; cur = cur->next, tmpl_num++) { +#warning FIXME_GTK2 + const gchar *src_codeset = CS_UTF_8; + const gchar *dest_codeset = conv_get_current_charset_str(); + gchar *tmp = NULL; gchar *filename; tmpl = cur->data; @@ -190,21 +219,58 @@ void template_write_config(GSList *tmpl_list) if ((fp = fopen(filename, "wb")) == NULL) { FILE_OP_ERROR(filename, "fopen"); g_free(filename); - g_free(path); return; } - fprintf(fp, "Name: %s\n", tmpl->name); - if (tmpl->subject && *tmpl->subject != '\0') - fprintf(fp, "Subject: %s\n", tmpl->subject); - if (tmpl->to && *tmpl->to != '\0') - fprintf(fp, "To: %s\n", tmpl->to); - if (tmpl->cc && *tmpl->cc != '\0') - fprintf(fp, "Cc: %s\n", tmpl->cc); - if (tmpl->bcc && *tmpl->bcc != '\0') - fprintf(fp, "Bcc: %s\n", tmpl->bcc); + tmp = conv_codeset_strdup(tmpl->name, src_codeset, dest_codeset); + if (!tmp) + tmp = g_strdup(tmpl->name); + fprintf(fp, "Name: %s\n", tmp ? tmp : ""); + g_free(tmp); + + if (tmpl->subject && *tmpl->subject != '\0') { + tmp = conv_codeset_strdup(tmpl->subject, + src_codeset, dest_codeset); + if (!tmp) + tmp = g_strdup(tmpl->subject); + fprintf(fp, "Subject: %s\n", tmp); + g_free(tmp); + } + + if (tmpl->to && *tmpl->to != '\0') { + tmp = conv_codeset_strdup(tmpl->to, + src_codeset, dest_codeset); + if (!tmp) + tmp = g_strdup(tmpl->to); + fprintf(fp, "To: %s\n", tmp); + g_free(tmp); + } + + if (tmpl->cc && *tmpl->cc != '\0') { + tmp = conv_codeset_strdup(tmpl->cc, + src_codeset, dest_codeset); + if (!tmp) + tmp = g_strdup(tmpl->cc); + fprintf(fp, "Cc: %s\n", tmp); + g_free(tmp); + } + + if (tmpl->bcc && *tmpl->bcc != '\0') { + tmp = conv_codeset_strdup(tmpl->bcc, + src_codeset, dest_codeset); + if (!tmp) + tmp = g_strdup(tmpl->bcc); + fprintf(fp, "Bcc: %s\n", tmp); + g_free(tmp); + } + fputs("\n", fp); - fwrite(tmpl->value, sizeof(gchar) * strlen(tmpl->value), 1, fp); + tmp = conv_codeset_strdup(tmpl->value, + src_codeset, dest_codeset); + if (!tmp) + tmp = g_strdup(tmpl->value); + fwrite(tmp, sizeof(gchar) * strlen(tmp), 1, fp); + g_free(tmp); fclose(fp); } } diff --git a/src/common/utils.c b/src/common/utils.c index d5e861f52..adb1ed8db 100644 --- a/src/common/utils.c +++ b/src/common/utils.c @@ -46,6 +46,7 @@ #include "intl.h" #include "utils.h" #include "socket.h" +#include "../codeconv.h" #define BUFFSIZE 8192 @@ -1393,7 +1394,7 @@ GList *uri_list_extract_filenames(const gchar *uri_list) { GList *result = NULL; const gchar *p, *q; - gchar *file; + gchar *escaped_utf8uri; p = uri_list; @@ -1401,17 +1402,36 @@ GList *uri_list_extract_filenames(const gchar *uri_list) if (*p != '#') { while (isspace(*p)) p++; if (!strncmp(p, "file:", 5)) { - p += 5; q = p; + q += 5; while (*q && *q != '\n' && *q != '\r') q++; if (q > p) { + gchar *file, *locale_file = NULL; q--; while (q > p && isspace(*q)) q--; - file = g_malloc(q - p + 2); - strncpy(file, p, q - p + 1); - file[q - p + 1] = '\0'; - result = g_list_append(result,file); + Xalloca(escaped_utf8uri, q - p + 2, + return result); + Xalloca(file, q - p + 2, + return result); + *file = '\0'; + strncpy(escaped_utf8uri, p, q - p + 1); + escaped_utf8uri[q - p + 1] = '\0'; + decode_uri(file, escaped_utf8uri); +#warning FIXME_GTK2 /* should we use g_filename_from_utf8()? */ + /* + * g_filename_from_uri() rejects escaped/locale encoded uri + * string which come from Nautilus. + */ + if (g_utf8_validate(file, -1, NULL)) + locale_file + = conv_codeset_strdup( + file + 5, + CS_UTF_8, + conv_get_current_charset_str()); + if (!locale_file) + locale_file = g_strdup(file + 5); + result = g_list_append(result, locale_file); } } } @@ -1500,7 +1520,7 @@ gint scan_mailto_url(const gchar *mailto, gchar **to, gchar **cc, gchar **bcc, * but as long as we are not able to do our own extensions to glibc, we do * it here. */ -gchar *get_home_dir(void) +const gchar *get_home_dir(void) { #if HAVE_DOSISH_SYSTEM static gchar *home_dir; @@ -1525,7 +1545,7 @@ gchar *get_home_dir(void) #endif } -gchar *get_rc_dir(void) +const gchar *get_rc_dir(void) { static gchar *rc_dir = NULL; @@ -1536,7 +1556,7 @@ gchar *get_rc_dir(void) return rc_dir; } -gchar *get_news_cache_dir(void) +const gchar *get_news_cache_dir(void) { static gchar *news_cache_dir = NULL; @@ -1547,7 +1567,7 @@ gchar *get_news_cache_dir(void) return news_cache_dir; } -gchar *get_imap_cache_dir(void) +const gchar *get_imap_cache_dir(void) { static gchar *imap_cache_dir = NULL; @@ -1558,7 +1578,7 @@ gchar *get_imap_cache_dir(void) return imap_cache_dir; } -gchar *get_mbox_cache_dir(void) +const gchar *get_mbox_cache_dir(void) { static gchar *mbox_cache_dir = NULL; @@ -1569,7 +1589,7 @@ gchar *get_mbox_cache_dir(void) return mbox_cache_dir; } -gchar *get_mime_tmp_dir(void) +const gchar *get_mime_tmp_dir(void) { static gchar *mime_tmp_dir = NULL; @@ -1580,7 +1600,7 @@ gchar *get_mime_tmp_dir(void) return mime_tmp_dir; } -gchar *get_template_dir(void) +const gchar *get_template_dir(void) { static gchar *template_dir = NULL; @@ -1591,7 +1611,7 @@ gchar *get_template_dir(void) return template_dir; } -gchar *get_header_cache_dir(void) +const gchar *get_header_cache_dir(void) { static gchar *header_dir = NULL; @@ -1602,7 +1622,7 @@ gchar *get_header_cache_dir(void) return header_dir; } -gchar *get_tmp_dir(void) +const gchar *get_tmp_dir(void) { static gchar *tmp_dir = NULL; @@ -1624,7 +1644,7 @@ gchar *get_tmp_file(void) return tmp_file; } -gchar *get_domain_name(void) +const gchar *get_domain_name(void) { static gchar *domain_name = NULL; diff --git a/src/common/utils.h b/src/common/utils.h index 629fd219f..0c1e7ef28 100644 --- a/src/common/utils.h +++ b/src/common/utils.h @@ -313,17 +313,17 @@ gint scan_mailto_url (const gchar *mailto, gchar **body); /* return static strings */ -gchar *get_home_dir (void); -gchar *get_rc_dir (void); -gchar *get_news_cache_dir (void); -gchar *get_imap_cache_dir (void); -gchar *get_mbox_cache_dir (void); -gchar *get_mime_tmp_dir (void); -gchar *get_template_dir (void); -gchar *get_header_cache_dir (void); -gchar *get_tmp_dir (void); -gchar *get_tmp_file (void); -gchar *get_domain_name (void); +const gchar *get_home_dir (void); +const gchar *get_rc_dir (void); +const gchar *get_news_cache_dir (void); +const gchar *get_imap_cache_dir (void); +const gchar *get_mbox_cache_dir (void); +const gchar *get_mime_tmp_dir (void); +const gchar *get_template_dir (void); +const gchar *get_header_cache_dir (void); +const gchar *get_tmp_dir (void); +gchar *get_tmp_file (void); +const gchar *get_domain_name (void); /* file / directory handling */ off_t get_file_size (const gchar *file); diff --git a/src/common/xml.c b/src/common/xml.c index 578304482..306f10e9b 100644 --- a/src/common/xml.c +++ b/src/common/xml.c @@ -24,6 +24,7 @@ #include "xml.h" #include "utils.h" +#include "../codeconv.h" #define SPARSE_MEMORY /* if this is defined all attr.names and tag.names are stored @@ -231,8 +232,8 @@ gint xml_parse_next_tag(XMLFile *file) /* parse attributes ( name=value ) */ while (*bufp) { XMLAttr *attr; - gchar *attr_name; - gchar *attr_value; + gchar *attr_name, *attr_value; + gchar *utf8attr_name, *utf8attr_value; gchar *p; gchar quote; @@ -264,9 +265,31 @@ gint xml_parse_next_tag(XMLFile *file) xml_unescape_str(attr_value); attr = g_new(XMLAttr, 1); - attr->name = XML_STRING_ADD(attr_name); - attr->value = g_strdup(attr_value); +#warning FIXME_GTK2 + utf8attr_name = conv_codeset_strdup + (attr_name, + conv_get_current_charset_str(), + CS_UTF_8); + utf8attr_value = conv_codeset_strdup + (attr_value, + conv_get_current_charset_str(), + CS_UTF_8); + if (!utf8attr_name) { + g_warning("xml_parse_next_tag(): " + "faild to convert character set of attr_name\n"); + utf8attr_name = g_strdup(attr_name); + } + if (!utf8attr_value) { + g_warning("xml_parse_next_tag(): " + "faild to convert character set of attr_value\n"); + utf8attr_value = g_strdup(attr_value); + } + + attr->name = XML_STRING_ADD(utf8attr_name); + attr->value = utf8attr_value; tag->attr = g_list_append(tag->attr, attr); + + g_free(utf8attr_name); } return 0; @@ -315,6 +338,7 @@ gchar *xml_get_element(XMLFile *file) { gchar *str; gchar *end; + gchar *utf8str; while ((end = strchr(file->bufp, '<')) == NULL) if (xml_read_line(file) < 0) return NULL; @@ -335,7 +359,18 @@ gchar *xml_get_element(XMLFile *file) return NULL; } - return str; + utf8str = conv_codeset_strdup + (str, + conv_get_current_charset_str(), + CS_UTF_8); + if (!utf8str) { + g_warning("xml_get_element(): " + "faild to convert character set.\n"); + utf8str = str; + } else + g_free(str); + + return utf8str; } gint xml_read_line(XMLFile *file) @@ -451,15 +486,25 @@ gint xml_unescape_str(gchar *str) return 0; } +#warning FIXME_GTK2 gint xml_file_put_escape_str(FILE *fp, const gchar *str) { + const gchar *src_codeset = CS_UTF_8; + const gchar *dest_codeset = conv_get_current_charset_str(); + gchar *tmpstr = NULL; const gchar *p; g_return_val_if_fail(fp != NULL, -1); if (!str) return 0; - for (p = str; *p != '\0'; p++) { + tmpstr = conv_codeset_strdup(str, src_codeset, dest_codeset); + if (!tmpstr) { + g_warning("xml_file_put_escape_str(): Faild to convert character set."); + tmpstr = g_strdup(str); + } + + for (p = tmpstr; *p != '\0'; p++) { switch (*p) { case '<': fputs("<", fp); @@ -481,6 +526,8 @@ gint xml_file_put_escape_str(FILE *fp, const gchar *str) } } + g_free(tmpstr); + return 0; } diff --git a/src/compose.c b/src/compose.c index df9d2f143..daf92bf1b 100644 --- a/src/compose.c +++ b/src/compose.c @@ -47,7 +47,9 @@ #include #include #include -#include +#include +#warning FIXME_GTK2 +/* #include */ #include #include #include @@ -72,7 +74,6 @@ #include "main.h" #include "mainwindow.h" #include "compose.h" -#include "gtkstext.h" #include "addressbook.h" #include "folderview.h" #include "procmsg.h" @@ -123,22 +124,22 @@ typedef enum typedef enum { - COMPOSE_CALL_GTK_STEXT_MOVE_BEGINNING_OF_LINE, - COMPOSE_CALL_GTK_STEXT_MOVE_FORWARD_CHARACTER, - COMPOSE_CALL_GTK_STEXT_MOVE_BACKWARD_CHARACTER, - COMPOSE_CALL_GTK_STEXT_MOVE_FORWARD_WORD, - COMPOSE_CALL_GTK_STEXT_MOVE_BACKWARD_WORD, - COMPOSE_CALL_GTK_STEXT_MOVE_END_OF_LINE, - COMPOSE_CALL_GTK_STEXT_MOVE_NEXT_LINE, - COMPOSE_CALL_GTK_STEXT_MOVE_PREVIOUS_LINE, - COMPOSE_CALL_GTK_STEXT_DELETE_FORWARD_CHARACTER, - COMPOSE_CALL_GTK_STEXT_DELETE_BACKWARD_CHARACTER, - COMPOSE_CALL_GTK_STEXT_DELETE_FORWARD_WORD, - COMPOSE_CALL_GTK_STEXT_DELETE_BACKWARD_WORD, - COMPOSE_CALL_GTK_STEXT_DELETE_LINE, - COMPOSE_CALL_GTK_STEXT_DELETE_LINE_N, - COMPOSE_CALL_GTK_STEXT_DELETE_TO_LINE_END -} ComposeCallGtkSTextAction; + COMPOSE_CALL_ADVANCED_ACTION_MOVE_BEGINNING_OF_LINE, + COMPOSE_CALL_ADVANCED_ACTION_MOVE_FORWARD_CHARACTER, + COMPOSE_CALL_ADVANCED_ACTION_MOVE_BACKWARD_CHARACTER, + COMPOSE_CALL_ADVANCED_ACTION_MOVE_FORWARD_WORD, + COMPOSE_CALL_ADVANCED_ACTION_MOVE_BACKWARD_WORD, + COMPOSE_CALL_ADVANCED_ACTION_MOVE_END_OF_LINE, + COMPOSE_CALL_ADVANCED_ACTION_MOVE_NEXT_LINE, + COMPOSE_CALL_ADVANCED_ACTION_MOVE_PREVIOUS_LINE, + COMPOSE_CALL_ADVANCED_ACTION_DELETE_FORWARD_CHARACTER, + COMPOSE_CALL_ADVANCED_ACTION_DELETE_BACKWARD_CHARACTER, + COMPOSE_CALL_ADVANCED_ACTION_DELETE_FORWARD_WORD, + COMPOSE_CALL_ADVANCED_ACTION_DELETE_BACKWARD_WORD, + COMPOSE_CALL_ADVANCED_ACTION_DELETE_LINE, + COMPOSE_CALL_ADVANCED_ACTION_DELETE_LINE_N, + COMPOSE_CALL_ADVANCED_ACTION_DELETE_TO_LINE_END +} ComposeCallAdvancedAction; typedef enum { @@ -265,7 +266,7 @@ static void attach_property_cancel (GtkWidget *widget, static gint attach_property_delete_event (GtkWidget *widget, GdkEventAny *event, gboolean *cancelled); -static void attach_property_key_pressed (GtkWidget *widget, +static gboolean attach_property_key_pressed (GtkWidget *widget, GdkEventKey *event, gboolean *cancelled); @@ -283,7 +284,7 @@ static void compose_undo_state_changed (UndoMain *undostruct, gint redo_state, gpointer data); -static gint calc_cursor_xpos (GtkSText *text, +static gint calc_cursor_xpos (GtkTextView *text, gint extra, gint char_width); @@ -303,10 +304,10 @@ static void attach_selected (GtkCList *clist, gint column, GdkEvent *event, gpointer data); -static void attach_button_pressed (GtkWidget *widget, +static gboolean attach_button_pressed (GtkWidget *widget, GdkEventButton *event, gpointer data); -static void attach_key_pressed (GtkWidget *widget, +static gboolean attach_key_pressed (GtkWidget *widget, GdkEventKey *event, gpointer data); @@ -359,22 +360,14 @@ static void compose_paste_cb (Compose *compose); static void compose_paste_as_quote_cb (Compose *compose); static void compose_allsel_cb (Compose *compose); -static void compose_gtk_stext_action_cb (Compose *compose, - ComposeCallGtkSTextAction action); +static void compose_advanced_action_cb (Compose *compose, + ComposeCallAdvancedAction action); static void compose_grab_focus_cb (GtkWidget *widget, Compose *compose); -static void compose_changed_cb (GtkEditable *editable, +static void compose_changed_cb (GtkTextBuffer *textbuf, Compose *compose); -static void compose_button_press_cb (GtkWidget *widget, - GdkEventButton *event, - Compose *compose); -#if 0 -static void compose_key_press_cb (GtkWidget *widget, - GdkEventKey *event, - Compose *compose); -#endif #if 0 static void compose_toggle_to_cb (gpointer data, @@ -457,10 +450,10 @@ static void subject_activated (GtkWidget *widget, static void text_activated (GtkWidget *widget, Compose *compose); -static void text_inserted (GtkWidget *widget, +static void text_inserted (GtkTextBuffer *buffer, + GtkTextIter *iter, const gchar *text, - gint length, - gint *position, + gint len, Compose *compose); static void compose_generic_reply(MsgInfo *msginfo, gboolean quote, gboolean to_all, gboolean to_ml, @@ -516,78 +509,78 @@ static GtkItemFactoryEntry compose_entries[] = {N_("/_Edit/A_dvanced"), NULL, NULL, 0, ""}, {N_("/_Edit/A_dvanced/Move a character backward"), "B", - compose_gtk_stext_action_cb, - COMPOSE_CALL_GTK_STEXT_MOVE_BACKWARD_CHARACTER, + compose_advanced_action_cb, + COMPOSE_CALL_ADVANCED_ACTION_MOVE_BACKWARD_CHARACTER, NULL}, {N_("/_Edit/A_dvanced/Move a character forward"), "F", - compose_gtk_stext_action_cb, - COMPOSE_CALL_GTK_STEXT_MOVE_FORWARD_CHARACTER, + compose_advanced_action_cb, + COMPOSE_CALL_ADVANCED_ACTION_MOVE_FORWARD_CHARACTER, NULL}, {N_("/_Edit/A_dvanced/Move a word backward"), NULL, /* "B" */ - compose_gtk_stext_action_cb, - COMPOSE_CALL_GTK_STEXT_MOVE_BACKWARD_WORD, + compose_advanced_action_cb, + COMPOSE_CALL_ADVANCED_ACTION_MOVE_BACKWARD_WORD, NULL}, {N_("/_Edit/A_dvanced/Move a word forward"), NULL, /* "F" */ - compose_gtk_stext_action_cb, - COMPOSE_CALL_GTK_STEXT_MOVE_FORWARD_WORD, + compose_advanced_action_cb, + COMPOSE_CALL_ADVANCED_ACTION_MOVE_FORWARD_WORD, NULL}, {N_("/_Edit/A_dvanced/Move to beginning of line"), NULL, /* "A" */ - compose_gtk_stext_action_cb, - COMPOSE_CALL_GTK_STEXT_MOVE_BEGINNING_OF_LINE, + compose_advanced_action_cb, + COMPOSE_CALL_ADVANCED_ACTION_MOVE_BEGINNING_OF_LINE, NULL}, {N_("/_Edit/A_dvanced/Move to end of line"), "E", - compose_gtk_stext_action_cb, - COMPOSE_CALL_GTK_STEXT_MOVE_END_OF_LINE, + compose_advanced_action_cb, + COMPOSE_CALL_ADVANCED_ACTION_MOVE_END_OF_LINE, NULL}, {N_("/_Edit/A_dvanced/Move to previous line"), "P", - compose_gtk_stext_action_cb, - COMPOSE_CALL_GTK_STEXT_MOVE_PREVIOUS_LINE, + compose_advanced_action_cb, + COMPOSE_CALL_ADVANCED_ACTION_MOVE_PREVIOUS_LINE, NULL}, {N_("/_Edit/A_dvanced/Move to next line"), "N", - compose_gtk_stext_action_cb, - COMPOSE_CALL_GTK_STEXT_MOVE_NEXT_LINE, + compose_advanced_action_cb, + COMPOSE_CALL_ADVANCED_ACTION_MOVE_NEXT_LINE, NULL}, {N_("/_Edit/A_dvanced/Delete a character backward"), "H", - compose_gtk_stext_action_cb, - COMPOSE_CALL_GTK_STEXT_DELETE_BACKWARD_CHARACTER, + compose_advanced_action_cb, + COMPOSE_CALL_ADVANCED_ACTION_DELETE_BACKWARD_CHARACTER, NULL}, {N_("/_Edit/A_dvanced/Delete a character forward"), "D", - compose_gtk_stext_action_cb, - COMPOSE_CALL_GTK_STEXT_DELETE_FORWARD_CHARACTER, + compose_advanced_action_cb, + COMPOSE_CALL_ADVANCED_ACTION_DELETE_FORWARD_CHARACTER, NULL}, {N_("/_Edit/A_dvanced/Delete a word backward"), NULL, /* "W" */ - compose_gtk_stext_action_cb, - COMPOSE_CALL_GTK_STEXT_DELETE_BACKWARD_WORD, + compose_advanced_action_cb, + COMPOSE_CALL_ADVANCED_ACTION_DELETE_BACKWARD_WORD, NULL}, {N_("/_Edit/A_dvanced/Delete a word forward"), NULL, /* "D", */ - compose_gtk_stext_action_cb, - COMPOSE_CALL_GTK_STEXT_DELETE_FORWARD_WORD, + compose_advanced_action_cb, + COMPOSE_CALL_ADVANCED_ACTION_DELETE_FORWARD_WORD, NULL}, {N_("/_Edit/A_dvanced/Delete line"), "U", - compose_gtk_stext_action_cb, - COMPOSE_CALL_GTK_STEXT_DELETE_LINE, + compose_advanced_action_cb, + COMPOSE_CALL_ADVANCED_ACTION_DELETE_LINE, NULL}, {N_("/_Edit/A_dvanced/Delete entire line"), NULL, - compose_gtk_stext_action_cb, - COMPOSE_CALL_GTK_STEXT_DELETE_LINE_N, + compose_advanced_action_cb, + COMPOSE_CALL_ADVANCED_ACTION_DELETE_LINE_N, NULL}, {N_("/_Edit/A_dvanced/Delete to end of line"), "K", - compose_gtk_stext_action_cb, - COMPOSE_CALL_GTK_STEXT_DELETE_TO_LINE_END, + compose_advanced_action_cb, + COMPOSE_CALL_ADVANCED_ACTION_DELETE_TO_LINE_END, NULL}, {N_("/_Edit/---"), NULL, NULL, 0, ""}, {N_("/_Edit/_Wrap current paragraph"), @@ -690,7 +683,9 @@ Compose *compose_generic_new(PrefsAccount *account, const gchar *mailto, FolderI GPtrArray *attach_files) { Compose *compose; - GtkSText *text; + GtkTextView *textview; + GtkTextBuffer *textbuf; + GtkTextIter iter; GtkItemFactory *ifactory; gboolean grab_focus_on_last = TRUE; @@ -706,8 +701,8 @@ Compose *compose_generic_new(PrefsAccount *account, const gchar *mailto, FolderI compose->replyinfo = NULL; compose->fwdinfo = NULL; - text = GTK_STEXT(compose->text); - gtk_stext_freeze(text); + textview = GTK_TEXT_VIEW(compose->text); + textbuf = gtk_text_view_get_buffer(textview); #ifdef USE_ASPELL if (item && item->prefs && item->prefs->enable_default_dictionary && @@ -718,10 +713,8 @@ Compose *compose_generic_new(PrefsAccount *account, const gchar *mailto, FolderI if (account->auto_sig) compose_insert_sig(compose, FALSE); - gtk_editable_set_position(GTK_EDITABLE(text), 0); - gtk_stext_set_point(text, 0); - - gtk_stext_thaw(text); + gtk_text_buffer_get_start_iter(textbuf, &iter); + gtk_text_buffer_place_cursor(textbuf, &iter); if (account->protocol != A_NNTP) { if (mailto && *mailto != '\0') { @@ -772,6 +765,8 @@ Compose *compose_generic_new(PrefsAccount *account, const gchar *mailto, FolderI if (grab_focus_on_last) gtk_widget_grab_focus(compose->header_last->entry); + undo_unblock(compose->undostruct); + if (prefs_common.auto_exteditor) compose_exec_ext_editor(compose); @@ -915,7 +910,8 @@ static void compose_generic_reply(MsgInfo *msginfo, gboolean quote, Compose *compose; PrefsAccount *account = NULL; PrefsAccount *reply_account; - GtkSText *text; + GtkTextBuffer *buffer; + GtkTextIter iter; g_return_if_fail(msginfo != NULL); g_return_if_fail(msginfo->folder != NULL); @@ -963,9 +959,6 @@ static void compose_generic_reply(MsgInfo *msginfo, gboolean quote, to_sender, followup_and_reply_to); compose_show_first_last_header(compose, TRUE); - text = GTK_STEXT(compose->text); - gtk_stext_freeze(text); - #ifdef USE_ASPELL if (msginfo->folder && msginfo->folder->prefs && msginfo->folder->prefs && @@ -994,12 +987,14 @@ static void compose_generic_reply(MsgInfo *msginfo, gboolean quote, if (quote && prefs_common.linewrap_quote) compose_wrap_line_all(compose); - gtk_editable_set_position(GTK_EDITABLE(text), 0); - gtk_stext_set_point(text, 0); + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(compose->text)); + gtk_text_buffer_get_start_iter(buffer, &iter); + gtk_text_buffer_place_cursor(buffer, &iter); - gtk_stext_thaw(text); gtk_widget_grab_focus(compose->text); + undo_unblock(compose->undostruct); + if (prefs_common.auto_exteditor) compose_exec_ext_editor(compose); } @@ -1015,7 +1010,9 @@ Compose *compose_forward(PrefsAccount *account, MsgInfo *msginfo, gboolean as_attach, const gchar *body) { Compose *compose; - GtkSText *text; + GtkTextView *textview; + GtkTextBuffer *textbuf; + GtkTextIter iter; g_return_val_if_fail(msginfo != NULL, NULL); g_return_val_if_fail(msginfo->folder != NULL, NULL); @@ -1068,8 +1065,8 @@ Compose *compose_forward(PrefsAccount *account, MsgInfo *msginfo, g_free(buf2); } - text = GTK_STEXT(compose->text); - gtk_stext_freeze(text); + textview = GTK_TEXT_VIEW(compose->text); + textbuf = gtk_text_view_get_buffer(textview); if (as_attach) { gchar *msgfile; @@ -1110,10 +1107,9 @@ Compose *compose_forward(PrefsAccount *account, MsgInfo *msginfo, if (prefs_common.linewrap_quote) compose_wrap_line_all(compose); - gtk_editable_set_position(GTK_EDITABLE(compose->text), 0); - gtk_stext_set_point(GTK_STEXT(compose->text), 0); + gtk_text_buffer_get_start_iter(textbuf, &iter); + gtk_text_buffer_place_cursor(textbuf, &iter); - gtk_stext_thaw(text); #if 0 /* NEW COMPOSE GUI */ if (account->protocol != A_NNTP) gtk_widget_grab_focus(compose->to_entry); @@ -1143,7 +1139,9 @@ Compose *compose_forward(PrefsAccount *account, MsgInfo *msginfo, Compose *compose_forward_multiple(PrefsAccount *account, GSList *msginfo_list) { Compose *compose; - GtkSText *text; + GtkTextView *textview; + GtkTextBuffer *textbuf; + GtkTextIter iter; GSList *msginfo; gchar *msgfile; @@ -1170,8 +1168,8 @@ Compose *compose_forward_multiple(PrefsAccount *account, GSList *msginfo_list) compose = compose_create(account, COMPOSE_FORWARD); - text = GTK_STEXT(compose->text); - gtk_stext_freeze(text); + textview = GTK_TEXT_VIEW(compose->text); + textbuf = gtk_text_view_get_buffer(textview); for (msginfo = msginfo_list; msginfo != NULL; msginfo = msginfo->next) { msgfile = procmsg_get_message_file_path((MsgInfo *)msginfo->data); @@ -1189,10 +1187,9 @@ Compose *compose_forward_multiple(PrefsAccount *account, GSList *msginfo_list) if (prefs_common.linewrap_quote) compose_wrap_line_all(compose); - gtk_editable_set_position(GTK_EDITABLE(compose->text), 0); - gtk_stext_set_point(GTK_STEXT(compose->text), 0); + gtk_text_buffer_get_start_iter(textbuf, &iter); + gtk_text_buffer_place_cursor(textbuf, &iter); - gtk_stext_thaw(text); gtk_widget_grab_focus(compose->header_last->entry); #if 0 /* NEW COMPOSE GUI */ @@ -1209,7 +1206,10 @@ void compose_reedit(MsgInfo *msginfo) { Compose *compose; PrefsAccount *account = NULL; - GtkSText *text; + GtkTextView *textview; + GtkTextBuffer *textbuf; + GtkTextMark *mark; + GtkTextIter iter; FILE *fp; gchar buf[BUFFSIZE]; @@ -1273,21 +1273,22 @@ void compose_reedit(MsgInfo *msginfo) if (compose_parse_header(compose, msginfo) < 0) return; compose_reedit_set_entry(compose, msginfo); - text = GTK_STEXT(compose->text); - gtk_stext_freeze(text); + textview = GTK_TEXT_VIEW(compose->text); + textbuf = gtk_text_view_get_buffer(textview); + mark = gtk_text_buffer_get_insert(textbuf); + gtk_text_buffer_get_iter_at_mark(textbuf, &iter, mark); if ((fp = procmime_get_first_text_content(msginfo)) == NULL) g_warning("Can't get text part\n"); else { while (fgets(buf, sizeof(buf), fp) != NULL) { strcrchomp(buf); - gtk_stext_insert(text, NULL, NULL, NULL, buf, -1); + gtk_text_buffer_insert(textbuf, &iter, buf, -1); } fclose(fp); } compose_attach_parts(compose, msginfo); - gtk_stext_thaw(text); gtk_widget_grab_focus(compose->text); if (prefs_common.auto_exteditor) @@ -1330,10 +1331,8 @@ Compose *compose_redirect(PrefsAccount *account, MsgInfo *msginfo) msginfo->subject); gtk_editable_set_editable(GTK_EDITABLE(compose->subject_entry), FALSE); - gtk_stext_freeze(GTK_STEXT(compose->text)); compose_quote_fmt(compose, msginfo, "%M", NULL, NULL); - gtk_editable_set_editable(GTK_EDITABLE(compose->text), FALSE); - gtk_stext_thaw(GTK_STEXT(compose->text)); + gtk_text_view_set_editable(GTK_TEXT_VIEW(compose->text), TRUE); ifactory = gtk_item_factory_from_widget(compose->popupmenu); menu_set_sensitive(ifactory, "/Add...", FALSE); @@ -1502,10 +1501,16 @@ static void compose_entries_set(Compose *compose, const gchar *mailto) if (subject) gtk_entry_set_text(GTK_ENTRY(compose->subject_entry), subject); if (body) { - gtk_stext_insert(GTK_STEXT(compose->text), - NULL, NULL, NULL, body, -1); - gtk_stext_insert(GTK_STEXT(compose->text), - NULL, NULL, NULL, "\n", 1); + GtkTextView *text = GTK_TEXT_VIEW(compose->text); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(text); + GtkTextMark *mark; + GtkTextIter iter; + + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark); + + gtk_text_buffer_insert(buffer, &iter, body, -1); + gtk_text_buffer_insert(buffer, &iter, "\n", 1); } g_free(to); @@ -1694,7 +1699,6 @@ static gchar *compose_quote_fmt(Compose *compose, MsgInfo *msginfo, const gchar *fmt, const gchar *qmark, const gchar *body) { - GtkSText *text = GTK_STEXT(compose->text); static MsgInfo dummyinfo; gchar *quote_str = NULL; gchar *buf; @@ -1734,20 +1738,24 @@ static gchar *compose_quote_fmt(Compose *compose, MsgInfo *msginfo, } else buf = ""; - gtk_stext_freeze(text); - for (p = buf; *p != '\0'; ) { + GtkTextView *text = GTK_TEXT_VIEW(compose->text); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(text); + GtkTextMark *mark; + GtkTextIter iter; + + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark); + lastp = strchr(p, '\n'); len = lastp ? lastp - p + 1 : -1; - gtk_stext_insert(text, NULL, NULL, NULL, p, len); + gtk_text_buffer_insert(buffer, &iter, p, len); if (lastp) p = lastp + 1; else break; } - gtk_stext_thaw(text); - return buf; } @@ -1917,33 +1925,38 @@ static void compose_reedit_set_entry(Compose *compose, MsgInfo *msginfo) static void compose_insert_sig(Compose *compose, gboolean replace) { - GtkSText *text = GTK_STEXT(compose->text); + GtkTextView *text = GTK_TEXT_VIEW(compose->text); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(text); + GtkTextMark *mark; + GtkTextIter iter; gint cur_pos; - gint len; g_return_if_fail(compose->account != NULL); - cur_pos = gtk_editable_get_position(GTK_EDITABLE(text)); - - gtk_stext_freeze(text); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark); + cur_pos = gtk_text_iter_get_offset (&iter); - len = gtk_stext_get_length(text); - gtk_stext_set_point(text, len); + gtk_text_buffer_get_end_iter(buffer, &iter); if (replace && compose->sig_str) { - gint pos; + gboolean found; + GtkTextIter first_iter, start_iter, end_iter; + + gtk_text_buffer_get_start_iter(buffer, &first_iter); if (compose->sig_str[0] == '\0') - pos = -1; + found = FALSE; else - pos = gtkut_stext_find(text, 0, compose->sig_str, TRUE); - - if (pos != -1) { - len = get_mbs_len(compose->sig_str); - if (len >= 0) { - gtk_stext_set_point(text, pos); - gtk_stext_forward_delete(text, len); - } + found = gtk_text_iter_forward_search(&first_iter, + compose->sig_str, + GTK_TEXT_SEARCH_TEXT_ONLY, + &start_iter, &end_iter, + NULL); + + if (found) { + gtk_text_buffer_delete(buffer, &start_iter, &end_iter); + iter = start_iter; } } @@ -1952,15 +1965,13 @@ static void compose_insert_sig(Compose *compose, gboolean replace) if (!compose->sig_str || (replace && !compose->account->auto_sig)) compose->sig_str = g_strdup(""); - gtk_stext_insert(text, NULL, NULL, NULL, compose->sig_str, -1); + gtk_text_buffer_insert(buffer, &iter, compose->sig_str, -1); - gtk_stext_thaw(text); + if (cur_pos > gtk_text_buffer_get_char_count (buffer)) + cur_pos = gtk_text_buffer_get_char_count (buffer); - if (cur_pos > gtk_stext_get_length(text)) - cur_pos = gtk_stext_get_length(text); - - gtk_editable_set_position(GTK_EDITABLE(text), cur_pos); - gtk_stext_set_point(text, cur_pos); + gtk_text_buffer_get_iter_at_offset (buffer, &iter, cur_pos); + gtk_text_buffer_place_cursor (buffer, &iter); } static gchar *compose_get_signature_str(Compose *compose) @@ -2006,7 +2017,10 @@ static gchar *compose_get_signature_str(Compose *compose) static void compose_insert_file(Compose *compose, const gchar *file) { - GtkSText *text = GTK_STEXT(compose->text); + GtkTextView *text; + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter iter; gchar buf[BUFFSIZE]; gint len; FILE *fp; @@ -2018,21 +2032,32 @@ static void compose_insert_file(Compose *compose, const gchar *file) return; } - gtk_stext_freeze(text); + text = GTK_TEXT_VIEW(compose->text); + buffer = gtk_text_view_get_buffer(text); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark); while (fgets(buf, sizeof(buf), fp) != NULL) { +#warning FIXME_GTK2 +#if 1 /* FIXME_GTK2 */ + const gchar *cur_encoding = conv_get_current_charset_str(); + gchar *str = conv_codeset_strdup(buf, cur_encoding, CS_UTF_8); + + if (!str) continue; + /* strip if DOS/Windows file, replace with if Macintosh file. */ - strcrchomp(buf); - len = strlen(buf); - if (len > 0 && buf[len - 1] != '\n') { + strcrchomp(str); + len = strlen(str); + if (len > 0 && str[len - 1] != '\n') { while (--len >= 0) - if (buf[len] == '\r') buf[len] = '\n'; + if (str[len] == '\r') str[len] = '\n'; } - gtk_stext_insert(text, NULL, NULL, NULL, buf, -1); - } + gtk_text_buffer_insert(buffer, &iter, str, -1); - gtk_stext_thaw(text); + g_free (str); +#endif /* FIXME_GTK2 */ + } fclose(fp); } @@ -2085,7 +2110,7 @@ static void compose_attach_append(Compose *compose, const gchar *file, if (!strcasecmp(content_type, "message/rfc822")) { MsgInfo *msginfo; MsgFlags flags = {0, 0}; - gchar *name; + const gchar *name; if (procmime_get_encoding_for_file(file) == ENC_7BIT) ainfo->encoding = ENC_7BIT; @@ -2193,108 +2218,132 @@ static void compose_attach_parts(Compose *compose, MsgInfo *msginfo) } #undef IS_FIRST_PART_TEXT + +#define CHAR_BUF_SIZE 8 -#define GET_CHAR(pos, buf, len) \ +#define GET_CHAR(iter_p, buf, len) \ { \ - if (text->use_wchar) \ - len = wctomb(buf, (wchar_t)GTK_STEXT_INDEX(text, (pos))); \ - else { \ - buf[0] = GTK_STEXT_INDEX(text, (pos)); \ + GtkTextIter end_iter; \ + gchar *tmp; \ + end_iter = *iter_p; \ + gtk_text_iter_forward_char(&end_iter); \ + tmp = gtk_text_buffer_get_text(textbuf, iter_p, &end_iter, FALSE); \ + if (tmp) { \ + glong items_read, items_witten; \ + GError *error = NULL; \ + gunichar *wide_char; \ + strncpy2(buf, tmp, CHAR_BUF_SIZE); \ + wide_char = g_utf8_to_ucs4(tmp, -1, \ + &items_read, &items_witten, \ + &error); \ + if (error != NULL) { \ + g_warning("%s\n", error->message); \ + g_error_free(error); \ + } \ + len = wide_char && g_unichar_iswide(*wide_char) ? 2 : 1; \ + g_free(wide_char); \ + } else { \ + buf[0] = '\0'; \ len = 1; \ } \ + g_free(tmp); \ } -#define DISP_WIDTH(len) \ - ((len > 2 && conv_get_current_charset() == C_UTF_8) ? 2 : \ - (len == 2 && conv_get_current_charset() == C_UTF_8) ? 1 : len) - #define INDENT_CHARS ">|#" #define SPACE_CHARS " \t" +#warning FIXME_GTK2 static void compose_wrap_line(Compose *compose) { - GtkSText *text = GTK_STEXT(compose->text); + GtkTextView *text = GTK_TEXT_VIEW(compose->text); + GtkTextBuffer *textbuf = gtk_text_view_get_buffer(text); + GtkTextMark *mark; + GtkTextIter insert_iter, iter; gint ch_len, last_ch_len; - gchar cbuf[MB_LEN_MAX], last_ch; + gchar cbuf[CHAR_BUF_SIZE], last_ch; guint text_len; - guint line_end; - guint quoted; gint p_start, p_end; gint line_pos, cur_pos; gint line_len, cur_len; + gboolean line_end, quoted; - gtk_stext_freeze(text); - - text_len = gtk_stext_get_length(text); - - /* check to see if the point is on the paragraph mark (empty line). */ - cur_pos = gtk_stext_get_point(text); - GET_CHAR(cur_pos, cbuf, ch_len); + text_len = gtk_text_buffer_get_char_count(textbuf); + mark = gtk_text_buffer_get_insert(textbuf); + gtk_text_buffer_get_iter_at_mark(textbuf, &insert_iter, mark); + cur_pos = gtk_text_iter_get_offset(&insert_iter); + GET_CHAR(&insert_iter, cbuf, ch_len); if ((ch_len == 1 && *cbuf == '\n') || cur_pos == text_len) { + GtkTextIter prev_iter; if (cur_pos == 0) - goto compose_end; /* on the paragraph mark */ - GET_CHAR(cur_pos - 1, cbuf, ch_len); + return; /* on the paragraph mark */ + prev_iter = insert_iter; + gtk_text_iter_backward_char(&prev_iter); + GET_CHAR(&prev_iter, cbuf, ch_len); if (ch_len == 1 && *cbuf == '\n') - goto compose_end; /* on the paragraph mark */ + return; /* on the paragraph mark */ } /* find paragraph start. */ - line_end = quoted = 0; - for (p_start = cur_pos; p_start >= 0; --p_start) { - GET_CHAR(p_start, cbuf, ch_len); + line_end = quoted = FALSE; + for (iter = insert_iter; gtk_text_iter_backward_char(&iter);) { + GET_CHAR(&iter, cbuf, ch_len); if (ch_len == 1 && *cbuf == '\n') { if (quoted) - goto compose_end; /* quoted part */ + return; /* quoted part */ if (line_end) { - p_start += 2; + gtk_text_iter_forward_chars(&iter, 2); break; } - line_end = 1; + line_end = TRUE; } else { if (ch_len == 1 && strchr(prefs_common.quote_chars, *cbuf)) - quoted = 1; + quoted = TRUE; else if (ch_len != 1 || !isspace(*cbuf)) - quoted = 0; + quoted = FALSE; - line_end = 0; + line_end = FALSE; } } - if (p_start < 0) - p_start = 0; + p_start = gtk_text_iter_get_offset(&iter); /* find paragraph end. */ - line_end = 0; - for (p_end = cur_pos; p_end < text_len; p_end++) { - GET_CHAR(p_end, cbuf, ch_len); + line_end = FALSE; + for (iter = insert_iter; gtk_text_iter_forward_char(&iter);) { + GET_CHAR(&iter, cbuf, ch_len); if (ch_len == 1 && *cbuf == '\n') { if (line_end) { p_end -= 1; + gtk_text_iter_backward_char(&iter); break; } - line_end = 1; + line_end = TRUE; } else { if (line_end && ch_len == 1 && strchr(prefs_common.quote_chars, *cbuf)) - goto compose_end; /* quoted part */ + return; /* quoted part */ - line_end = 0; + line_end = FALSE; } } + p_end = gtk_text_iter_get_offset(&iter); + if (p_end >= text_len) p_end = text_len; if (p_start >= p_end) - goto compose_end; + return; line_len = cur_len = 0; last_ch_len = 0; last_ch = '\0'; line_pos = p_start; for (cur_pos = p_start; cur_pos < p_end; cur_pos++) { - guint space = 0; + gboolean space = FALSE; + + gtk_text_buffer_get_iter_at_offset(textbuf, &iter, cur_pos); - GET_CHAR(cur_pos, cbuf, ch_len); + GET_CHAR(&iter, cbuf, ch_len); if (ch_len < 0) { cbuf[0] = '\0'; @@ -2302,27 +2351,31 @@ static void compose_wrap_line(Compose *compose) } if (ch_len == 1 && isspace(*cbuf)) - space = 1; + space = TRUE; if (ch_len == 1 && *cbuf == '\n') { - guint replace = 0; + gboolean replace = FALSE; + GtkTextIter next_iter = iter; + + gtk_text_iter_forward_char(&next_iter); + if (last_ch_len == 1 && !isspace(last_ch)) { if (cur_pos + 1 < p_end) { - GET_CHAR(cur_pos + 1, cbuf, ch_len); + GET_CHAR(&next_iter, cbuf, ch_len); if (ch_len == 1 && !isspace(*cbuf)) - replace = 1; + replace = TRUE; } } - gtk_stext_set_point(text, cur_pos + 1); - gtk_stext_backward_delete(text, 1); + gtk_text_buffer_delete(textbuf, &iter, &next_iter); if (replace) { - gtk_stext_set_point(text, cur_pos); - gtk_stext_insert(text, NULL, NULL, NULL, " ", 1); - space = 1; + gtk_text_buffer_insert(textbuf, &iter, " ", 1); + space = TRUE; } else { p_end--; cur_pos--; + gtk_text_buffer_get_iter_at_offset + (textbuf, &iter, cur_pos); continue; } } @@ -2335,14 +2388,19 @@ static void compose_wrap_line(Compose *compose) line_len = cur_len + ch_len; } - if (cur_len + DISP_WIDTH(ch_len) > prefs_common.linewrap_len && + gtk_text_buffer_get_iter_at_offset(textbuf, &iter, line_pos); + + if (cur_len + ch_len > prefs_common.linewrap_len && line_len > 0) { gint tlen = ch_len; + GtkTextIter prev_iter = iter; + + gtk_text_iter_backward_char(&prev_iter); - GET_CHAR(line_pos - 1, cbuf, ch_len); + GET_CHAR(&prev_iter, cbuf, ch_len); if (ch_len == 1 && isspace(*cbuf)) { - gtk_stext_set_point(text, line_pos); - gtk_stext_backward_delete(text, 1); + gtk_text_buffer_delete(textbuf, &prev_iter, &iter); + iter = prev_iter; p_end--; cur_pos--; line_pos--; @@ -2351,38 +2409,37 @@ static void compose_wrap_line(Compose *compose) } ch_len = tlen; - gtk_stext_set_point(text, line_pos); - gtk_stext_insert(text, NULL, NULL, NULL, "\n", 1); + gtk_text_buffer_insert(textbuf, &iter, "\n", 1); p_end++; cur_pos++; line_pos++; - cur_len = cur_len - line_len + DISP_WIDTH(ch_len); + cur_len = cur_len - line_len + ch_len; line_len = 0; continue; } if (ch_len > 1) { line_pos = cur_pos + 1; - line_len = cur_len + DISP_WIDTH(ch_len); + line_len = cur_len + ch_len; } - cur_len += DISP_WIDTH(ch_len); + cur_len += ch_len; } - -compose_end: - gtk_stext_thaw(text); } #undef WRAP_DEBUG #ifdef WRAP_DEBUG /* Darko: used when I debug wrapping */ -void dump_text(GtkSText *text, int pos, int tlen, int breakoncr) +void dump_text(GtkTextBuffer textbuf, int pos, int tlen, int breakoncr) { gint i, clen; - gchar cbuf[MB_LEN_MAX]; + gchar cbuf[CHAR_BUF_SIZE]; printf("%d [", pos); - for (i = pos; i < tlen; i++) { - GET_CHAR(i, cbuf, clen); + gtk_text_buffer_get_iter_at_offset(textbuf, &iter, pos); + gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter, pos + tlen); + for (; gtk_text_iter_forward_char(&iter) && + gtk_text_iter_compare(&iter, &end_iter) < 0;) + GET_CHAR(&iter, cbuf, clen); if (clen < 0) break; if (breakoncr && clen == 1 && cbuf[0] == '\n') break; @@ -2404,12 +2461,12 @@ typedef enum { uppercase characters immediately followed by >, and the repeating sequences of the above */ /* return indent length */ -static guint get_indent_length(GtkSText *text, guint start_pos, guint text_len) +static guint get_indent_length(GtkTextBuffer *textbuf, guint start_pos, guint text_len) { guint i_len = 0; guint i, ch_len, alnum_cnt = 0; IndentState state = WAIT_FOR_INDENT_CHAR; - gchar cbuf[MB_LEN_MAX]; + gchar cbuf[CHAR_BUF_SIZE]; gboolean is_space; gboolean is_indent; @@ -2418,7 +2475,10 @@ static guint get_indent_length(GtkSText *text, guint start_pos, guint text_len) } for (i = start_pos; i < text_len; i++) { - GET_CHAR(i, cbuf, ch_len); + GtkTextIter iter; + + gtk_text_buffer_get_iter_at_offset(textbuf, &iter, i); + GET_CHAR(&iter, cbuf, ch_len); if (ch_len > 1) break; @@ -2475,36 +2535,49 @@ out: } /* insert quotation string when line was wrapped */ -static guint ins_quote(GtkSText *text, guint indent_len, +static guint ins_quote(GtkTextBuffer *textbuf, GtkTextIter *iter, + guint indent_len, guint prev_line_pos, guint text_len, gchar *quote_fmt) { - guint i, ins_len = 0; - gchar ch; + guint ins_len = 0; if (indent_len) { - for (i = 0; i < indent_len; i++) { - ch = GTK_STEXT_INDEX(text, prev_line_pos + i); - gtk_stext_insert(text, NULL, NULL, NULL, &ch, 1); - } - ins_len = indent_len; + GtkTextIter iter1, iter2; + gchar *text; + + gtk_text_buffer_get_iter_at_offset(textbuf, &iter1, + prev_line_pos); + gtk_text_buffer_get_iter_at_offset(textbuf, &iter2, + prev_line_pos + indent_len); + text = gtk_text_buffer_get_text(textbuf, &iter1, &iter2, FALSE); + if (!text) return 0; + + gtk_text_buffer_insert(textbuf, iter, text, -1); + ins_len = g_utf8_strlen(text, -1); + + g_free(text); } return ins_len; } /* check if we should join the next line */ -static gboolean join_next_line(GtkSText *text, guint start_pos, guint tlen, - guint prev_ilen, gboolean autowrap) +static gboolean join_next_line_is_needed(GtkTextBuffer *textbuf, + guint start_pos, guint tlen, + guint prev_ilen, gboolean autowrap) { guint indent_len, ch_len; gboolean do_join = FALSE; - gchar cbuf[MB_LEN_MAX]; + gchar cbuf[CHAR_BUF_SIZE]; - indent_len = get_indent_length(text, start_pos, tlen); + indent_len = get_indent_length(textbuf, start_pos, tlen); if ((autowrap || indent_len > 0) && indent_len == prev_ilen) { - GET_CHAR(start_pos + indent_len, cbuf, ch_len); + GtkTextIter iter; + gtk_text_buffer_get_iter_at_offset(textbuf, &iter, + start_pos + indent_len); + GET_CHAR(&iter, cbuf, ch_len); if (ch_len > 0 && (cbuf[0] != '\n')) do_join = TRUE; } @@ -2517,12 +2590,12 @@ static void compose_wrap_line_all(Compose *compose) compose_wrap_line_all_full(compose, FALSE); } -#define STEXT_FREEZE() \ - if (!frozen) { gtk_stext_freeze(text); frozen = TRUE; } - static void compose_wrap_line_all_full(Compose *compose, gboolean autowrap) { - GtkSText *text = GTK_STEXT(compose->text); +#if 0 + GtkTextView *text = GTK_TEXT_VIEW(compose->text); + GtkTextBuffer *textbuf = gtk_text_view_get_buffer(text); + GtkTextIter iter, end_iter; guint tlen; guint line_pos = 0, cur_pos = 0, p_pos = 0; gint line_len = 0, cur_len = 0; @@ -2532,104 +2605,96 @@ static void compose_wrap_line_all_full(Compose *compose, gboolean autowrap) gboolean linewrap_quote = TRUE; gboolean set_editable_pos = FALSE; gint editable_pos = 0; - gboolean frozen = FALSE; guint linewrap_len = prefs_common.linewrap_len; gchar *qfmt = prefs_common.quotemark; - gchar cbuf[MB_LEN_MAX]; + gchar cbuf[CHAR_BUF_SIZE]; - tlen = gtk_stext_get_length(text); + tlen = gtk_text_buffer_get_char_count(textbuf); for (; cur_pos < tlen; cur_pos++) { /* mark position of new line - needed for quotation wrap */ if (is_new_line) { if (linewrap_quote) - i_len = get_indent_length(text, cur_pos, tlen); + i_len = get_indent_length(textbuf, cur_pos, tlen); is_new_line = FALSE; p_pos = cur_pos; -#ifdef WRAP_DEBUG - g_print("new line i_len=%d p_pos=", i_len); - dump_text(text, p_pos, tlen, 1); -#endif } - GET_CHAR(cur_pos, cbuf, ch_len); + gtk_text_buffer_get_iter_at_offset(textbuf, &iter, cur_pos); + GET_CHAR(&iter, cbuf, ch_len); /* fix line length for tabs */ if (ch_len == 1 && *cbuf == '\t') { - guint tab_width = text->default_tab_width; +#warning FIXME_GTK2 + /* guint tab_width = text->default_tab_width; */ + guint tab_width = 8; guint tab_offset = line_len % tab_width; -#ifdef WRAP_DEBUG - g_print("found tab at pos=%d line_len=%d ", cur_pos, - line_len); -#endif if (tab_offset) { line_len += tab_width - tab_offset - 1; cur_len = line_len; } -#ifdef WRAP_DEBUG - printf("new_len=%d\n", line_len); -#endif } /* we have encountered line break */ if (ch_len == 1 && *cbuf == '\n') { gint clen; - gchar cb[MB_LEN_MAX]; + gchar cb[CHAR_BUF_SIZE]; /* should we join the next line */ if ((autowrap || i_len != cur_len) && do_delete && - join_next_line - (text, cur_pos + 1, tlen, i_len, autowrap)) + join_next_line_is_needed + (textbuf, cur_pos + 1, tlen, i_len, autowrap)) do_delete = TRUE; else do_delete = FALSE; -#ifdef WRAP_DEBUG - g_print("found CR at %d do_del is %d next line is ", - cur_pos, do_delete); - dump_text(text, cur_pos + 1, tlen, 1); -#endif - /* skip delete if it is continuous URL */ if (do_delete && (line_pos - p_pos <= i_len) && - gtk_stext_is_uri_string(text, line_pos, tlen)) + gtkut_text_buffer_is_uri_string(textbuf, line_pos, + tlen)) do_delete = FALSE; -#ifdef WRAP_DEBUG - g_print("l_len=%d wrap_len=%d do_del=%d\n", - line_len, linewrap_len, do_delete); -#endif /* should we delete to perform smart wrapping */ if (line_len < linewrap_len && do_delete) { - STEXT_FREEZE(); /* get rid of newline */ - gtk_stext_set_point(text, cur_pos); - gtk_stext_forward_delete(text, 1); + gtk_text_buffer_get_iter_at_offset(textbuf, + &iter, + cur_pos); + end_iter = iter; + gtk_text_iter_forward_char(&end_iter); + gtk_text_buffer_delete(textbuf, &iter, &end_iter); tlen--; /* if text starts with quote fmt or with indent string, delete them */ if (i_len) { guint ilen; - ilen = gtk_stext_str_compare_n - (text, cur_pos, p_pos, i_len, + ilen = gtkut_text_buffer_str_compare_n + (textbuf, cur_pos, p_pos, i_len, tlen); if (ilen) { - gtk_stext_forward_delete - (text, ilen); + end_iter = iter; + gtk_text_iter_forward_chars + (&end_iter, ilen); + gtk_text_buffer_delete(textbuf, + &iter, + &end_iter); tlen -= ilen; } } - GET_CHAR(cur_pos, cb, clen); + gtk_text_buffer_get_iter_at_offset(textbuf, + &iter, + cur_pos); + GET_CHAR(&iter, cb, clen); /* insert space if it's alphanumeric */ if ((cur_pos != line_pos) && ((clen > 1) || isalnum(cb[0]))) { - gtk_stext_insert(text, NULL, NULL, - NULL, " ", 1); + gtk_text_buffer_insert(textbuf, &iter, + " ", 1); tlen++; } @@ -2772,21 +2837,21 @@ static void compose_wrap_line_all_full(Compose *compose, gboolean autowrap) if (ch_len > 1) { line_pos = cur_pos + 1; - line_len = cur_len + DISP_WIDTH(ch_len); + line_len = cur_len + ch_len; } /* advance to next character in buffer */ - cur_len += DISP_WIDTH(ch_len); + cur_len += ch_len; } - if (frozen) - gtk_stext_thaw(text); - - if (set_editable_pos && editable_pos <= tlen) - gtk_editable_set_position(GTK_EDITABLE(text), editable_pos); + if (set_editable_pos && editable_pos <= tlen) { + gtk_text_buffer_get_iter_at_offset(textbuf, &iter, editable_pos); + gtk_text_buffer_place_cursor(textbuf, &iter); + } +#endif } -#undef STEXT_FREEZE #undef GET_CHAR +#undef CHAR_BUF_SIZE static void compose_set_title(Compose *compose) { @@ -2966,7 +3031,7 @@ gboolean compose_check_for_valid_recipient(Compose *compose) { static gboolean compose_check_entries(Compose *compose, gboolean check_subject) { - gchar *str; + const gchar *str; if (compose_check_for_valid_recipient(compose) == FALSE) { alertpanel_error(_("Recipient is not specified.")); @@ -3147,7 +3212,7 @@ static gint compose_redirect_write_headers_from_headerlist(Compose *compose, gboolean first_address; GSList *list; ComposeHeaderEntry *headerentry; - gchar *headerentryname; + const gchar *headerentryname; gchar *cc_hdr; gchar *to_hdr; @@ -3163,8 +3228,8 @@ static gint compose_redirect_write_headers_from_headerlist(Compose *compose, if (g_strcasecmp(headerentryname, cc_hdr) == 0 || g_strcasecmp(headerentryname, to_hdr) == 0) { - str = gtk_entry_get_text(GTK_ENTRY(headerentry->entry)); - Xstrdup_a(str, str, return -1); + const gchar *entstr = gtk_entry_get_text(GTK_ENTRY(headerentry->entry)); + Xstrdup_a(str, entstr, return -1); g_strstrip(str); if (str[0] != '\0') { compose_convert_header @@ -3191,6 +3256,7 @@ static gint compose_redirect_write_headers(Compose *compose, FILE *fp) { gchar buf[BUFFSIZE]; gchar *str; + const gchar *entstr; /* struct utsname utsbuf; */ g_return_val_if_fail(fp != NULL, -1); @@ -3212,9 +3278,9 @@ static gint compose_redirect_write_headers(Compose *compose, FILE *fp) fprintf(fp, "Resent-From: %s\n", compose->account->address); /* Subject */ - str = gtk_entry_get_text(GTK_ENTRY(compose->subject_entry)); - if (*str != '\0') { - Xstrdup_a(str, str, return -1); + entstr = gtk_entry_get_text(GTK_ENTRY(compose->subject_entry)); + if (*entstr != '\0') { + Xstrdup_a(str, entstr, return -1); g_strstrip(str); if (*str != '\0') { compose_convert_header(buf, sizeof(buf), str, @@ -3397,6 +3463,8 @@ static gint compose_clearsign_text(Compose *compose, gchar **text) static gint compose_write_to_file(Compose *compose, const gchar *file, gboolean is_draft) { + GtkTextBuffer *buffer; + GtkTextIter start, end; FILE *fp; size_t len; gchar *chars; @@ -3417,7 +3485,10 @@ static gint compose_write_to_file(Compose *compose, const gchar *file, } /* get all composed text */ - chars = gtk_editable_get_chars(GTK_EDITABLE(compose->text), 0, -1); + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(compose->text)); + gtk_text_buffer_get_start_iter(buffer, &start); + gtk_text_buffer_get_end_iter(buffer, &end); + chars = gtk_text_buffer_get_text(buffer, &start, &end, FALSE); len = strlen(chars); if (is_ascii_str(chars)) { buf = chars; @@ -3447,11 +3518,16 @@ static gint compose_write_to_file(Compose *compose, const gchar *file, encoding = ENC_BASE64; #endif +#warning FIXME_GTK2 +#if 0 /* FIXME_GTK2 */ src_codeset = conv_get_current_charset_str(); /* if current encoding is US-ASCII, set it the same as outgoing one to prevent code conversion failure */ if (!strcasecmp(src_codeset, CS_US_ASCII)) src_codeset = out_codeset; +#else /* FIXME_GTK2 */ + src_codeset = CS_UTF_8; +#endif /* FIXME_GTK2 */ debug_print("src encoding = %s, out encoding = %s, transfer encoding = %s\n", src_codeset, out_codeset, procmime_get_encoding_str(encoding)); @@ -3614,9 +3690,12 @@ static gint compose_write_to_file(Compose *compose, const gchar *file, static gint compose_write_body_to_file(Compose *compose, const gchar *file) { + GtkTextBuffer *buffer; + GtkTextIter start, end; FILE *fp; size_t len; - gchar *chars; + gchar *chars, *tmp; + const gchar *src_codeset, *dest_codeset; if ((fp = fopen(file, "wb")) == NULL) { FILE_OP_ERROR(file, "fopen"); @@ -3629,7 +3708,19 @@ static gint compose_write_body_to_file(Compose *compose, const gchar *file) g_warning("can't change file mode\n"); } - chars = gtk_editable_get_chars(GTK_EDITABLE(compose->text), 0, -1); + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(compose->text)); + gtk_text_buffer_get_start_iter(buffer, &start); + gtk_text_buffer_get_end_iter(buffer, &end); + tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE); + +#warning FIXME_GTK2 +#if 1 /* FIXME_GTK2 */ + src_codeset = CS_UTF_8; + dest_codeset = conv_get_current_charset_str(); + chars = conv_codeset_strdup(tmp, src_codeset, dest_codeset); + g_free(tmp); + if (!chars) return -1; +#endif /* FIXME_GTK2 */ /* write body */ len = strlen(chars); @@ -3995,21 +4086,22 @@ static void compose_write_attach(Compose *compose, FILE *fp) Xstrdup_a(out, str, return -1); \ } \ } - -#define PUT_RECIPIENT_HEADER(header, str) \ -{ \ - if (*str != '\0') { \ - Xstrdup_a(str, str, return -1); \ - g_strstrip(str); \ - if (*str != '\0') { \ - compose->to_list = address_list_append \ - (compose->to_list, str); \ - compose_convert_header \ - (buf, sizeof(buf), str, strlen(header) + 2, \ - TRUE); \ - fprintf(fp, "%s: %s\n", header, buf); \ - } \ - } \ + +#define PUT_RECIPIENT_HEADER(header, str) \ +{ \ + if (*str != '\0') { \ + gchar *dest; \ + Xstrdup_a(dest, str, return -1); \ + g_strstrip(dest); \ + if (*dest != '\0') { \ + compose->to_list = address_list_append \ + (compose->to_list, dest); \ + compose_convert_header \ + (buf, sizeof(buf), dest, strlen(header) + 2, \ + TRUE); \ + fprintf(fp, "%s: %s\n", header, buf); \ + } \ + } \ } #define IS_IN_CUSTOM_HEADER(header) \ @@ -4025,7 +4117,7 @@ static gint compose_write_headers_from_headerlist(Compose *compose, gboolean first_address; GSList *list; ComposeHeaderEntry *headerentry; - gchar * headerentryname; + const gchar * headerentryname; if (IS_IN_CUSTOM_HEADER(header)) { return 0; @@ -4042,8 +4134,8 @@ static gint compose_write_headers_from_headerlist(Compose *compose, headerentryname = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(headerentry->combo)->entry)); if (!g_strcasecmp(trans_hdr, headerentryname)) { - str = gtk_entry_get_text(GTK_ENTRY(headerentry->entry)); - Xstrdup_a(str, str, return -1); + const gchar *entstr = gtk_entry_get_text(GTK_ENTRY(headerentry->entry)); + Xstrdup_a(str, entstr, return -1); g_strstrip(str); if (str[0] != '\0') { compose_convert_header @@ -4073,6 +4165,7 @@ static gint compose_write_headers(Compose *compose, FILE *fp, gboolean is_draft) { gchar buf[BUFFSIZE]; + const gchar *entry_str; gchar *str; gchar *name; GSList *list; @@ -4122,8 +4215,8 @@ static gint compose_write_headers(Compose *compose, FILE *fp, compose_write_headers_from_headerlist(compose, fp, "To"); #if 0 /* NEW COMPOSE GUI */ if (compose->use_to) { - str = gtk_entry_get_text(GTK_ENTRY(compose->to_entry)); - PUT_RECIPIENT_HEADER("To", str); + entry_str = gtk_entry_get_text(GTK_ENTRY(compose->to_entry)); + PUT_RECIPIENT_HEADER("To", entry_str); } #endif @@ -4131,9 +4224,9 @@ static gint compose_write_headers(Compose *compose, FILE *fp, compose_write_headers_from_headerlist(compose, fp, "Newsgroups"); #if 0 /* NEW COMPOSE GUI */ if (compose->use_newsgroups) { - str = gtk_entry_get_text(GTK_ENTRY(compose->newsgroups_entry)); - if (*str != '\0') { - Xstrdup_a(str, str, return -1); + entry_str = gtk_entry_get_text(GTK_ENTRY(compose->newsgroups_entry)); + if (*entry_str != '\0') { + Xstrdup_a(str, entry_str, return -1); g_strstrip(str); remove_space(str); if (*str != '\0') { @@ -4166,9 +4259,9 @@ static gint compose_write_headers(Compose *compose, FILE *fp, #endif /* Subject */ - str = gtk_entry_get_text(GTK_ENTRY(compose->subject_entry)); - if (*str != '\0' && !IS_IN_CUSTOM_HEADER("Subject")) { - Xstrdup_a(str, str, return -1); + entry_str = gtk_entry_get_text(GTK_ENTRY(compose->subject_entry)); + if (*entry_str != '\0' && !IS_IN_CUSTOM_HEADER("Subject")) { + Xstrdup_a(str, entry_str, return -1); g_strstrip(str); if (*str != '\0') { compose_convert_header(buf, sizeof(buf), str, @@ -4198,9 +4291,9 @@ static gint compose_write_headers(Compose *compose, FILE *fp, compose_write_headers_from_headerlist(compose, fp, "Followup-To"); #if 0 /* NEW COMPOSE GUI */ if (compose->use_followupto && !IS_IN_CUSTOM_HEADER("Followup-To")) { - str = gtk_entry_get_text(GTK_ENTRY(compose->followup_entry)); - if (*str != '\0') { - Xstrdup_a(str, str, return -1); + entry_str = gtk_entry_get_text(GTK_ENTRY(compose->followup_entry)); + if (*entry_str != '\0') { + Xstrdup_a(str, entry_str, return -1); g_strstrip(str); remove_space(str); if (*str != '\0') { @@ -4216,9 +4309,9 @@ static gint compose_write_headers(Compose *compose, FILE *fp, compose_write_headers_from_headerlist(compose, fp, "Reply-To"); #if 0 /* NEW COMPOSE GUI */ if (compose->use_replyto && !IS_IN_CUSTOM_HEADER("Reply-To")) { - str = gtk_entry_get_text(GTK_ENTRY(compose->reply_entry)); - if (*str != '\0') { - Xstrdup_a(str, str, return -1); + entry_str = gtk_entry_get_text(GTK_ENTRY(compose->reply_entry)); + if (*entry_str != '\0') { + Xstrdup_a(str, entry_str, return -1); g_strstrip(str); if (*str != '\0') { compose_convert_header(buf, sizeof(buf), str, @@ -4363,7 +4456,8 @@ static gint compose_write_headers(Compose *compose, FILE *fp, } g_free(tmp); - headervalue = gtk_entry_get_text(GTK_ENTRY(headerentry->entry)); + entry_str = gtk_entry_get_text(GTK_ENTRY(headerentry->entry)); + Xstrdup_a(headervalue, entry_str, return -1); subst_char(headervalue, '\r', ' '); subst_char(headervalue, '\n', ' '); string = std_headers; @@ -4441,7 +4535,8 @@ static void compose_create_header_entry(Compose *compose) GtkWidget *combo; GtkWidget *entry; GList *combo_list = NULL; - gchar **string, *header = NULL; + gchar **string; + const gchar *header = NULL; ComposeHeaderEntry *headerentry; gboolean standard_header = FALSE; @@ -4460,7 +4555,7 @@ static void compose_create_header_entry(Compose *compose) gtk_widget_show(combo); gtk_table_attach(GTK_TABLE(compose->header_table), combo, 0, 1, compose->header_nextrow, compose->header_nextrow+1, GTK_SHRINK, GTK_FILL, 0, 0); if (compose->header_last) { - gchar *last_header_entry = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(compose->header_last->combo)->entry)); + const gchar *last_header_entry = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(compose->header_last->combo)->entry)); string = headers; while (*string != NULL) { if (!strcmp(*string, last_header_entry)) @@ -4596,35 +4691,35 @@ static GtkWidget *compose_create_header(Compose *compose) gtk_table_set_col_spacings(GTK_TABLE(table), 4); - gtk_signal_connect(GTK_OBJECT(to_entry), "activate", - GTK_SIGNAL_FUNC(to_activated), compose); - gtk_signal_connect(GTK_OBJECT(newsgroups_entry), "activate", - GTK_SIGNAL_FUNC(newsgroups_activated), compose); - gtk_signal_connect(GTK_OBJECT(subject_entry), "activate", - GTK_SIGNAL_FUNC(subject_activated), compose); - gtk_signal_connect(GTK_OBJECT(cc_entry), "activate", - GTK_SIGNAL_FUNC(cc_activated), compose); - gtk_signal_connect(GTK_OBJECT(bcc_entry), "activate", - GTK_SIGNAL_FUNC(bcc_activated), compose); - gtk_signal_connect(GTK_OBJECT(reply_entry), "activate", - GTK_SIGNAL_FUNC(replyto_activated), compose); - gtk_signal_connect(GTK_OBJECT(followup_entry), "activate", - GTK_SIGNAL_FUNC(followupto_activated), compose); - - gtk_signal_connect(GTK_OBJECT(subject_entry), "grab_focus", - GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); - gtk_signal_connect(GTK_OBJECT(to_entry), "grab_focus", - GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); - gtk_signal_connect(GTK_OBJECT(newsgroups_entry), "grab_focus", - GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); - gtk_signal_connect(GTK_OBJECT(cc_entry), "grab_focus", - GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); - gtk_signal_connect(GTK_OBJECT(bcc_entry), "grab_focus", - GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); - gtk_signal_connect(GTK_OBJECT(reply_entry), "grab_focus", - GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); - gtk_signal_connect(GTK_OBJECT(followup_entry), "grab_focus", - GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); + g_signal_connect(G_OBJECT(to_entry), "activate", + G_CALLBACK(to_activated), compose); + g_signal_connect(G_OBJECT(newsgroups_entry), "activate", + G_CALLBACK(newsgroups_activated), compose); + g_signal_connect(G_OBJECT(subject_entry), "activate", + G_CALLBACK(subject_activated), compose); + g_signal_connect(G_OBJECT(cc_entry), "activate", + G_CALLBACK(cc_activated), compose); + g_signal_connect(G_OBJECT(bcc_entry), "activate", + G_CALLBACK(bcc_activated), compose); + g_signal_connect(G_OBJECT(reply_entry), "activate", + G_CALLBACK(replyto_activated), compose); + g_signal_connect(G_OBJECT(followup_entry), "activate", + G_CALLBACK(followupto_activated), compose); + + g_signal_connect(G_OBJECT(subject_entry), "grab_focus", + G_CALLBACK(compose_grab_focus_cb), compose); + g_signal_connect(G_OBJECT(to_entry), "grab_focus", + G_CALLBACK(compose_grab_focus_cb), compose); + g_signal_connect(G_OBJECT(newsgroups_entry), "grab_focus", + G_CALLBACK(compose_grab_focus_cb), compose); + g_signal_connect(G_OBJECT(cc_entry), "grab_focus", + G_CALLBACK(compose_grab_focus_cb), compose); + g_signal_connect(G_OBJECT(bcc_entry), "grab_focus", + G_CALLBACK(compose_grab_focus_cb), compose); + g_signal_connect(G_OBJECT(reply_entry), "grab_focus", + G_CALLBACK(compose_grab_focus_cb), compose); + g_signal_connect(G_OBJECT(followup_entry), "grab_focus", + G_CALLBACK(compose_grab_focus_cb), compose); #endif compose->table = NULL; @@ -4666,7 +4761,7 @@ GtkWidget *compose_create_attach(Compose *compose) gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(attach_scrwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); - gtk_widget_set_usize(attach_scrwin, -1, 80); + gtk_widget_set_size_request(attach_scrwin, -1, 80); attach_clist = gtk_clist_new_with_titles(N_ATTACH_COLS, titles); gtk_clist_set_column_justification(GTK_CLIST(attach_clist), COL_SIZE, @@ -4681,20 +4776,20 @@ GtkWidget *compose_create_attach(Compose *compose) GTK_CAN_FOCUS); gtk_container_add(GTK_CONTAINER(attach_scrwin), attach_clist); - gtk_signal_connect(GTK_OBJECT(attach_clist), "select_row", - GTK_SIGNAL_FUNC(attach_selected), compose); - gtk_signal_connect(GTK_OBJECT(attach_clist), "button_press_event", - GTK_SIGNAL_FUNC(attach_button_pressed), compose); - gtk_signal_connect(GTK_OBJECT(attach_clist), "key_press_event", - GTK_SIGNAL_FUNC(attach_key_pressed), compose); + g_signal_connect(G_OBJECT(attach_clist), "select_row", + G_CALLBACK(attach_selected), compose); + g_signal_connect(G_OBJECT(attach_clist), "button_press_event", + G_CALLBACK(attach_button_pressed), compose); + g_signal_connect(G_OBJECT(attach_clist), "key_press_event", + G_CALLBACK(attach_key_pressed), compose); /* drag and drop */ gtk_drag_dest_set(attach_clist, GTK_DEST_DEFAULT_ALL, compose_mime_types, 1, GDK_ACTION_COPY | GDK_ACTION_MOVE); - gtk_signal_connect(GTK_OBJECT(attach_clist), "drag_data_received", - GTK_SIGNAL_FUNC(compose_attach_drag_received_cb), - compose); + g_signal_connect(G_OBJECT(attach_clist), "drag_data_received", + G_CALLBACK(compose_attach_drag_received_cb), + compose); compose->attach_scrwin = attach_scrwin; compose->attach_clist = attach_clist; @@ -4801,6 +4896,8 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode) GtkWidget *ruler; GtkWidget *scrolledwin; GtkWidget *text; + GtkTextBuffer *buffer; + GtkClipboard *clipboard; UndoMain *undostruct; @@ -4835,7 +4932,7 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode) window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE); - gtk_widget_set_usize(window, -1, prefs_common.compose_height); + gtk_widget_set_size_request(window, -1, prefs_common.compose_height); gtk_window_set_wmclass(GTK_WINDOW(window), "compose window", "Sylpheed"); if (!geometry.max_width) { @@ -4845,10 +4942,10 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode) gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL, &geometry, GDK_HINT_MAX_SIZE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(compose_delete_cb), compose); - gtk_signal_connect(GTK_OBJECT(window), "destroy", - GTK_SIGNAL_FUNC(compose_destroy_cb), compose); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(compose_delete_cb), compose); + g_signal_connect(G_OBJECT(window), "destroy", + G_CALLBACK(compose_destroy_cb), compose); MANAGE_WINDOW_SIGNALS_CONNECT(window); gtk_widget_realize(window); @@ -4874,7 +4971,7 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode) /* Notebook */ notebook = gtk_notebook_new(); - gtk_widget_set_usize(notebook, -1, 130); + gtk_widget_set_size_request(notebook, -1, 130); gtk_widget_show(notebook); /* header labels and entries */ @@ -4923,65 +5020,71 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode) gtk_ruler_set_range(GTK_RULER(ruler), 0.0, 100.0, 1.0, 100.0); gtk_box_pack_start(GTK_BOX(ruler_hbox), ruler, TRUE, TRUE, BORDER_WIDTH + 1); - gtk_widget_set_usize(ruler_hbox, 1, -1); + gtk_widget_set_size_request(ruler_hbox, 1, -1); /* text widget */ scrolledwin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); gtk_box_pack_start(GTK_BOX(edit_vbox), scrolledwin, TRUE, TRUE, 0); - gtk_widget_set_usize(scrolledwin, prefs_common.compose_width, -1); + gtk_widget_set_size_request(scrolledwin, prefs_common.compose_width, -1); - text = gtk_stext_new(gtk_scrolled_window_get_hadjustment - (GTK_SCROLLED_WINDOW(scrolledwin)), - gtk_scrolled_window_get_vadjustment - (GTK_SCROLLED_WINDOW(scrolledwin))); - GTK_STEXT(text)->default_tab_width = 8; - gtk_stext_set_editable(GTK_STEXT(text), TRUE); + text = gtk_text_view_new(); + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + gtk_text_view_set_editable(GTK_TEXT_VIEW(text), TRUE); + clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY); + gtk_text_buffer_add_selection_clipboard(buffer, clipboard); +#warning FIXME_GTK2 + /* GTK_STEXT(text)->default_tab_width = 8; */ +#warning FIXME_GTK2 +#if 0 if (prefs_common.block_cursor) { GTK_STEXT(text)->cursor_type = GTK_STEXT_CURSOR_BLOCK; } +#endif +#warning FIXME_GTK2 +#if 0 if (prefs_common.smart_wrapping) { gtk_stext_set_word_wrap(GTK_STEXT(text), TRUE); gtk_stext_set_wrap_rmargin(GTK_STEXT(text), prefs_common.linewrap_len); } +#else + if (prefs_common.smart_wrapping) { + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_WORD); + } +#endif gtk_container_add(GTK_CONTAINER(scrolledwin), text); - gtk_signal_connect(GTK_OBJECT(text), "changed", - GTK_SIGNAL_FUNC(compose_changed_cb), compose); - gtk_signal_connect(GTK_OBJECT(text), "grab_focus", - GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); - gtk_signal_connect(GTK_OBJECT(text), "activate", - GTK_SIGNAL_FUNC(text_activated), compose); - gtk_signal_connect(GTK_OBJECT(text), "insert_text", - GTK_SIGNAL_FUNC(text_inserted), compose); - gtk_signal_connect_after(GTK_OBJECT(text), "button_press_event", - GTK_SIGNAL_FUNC(compose_button_press_cb), - edit_vbox); -#if 0 - gtk_signal_connect_after(GTK_OBJECT(text), "key_press_event", - GTK_SIGNAL_FUNC(compose_key_press_cb), - compose); -#endif - gtk_signal_connect_after(GTK_OBJECT(text), "size_allocate", - GTK_SIGNAL_FUNC(compose_edit_size_alloc), - ruler); +#warning FIXME_GTK2 +#if 0 /* FIXME_GTK2 */ + g_signal_connect(G_OBJECT(text), "activate", + G_CALLBACK(text_activated), compose); +#endif /* FIXME_GTK2 */ + + g_signal_connect_after(G_OBJECT(text), "size_allocate", + G_CALLBACK(compose_edit_size_alloc), + ruler); + g_signal_connect(G_OBJECT(buffer), "changed", + G_CALLBACK(compose_changed_cb), compose); + g_signal_connect(G_OBJECT(text), "grab_focus", + G_CALLBACK(compose_grab_focus_cb), compose); + g_signal_connect(G_OBJECT(buffer), "insert-text", + G_CALLBACK(text_inserted), compose); /* drag and drop */ gtk_drag_dest_set(text, GTK_DEST_DEFAULT_ALL, compose_mime_types, 1, GDK_ACTION_COPY | GDK_ACTION_MOVE); - gtk_signal_connect(GTK_OBJECT(text), "drag_data_received", - GTK_SIGNAL_FUNC(compose_insert_drag_received_cb), - compose); + g_signal_connect(G_OBJECT(text), "drag_data_received", + G_CALLBACK(compose_insert_drag_received_cb), + compose); gtk_widget_show_all(vbox); /* pane between attach clist and text */ paned = gtk_vpaned_new(); gtk_paned_set_gutter_size(GTK_PANED(paned), 12); - gtk_paned_set_handle_size(GTK_PANED(paned), 12); gtk_container_add(GTK_CONTAINER(vbox2), paned); gtk_paned_add1(GTK_PANED(paned), notebook); gtk_paned_add2(GTK_PANED(paned), edit_vbox); @@ -4990,6 +5093,8 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode) style = gtk_widget_get_style(text); /* workaround for the slow down of GtkSText when using Pixmap theme */ +#warning FIXME_GTK2 +#if 0 /* FIXME_GTK2 */ if (style->engine) { GtkThemeEngine *engine; @@ -4998,14 +5103,19 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode) new_style = gtk_style_copy(style); style->engine = engine; } else +#endif /* FIXME_GTK2 */ new_style = gtk_style_copy(style); if (prefs_common.textfont) { - GdkFont *font; - - if ((font = gtkut_font_load(prefs_common.textfont)) != NULL) { - gdk_font_unref(new_style->font); - new_style->font = font; + PangoFontDescription *font_desc; + + font_desc = pango_font_description_from_string + (prefs_common.textfont); + if (font_desc) { + if (new_style->font_desc) + pango_font_description_free + (new_style->font_desc); + new_style->font_desc = font_desc; } } @@ -5248,9 +5358,9 @@ static GtkWidget *compose_account_option_menu_create(Compose *compose) ac->account_name, ac->address); MENUITEM_ADD(menu, menuitem, name, ac->account_id); g_free(name); - gtk_signal_connect(GTK_OBJECT(menuitem), "activate", - GTK_SIGNAL_FUNC(account_activated), - compose); + g_signal_connect(G_OBJECT(menuitem), "activate", + G_CALLBACK(account_activated), + compose); } gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu); @@ -5348,11 +5458,11 @@ static void compose_set_template_menu(Compose *compose) Template *tmpl = (Template *)cur->data; item = gtk_menu_item_new_with_label(tmpl->name); - gtk_menu_append(GTK_MENU(menu), item); - gtk_signal_connect(GTK_OBJECT(item), "activate", - GTK_SIGNAL_FUNC(compose_template_activate_cb), - compose); - gtk_object_set_data(GTK_OBJECT(item), "template", tmpl); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + g_signal_connect(G_OBJECT(item), "activate", + G_CALLBACK(compose_template_activate_cb), + compose); + g_object_set_data(G_OBJECT(item), "template", tmpl); gtk_widget_show(item); } @@ -5385,12 +5495,17 @@ void compose_reflect_prefs_pixmap_theme(void) static void compose_template_apply(Compose *compose, Template *tmpl, gboolean replace) { + GtkTextView *text; + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter iter; gchar *qmark; gchar *parsed_str; if (!tmpl || !tmpl->value) return; - gtk_stext_freeze(GTK_STEXT(compose->text)); + text = GTK_TEXT_VIEW(compose->text); + buffer = gtk_text_view_get_buffer(text); if (tmpl->subject && *tmpl->subject != '\0') gtk_entry_set_text(GTK_ENTRY(compose->subject_entry), @@ -5404,7 +5519,10 @@ static void compose_template_apply(Compose *compose, Template *tmpl, compose_entry_append(compose, tmpl->bcc, COMPOSE_BCC); if (replace) - gtkut_stext_clear(GTK_STEXT(compose->text)); + gtk_text_buffer_set_text(buffer, "\0", 1); + + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark); if ((compose->replyinfo == NULL) && (compose->fwdinfo == NULL)) { parsed_str = compose_quote_fmt(compose, NULL, tmpl->value, @@ -5429,14 +5547,12 @@ static void compose_template_apply(Compose *compose, Template *tmpl, compose_insert_sig(compose, FALSE); if (replace && parsed_str) { - gtk_editable_set_position(GTK_EDITABLE(compose->text), 0); - gtk_stext_set_point(GTK_STEXT(compose->text), 0); + gtk_text_buffer_get_start_iter(buffer, &iter); + gtk_text_buffer_place_cursor(buffer, &iter); } if (parsed_str) compose_changed_cb(NULL, compose); - - gtk_stext_thaw(GTK_STEXT(compose->text)); } static void compose_destroy(Compose *compose) @@ -5576,6 +5692,7 @@ static void compose_attach_property(Compose *compose) ainfo->name ? ainfo->name : ""); for (;;) { + const gchar *entry_text; gchar *text; gchar *cnttype = NULL; gchar *file = NULL; @@ -5591,11 +5708,11 @@ static void compose_attach_property(Compose *compose) break; } - text = gtk_entry_get_text(GTK_ENTRY(attach_prop.mimetype_entry)); - if (*text != '\0') { + entry_text = gtk_entry_get_text(GTK_ENTRY(attach_prop.mimetype_entry)); + if (*entry_text != '\0') { gchar *p; - text = g_strstrip(g_strdup(text)); + text = g_strstrip(g_strdup(entry_text)); if ((p = strchr(text, '/')) && !strchr(p + 1, '/')) { cnttype = g_strdup(text); g_free(text); @@ -5609,13 +5726,13 @@ static void compose_attach_property(Compose *compose) menu = gtk_option_menu_get_menu(optmenu); menuitem = gtk_menu_get_active(GTK_MENU(menu)); ainfo->encoding = GPOINTER_TO_INT - (gtk_object_get_user_data(GTK_OBJECT(menuitem))); + (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID)); - text = gtk_entry_get_text(GTK_ENTRY(attach_prop.path_entry)); - if (*text != '\0') { - if (is_file_exist(text) && - (size = get_file_size(text)) > 0) - file = g_strdup(text); + entry_text = gtk_entry_get_text(GTK_ENTRY(attach_prop.path_entry)); + if (*entry_text != '\0') { + if (is_file_exist(entry_text) && + (size = get_file_size(entry_text)) > 0) + file = g_strdup(entry_text); else { alertpanel_error (_("File doesn't exist or is empty.")); @@ -5624,10 +5741,10 @@ static void compose_attach_property(Compose *compose) } } - text = gtk_entry_get_text(GTK_ENTRY(attach_prop.filename_entry)); - if (*text != '\0') { + entry_text = gtk_entry_get_text(GTK_ENTRY(attach_prop.filename_entry)); + if (*entry_text != '\0') { g_free(ainfo->name); - ainfo->name = g_strdup(text); + ainfo->name = g_strdup(entry_text); } if (cnttype) { @@ -5684,18 +5801,18 @@ static void compose_attach_property_create(gboolean *cancelled) debug_print("Creating attach_property window...\n"); - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, 480, -1); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request(window, 480, -1); gtk_container_set_border_width(GTK_CONTAINER(window), 8); gtk_window_set_title(GTK_WINDOW(window), _("Properties")); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(attach_property_delete_event), - cancelled); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(attach_property_key_pressed), - cancelled); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(attach_property_delete_event), + cancelled); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(attach_property_key_pressed), + cancelled); vbox = gtk_vbox_new(FALSE, 8); gtk_container_add(GTK_CONTAINER(window), vbox); @@ -5771,12 +5888,12 @@ static void compose_attach_property_create(gboolean *cancelled) gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0); gtk_widget_grab_default(ok_btn); - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(attach_property_ok), - cancelled); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(attach_property_cancel), - cancelled); + g_signal_connect(G_OBJECT(ok_btn), "clicked", + G_CALLBACK(attach_property_ok), + cancelled); + g_signal_connect(G_OBJECT(cancel_btn), "clicked", + G_CALLBACK(attach_property_cancel), + cancelled); gtk_widget_show_all(vbox); @@ -5812,13 +5929,15 @@ static gint attach_property_delete_event(GtkWidget *widget, GdkEventAny *event, return TRUE; } -static void attach_property_key_pressed(GtkWidget *widget, GdkEventKey *event, - gboolean *cancelled) +static gboolean attach_property_key_pressed(GtkWidget *widget, + GdkEventKey *event, + gboolean *cancelled) { if (event && event->keyval == GDK_Escape) { *cancelled = TRUE; gtk_main_quit(); } + return FALSE; } static void compose_exec_ext_editor(Compose *compose) @@ -6000,14 +6119,12 @@ static void compose_input_cb(gpointer data, gint source, waitpid(compose->exteditor_pid, NULL, 0); if (buf[0] == '0') { /* success */ - GtkSText *text = GTK_STEXT(compose->text); + GtkTextView *text = GTK_TEXT_VIEW(compose->text); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(text); - gtk_stext_freeze(text); - gtk_stext_set_point(text, 0); - gtk_stext_forward_delete(text, gtk_stext_get_length(text)); + gtk_text_buffer_set_text(buffer, "\0", 1); compose_insert_file(compose, compose->exteditor_file); compose_changed_cb(NULL, compose); - gtk_stext_thaw(text); if (unlink(compose->exteditor_file) < 0) FILE_OP_ERROR(compose->exteditor_file, "unlink"); @@ -6127,14 +6244,10 @@ static void compose_undo_state_changed(UndoMain *undostruct, gint undo_state, } } -static gint calc_cursor_xpos(GtkSText *text, gint extra, gint char_width) +static gint calc_cursor_xpos(GtkTextView *text, gint extra, gint char_width) { - gint cursor_pos; - - cursor_pos = (text->cursor_pos_x - extra) / char_width; - cursor_pos = MAX(cursor_pos, 0); - - return cursor_pos; +#warning FIXME_GTK2 + return 0; } /* callback functions */ @@ -6148,18 +6261,18 @@ static gboolean compose_edit_size_alloc(GtkEditable *widget, GtkSHRuler *shruler) { if (prefs_common.show_ruler) { - gint char_width; + gint char_width = 0, char_height = 0; gint line_width_in_chars; - char_width = gtkut_get_font_width - (GTK_WIDGET(widget)->style->font); + gtkut_get_font_size(GTK_WIDGET(widget), + &char_width, &char_height); line_width_in_chars = (allocation->width - allocation->x) / char_width; /* got the maximum */ gtk_ruler_set_range(GTK_RULER(shruler), 0.0, line_width_in_chars, - calc_cursor_xpos(GTK_STEXT(widget), + calc_cursor_xpos(GTK_TEXT_VIEW(widget), allocation->x, char_width), /*line_width_in_chars*/ char_width); @@ -6191,14 +6304,14 @@ static void attach_selected(GtkCList *clist, gint row, gint column, compose_attach_property(compose); } -static void attach_button_pressed(GtkWidget *widget, GdkEventButton *event, - gpointer data) +static gboolean attach_button_pressed(GtkWidget *widget, GdkEventButton *event, + gpointer data) { Compose *compose = (Compose *)data; GtkCList *clist = GTK_CLIST(compose->attach_clist); gint row, column; - if (!event) return; + if (!event) return FALSE; if (event->button == 3) { if ((clist->selection && !clist->selection->next) || @@ -6214,20 +6327,23 @@ static void attach_button_pressed(GtkWidget *widget, GdkEventButton *event, gtk_menu_popup(GTK_MENU(compose->popupmenu), NULL, NULL, NULL, NULL, event->button, event->time); } + + return FALSE; } -static void attach_key_pressed(GtkWidget *widget, GdkEventKey *event, - gpointer data) +static gboolean attach_key_pressed(GtkWidget *widget, GdkEventKey *event, + gpointer data) { Compose *compose = (Compose *)data; - if (!event) return; + if (!event) return FALSE; switch (event->keyval) { case GDK_Delete: compose_attach_remove_selected(compose); break; } + return FALSE; } static void compose_allow_user_actions (Compose *compose, gboolean allow) @@ -6467,7 +6583,7 @@ static void compose_template_activate_cb(GtkWidget *widget, gpointer data) gchar *msg; AlertValue val; - tmpl = gtk_object_get_data(GTK_OBJECT(widget), "template"); + tmpl = g_object_get_data(G_OBJECT(widget), "template"); g_return_if_fail(tmpl != NULL); msg = g_strdup_printf(_("Do you want to apply the template `%s' ?"), @@ -6558,44 +6674,299 @@ static void compose_allsel_cb(Compose *compose) (GTK_EDITABLE(compose->focused_editable), 0, -1); } -static void compose_gtk_stext_action_cb(Compose *compose, - ComposeCallGtkSTextAction action) +static void textview_move_beginning_of_line (GtkTextView *text) +{ + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter ins; + + g_return_if_fail(GTK_IS_TEXT_VIEW(text)); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &ins, mark); + gtk_text_iter_set_line_offset(&ins, 0); + gtk_text_buffer_place_cursor(buffer, &ins); +} + +static void textview_move_forward_character (GtkTextView *text) +{ + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter ins; + + g_return_if_fail(GTK_IS_TEXT_VIEW(text)); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &ins, mark); + if (gtk_text_iter_forward_cursor_position(&ins)) + gtk_text_buffer_place_cursor(buffer, &ins); +} + +static void textview_move_backward_character (GtkTextView *text) +{ + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter ins; + + g_return_if_fail(GTK_IS_TEXT_VIEW(text)); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &ins, mark); + if (gtk_text_iter_backward_cursor_position(&ins)) + gtk_text_buffer_place_cursor(buffer, &ins); +} + +static void textview_move_forward_word (GtkTextView *text) +{ + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter ins; + gint count; + + g_return_if_fail(GTK_IS_TEXT_VIEW(text)); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &ins, mark); + count = gtk_text_iter_inside_word (&ins) ? 2 : 1; + if (gtk_text_iter_forward_word_ends(&ins, count)) { + gtk_text_iter_backward_word_start(&ins); + gtk_text_buffer_place_cursor(buffer, &ins); + } +} + +static void textview_move_backward_word (GtkTextView *text) { - GtkSText *text = GTK_STEXT(compose->text); + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter ins; + gint count; + + g_return_if_fail(GTK_IS_TEXT_VIEW(text)); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &ins, mark); + count = gtk_text_iter_inside_word (&ins) ? 2 : 1; + if (gtk_text_iter_backward_word_starts(&ins, 1)) + gtk_text_buffer_place_cursor(buffer, &ins); +} + +static void textview_move_end_of_line (GtkTextView *text) +{ + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter ins; + + g_return_if_fail(GTK_IS_TEXT_VIEW(text)); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &ins, mark); + if (gtk_text_iter_forward_to_line_end(&ins)) + gtk_text_buffer_place_cursor(buffer, &ins); +} + +static void textview_move_next_line (GtkTextView *text) +{ + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter ins; + gint offset; + + g_return_if_fail(GTK_IS_TEXT_VIEW(text)); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &ins, mark); +#warning FIXME_GTK2 /* should regist current line offset */ + offset = gtk_text_iter_get_line_offset(&ins); + if (gtk_text_iter_forward_line(&ins)) { + gtk_text_iter_set_line_offset(&ins, offset); + gtk_text_buffer_place_cursor(buffer, &ins); + } +} + +static void textview_move_previous_line (GtkTextView *text) +{ + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter ins; + gint offset; + + g_return_if_fail(GTK_IS_TEXT_VIEW(text)); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &ins, mark); +#warning FIXME_GTK2 /* should regist current line offset */ + offset = gtk_text_iter_get_line_offset(&ins); + if (gtk_text_iter_backward_line(&ins)) { + gtk_text_iter_set_line_offset(&ins, offset); + gtk_text_buffer_place_cursor(buffer, &ins); + } +} + +static void textview_delete_forward_character (GtkTextView *text) +{ + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter ins, end_iter; + + g_return_if_fail(GTK_IS_TEXT_VIEW(text)); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &ins, mark); + end_iter = ins; + if (gtk_text_iter_forward_char(&end_iter)) { + gtk_text_buffer_delete(buffer, &ins, &end_iter); + } +} + +static void textview_delete_backward_character (GtkTextView *text) +{ + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter ins, end_iter; + + g_return_if_fail(GTK_IS_TEXT_VIEW(text)); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &ins, mark); + end_iter = ins; + if (gtk_text_iter_backward_char(&end_iter)) { + gtk_text_buffer_delete(buffer, &end_iter, &ins); + } +} + +static void textview_delete_forward_word (GtkTextView *text) +{ + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter ins, end_iter; + + g_return_if_fail(GTK_IS_TEXT_VIEW(text)); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &ins, mark); + end_iter = ins; + if (gtk_text_iter_forward_word_end(&end_iter)) { + gtk_text_buffer_delete(buffer, &ins, &end_iter); + } +} + +static void textview_delete_backward_word (GtkTextView *text) +{ + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter ins, end_iter; + + g_return_if_fail(GTK_IS_TEXT_VIEW(text)); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &ins, mark); + end_iter = ins; + if (gtk_text_iter_backward_word_start(&end_iter)) { + gtk_text_buffer_delete(buffer, &end_iter, &ins); + } +} + +static void textview_delete_line (GtkTextView *text) +{ + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter ins, start_iter, end_iter; + gboolean found; + + g_return_if_fail(GTK_IS_TEXT_VIEW(text)); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &ins, mark); + + start_iter = ins; + gtk_text_iter_set_line_offset(&start_iter, 0); + + end_iter = ins; + if (gtk_text_iter_ends_line(&end_iter)) + found = gtk_text_iter_forward_char(&end_iter); + else + found = gtk_text_iter_forward_to_line_end(&end_iter); + + if (found) + gtk_text_buffer_delete(buffer, &start_iter, &end_iter); +} + +static void textview_delete_to_line_end (GtkTextView *text) +{ + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter ins, end_iter; + gboolean found; + + g_return_if_fail(GTK_IS_TEXT_VIEW(text)); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &ins, mark); + end_iter = ins; + if (gtk_text_iter_ends_line(&end_iter)) + found = gtk_text_iter_forward_char(&end_iter); + else + found = gtk_text_iter_forward_to_line_end(&end_iter); + if (found) + gtk_text_buffer_delete(buffer, &ins, &end_iter); +} + +static void compose_advanced_action_cb(Compose *compose, + ComposeCallAdvancedAction action) +{ + GtkTextView *text = GTK_TEXT_VIEW(compose->text); static struct { - void (*do_action) (GtkSText *text); + void (*do_action) (GtkTextView *text); } action_table[] = { - {gtk_stext_move_beginning_of_line}, - {gtk_stext_move_forward_character}, - {gtk_stext_move_backward_character}, - {gtk_stext_move_forward_word}, - {gtk_stext_move_backward_word}, - {gtk_stext_move_end_of_line}, - {gtk_stext_move_next_line}, - {gtk_stext_move_previous_line}, - {gtk_stext_delete_forward_character}, - {gtk_stext_delete_backward_character}, - {gtk_stext_delete_forward_word}, - {gtk_stext_delete_backward_word}, - {gtk_stext_delete_line}, - {gtk_stext_delete_line}, /* gtk_stext_delete_line_n */ - {gtk_stext_delete_to_line_end} + {textview_move_beginning_of_line}, + {textview_move_forward_character}, + {textview_move_backward_character}, + {textview_move_forward_word}, + {textview_move_backward_word}, + {textview_move_end_of_line}, + {textview_move_next_line}, + {textview_move_previous_line}, + {textview_delete_forward_character}, + {textview_delete_backward_character}, + {textview_delete_forward_word}, + {textview_delete_backward_word}, + {textview_delete_line}, + {NULL}, /* gtk_stext_delete_line_n */ + {textview_delete_to_line_end} }; if (!GTK_WIDGET_HAS_FOCUS(text)) return; - if (action >= COMPOSE_CALL_GTK_STEXT_MOVE_BEGINNING_OF_LINE && - action <= COMPOSE_CALL_GTK_STEXT_DELETE_TO_LINE_END) - action_table[action].do_action(text); + if (action >= COMPOSE_CALL_ADVANCED_ACTION_MOVE_BEGINNING_OF_LINE && + action <= COMPOSE_CALL_ADVANCED_ACTION_DELETE_TO_LINE_END) { + if (action_table[action].do_action) + action_table[action].do_action(text); + else + g_warning("Not implemented yet."); + } } static void compose_grab_focus_cb(GtkWidget *widget, Compose *compose) { - if (GTK_IS_EDITABLE(widget)) + if (GTK_IS_EDITABLE(widget) || GTK_IS_TEXT_VIEW(widget)) compose->focused_editable = widget; } -static void compose_changed_cb(GtkEditable *editable, Compose *compose) +static void compose_changed_cb(GtkTextBuffer *textbuf, Compose *compose) { if (compose->modified == FALSE) { compose->modified = TRUE; @@ -6603,22 +6974,6 @@ static void compose_changed_cb(GtkEditable *editable, Compose *compose) } } -static void compose_button_press_cb(GtkWidget *widget, GdkEventButton *event, - Compose *compose) -{ - gtk_stext_set_point(GTK_STEXT(widget), - gtk_editable_get_position(GTK_EDITABLE(widget))); -} - -#if 0 -static void compose_key_press_cb(GtkWidget *widget, GdkEventKey *event, - Compose *compose) -{ - gtk_stext_set_point(GTK_STEXT(widget), - gtk_editable_get_position(GTK_EDITABLE(widget))); -} -#endif - #if 0 /* NEW COMPOSE GUI */ static void compose_toggle_to_cb(gpointer data, guint action, GtkWidget *widget) @@ -7007,47 +7362,47 @@ static void text_activated(GtkWidget *widget, Compose *compose) compose_send_control_enter(compose); } -static void text_inserted(GtkWidget *widget, const gchar *text, - gint length, gint *position, Compose *compose) +static void text_inserted(GtkTextBuffer *buffer, GtkTextIter *iter, + const gchar *text, gint len, Compose *compose) { - GtkEditable *editable = GTK_EDITABLE(widget); - gint paste_as_quotation = GPOINTER_TO_INT(gtk_object_get_data - (GTK_OBJECT(widget), "paste_as_quotation")); + g_return_if_fail(text); + + gint paste_as_quotation = GPOINTER_TO_INT(g_object_get_data + (G_OBJECT(compose->text), "paste_as_quotation")); - gtk_signal_handler_block_by_func(GTK_OBJECT(widget), - GTK_SIGNAL_FUNC(text_inserted), - compose); + g_signal_handlers_block_by_func(G_OBJECT(buffer), + G_CALLBACK(text_inserted), + compose); if (paste_as_quotation) { gchar *new_text; gchar *qmark; - gint pos; - new_text = g_strndup(text, length); + if (len < 0) + len = strlen(text); + + new_text = g_strndup(text, len); if (prefs_common.quotemark && *prefs_common.quotemark) qmark = prefs_common.quotemark; else qmark = "> "; - gtk_stext_set_point(GTK_STEXT(widget), *position); + gtk_text_buffer_place_cursor(buffer, iter); compose_quote_fmt(compose, NULL, "%Q", qmark, new_text); - pos = gtk_stext_get_point(GTK_STEXT(widget)); - gtk_editable_set_position(editable, pos); - *position = pos; g_free(new_text); - gtk_object_set_data(GTK_OBJECT(widget), "paste_as_quotation", - GINT_TO_POINTER(paste_as_quotation - 1)); + g_object_set_data(G_OBJECT(compose->text), "paste_as_quotation", + GINT_TO_POINTER(paste_as_quotation - 1)); } else - gtk_editable_insert_text(editable, text, length, position); + gtk_text_buffer_insert(buffer, iter, text, len); if (prefs_common.autowrap) compose_wrap_line_all_full(compose, TRUE); - gtk_signal_handler_unblock_by_func(GTK_OBJECT(widget), - GTK_SIGNAL_FUNC(text_inserted), - compose); - gtk_signal_emit_stop_by_name(GTK_OBJECT(editable), "insert_text"); + g_signal_handlers_unblock_by_func(G_OBJECT(buffer), + G_CALLBACK(text_inserted), + compose); + g_signal_stop_emission_by_name(G_OBJECT(buffer), "insert-text"); if (prefs_common.autosave && - gtk_stext_get_length(GTK_STEXT(widget)) % prefs_common.autosave_length == 0) + gtk_text_buffer_get_char_count(buffer) % prefs_common.autosave_length == 0) gtk_timeout_add(500, (GtkFunction) compose_defer_auto_save_draft, compose); } @@ -7062,7 +7417,7 @@ static gboolean compose_send_control_enter(Compose *compose) GdkEvent *ev; GdkEventKey *kev; GtkItemFactory *ifactory; - GtkAccelEntry *accel; + GtkAccelKey *accel; GtkWidget *send_menu; GSList *list; GdkModifierType ignored_mods = @@ -7078,13 +7433,13 @@ static gboolean compose_send_control_enter(Compose *compose) ifactory = gtk_item_factory_from_widget(compose->menubar); send_menu = gtk_item_factory_get_widget(ifactory, "/Message/Send"); - list = gtk_accel_group_entries_from_object(GTK_OBJECT(send_menu)); + list = gtk_accel_groups_from_object(G_OBJECT(send_menu)); if (!list) return FALSE; - accel = (GtkAccelEntry *)list->data; - if (accel && accel->accelerator_key == kev->keyval && - (accel->accelerator_mods & ~ignored_mods) == + accel = (GtkAccelKey *)list->data; + if (accel && accel->accel_key == kev->keyval && + (accel->accel_mods & ~ignored_mods) == (kev->state & ~ignored_mods)) { compose_send_cb(compose, 0, NULL); return TRUE; diff --git a/src/compose.h b/src/compose.h index 7a1db31e8..a85dfa988 100644 --- a/src/compose.h +++ b/src/compose.h @@ -218,6 +218,8 @@ struct _AttachInfo off_t size; }; +/*#warning FIXME_GTK2 */ +/* attache_files will be locale encode */ Compose *compose_new (PrefsAccount *account, const gchar *mailto, GPtrArray *attach_files); diff --git a/src/editaddress.c b/src/editaddress.c index 10e1be647..64bb69a94 100644 --- a/src/editaddress.c +++ b/src/editaddress.c @@ -126,11 +126,12 @@ static gint edit_person_delete_event(GtkWidget *widget, GdkEventAny *event, gboo return TRUE; } -static void edit_person_key_pressed(GtkWidget *widget, GdkEventKey *event, gboolean *cancelled) { +static gboolean edit_person_key_pressed(GtkWidget *widget, GdkEventKey *event, gboolean *cancelled) { if (event && event->keyval == GDK_Escape) { *cancelled = TRUE; gtk_main_quit(); } + return FALSE; } static gchar *_title_new_ = NULL; @@ -474,18 +475,18 @@ static void addressbook_edit_person_dialog_create( gboolean *cancelled ) { GtkWidget *hsbox; GtkWidget *statusbar; - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, EDITPERSON_WIDTH, EDITPERSON_HEIGHT ); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request(window, EDITPERSON_WIDTH, EDITPERSON_HEIGHT ); /* gtk_container_set_border_width(GTK_CONTAINER(window), 0); */ gtk_window_set_title(GTK_WINDOW(window), _("Edit Person Data")); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(edit_person_delete_event), - cancelled); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(edit_person_key_pressed), - cancelled); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(edit_person_delete_event), + cancelled); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(edit_person_key_pressed), + cancelled); vbox = gtk_vbox_new(FALSE, 4); /* gtk_container_set_border_width(GTK_CONTAINER(vbox), BORDER_WIDTH); */ @@ -515,12 +516,12 @@ static void addressbook_edit_person_dialog_create( gboolean *cancelled ) { gtk_box_pack_end(GTK_BOX(vnbox), hbbox, FALSE, FALSE, 0); gtk_widget_grab_default(ok_btn); - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(edit_person_ok), cancelled); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(edit_person_cancel), cancelled); - gtk_signal_connect(GTK_OBJECT(notebook), "switch_page", - GTK_SIGNAL_FUNC(edit_person_switch_page), NULL ); + g_signal_connect(G_OBJECT(ok_btn), "clicked", + G_CALLBACK(edit_person_ok), cancelled); + g_signal_connect(G_OBJECT(cancel_btn), "clicked", + G_CALLBACK(edit_person_cancel), cancelled); + g_signal_connect(G_OBJECT(notebook), "switch_page", + G_CALLBACK(edit_person_switch_page), NULL ); gtk_widget_show_all(vbox); @@ -702,7 +703,7 @@ static void addressbook_edit_person_page_email( gint pageNum, gchar *pageLbl ) { vbuttonbox = gtk_vbutton_box_new(); gtk_button_box_set_layout( GTK_BUTTON_BOX(vbuttonbox), GTK_BUTTONBOX_START ); - gtk_button_box_set_spacing( GTK_BUTTON_BOX(vbuttonbox), 8 ); + gtk_box_set_spacing( GTK_BOX(vbuttonbox), 8 ); gtk_container_set_border_width( GTK_CONTAINER(vbuttonbox), 4 ); gtk_container_add( GTK_CONTAINER(vboxb), vbuttonbox ); @@ -728,20 +729,20 @@ static void addressbook_edit_person_page_email( gint pageNum, gchar *pageLbl ) { gtk_widget_show_all(vbox); /* Event handlers */ - gtk_signal_connect( GTK_OBJECT(clist), "select_row", - GTK_SIGNAL_FUNC( edit_person_email_list_selected), NULL ); - gtk_signal_connect( GTK_OBJECT(buttonUp), "clicked", - GTK_SIGNAL_FUNC( edit_person_email_move_up ), NULL ); - gtk_signal_connect( GTK_OBJECT(buttonDown), "clicked", - GTK_SIGNAL_FUNC( edit_person_email_move_down ), NULL ); - gtk_signal_connect( GTK_OBJECT(buttonDel), "clicked", - GTK_SIGNAL_FUNC( edit_person_email_delete ), NULL ); - gtk_signal_connect( GTK_OBJECT(buttonMod), "clicked", - GTK_SIGNAL_FUNC( edit_person_email_modify ), NULL ); - gtk_signal_connect( GTK_OBJECT(buttonAdd), "clicked", - GTK_SIGNAL_FUNC( edit_person_email_add ), NULL ); - gtk_signal_connect( GTK_OBJECT(buttonClr), "clicked", - GTK_SIGNAL_FUNC( edit_person_email_clear ), NULL ); + g_signal_connect( G_OBJECT(clist), "select_row", + G_CALLBACK( edit_person_email_list_selected), NULL ); + g_signal_connect( G_OBJECT(buttonUp), "clicked", + G_CALLBACK( edit_person_email_move_up ), NULL ); + g_signal_connect( G_OBJECT(buttonDown), "clicked", + G_CALLBACK( edit_person_email_move_down ), NULL ); + g_signal_connect( G_OBJECT(buttonDel), "clicked", + G_CALLBACK( edit_person_email_delete ), NULL ); + g_signal_connect( G_OBJECT(buttonMod), "clicked", + G_CALLBACK( edit_person_email_modify ), NULL ); + g_signal_connect( G_OBJECT(buttonAdd), "clicked", + G_CALLBACK( edit_person_email_add ), NULL ); + g_signal_connect( G_OBJECT(buttonClr), "clicked", + G_CALLBACK( edit_person_email_clear ), NULL ); personeditdlg.clist_email = clist; personeditdlg.entry_email = entry_email; @@ -842,7 +843,7 @@ static void addressbook_edit_person_page_attrib( gint pageNum, gchar *pageLbl ) vbuttonbox = gtk_vbutton_box_new(); gtk_button_box_set_layout( GTK_BUTTON_BOX(vbuttonbox), GTK_BUTTONBOX_START ); - gtk_button_box_set_spacing( GTK_BUTTON_BOX(vbuttonbox), 8 ); + gtk_box_set_spacing( GTK_BOX(vbuttonbox), 8 ); gtk_container_set_border_width( GTK_CONTAINER(vbuttonbox), 4 ); gtk_container_add( GTK_CONTAINER(vboxb), vbuttonbox ); @@ -862,16 +863,16 @@ static void addressbook_edit_person_page_attrib( gint pageNum, gchar *pageLbl ) gtk_widget_show_all(vbox); /* Event handlers */ - gtk_signal_connect( GTK_OBJECT(clist), "select_row", - GTK_SIGNAL_FUNC( edit_person_attrib_list_selected), NULL ); - gtk_signal_connect( GTK_OBJECT(buttonDel), "clicked", - GTK_SIGNAL_FUNC( edit_person_attrib_delete ), NULL ); - gtk_signal_connect( GTK_OBJECT(buttonMod), "clicked", - GTK_SIGNAL_FUNC( edit_person_attrib_modify ), NULL ); - gtk_signal_connect( GTK_OBJECT(buttonAdd), "clicked", - GTK_SIGNAL_FUNC( edit_person_attrib_add ), NULL ); - gtk_signal_connect( GTK_OBJECT(buttonClr), "clicked", - GTK_SIGNAL_FUNC( edit_person_attrib_clear ), NULL ); + g_signal_connect( G_OBJECT(clist), "select_row", + G_CALLBACK( edit_person_attrib_list_selected), NULL ); + g_signal_connect( G_OBJECT(buttonDel), "clicked", + G_CALLBACK( edit_person_attrib_delete ), NULL ); + g_signal_connect( G_OBJECT(buttonMod), "clicked", + G_CALLBACK( edit_person_attrib_modify ), NULL ); + g_signal_connect( G_OBJECT(buttonAdd), "clicked", + G_CALLBACK( edit_person_attrib_add ), NULL ); + g_signal_connect( G_OBJECT(buttonClr), "clicked", + G_CALLBACK( edit_person_attrib_clear ), NULL ); personeditdlg.clist_attrib = clist; personeditdlg.entry_atname = entry_name; @@ -968,10 +969,10 @@ ItemPerson *addressbook_edit_person( AddressBookFile *abf, ItemFolder *parent, I /* Select appropriate start page */ if( pgMail ) { - gtk_notebook_set_page( GTK_NOTEBOOK(personeditdlg.notebook), PAGE_EMAIL ); + gtk_notebook_set_current_page( GTK_NOTEBOOK(personeditdlg.notebook), PAGE_EMAIL ); } else { - gtk_notebook_set_page( GTK_NOTEBOOK(personeditdlg.notebook), PAGE_BASIC ); + gtk_notebook_set_current_page( GTK_NOTEBOOK(personeditdlg.notebook), PAGE_BASIC ); } gtk_clist_select_row( GTK_CLIST(personeditdlg.clist_email), 0, 0 ); diff --git a/src/editbook.c b/src/editbook.c index 518400558..9b5d9c8bc 100644 --- a/src/editbook.c +++ b/src/editbook.c @@ -95,11 +95,12 @@ static gint edit_book_delete_event( GtkWidget *widget, GdkEventAny *event, gbool return TRUE; } -static void edit_book_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { +static gboolean edit_book_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { if (event && event->keyval == GDK_Escape) { *cancelled = TRUE; gtk_main_quit(); } + return FALSE; } static void edit_book_file_check( void ) { @@ -146,18 +147,18 @@ static void addressbook_edit_book_create( gboolean *cancelled ) { GtkWidget *hsbox; gint top; - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, 450, -1); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request(window, 450, -1); gtk_container_set_border_width( GTK_CONTAINER(window), 0 ); gtk_window_set_title(GTK_WINDOW(window), _("Edit Addressbook")); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(edit_book_delete_event), - cancelled); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(edit_book_key_pressed), - cancelled); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(edit_book_delete_event), + cancelled); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(edit_book_key_pressed), + cancelled); vbox = gtk_vbox_new(FALSE, 8); gtk_container_add(GTK_CONTAINER(window), vbox); @@ -210,16 +211,16 @@ static void addressbook_edit_book_create( gboolean *cancelled ) { hsep = gtk_hseparator_new(); gtk_box_pack_end(GTK_BOX(vbox), hsep, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(name_entry), "focus_in_event", - GTK_SIGNAL_FUNC(edit_book_name_focus), NULL ); - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(edit_book_ok), cancelled); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(edit_book_cancel), cancelled); -/* gtk_signal_connect(GTK_OBJECT(file_btn), "clicked", */ -/* GTK_SIGNAL_FUNC(edit_book_file_select), NULL); */ - gtk_signal_connect(GTK_OBJECT(check_btn), "clicked", - GTK_SIGNAL_FUNC(edit_book_file_check), NULL); + g_signal_connect(G_OBJECT(name_entry), "focus_in_event", + G_CALLBACK(edit_book_name_focus), NULL ); + g_signal_connect(G_OBJECT(ok_btn), "clicked", + G_CALLBACK(edit_book_ok), cancelled); + g_signal_connect(G_OBJECT(cancel_btn), "clicked", + G_CALLBACK(edit_book_cancel), cancelled); +/* g_signal_connect(G_OBJECT(file_btn), "clicked", */ +/* G_CALLBACK(edit_book_file_select), NULL); */ + g_signal_connect(G_OBJECT(check_btn), "clicked", + G_CALLBACK(edit_book_file_check), NULL); gtk_widget_show_all(vbox); diff --git a/src/editgroup.c b/src/editgroup.c index a86bbf95c..e5a7406f4 100644 --- a/src/editgroup.c +++ b/src/editgroup.c @@ -116,11 +116,12 @@ static gint edit_group_delete_event(GtkWidget *widget, GdkEventAny *event, gbool return TRUE; } -static void edit_group_key_pressed(GtkWidget *widget, GdkEventKey *event, gboolean *cancelled) { +static gboolean edit_group_key_pressed(GtkWidget *widget, GdkEventKey *event, gboolean *cancelled) { if (event && event->keyval == GDK_Escape) { *cancelled = TRUE; gtk_main_quit(); } + return FALSE; } static gchar *edit_group_format_item_clist( ItemPerson *person, ItemEMail *email ) { @@ -197,22 +198,24 @@ static void edit_group_to_avail( GtkWidget *widget, gpointer data ) { } } -static void edit_group_list_group_button( GtkCList *clist, GdkEventButton *event, gpointer data ) { - if( ! event ) return; +static gboolean edit_group_list_group_button( GtkCList *clist, GdkEventButton *event, gpointer data ) { + if( ! event ) return FALSE; if( event->button == 1 ) { if( event->type == GDK_2BUTTON_PRESS ) { edit_group_to_avail( NULL, NULL ); } } + return FALSE; } -static void edit_group_list_avail_button( GtkCList *clist, GdkEventButton *event, gpointer data ) { - if( ! event ) return; +static gboolean edit_group_list_avail_button( GtkCList *clist, GdkEventButton *event, gpointer data ) { + if( ! event ) return FALSE; if( event->button == 1 ) { if( event->type == GDK_2BUTTON_PRESS ) { edit_group_to_group( NULL, NULL ); } } + return FALSE; } static gint edit_group_list_compare_func( GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2 ) { @@ -258,18 +261,18 @@ static void addressbook_edit_group_create( gboolean *cancelled ) { titles[ GROUP_COL_EMAIL ] = _("E-Mail Address"); titles[ GROUP_COL_REMARKS ] = _("Remarks"); - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, EDITGROUP_WIDTH, EDITGROUP_HEIGHT ); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request(window, EDITGROUP_WIDTH, EDITGROUP_HEIGHT ); gtk_container_set_border_width(GTK_CONTAINER(window), 0); gtk_window_set_title(GTK_WINDOW(window), _("Edit Group Data")); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(edit_group_delete_event), - cancelled); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(edit_group_key_pressed), - cancelled); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(edit_group_delete_event), + cancelled); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(edit_group_key_pressed), + cancelled); vbox = gtk_vbox_new( FALSE, 6 ); gtk_container_set_border_width(GTK_CONTAINER(vbox), BORDER_WIDTH); @@ -371,22 +374,22 @@ static void addressbook_edit_group_create( gboolean *cancelled ) { gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0); gtk_widget_grab_default(ok_btn); - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(edit_group_ok), cancelled); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(edit_group_cancel), cancelled); + g_signal_connect(G_OBJECT(ok_btn), "clicked", + G_CALLBACK(edit_group_ok), cancelled); + g_signal_connect(G_OBJECT(cancel_btn), "clicked", + G_CALLBACK(edit_group_cancel), cancelled); gtk_widget_show_all(vbox); /* Event handlers */ - gtk_signal_connect( GTK_OBJECT(buttonGroup), "clicked", - GTK_SIGNAL_FUNC( edit_group_to_group ), NULL ); - gtk_signal_connect( GTK_OBJECT(buttonAvail), "clicked", - GTK_SIGNAL_FUNC( edit_group_to_avail ), NULL ); - gtk_signal_connect(GTK_OBJECT(clist_avail), "button_press_event", - GTK_SIGNAL_FUNC(edit_group_list_avail_button), NULL); - gtk_signal_connect(GTK_OBJECT(clist_group), "button_press_event", - GTK_SIGNAL_FUNC(edit_group_list_group_button), NULL); + g_signal_connect( G_OBJECT(buttonGroup), "clicked", + G_CALLBACK( edit_group_to_group ), NULL ); + g_signal_connect( G_OBJECT(buttonAvail), "clicked", + G_CALLBACK( edit_group_to_avail ), NULL ); + g_signal_connect(G_OBJECT(clist_avail), "button_press_event", + G_CALLBACK(edit_group_list_avail_button), NULL); + g_signal_connect(G_OBJECT(clist_group), "button_press_event", + G_CALLBACK(edit_group_list_group_button), NULL); groupeditdlg.window = window; groupeditdlg.ok_btn = ok_btn; diff --git a/src/editjpilot.c b/src/editjpilot.c index 172ea1d6b..43194e42d 100644 --- a/src/editjpilot.c +++ b/src/editjpilot.c @@ -83,11 +83,12 @@ static gint edit_jpilot_delete_event( GtkWidget *widget, GdkEventAny *event, gbo return TRUE; } -static void edit_jpilot_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { +static gboolean edit_jpilot_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { if (event && event->keyval == GDK_Escape) { *cancelled = TRUE; gtk_main_quit(); } + return FALSE; } static void edit_jpilot_ok( GtkWidget *widget, gboolean *cancelled ) { @@ -195,7 +196,7 @@ static void edit_jpilot_file_check( void ) { } static void edit_jpilot_file_ok( GtkWidget *widget, gpointer data ) { - gchar *sFile; + const gchar *sFile; AddressFileSelection *afs; GtkWidget *fileSel; @@ -224,10 +225,10 @@ static void edit_jpilot_file_select_create( AddressFileSelection *afs ) { fileSelector = gtk_file_selection_new( _("Select JPilot File") ); gtk_file_selection_hide_fileop_buttons( GTK_FILE_SELECTION(fileSelector) ); - gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION(fileSelector)->ok_button), - "clicked", GTK_SIGNAL_FUNC (edit_jpilot_file_ok), ( gpointer ) afs ); - gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION(fileSelector)->cancel_button), - "clicked", GTK_SIGNAL_FUNC (edit_jpilot_file_cancel), ( gpointer ) afs ); + g_signal_connect( G_OBJECT (GTK_FILE_SELECTION(fileSelector)->ok_button), + "clicked", G_CALLBACK (edit_jpilot_file_ok), ( gpointer ) afs ); + g_signal_connect( G_OBJECT (GTK_FILE_SELECTION(fileSelector)->cancel_button), + "clicked", G_CALLBACK (edit_jpilot_file_cancel), ( gpointer ) afs ); afs->fileSelector = fileSelector; afs->cancelled = TRUE; } @@ -267,18 +268,18 @@ static void addressbook_edit_jpilot_create( gboolean *cancelled ) { GtkWidget *statusbar; gint top, i; - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, 450, -1); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request(window, 450, -1); gtk_container_set_border_width(GTK_CONTAINER(window), 0); gtk_window_set_title(GTK_WINDOW(window), _("Edit JPilot Entry")); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(edit_jpilot_delete_event), - cancelled); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(edit_jpilot_key_pressed), - cancelled); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(edit_jpilot_delete_event), + cancelled); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(edit_jpilot_key_pressed), + cancelled); vbox = gtk_vbox_new(FALSE, 8); gtk_container_add(GTK_CONTAINER(window), vbox); @@ -350,14 +351,14 @@ static void addressbook_edit_jpilot_create( gboolean *cancelled ) { hsep = gtk_hseparator_new(); gtk_box_pack_end(GTK_BOX(vbox), hsep, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(edit_jpilot_ok), cancelled); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(edit_jpilot_cancel), cancelled); - gtk_signal_connect(GTK_OBJECT(file_btn), "clicked", - GTK_SIGNAL_FUNC(edit_jpilot_file_select), NULL); - gtk_signal_connect(GTK_OBJECT(check_btn), "clicked", - GTK_SIGNAL_FUNC(edit_jpilot_file_check), NULL); + g_signal_connect(G_OBJECT(ok_btn), "clicked", + G_CALLBACK(edit_jpilot_ok), cancelled); + g_signal_connect(G_OBJECT(cancel_btn), "clicked", + G_CALLBACK(edit_jpilot_cancel), cancelled); + g_signal_connect(G_OBJECT(file_btn), "clicked", + G_CALLBACK(edit_jpilot_file_select), NULL); + g_signal_connect(G_OBJECT(check_btn), "clicked", + G_CALLBACK(edit_jpilot_file_check), NULL); gtk_widget_show_all(vbox); diff --git a/src/editldap.c b/src/editldap.c index 3fda5c014..4868fd763 100644 --- a/src/editldap.c +++ b/src/editldap.c @@ -177,7 +177,7 @@ static gboolean edit_ldap_validate( void ) { /* Switch to page with error */ if( errorFlag ) { - gtk_notebook_set_page( GTK_NOTEBOOK(ldapedit.notebook), page ); + gtk_notebook_set_current_page( GTK_NOTEBOOK(ldapedit.notebook), page ); } return errorFlag; @@ -201,11 +201,12 @@ static gint edit_ldap_delete_event( GtkWidget *widget, GdkEventAny *event, gbool return TRUE; } -static void edit_ldap_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { +static gboolean edit_ldap_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { if (event && event->keyval == GDK_Escape) { *cancelled = TRUE; gtk_main_quit(); } + return FALSE; } static void edit_ldap_server_check( void ) { @@ -307,18 +308,18 @@ static void addressbook_edit_ldap_dialog_create( gboolean *cancelled ) { GtkWidget *hsbox; GtkWidget *statusbar; - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, 450, -1); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request(window, 450, -1); gtk_container_set_border_width(GTK_CONTAINER(window), 0); gtk_window_set_title(GTK_WINDOW(window), _("Edit LDAP Server")); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(edit_ldap_delete_event), - cancelled); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(edit_ldap_key_pressed), - cancelled); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(edit_ldap_delete_event), + cancelled); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(edit_ldap_key_pressed), + cancelled); vbox = gtk_vbox_new( FALSE, 6 ); gtk_widget_show( vbox ); @@ -342,10 +343,10 @@ static void addressbook_edit_ldap_dialog_create( gboolean *cancelled ) { gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0); gtk_widget_grab_default(ok_btn); - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(edit_ldap_ok), cancelled); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(edit_ldap_cancel), cancelled); + g_signal_connect(G_OBJECT(ok_btn), "clicked", + G_CALLBACK(edit_ldap_ok), cancelled); + g_signal_connect(G_OBJECT(cancel_btn), "clicked", + G_CALLBACK(edit_ldap_cancel), cancelled); gtk_widget_show_all(vbox); @@ -419,7 +420,7 @@ static void addressbook_edit_ldap_page_basic( gint pageNum, gchar *pageLbl ) { spinbtn_port_adj = gtk_adjustment_new (389, 1, 65535, 100, 1000, 1000); spinbtn_port = gtk_spin_button_new(GTK_ADJUSTMENT (spinbtn_port_adj), 1, 0); gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_port, FALSE, FALSE, 0); - gtk_widget_set_usize (spinbtn_port, 64, -1); + gtk_widget_set_size_request (spinbtn_port, 64, -1); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_port), TRUE); gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); @@ -441,10 +442,10 @@ static void addressbook_edit_ldap_page_basic( gint pageNum, gchar *pageLbl ) { gtk_table_attach(GTK_TABLE(table), lookdn_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0); /* Signal handlers */ - gtk_signal_connect(GTK_OBJECT(check_btn), "clicked", - GTK_SIGNAL_FUNC(edit_ldap_server_check), NULL); - gtk_signal_connect(GTK_OBJECT(lookdn_btn), "clicked", - GTK_SIGNAL_FUNC(edit_ldap_basedn_select), NULL); + g_signal_connect(G_OBJECT(check_btn), "clicked", + G_CALLBACK(edit_ldap_server_check), NULL); + g_signal_connect(G_OBJECT(lookdn_btn), "clicked", + G_CALLBACK(edit_ldap_basedn_select), NULL); /* Done */ gtk_widget_show_all(vbox); @@ -507,7 +508,7 @@ static void addressbook_edit_ldap_page_search( gint pageNum, gchar *pageLbl ) { LDAPCTL_DFL_QUERY_AGE, 1, LDAPCTL_MAX_QUERY_AGE, 10, 1000, 1000 ); spinbtn_queryage = gtk_spin_button_new(GTK_ADJUSTMENT (spinbtn_queryage_adj), 1, 0); gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_queryage, FALSE, FALSE, 0); - gtk_widget_set_usize (spinbtn_queryage, 64, -1); + gtk_widget_set_size_request (spinbtn_queryage, 64, -1); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_queryage), TRUE); gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); @@ -520,8 +521,8 @@ static void addressbook_edit_ldap_page_search( gint pageNum, gchar *pageLbl ) { GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); /* Signal handlers */ - gtk_signal_connect(GTK_OBJECT(reset_btn), "clicked", - GTK_SIGNAL_FUNC(edit_ldap_search_reset), NULL); + g_signal_connect(G_OBJECT(reset_btn), "clicked", + G_CALLBACK(edit_ldap_search_reset), NULL); /* Done */ gtk_widget_show_all(vbox); @@ -590,7 +591,7 @@ static void addressbook_edit_ldap_page_extended( gint pageNum, gchar *pageLbl ) spinbtn_timeout_adj = gtk_adjustment_new (0, 0, 300, 1, 10, 10); spinbtn_timeout = gtk_spin_button_new(GTK_ADJUSTMENT (spinbtn_timeout_adj), 1, 0); gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_timeout, FALSE, FALSE, 0); - gtk_widget_set_usize (spinbtn_timeout, 64, -1); + gtk_widget_set_size_request (spinbtn_timeout, 64, -1); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_timeout), TRUE); gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); @@ -605,7 +606,7 @@ static void addressbook_edit_ldap_page_extended( gint pageNum, gchar *pageLbl ) spinbtn_maxentry_adj = gtk_adjustment_new (0, 0, 500, 1, 10, 10); spinbtn_maxentry = gtk_spin_button_new(GTK_ADJUSTMENT (spinbtn_maxentry_adj), 1, 0); gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_maxentry, FALSE, FALSE, 0); - gtk_widget_set_usize (spinbtn_maxentry, 64, -1); + gtk_widget_set_size_request (spinbtn_maxentry, 64, -1); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_maxentry), TRUE); gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); @@ -640,7 +641,7 @@ void edit_ldap_set_optmenu( GtkOptionMenu *optmenu, const gint value ) { menu = gtk_option_menu_get_menu(optmenu); for( cur = GTK_MENU_SHELL(menu)->children; cur != NULL; cur = cur->next ) { menuitem = GTK_WIDGET(cur->data); - menuVal = GPOINTER_TO_INT(gtk_object_get_user_data(GTK_OBJECT(menuitem))); + menuVal = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menuitem), "user_data")); if( menuVal == value ) { gtk_option_menu_set_history(optmenu, n); return; @@ -658,7 +659,7 @@ gint edit_ldap_get_optmenu( GtkOptionMenu *optmenu ) { menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu)); menuitem = gtk_menu_get_active(GTK_MENU(menu)); - return GPOINTER_TO_INT(gtk_object_get_user_data(GTK_OBJECT(menuitem))); + return GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menuitem), "user_data")); } /** @@ -809,7 +810,7 @@ AdapterDSource *addressbook_edit_ldap( AddressIndex *addrIndex, AdapterDSource * if (!ldapedit.window) addressbook_edit_ldap_create(&cancelled); - gtk_notebook_set_page( GTK_NOTEBOOK(ldapedit.notebook), PAGE_BASIC ); + gtk_notebook_set_current_page( GTK_NOTEBOOK(ldapedit.notebook), PAGE_BASIC ); gtk_widget_grab_focus(ldapedit.ok_btn); gtk_widget_grab_focus(ldapedit.entry_name); gtk_widget_show(ldapedit.window); diff --git a/src/editldap_basedn.c b/src/editldap_basedn.c index 7b144c40e..75580077c 100644 --- a/src/editldap_basedn.c +++ b/src/editldap_basedn.c @@ -79,11 +79,12 @@ static gint edit_ldap_bdn_delete_event( GtkWidget *widget, GdkEventAny *event, g return TRUE; } -static void edit_ldap_bdn_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { +static gboolean edit_ldap_bdn_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { if (event && event->keyval == GDK_Escape) { ldapedit_basedn_cancelled = TRUE; gtk_main_quit(); } + return FALSE; } static void edit_ldap_bdn_ok( GtkWidget *widget, gboolean *cancelled ) { @@ -106,14 +107,15 @@ static void edit_ldap_bdn_list_select( GtkCList *clist, gint row, gint column, G } } -static void edit_ldap_bdn_list_button( GtkCList *clist, GdkEventButton *event, gpointer data ) { - if( ! event ) return; +static gboolean edit_ldap_bdn_list_button( GtkCList *clist, GdkEventButton *event, gpointer data ) { + if( ! event ) return FALSE; if( event->button == 1 ) { if( event->type == GDK_2BUTTON_PRESS ) { ldapedit_basedn_cancelled = FALSE; gtk_main_quit(); } } + return FALSE; } static void edit_ldap_bdn_create(void) { @@ -135,16 +137,16 @@ static void edit_ldap_bdn_create(void) { GtkWidget *statusbar; gint top; - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, 300, 270); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request(window, 300, 270); gtk_container_set_border_width(GTK_CONTAINER(window), 0); gtk_window_set_title(GTK_WINDOW(window), _("Edit LDAP - Select Search Base")); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(edit_ldap_bdn_delete_event), NULL ); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(edit_ldap_bdn_key_pressed), NULL ); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(edit_ldap_bdn_delete_event), NULL ); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(edit_ldap_bdn_key_pressed), NULL ); vbox = gtk_vbox_new(FALSE, 8); gtk_container_add(GTK_CONTAINER(window), vbox); @@ -218,14 +220,14 @@ static void edit_ldap_bdn_create(void) { hsep = gtk_hseparator_new(); gtk_box_pack_end(GTK_BOX(vbox), hsep, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(edit_ldap_bdn_ok), NULL); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(edit_ldap_bdn_cancel), NULL); - gtk_signal_connect(GTK_OBJECT(basedn_list), "select_row", - GTK_SIGNAL_FUNC(edit_ldap_bdn_list_select), NULL); - gtk_signal_connect(GTK_OBJECT(basedn_list), "button_press_event", - GTK_SIGNAL_FUNC(edit_ldap_bdn_list_button), NULL); + g_signal_connect(G_OBJECT(ok_btn), "clicked", + G_CALLBACK(edit_ldap_bdn_ok), NULL); + g_signal_connect(G_OBJECT(cancel_btn), "clicked", + G_CALLBACK(edit_ldap_bdn_cancel), NULL); + g_signal_connect(G_OBJECT(basedn_list), "select_row", + G_CALLBACK(edit_ldap_bdn_list_select), NULL); + g_signal_connect(G_OBJECT(basedn_list), "button_press_event", + G_CALLBACK(edit_ldap_bdn_list_button), NULL); gtk_widget_show_all(vbox); diff --git a/src/editvcard.c b/src/editvcard.c index 28bbc18a4..a9b61c234 100644 --- a/src/editvcard.c +++ b/src/editvcard.c @@ -102,7 +102,7 @@ static void edit_vcard_file_check( void ) { } static void edit_vcard_file_ok( GtkWidget *widget, gpointer data ) { - gchar *sFile; + const gchar *sFile; AddressFileSelection *afs; GtkWidget *fileSel; @@ -131,10 +131,10 @@ static void edit_vcard_file_select_create( AddressFileSelection *afs ) { fileSelector = gtk_file_selection_new( _("Select vCard File") ); gtk_file_selection_hide_fileop_buttons( GTK_FILE_SELECTION(fileSelector) ); - gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION(fileSelector)->ok_button), - "clicked", GTK_SIGNAL_FUNC (edit_vcard_file_ok), ( gpointer ) afs ); - gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION(fileSelector)->cancel_button), - "clicked", GTK_SIGNAL_FUNC (edit_vcard_file_cancel), ( gpointer ) afs ); + g_signal_connect( G_OBJECT (GTK_FILE_SELECTION(fileSelector)->ok_button), + "clicked", G_CALLBACK (edit_vcard_file_ok), ( gpointer ) afs ); + g_signal_connect( G_OBJECT (GTK_FILE_SELECTION(fileSelector)->cancel_button), + "clicked", G_CALLBACK (edit_vcard_file_cancel), ( gpointer ) afs ); afs->fileSelector = fileSelector; afs->cancelled = TRUE; } @@ -158,11 +158,12 @@ static gint edit_vcard_delete_event( GtkWidget *widget, GdkEventAny *event, gboo return TRUE; } -static void edit_vcard_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { +static gboolean edit_vcard_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { if (event && event->keyval == GDK_Escape) { *cancelled = TRUE; gtk_main_quit(); } + return FALSE; } static void addressbook_edit_vcard_create( gboolean *cancelled ) { @@ -182,18 +183,18 @@ static void addressbook_edit_vcard_create( gboolean *cancelled ) { GtkWidget *hsbox; gint top; - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, 450, -1); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request(window, 450, -1); gtk_container_set_border_width( GTK_CONTAINER(window), 0 ); gtk_window_set_title(GTK_WINDOW(window), _("Edit vCard Entry")); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(edit_vcard_delete_event), - cancelled); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(edit_vcard_key_pressed), - cancelled); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(edit_vcard_delete_event), + cancelled); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(edit_vcard_key_pressed), + cancelled); vbox = gtk_vbox_new(FALSE, 8); gtk_container_add(GTK_CONTAINER(window), vbox); @@ -245,14 +246,14 @@ static void addressbook_edit_vcard_create( gboolean *cancelled ) { hsep = gtk_hseparator_new(); gtk_box_pack_end(GTK_BOX(vbox), hsep, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(edit_vcard_ok), cancelled); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(edit_vcard_cancel), cancelled); - gtk_signal_connect(GTK_OBJECT(file_btn), "clicked", - GTK_SIGNAL_FUNC(edit_vcard_file_select), NULL); - gtk_signal_connect(GTK_OBJECT(check_btn), "clicked", - GTK_SIGNAL_FUNC(edit_vcard_file_check), NULL); + g_signal_connect(G_OBJECT(ok_btn), "clicked", + G_CALLBACK(edit_vcard_ok), cancelled); + g_signal_connect(G_OBJECT(cancel_btn), "clicked", + G_CALLBACK(edit_vcard_cancel), cancelled); + g_signal_connect(G_OBJECT(file_btn), "clicked", + G_CALLBACK(edit_vcard_file_select), NULL); + g_signal_connect(G_OBJECT(check_btn), "clicked", + G_CALLBACK(edit_vcard_file_check), NULL); gtk_widget_show_all(vbox); diff --git a/src/exphtmldlg.c b/src/exphtmldlg.c index 1efa08028..5c222d3b5 100644 --- a/src/exphtmldlg.c +++ b/src/exphtmldlg.c @@ -323,7 +323,7 @@ static void export_html_browse( GtkWidget *widget, gpointer data ) { * \param data User data. */ static void exp_html_file_ok( GtkWidget *widget, gpointer data ) { - gchar *sFile; + const gchar *sFile; AddressFileSelection *afs; GtkWidget *fileSel; @@ -682,7 +682,7 @@ static void export_html_dialog_create( void ) { GtkWidget *hsbox; GtkWidget *statusbar; - window = gtk_window_new(GTK_WINDOW_DIALOG); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_usize(window, EXPORTHTML_WIDTH, EXPORTHTML_HEIGHT ); gtk_container_set_border_width( GTK_CONTAINER(window), 0 ); gtk_window_set_title( GTK_WINDOW(window), diff --git a/src/expldifdlg.c b/src/expldifdlg.c index 7d9bb26df..00a2b3609 100644 --- a/src/expldifdlg.c +++ b/src/expldifdlg.c @@ -335,7 +335,7 @@ static void export_ldif_next( GtkWidget *widget ) { * \param data User data. */ static void exp_ldif_file_ok( GtkWidget *widget, gpointer data ) { - gchar *sFile; + const gchar *sFile; AddressFileSelection *afs; GtkWidget *fileSel; @@ -703,7 +703,7 @@ static void export_ldif_dialog_create( void ) { GtkWidget *hsbox; GtkWidget *statusbar; - window = gtk_window_new(GTK_WINDOW_DIALOG); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_usize(window, EXPORTLDIF_WIDTH, EXPORTLDIF_HEIGHT ); gtk_container_set_border_width( GTK_CONTAINER(window), 0 ); gtk_window_set_title( GTK_WINDOW(window), diff --git a/src/export.c b/src/export.c index a0886c6a4..7859b31a3 100644 --- a/src/export.c +++ b/src/export.c @@ -48,6 +48,7 @@ #include "manage_window.h" #include "folder.h" #include "utils.h" +#include "codeconv.h" static GtkWidget *window; static GtkWidget *src_entry; @@ -64,7 +65,7 @@ static void export_cancel_cb(GtkWidget *widget, gpointer data); static void export_srcsel_cb(GtkWidget *widget, gpointer data); static void export_filesel_cb(GtkWidget *widget, gpointer data); static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data); -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); gint export_mbox(FolderItem *default_src) { @@ -94,18 +95,30 @@ gint export_mbox(FolderItem *default_src) gtk_main(); if (export_ack) { - gchar *srcdir, *mbox; + const gchar *srcdir, *utf8mbox; FolderItem *src; srcdir = gtk_entry_get_text(GTK_ENTRY(src_entry)); - mbox = gtk_entry_get_text(GTK_ENTRY(file_entry)); + utf8mbox = gtk_entry_get_text(GTK_ENTRY(file_entry)); + if (utf8mbox && *utf8mbox) { + const gchar *src_codeset = CS_UTF_8; + const gchar *dest_codeset = conv_get_current_charset_str(); + gchar *mbox; + +#warning FIXME_GTK2 /* should we use g_filename_from_utf8()? */ + mbox = conv_codeset_strdup(utf8mbox, src_codeset, dest_codeset); + if (!mbox) { + g_warning("faild to convert character set\n"); + mbox = g_strdup(utf8mbox); + } - if (mbox && *mbox) { src = folder_find_item_from_identifier(srcdir); if (!src) g_warning("Can't find the folder.\n"); else ok = export_to_mbox(src, mbox); + + g_free(mbox); } } @@ -124,16 +137,16 @@ static void export_create(void) GtkWidget *src_label; GtkWidget *confirm_area; - window = gtk_window_new(GTK_WINDOW_DIALOG); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), _("Export")); gtk_container_set_border_width(GTK_CONTAINER(window), 5); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(delete_event), NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(key_pressed), NULL); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(delete_event), NULL); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(key_pressed), NULL); MANAGE_WINDOW_SIGNALS_CONNECT(window); vbox = gtk_vbox_new(FALSE, 4); @@ -152,7 +165,7 @@ static void export_create(void) gtk_container_set_border_width(GTK_CONTAINER(table), 8); gtk_table_set_row_spacings(GTK_TABLE(table), 8); gtk_table_set_col_spacings(GTK_TABLE(table), 8); - gtk_widget_set_usize(table, 420, -1); + gtk_widget_set_size_request(table, 420, -1); src_label = gtk_label_new(_("Source dir:")); gtk_table_attach(GTK_TABLE(table), src_label, 0, 1, 0, 1, @@ -175,14 +188,14 @@ static void export_create(void) src_button = gtk_button_new_with_label(_(" Select... ")); gtk_table_attach(GTK_TABLE(table), src_button, 2, 3, 0, 1, 0, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(src_button), "clicked", - GTK_SIGNAL_FUNC(export_srcsel_cb), NULL); + g_signal_connect(G_OBJECT(src_button), "clicked", + G_CALLBACK(export_srcsel_cb), NULL); file_button = gtk_button_new_with_label(_(" Select... ")); gtk_table_attach(GTK_TABLE(table), file_button, 2, 3, 1, 2, 0, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(file_button), "clicked", - GTK_SIGNAL_FUNC(export_filesel_cb), NULL); + g_signal_connect(G_OBJECT(file_button), "clicked", + G_CALLBACK(export_filesel_cb), NULL); gtkut_button_set_create(&confirm_area, &ok_button, _("OK"), @@ -191,10 +204,10 @@ static void export_create(void) gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); gtk_widget_grab_default(ok_button); - gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", - GTK_SIGNAL_FUNC(export_ok_cb), NULL); - gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", - GTK_SIGNAL_FUNC(export_cancel_cb), NULL); + g_signal_connect(G_OBJECT(ok_button), "clicked", + G_CALLBACK(export_ok_cb), NULL); + g_signal_connect(G_OBJECT(cancel_button), "clicked", + G_CALLBACK(export_cancel_cb), NULL); gtk_widget_show_all(window); } @@ -218,7 +231,20 @@ static void export_filesel_cb(GtkWidget *widget, gpointer data) gchar *filename; filename = filesel_select_file(_("Select exporting file"), NULL); - if (filename) + if (!filename) return; + + if (g_getenv ("G_BROKEN_FILENAMES")) { + const gchar *oldstr = filename; + filename = conv_codeset_strdup (filename, + conv_get_current_charset_str(), + CS_UTF_8); + if (!filename) { + g_warning("export_filesel_cb(): faild to convert character set."); + filename = g_strdup(oldstr); + } + gtk_entry_set_text(GTK_ENTRY(file_entry), filename); + g_free(filename); + } else gtk_entry_set_text(GTK_ENTRY(file_entry), filename); } @@ -237,8 +263,9 @@ static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data) return TRUE; } -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) { if (event && event->keyval == GDK_Escape) export_cancel_cb(NULL, NULL); + return FALSE; } diff --git a/src/folder.h b/src/folder.h index c352228df..7a75f683f 100644 --- a/src/folder.h +++ b/src/folder.h @@ -211,7 +211,8 @@ struct _FolderClass GSList *(*get_msginfos) (Folder *folder, FolderItem *item, MsgNumberList *msgnum_list); - gchar *(*fetch_msg) (Folder *folder, + /* return value is locale charset */ + gchar *(*fetch_msg) (Folder *folder, FolderItem *item, gint num); gint (*add_msg) (Folder *folder, @@ -268,8 +269,8 @@ struct _FolderItem { SpecialFolderItemType stype; - gchar *name; - gchar *path; + gchar *name; /* UTF-8 */ + gchar *path; /* UTF-8 */ time_t mtime; @@ -407,6 +408,7 @@ FolderItem *folder_get_default_processing (void); void folder_set_missing_folders (void); void folder_unref_account_all (PrefsAccount *account); +/* return value is locale encoded file name */ gchar *folder_item_get_path (FolderItem *item); gint folder_item_open (FolderItem *item); @@ -418,6 +420,7 @@ MsgInfo *folder_item_get_msginfo (FolderItem *item, MsgInfo *folder_item_get_msginfo_by_msgid(FolderItem *item, const gchar *msgid); GSList *folder_item_get_msg_list (FolderItem *item); +/* return value is locale charset */ gchar *folder_item_fetch_msg (FolderItem *item, gint num); gint folder_item_add_msg (FolderItem *dest, @@ -448,6 +451,7 @@ void folder_item_change_msg_flags (FolderItem *item, MsgPermFlags newflags); gboolean folder_item_is_msg_changed (FolderItem *item, MsgInfo *msginfo); +/* return value is locale chaset */ gchar *folder_item_get_cache_file (FolderItem *item); gchar *folder_item_get_mark_file (FolderItem *item); gchar * folder_item_get_identifier (FolderItem * item); diff --git a/src/foldersel.c b/src/foldersel.c index 0c2639308..1e5138c16 100644 --- a/src/foldersel.c +++ b/src/foldersel.c @@ -83,7 +83,7 @@ static void foldersel_activated (void); static gint delete_event (GtkWidget *widget, GdkEventAny *event, gpointer data); -static void key_pressed (GtkWidget *widget, +static gboolean key_pressed (GtkWidget *widget, GdkEventKey *event, gpointer data); @@ -144,19 +144,19 @@ static void foldersel_create(void) GtkWidget *scrolledwin; GtkWidget *confirm_area; - window = gtk_window_new(GTK_WINDOW_DIALOG); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), _("Select folder")); - gtk_widget_set_usize(window, 300, 400); + gtk_widget_set_size_request(window, 300, 400); gtk_container_set_border_width(GTK_CONTAINER(window), BORDER_WIDTH); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, TRUE); gtk_window_set_wmclass (GTK_WINDOW(window), "folder_selection", "Sylpheed"); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(delete_event), NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(key_pressed), NULL); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(delete_event), NULL); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(key_pressed), NULL); MANAGE_WINDOW_SIGNALS_CONNECT(window); vbox = gtk_vbox_new(FALSE, 4); @@ -179,15 +179,15 @@ static void foldersel_create(void) gtk_clist_set_compare_func(GTK_CLIST(ctree), foldersel_clist_compare); GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[0].button, GTK_CAN_FOCUS); - /* gtk_signal_connect(GTK_OBJECT(ctree), "tree_select_row", - GTK_SIGNAL_FUNC(foldersel_selected), NULL); */ - gtk_signal_connect(GTK_OBJECT(ctree), "select_row", - GTK_SIGNAL_FUNC(foldersel_selected), NULL); + /* g_signal_connect(G_OBJECT(ctree), "tree_select_row", + G_CALLBACK(foldersel_selected), NULL); */ + g_signal_connect(G_OBJECT(ctree), "select_row", + G_CALLBACK(foldersel_selected), NULL); entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(entry), "activate", - GTK_SIGNAL_FUNC(foldersel_activated), NULL); + g_signal_connect(G_OBJECT(entry), "activate", + G_CALLBACK(foldersel_activated), NULL); gtkut_button_set_create(&confirm_area, &ok_button, _("OK"), @@ -197,10 +197,10 @@ static void foldersel_create(void) gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); gtk_widget_grab_default(ok_button); - gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", - GTK_SIGNAL_FUNC(foldersel_ok), NULL); - gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", - GTK_SIGNAL_FUNC(foldersel_cancel), NULL); + g_signal_connect(G_OBJECT(ok_button), "clicked", + G_CALLBACK(foldersel_ok), NULL); + g_signal_connect(G_OBJECT(cancel_button), "clicked", + G_CALLBACK(foldersel_cancel), NULL); gtk_widget_show_all(window); } @@ -347,10 +347,11 @@ static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data) return TRUE; } -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) { if (event && event->keyval == GDK_Escape) foldersel_cancel(NULL, NULL); + return FALSE; } static gint foldersel_clist_compare(GtkCList *clist, diff --git a/src/folderview.c b/src/folderview.c index dc1d1bb77..e8f886f49 100644 --- a/src/folderview.c +++ b/src/folderview.c @@ -78,9 +78,6 @@ typedef enum static GList *folderview_list = NULL; -static GdkFont *normalfont; -static GdkFont *boldfont; - static GtkStyle *normal_style; static GtkStyle *normal_color_style; static GtkStyle *bold_style; @@ -158,13 +155,13 @@ static gint folderview_compare_name (gconstpointer a, gconstpointer b); /* callback functions */ -static void folderview_button_pressed (GtkWidget *ctree, - GdkEventButton *event, - FolderView *folderview); -static void folderview_button_released (GtkWidget *ctree, - GdkEventButton *event, - FolderView *folderview); -static void folderview_key_pressed (GtkWidget *widget, +static gboolean folderview_button_pressed (GtkWidget *ctree, + GdkEventButton *event, + FolderView *folderview); +static gboolean folderview_button_released (GtkWidget *ctree, + GdkEventButton *event, + FolderView *folderview); +static gboolean folderview_key_pressed (GtkWidget *widget, GdkEventKey *event, FolderView *folderview); static void folderview_selected (GtkCTree *ctree, @@ -390,7 +387,7 @@ FolderView *folderview_create(void) (GTK_SCROLLED_WINDOW(scrolledwin), GTK_POLICY_AUTOMATIC, prefs_common.folderview_vscrollbar_policy); - gtk_widget_set_usize(scrolledwin, + gtk_widget_set_size_request(scrolledwin, prefs_common.folderview_width, prefs_common.folderview_height); @@ -451,63 +448,63 @@ FolderView *folderview_create(void) "", &mbox_factory, folderview); - gtk_signal_connect(GTK_OBJECT(ctree), "key_press_event", - GTK_SIGNAL_FUNC(folderview_key_pressed), - folderview); - gtk_signal_connect(GTK_OBJECT(ctree), "button_press_event", - GTK_SIGNAL_FUNC(folderview_button_pressed), - folderview); - gtk_signal_connect(GTK_OBJECT(ctree), "button_release_event", - GTK_SIGNAL_FUNC(folderview_button_released), - folderview); - gtk_signal_connect(GTK_OBJECT(ctree), "tree_select_row", - GTK_SIGNAL_FUNC(folderview_selected), folderview); - gtk_signal_connect(GTK_OBJECT(ctree), "start_drag", - GTK_SIGNAL_FUNC(folderview_start_drag), folderview); - gtk_signal_connect(GTK_OBJECT(ctree), "drag_data_get", - GTK_SIGNAL_FUNC(folderview_drag_data_get), - folderview); - - gtk_signal_connect_after(GTK_OBJECT(ctree), "tree_expand", - GTK_SIGNAL_FUNC(folderview_tree_expanded), - folderview); - gtk_signal_connect_after(GTK_OBJECT(ctree), "tree_collapse", - GTK_SIGNAL_FUNC(folderview_tree_collapsed), - folderview); - - gtk_signal_connect(GTK_OBJECT(ctree), "resize_column", - GTK_SIGNAL_FUNC(folderview_col_resized), - folderview); - - gtk_signal_connect(GTK_OBJECT(mail_popup), "selection_done", - GTK_SIGNAL_FUNC(folderview_popup_close), - folderview); - gtk_signal_connect(GTK_OBJECT(imap_popup), "selection_done", - GTK_SIGNAL_FUNC(folderview_popup_close), - folderview); - gtk_signal_connect(GTK_OBJECT(news_popup), "selection_done", - GTK_SIGNAL_FUNC(folderview_popup_close), - folderview); - gtk_signal_connect(GTK_OBJECT(mbox_popup), "selection_done", - GTK_SIGNAL_FUNC(folderview_popup_close), - folderview); + g_signal_connect(G_OBJECT(ctree), "key_press_event", + G_CALLBACK(folderview_key_pressed), + folderview); + g_signal_connect(G_OBJECT(ctree), "button_press_event", + G_CALLBACK(folderview_button_pressed), + folderview); + g_signal_connect(G_OBJECT(ctree), "button_release_event", + G_CALLBACK(folderview_button_released), + folderview); + g_signal_connect(G_OBJECT(ctree), "tree_select_row", + G_CALLBACK(folderview_selected), folderview); + g_signal_connect(G_OBJECT(ctree), "start_drag", + G_CALLBACK(folderview_start_drag), folderview); + g_signal_connect(G_OBJECT(ctree), "drag_data_get", + G_CALLBACK(folderview_drag_data_get), + folderview); + + g_signal_connect_after(G_OBJECT(ctree), "tree_expand", + G_CALLBACK(folderview_tree_expanded), + folderview); + g_signal_connect_after(G_OBJECT(ctree), "tree_collapse", + G_CALLBACK(folderview_tree_collapsed), + folderview); + + g_signal_connect(G_OBJECT(ctree), "resize_column", + G_CALLBACK(folderview_col_resized), + folderview); + + g_signal_connect(G_OBJECT(mail_popup), "selection_done", + G_CALLBACK(folderview_popup_close), + folderview); + g_signal_connect(G_OBJECT(imap_popup), "selection_done", + G_CALLBACK(folderview_popup_close), + folderview); + g_signal_connect(G_OBJECT(news_popup), "selection_done", + G_CALLBACK(folderview_popup_close), + folderview); + g_signal_connect(G_OBJECT(mbox_popup), "selection_done", + G_CALLBACK(folderview_popup_close), + folderview); /* drop callback */ gtk_drag_dest_set(ctree, GTK_DEST_DEFAULT_ALL & ~GTK_DEST_DEFAULT_HIGHLIGHT, summary_drag_types, 1, GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_DEFAULT); - gtk_signal_connect(GTK_OBJECT(ctree), "drag_motion", - GTK_SIGNAL_FUNC(folderview_drag_motion_cb), - folderview); - gtk_signal_connect(GTK_OBJECT(ctree), "drag_leave", - GTK_SIGNAL_FUNC(folderview_drag_leave_cb), - folderview); - gtk_signal_connect(GTK_OBJECT(ctree), "drag_data_received", - GTK_SIGNAL_FUNC(folderview_drag_received_cb), - folderview); - gtk_signal_connect(GTK_OBJECT(ctree), "drag_end", - GTK_SIGNAL_FUNC(folderview_drag_end_cb), - folderview); + g_signal_connect(G_OBJECT(ctree), "drag_motion", + G_CALLBACK(folderview_drag_motion_cb), + folderview); + g_signal_connect(G_OBJECT(ctree), "drag_leave", + G_CALLBACK(folderview_drag_leave_cb), + folderview); + g_signal_connect(G_OBJECT(ctree), "drag_data_received", + G_CALLBACK(folderview_drag_received_cb), + folderview); + g_signal_connect(G_OBJECT(ctree), "drag_end", + G_CALLBACK(folderview_drag_end_cb), + folderview); folderview->scrolledwin = scrolledwin; folderview->ctree = ctree; @@ -588,6 +585,7 @@ void folderview_init(FolderView *folderview) gtk_clist_set_column_widget(GTK_CLIST(ctree),COL_NEW,hbox_new); gtk_clist_set_column_widget(GTK_CLIST(ctree),COL_UNREAD,hbox_unread); +#if 0 if (!normalfont) { if (gtkut_font_load(NORMAL_FONT) == NULL) { GtkStyle *style = gtk_style_new(); @@ -609,10 +607,18 @@ void folderview_init(FolderView *folderview) else boldfont = gtkut_font_load(BOLD_FONT); } +#endif if (!bold_style) { + PangoFontDescription *font_desc; bold_style = gtk_style_copy(gtk_widget_get_style(ctree)); - bold_style->font = boldfont; + font_desc = pango_font_description_from_string(BOLD_FONT); + if (font_desc) { + if (bold_style->font_desc) + pango_font_description_free + (bold_style->font_desc); + bold_style->font_desc = font_desc; + } bold_color_style = gtk_style_copy(bold_style); bold_color_style->fg[GTK_STATE_NORMAL] = folderview->color_new; @@ -620,8 +626,15 @@ void folderview_init(FolderView *folderview) bold_tgtfold_style->fg[GTK_STATE_NORMAL] = folderview->color_op; } if (!normal_style) { + PangoFontDescription *font_desc; normal_style = gtk_style_copy(gtk_widget_get_style(ctree)); - normal_style->font = normalfont; + font_desc = pango_font_description_from_string(NORMAL_FONT); + if (font_desc) { + if (normal_style->font_desc) + pango_font_description_free + (normal_style->font_desc); + normal_style->font_desc = font_desc; + } normal_color_style = gtk_style_copy(normal_style); normal_color_style->fg[GTK_STATE_NORMAL] = folderview->color_new; } @@ -811,8 +824,8 @@ static GtkWidget *label_window_create(const gchar *str) GtkWidget *window; GtkWidget *label; - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, 380, 60); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request(window, 380, 60); gtk_container_set_border_width(GTK_CONTAINER(window), 8); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_title(GTK_WINDOW(window), str); @@ -1427,8 +1440,8 @@ void folderview_delete_folder(FolderView *folderview) /* callback functions */ -static void folderview_button_pressed(GtkWidget *ctree, GdkEventButton *event, - FolderView *folderview) +static gboolean folderview_button_pressed(GtkWidget *ctree, GdkEventButton *event, + FolderView *folderview) { GtkCList *clist = GTK_CLIST(ctree); gint prev_row = -1, row = -1, column = -1; @@ -1448,11 +1461,11 @@ static void folderview_button_pressed(GtkWidget *ctree, GdkEventButton *event, gboolean folder_processing = FALSE; gboolean folder_scoring = FALSE; - if (!event) return; + if (!event) return FALSE; if (event->button == 1) { folderview->open_folder = TRUE; - return; + return FALSE; } if (event->button == 2 || event->button == 3) { @@ -1468,7 +1481,7 @@ static void folderview_button_pressed(GtkWidget *ctree, GdkEventButton *event, if (!gtk_clist_get_selection_info(clist, event->x, event->y, &row, &column)) - return; + return FALSE; if (prev_row != row) { gtk_clist_unselect_all(clist); if (event->button == 2) @@ -1481,11 +1494,11 @@ static void folderview_button_pressed(GtkWidget *ctree, GdkEventButton *event, } } - if (event->button != 3) return; + if (event->button != 3) return FALSE; item = gtk_clist_get_row_data(clist, row); - g_return_if_fail(item != NULL); - g_return_if_fail(item->folder != NULL); + g_return_val_if_fail(item != NULL, FALSE); + g_return_val_if_fail(item->folder != NULL, FALSE); folder = item->folder; if (folderview->mainwin->lock_count == 0) { @@ -1575,18 +1588,20 @@ static void folderview_button_pressed(GtkWidget *ctree, GdkEventButton *event, SET_SENS(mbox_factory, "/Processing...", folder_processing); SET_SENS(mbox_factory, "/Scoring...", folder_scoring); } else - return; + return FALSE; #undef SET_SENS gtk_menu_popup(GTK_MENU(popup), NULL, NULL, NULL, NULL, event->button, event->time); + + return FALSE; } -static void folderview_button_released(GtkWidget *ctree, GdkEventButton *event, - FolderView *folderview) +static gboolean folderview_button_released(GtkWidget *ctree, GdkEventButton *event, + FolderView *folderview) { - if (!event) return; + if (!event) return FALSE; if (event->button == 1 && folderview->open_folder == FALSE && folderview->opened != NULL) { @@ -1594,12 +1609,14 @@ static void folderview_button_released(GtkWidget *ctree, GdkEventButton *event, folderview->opened); gtk_ctree_select(GTK_CTREE(ctree), folderview->opened); } + + return FALSE; } -static void folderview_key_pressed(GtkWidget *widget, GdkEventKey *event, - FolderView *folderview) +static gboolean folderview_key_pressed(GtkWidget *widget, GdkEventKey *event, + FolderView *folderview) { - if (!event) return; + if (!event) return FALSE; switch (event->keyval) { case GDK_Return: @@ -1622,6 +1639,8 @@ static void folderview_key_pressed(GtkWidget *widget, GdkEventKey *event, default: break; } + + return FALSE; } static void folderview_selected(GtkCTree *ctree, GtkCTreeNode *row, @@ -2830,13 +2849,13 @@ static gboolean folderview_drag_motion_cb(GtkWidget *widget, drag_state_start(folderview, node, item); if (acceptable) { - gtk_signal_handler_block_by_func - (GTK_OBJECT(widget), - GTK_SIGNAL_FUNC(folderview_selected), folderview); + g_signal_handlers_block_by_func + (G_OBJECT(widget), + G_CALLBACK(folderview_selected), folderview); gtk_ctree_select(GTK_CTREE(widget), node); - gtk_signal_handler_unblock_by_func - (GTK_OBJECT(widget), - GTK_SIGNAL_FUNC(folderview_selected), folderview); + g_signal_handlers_unblock_by_func + (G_OBJECT(widget), + G_CALLBACK(folderview_selected), folderview); gdk_drag_status(context, (context->actions == GDK_ACTION_COPY ? GDK_ACTION_COPY : GDK_ACTION_MOVE) , time); diff --git a/src/grouplistdialog.c b/src/grouplistdialog.c index c06a2436c..8c13ad325 100644 --- a/src/grouplistdialog.c +++ b/src/grouplistdialog.c @@ -85,7 +85,7 @@ static void cancel_clicked (GtkWidget *widget, gpointer data); static void refresh_clicked (GtkWidget *widget, gpointer data); -static void key_pressed (GtkWidget *widget, +static gboolean key_pressed (GtkWidget *widget, GdkEventKey *event, gpointer data); static void ctree_selected (GtkCTree *ctree, @@ -165,16 +165,16 @@ static void grouplist_dialog_create(void) dialog = gtk_dialog_new(); gtk_window_set_policy(GTK_WINDOW(dialog), FALSE, TRUE, FALSE); - gtk_widget_set_usize(dialog, - GROUPLIST_DIALOG_WIDTH, GROUPLIST_DIALOG_HEIGHT); + gtk_widget_set_size_request(dialog, + GROUPLIST_DIALOG_WIDTH, GROUPLIST_DIALOG_HEIGHT); gtk_container_set_border_width (GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 5); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); gtk_window_set_title(GTK_WINDOW(dialog), _("Newsgroup subscription")); - gtk_signal_connect(GTK_OBJECT(dialog), "delete_event", - GTK_SIGNAL_FUNC(cancel_clicked), NULL); - gtk_signal_connect(GTK_OBJECT(dialog), "key_press_event", - GTK_SIGNAL_FUNC(key_pressed), NULL); + g_signal_connect(G_OBJECT(dialog), "delete_event", + G_CALLBACK(cancel_clicked), NULL); + g_signal_connect(G_OBJECT(dialog), "key_press_event", + G_CALLBACK(key_pressed), NULL); MANAGE_WINDOW_SIGNALS_CONNECT(dialog); gtk_widget_realize(dialog); @@ -197,14 +197,14 @@ static void grouplist_dialog_create(void) entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(entry), "activate", - GTK_SIGNAL_FUNC(entry_activated), NULL); + g_signal_connect(G_OBJECT(entry), "activate", + G_CALLBACK(entry_activated), NULL); search_button = gtk_button_new_with_label(_(" Search ")); gtk_box_pack_start(GTK_BOX(hbox), search_button, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(search_button), "clicked", - GTK_SIGNAL_FUNC(search_clicked), NULL); + g_signal_connect(G_OBJECT(search_button), "clicked", + G_CALLBACK(search_clicked), NULL); scrolledwin = gtk_scrolled_window_new(NULL, NULL); gtk_box_pack_start(GTK_BOX (vbox), scrolledwin, TRUE, TRUE, 0); @@ -226,10 +226,10 @@ static void grouplist_dialog_create(void) for (i = 0; i < 3; i++) GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[i].button, GTK_CAN_FOCUS); - gtk_signal_connect(GTK_OBJECT(ctree), "tree_select_row", - GTK_SIGNAL_FUNC(ctree_selected), NULL); - gtk_signal_connect(GTK_OBJECT(ctree), "tree_unselect_row", - GTK_SIGNAL_FUNC(ctree_unselected), NULL); + g_signal_connect(G_OBJECT(ctree), "tree_select_row", + G_CALLBACK(ctree_selected), NULL); + g_signal_connect(G_OBJECT(ctree), "tree_unselect_row", + G_CALLBACK(ctree_unselected), NULL); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); @@ -245,12 +245,12 @@ static void grouplist_dialog_create(void) confirm_area); gtk_widget_grab_default(ok_button); - gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", - GTK_SIGNAL_FUNC(ok_clicked), NULL); - gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", - GTK_SIGNAL_FUNC(cancel_clicked), NULL); - gtk_signal_connect(GTK_OBJECT(refresh_button), "clicked", - GTK_SIGNAL_FUNC(refresh_clicked), NULL); + g_signal_connect(G_OBJECT(ok_button), "clicked", + G_CALLBACK(ok_clicked), NULL); + g_signal_connect(G_OBJECT(cancel_button), "clicked", + G_CALLBACK(cancel_clicked), NULL); + g_signal_connect(G_OBJECT(refresh_button), "clicked", + G_CALLBACK(refresh_clicked), NULL); gtk_widget_show_all(GTK_DIALOG(dialog)->vbox); } @@ -400,12 +400,12 @@ static void grouplist_dialog_set_list(const gchar *pattern, gboolean refresh) return; } } else { - gtk_signal_handler_block_by_func - (GTK_OBJECT(ctree), GTK_SIGNAL_FUNC(ctree_unselected), + g_signal_handlers_block_by_func + (G_OBJECT(ctree), G_CALLBACK(ctree_unselected), NULL); gtk_clist_clear(GTK_CLIST(ctree)); - gtk_signal_handler_unblock_by_func - (GTK_OBJECT(ctree), GTK_SIGNAL_FUNC(ctree_unselected), + g_signal_handlers_unblock_by_func + (G_OBJECT(ctree), G_CALLBACK(ctree_unselected), NULL); } gtk_entry_set_text(GTK_ENTRY(entry), pattern); @@ -414,9 +414,9 @@ static void grouplist_dialog_set_list(const gchar *pattern, gboolean refresh) gtk_clist_freeze(GTK_CLIST(ctree)); - gtk_signal_handler_block_by_func(GTK_OBJECT(ctree), - GTK_SIGNAL_FUNC(ctree_selected), - NULL); + g_signal_handlers_block_by_func(G_OBJECT(ctree), + G_CALLBACK(ctree_selected), + NULL); for (cur = group_list; cur != NULL ; cur = cur->next) { NewsGroupInfo *ginfo = (NewsGroupInfo *)cur->data; @@ -430,9 +430,9 @@ static void grouplist_dialog_set_list(const gchar *pattern, gboolean refresh) } } - gtk_signal_handler_unblock_by_func(GTK_OBJECT(ctree), - GTK_SIGNAL_FUNC(ctree_selected), - NULL); + g_signal_handlers_unblock_by_func(G_OBJECT(ctree), + G_CALLBACK(ctree_selected), + NULL); gtk_clist_thaw(GTK_CLIST(ctree)); @@ -456,16 +456,16 @@ static void grouplist_search(void) static void grouplist_clear(void) { - gtk_signal_handler_block_by_func(GTK_OBJECT(ctree), - GTK_SIGNAL_FUNC(ctree_unselected), - NULL); + g_signal_handlers_block_by_func(G_OBJECT(ctree), + G_CALLBACK(ctree_unselected), + NULL); gtk_clist_clear(GTK_CLIST(ctree)); gtk_entry_set_text(GTK_ENTRY(entry), ""); news_group_list_free(group_list); group_list = NULL; - gtk_signal_handler_unblock_by_func(GTK_OBJECT(ctree), - GTK_SIGNAL_FUNC(ctree_unselected), - NULL); + g_signal_handlers_unblock_by_func(G_OBJECT(ctree), + G_CALLBACK(ctree_unselected), + NULL); } static gboolean grouplist_recv_func(SockInfo *sock, gint count, gint read_bytes, @@ -511,10 +511,11 @@ static void refresh_clicked(GtkWidget *widget, gpointer data) g_free(str); } -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) { if (event && event->keyval == GDK_Escape) cancel_clicked(NULL, NULL); + return FALSE; } static void ctree_selected(GtkCTree *ctree, GtkCTreeNode *node, gint column, diff --git a/src/gtk/Makefile.am b/src/gtk/Makefile.am index a4978cd58..eafa6f059 100644 --- a/src/gtk/Makefile.am +++ b/src/gtk/Makefile.am @@ -1,5 +1,8 @@ noinst_LTLIBRARIES = libsylpheedgtk.la +EXTRA_DIST = \ + sylpheed-marshal.list + libsylpheedgtk_la_SOURCES = \ about.c \ colorlabel.c \ @@ -10,12 +13,12 @@ libsylpheedgtk_la_SOURCES = \ gtkutils.c \ gtkshruler.c \ gtksctree.c \ - gtkstext.c \ manage_window.c \ menu.c \ pluginwindow.c \ prefswindow.c \ sslcertwindow.c \ + sylpheed-marshal.c \ gtkvscrollbutton.c sylpheedgtkincludedir = $(pkgincludedir)/gtk @@ -29,12 +32,12 @@ sylpheedgtkinclude_HEADERS = \ gtkutils.h \ gtkshruler.h \ gtksctree.h \ - gtkstext.h \ manage_window.h \ menu.h \ pluginwindow.h \ prefswindow.h \ sslcertwindow.h \ + sylpheed-marshal.h \ gtkvscrollbutton.h AM_CPPFLAGS = \ @@ -48,3 +51,11 @@ libsylpheedgtk_la_LIBADD = \ ../common/libsylpheedcommon.la \ $(GTK_LIBS) \ $(ASPELL_LIBS) + +BUILT_SOURCES=sylpheed-marshal.c sylpheed-marshal.h + +sylpheed-marshal.h: sylpheed-marshal.list + $(GLIB_GENMARSHAL) $< --header --prefix=sylpheed_marshal > $@ + +sylpheed-marshal.c: sylpheed-marshal.list + $(GLIB_GENMARSHAL) $< --body --prefix=sylpheed_marshal > $@ diff --git a/src/gtk/about.c b/src/gtk/about.c index 44e2ed19e..063c44677 100644 --- a/src/gtk/about.c +++ b/src/gtk/about.c @@ -50,7 +50,7 @@ static GtkWidget *window; static void about_create(void); -static void key_pressed(GtkWidget *widget, GdkEventKey *event); +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event); static void about_uri_clicked(GtkButton *button, gpointer data); void about_show(void) @@ -78,6 +78,8 @@ static void about_create(void) GdkColormap *cmap; GdkColor uri_color[2] = {{0, 0, 0, 0xffff}, {0, 0xffff, 0, 0}}; gboolean success[2]; + GtkTextBuffer *buffer; + GtkTextIter iter; #if HAVE_SYS_UTSNAME_H struct utsname utsbuf; @@ -85,15 +87,15 @@ static void about_create(void) gchar buf[1024]; gint i; - window = gtk_window_new(GTK_WINDOW_DIALOG); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), _("About")); gtk_container_set_border_width(GTK_CONTAINER(window), 8); - gtk_widget_set_usize(window, 518, 358); + gtk_widget_set_size_request(window, 518, 358); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(key_pressed), NULL); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(gtk_widget_hide_on_delete), NULL); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(key_pressed), NULL); gtk_widget_realize(window); vbox = gtk_vbox_new(FALSE, 6); @@ -172,8 +174,8 @@ static void about_create(void) button = gtk_button_new_with_label(" "HOMEPAGE_URI" "); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 0); gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - GTK_SIGNAL_FUNC(about_uri_clicked), NULL); + g_signal_connect(G_OBJECT(button), "clicked", + G_CALLBACK(about_uri_clicked), NULL); buf[0] = ' '; for (i = 1; i <= strlen(HOMEPAGE_URI); i++) buf[i] = '_'; strcpy(buf + i, " "); @@ -196,55 +198,53 @@ static void about_create(void) GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0); - text = gtk_text_new(gtk_scrolled_window_get_hadjustment - (GTK_SCROLLED_WINDOW(scrolledwin)), - gtk_scrolled_window_get_vadjustment - (GTK_SCROLLED_WINDOW(scrolledwin))); - gtk_text_set_word_wrap(GTK_TEXT(text), TRUE); + text = gtk_text_view_new(); + gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE); + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_WORD); gtk_container_add(GTK_CONTAINER(scrolledwin), text); - gtk_text_freeze(GTK_TEXT(text)); + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + gtk_text_buffer_get_iter_at_offset(buffer, &iter, 0); #if USE_GPGME - gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, + gtk_text_buffer_insert(buffer, &iter, _("GPGME is copyright 2001 by Werner Koch \n\n"), -1); #endif /* USE_GPGME */ - gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, + gtk_text_buffer_insert(buffer, &iter, _("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 " "the Free Software Foundation; either version 2, or (at your option) " "any later version.\n\n"), -1); - gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, + gtk_text_buffer_insert(buffer, &iter, _("This program is distributed in the hope that it will be useful, " "but WITHOUT ANY WARRANTY; without even the implied warranty of " "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. " "See the GNU General Public License for more details.\n\n"), -1); - gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, + gtk_text_buffer_insert(buffer, &iter, _("You should have received a copy of the GNU General Public License " "along with this program; if not, write to the Free Software " "Foundation, Inc., 59 Temple Place - Suite 330, Boston, " "MA 02111-1307, USA."), -1); - gtk_text_thaw(GTK_TEXT(text)); - gtkut_button_set_create(&confirm_area, &ok_button, _("OK"), NULL, NULL, NULL, NULL); gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); gtk_widget_grab_default(ok_button); - gtk_signal_connect_object(GTK_OBJECT(ok_button), "clicked", - GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), - GTK_OBJECT(window)); - + g_signal_connect_closure + (G_OBJECT(ok_button), "clicked", + g_cclosure_new_swap(G_CALLBACK(gtk_widget_hide_on_delete), + window, NULL), FALSE); gtk_widget_show_all(window); } -static void key_pressed(GtkWidget *widget, GdkEventKey *event) +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event) { if (event && event->keyval == GDK_Escape) gtk_widget_hide(window); + return FALSE; } static void about_uri_clicked(GtkButton *button, gpointer data) diff --git a/src/gtk/colorlabel.c b/src/gtk/colorlabel.c index aa7c01f57..bdf98026d 100644 --- a/src/gtk/colorlabel.c +++ b/src/gtk/colorlabel.c @@ -25,10 +25,12 @@ #include "defs.h" #include -#include +#ifdef GDK_WINDOWING_X11 +# include +#endif /* GDK_WINDOWING_X11 */ #include #include -#include +#include #include #include #include @@ -143,17 +145,17 @@ static GtkWidget *colorlabel_create_color_widget(GdkColor color) GtkWidget *widget; widget = gtk_drawing_area_new(); - gtk_drawing_area_size(GTK_DRAWING_AREA(widget), 16, 16); + gtk_widget_set_size_request(widget, 16, 16); #define CL(x) (((gulong) (x) >> (gulong) 8) & 0xFFUL) #define CR(r, g, b) ((CL(r) << (gulong) 16) | \ (CL(g) << (gulong) 8) | \ (CL(b))) - gtk_signal_connect(GTK_OBJECT(widget), "expose_event", - GTK_SIGNAL_FUNC + g_signal_connect(G_OBJECT(widget), "expose_event", + G_CALLBACK (colorlabel_drawing_area_expose_event_cb), - GINT_TO_POINTER + GINT_TO_POINTER ((gint)CR(color.red, color.green, color.blue))); return widget; @@ -251,7 +253,7 @@ GtkWidget *colorlabel_create_check_color_menu_item(gint color_index) gtk_container_add(GTK_CONTAINER(align), label_colors[color_index].widget); gtk_widget_show(label_colors[color_index].widget); - gtk_widget_set_usize(align, 16, 16); + gtk_widget_set_size_request(align, 16, 16); gtk_box_pack_start(GTK_BOX(hbox), align, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 4); @@ -274,11 +276,11 @@ GtkWidget *colorlabel_create_color_menu(void) /* create the menu items. each item has its color code attached */ menu = gtk_menu_new(); - gtk_object_set_data(GTK_OBJECT(menu), "label_color_menu", menu); + g_object_set_data(G_OBJECT(menu), "label_color_menu", menu); item = gtk_menu_item_new_with_label(_("None")); - gtk_menu_append(GTK_MENU(menu), item); - gtk_object_set_data(GTK_OBJECT(item), "color", GUINT_TO_POINTER(0)); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + g_object_set_data(G_OBJECT(item), "color", GUINT_TO_POINTER(0)); gtk_widget_show(item); /* and the color items */ @@ -286,7 +288,7 @@ GtkWidget *colorlabel_create_color_menu(void) GtkWidget *widget = colorlabel_create_color_widget(label_colors[i].color); item = gtk_menu_item_new(); - gtk_object_set_data(GTK_OBJECT(item), "color", GUINT_TO_POINTER(i + 1)); + g_object_set_data(G_OBJECT(item), "color", GUINT_TO_POINTER(i + 1)); label = gtk_label_new(label_colors[i].label); @@ -302,12 +304,12 @@ GtkWidget *colorlabel_create_color_menu(void) gtk_container_add(GTK_CONTAINER(align), widget); gtk_widget_show(widget); - gtk_widget_set_usize(align, 16, 16); + gtk_widget_set_size_request(align, 16, 16); gtk_box_pack_start(GTK_BOX(hbox), align, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 4); - gtk_menu_append(GTK_MENU(menu), item); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); gtk_widget_show(item); } @@ -322,10 +324,10 @@ guint colorlabel_get_color_menu_active_item(GtkWidget *menu) guint color; g_return_val_if_fail - (gtk_object_get_data(GTK_OBJECT(menu), "label_color_menu"), 0); + (g_object_get_data(G_OBJECT(menu), "label_color_menu"), 0); menuitem = gtk_menu_get_active(GTK_MENU(menu)); color = GPOINTER_TO_UINT - (gtk_object_get_data(GTK_OBJECT(menuitem), "color")); + (g_object_get_data(G_OBJECT(menuitem), "color")); return color; } diff --git a/src/gtk/colorlabel.h b/src/gtk/colorlabel.h index 437f3bab0..f3ffd3fca 100644 --- a/src/gtk/colorlabel.h +++ b/src/gtk/colorlabel.h @@ -21,11 +21,12 @@ #define COLORLABEL_H__ #include +#include gint colorlabel_get_color_count (void); GdkColor colorlabel_get_color (gint color_index); gchar *colorlabel_get_color_text (gint color_index); -GtkPixmap *colorlabel_create_color_pixmap (GdkColor color); +GtkImage *colorlabel_create_color_pixmap (GdkColor color); gboolean colorlabel_changed (void); GtkWidget *colorlabel_create_check_color_menu_item (gint color_index); diff --git a/src/gtk/description_window.c b/src/gtk/description_window.c index 0a5bdb05c..38d0d7e9f 100644 --- a/src/gtk/description_window.c +++ b/src/gtk/description_window.c @@ -58,7 +58,7 @@ static void description_create(DescriptionWindow * dwindow) int line; int j; - dwindow->window = gtk_window_new(GTK_WINDOW_DIALOG); + dwindow->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_usize(dwindow->window,400,450); gtk_window_set_title(GTK_WINDOW(dwindow->window), diff --git a/src/gtk/filesel.c b/src/gtk/filesel.c index a6f089715..342a69a34 100644 --- a/src/gtk/filesel.c +++ b/src/gtk/filesel.c @@ -41,7 +41,7 @@ static void filesel_create(const gchar *title, gboolean multiple_files); static void filesel_ok_cb(GtkWidget *widget, gpointer data); static void filesel_cancel_cb(GtkWidget *widget, gpointer data); static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data); -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); static void filesel_file_list_select_row_multi(GtkCList *clist, gint row, gint col, GdkEventButton *event, gpointer userdata); @@ -90,7 +90,7 @@ gchar *filesel_select_file(const gchar *title, const gchar *file) gtk_main_iteration(); if (filesel_ack) { - gchar *str; + const gchar *str; str = gtk_file_selection_get_filename (GTK_FILE_SELECTION(filesel)); @@ -148,7 +148,7 @@ GList *filesel_select_multiple_files(const gchar *title, const gchar *file) gtk_main_iteration(); if (filesel_ack) { - gchar *fname = NULL; + const gchar *fname = NULL; list = filesel_get_multiple_filenames(); @@ -182,17 +182,17 @@ static void filesel_create(const gchar *title, gboolean multiple_files) gtk_window_set_wmclass (GTK_WINDOW(filesel), "file_selection", "Sylpheed"); - gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), - "clicked", GTK_SIGNAL_FUNC(filesel_ok_cb), - NULL); - gtk_signal_connect - (GTK_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button), - "clicked", GTK_SIGNAL_FUNC(filesel_cancel_cb), + g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), + "clicked", G_CALLBACK(filesel_ok_cb), + NULL); + g_signal_connect + (G_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button), + "clicked", G_CALLBACK(filesel_cancel_cb), NULL); - gtk_signal_connect(GTK_OBJECT(filesel), "delete_event", - GTK_SIGNAL_FUNC(delete_event), NULL); - gtk_signal_connect(GTK_OBJECT(filesel), "key_press_event", - GTK_SIGNAL_FUNC(key_pressed), NULL); + g_signal_connect(G_OBJECT(filesel), "delete_event", + G_CALLBACK(delete_event), NULL); + g_signal_connect(G_OBJECT(filesel), "key_press_event", + G_CALLBACK(key_pressed), NULL); MANAGE_WINDOW_SIGNALS_CONNECT(filesel); if (multiple_files) { @@ -245,10 +245,11 @@ static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data) return TRUE; } -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) { if (event && event->keyval == GDK_Escape) filesel_cancel_cb(NULL, NULL); + return FALSE; } /* handle both "select_row" and "unselect_row". note that we're using the @@ -329,15 +330,12 @@ static GList *filesel_get_multiple_filenames(void) * entry is only useful for extracting the current directory. */ GtkCList *file_list = GTK_CLIST(GTK_FILE_SELECTION(filesel)->file_list); GList *list = NULL, *sel_list; - gchar *cwd, *tmp; + gchar *cwd; gboolean separator; g_return_val_if_fail(file_list->selection != NULL, NULL); - tmp = gtk_file_selection_get_filename(GTK_FILE_SELECTION(filesel)); - tmp = g_strdup(tmp); - cwd = g_dirname(tmp); - g_free(tmp); + cwd = g_dirname(gtk_file_selection_get_filename(GTK_FILE_SELECTION(filesel))); g_return_val_if_fail(cwd != NULL, NULL); /* only quick way to check the end of a multi byte string for our diff --git a/src/gtk/gtksctree.c b/src/gtk/gtksctree.c index 839600da1..40ca67197 100644 --- a/src/gtk/gtksctree.c +++ b/src/gtk/gtksctree.c @@ -5,6 +5,7 @@ #include #include "gtksctree.h" +#include "sylpheed-marshal.h" enum { @@ -64,8 +65,6 @@ static GtkCTreeClass *parent_class; static guint sctree_signals[LAST_SIGNAL]; -#define GTK_CLIST_CLASS_FW(_widget_) GTK_CLIST_CLASS (((GtkObject*) (_widget_))->klass) - /** * gtk_sctree_get_type: * @void: @@ -74,24 +73,28 @@ static guint sctree_signals[LAST_SIGNAL]; * * Return value: The type ID for GtkSCTreeClass **/ -GtkType +GType gtk_sctree_get_type (void) { - static GtkType sctree_type = 0; + static GType sctree_type = 0; if (!sctree_type) { - GtkTypeInfo sctree_info = { - "GtkSCTree", - sizeof (GtkSCTree), + GTypeInfo sctree_info = { sizeof (GtkSCTreeClass), - (GtkClassInitFunc) gtk_sctree_class_init, - (GtkObjectInitFunc) gtk_sctree_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL + + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + + (GClassInitFunc) gtk_sctree_class_init, + (GClassFinalizeFunc) NULL, + NULL, /* class_data */ + + sizeof (GtkSCTree), + 0, /* n_preallocs */ + (GInstanceInitFunc) gtk_sctree_init, }; - sctree_type = gtk_type_unique (gtk_ctree_get_type (), &sctree_info); + sctree_type = g_type_register_static (GTK_TYPE_CTREE, "GtkSCTree", &sctree_info, (GTypeFlags)0); } return sctree_type; @@ -114,39 +117,43 @@ gtk_sctree_class_init (GtkSCTreeClass *klass) parent_class = gtk_type_class (gtk_ctree_get_type ()); sctree_signals[ROW_POPUP_MENU] = - gtk_signal_new ("row_popup_menu", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (GtkSCTreeClass, row_popup_menu), - gtk_marshal_NONE__POINTER, - GTK_TYPE_NONE, 1, - GTK_TYPE_GDK_EVENT); + g_signal_new ("row_popup_menu", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GtkSCTreeClass, row_popup_menu), + NULL, NULL, + sylpheed_marshal_VOID__POINTER, + G_TYPE_NONE, 1, + GDK_TYPE_EVENT); sctree_signals[EMPTY_POPUP_MENU] = - gtk_signal_new ("empty_popup_menu", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (GtkSCTreeClass, empty_popup_menu), - gtk_marshal_NONE__POINTER, - GTK_TYPE_NONE, 1, - GTK_TYPE_GDK_EVENT); + g_signal_new ("empty_popup_menu", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GtkSCTreeClass, empty_popup_menu), + NULL, NULL, + sylpheed_marshal_VOID__POINTER, + G_TYPE_NONE, 1, + GDK_TYPE_EVENT); sctree_signals[OPEN_ROW] = - gtk_signal_new ("open_row", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (GtkSCTreeClass, open_row), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); + g_signal_new ("open_row", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GtkSCTreeClass, open_row), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); sctree_signals[START_DRAG] = - gtk_signal_new ("start_drag", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (GtkSCTreeClass, start_drag), - gtk_marshal_NONE__INT_POINTER, - GTK_TYPE_NONE, 2, - GTK_TYPE_INT, - GTK_TYPE_GDK_EVENT); - - gtk_object_class_add_signals (object_class, sctree_signals, LAST_SIGNAL); + g_signal_new ("start_drag", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GtkSCTreeClass, start_drag), + NULL, NULL, + sylpheed_marshal_VOID__INT_POINTER, + G_TYPE_NONE, 2, + G_TYPE_INT, + GDK_TYPE_EVENT); + + /* gtk_object_class_add_signals (object_class, sctree_signals, LAST_SIGNAL); */ clist_class->clear = gtk_sctree_clear; ctree_class->tree_collapse = gtk_sctree_collapse; @@ -228,7 +235,7 @@ select_row (GtkSCTree *sctree, gint row, gint col, guint state) gtk_clist_freeze (GTK_CLIST (sctree)); GTK_CLIST(sctree)->focus_row = row; - GTK_CLIST_CLASS(GTK_OBJECT(sctree)->klass)->refresh(GTK_CLIST(sctree)); + GTK_CLIST_GET_CLASS(sctree)->refresh(GTK_CLIST(sctree)); if (!additive) gtk_clist_unselect_all (GTK_CLIST (sctree)); @@ -242,12 +249,12 @@ select_row (GtkSCTree *sctree, gint row, gint col, guint state) if (row_is_selected(sctree, row)) gtk_clist_unselect_row (GTK_CLIST (sctree), row, col); else - gtk_signal_emit_by_name - (GTK_OBJECT (sctree), + g_signal_emit_by_name + (G_OBJECT (sctree), "tree_select_row", node, col); } else { - gtk_signal_emit_by_name - (GTK_OBJECT (sctree), + g_signal_emit_by_name + (G_OBJECT (sctree), "tree_select_row", node, col); } sctree->anchor_row = node; @@ -322,14 +329,14 @@ gtk_sctree_button_press (GtkWidget *widget, GdkEventButton *event) if (on_row) { if (!row_is_selected(sctree,row)) select_row (sctree, row, col, 0); - gtk_signal_emit (GTK_OBJECT (sctree), + g_signal_emit (G_OBJECT (sctree), sctree_signals[ROW_POPUP_MENU], - event); + 0, event); } else { gtk_clist_unselect_all(clist); - gtk_signal_emit (GTK_OBJECT (sctree), + g_signal_emit (G_OBJECT (sctree), sctree_signals[EMPTY_POPUP_MENU], - event); + 0, event); } retval = TRUE; } @@ -344,8 +351,8 @@ gtk_sctree_button_press (GtkWidget *widget, GdkEventButton *event) sctree->dnd_select_pending_state = 0; if (on_row) - gtk_signal_emit (GTK_OBJECT (sctree), - sctree_signals[OPEN_ROW]); + g_signal_emit (GTK_OBJECT (sctree), + sctree_signals[OPEN_ROW], 0); retval = TRUE; break; @@ -444,10 +451,11 @@ gtk_sctree_motion (GtkWidget *widget, GdkEventMotion *event) sctree->dnd_select_pending_state = 0; } - gtk_signal_emit (GTK_OBJECT (sctree), - sctree_signals[START_DRAG], - sctree->dnd_press_button, - event); + g_signal_emit (G_OBJECT (sctree), + sctree_signals[START_DRAG], + 0, + sctree->dnd_press_button, + event); return TRUE; } @@ -540,13 +548,36 @@ gtk_sctree_collapse (GtkCTree *ctree, GtkCTreeNode *node) GtkWidget *gtk_sctree_new_with_titles (gint columns, gint tree_column, gchar *titles[]) { +#if 0 GtkSCTree* sctree; sctree = gtk_type_new (gtk_sctree_get_type ()); gtk_ctree_construct (GTK_CTREE (sctree), columns, tree_column, titles); + gtk_clist_set_selection_mode(GTK_CLIST(sctree), GTK_SELECTION_EXTENDED); return GTK_WIDGET (sctree); +#else + GtkWidget *widget; + + g_return_val_if_fail (columns > 0, NULL); + g_return_val_if_fail (tree_column >= 0 && tree_column < columns, NULL); + + widget = gtk_widget_new (TYPE_GTK_SCTREE, + "n_columns", columns, + "tree_column", tree_column, + NULL); + if (titles) { + GtkCList *clist = GTK_CLIST (widget); + guint i; + + for (i = 0; i < columns; i++) + gtk_clist_set_column_title (clist, i, titles[i]); + gtk_clist_column_titles_show (clist); + } + + return widget; +#endif } void gtk_sctree_select (GtkSCTree *sctree, GtkCTreeNode *node) @@ -698,7 +729,7 @@ gtk_sctree_sort_recursive (GtkCTree *ctree, gtk_clist_freeze (clist); if (clist->selection_mode == GTK_SELECTION_EXTENDED) { - GTK_CLIST_CLASS_FW (clist)->resync_selection (clist, NULL); + GTK_CLIST_GET_CLASS (clist)->resync_selection (clist, NULL); g_list_free (clist->undo_selection); g_list_free (clist->undo_unselection); @@ -737,7 +768,7 @@ gtk_sctree_sort_node (GtkCTree *ctree, gtk_clist_freeze (clist); if (clist->selection_mode == GTK_SELECTION_EXTENDED) { - GTK_CLIST_CLASS_FW (clist)->resync_selection (clist, NULL); + GTK_CLIST_GET_CLASS (clist)->resync_selection (clist, NULL); g_list_free (clist->undo_selection); g_list_free (clist->undo_unselection); @@ -780,7 +811,7 @@ gtk_ctree_unlink (GtkCTree *ctree, clist = GTK_CLIST (ctree); if (update_focus_row && clist->selection_mode == GTK_SELECTION_EXTENDED) { - GTK_CLIST_CLASS_FW (clist)->resync_selection (clist, NULL); + GTK_CLIST_GET_CLASS (clist)->resync_selection (clist, NULL); g_list_free (clist->undo_selection); g_list_free (clist->undo_unselection); @@ -893,7 +924,7 @@ gtk_ctree_link (GtkCTree *ctree, clist = GTK_CLIST (ctree); if (update_focus_row && clist->selection_mode == GTK_SELECTION_EXTENDED) { - GTK_CLIST_CLASS_FW (clist)->resync_selection (clist, NULL); + GTK_CLIST_GET_CLASS (clist)->resync_selection (clist, NULL); g_list_free (clist->undo_selection); g_list_free (clist->undo_unselection); diff --git a/src/gtk/gtksctree.h b/src/gtk/gtksctree.h index 70b69b7a2..387cc0c7a 100644 --- a/src/gtk/gtksctree.h +++ b/src/gtk/gtksctree.h @@ -52,7 +52,7 @@ struct _GtkSCTreeClass { }; -GtkType gtk_sctree_get_type (void); +GType gtk_sctree_get_type (void); GtkWidget *gtk_sctree_new_with_titles (gint columns, gint tree_column, diff --git a/src/gtk/gtkshruler.c b/src/gtk/gtkshruler.c index 091c1907e..5a79123ce 100644 --- a/src/gtk/gtkshruler.c +++ b/src/gtk/gtkshruler.c @@ -48,24 +48,28 @@ static void gtk_shruler_draw_ticks (GtkRuler *ruler); static void gtk_shruler_draw_pos (GtkRuler *ruler); #endif -guint +GType gtk_shruler_get_type(void) { - static guint shruler_type = 0; + static GType shruler_type = 0; if ( !shruler_type ) { - static const GtkTypeInfo shruler_info = { - "GtkSHRuler", - sizeof (GtkSHRuler), + static const GTypeInfo shruler_info = { sizeof (GtkSHRulerClass), - (GtkClassInitFunc) gtk_shruler_class_init, - (GtkObjectInitFunc) gtk_shruler_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; + + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + + (GClassInitFunc) gtk_shruler_class_init, + (GClassFinalizeFunc) NULL, + NULL, /* class_data */ + + sizeof (GtkSHRuler), + 0, /* n_preallocs */ + (GInstanceInitFunc) gtk_shruler_init, + }; /* inherit from GtkHRuler */ - shruler_type = gtk_type_unique( gtk_hruler_get_type (), &shruler_info ); + shruler_type = g_type_register_static (GTK_TYPE_HRULER, "GtkSHRuler", &shruler_info, (GTypeFlags)0); } return shruler_type; } @@ -99,15 +103,15 @@ gtk_shruler_init (GtkSHRuler * shruler) GtkWidget * widget; widget = GTK_WIDGET (shruler); - widget->requisition.width = widget->style->klass->xthickness * 2 + 1; - widget->requisition.height = widget->style->klass->ythickness * 2 + RULER_HEIGHT; + widget->requisition.width = widget->style->xthickness * 2 + 1; + widget->requisition.height = widget->style->ythickness * 2 + RULER_HEIGHT; } GtkWidget* gtk_shruler_new(void) { - return GTK_WIDGET( gtk_type_new( gtk_shruler_get_type() ) ); + return GTK_WIDGET( g_object_new( gtk_shruler_get_type(), NULL ) ); } static void @@ -132,10 +136,10 @@ gtk_shruler_draw_ticks(GtkRuler *ruler) gc = widget->style->fg_gc[GTK_STATE_NORMAL]; bg_gc = widget->style->bg_gc[GTK_STATE_NORMAL]; - font = widget->style->font; + font = gtk_style_get_font(widget->style); - xthickness = widget->style->klass->xthickness; - ythickness = widget->style->klass->ythickness; + xthickness = widget->style->xthickness; + ythickness = widget->style->ythickness; width = widget->allocation.width; height = widget->allocation.height - ythickness * 2; diff --git a/src/gtk/gtkshruler.h b/src/gtk/gtkshruler.h index df7afb50b..2d6ddb234 100644 --- a/src/gtk/gtkshruler.h +++ b/src/gtk/gtkshruler.h @@ -49,7 +49,7 @@ struct _GtkSHRulerClass }; -guint gtk_shruler_get_type (void); +GType gtk_shruler_get_type (void); GtkWidget* gtk_shruler_new (void); void gtk_shruler_set_pos (GtkSHRuler *ruler, gfloat pos); diff --git a/src/gtk/gtkutils.c b/src/gtk/gtkutils.c index 6430db91f..4abec525f 100644 --- a/src/gtk/gtkutils.c +++ b/src/gtk/gtkutils.c @@ -29,7 +29,8 @@ #include #include #include -#include +#warning FIXME_GTK2 +/* #include */ #include #include #include @@ -49,71 +50,23 @@ #include "menu.h" #include "prefs_account.h" -gint gtkut_get_font_width(GdkFont *font) +#warning FIXME_GTK2 +gboolean gtkut_get_font_size(GtkWidget *widget, + gint *width, gint *height) { - gchar *str; - gint width; + PangoLayout *layout; + const gchar *str = "Abcdef"; - if (conv_get_current_charset() == C_UTF_8) - str = "Abcdef"; - else - str = _("Abcdef"); - - width = gdk_string_width(font, str); - width /= strlen(str); - - return width; -} - -gint gtkut_get_font_height(GdkFont *font) -{ - gchar *str; - gint height; - - if (conv_get_current_charset() == C_UTF_8) - str = "Abcdef"; - else - str = _("Abcdef"); - - height = gdk_string_height(font, str); - - return height; -} - -GdkFont *gtkut_font_load(const gchar *fontset_name) -{ - GdkFont *font; - - g_return_val_if_fail(fontset_name != NULL, NULL); - - if (conv_get_current_charset() == C_US_ASCII) - font = gtkut_font_load_from_fontset(fontset_name); - else - font = gdk_fontset_load(fontset_name); - - return font; -} + g_return_val_if_fail(GTK_IS_WIDGET(widget), FALSE); -GdkFont *gtkut_font_load_from_fontset(const gchar *fontset_name) -{ - GdkFont *font = NULL; - - if (strchr(fontset_name, ',') == NULL) { - font = gdk_font_load(fontset_name); - } else { - gchar **fonts; - gint i; - - fonts = g_strsplit(fontset_name, ",", -1); - for (i = 0; fonts[i] != NULL && fonts[i][0] != '\0'; - i++) { - font = gdk_font_load(fonts[i]); - if (font) break; - } - g_strfreev(fonts); - } + layout = gtk_widget_create_pango_layout(widget, str); + g_return_val_if_fail(layout, FALSE); + pango_layout_get_pixel_size(layout, width, height); + if (width) + *width = *width / g_utf8_strlen(str, -1); + g_object_unref(layout); - return font; + return TRUE; } void gtkut_convert_int_to_gdk_color(gint rgbvalue, GdkColor *color) @@ -136,7 +89,7 @@ void gtkut_button_set_create(GtkWidget **bbox, *bbox = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(*bbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(*bbox), 5); + gtk_box_set_spacing(GTK_BOX(*bbox), 5); *button1 = gtk_button_new_with_label(label1); GTK_WIDGET_SET_FLAGS(*button1, GTK_CAN_DEFAULT); @@ -343,23 +296,16 @@ void gtkut_combo_set_items(GtkCombo *combo, const gchar *str1, ...) gchar *gtkut_editable_get_selection(GtkEditable *editable) { guint start_pos, end_pos; + gboolean found; - g_return_val_if_fail(editable != NULL, NULL); + g_return_val_if_fail(GTK_IS_EDITABLE(editable), NULL); - if (!editable->has_selection) return NULL; - - if (editable->selection_start_pos == editable->selection_end_pos) + found = gtk_editable_get_selection_bounds(editable, + &start_pos, &end_pos); + if (found) + return gtk_editable_get_chars(editable, start_pos, end_pos); + else return NULL; - - if (editable->selection_start_pos < editable->selection_end_pos) { - start_pos = editable->selection_start_pos; - end_pos = editable->selection_end_pos; - } else { - start_pos = editable->selection_end_pos; - end_pos = editable->selection_start_pos; - } - - return gtk_editable_get_chars(editable, start_pos, end_pos); } /* @@ -375,9 +321,12 @@ static void gtkut_check_before_remove(GtkWidget *widget, gpointer unused) if (GTK_IS_CONTAINER(widget)) gtk_container_forall(GTK_CONTAINER(widget), gtkut_check_before_remove, NULL); +#warning FIXME_GTK2 +#if 0 if (GTK_IS_EDITABLE(widget)) gtk_editable_claim_selection(GTK_EDITABLE(widget), FALSE, GDK_CURRENT_TIME); +#endif } /* @@ -444,6 +393,8 @@ void gtkut_widget_get_uposition(GtkWidget *widget, gint *px, gint *py) void gtkut_widget_disable_theme_engine(GtkWidget *widget) { +#warning FIXME_GTK2 +#if 0 GtkStyle *style, *new_style; style = gtk_widget_get_style(widget); @@ -457,24 +408,14 @@ void gtkut_widget_disable_theme_engine(GtkWidget *widget) style->engine = engine; gtk_widget_set_style(widget, new_style); } -} - -static void gtkut_widget_draw_cb(GtkWidget *widget, GdkRectangle *area, - gboolean *flag) -{ - *flag = TRUE; - gtk_signal_disconnect_by_data(GTK_OBJECT(widget), flag); +#endif } void gtkut_widget_wait_for_draw(GtkWidget *widget) { - gboolean flag = FALSE; - if (!GTK_WIDGET_DRAWABLE(widget)) return; - gtk_signal_connect(GTK_OBJECT(widget), "draw", - GTK_SIGNAL_FUNC(gtkut_widget_draw_cb), &flag); - while (!flag) + while (gtk_events_pending()) gtk_main_iteration(); } @@ -483,16 +424,16 @@ static void gtkut_clist_bindings_add(GtkWidget *clist) GtkBindingSet *binding_set; binding_set = gtk_binding_set_by_class - (GTK_CLIST_CLASS(GTK_OBJECT(clist)->klass)); + (GTK_CLIST_GET_CLASS(clist)); gtk_binding_entry_add_signal(binding_set, GDK_n, GDK_CONTROL_MASK, "scroll_vertical", 2, - GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, - GTK_TYPE_FLOAT, 0.0); + G_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, + G_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal(binding_set, GDK_p, GDK_CONTROL_MASK, "scroll_vertical", 2, - GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, - GTK_TYPE_FLOAT, 0.0); + G_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, + G_TYPE_FLOAT, 0.0); } void gtkut_widget_init(void) @@ -500,16 +441,22 @@ void gtkut_widget_init(void) GtkWidget *clist; clist = gtk_clist_new(1); + g_object_ref(G_OBJECT(clist)); + gtk_object_sink(GTK_OBJECT(clist)); gtkut_clist_bindings_add(clist); - gtk_widget_unref(clist); + g_object_unref(G_OBJECT(clist)); clist = gtk_ctree_new(1, 0); + g_object_ref(G_OBJECT(clist)); + gtk_object_sink(GTK_OBJECT(clist)); gtkut_clist_bindings_add(clist); - gtk_widget_unref(clist); + g_object_unref(G_OBJECT(clist)); clist = gtk_sctree_new_with_titles(1, 0, NULL); + g_object_ref(G_OBJECT(clist)); + gtk_object_sink(GTK_OBJECT(clist)); gtkut_clist_bindings_add(clist); - gtk_widget_unref(clist); + g_object_unref(G_OBJECT(clist)); } void gtkut_widget_set_app_icon(GtkWidget *widget) @@ -587,4 +534,154 @@ void gtkut_set_widget_bgcolor_rgb(GtkWidget *widget, guint rgbvalue) newstyle->bg[GTK_STATE_ACTIVE] = gdk_color; gtk_widget_set_style(widget, newstyle); } + +#warning FIXME_GTK2 +#if 1 /* FIXME_GTK2 */ +gboolean gtkut_text_buffer_match_string(GtkTextBuffer *textbuf, gint pos, gunichar *wcs, + gint len, gboolean case_sens) +{ + GtkTextIter start_iter, end_iter; + gchar *utf8str; + gint match_count = 0; + + gtk_text_buffer_get_iter_at_offset(textbuf, &start_iter, pos); + gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter, pos + len); + utf8str = gtk_text_buffer_get_text(textbuf, &start_iter, &end_iter, FALSE); + if (!utf8str) return FALSE; + + if ((gint) g_utf8_strlen(utf8str, -1) != len) { + g_free(utf8str); + return FALSE; + } + + for (; match_count < len; pos++, match_count++) { + gchar *ptr = g_utf8_offset_to_pointer(utf8str, match_count); + gunichar ch; + + if (!ptr) break; + ch = g_utf8_get_char(ptr); + + if (case_sens) { + if (ch != wcs[match_count]) + break; + } else { + if (g_unichar_tolower(ch) != + g_unichar_tolower(wcs[match_count])) + break; + } + } + + g_free(utf8str); + + if (match_count == len) + return TRUE; + else + return FALSE; +} + +guint gtkut_text_buffer_str_compare_n(GtkTextBuffer *textbuf, + guint pos1, guint pos2, + guint len, guint text_len) +{ + guint i; + + for (i = 0; i < len && pos1 + i < text_len && pos2 + i < text_len; i++) { + GtkTextIter start_iter, end_iter; + gchar *utf8str1, *utf8str2; + + gtk_text_buffer_get_iter_at_offset(textbuf, &start_iter, + pos1 + i); + gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter, + pos1 + i + 1); + utf8str1 = gtk_text_buffer_get_text(textbuf, + &start_iter, + &end_iter, + FALSE); + + gtk_text_buffer_get_iter_at_offset(textbuf, &start_iter, + pos2 + i); + gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter, + pos2 + i + 1); + utf8str2 = gtk_text_buffer_get_text(textbuf, + &start_iter, + &end_iter, + FALSE); + + if (!utf8str1 || !utf8str2 || strcmp(utf8str1, utf8str2)) { + g_free(utf8str1); + g_free(utf8str2); + break; + } + + g_free(utf8str1); + g_free(utf8str2); + } + + return i; +} + +guint gtkut_text_buffer_str_compare(GtkTextBuffer *textbuf, + guint start_pos, guint text_len, + const gchar *str) +{ + gunichar *wcs; + guint len = 0; + glong items_read = 0, items_written = 0; + gboolean result; + GError *error = NULL; + + if (!str) return 0; + + wcs = g_utf8_to_ucs4(str, -1, &items_read, &items_written, &error); + if (error != NULL) { + g_warning("An error occured while converting a string from UTF-8 to UCS-4: %s\n", + error->message); + g_error_free(error); + } + if (!wcs || items_written <= 0) return 0; + len = (guint) items_written; + + if (len > text_len - start_pos) + result = FALSE; + else + result = gtkut_text_buffer_match_string(textbuf, start_pos, + wcs, len, + TRUE); + + g_free(wcs); + + return result ? len : 0; +} + +gboolean gtkut_text_buffer_is_uri_string(GtkTextBuffer *textbuf, + guint start_pos, guint text_len) +{ + if (gtkut_text_buffer_str_compare(textbuf, start_pos, text_len, "http://") || + gtkut_text_buffer_str_compare(textbuf, start_pos, text_len, "ftp://") || + gtkut_text_buffer_str_compare(textbuf, start_pos, text_len, "https://") || + gtkut_text_buffer_str_compare(textbuf, start_pos, text_len, "www.")) + return TRUE; + + return FALSE; +} + +gchar *gtkut_text_view_get_selection(GtkTextView *textview) +{ + GtkTextBuffer *buffer; + GtkTextIter start_iter, end_iter; + gboolean found; + + g_return_val_if_fail(GTK_IS_TEXT_VIEW(textview), NULL); + + buffer = gtk_text_view_get_buffer(textview); + found = gtk_text_buffer_get_selection_bounds(buffer, + &start_iter, + &end_iter); + if (found) + return gtk_text_buffer_get_text(buffer, &start_iter, &end_iter, + FALSE); + else + return NULL; +} +#endif /* FIXME_GTK2 */ diff --git a/src/gtk/gtkutils.h b/src/gtk/gtkutils.h index 527733a40..90b7eb0f0 100644 --- a/src/gtk/gtkutils.h +++ b/src/gtk/gtkutils.h @@ -32,7 +32,7 @@ #include #include #include -#include "gtkstext.h" +#include #include #if HAVE_WCHAR_H # include @@ -75,13 +75,11 @@ (GTK_CTREE_ROW(node)->row.data) #define GTKUT_CTREE_REFRESH(clist) \ - GTK_CLIST_CLASS(GTK_OBJECT(clist)->klass)->refresh(clist) + GTK_CLIST_GET_CLASS(clist)->refresh(clist) -gint gtkut_get_font_width (GdkFont *font); -gint gtkut_get_font_height (GdkFont *font); - -GdkFont *gtkut_font_load (const gchar *fontset_name); -GdkFont *gtkut_font_load_from_fontset (const gchar *fontset_name); +gboolean gtkut_get_font_size (GtkWidget *widget, + gint *width, + gint *height); void gtkut_convert_int_to_gdk_color (gint rgbvalue, GdkColor *color); @@ -145,4 +143,24 @@ GtkWidget *gtkut_account_menu_new (GList *ac_list, void gtkut_set_widget_bgcolor_rgb (GtkWidget *widget, guint rgbvalue); + +gboolean gtkut_text_buffer_match_string (GtkTextBuffer *text, + gint pos, + gunichar *wcs, + gint len, + gboolean case_sens); +guint gtkut_text_buffer_str_compare_n (GtkTextBuffer *text, + guint pos1, + guint pos2, + guint len, + guint text_len); +guint gtkut_text_buffer_str_compare (GtkTextBuffer *text, + guint start_pos, + guint text_len, + const gchar *str); +gboolean gtkut_text_buffer_is_uri_string(GtkTextBuffer *text, + guint start_pos, + guint text_len); +gchar *gtkut_text_view_get_selection (GtkTextView *textview); + #endif /* __GTKUTILS_H__ */ diff --git a/src/gtk/manage_window.h b/src/gtk/manage_window.h index 26e1e1508..1fb48119e 100644 --- a/src/gtk/manage_window.h +++ b/src/gtk/manage_window.h @@ -26,14 +26,14 @@ #define MANAGE_WINDOW_SIGNALS_CONNECT(window) \ { \ - gtk_signal_connect(GTK_OBJECT(window), "focus_in_event", \ - GTK_SIGNAL_FUNC(manage_window_focus_in), NULL); \ - gtk_signal_connect(GTK_OBJECT(window), "focus_out_event", \ - GTK_SIGNAL_FUNC(manage_window_focus_out), NULL); \ - gtk_signal_connect(GTK_OBJECT(window), "unmap_event", \ - GTK_SIGNAL_FUNC(manage_window_unmap), NULL); \ - gtk_signal_connect(GTK_OBJECT(window), "destroy", \ - GTK_SIGNAL_FUNC(manage_window_destroy), NULL); \ + g_signal_connect(G_OBJECT(window), "focus_in_event", \ + G_CALLBACK(manage_window_focus_in), NULL); \ + g_signal_connect(G_OBJECT(window), "focus_out_event", \ + G_CALLBACK(manage_window_focus_out), NULL); \ + g_signal_connect(G_OBJECT(window), "unmap_event", \ + G_CALLBACK(manage_window_unmap), NULL); \ + g_signal_connect(G_OBJECT(window), "destroy", \ + G_CALLBACK(manage_window_destroy), NULL); \ } gint manage_window_focus_in (GtkWidget *widget, diff --git a/src/gtk/menu.c b/src/gtk/menu.c index eec7bb4b3..d844410e6 100644 --- a/src/gtk/menu.c +++ b/src/gtk/menu.c @@ -29,6 +29,7 @@ #include #include #include +#include #include "intl.h" #include "menu.h" @@ -56,7 +57,7 @@ GtkWidget *menubar_create(GtkWidget *window, GtkItemFactoryEntry *entries, gtk_item_factory_set_translate_func(factory, menu_translate, NULL, NULL); gtk_item_factory_create_items(factory, n_entries, entries, data); - gtk_accel_group_attach(factory->accel_group, GTK_OBJECT(window)); + gtk_window_add_accel_group (GTK_WINDOW (window), factory->accel_group); return gtk_item_factory_get_widget(factory, path); } @@ -84,7 +85,7 @@ GtkWidget *popupmenu_create(GtkWidget *window, GtkItemFactoryEntry *entries, gtk_item_factory_set_translate_func(factory, menu_translate, NULL, NULL); gtk_item_factory_create_items(factory, n_entries, entries, data); - gtk_accel_group_attach(accel_group, GTK_OBJECT(window)); + gtk_window_add_accel_group(GTK_WINDOW (window), accel_group); return gtk_item_factory_get_widget(factory, path); } @@ -106,6 +107,8 @@ static void factory_print_func(gpointer data, gchar *string) g_string_append_c(out_str, '\n'); } +#warning FIXME_GTK2 +#if 0 GString *menu_factory_get_rc(const gchar *path) { GString *string; @@ -178,6 +181,7 @@ void menu_factory_copy_rc(const gchar *src_path, const gchar *dest_path) gtk_item_factory_parse_rc_string(string->str); g_string_free(string, TRUE); } +#endif void menu_set_sensitive(GtkItemFactory *ifactory, const gchar *path, gboolean sensitive) @@ -223,42 +227,25 @@ void menu_toggle_toggle(GtkItemFactory *ifactory, const gchar *path) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), !((GTK_CHECK_MENU_ITEM(widget))->active)); } -void menu_button_position(GtkMenu *menu, gint *x, gint *y, gpointer user_data) +void menu_button_position(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, + gpointer user_data) { - GtkWidget *button; - GtkRequisition requisition; - gint button_xpos, button_ypos; - gint xpos, ypos; - gint width, height; - gint scr_width, scr_height; - - g_return_if_fail(user_data != NULL); - g_return_if_fail(GTK_IS_BUTTON(user_data)); - - button = GTK_WIDGET(user_data); - - gtk_widget_get_child_requisition(GTK_WIDGET(menu), &requisition); - width = requisition.width; - height = requisition.height; - gdk_window_get_origin(button->window, &button_xpos, &button_ypos); - - xpos = button_xpos; - ypos = button_ypos + button->allocation.height; - - scr_width = gdk_screen_width(); - scr_height = gdk_screen_height(); - - if (xpos + width > scr_width) - xpos -= (xpos + width) - scr_width; - if (ypos + height > scr_height) - ypos = button_ypos - height; - if (xpos < 0) - xpos = 0; - if (ypos < 0) - ypos = 0; - - *x = xpos; - *y = ypos; + GtkWidget *widget; + gint wheight; + gint wx, wy; + + g_return_if_fail(x && y); + g_return_if_fail(GTK_IS_BUTTON(user_data)); + + widget = GTK_WIDGET(user_data); + + gdk_window_get_origin(widget->window, x, y); + wheight = widget->requisition.height; + wx = widget->allocation.x; + wy = widget->allocation.y; + + *y = *y + wy + wheight; + *x = *x + wx; } gint menu_find_option_menu_index(GtkOptionMenu *optmenu, gpointer data, @@ -275,7 +262,8 @@ gint menu_find_option_menu_index(GtkOptionMenu *optmenu, gpointer data, for (cur = GTK_MENU_SHELL(menu)->children, n = 0; cur != NULL; cur = cur->next, n++) { menuitem = GTK_WIDGET(cur->data); - menu_data = gtk_object_get_user_data(GTK_OBJECT(menuitem)); + menu_data = g_object_get_data(G_OBJECT(menuitem), + MENU_VAL_ID); if (func) { if (func(menu_data, data) == 0) return n; @@ -291,6 +279,8 @@ static void menu_item_add_accel( GtkWidget *widget, guint accel_signal_id, GtkAc guint accel_key, GdkModifierType accel_mods, GtkAccelFlags accel_flags, gpointer user_data) { +#warning FIXME_GTK2 +#if 0 GtkWidget *connected = GTK_WIDGET(user_data); if (gtk_signal_n_emissions_by_name(GTK_OBJECT(widget),"add_accelerator") > 1 ) return; gtk_widget_remove_accelerators(connected,"activate",FALSE); @@ -302,26 +292,30 @@ static void menu_item_add_accel( GtkWidget *widget, guint accel_signal_id, GtkAc accel_key, accel_mods, GTK_ACCEL_VISIBLE ); gtk_accel_group_unlock_entry(accel_group,accel_key,accel_mods); +#endif } static void menu_item_remove_accel(GtkWidget *widget, GtkAccelGroup *accel_group, guint accel_key, GdkModifierType accel_mods, gpointer user_data) { +#warning FIXME_GTK2 +#if 0 GtkWidget *wid = GTK_WIDGET(user_data); if (gtk_signal_n_emissions_by_name(GTK_OBJECT(widget), "remove_accelerator") > 2 ) return; gtk_widget_remove_accelerators(wid,"activate",FALSE); +#endif } static void connect_accel_change_signals(GtkWidget* widget, GtkWidget *wid2) { gtk_signal_connect_after(GTK_OBJECT(widget), "add_accelerator", - menu_item_add_accel, wid2); + G_CALLBACK(menu_item_add_accel), wid2); gtk_signal_connect_after(GTK_OBJECT(widget), "remove_accelerator", - menu_item_remove_accel, wid2); + G_CALLBACK(menu_item_remove_accel), wid2); } void menu_connect_identical_items(void) diff --git a/src/gtk/menu.h b/src/gtk/menu.h index 467e616ee..d8fdf83c0 100644 --- a/src/gtk/menu.h +++ b/src/gtk/menu.h @@ -27,14 +27,17 @@ #include #include +#define MENU_VAL_ID "Sylpheed::Menu::ValueID" + #define MENUITEM_ADD(menu, menuitem, label, data) \ { \ menuitem = gtk_menu_item_new_with_label(label); \ gtk_widget_show(menuitem); \ - gtk_menu_append(GTK_MENU(menu), menuitem); \ + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); \ if (data) \ - gtk_object_set_user_data(GTK_OBJECT(menuitem), \ - GINT_TO_POINTER(data)); \ + g_object_set_data(G_OBJECT(menuitem), \ + MENU_VAL_ID, \ + GINT_TO_POINTER(data)); \ } #define menu_set_insensitive_all(menu_shell) \ @@ -75,6 +78,7 @@ void menu_toggle_toggle (GtkItemFactory *ifactory, void menu_button_position (GtkMenu *menu, gint *x, gint *y, + gboolean *push_in, gpointer user_data); gint menu_find_option_menu_index(GtkOptionMenu *optmenu, diff --git a/src/gtk/pluginwindow.c b/src/gtk/pluginwindow.c index 10dcab240..044f64a54 100644 --- a/src/gtk/pluginwindow.c +++ b/src/gtk/pluginwindow.c @@ -54,11 +54,16 @@ static void set_plugin_list(PluginWindow *pluginwindow) gchar *text[1]; gint row; GtkCList *clist = GTK_CLIST(pluginwindow->plugin_list); + GtkTextBuffer *textbuf; + GtkTextIter start_iter, end_iter; plugins = plugin_get_list(); gtk_clist_freeze(clist); gtk_clist_clear(clist); - gtk_editable_delete_text(GTK_EDITABLE(pluginwindow->plugin_desc), 0, -1); + textbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pluginwindow->plugin_desc)); + gtk_text_buffer_get_start_iter(textbuf, &start_iter); + gtk_text_buffer_get_end_iter(textbuf, &end_iter); + gtk_text_buffer_delete(textbuf, &start_iter, &end_iter); gtk_widget_set_sensitive(pluginwindow->unload_btn, FALSE); for(cur = plugins; cur != NULL; cur = g_slist_next(cur)) { @@ -75,17 +80,20 @@ static void select_row_cb(GtkCList *clist, gint row, gint column, GdkEventButton *event, PluginWindow *pluginwindow) { Plugin *plugin; - GtkEditable *plugin_desc = GTK_EDITABLE(pluginwindow->plugin_desc); + GtkTextView *plugin_desc = GTK_TEXT_VIEW(pluginwindow->plugin_desc); + GtkTextBuffer *textbuf = gtk_text_view_get_buffer(plugin_desc); + GtkTextIter start_iter, end_iter; const gchar *text; - gint pos = 0; plugin = (Plugin *) gtk_clist_get_row_data(clist, row); pluginwindow->selected_plugin = plugin; if (pluginwindow->selected_plugin != NULL) { - gtk_editable_delete_text(plugin_desc, 0, -1); + gtk_text_buffer_get_start_iter(textbuf, &start_iter); + gtk_text_buffer_get_end_iter(textbuf, &end_iter); + gtk_text_buffer_delete(textbuf, &start_iter, &end_iter); text = plugin_get_desc(plugin); - gtk_editable_insert_text(plugin_desc, text, strlen(text), &pos); + gtk_text_buffer_insert(textbuf, &start_iter, text, strlen(text)); gtk_widget_set_sensitive(pluginwindow->unload_btn, TRUE); } else { gtk_widget_set_sensitive(pluginwindow->unload_btn, FALSE); @@ -200,7 +208,7 @@ void pluginwindow_create() (scrolledwindow3), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); - plugin_desc = gtk_text_new(NULL, NULL); + plugin_desc = gtk_text_view_new(); gtk_widget_show(plugin_desc); gtk_container_add(GTK_CONTAINER(scrolledwindow3), plugin_desc); @@ -227,7 +235,7 @@ void pluginwindow_create() GTK_WIDGET_SET_FLAGS(close_btn, GTK_CAN_DEFAULT); /* ----------------------------------------------------------- */ - gtk_text_set_word_wrap(GTK_TEXT(plugin_desc), TRUE); + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(plugin_desc), GTK_WRAP_WORD); gtk_widget_set_sensitive(GTK_WIDGET(unload_btn), FALSE); pluginwindow = g_new0(PluginWindow, 1); diff --git a/src/gtk/sylpheed-marshal.list b/src/gtk/sylpheed-marshal.list new file mode 100644 index 000000000..7e722df0e --- /dev/null +++ b/src/gtk/sylpheed-marshal.list @@ -0,0 +1,2 @@ +NONE:POINTER +NONE:INT,POINTER diff --git a/src/headerview.c b/src/headerview.c index e98c7484e..8941bf5c7 100644 --- a/src/headerview.c +++ b/src/headerview.c @@ -30,7 +30,7 @@ #include #include #include -#include +#include #include #include #include @@ -46,7 +46,7 @@ #include "gtkutils.h" #include "utils.h" -static GdkFont *boldfont; +PangoFontDescription *boldfont; #define TR(str) (prefs_common.trans_hdr ? gettext(str) : str) @@ -133,17 +133,14 @@ HeaderView *headerview_create(void) void headerview_init(HeaderView *headerview) { - if (!boldfont) - boldfont = gtkut_font_load(BOLD_FONT); + if (!boldfont && BOLD_FONT) + boldfont = pango_font_description_from_string + (BOLD_FONT); #define SET_FONT_STYLE(wid) \ { \ - GtkStyle *style; \ - \ - style = gtk_style_copy(gtk_widget_get_style(headerview->wid)); \ if (boldfont) \ - style->font = boldfont; \ - gtk_widget_set_style(headerview->wid, style); \ + gtk_widget_modify_font(headerview->wid, boldfont); \ } SET_FONT_STYLE(from_header_label); @@ -168,38 +165,25 @@ void headerview_init(HeaderView *headerview) void headerview_show(HeaderView *headerview, MsgInfo *msginfo) { - gchar *str; - headerview_clear(headerview); - if (msginfo->from) { - Xstrdup_a(str, msginfo->from, return); - conv_unreadable_locale(str); - } else - str = NULL; gtk_label_set_text(GTK_LABEL(headerview->from_body_label), - str ? str : _("(No From)")); + msginfo->from ? msginfo->from : _("(No From)")); if (msginfo->to) { - Xstrdup_a(str, msginfo->to, return); - conv_unreadable_locale(str); - gtk_label_set_text(GTK_LABEL(headerview->to_body_label), str); + gtk_label_set_text(GTK_LABEL(headerview->to_body_label), + msginfo->to); gtk_widget_show(headerview->to_header_label); gtk_widget_show(headerview->to_body_label); } if (msginfo->newsgroups) { - Xstrdup_a(str, msginfo->newsgroups, return); - conv_unreadable_locale(str); - gtk_label_set_text(GTK_LABEL(headerview->ng_body_label), str); + gtk_label_set_text(GTK_LABEL(headerview->ng_body_label), + msginfo->newsgroups); gtk_widget_show(headerview->ng_header_label); gtk_widget_show(headerview->ng_body_label); } - if (msginfo->subject) { - Xstrdup_a(str, msginfo->subject, return); - conv_unreadable_locale(str); - } else - str = NULL; gtk_label_set_text(GTK_LABEL(headerview->subject_body_label), - str ? str : _("(No Subject)")); + msginfo->subject ? msginfo->subject : + _("(No Subject)")); #if HAVE_LIBCOMPFACE headerview_show_xface(headerview, msginfo); @@ -241,12 +225,12 @@ static void headerview_show_xface(HeaderView *headerview, MsgInfo *msginfo) if (!headerview->image) { GtkWidget *image; - image = gtk_pixmap_new(pixmap, mask); + image = gtk_image_new_from_pixmap(pixmap, mask); gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0); gtk_widget_show(image); headerview->image = image; } else { - gtk_pixmap_set(GTK_PIXMAP(headerview->image), pixmap, mask); + gtk_image_set_from_pixmap(GTK_IMAGE(headerview->image), pixmap, mask); gtk_widget_show(headerview->image); } diff --git a/src/imap.c b/src/imap.c index ea63ce5e6..19b3d716d 100644 --- a/src/imap.c +++ b/src/imap.c @@ -392,8 +392,8 @@ static gchar *search_array_str (GPtrArray *array, static void imap_path_separator_subst (gchar *str, gchar separator); -static gchar *imap_modified_utf7_to_locale (const gchar *mutf7_str); -static gchar *imap_locale_to_modified_utf7 (const gchar *from); +static gchar *imap_utf8_to_modified_utf7 (const gchar *from); +static gchar *imap_modified_utf7_to_utf8 (const gchar *mutf7_str); static GSList *imap_get_seq_set_from_numlist (MsgNumberList *msglist); static GSList *imap_get_seq_set_from_msglist (MsgInfoList *msglist); @@ -1298,7 +1298,7 @@ static gint imap_scan_tree_recursive(IMAPSession *session, FolderItem *item) new_item->stype = F_INBOX; folder->inbox = new_item; } else if (!item->parent || item->stype == F_INBOX) { - gchar *base; + const gchar *base; base = g_basename(new_item->path); @@ -1333,7 +1333,7 @@ static GSList *imap_parse_list(IMAPFolder *folder, IMAPSession *session, gchar flags[256]; gchar separator_str[16]; gchar *p; - gchar *name; + const gchar *name; gchar *loc_name, *loc_path; GSList *item_list = NULL; GString *str; @@ -1391,8 +1391,8 @@ static GSList *imap_parse_list(IMAPFolder *folder, IMAPSession *session, name = g_basename(buf); if (name[0] == '.') continue; - loc_name = imap_modified_utf7_to_locale(name); - loc_path = imap_modified_utf7_to_locale(buf); + loc_name = imap_modified_utf7_to_utf8(name); + loc_path = imap_modified_utf7_to_utf8(buf); new_item = folder_item_new(FOLDER(folder), loc_name, loc_path); if (strcasestr(flags, "\\Noinferiors") != NULL) new_item->no_sub = TRUE; @@ -1561,7 +1561,7 @@ FolderItem *imap_create_folder(Folder *folder, FolderItem *parent, /* keep trailing directory separator to create a folder that contains sub folder */ - imap_path = imap_locale_to_modified_utf7(dirpath); + imap_path = imap_utf8_to_modified_utf7(dirpath); strtailchomp(dirpath, '/'); Xstrdup_a(new_name, name, {g_free(dirpath); return NULL;}); strtailchomp(new_name, '/'); @@ -1663,7 +1663,7 @@ gint imap_rename_folder(Folder *folder, FolderItem *item, const gchar *name) } else newpath = g_strdup(name); - real_newpath = imap_locale_to_modified_utf7(newpath); + real_newpath = imap_utf8_to_modified_utf7(newpath); imap_path_separator_subst(real_newpath, separator); ok = imap_cmd_rename(session, real_oldpath, real_newpath); @@ -2079,7 +2079,7 @@ static gchar *imap_get_real_path(IMAPFolder *folder, const gchar *path) g_return_val_if_fail(folder != NULL, NULL); g_return_val_if_fail(path != NULL, NULL); - real_path = imap_locale_to_modified_utf7(path); + real_path = imap_utf8_to_modified_utf7(path); separator = imap_get_path_separator(folder, path); imap_path_separator_subst(real_path, separator); @@ -3218,7 +3218,7 @@ static void imap_path_separator_subst(gchar *str, gchar separator) } } -static gchar *imap_modified_utf7_to_locale(const gchar *mutf7_str) +static gchar *imap_modified_utf7_to_utf8(const gchar *mutf7_str) { #if !HAVE_ICONV const gchar *from_p; @@ -3251,10 +3251,9 @@ static gchar *imap_modified_utf7_to_locale(const gchar *mutf7_str) if (!iconv_ok) return g_strdup(mutf7_str); if (cd == (iconv_t)-1) { - cd = iconv_open(conv_get_current_charset_str(), "UTF-7"); + cd = iconv_open(conv_get_current_charset_str(), CS_UTF_8); if (cd == (iconv_t)-1) { - g_warning("iconv cannot convert UTF-7 to %s\n", - conv_get_current_charset_str()); + g_warning(_("iconv cannot convert UTF-7 to UTF-8\n")); iconv_ok = FALSE; return g_strdup(mutf7_str); } @@ -3291,8 +3290,7 @@ static gchar *imap_modified_utf7_to_locale(const gchar *mutf7_str) if (iconv(cd, (ICONV_CONST gchar **)&norm_utf7_p, &norm_utf7_len, &to_p, &to_len) == -1) { - g_warning(_("iconv cannot convert UTF-7 to %s\n"), - conv_get_current_charset_str()); + g_warning(_("iconv cannot convert UTF-7 to UTF-8\n")); g_string_free(norm_utf7, TRUE); g_free(to_str); return g_strdup(mutf7_str); @@ -3307,7 +3305,7 @@ static gchar *imap_modified_utf7_to_locale(const gchar *mutf7_str) #endif /* !HAVE_ICONV */ } -static gchar *imap_locale_to_modified_utf7(const gchar *from) +static gchar *imap_utf8_to_modified_utf7(const gchar *from) { #if !HAVE_ICONV const gchar *from_p; @@ -3338,10 +3336,9 @@ static gchar *imap_locale_to_modified_utf7(const gchar *from) if (!iconv_ok) return g_strdup(from); if (cd == (iconv_t)-1) { - cd = iconv_open("UTF-7", conv_get_current_charset_str()); + cd = iconv_open("UTF-7", CS_UTF_8); if (cd == (iconv_t)-1) { - g_warning("iconv cannot convert %s to UTF-7\n", - conv_get_current_charset_str()); + g_warning("iconv cannot convert UTF-8 to UTF-7\n"); iconv_ok = FALSE; return g_strdup(from); } @@ -3388,8 +3385,7 @@ static gchar *imap_locale_to_modified_utf7(const gchar *from) if (iconv(cd, (ICONV_CONST gchar **)&from_tmp, &conv_len, &norm_utf7_p, &norm_utf7_len) == -1) { - g_warning("iconv cannot convert %s to UTF-7\n", - conv_get_current_charset_str()); + g_warning(_("iconv cannot convert UTF-8 to UTF-7\n")); return g_strdup(from); } diff --git a/src/import.c b/src/import.c index 6a1af8548..925825816 100644 --- a/src/import.c +++ b/src/import.c @@ -47,6 +47,7 @@ #include "gtkutils.h" #include "manage_window.h" #include "folder.h" +#include "codeconv.h" static GtkWidget *window; static GtkWidget *file_entry; @@ -63,7 +64,7 @@ static void import_cancel_cb(GtkWidget *widget, gpointer data); static void import_filesel_cb(GtkWidget *widget, gpointer data); static void import_destsel_cb(GtkWidget *widget, gpointer data); static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data); -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); gint import_mbox(FolderItem *default_dest) { @@ -91,12 +92,25 @@ gint import_mbox(FolderItem *default_dest) gtk_main(); if (import_ack) { - gchar *filename, *destdir; + const gchar *utf8filename, *destdir; FolderItem *dest; - filename = gtk_entry_get_text(GTK_ENTRY(file_entry)); + utf8filename = gtk_entry_get_text(GTK_ENTRY(file_entry)); destdir = gtk_entry_get_text(GTK_ENTRY(dest_entry)); - if (filename && *filename) { + if (utf8filename && *utf8filename) { + const gchar *src_codeset = CS_UTF_8; + const gchar *dest_codeset = conv_get_current_charset_str(); + gchar *filename; + +#warning FIXME_GTK2 /* should we use g_filename_from_utf8? */ + filename = conv_codeset_strdup(utf8filename, + src_codeset, + dest_codeset); + if (!filename) { + g_warning("faild to convert character set\n"); + filename = g_strdup(utf8filename); + } + if (!destdir || !*destdir) { dest = folder_find_item_from_path(INBOX_DIR); } else @@ -108,6 +122,8 @@ gint import_mbox(FolderItem *default_dest) } else { ok = proc_mbox(dest, filename); } + + g_free(filename); } } @@ -126,16 +142,16 @@ static void import_create(void) GtkWidget *dest_label; GtkWidget *confirm_area; - window = gtk_window_new(GTK_WINDOW_DIALOG); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), _("Import")); gtk_container_set_border_width(GTK_CONTAINER(window), 5); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(delete_event), NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(key_pressed), NULL); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(delete_event), NULL); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(key_pressed), NULL); MANAGE_WINDOW_SIGNALS_CONNECT(window); vbox = gtk_vbox_new(FALSE, 4); @@ -154,7 +170,7 @@ static void import_create(void) gtk_container_set_border_width(GTK_CONTAINER(table), 8); gtk_table_set_row_spacings(GTK_TABLE(table), 8); gtk_table_set_col_spacings(GTK_TABLE(table), 8); - gtk_widget_set_usize(table, 420, -1); + gtk_widget_set_size_request(table, 420, -1); file_label = gtk_label_new(_("Importing file:")); gtk_table_attach(GTK_TABLE(table), file_label, 0, 1, 0, 1, @@ -177,14 +193,14 @@ static void import_create(void) file_button = gtk_button_new_with_label(_(" Select... ")); gtk_table_attach(GTK_TABLE(table), file_button, 2, 3, 0, 1, 0, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(file_button), "clicked", - GTK_SIGNAL_FUNC(import_filesel_cb), NULL); + g_signal_connect(G_OBJECT(file_button), "clicked", + G_CALLBACK(import_filesel_cb), NULL); dest_button = gtk_button_new_with_label(_(" Select... ")); gtk_table_attach(GTK_TABLE(table), dest_button, 2, 3, 1, 2, 0, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(dest_button), "clicked", - GTK_SIGNAL_FUNC(import_destsel_cb), NULL); + g_signal_connect(G_OBJECT(dest_button), "clicked", + G_CALLBACK(import_destsel_cb), NULL); gtkut_button_set_create(&confirm_area, &ok_button, _("OK"), @@ -193,10 +209,10 @@ static void import_create(void) gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); gtk_widget_grab_default(ok_button); - gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", - GTK_SIGNAL_FUNC(import_ok_cb), NULL); - gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", - GTK_SIGNAL_FUNC(import_cancel_cb), NULL); + g_signal_connect(G_OBJECT(ok_button), "clicked", + G_CALLBACK(import_ok_cb), NULL); + g_signal_connect(G_OBJECT(cancel_button), "clicked", + G_CALLBACK(import_cancel_cb), NULL); gtk_widget_show_all(window); } @@ -220,7 +236,20 @@ static void import_filesel_cb(GtkWidget *widget, gpointer data) gchar *filename; filename = filesel_select_file(_("Select importing file"), NULL); - if (filename) + if (!filename) return; + + if (g_getenv ("G_BROKEN_FILENAMES")) { + const gchar *oldstr = filename; + filename = conv_codeset_strdup (filename, + conv_get_current_charset_str(), + CS_UTF_8); + if (!filename) { + g_warning("import_filesel_cb(): faild to convert character set."); + filename = g_strdup(oldstr); + } + gtk_entry_set_text(GTK_ENTRY(file_entry), filename); + g_free(filename); + } else gtk_entry_set_text(GTK_ENTRY(file_entry), filename); } @@ -243,8 +272,9 @@ static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data) return TRUE; } -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) { if (event && event->keyval == GDK_Escape) import_cancel_cb(NULL, NULL); + return FALSE; } diff --git a/src/importldif.c b/src/importldif.c index 03c491e65..ef30fb142 100644 --- a/src/importldif.c +++ b/src/importldif.c @@ -184,7 +184,7 @@ static void imp_ldif_message( void ) { gchar *sMsg = NULL; gint pageNum; - pageNum = gtk_notebook_current_page( GTK_NOTEBOOK(impldif_dlg.notebook) ); + pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(impldif_dlg.notebook) ); if( pageNum == PAGE_FILE_INFO ) { sMsg = _( "Please specify address book name and file to import." ); } @@ -321,14 +321,14 @@ static void imp_ldif_field_list_selected( * \param event Event object. * \param data Data. */ -static void imp_ldif_field_list_toggle( +static gboolean imp_ldif_field_list_toggle( GtkCList *clist, GdkEventButton *event, gpointer data ) { Ldif_FieldRec *rec; gboolean toggle = FALSE; - if( ! event ) return; - if( impldif_dlg.rowIndSelect < 0 ) return; + if( ! event ) return FALSE; + if( impldif_dlg.rowIndSelect < 0 ) return FALSE; if( event->button == 1 ) { /* If single click in select column */ if( event->type == GDK_BUTTON_PRESS ) { @@ -337,8 +337,8 @@ static void imp_ldif_field_list_toggle( gint row, col; gtk_clist_get_selection_info( clist, x, y, &row, &col ); - if( col != FIELD_COL_SELECT ) return; - if( row > impldif_dlg.rowCount ) return; + if( col != FIELD_COL_SELECT ) return FALSE; + if( row > impldif_dlg.rowCount ) return FALSE; /* Set row */ impldif_dlg.rowIndSelect = row; @@ -359,6 +359,7 @@ static void imp_ldif_field_list_toggle( imp_ldif_update_row( clist ); } } + return FALSE; } /** @@ -506,10 +507,10 @@ static void imp_ldif_finish_show() { static void imp_ldif_prev( GtkWidget *widget ) { gint pageNum; - pageNum = gtk_notebook_current_page( GTK_NOTEBOOK(impldif_dlg.notebook) ); + pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(impldif_dlg.notebook) ); if( pageNum == PAGE_ATTRIBUTES ) { /* Goto file page stuff */ - gtk_notebook_set_page( + gtk_notebook_set_current_page( GTK_NOTEBOOK(impldif_dlg.notebook), PAGE_FILE_INFO ); gtk_widget_set_sensitive( impldif_dlg.btnPrev, FALSE ); } @@ -523,11 +524,11 @@ static void imp_ldif_prev( GtkWidget *widget ) { static void imp_ldif_next( GtkWidget *widget ) { gint pageNum; - pageNum = gtk_notebook_current_page( GTK_NOTEBOOK(impldif_dlg.notebook) ); + pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(impldif_dlg.notebook) ); if( pageNum == PAGE_FILE_INFO ) { /* Goto attributes stuff */ if( imp_ldif_file_move() ) { - gtk_notebook_set_page( + gtk_notebook_set_current_page( GTK_NOTEBOOK(impldif_dlg.notebook), PAGE_ATTRIBUTES ); imp_ldif_message(); gtk_widget_set_sensitive( impldif_dlg.btnPrev, TRUE ); @@ -539,7 +540,7 @@ static void imp_ldif_next( GtkWidget *widget ) { else if( pageNum == PAGE_ATTRIBUTES ) { /* Goto finish stuff */ if( imp_ldif_field_move() ) { - gtk_notebook_set_page( + gtk_notebook_set_current_page( GTK_NOTEBOOK(impldif_dlg.notebook), PAGE_FINISH ); imp_ldif_finish_show(); } @@ -554,7 +555,7 @@ static void imp_ldif_next( GtkWidget *widget ) { static void imp_ldif_cancel( GtkWidget *widget, gpointer data ) { gint pageNum; - pageNum = gtk_notebook_current_page( GTK_NOTEBOOK(impldif_dlg.notebook) ); + pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(impldif_dlg.notebook) ); if( pageNum != PAGE_FINISH ) { impldif_dlg.cancelled = TRUE; } @@ -567,7 +568,7 @@ static void imp_ldif_cancel( GtkWidget *widget, gpointer data ) { * \param data User data. */ static void imp_ldif_file_ok( GtkWidget *widget, gpointer data ) { - gchar *sFile; + const gchar *sFile; AddressFileSelection *afs; GtkWidget *fileSel; @@ -604,10 +605,10 @@ static void imp_ldif_file_select_create( AddressFileSelection *afs ) { fileSelector = gtk_file_selection_new( _("Select LDIF File") ); gtk_file_selection_hide_fileop_buttons( GTK_FILE_SELECTION(fileSelector) ); - gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION(fileSelector)->ok_button), - "clicked", GTK_SIGNAL_FUNC (imp_ldif_file_ok), ( gpointer ) afs ); - gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION(fileSelector)->cancel_button), - "clicked", GTK_SIGNAL_FUNC (imp_ldif_file_cancel), ( gpointer ) afs ); + g_signal_connect( G_OBJECT (GTK_FILE_SELECTION(fileSelector)->ok_button), + "clicked", G_CALLBACK (imp_ldif_file_ok), ( gpointer ) afs ); + g_signal_connect( G_OBJECT (GTK_FILE_SELECTION(fileSelector)->cancel_button), + "clicked", G_CALLBACK (imp_ldif_file_cancel), ( gpointer ) afs ); afs->fileSelector = fileSelector; afs->cancelled = TRUE; } @@ -646,10 +647,11 @@ static gint imp_ldif_delete_event( GtkWidget *widget, GdkEventAny *event, gpoint * \param event Event object. * \param data User data. */ -static void imp_ldif_key_pressed( GtkWidget *widget, GdkEventKey *event, gpointer data ) { +static gboolean imp_ldif_key_pressed( GtkWidget *widget, GdkEventKey *event, gpointer data ) { if (event && event->keyval == GDK_Escape) { imp_ldif_cancel( widget, data ); } + return FALSE; } /** @@ -730,8 +732,8 @@ static void imp_ldif_page_file( gint pageNum, gchar *pageLbl ) { gtk_widget_show_all(vbox); /* Button handler */ - gtk_signal_connect(GTK_OBJECT(btnFile), "clicked", - GTK_SIGNAL_FUNC(imp_ldif_file_select), NULL); + g_signal_connect(G_OBJECT(btnFile), "clicked", + G_CALLBACK(imp_ldif_file_select), NULL); impldif_dlg.entryFile = entryFile; impldif_dlg.entryName = entryName; @@ -898,12 +900,12 @@ static void imp_ldif_page_fields( gint pageNum, gchar *pageLbl ) { gtk_widget_show_all(vbox); /* Event handlers */ - gtk_signal_connect( GTK_OBJECT(clist_field), "select_row", - GTK_SIGNAL_FUNC(imp_ldif_field_list_selected), NULL ); - gtk_signal_connect( GTK_OBJECT(clist_field), "button_press_event", - GTK_SIGNAL_FUNC(imp_ldif_field_list_toggle), NULL ); - gtk_signal_connect( GTK_OBJECT(btnModify), "clicked", - GTK_SIGNAL_FUNC(imp_ldif_modify_pressed), NULL ); + g_signal_connect( G_OBJECT(clist_field), "select_row", + G_CALLBACK(imp_ldif_field_list_selected), NULL ); + g_signal_connect( G_OBJECT(clist_field), "button_press_event", + G_CALLBACK(imp_ldif_field_list_toggle), NULL ); + g_signal_connect( G_OBJECT(btnModify), "clicked", + G_CALLBACK(imp_ldif_modify_pressed), NULL ); impldif_dlg.clist_field = clist_field; impldif_dlg.entryField = entryField; @@ -993,18 +995,18 @@ static void imp_ldif_dialog_create() { GtkWidget *hsbox; GtkWidget *statusbar; - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, IMPORTLDIF_WIDTH, IMPORTLDIF_HEIGHT ); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request(window, IMPORTLDIF_WIDTH, IMPORTLDIF_HEIGHT ); gtk_container_set_border_width( GTK_CONTAINER(window), 0 ); gtk_window_set_title( GTK_WINDOW(window), _("Import LDIF file into Address Book") ); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(imp_ldif_delete_event), - NULL ); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(imp_ldif_key_pressed), - NULL ); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(imp_ldif_delete_event), + NULL ); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(imp_ldif_key_pressed), + NULL ); vbox = gtk_vbox_new(FALSE, 4); gtk_widget_show(vbox); @@ -1037,12 +1039,12 @@ static void imp_ldif_dialog_create() { gtk_widget_grab_default(btnNext); /* Button handlers */ - gtk_signal_connect(GTK_OBJECT(btnPrev), "clicked", - GTK_SIGNAL_FUNC(imp_ldif_prev), NULL); - gtk_signal_connect(GTK_OBJECT(btnNext), "clicked", - GTK_SIGNAL_FUNC(imp_ldif_next), NULL); - gtk_signal_connect(GTK_OBJECT(btnCancel), "clicked", - GTK_SIGNAL_FUNC(imp_ldif_cancel), NULL); + g_signal_connect(G_OBJECT(btnPrev), "clicked", + G_CALLBACK(imp_ldif_prev), NULL); + g_signal_connect(G_OBJECT(btnNext), "clicked", + G_CALLBACK(imp_ldif_next), NULL); + g_signal_connect(G_OBJECT(btnCancel), "clicked", + G_CALLBACK(imp_ldif_cancel), NULL); gtk_widget_show_all(vbox); @@ -1090,7 +1092,7 @@ AddressBookFile *addressbook_imp_ldif( AddressIndex *addrIndex ) { gtk_label_set_text( GTK_LABEL(impldif_dlg.entryField), "" ); gtk_entry_set_text( GTK_ENTRY(impldif_dlg.entryAttrib), "" ); gtk_clist_clear( GTK_CLIST(impldif_dlg.clist_field) ); - gtk_notebook_set_page( GTK_NOTEBOOK(impldif_dlg.notebook), PAGE_FILE_INFO ); + gtk_notebook_set_current_page( GTK_NOTEBOOK(impldif_dlg.notebook), PAGE_FILE_INFO ); gtk_widget_set_sensitive( impldif_dlg.btnPrev, FALSE ); gtk_widget_set_sensitive( impldif_dlg.btnNext, TRUE ); stock_pixmap_gdk( impldif_dlg.window, STOCK_PIXMAP_MARK, diff --git a/src/importmutt.c b/src/importmutt.c index cb0107495..766893a39 100644 --- a/src/importmutt.c +++ b/src/importmutt.c @@ -155,7 +155,7 @@ static void imp_mutt_cancel( GtkWidget *widget, gboolean *cancelled ) { } static void imp_mutt_file_ok( GtkWidget *widget, gpointer data ) { - gchar *sFile; + const gchar *sFile; AddressFileSelection *afs; GtkWidget *fileSel; @@ -233,7 +233,7 @@ static void imp_mutt_create( gboolean *cancelled ) { GtkWidget *hsbox; gint top; - window = gtk_window_new(GTK_WINDOW_DIALOG); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_usize(window, 450, -1); gtk_container_set_border_width( GTK_CONTAINER(window), 0 ); gtk_window_set_title( GTK_WINDOW(window), _("Import MUTT file into Address Book") ); diff --git a/src/importpine.c b/src/importpine.c index c3520364a..e75e6219c 100644 --- a/src/importpine.c +++ b/src/importpine.c @@ -155,7 +155,7 @@ static void imp_pine_cancel( GtkWidget *widget, gboolean *cancelled ) { } static void imp_pine_file_ok( GtkWidget *widget, gpointer data ) { - gchar *sFile; + const gchar *sFile; AddressFileSelection *afs; GtkWidget *fileSel; @@ -233,7 +233,7 @@ static void imp_pine_create( gboolean *cancelled ) { GtkWidget *hsbox; gint top; - window = gtk_window_new(GTK_WINDOW_DIALOG); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_usize(window, 450, -1); gtk_container_set_border_width( GTK_CONTAINER(window), 0 ); gtk_window_set_title( GTK_WINDOW(window), _("Import Pine file into Address Book") ); diff --git a/src/inc.c b/src/inc.c index bfdda00b4..5d44315c0 100644 --- a/src/inc.c +++ b/src/inc.c @@ -349,10 +349,10 @@ static IncProgressDialog *inc_progress_dialog_create(gboolean autocheck) progress = progress_dialog_create(); gtk_window_set_title(GTK_WINDOW(progress->window), _("Retrieving new messages")); - gtk_signal_connect(GTK_OBJECT(progress->cancel_btn), "clicked", - GTK_SIGNAL_FUNC(inc_cancel_cb), dialog); - gtk_signal_connect(GTK_OBJECT(progress->window), "delete_event", - GTK_SIGNAL_FUNC(inc_dialog_delete_cb), dialog); + g_signal_connect(G_OBJECT(progress->cancel_btn), "clicked", + G_CALLBACK(inc_cancel_cb), dialog); + g_signal_connect(G_OBJECT(progress->window), "delete_event", + G_CALLBACK(inc_dialog_delete_cb), dialog); /* manage_window_set_transient(GTK_WINDOW(progress->window)); */ progress_dialog_set_value(progress, 0.0); @@ -1100,7 +1100,8 @@ static gint inc_dialog_delete_cb(GtkWidget *widget, GdkEventAny *event, static gint inc_spool(void) { - gchar *mbox, *logname; + gchar *mbox; + const gchar *logname; gint msgs; logname = g_get_user_name(); diff --git a/src/inputdialog.c b/src/inputdialog.c index ed7e4b03d..03a42b662 100644 --- a/src/inputdialog.c +++ b/src/inputdialog.c @@ -77,7 +77,7 @@ static void cancel_clicked (GtkWidget *widget, static gint delete_event (GtkWidget *widget, GdkEventAny *event, gpointer data); -static void key_pressed (GtkWidget *widget, +static gboolean key_pressed (GtkWidget *widget, GdkEventKey *event, gpointer data); static void entry_activated (GtkEditable *editable); @@ -166,14 +166,14 @@ static void input_dialog_create(void) dialog = gtk_dialog_new(); gtk_window_set_policy(GTK_WINDOW(dialog), FALSE, FALSE, FALSE); - gtk_widget_set_usize(dialog, INPUT_DIALOG_WIDTH, -1); + gtk_widget_set_size_request(dialog, INPUT_DIALOG_WIDTH, -1); gtk_container_set_border_width (GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 5); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); - gtk_signal_connect(GTK_OBJECT(dialog), "delete_event", - GTK_SIGNAL_FUNC(delete_event), NULL); - gtk_signal_connect(GTK_OBJECT(dialog), "key_press_event", - GTK_SIGNAL_FUNC(key_pressed), NULL); + g_signal_connect(G_OBJECT(dialog), "delete_event", + G_CALLBACK(delete_event), NULL); + g_signal_connect(G_OBJECT(dialog), "key_press_event", + G_CALLBACK(key_pressed), NULL); MANAGE_WINDOW_SIGNALS_CONNECT(dialog); gtk_widget_realize(dialog); @@ -191,13 +191,13 @@ static void input_dialog_create(void) entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(entry), "activate", - GTK_SIGNAL_FUNC(entry_activated), NULL); + g_signal_connect(G_OBJECT(entry), "activate", + G_CALLBACK(entry_activated), NULL); combo = gtk_combo_new(); gtk_box_pack_start(GTK_BOX(vbox), combo, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(GTK_COMBO(combo)->entry), "activate", - GTK_SIGNAL_FUNC(combo_activated), NULL); + g_signal_connect(G_OBJECT(GTK_COMBO(combo)->entry), "activate", + G_CALLBACK(combo_activated), NULL); gtkut_button_set_create(&confirm_area, &ok_button, _("OK"), @@ -207,10 +207,10 @@ static void input_dialog_create(void) confirm_area); gtk_widget_grab_default(ok_button); - gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", - GTK_SIGNAL_FUNC(ok_clicked), NULL); - gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", - GTK_SIGNAL_FUNC(cancel_clicked), NULL); + g_signal_connect(G_OBJECT(ok_button), "clicked", + G_CALLBACK(ok_clicked), NULL); + g_signal_connect(G_OBJECT(cancel_button), "clicked", + G_CALLBACK(cancel_clicked), NULL); gtk_widget_show_all(GTK_DIALOG(dialog)->vbox); @@ -275,8 +275,8 @@ static void input_dialog_set(const gchar *title, const gchar *message, gtk_label_set_text(GTK_LABEL(msg_label), message); if (default_string && *default_string) { gtk_entry_set_text(GTK_ENTRY(entry_), default_string); - gtk_entry_set_position(GTK_ENTRY(entry_), 0); - gtk_entry_select_region(GTK_ENTRY(entry_), 0, -1); + gtk_editable_set_position(GTK_EDITABLE(entry_), 0); + gtk_editable_select_region(GTK_EDITABLE(entry_), 0, -1); } else gtk_entry_set_text(GTK_ENTRY(entry_), ""); @@ -304,12 +304,14 @@ static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data) return TRUE; } -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) { if (event && event->keyval == GDK_Escape) { ack = FALSE; fin = TRUE; } + + return FALSE; } static void entry_activated(GtkEditable *editable) diff --git a/src/jpilot.c b/src/jpilot.c index 5d86f878b..c022e5a80 100644 --- a/src/jpilot.c +++ b/src/jpilot.c @@ -1719,7 +1719,7 @@ gboolean jpilot_validate( JPilotFile *pilotFile ) { * no home. Filename should be g_free() when done. */ gchar *jpilot_find_pilotdb( void ) { - gchar *homedir; + const gchar *homedir; gchar str[ WORK_BUFLEN ]; gint len; FILE *fp; diff --git a/src/logwindow.c b/src/logwindow.c index 1d84560a0..3b9e753ef 100644 --- a/src/logwindow.c +++ b/src/logwindow.c @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include "intl.h" @@ -40,7 +40,7 @@ static void hide_cb (GtkWidget *widget, LogWindow *logwin); -static void key_pressed (GtkWidget *widget, +static gboolean key_pressed (GtkWidget *widget, GdkEventKey *event, LogWindow *logwin); static gboolean log_window_append (gpointer source, @@ -53,6 +53,8 @@ LogWindow *log_window_create(void) GtkWidget *window; GtkWidget *scrolledwin; GtkWidget *text; + GtkTextBuffer *buffer; + GtkTextIter iter; debug_print("Creating log window...\n"); logwin = g_new0(LogWindow, 1); @@ -61,13 +63,13 @@ LogWindow *log_window_create(void) gtk_window_set_title(GTK_WINDOW(window), _("Protocol log")); gtk_window_set_wmclass(GTK_WINDOW(window), "log_window", "Sylpheed"); gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE); - gtk_widget_set_usize(window, 520, 400); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(key_pressed), logwin); - gtk_signal_connect(GTK_OBJECT(window), "hide", - GTK_SIGNAL_FUNC(hide_cb), logwin); + gtk_widget_set_size_request(window, 520, 400); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(gtk_widget_hide_on_delete), NULL); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(key_pressed), logwin); + g_signal_connect(G_OBJECT(window), "hide", + G_CALLBACK(hide_cb), logwin); gtk_widget_realize(window); scrolledwin = gtk_scrolled_window_new(NULL, NULL); @@ -76,13 +78,14 @@ LogWindow *log_window_create(void) gtk_container_add(GTK_CONTAINER(window), scrolledwin); gtk_widget_show(scrolledwin); - text = gtk_text_new(gtk_scrolled_window_get_hadjustment - (GTK_SCROLLED_WINDOW(scrolledwin)), - gtk_scrolled_window_get_vadjustment - (GTK_SCROLLED_WINDOW(scrolledwin))); + text = gtk_text_view_new(); + gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE); + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_WORD); + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + gtk_text_buffer_get_start_iter(buffer, &iter); + gtk_text_buffer_create_mark(buffer, "end", &iter, FALSE); gtk_container_add(GTK_CONTAINER(scrolledwin), text); gtk_widget_show(text); - gtk_text_freeze(GTK_TEXT(text)); logwin->window = window; logwin->scrolledwin = scrolledwin; @@ -94,6 +97,7 @@ LogWindow *log_window_create(void) void log_window_init(LogWindow *logwin) { + GtkTextBuffer *buffer; GdkColormap *colormap; GdkColor color[3] = {{0, 0, 0xafff, 0}, {0, 0xefff, 0, 0}, {0, 0xefff, 0, 0}}; @@ -120,17 +124,27 @@ void log_window_init(LogWindow *logwin) break; } } + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(logwin->text)); + gtk_text_buffer_create_tag(buffer, "message", + "foreground-gdk", &logwin->msg_color, + NULL); + gtk_text_buffer_create_tag(buffer, "warn", + "foreground-gdk", &logwin->warn_color, + NULL); + gtk_text_buffer_create_tag(buffer, "error", + "foreground-gdk", &logwin->error_color, + NULL); } void log_window_show(LogWindow *logwin) { - GtkText *text = GTK_TEXT(logwin->text); - - gtk_widget_hide(logwin->window); + GtkTextView *text = GTK_TEXT_VIEW(logwin->text); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(text); + GtkTextMark *mark; - gtk_text_thaw(text); - text->vadj->value = text->vadj->upper - text->vadj->page_size; - gtk_signal_emit_by_name(GTK_OBJECT(text->vadj), "value_changed"); + mark = gtk_text_buffer_get_mark(buffer, "end"); + gtk_text_view_scroll_mark_onscreen(text, mark); gtk_widget_show(logwin->window); } @@ -139,9 +153,12 @@ static gboolean log_window_append(gpointer source, gpointer data) { LogText *logtext = (LogText *) source; LogWindow *logwindow = (LogWindow *) data; - GtkText *text; + GtkTextView *text; + GtkTextBuffer *buffer; + GtkTextIter iter; GdkColor *color = NULL; gchar *head = NULL; + const gchar *tag; g_return_val_if_fail(logtext != NULL, TRUE); g_return_val_if_fail(logtext->text != NULL, TRUE); @@ -150,27 +167,40 @@ static gboolean log_window_append(gpointer source, gpointer data) if (prefs_common.cliplog && !prefs_common.loglength) return FALSE; - text = GTK_TEXT(logwindow->text); + text = GTK_TEXT_VIEW(logwindow->text); + buffer = gtk_text_view_get_buffer(text); + gtk_text_buffer_get_iter_at_offset(buffer, &iter, -1); switch (logtext->type) { case LOG_MSG: color = &logwindow->msg_color; + tag = "message"; head = "* "; break; case LOG_WARN: color = &logwindow->warn_color; + tag = "warn"; head = "** "; break; case LOG_ERROR: color = &logwindow->error_color; + tag = "error"; head = "*** "; break; default: + tag = NULL; break; } + + if (head) + gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, head, -1, + tag, NULL); + gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, logtext->text, -1, + tag, NULL); + + gtk_text_buffer_get_start_iter(buffer, &iter); + gtk_text_buffer_place_cursor(buffer, &iter); - if (head) gtk_text_insert(text, NULL, color, NULL, head, -1); - gtk_text_insert(text, NULL, color, NULL, logtext->text, -1); if (prefs_common.cliplog) log_window_clear (GTK_WIDGET (text)); @@ -179,47 +209,36 @@ static gboolean log_window_append(gpointer source, gpointer data) static void hide_cb(GtkWidget *widget, LogWindow *logwin) { - if (GTK_TEXT(logwin->text)->freeze_count == 0) - gtk_text_freeze(GTK_TEXT(logwin->text)); } -static void key_pressed(GtkWidget *widget, GdkEventKey *event, +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, LogWindow *logwin) { if (event && event->keyval == GDK_Escape) gtk_widget_hide(logwin->window); + return FALSE; } void log_window_clear(GtkWidget *textw) { guint length; guint point; - gboolean was_frozen = FALSE; - GtkText *text = GTK_TEXT(textw); + GtkTextView *textview = GTK_TEXT_VIEW(textw); + GtkTextBuffer *textbuf = gtk_text_view_get_buffer(textview); + GtkTextIter start_iter, end_iter; - length = gtk_text_get_length (text); + length = gtk_text_buffer_get_char_count (textbuf); debug_print("Log window length: %u\n", length); if (length > prefs_common.loglength) { /* find the end of the first line after the cut off * point */ point = length - prefs_common.loglength; - while (point < length && GTK_TEXT_INDEX(text, point) != '\n') - point++; - /* erase the text */ - if (text->freeze_count) { - was_frozen = TRUE; - gtk_text_thaw(text); - } - gtk_text_set_point (text, 0); - gtk_text_freeze(text); - if (!gtk_text_forward_delete (text, point + 1)) - debug_print("Error clearing log\n"); - gtk_text_thaw(text); - gtk_text_set_point(text, - gtk_text_get_length (GTK_TEXT (text))); - if (was_frozen) - gtk_text_freeze(text); + gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter, point); + if (!gtk_text_iter_forward_to_line_end(&end_iter)) + return; + gtk_text_buffer_get_start_iter(textbuf, &start_iter); + gtk_text_buffer_delete(textbuf, &start_iter, &end_iter); } } diff --git a/src/main.c b/src/main.c index de91e656a..c7bf048ba 100644 --- a/src/main.c +++ b/src/main.c @@ -230,7 +230,7 @@ int main(int argc, char *argv[]) gtk_rc_parse("./gtkrc"); userrc = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, MENU_RC, NULL); - gtk_item_factory_parse_rc(userrc); + gtk_accel_map_load (userrc); g_free(userrc); CHDIR_RETURN_VAL_IF_FAIL(get_home_dir(), 1); @@ -649,7 +649,7 @@ void app_will_exit(GtkWidget *widget, gpointer data) addressbook_export_to_file(); filename = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, MENU_RC, NULL); - gtk_item_factory_dump_rc(filename, NULL, TRUE); + gtk_accel_map_save (filename); g_free(filename); /* delete temporary files */ diff --git a/src/mainwindow.c b/src/mainwindow.c index 15dc99d72..a9c4bf783 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -103,11 +103,11 @@ static void main_window_set_widgets (MainWindow *mainwin, SeparateType type); #if 0 -static void toolbar_account_button_pressed (GtkWidget *widget, +static gboolean toolbar_account_button_pressed (GtkWidget *widget, GdkEventButton *event, gpointer data); #endif -static void ac_label_button_pressed (GtkWidget *widget, +static gboolean ac_label_button_pressed (GtkWidget *widget, GdkEventButton *event, gpointer data); static void ac_menu_popup_closed (GtkMenuShell *menu_shell, @@ -766,14 +766,14 @@ MainWindow *main_window_create(SeparateType type) gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL, &geometry, GDK_HINT_MIN_SIZE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(main_window_close_cb), mainwin); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(main_window_close_cb), mainwin); MANAGE_WINDOW_SIGNALS_CONNECT(window); - gtk_signal_connect(GTK_OBJECT(window), "focus_in_event", - GTK_SIGNAL_FUNC(mainwindow_focus_in_event), - mainwin); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(mainwindow_key_pressed), mainwin); + g_signal_connect(G_OBJECT(window), "focus_in_event", + G_CALLBACK(mainwindow_focus_in_event), + mainwin); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(mainwindow_key_pressed), mainwin); gtk_widget_realize(window); gtk_widget_add_events(window, GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK); @@ -821,7 +821,7 @@ MainWindow *main_window_create(SeparateType type) gtk_box_pack_start(GTK_BOX(hbox_stat), statusbar, TRUE, TRUE, 0); progressbar = gtk_progress_bar_new(); - gtk_widget_set_usize(progressbar, 120, 1); + gtk_widget_set_size_request(progressbar, 120, 1); gtk_box_pack_start(GTK_BOX(hbox_stat), progressbar, FALSE, FALSE, 0); online_pixmap = stock_pixmap_widget(hbox_stat, STOCK_PIXMAP_WORK_ONLINE); @@ -836,11 +836,11 @@ MainWindow *main_window_create(SeparateType type) offline_switch, _("Go online"), NULL); gtk_container_add (GTK_CONTAINER(online_switch), online_pixmap); gtk_button_set_relief (GTK_BUTTON(online_switch), GTK_RELIEF_NONE); - gtk_signal_connect (GTK_OBJECT(online_switch), "clicked", (GtkSignalFunc)online_switch_clicked, mainwin); + g_signal_connect (G_OBJECT(online_switch), "clicked", G_CALLBACK(online_switch_clicked), mainwin); gtk_box_pack_start (GTK_BOX(hbox_stat), online_switch, FALSE, FALSE, 0); gtk_container_add (GTK_CONTAINER(offline_switch), offline_pixmap); gtk_button_set_relief (GTK_BUTTON(offline_switch), GTK_RELIEF_NONE); - gtk_signal_connect (GTK_OBJECT(offline_switch), "clicked", (GtkSignalFunc)online_switch_clicked, mainwin); + g_signal_connect (G_OBJECT(offline_switch), "clicked", G_CALLBACK(online_switch_clicked), mainwin); gtk_box_pack_start (GTK_BOX(hbox_stat), offline_switch, FALSE, FALSE, 0); statuslabel = gtk_label_new(""); @@ -852,10 +852,10 @@ MainWindow *main_window_create(SeparateType type) ac_button, _("Select account"), NULL); gtk_button_set_relief(GTK_BUTTON(ac_button), GTK_RELIEF_NONE); GTK_WIDGET_UNSET_FLAGS(ac_button, GTK_CAN_FOCUS); - gtk_widget_set_usize(ac_button, -1, 1); + gtk_widget_set_size_request(ac_button, -1, 1); gtk_box_pack_end(GTK_BOX(hbox_stat), ac_button, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(ac_button), "button_press_event", - GTK_SIGNAL_FUNC(ac_label_button_pressed), mainwin); + g_signal_connect(G_OBJECT(ac_button), "button_press_event", + G_CALLBACK(ac_label_button_pressed), mainwin); ac_label = gtk_label_new(""); gtk_container_add(GTK_CONTAINER(ac_button), ac_label); @@ -937,9 +937,9 @@ MainWindow *main_window_create(SeparateType type) main_window_set_widgets(mainwin, type); - gtk_signal_connect(GTK_OBJECT(window), "size_allocate", - GTK_SIGNAL_FUNC(main_window_size_allocate_cb), - mainwin); + g_signal_connect(G_OBJECT(window), "size_allocate", + G_CALLBACK(main_window_size_allocate_cb), + mainwin); /* set menu items */ menuitem = gtk_item_factory_get_item @@ -982,8 +982,8 @@ MainWindow *main_window_create(SeparateType type) /* set account selection menu */ ac_menu = gtk_item_factory_get_widget (ifactory, "/Configuration/Change current account"); - gtk_signal_connect(GTK_OBJECT(ac_menu), "selection_done", - GTK_SIGNAL_FUNC(ac_menu_popup_closed), mainwin); + g_signal_connect(G_OBJECT(ac_menu), "selection_done", + G_CALLBACK(ac_menu_popup_closed), mainwin); mainwin->ac_menu = ac_menu; toolbar_main_set_sensitive(mainwin); @@ -1175,10 +1175,11 @@ void main_window_set_account_menu(GList *account_list) (ac_prefs->account_name ? ac_prefs->account_name : _("Untitled")); gtk_widget_show(menuitem); - gtk_menu_append(GTK_MENU(mainwin->ac_menu), menuitem); - gtk_signal_connect(GTK_OBJECT(menuitem), "activate", - GTK_SIGNAL_FUNC(account_menu_cb), - ac_prefs); + gtk_menu_shell_append(GTK_MENU_SHELL(mainwin->ac_menu), + menuitem); + g_signal_connect(G_OBJECT(menuitem), "activate", + G_CALLBACK(account_menu_cb), + ac_prefs); } } } @@ -1825,12 +1826,12 @@ static void main_window_set_widgets(MainWindow *mainwin, SeparateType type) "folder_view", "Sylpheed"); gtk_window_set_policy(GTK_WINDOW(folderwin), TRUE, TRUE, FALSE); - gtk_widget_set_uposition(folderwin, prefs_common.folderwin_x, - prefs_common.folderwin_y); + gtk_window_move(GTK_WINDOW(folderwin), prefs_common.folderwin_x, + prefs_common.folderwin_y); gtk_container_set_border_width(GTK_CONTAINER(folderwin), BORDER_WIDTH); - gtk_signal_connect(GTK_OBJECT(folderwin), "delete_event", - GTK_SIGNAL_FUNC(folder_window_close_cb), + g_signal_connect(G_OBJECT(folderwin), "delete_event", + G_CALLBACK(folder_window_close_cb), mainwin); gtk_container_add(GTK_CONTAINER(folderwin), GTK_WIDGET_PTR(mainwin->folderview)); @@ -1846,13 +1847,13 @@ static void main_window_set_widgets(MainWindow *mainwin, SeparateType type) "message_view", "Sylpheed"); gtk_window_set_policy(GTK_WINDOW(messagewin), TRUE, TRUE, FALSE); - gtk_widget_set_uposition(messagewin, prefs_common.main_msgwin_x, - prefs_common.main_msgwin_y); + gtk_window_move(GTK_WINDOW(messagewin), prefs_common.main_msgwin_x, + prefs_common.main_msgwin_y); gtk_container_set_border_width(GTK_CONTAINER(messagewin), BORDER_WIDTH); - gtk_signal_connect(GTK_OBJECT(messagewin), "delete_event", - GTK_SIGNAL_FUNC(message_window_close_cb), - mainwin); + g_signal_connect(G_OBJECT(messagewin), "delete_event", + G_CALLBACK(message_window_close_cb), + mainwin); gtk_container_add(GTK_CONTAINER(messagewin), GTK_WIDGET_PTR(mainwin->messageview)); gtk_widget_realize(messagewin); @@ -1860,15 +1861,15 @@ static void main_window_set_widgets(MainWindow *mainwin, SeparateType type) gtk_widget_show(messagewin); } - gtk_widget_set_usize(GTK_WIDGET_PTR(mainwin->folderview), - prefs_common.folderview_width, - prefs_common.folderview_height); - gtk_widget_set_usize(GTK_WIDGET_PTR(mainwin->summaryview), - prefs_common.summaryview_width, - prefs_common.summaryview_height); - gtk_widget_set_usize(GTK_WIDGET_PTR(mainwin->messageview), - prefs_common.msgview_width, - prefs_common.msgview_height); + gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->folderview), + prefs_common.folderview_width, + prefs_common.folderview_height); + gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->summaryview), + prefs_common.summaryview_width, + prefs_common.summaryview_height); + gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->messageview), + prefs_common.msgview_width, + prefs_common.msgview_height); switch (type) { case SEPARATE_NONE: @@ -1955,9 +1956,9 @@ static void main_window_set_widgets(MainWindow *mainwin, SeparateType type) break; } - gtk_widget_set_uposition(mainwin->window, - prefs_common.mainwin_x, - prefs_common.mainwin_y); + gtk_window_move(GTK_WINDOW(mainwin->window), + prefs_common.mainwin_x, + prefs_common.mainwin_y); gtk_widget_queue_resize(vbox_body); gtk_widget_queue_resize(mainwin->vbox); @@ -2001,15 +2002,15 @@ static void main_window_set_widgets(MainWindow *mainwin, SeparateType type) ((type & SEPARATE_MESSAGE) != 0)); if (folderwin) { - gtk_signal_connect - (GTK_OBJECT(folderwin), "size_allocate", - GTK_SIGNAL_FUNC(folder_window_size_allocate_cb), + g_signal_connect + (G_OBJECT(folderwin), "size_allocate", + G_CALLBACK(folder_window_size_allocate_cb), mainwin); } if (messagewin) { - gtk_signal_connect - (GTK_OBJECT(messagewin), "size_allocate", - GTK_SIGNAL_FUNC(message_window_size_allocate_cb), + g_signal_connect + (G_OBJECT(messagewin), "size_allocate", + G_CALLBACK(message_window_size_allocate_cb), mainwin); } @@ -2035,39 +2036,43 @@ void main_window_destroy_all(void) } #if 0 -static void toolbar_account_button_pressed(GtkWidget *widget, - GdkEventButton *event, - gpointer data) +static gboolean toolbar_account_button_pressed(GtkWidget *widget, + GdkEventButton *event, + gpointer data) { MainWindow *mainwin = (MainWindow *)data; - if (!event) return; - if (event->button != 3) return; + if (!event) return FALSE; + if (event->button != 3) return FALSE; gtk_button_set_relief(GTK_BUTTON(widget), GTK_RELIEF_NORMAL); - gtk_object_set_data(GTK_OBJECT(mainwin->ac_menu), "menu_button", - widget); + g_object_set_data(G_OBJECT(mainwin->ac_menu), "menu_button", + widget); gtk_menu_popup(GTK_MENU(mainwin->ac_menu), NULL, NULL, menu_button_position, widget, event->button, event->time); + + return FALSE; } #endif -static void ac_label_button_pressed(GtkWidget *widget, GdkEventButton *event, - gpointer data) +static gboolean ac_label_button_pressed(GtkWidget *widget, GdkEventButton *event, + gpointer data) { MainWindow *mainwin = (MainWindow *)data; - if (!event) return; + if (!event) return FALSE; gtk_button_set_relief(GTK_BUTTON(widget), GTK_RELIEF_NORMAL); - gtk_object_set_data(GTK_OBJECT(mainwin->ac_menu), "menu_button", - widget); + g_object_set_data(G_OBJECT(mainwin->ac_menu), "menu_button", + widget); gtk_menu_popup(GTK_MENU(mainwin->ac_menu), NULL, NULL, menu_button_position, widget, event->button, event->time); + + return TRUE; } static void ac_menu_popup_closed(GtkMenuShell *menu_shell, gpointer data) @@ -2075,10 +2080,10 @@ static void ac_menu_popup_closed(GtkMenuShell *menu_shell, gpointer data) MainWindow *mainwin = (MainWindow *)data; GtkWidget *button; - button = gtk_object_get_data(GTK_OBJECT(menu_shell), "menu_button"); + button = g_object_get_data(G_OBJECT(menu_shell), "menu_button"); if (!button) return; gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); - gtk_object_remove_data(GTK_OBJECT(mainwin->ac_menu), "menu_button"); + g_object_set_data(G_OBJECT(mainwin->ac_menu), "menu_button", NULL); manage_window_focus_in(mainwin->window, NULL, NULL); } diff --git a/src/matcher.h b/src/matcher.h index 414df2e47..06119aec7 100644 --- a/src/matcher.h +++ b/src/matcher.h @@ -170,6 +170,6 @@ gchar *matching_build_command (const gchar *cmd, void prefs_matcher_read_config (void); void prefs_matcher_write_config (void); -void *matcher_parser_scan_string (gchar *str); +void *matcher_parser_scan_string (const gchar *str); #endif diff --git a/src/matcher_parser.h b/src/matcher_parser.h index f9bd43a43..f39dcf831 100644 --- a/src/matcher_parser.h +++ b/src/matcher_parser.h @@ -31,10 +31,10 @@ extern int matcher_parserlineno; void matcher_parser_start_parsing (FILE *f); int matcher_parserparse (void); -MatcherList *matcher_parser_get_cond (gchar *str); -MatcherProp *matcher_parser_get_prop (gchar *str); -FilteringProp *matcher_parser_get_filtering (gchar *str); -ScoringProp *matcher_parser_get_scoring (gchar *str); -GSList *matcher_parser_get_action_list(gchar *str); +MatcherList *matcher_parser_get_cond (const gchar *str); +MatcherProp *matcher_parser_get_prop (const gchar *str); +FilteringProp *matcher_parser_get_filtering (const gchar *str); +ScoringProp *matcher_parser_get_scoring (const gchar *str); +GSList *matcher_parser_get_action_list(const gchar *str); #endif diff --git a/src/matcher_parser_parse.y b/src/matcher_parser_parse.y index bbe8a6d8c..29d70d5fe 100644 --- a/src/matcher_parser_parse.y +++ b/src/matcher_parser_parse.y @@ -77,7 +77,7 @@ void matcher_parser_start_parsing(FILE *f) matcher_parserparse(); } -FilteringProp *matcher_parser_get_filtering(gchar *str) +FilteringProp *matcher_parser_get_filtering(const gchar *str) { void *bufstate; @@ -96,7 +96,7 @@ FilteringProp *matcher_parser_get_filtering(gchar *str) return filtering; } -ScoringProp *matcher_parser_get_scoring(gchar *str) +ScoringProp *matcher_parser_get_scoring(const gchar *str) { void *bufstate; @@ -117,7 +117,7 @@ ScoringProp *matcher_parser_get_scoring(gchar *str) static gboolean check_quote_symetry(gchar *str) { - gchar *walk; + const gchar *walk; int ret = 0; if (str == NULL) @@ -134,7 +134,7 @@ static gboolean check_quote_symetry(gchar *str) return !(ret % 2); } -MatcherList *matcher_parser_get_cond(gchar *str) +MatcherList *matcher_parser_get_cond(const gchar *str) { void *bufstate; @@ -156,7 +156,7 @@ MatcherList *matcher_parser_get_cond(gchar *str) return cond; } -GSList *matcher_parser_get_action_list(gchar *str) +GSList *matcher_parser_get_action_list(const gchar *str) { void *bufstate; @@ -178,7 +178,7 @@ GSList *matcher_parser_get_action_list(gchar *str) return action_list; } -MatcherProp *matcher_parser_get_prop(gchar *str) +MatcherProp *matcher_parser_get_prop(const gchar *str) { MatcherList *list; MatcherProp *prop; diff --git a/src/mbox.h b/src/mbox.h index 3f4c64378..240d56db1 100644 --- a/src/mbox.h +++ b/src/mbox.h @@ -29,6 +29,10 @@ typedef enum { LOCK_FLOCK } LockType; + +#warning FIXME_GTK2 +/* file name should be locale encode. */ + gint proc_mbox (FolderItem *dest, const gchar *mbox); gint lock_mbox (const gchar *base, diff --git a/src/message_search.c b/src/message_search.c index 9503d13da..e41488c88 100644 --- a/src/message_search.c +++ b/src/message_search.c @@ -61,7 +61,7 @@ static void message_search_create(MessageView *summaryview); static void message_search_execute(GtkButton *button, gpointer data); static void message_search_clear(GtkButton *button, gpointer data); static void body_activated(void); -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); void message_search(MessageView *messageview) { @@ -83,16 +83,16 @@ static void message_search_create(MessageView *messageview) GtkWidget *checkbtn_hbox; GtkWidget *confirm_area; - window = gtk_window_new (GTK_WINDOW_DIALOG); + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), _("Find in current message")); - gtk_widget_set_usize (window, 450, -1); + gtk_widget_set_size_request (window, 450, -1); gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, TRUE); gtk_container_set_border_width (GTK_CONTAINER (window), 8); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(key_pressed), NULL); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(gtk_widget_hide_on_delete), NULL); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(key_pressed), NULL); MANAGE_WINDOW_SIGNALS_CONNECT(window); vbox1 = gtk_vbox_new (FALSE, 0); @@ -110,18 +110,20 @@ static void message_search_create(MessageView *messageview) body_entry = gtk_entry_new (); gtk_widget_show (body_entry); gtk_box_pack_start (GTK_BOX (hbox1), body_entry, TRUE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(body_entry), "activate", - GTK_SIGNAL_FUNC(body_activated), messageview); + g_signal_connect(G_OBJECT(body_entry), "activate", + G_CALLBACK(body_activated), messageview); checkbtn_hbox = gtk_hbox_new (FALSE, 8); gtk_widget_show (checkbtn_hbox); gtk_box_pack_start (GTK_BOX (vbox1), checkbtn_hbox, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (checkbtn_hbox), 8); - case_checkbtn = gtk_check_button_new_with_label (_("Case sensitive")); +#warning FIXME_GTK2 + case_checkbtn = gtk_check_button_new_with_label (_("Case sensitive (Broken)")); gtk_widget_show (case_checkbtn); gtk_box_pack_start (GTK_BOX (checkbtn_hbox), case_checkbtn, FALSE, FALSE, 0); + gtk_widget_set_sensitive(case_checkbtn, FALSE); backward_checkbtn = gtk_check_button_new_with_label (_("Backward search")); @@ -137,15 +139,17 @@ static void message_search_create(MessageView *messageview) gtk_box_pack_start (GTK_BOX (vbox1), confirm_area, FALSE, FALSE, 0); gtk_widget_grab_default(search_btn); - gtk_signal_connect(GTK_OBJECT(search_btn), "clicked", - GTK_SIGNAL_FUNC(message_search_execute), - messageview); - gtk_signal_connect(GTK_OBJECT(clear_btn), "clicked", - GTK_SIGNAL_FUNC(message_search_clear), - messageview); - gtk_signal_connect_object(GTK_OBJECT(close_btn), "clicked", - GTK_SIGNAL_FUNC(gtk_widget_hide), - GTK_OBJECT(window)); + g_signal_connect(G_OBJECT(search_btn), "clicked", + G_CALLBACK(message_search_execute), + messageview); + g_signal_connect(G_OBJECT(clear_btn), "clicked", + G_CALLBACK(message_search_clear), + messageview); + g_signal_connect_closure + (G_OBJECT(close_btn), "clicked", + g_cclosure_new_swap(G_CALLBACK(gtk_widget_hide), + window, NULL), + FALSE); } static void message_search_execute(GtkButton *button, gpointer data) @@ -154,7 +158,7 @@ static void message_search_execute(GtkButton *button, gpointer data) gboolean case_sens; gboolean backward; gboolean all_searched = FALSE; - gchar *body_str; + const gchar *body_str; body_str = gtk_entry_get_text(GTK_ENTRY(body_entry)); if (*body_str == '\0') return; @@ -215,8 +219,9 @@ static void body_activated(void) gtk_button_clicked(GTK_BUTTON(search_btn)); } -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) { if (event && event->keyval == GDK_Escape) gtk_widget_hide(window); + return FALSE; } diff --git a/src/messageview.c b/src/messageview.c index 32af2cfe7..266b6aa59 100644 --- a/src/messageview.c +++ b/src/messageview.c @@ -380,18 +380,18 @@ MessageView *messageview_create_with_new_window(MainWindow *mainwin) gtk_window_set_title(GTK_WINDOW(window), _("Sylpheed - Message View")); gtk_window_set_wmclass(GTK_WINDOW(window), "message_view", "Sylpheed"); gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE); - gtk_widget_set_usize(window, prefs_common.msgwin_width, - prefs_common.msgwin_height); + gtk_widget_set_size_request(window, prefs_common.msgwin_width, + prefs_common.msgwin_height); msgview = messageview_create(mainwin); - gtk_signal_connect(GTK_OBJECT(window), "size_allocate", - GTK_SIGNAL_FUNC(messageview_size_allocate_cb), - msgview); - gtk_signal_connect(GTK_OBJECT(window), "destroy", - GTK_SIGNAL_FUNC(messageview_destroy_cb), msgview); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(key_pressed), msgview); + g_signal_connect(G_OBJECT(window), "size_allocate", + G_CALLBACK(messageview_size_allocate_cb), + msgview); + g_signal_connect(G_OBJECT(window), "destroy", + G_CALLBACK(messageview_destroy_cb), msgview); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(key_pressed), msgview); messageview_add_toolbar(msgview, window); @@ -838,8 +838,14 @@ void messageview_copy_clipboard(MessageView *messageview) TextView *text; text = messageview_get_current_textview(messageview); - if (text) - gtk_editable_copy_clipboard(GTK_EDITABLE(text->text)); + if (text) { + GtkTextView *textview = GTK_TEXT_VIEW(text->text); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(textview); + GtkClipboard *clipboard + = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); + + gtk_text_buffer_copy_clipboard(buffer, clipboard); + } } void messageview_select_all(MessageView *messageview) @@ -1046,29 +1052,35 @@ gchar *messageview_get_selection(MessageView *msgview) { TextView *textview; gchar *text = NULL; - GtkEditable *edit = NULL; + GtkTextView *edit = NULL; + GtkTextBuffer *textbuf; gint body_pos = 0; g_return_val_if_fail(msgview != NULL, NULL); textview = messageview_get_current_textview(msgview); if (textview) { - edit = GTK_EDITABLE(textview->text); + edit = GTK_TEXT_VIEW(textview->text); body_pos = textview->body_pos; } else { - edit = GTK_EDITABLE(msgview->mimeview->textview->text); + edit = GTK_TEXT_VIEW(msgview->mimeview->textview->text); body_pos = msgview->mimeview->textview->body_pos; } g_return_val_if_fail(edit != NULL, NULL); - if (edit->has_selection) - text = gtkut_editable_get_selection(edit); - else if (msgview->filtered) - text = gtk_editable_get_chars (edit, body_pos, -1); - else + textbuf = gtk_text_view_get_buffer(edit); + + if (gtk_text_buffer_get_selection_bounds(textbuf, NULL, NULL)) + return gtkut_text_view_get_selection(edit); + else if (msgview->filtered) { + GtkTextIter start_iter, end_iter; + gtk_text_buffer_get_iter_at_offset(textbuf, &start_iter, body_pos); + gtk_text_buffer_get_end_iter(textbuf, &end_iter); + gtk_text_buffer_get_text(textbuf, &start_iter, &end_iter, FALSE); + } else text = NULL; - + return text; } diff --git a/src/mh.c b/src/mh.c index e0bc447fc..20b3cad2b 100644 --- a/src/mh.c +++ b/src/mh.c @@ -42,6 +42,7 @@ #include "procmsg.h" #include "procheader.h" #include "utils.h" +#include "codeconv.h" static void mh_folder_init(Folder * folder, const gchar * name, const gchar * path); @@ -81,6 +82,8 @@ static gchar *mh_get_new_msg_filename(FolderItem * dest); static MsgInfo *mh_parse_msg(const gchar * file, FolderItem * item); static void mh_remove_missing_folder_items (Folder *folder); static void mh_scan_tree_recursive(FolderItem * item); +static gchar *mh_filename_from_utf8 (const gchar *path); +static gchar *mh_filename_to_utf8 (const gchar *path); static gboolean mh_rename_folder_func(GNode * node, gpointer data); static gchar *mh_item_get_path(Folder *folder, FolderItem *item); @@ -243,7 +246,7 @@ gchar *mh_fetch_msg(Folder *folder, FolderItem *item, gint num) path = folder_item_get_path(item); file = g_strconcat(path, G_DIR_SEPARATOR_S, itos(num), NULL); - g_free(path); + if (!is_file_exist(file)) { g_free(file); return NULL; @@ -559,7 +562,7 @@ gchar *mh_item_get_path(Folder *folder, FolderItem *item) FolderItem *mh_create_folder(Folder *folder, FolderItem *parent, const gchar *name) { - gchar *path; + gchar *path, *real_name; gchar *fullpath; FolderItem *new_item; gchar *mh_sequences_filename; @@ -574,7 +577,9 @@ FolderItem *mh_create_folder(Folder *folder, FolderItem *parent, if (make_dir_hier(path) != 0) return NULL; - fullpath = g_strconcat(path, G_DIR_SEPARATOR_S, name, NULL); + real_name = mh_filename_from_utf8(name); + fullpath = g_strconcat(path, G_DIR_SEPARATOR_S, real_name, NULL); + g_free(real_name); g_free(path); if (make_dir(fullpath) < 0) { @@ -608,9 +613,10 @@ FolderItem *mh_create_folder(Folder *folder, FolderItem *parent, gint mh_rename_folder(Folder *folder, FolderItem *item, const gchar *name) { + gchar *real_name; gchar *oldpath; gchar *dirname; - gchar *newpath; + gchar *newpath, *utf8newpath; gchar *paths[2]; g_return_val_if_fail(folder != NULL, -1); @@ -623,8 +629,9 @@ gint mh_rename_folder(Folder *folder, FolderItem *item, const gchar *name) make_dir_hier(oldpath); dirname = g_dirname(oldpath); - newpath = g_strconcat(dirname, G_DIR_SEPARATOR_S, name, NULL); - g_free(dirname); + real_name = mh_filename_from_utf8(name); + newpath = g_strconcat(dirname, G_DIR_SEPARATOR_S, real_name, NULL); + g_free(real_name); if (rename(oldpath, newpath) < 0) { FILE_OP_ERROR(oldpath, "rename"); @@ -638,16 +645,17 @@ gint mh_rename_folder(Folder *folder, FolderItem *item, const gchar *name) if (strchr(item->path, G_DIR_SEPARATOR) != NULL) { dirname = g_dirname(item->path); - newpath = g_strconcat(dirname, G_DIR_SEPARATOR_S, name, NULL); + utf8newpath = g_strconcat(dirname, G_DIR_SEPARATOR_S, + name, NULL); g_free(dirname); } else - newpath = g_strdup(name); + utf8newpath = g_strdup(name); g_free(item->name); item->name = g_strdup(name); paths[0] = g_strdup(item->path); - paths[1] = newpath; + paths[1] = utf8newpath; g_node_traverse(item->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1, mh_rename_folder_func, paths); @@ -776,7 +784,7 @@ static void mh_scan_tree_recursive(FolderItem *item) DIR *dp; struct dirent *d; struct stat s; - gchar *entry; + gchar *real_path, *entry, *utf8entry, *utf8name; gint n_msg = 0; g_return_if_fail(item != NULL); @@ -784,11 +792,13 @@ static void mh_scan_tree_recursive(FolderItem *item) folder = item->folder; - dp = opendir(item->path ? item->path : "."); + real_path = item->path ? mh_filename_from_utf8(item->path) : g_strdup("."); + dp = opendir(real_path); if (!dp) { - FILE_OP_ERROR(item->path ? item->path : ".", "opendir"); + FILE_OP_ERROR(real_path, "opendir"); return; } + g_free(real_path); debug_print("scanning %s ...\n", item->path ? item->path @@ -799,15 +809,19 @@ static void mh_scan_tree_recursive(FolderItem *item) while ((d = readdir(dp)) != NULL) { if (d->d_name[0] == '.') continue; + utf8name = mh_filename_to_utf8(d->d_name); if (item->path) - entry = g_strconcat(item->path, G_DIR_SEPARATOR_S, - d->d_name, NULL); + utf8entry = g_strconcat(item->path, G_DIR_SEPARATOR_S, + utf8name, NULL); else - entry = g_strdup(d->d_name); + utf8entry = g_strdup(utf8name); + entry = mh_filename_from_utf8(utf8entry); if (stat(entry, &s) < 0) { FILE_OP_ERROR(entry, "stat"); g_free(entry); + g_free(utf8entry); + g_free(utf8name); continue; } @@ -818,6 +832,8 @@ static void mh_scan_tree_recursive(FolderItem *item) #if 0 if (mh_is_maildir(entry)) { g_free(entry); + g_free(utf8entry); + g_free(utf8name); continue; } #endif @@ -832,7 +848,7 @@ static void mh_scan_tree_recursive(FolderItem *item) } if (!new_item) { debug_print("new folder '%s' found.\n", entry); - new_item = folder_item_new(folder, d->d_name, entry); + new_item = folder_item_new(folder, utf8name, utf8entry); folder_item_append(item, new_item); } @@ -864,6 +880,8 @@ static void mh_scan_tree_recursive(FolderItem *item) } else if (to_number(d->d_name) != -1) n_msg++; g_free(entry); + g_free(utf8entry); + g_free(utf8name); } closedir(dp); @@ -913,3 +931,37 @@ static gboolean mh_rename_folder_func(GNode *node, gpointer data) return FALSE; } + +#warning FIXME_GTK2 /* should we use g_filename_from_utf8()? */ +static gchar *mh_filename_from_utf8(const gchar *path) +{ + const gchar *src_codeset = CS_UTF_8; + const gchar *dest_codeset = conv_get_current_charset_str(); + gchar *real_path; + + real_path = conv_codeset_strdup(path, src_codeset, dest_codeset); + if (!real_path) { + g_warning("mh_filename_from_utf8: faild to convert character set\n"); + /* FIXME: show dialog? */ + real_path = g_strdup(path); + } + + return real_path; +} + +#warning FIXME_GTK2 /* should we use g_filename_to_utf8()? */ +static gchar *mh_filename_to_utf8(const gchar *path) +{ + const gchar *src_codeset = conv_get_current_charset_str(); + const gchar *dest_codeset = CS_UTF_8; + gchar *utf8path; + + utf8path = conv_codeset_strdup(path, src_codeset, dest_codeset); + if (!utf8path) { + g_warning("mh_filename_to_utf8: faild to convert character set\n"); + /* FIXME: show dialog? */ + utf8path = g_strdup(path); + } + + return utf8path; +} diff --git a/src/mimeview.c b/src/mimeview.c index fb13820aa..dc3b013c7 100644 --- a/src/mimeview.c +++ b/src/mimeview.c @@ -223,16 +223,16 @@ MimeView *mimeview_create(MainWindow *mainwin) GTK_CAN_FOCUS); gtk_container_add(GTK_CONTAINER(scrolledwin), ctree); - gtk_signal_connect(GTK_OBJECT(ctree), "tree_select_row", - GTK_SIGNAL_FUNC(mimeview_selected), mimeview); - gtk_signal_connect(GTK_OBJECT(ctree), "button_press_event", - GTK_SIGNAL_FUNC(mimeview_button_pressed), mimeview); - gtk_signal_connect(GTK_OBJECT(ctree), "key_press_event", - GTK_SIGNAL_FUNC(mimeview_key_pressed), mimeview); - gtk_signal_connect(GTK_OBJECT (ctree),"start_drag", - GTK_SIGNAL_FUNC (mimeview_start_drag), mimeview); - gtk_signal_connect(GTK_OBJECT(ctree), "drag_data_get", - GTK_SIGNAL_FUNC(mimeview_drag_data_get), mimeview); + g_signal_connect(G_OBJECT(ctree), "tree_select_row", + G_CALLBACK(mimeview_selected), mimeview); + g_signal_connect(G_OBJECT(ctree), "button_press_event", + G_CALLBACK(mimeview_button_pressed), mimeview); + g_signal_connect(G_OBJECT(ctree), "key_press_event", + G_CALLBACK(mimeview_key_pressed), mimeview); + g_signal_connect(G_OBJECT (ctree),"start_drag", + G_CALLBACK (mimeview_start_drag), mimeview); + g_signal_connect(G_OBJECT(ctree), "drag_data_get", + G_CALLBACK(mimeview_drag_data_get), mimeview); mime_notebook = gtk_notebook_new(); gtk_widget_show(mime_notebook); @@ -240,7 +240,7 @@ MimeView *mimeview_create(MainWindow *mainwin) gtk_notebook_set_show_tabs(GTK_NOTEBOOK(mime_notebook), FALSE); gtk_notebook_set_show_border(GTK_NOTEBOOK(mime_notebook), FALSE); - gtk_notebook_set_page(GTK_NOTEBOOK(notebook), 0); + gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0); icon_vbox = gtk_vbox_new(FALSE, 2); icon_scroll = gtk_layout_new(NULL, NULL); @@ -251,15 +251,15 @@ MimeView *mimeview_create(MainWindow *mainwin) arrow = gtk_arrow_new(GTK_ARROW_LEFT, GTK_SHADOW_NONE); gtk_widget_show(arrow); gtk_container_add(GTK_CONTAINER(mime_toggle), arrow); - gtk_signal_connect(GTK_OBJECT(mime_toggle), "toggled", - GTK_SIGNAL_FUNC(mime_toggle_button_cb), mimeview); + g_signal_connect(G_OBJECT(mime_toggle), "toggled", + G_CALLBACK(mime_toggle_button_cb), mimeview); icon_mainbox = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(icon_mainbox), mime_toggle, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(icon_mainbox), icon_scroll, TRUE, TRUE, 3); gtk_box_pack_end(GTK_BOX(icon_mainbox), scrollbutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(icon_mainbox), "size_allocate", - GTK_SIGNAL_FUNC(icon_scroll_size_allocate_cb), mimeview); + g_signal_connect(G_OBJECT(icon_mainbox), "size_allocate", + G_CALLBACK(icon_scroll_size_allocate_cb), mimeview); ctree_mainbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(ctree_mainbox), scrolledwin, TRUE, TRUE, 0); @@ -398,14 +398,14 @@ void mimeview_show_message(MimeView *mimeview, MimeInfo *mimeinfo, set_unchecked_signature(mimeinfo); #endif - gtk_signal_handler_block_by_func(GTK_OBJECT(ctree), mimeview_selected, - mimeview); + g_signal_handlers_block_by_func(G_OBJECT(ctree), mimeview_selected, + mimeview); mimeview_set_multipart_tree(mimeview, mimeinfo, NULL); icon_list_create(mimeview, mimeinfo); - gtk_signal_handler_unblock_by_func(GTK_OBJECT(ctree), - mimeview_selected, mimeview); + g_signal_handlers_unblock_by_func(G_OBJECT(ctree), + mimeview_selected, mimeview); /* search first text part */ for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); @@ -668,7 +668,8 @@ static gboolean mimeview_show_part(MimeView *mimeview, MimeInfo *partinfo) } viewer->show_mimepart(viewer, mimeview->file, partinfo); - return TRUE; +#warning FIXME_GTK2 Is it correct? + return FALSE; } static void mimeview_change_view_type(MimeView *mimeview, MimeViewType type) @@ -854,12 +855,17 @@ void mimeview_pass_key_press_event(MimeView *mimeview, GdkEventKey *event) #define BREAK_ON_MODIFIER_KEY() \ if ((event->state & (GDK_MOD1_MASK|GDK_CONTROL_MASK)) != 0) break +#warning FIXME_GTK2 +#if 0 #define KEY_PRESS_EVENT_STOP() \ if (gtk_signal_n_emissions_by_name \ (GTK_OBJECT(ctree), "key_press_event") > 0) { \ gtk_signal_emit_stop_by_name(GTK_OBJECT(ctree), \ "key_press_event"); \ } +#else +#define KEY_PRESS_EVENT_STOP() +#endif static gint mimeview_key_pressed(GtkWidget *widget, GdkEventKey *event, MimeView *mimeview) @@ -895,8 +901,7 @@ static gint mimeview_key_pressed(GtkWidget *widget, GdkEventKey *event, BREAK_ON_MODIFIER_KEY(); if (!GTK_CTREE_NODE_NEXT(mimeview->opened)) break; KEY_PRESS_EVENT_STOP(); - - gtk_signal_emit_by_name(GTK_OBJECT(ctree), "scroll_vertical", + g_signal_emit_by_name(G_OBJECT(ctree), "scroll_vertical", GTK_SCROLL_STEP_FORWARD, 0.0); return TRUE; case GDK_p: @@ -904,8 +909,7 @@ static gint mimeview_key_pressed(GtkWidget *widget, GdkEventKey *event, BREAK_ON_MODIFIER_KEY(); if (!GTK_CTREE_NODE_PREV(mimeview->opened)) break; KEY_PRESS_EVENT_STOP(); - - gtk_signal_emit_by_name(GTK_OBJECT(ctree), "scroll_vertical", + g_signal_emit_by_name(G_OBJECT(ctree), "scroll_vertical", GTK_SCROLL_STEP_BACKWARD, 0.0); return TRUE; case GDK_y: @@ -941,6 +945,7 @@ static void mimeview_drag_data_get(GtkWidget *widget, MimeView *mimeview) { gchar *filename, *uriname; + const gchar *bname; MimeInfo *partinfo; if (!mimeview->opened) return; @@ -951,11 +956,11 @@ static void mimeview_drag_data_get(GtkWidget *widget, if (!partinfo->filename && !partinfo->name) return; filename = partinfo->filename ? partinfo->filename : partinfo->name; - filename = g_basename(filename); - if (*filename == '\0') return; + bname = g_basename(filename); + if (*bname == '\0') return; filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S, - filename, NULL); + bname, NULL); if (procmime_get_part(filename, mimeview->file, partinfo) < 0) alertpanel_error @@ -1360,6 +1365,8 @@ static void icon_selected (MimeView *mimeview, gint num, MimeInfo *partinfo) } } +#warning FIXME_GTK2 +#if 0 #undef KEY_PRESS_EVENT_STOP #define KEY_PRESS_EVENT_STOP() \ if (gtk_signal_n_emissions_by_name \ @@ -1367,6 +1374,7 @@ static void icon_selected (MimeView *mimeview, gint num, MimeInfo *partinfo) gtk_signal_emit_stop_by_name(GTK_OBJECT(button), \ "key_press_event"); \ } +#endif static gint icon_key_pressed(GtkWidget *button, GdkEventKey *event, MimeView *mimeview) { @@ -1468,7 +1476,7 @@ static void toggle_icon(GtkToggleButton *button, MimeView *mimeview) { GList *child; - child = gtk_container_children(GTK_CONTAINER(mimeview->icon_vbox)); + child = gtk_container_get_children(GTK_CONTAINER(mimeview->icon_vbox)); for (; child != NULL; child = g_list_next(child)) { if (GTK_IS_TOGGLE_BUTTON(child->data) && GTK_TOGGLE_BUTTON(child->data) != button && @@ -1564,10 +1572,10 @@ static void icon_list_append_icon (MimeView *mimeview, MimeInfo *mimeinfo) gtk_tooltips_set_tip(mimeview->tooltips, button, tip, NULL); g_free(tip); gtk_widget_show_all(button); - gtk_signal_connect(GTK_OBJECT(button), "button_press_event", - GTK_SIGNAL_FUNC(icon_clicked_cb), mimeview); - gtk_signal_connect(GTK_OBJECT(button), "key_press_event", - GTK_SIGNAL_FUNC(icon_key_pressed), mimeview); + g_signal_connect(G_OBJECT(button), "button_press_event", + G_CALLBACK(icon_clicked_cb), mimeview); + g_signal_connect(G_OBJECT(button), "key_press_event", + G_CALLBACK(icon_key_pressed), mimeview); gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); } @@ -1682,8 +1690,8 @@ static void icon_list_create(MimeView *mimeview, MimeInfo *mimeinfo) gtk_widget_size_request(mimeview->icon_vbox, &size); width = size.width + 4; if (width > mimeview->icon_mainbox->requisition.width) { - gtk_widget_set_usize(mimeview->icon_mainbox, - width, -1); + gtk_widget_set_size_request(mimeview->icon_mainbox, + width, -1); } } diff --git a/src/mutt.c b/src/mutt.c index a49203af4..0c8f19230 100644 --- a/src/mutt.c +++ b/src/mutt.c @@ -561,7 +561,7 @@ gint mutt_import_data( MuttFile *muttFile, AddressCache *cache ) { * no home. Filename should be g_free() when done. */ gchar *mutt_find_file( void ) { - gchar *homedir; + const gchar *homedir; gchar str[ WORK_BUFLEN ]; gint len; FILE *fp; diff --git a/src/passphrase.c b/src/passphrase.c index 8e44f9ec3..a6d6bf3e0 100644 --- a/src/passphrase.c +++ b/src/passphrase.c @@ -27,7 +27,6 @@ #include #include #include -#include /* GDK_DISPLAY() */ #include #include #include @@ -39,6 +38,9 @@ #include #include #include +#ifdef GDK_WINDOWING_X11 +#include /* GDK_DISPLAY() */ +#endif /* GDK_WINDOWING_X11 */ #include "intl.h" #include "passphrase.h" @@ -55,8 +57,8 @@ static void passphrase_ok_cb(GtkWidget *widget, gpointer data); static void passphrase_cancel_cb(GtkWidget *widget, gpointer data); static gint passphrase_deleted(GtkWidget *widget, GdkEventAny *event, gpointer data); -static void passphrase_key_pressed(GtkWidget *widget, GdkEventKey *event, - gpointer data); +static gboolean passphrase_key_pressed(GtkWidget *widget, GdkEventKey *event, + gpointer data); static gchar* passphrase_mbox (const gchar *desc); @@ -81,17 +83,17 @@ passphrase_mbox (const gchar *desc) GtkWidget *ok_button; GtkWidget *cancel_button; - window = gtk_window_new(GTK_WINDOW_DIALOG); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), _("Passphrase")); - gtk_widget_set_usize(window, 450, -1); + gtk_widget_set_size_request(window, 450, -1); gtk_container_set_border_width(GTK_CONTAINER(window), 4); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(passphrase_deleted), NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(passphrase_key_pressed), NULL); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(passphrase_deleted), NULL); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(passphrase_key_pressed), NULL); MANAGE_WINDOW_SIGNALS_CONNECT(window); manage_window_set_transient(GTK_WINDOW(window)); @@ -125,7 +127,7 @@ passphrase_mbox (const gchar *desc) confirm_box = gtk_hbutton_box_new (); gtk_button_box_set_layout (GTK_BUTTON_BOX(confirm_box), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing (GTK_BUTTON_BOX(confirm_box), 5); + gtk_box_set_spacing (GTK_BOX(confirm_box), 5); ok_button = gtk_button_new_with_label (_("OK")); GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT); @@ -138,15 +140,15 @@ passphrase_mbox (const gchar *desc) gtk_box_pack_end(GTK_BOX(vbox), confirm_box, FALSE, FALSE, 0); gtk_widget_grab_default (ok_button); - gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", - GTK_SIGNAL_FUNC(passphrase_ok_cb), NULL); - gtk_signal_connect(GTK_OBJECT(pass_entry), "activate", - GTK_SIGNAL_FUNC(passphrase_ok_cb), NULL); - gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", - GTK_SIGNAL_FUNC(passphrase_cancel_cb), NULL); + g_signal_connect(G_OBJECT(ok_button), "clicked", + G_CALLBACK(passphrase_ok_cb), NULL); + g_signal_connect(G_OBJECT(pass_entry), "activate", + G_CALLBACK(passphrase_ok_cb), NULL); + g_signal_connect(G_OBJECT(cancel_button), "clicked", + G_CALLBACK(passphrase_cancel_cb), NULL); if (grab_all) - gtk_object_set (GTK_OBJECT(window), "type", GTK_WINDOW_POPUP, NULL); + g_object_set (G_OBJECT(window), "type", GTK_WINDOW_POPUP, NULL); gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER); if (grab_all) gtk_window_set_policy (GTK_WINDOW(window), FALSE, FALSE, TRUE); @@ -154,17 +156,23 @@ passphrase_mbox (const gchar *desc) gtk_widget_show_all(window); if (grab_all) { +#ifdef GDK_WINDOWING_X11 XGrabServer(GDK_DISPLAY()); +#endif /* GDK_WINDOWING_X11 */ if ( gdk_pointer_grab ( window->window, TRUE, 0, NULL, NULL, GDK_CURRENT_TIME)) { +#ifdef GDK_WINDOWING_X11 XUngrabServer ( GDK_DISPLAY() ); +#endif /* GDK_WINDOWING_X11 */ g_warning ("OOPS: Could not grab mouse\n"); gtk_widget_destroy (window); return NULL; } if ( gdk_keyboard_grab( window->window, FALSE, GDK_CURRENT_TIME )) { gdk_pointer_ungrab (GDK_CURRENT_TIME); +#ifdef GDK_WINDOWING_X11 XUngrabServer ( GDK_DISPLAY() ); +#endif /* GDK_WINDOWING_X11 */ g_warning ("OOPS: Could not grab keyboard\n"); gtk_widget_destroy (window); return NULL; @@ -174,7 +182,9 @@ passphrase_mbox (const gchar *desc) gtk_main(); if (grab_all) { +#ifdef GDK_WINDOWING_X11 XUngrabServer (GDK_DISPLAY()); +#endif /* GDK_WINDOWING_X11 */ gdk_pointer_ungrab (GDK_CURRENT_TIME); gdk_keyboard_ungrab (GDK_CURRENT_TIME); gdk_flush(); @@ -183,9 +193,9 @@ passphrase_mbox (const gchar *desc) manage_window_focus_out(window, NULL, NULL); if (pass_ack) { - the_passphrase = gtk_entry_get_text(GTK_ENTRY(pass_entry)); - if (the_passphrase) /* Hmmm: Do we really need this? */ - the_passphrase = g_strdup (the_passphrase); + const gchar *entry_text = gtk_entry_get_text(GTK_ENTRY(pass_entry)); + if (entry_text) /* Hmmm: Do we really need this? */ + the_passphrase = g_strdup (entry_text); } gtk_widget_destroy (window); @@ -216,11 +226,12 @@ passphrase_deleted(GtkWidget *widget, GdkEventAny *event, gpointer data) } -static void +static gboolean passphrase_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) { if (event && event->keyval == GDK_Escape) passphrase_cancel_cb(NULL, NULL); + return FALSE; } static gint diff --git a/src/pine.c b/src/pine.c index 82bc8a0f1..bfb839769 100644 --- a/src/pine.c +++ b/src/pine.c @@ -660,7 +660,7 @@ gint pine_import_data( PineFile *pineFile, AddressCache *cache ) { * no home. Filename should be g_free() when done. */ gchar *pine_find_file( void ) { - gchar *homedir; + const gchar *homedir; gchar str[ WORK_BUFLEN ]; gint len; FILE *fp; diff --git a/src/plugins/image_viewer/Makefile.am b/src/plugins/image_viewer/Makefile.am index 4efabbb03..464c82674 100644 --- a/src/plugins/image_viewer/Makefile.am +++ b/src/plugins/image_viewer/Makefile.am @@ -10,7 +10,6 @@ image_viewer_la_SOURCES = \ image_viewer_la_LDFLAGS = \ -avoid-version -module \ $(GTK_LIBS) \ - $(GDK_IMLIB_LIBS) \ $(GDK_PIXBUF_LIBS) INCLUDES = \ @@ -22,6 +21,5 @@ AM_CPPFLAGS = \ $(ASPELL_CFLAGS) \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ - $(GDK_IMLIB_CFLAGS) \ $(GDK_PIXBUF_CFLAGS) \ $(OPENSSL_CFLAGS) diff --git a/src/plugins/image_viewer/viewer.c b/src/plugins/image_viewer/viewer.c index 240be8a43..be1f16e5c 100644 --- a/src/plugins/image_viewer/viewer.c +++ b/src/plugins/image_viewer/viewer.c @@ -82,10 +82,15 @@ static void image_viewer_load_file(ImageViewer *imageviewer, const gchar *imgfil gint avail_height; gint new_width; gint new_height; + GError *error = NULL; debug_print("image_viewer_show_mimepart\n"); - pixbuf = gdk_pixbuf_new_from_file(imgfile); + pixbuf = gdk_pixbuf_new_from_file(imgfile, &error); + if (error) { + g_warning(error->message); + g_error_free(error); + } if (!pixbuf) { g_warning("Can't load the image."); return; diff --git a/src/prefs_account.c b/src/prefs_account.c index acfecba21..6dff21694 100644 --- a/src/prefs_account.c +++ b/src/prefs_account.c @@ -557,7 +557,7 @@ static void prefs_account_edit_custom_header (void); static gint prefs_account_deleted (GtkWidget *widget, GdkEventAny *event, gpointer data); -static void prefs_account_key_pressed (GtkWidget *widget, +static gboolean prefs_account_key_pressed (GtkWidget *widget, GdkEventKey *event, gpointer data); static void prefs_account_ok (void); @@ -678,7 +678,7 @@ PrefsAccount *prefs_account_open(PrefsAccount *ac_prefs) } manage_window_set_transient(GTK_WINDOW(dialog.window)); - gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0); + gtk_notebook_set_current_page(GTK_NOTEBOOK(dialog.notebook), 0); gtk_widget_grab_focus(dialog.ok_btn); tmp_ac_prefs = *ac_prefs; @@ -746,18 +746,18 @@ static void prefs_account_create(void) /* create dialog */ prefs_dialog_create(&dialog); - gtk_signal_connect(GTK_OBJECT(dialog.window), "delete_event", - GTK_SIGNAL_FUNC(prefs_account_deleted), NULL); - gtk_signal_connect(GTK_OBJECT(dialog.window), "key_press_event", - GTK_SIGNAL_FUNC(prefs_account_key_pressed), NULL); + g_signal_connect(G_OBJECT(dialog.window), "delete_event", + G_CALLBACK(prefs_account_deleted), NULL); + g_signal_connect(G_OBJECT(dialog.window), "key_press_event", + G_CALLBACK(prefs_account_key_pressed), NULL); MANAGE_WINDOW_SIGNALS_CONNECT(dialog.window); - gtk_signal_connect(GTK_OBJECT(dialog.ok_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_account_ok), NULL); - gtk_signal_connect(GTK_OBJECT(dialog.apply_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_account_apply), NULL); - gtk_signal_connect(GTK_OBJECT(dialog.cancel_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_account_cancel), NULL); + g_signal_connect(G_OBJECT(dialog.ok_btn), "clicked", + G_CALLBACK(prefs_account_ok), NULL); + g_signal_connect(G_OBJECT(dialog.apply_btn), "clicked", + G_CALLBACK(prefs_account_apply), NULL); + g_signal_connect(G_OBJECT(dialog.cancel_btn), "clicked", + G_CALLBACK(prefs_account_cancel), NULL); prefs_account_basic_create(); SET_NOTEBOOK_LABEL(dialog.notebook, _("Basic"), page++); @@ -802,9 +802,9 @@ static void prefs_account_fix_size(void) #define SET_ACTIVATE(menuitem) \ { \ - gtk_signal_connect(GTK_OBJECT(menuitem), "activate", \ - GTK_SIGNAL_FUNC(prefs_account_protocol_activated), \ - NULL); \ + g_signal_connect(G_OBJECT(menuitem), "activate", \ + G_CALLBACK(prefs_account_protocol_activated), \ + NULL); \ } #define TABLE_YPAD 2 @@ -861,7 +861,7 @@ static void prefs_account_basic_create(void) acname_entry = gtk_entry_new (); gtk_widget_show (acname_entry); - gtk_widget_set_usize (acname_entry, DEFAULT_ENTRY_WIDTH, -1); + gtk_widget_set_size_request (acname_entry, DEFAULT_ENTRY_WIDTH, -1); gtk_box_pack_start (GTK_BOX (hbox), acname_entry, TRUE, TRUE, 0); default_chkbtn = gtk_check_button_new_with_label (_("Set as default")); @@ -1001,14 +1001,14 @@ static void prefs_account_basic_create(void) uid_entry = gtk_entry_new (); gtk_widget_show (uid_entry); - gtk_widget_set_usize (uid_entry, DEFAULT_ENTRY_WIDTH, -1); + gtk_widget_set_size_request (uid_entry, DEFAULT_ENTRY_WIDTH, -1); gtk_table_attach (GTK_TABLE (serv_table), uid_entry, 1, 2, 7, 8, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); pass_entry = gtk_entry_new (); gtk_widget_show (pass_entry); - gtk_widget_set_usize (pass_entry, DEFAULT_ENTRY_WIDTH, -1); + gtk_widget_set_size_request (pass_entry, DEFAULT_ENTRY_WIDTH, -1); gtk_table_attach (GTK_TABLE (serv_table), pass_entry, 3, 4, 7, 8, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); @@ -1046,9 +1046,9 @@ static void prefs_account_basic_create(void) gtk_table_attach (GTK_TABLE (serv_table), mailcmd_chkbtn, 0, 4, 5, 6, GTK_EXPAND | GTK_FILL, 0, 0, TABLE_YPAD); - gtk_signal_connect(GTK_OBJECT(mailcmd_chkbtn), "toggled", - GTK_SIGNAL_FUNC(prefs_account_mailcmd_toggled), - NULL); + g_signal_connect(G_OBJECT(mailcmd_chkbtn), "toggled", + G_CALLBACK(prefs_account_mailcmd_toggled), + NULL); mailcmd_label = gtk_label_new (_("command to send mails")); gtk_widget_show (mailcmd_label); @@ -1156,7 +1156,7 @@ static void prefs_account_receive_create(void) hbox_spc = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox_spc); gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0); - gtk_widget_set_usize (hbox_spc, 12, -1); + gtk_widget_set_size_request (hbox_spc, 12, -1); leave_time_label = gtk_label_new (_("Remove after")); gtk_widget_show (leave_time_label); @@ -1164,7 +1164,7 @@ static void prefs_account_receive_create(void) leave_time_entry = gtk_entry_new (); gtk_widget_show (leave_time_entry); - gtk_widget_set_usize (leave_time_entry, 64, -1); + gtk_widget_set_size_request (leave_time_entry, 64, -1); gtk_box_pack_start (GTK_BOX (hbox1), leave_time_entry, FALSE, FALSE, 0); leave_time_label = gtk_label_new (_("days")); @@ -1182,7 +1182,7 @@ static void prefs_account_receive_create(void) hbox_spc = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox_spc); gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0); - gtk_widget_set_usize (hbox_spc, 12, -1); + gtk_widget_set_size_request (hbox_spc, 12, -1); leave_time_label = gtk_label_new (_("(0 days: remove immediately)")); gtk_widget_show (leave_time_label); @@ -1201,7 +1201,7 @@ static void prefs_account_receive_create(void) size_limit_entry = gtk_entry_new (); gtk_widget_show (size_limit_entry); - gtk_widget_set_usize (size_limit_entry, 64, -1); + gtk_widget_set_size_request (size_limit_entry, 64, -1); gtk_box_pack_start (GTK_BOX (hbox1), size_limit_entry, FALSE, FALSE, 0); label = gtk_label_new (_("KB")); @@ -1222,15 +1222,15 @@ static void prefs_account_receive_create(void) inbox_entry = gtk_entry_new (); gtk_widget_show (inbox_entry); - gtk_widget_set_usize (inbox_entry, DEFAULT_ENTRY_WIDTH, -1); + gtk_widget_set_size_request (inbox_entry, DEFAULT_ENTRY_WIDTH, -1); gtk_box_pack_start (GTK_BOX (hbox1), inbox_entry, TRUE, TRUE, 0); inbox_btn = gtk_button_new_with_label (_(" Select... ")); gtk_widget_show (inbox_btn); gtk_box_pack_start (GTK_BOX (hbox1), inbox_btn, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (inbox_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_account_select_folder_cb), - inbox_entry); + g_signal_connect (G_OBJECT (inbox_btn), "clicked", + G_CALLBACK (prefs_account_select_folder_cb), + inbox_entry); PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2); @@ -1258,7 +1258,7 @@ static void prefs_account_receive_create(void) gtk_widget_show (spinbtn_maxarticle); gtk_box_pack_start (GTK_BOX (hbox2), spinbtn_maxarticle, FALSE, FALSE, 0); - gtk_widget_set_usize (spinbtn_maxarticle, 64, -1); + gtk_widget_set_size_request (spinbtn_maxarticle, 64, -1); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE); @@ -1373,9 +1373,9 @@ static void prefs_account_send_create(void) gtk_widget_show (customhdr_edit_btn); gtk_box_pack_start (GTK_BOX (hbox), customhdr_edit_btn, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (customhdr_edit_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_account_edit_custom_header), - NULL); + g_signal_connect (G_OBJECT (customhdr_edit_btn), "clicked", + G_CALLBACK (prefs_account_edit_custom_header), + NULL); SET_TOGGLE_SENSITIVITY (customhdr_chkbtn, customhdr_edit_btn); @@ -1400,7 +1400,7 @@ static void prefs_account_send_create(void) hbox_spc = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox_spc); gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0); - gtk_widget_set_usize (hbox_spc, 12, -1); + gtk_widget_set_size_request (hbox_spc, 12, -1); label = gtk_label_new (_("Authentication method")); gtk_widget_show (label); @@ -1429,7 +1429,7 @@ static void prefs_account_send_create(void) hbox_spc = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox_spc); gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0); - gtk_widget_set_usize (hbox_spc, 12, -1); + gtk_widget_set_size_request (hbox_spc, 12, -1); label = gtk_label_new (_("User ID")); gtk_widget_show (label); @@ -1437,7 +1437,7 @@ static void prefs_account_send_create(void) smtp_uid_entry = gtk_entry_new (); gtk_widget_show (smtp_uid_entry); - gtk_widget_set_usize (smtp_uid_entry, DEFAULT_ENTRY_WIDTH, -1); + gtk_widget_set_size_request (smtp_uid_entry, DEFAULT_ENTRY_WIDTH, -1); gtk_box_pack_start (GTK_BOX (hbox), smtp_uid_entry, TRUE, TRUE, 0); label = gtk_label_new (_("Password")); @@ -1446,7 +1446,7 @@ static void prefs_account_send_create(void) smtp_pass_entry = gtk_entry_new (); gtk_widget_show (smtp_pass_entry); - gtk_widget_set_usize (smtp_pass_entry, DEFAULT_ENTRY_WIDTH, -1); + gtk_widget_set_size_request (smtp_pass_entry, DEFAULT_ENTRY_WIDTH, -1); gtk_box_pack_start (GTK_BOX (hbox), smtp_pass_entry, TRUE, TRUE, 0); gtk_entry_set_visibility (GTK_ENTRY (smtp_pass_entry), FALSE); @@ -1459,7 +1459,7 @@ static void prefs_account_send_create(void) hbox_spc = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox_spc); gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0); - gtk_widget_set_usize (hbox_spc, 12, -1); + gtk_widget_set_size_request (hbox_spc, 12, -1); label = gtk_label_new (_("If you leave these entries empty, the same\n" @@ -1473,9 +1473,9 @@ static void prefs_account_send_create(void) PACK_CHECK_BUTTON (vbox3, pop_bfr_smtp_chkbtn, _("Authenticate with POP3 before sending")); - gtk_signal_connect (GTK_OBJECT (pop_bfr_smtp_chkbtn), "clicked", - GTK_SIGNAL_FUNC (pop_bfr_smtp_tm_set_sens), - NULL); + g_signal_connect (G_OBJECT (pop_bfr_smtp_chkbtn), "clicked", + G_CALLBACK (pop_bfr_smtp_tm_set_sens), + NULL); hbox = gtk_hbox_new (FALSE, 8); gtk_widget_show (hbox); @@ -1484,7 +1484,7 @@ static void prefs_account_send_create(void) hbox_spc = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox_spc); gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0); - gtk_widget_set_usize (hbox_spc, 12, -1); + gtk_widget_set_size_request (hbox_spc, 12, -1); label = gtk_label_new(_("POP authentication timeout: ")); gtk_widget_show (label); @@ -1492,7 +1492,7 @@ static void prefs_account_send_create(void) pop_bfr_smtp_tm_entry = gtk_entry_new (); gtk_widget_show (pop_bfr_smtp_tm_entry); - gtk_widget_set_usize (pop_bfr_smtp_tm_entry, 30, -1); + gtk_widget_set_size_request (pop_bfr_smtp_tm_entry, 30, -1); gtk_box_pack_start (GTK_BOX (hbox), pop_bfr_smtp_tm_entry, FALSE, FALSE, 0); label = gtk_label_new(_("minutes")); @@ -1563,7 +1563,7 @@ static void prefs_account_compose_create(void) gtk_widget_show (entry_sigsep); gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0); - gtk_widget_set_usize (entry_sigsep, 64, -1); + gtk_widget_set_size_request (entry_sigsep, 64, -1); sig_hbox = gtk_hbox_new (FALSE, 8); gtk_widget_show (sig_hbox); @@ -1573,16 +1573,18 @@ static void prefs_account_compose_create(void) gtk_widget_show (sigfile_radiobtn); gtk_box_pack_start (GTK_BOX (sig_hbox), sigfile_radiobtn, FALSE, FALSE, 0); - gtk_object_set_user_data (GTK_OBJECT (sigfile_radiobtn), - GINT_TO_POINTER (SIG_FILE)); + g_object_set_data (G_OBJECT (sigfile_radiobtn), + MENU_VAL_ID, + GINT_TO_POINTER (SIG_FILE)); sigcmd_radiobtn = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(sigfile_radiobtn), _("Command output")); gtk_widget_show (sigcmd_radiobtn); gtk_box_pack_start (GTK_BOX (sig_hbox), sigcmd_radiobtn, FALSE, FALSE, 0); - gtk_object_set_user_data (GTK_OBJECT (sigcmd_radiobtn), - GINT_TO_POINTER (SIG_COMMAND)); + g_object_set_data (G_OBJECT (sigcmd_radiobtn), + MENU_VAL_ID, + GINT_TO_POINTER (SIG_COMMAND)); hbox2 = gtk_hbox_new (FALSE, 8); gtk_widget_show (hbox2); @@ -1712,8 +1714,8 @@ static void prefs_account_privacy_create(void) FALSE, FALSE, 0); gtk_object_set_user_data (GTK_OBJECT (gnupg_inline_radiobtn), GINT_TO_POINTER (GNUPG_MODE_INLINE)); - gtk_signal_connect (GTK_OBJECT (gnupg_inline_radiobtn), "clicked", - prefs_account_gnupg_inline_warning, NULL); + g_signal_connect (G_OBJECT (gnupg_inline_radiobtn), "clicked", + prefs_account_gnupg_inline_warning, NULL); PACK_FRAME (vbox1, frame1, _("Sign key")); @@ -1728,8 +1730,9 @@ static void prefs_account_privacy_create(void) gtk_widget_show (defaultkey_radiobtn); gtk_box_pack_start (GTK_BOX (vbox2), defaultkey_radiobtn, FALSE, FALSE, 0); - gtk_object_set_user_data (GTK_OBJECT (defaultkey_radiobtn), - GINT_TO_POINTER (SIGN_KEY_DEFAULT)); + g_object_set_data (G_OBJECT (defaultkey_radiobtn), + MENU_VAL_ID, + GINT_TO_POINTER (SIGN_KEY_DEFAULT)); emailkey_radiobtn = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (defaultkey_radiobtn), @@ -1737,8 +1740,9 @@ static void prefs_account_privacy_create(void) gtk_widget_show (emailkey_radiobtn); gtk_box_pack_start (GTK_BOX (vbox2), emailkey_radiobtn, FALSE, FALSE, 0); - gtk_object_set_user_data (GTK_OBJECT (emailkey_radiobtn), - GINT_TO_POINTER (SIGN_KEY_BY_FROM)); + g_object_set_data (G_OBJECT (emailkey_radiobtn), + MENU_VAL_ID, + GINT_TO_POINTER (SIGN_KEY_BY_FROM)); customkey_radiobtn = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (defaultkey_radiobtn), @@ -1746,8 +1750,9 @@ static void prefs_account_privacy_create(void) gtk_widget_show (customkey_radiobtn); gtk_box_pack_start (GTK_BOX (vbox2), customkey_radiobtn, FALSE, FALSE, 0); - gtk_object_set_user_data (GTK_OBJECT (customkey_radiobtn), - GINT_TO_POINTER (SIGN_KEY_CUSTOM)); + g_object_set_data (G_OBJECT (customkey_radiobtn), + MENU_VAL_ID, + GINT_TO_POINTER (SIGN_KEY_CUSTOM)); hbox1 = gtk_hbox_new (FALSE, 8); gtk_widget_show (hbox1); @@ -1756,7 +1761,7 @@ static void prefs_account_privacy_create(void) label = gtk_label_new (""); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0); - gtk_widget_set_usize (label, 16, -1); + gtk_widget_set_size_request (label, 16, -1); label = gtk_label_new (_("User or key ID:")); gtk_widget_show (label); @@ -1788,8 +1793,9 @@ static void prefs_account_privacy_create(void) (GTK_RADIO_BUTTON (btn_p), label); \ gtk_widget_show (btn); \ gtk_box_pack_start (GTK_BOX (box), btn, FALSE, FALSE, 0); \ - gtk_object_set_user_data (GTK_OBJECT (btn), \ - GINT_TO_POINTER (data)); \ + g_object_set_data (G_OBJECT (btn), \ + MENU_VAL_ID, \ + GINT_TO_POINTER (data)); \ } #define CREATE_RADIO_BUTTONS(box, \ @@ -1800,8 +1806,9 @@ static void prefs_account_privacy_create(void) btn1 = gtk_radio_button_new_with_label(NULL, btn1_label); \ gtk_widget_show (btn1); \ gtk_box_pack_start (GTK_BOX (box), btn1, FALSE, FALSE, 0); \ - gtk_object_set_user_data (GTK_OBJECT (btn1), \ - GINT_TO_POINTER (btn1_data)); \ + g_object_set_data (G_OBJECT (btn1), \ + MENU_VAL_ID, \ + GINT_TO_POINTER (btn1_data)); \ \ CREATE_RADIO_BUTTON(box, btn2, btn1, btn2_label, btn2_data); \ CREATE_RADIO_BUTTON(box, btn3, btn1, btn3_label, btn3_data); \ @@ -1890,8 +1897,9 @@ static void prefs_account_ssl_create(void) gtk_widget_show (nntp_nossl_radiobtn); gtk_box_pack_start (GTK_BOX (vbox4), nntp_nossl_radiobtn, FALSE, FALSE, 0); - gtk_object_set_user_data (GTK_OBJECT (nntp_nossl_radiobtn), - GINT_TO_POINTER (SSL_NONE)); + g_object_set_data (G_OBJECT (nntp_nossl_radiobtn), + MENU_VAL_ID, + GINT_TO_POINTER (SSL_NONE)); CREATE_RADIO_BUTTON(vbox4, nntp_ssltunnel_radiobtn, nntp_nossl_radiobtn, _("Use SSL for NNTP connection"), SSL_TUNNEL); @@ -1927,7 +1935,7 @@ static void prefs_account_ssl_create(void) hbox_spc = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox_spc); gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0); - gtk_widget_set_usize (hbox_spc, 16, -1); + gtk_widget_set_size_request (hbox_spc, 16, -1); label = gtk_label_new (_("(Turn this off if you have SSL connection problems)")); @@ -2038,10 +2046,11 @@ static void prefs_account_advanced_create(void) #define PACK_PORT_ENTRY(box, entry) \ { \ - entry = gtk_entry_new_with_max_length (5); \ + entry = gtk_entry_new (); \ + gtk_entry_set_max_length (GTK_ENTRY(entry), 5); \ gtk_widget_show (entry); \ gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 0); \ - gtk_widget_set_usize (entry, 64, -1); \ + gtk_widget_set_size_request (entry, 64, -1); \ } vbox1 = gtk_vbox_new (FALSE, VSPACING); @@ -2096,9 +2105,9 @@ static void prefs_account_advanced_create(void) PACK_HBOX (hbox1); PACK_CHECK_BUTTON (hbox1, checkbtn_crosspost, _("Mark cross-posted messages as read and color:")); - gtk_signal_connect (GTK_OBJECT (checkbtn_crosspost), "toggled", - GTK_SIGNAL_FUNC (crosspost_color_toggled), - NULL); + g_signal_connect (G_OBJECT (checkbtn_crosspost), "toggled", + G_CALLBACK (crosspost_color_toggled), + NULL); colormenu_crosspost = gtk_option_menu_new(); gtk_widget_show (colormenu_crosspost); @@ -2154,9 +2163,9 @@ static void prefs_account_advanced_create(void) gtk_widget_show (button); \ gtk_table_attach (GTK_TABLE (table), button, \ 2, 3, n, n + 1, GTK_FILL, 0, 0, 0); \ - gtk_signal_connect \ - (GTK_OBJECT (button), "clicked", \ - GTK_SIGNAL_FUNC (prefs_account_select_folder_cb), \ + g_signal_connect \ + (G_OBJECT (button), "clicked", \ + G_CALLBACK (prefs_account_select_folder_cb), \ entry); \ \ SET_TOGGLE_SENSITIVITY (chkbtn, entry); \ @@ -2206,11 +2215,12 @@ static gint prefs_account_deleted(GtkWidget *widget, GdkEventAny *event, return TRUE; } -static void prefs_account_key_pressed(GtkWidget *widget, GdkEventKey *event, - gpointer data) +static gboolean prefs_account_key_pressed(GtkWidget *widget, GdkEventKey *event, + gpointer data) { if (event && event->keyval == GDK_Escape) prefs_account_cancel(); + return FALSE; } static void prefs_account_ok(void) @@ -2228,7 +2238,7 @@ static gint prefs_account_apply(void) menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(basic.protocol_optmenu)); menuitem = gtk_menu_get_active(GTK_MENU(menu)); protocol = GPOINTER_TO_INT - (gtk_object_get_user_data(GTK_OBJECT(menuitem))); + (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID)); if (*gtk_entry_get_text(GTK_ENTRY(basic.acname_entry)) == '\0') { alertpanel_error(_("Account name is not entered.")); @@ -2318,12 +2328,12 @@ static void prefs_account_enum_set_data_from_radiobtn(PrefParam *pparam) GSList *group; radiobtn = GTK_RADIO_BUTTON (*pparam->widget); - group = gtk_radio_button_group (radiobtn); + group = gtk_radio_button_get_group (radiobtn); while (group != NULL) { GtkToggleButton *btn = GTK_TOGGLE_BUTTON (group->data); if (gtk_toggle_button_get_active (btn)) { *((gint *)pparam->data) = GPOINTER_TO_INT - (gtk_object_get_user_data (GTK_OBJECT (btn))); + (g_object_get_data (G_OBJECT (btn), MENU_VAL_ID)); break; } group = group->next; @@ -2338,10 +2348,10 @@ static void prefs_account_enum_set_radiobtn(PrefParam *pparam) data = GINT_TO_POINTER (*((gint *)pparam->data)); radiobtn = GTK_RADIO_BUTTON (*pparam->widget); - group = gtk_radio_button_group (radiobtn); + group = gtk_radio_button_get_group (radiobtn); while (group != NULL) { GtkToggleButton *btn = GTK_TOGGLE_BUTTON (group->data); - gpointer data1 = gtk_object_get_user_data (GTK_OBJECT (btn)); + gpointer data1 = g_object_get_data (G_OBJECT (btn), MENU_VAL_ID); if (data1 == data) { gtk_toggle_button_set_active (btn, TRUE); break; @@ -2370,7 +2380,7 @@ static void prefs_account_protocol_set_data_from_optmenu(PrefParam *pparam) menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget)); menuitem = gtk_menu_get_active(GTK_MENU(menu)); *((RecvProtocol *)pparam->data) = GPOINTER_TO_INT - (gtk_object_get_user_data(GTK_OBJECT(menuitem))); + (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID)); } static void prefs_account_protocol_set_optmenu(PrefParam *pparam) @@ -2461,7 +2471,7 @@ static void prefs_account_smtp_auth_type_set_data_from_optmenu(PrefParam *pparam menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget)); menuitem = gtk_menu_get_active(GTK_MENU(menu)); *((RecvProtocol *)pparam->data) = GPOINTER_TO_INT - (gtk_object_get_user_data(GTK_OBJECT(menuitem))); + (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID)); } static void prefs_account_smtp_auth_type_set_optmenu(PrefParam *pparam) @@ -2496,7 +2506,7 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem) RecvProtocol protocol; protocol = GPOINTER_TO_INT - (gtk_object_get_user_data(GTK_OBJECT(menuitem))); + (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID)); switch(protocol) { case A_NNTP: diff --git a/src/prefs_actions.c b/src/prefs_actions.c index e9768148a..ea45c6c35 100644 --- a/src/prefs_actions.c +++ b/src/prefs_actions.c @@ -84,9 +84,9 @@ static void prefs_actions_row_move (GtkCList *clist, static gint prefs_actions_deleted (GtkWidget *widget, GdkEventAny *event, gpointer *data); -static void prefs_actions_key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer data); +static gboolean prefs_actions_key_pressed(GtkWidget *widget, + GdkEventKey *event, + gpointer data); static void prefs_actions_cancel (GtkWidget *w, gpointer data); static void prefs_actions_ok (GtkWidget *w, @@ -146,10 +146,10 @@ static void prefs_actions_create(MainWindow *mainwin) debug_print("Creating actions configuration window...\n"); - window = gtk_window_new (GTK_WINDOW_DIALOG); + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER (window), 8); - gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, TRUE); gtk_window_set_default_size(GTK_WINDOW(window), 400, -1); @@ -165,15 +165,15 @@ static void prefs_actions_create(MainWindow *mainwin) gtk_widget_grab_default(ok_btn); gtk_window_set_title(GTK_WINDOW(window), _("Actions configuration")); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(prefs_actions_deleted), NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(prefs_actions_key_pressed), NULL); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(prefs_actions_deleted), NULL); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(prefs_actions_key_pressed), NULL); MANAGE_WINDOW_SIGNALS_CONNECT(window); - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_actions_ok), mainwin); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_actions_cancel), NULL); + g_signal_connect(G_OBJECT(ok_btn), "clicked", + G_CALLBACK(prefs_actions_ok), mainwin); + g_signal_connect(G_OBJECT(cancel_btn), "clicked", + G_CALLBACK(prefs_actions_cancel), NULL); vbox1 = gtk_vbox_new(FALSE, 8); gtk_widget_show(vbox1); @@ -212,7 +212,7 @@ static void prefs_actions_create(MainWindow *mainwin) arrow = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT); gtk_widget_show(arrow); gtk_box_pack_start(GTK_BOX(reg_hbox), arrow, FALSE, FALSE, 0); - gtk_widget_set_usize(arrow, -1, 16); + gtk_widget_set_size_request(arrow, -1, 16); btn_hbox = gtk_hbox_new(TRUE, 4); gtk_widget_show(btn_hbox); @@ -221,27 +221,27 @@ static void prefs_actions_create(MainWindow *mainwin) reg_btn = gtk_button_new_with_label(_("Add")); gtk_widget_show(reg_btn); gtk_box_pack_start(GTK_BOX(btn_hbox), reg_btn, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(reg_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_actions_register_cb), NULL); + g_signal_connect(G_OBJECT(reg_btn), "clicked", + G_CALLBACK(prefs_actions_register_cb), NULL); subst_btn = gtk_button_new_with_label(_(" Replace ")); gtk_widget_show(subst_btn); gtk_box_pack_start(GTK_BOX(btn_hbox), subst_btn, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(subst_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_actions_substitute_cb), - NULL); + g_signal_connect(G_OBJECT(subst_btn), "clicked", + G_CALLBACK(prefs_actions_substitute_cb), + NULL); del_btn = gtk_button_new_with_label(_("Delete")); gtk_widget_show(del_btn); gtk_box_pack_start(GTK_BOX(btn_hbox), del_btn, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(del_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_actions_delete_cb), NULL); + g_signal_connect(G_OBJECT(del_btn), "clicked", + G_CALLBACK(prefs_actions_delete_cb), NULL); help_button = gtk_button_new_with_label(_(" Syntax help ")); gtk_widget_show(help_button); gtk_box_pack_end(GTK_BOX(reg_hbox), help_button, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(help_button), "clicked", - GTK_SIGNAL_FUNC(prefs_actions_help_cb), NULL); + g_signal_connect(G_OBJECT(help_button), "clicked", + G_CALLBACK(prefs_actions_help_cb), NULL); cond_hbox = gtk_hbox_new(FALSE, 8); gtk_widget_show(cond_hbox); @@ -249,7 +249,7 @@ static void prefs_actions_create(MainWindow *mainwin) cond_scrolledwin = gtk_scrolled_window_new(NULL, NULL); gtk_widget_show(cond_scrolledwin); - gtk_widget_set_usize(cond_scrolledwin, -1, 150); + gtk_widget_set_size_request(cond_scrolledwin, -1, 150); gtk_box_pack_start(GTK_BOX(cond_hbox), cond_scrolledwin, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (cond_scrolledwin), @@ -265,11 +265,11 @@ static void prefs_actions_create(MainWindow *mainwin) GTK_SELECTION_BROWSE); GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(cond_clist)->column[0].button, GTK_CAN_FOCUS); - gtk_signal_connect(GTK_OBJECT(cond_clist), "select_row", - GTK_SIGNAL_FUNC(prefs_actions_select), NULL); - gtk_signal_connect_after(GTK_OBJECT(cond_clist), "row_move", - GTK_SIGNAL_FUNC(prefs_actions_row_move), - NULL); + g_signal_connect(G_OBJECT(cond_clist), "select_row", + G_CALLBACK(prefs_actions_select), NULL); + g_signal_connect_after(G_OBJECT(cond_clist), "row_move", + G_CALLBACK(prefs_actions_row_move), + NULL); btn_vbox = gtk_vbox_new(FALSE, 8); gtk_widget_show(btn_vbox); @@ -278,14 +278,14 @@ static void prefs_actions_create(MainWindow *mainwin) up_btn = gtk_button_new_with_label(_("Up")); gtk_widget_show(up_btn); gtk_box_pack_start(GTK_BOX(btn_vbox), up_btn, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(up_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_actions_up), NULL); + g_signal_connect(G_OBJECT(up_btn), "clicked", + G_CALLBACK(prefs_actions_up), NULL); down_btn = gtk_button_new_with_label(_("Down")); gtk_widget_show(down_btn); gtk_box_pack_start(GTK_BOX(btn_vbox), down_btn, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(down_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_actions_down), NULL); + g_signal_connect(G_OBJECT(down_btn), "clicked", + G_CALLBACK(prefs_actions_down), NULL); gtk_widget_show(window); @@ -324,13 +324,25 @@ void prefs_actions_read_config(void) } while (fgets(buf, sizeof(buf), fp) != NULL) { - g_strchomp(buf); - act = strstr(buf, ": "); + const gchar *src_codeset = conv_get_current_charset_str(); + const gchar *dest_codeset = CS_UTF_8; + gchar *tmp; + + tmp = conv_codeset_strdup(buf, src_codeset, dest_codeset); + if (!tmp) { + g_warning("Faild to convert character set of action configuration\n"); + tmp = g_strdup(buf); + } + + g_strchomp(tmp); + act = strstr(tmp, ": "); if (act && act[2] && action_get_type(&act[2]) != ACTION_ERROR) prefs_common.actions_list = g_slist_append(prefs_common.actions_list, - g_strdup(buf)); + tmp); + else + g_free(tmp); } fclose(fp); } @@ -351,7 +363,17 @@ void prefs_actions_write_config(void) } for (cur = prefs_common.actions_list; cur != NULL; cur = cur->next) { - gchar *act = (gchar *)cur->data; + gchar *tmp = (gchar *)cur->data; + const gchar *src_codeset = CS_UTF_8; + const gchar *dest_codeset = conv_get_current_charset_str(); + gchar *act; + + act = conv_codeset_strdup(tmp, src_codeset, dest_codeset); + if (!act) { + g_warning("Faild to convert character set of action configuration\n"); + act = g_strdup(act); + } + if (fputs(act, pfile->fp) == EOF || fputc('\n', pfile->fp) == EOF) { FILE_OP_ERROR(rcpath, "fputs || fputc"); @@ -359,6 +381,7 @@ void prefs_actions_write_config(void) g_free(rcpath); return; } + g_free(act); } g_free(rcpath); @@ -416,7 +439,7 @@ static void prefs_actions_set_list(void) static gint prefs_actions_clist_set_row(gint row) { GtkCList *clist = GTK_CLIST(actions.actions_clist); - gchar *entry_text; + const gchar *entry_text; gint len; gchar action[PREFSBUFSIZE]; gchar *buf[1]; @@ -603,11 +626,12 @@ static gint prefs_actions_deleted(GtkWidget *widget, GdkEventAny *event, return TRUE; } -static void prefs_actions_key_pressed(GtkWidget *widget, GdkEventKey *event, - gpointer data) +static gboolean prefs_actions_key_pressed(GtkWidget *widget, GdkEventKey *event, + gpointer data) { if (event && event->keyval == GDK_Escape) prefs_actions_cancel(widget, data); + return FALSE; } static void prefs_actions_cancel(GtkWidget *w, gpointer data) diff --git a/src/prefs_common.c b/src/prefs_common.c index 8a88a796d..c5534c9e6 100644 --- a/src/prefs_common.c +++ b/src/prefs_common.c @@ -446,23 +446,54 @@ static PrefParam param[] = { /* Display */ {"widget_font", NULL, &prefs_common.widgetfont, P_STRING, NULL, NULL, NULL}, - {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*", + {"message_font", "Helvetica 14", &prefs_common.textfont, P_STRING, &display.entry_textfont, prefs_set_data_from_entry, prefs_set_entry}, - {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*", + {"small_font", "Helvetica 10", &prefs_common.smallfont, P_STRING, &display.entry_smallfont, prefs_set_data_from_entry, prefs_set_entry}, - {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*", + {"bold_font", "Helvetica Bold 14", &prefs_common.boldfont, P_STRING, &display.entry_boldfont, prefs_set_data_from_entry, prefs_set_entry}, - {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*", + {"normal_font", "Helvetica 14", &prefs_common.normalfont, P_STRING, &display.entry_normalfont, prefs_set_data_from_entry, prefs_set_entry}, +#if 0 /* sylpheed-gtk2(original) separate font setting with gtk+-1.2 version */ + /* Obsolete fonts. For coexisting with Gtk+-1.2 version */ + {"widget_font", NULL, &prefs_common.widgetfont_gtk1, P_STRING, + NULL, NULL, NULL}, + {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*", + &prefs_common.textfont_gtk1, P_STRING, + NULL, NULL, NULL}, + {"normal_font", DEFAULT_NORMAL_FONT_GTK1, &prefs_common.normalfont_gtk1, P_STRING, + NULL, NULL, NULL}, + {"bold_font", DEFAULT_BOLD_FONT_GTK1, &prefs_common.boldfont_gtk1, P_STRING, + NULL, NULL, NULL}, + {"small_font", DEFAULT_SMALL_FONT_GTK1, &prefs_common.smallfont_gtk1, P_STRING, + NULL, NULL, NULL}, + + /* new fonts */ + {"widget_font_gtk2", NULL, &prefs_common.widgetfont, P_STRING, + NULL, NULL, NULL}, + {"message_font_gtk2", DEFAULT_MESSAGE_FONT, + &prefs_common.textfont, P_STRING, + &display.entry_textfont, + prefs_set_data_from_entry, prefs_set_entry}, + {"normal_font_gtk2", DEFAULT_NORMAL_FONT, &prefs_common.normalfont, P_STRING, + NULL, NULL, NULL}, + {"bold_font_gtk2", DEFAULT_BOLD_FONT, &prefs_common.boldfont, P_STRING, + NULL, NULL, NULL}, + {"small_font_gtk2", DEFAULT_SMALL_FONT, &prefs_common.smallfont, P_STRING, + NULL, NULL, NULL}, + {"title_font_gtk2", DEFAULT_TITLE_FONT, &prefs_common.titlefont, P_STRING, + NULL, NULL, NULL}, +#endif + {"display_folder_unread_num", "TRUE", &prefs_common.display_folder_unread, P_BOOL, @@ -847,7 +878,7 @@ static void date_format_ok_btn_clicked (GtkButton *button, GtkWidget **widget); static void date_format_cancel_btn_clicked (GtkButton *button, GtkWidget **widget); -static void date_format_key_pressed (GtkWidget *keywidget, +static gboolean date_format_key_pressed (GtkWidget *keywidget, GdkEventKey *event, GtkWidget **widget); static gboolean date_format_on_delete (GtkWidget *dialogwidget, @@ -865,7 +896,7 @@ static GtkWidget *date_format_create (GtkButton *button, static void prefs_quote_colors_dialog (void); static void prefs_quote_colors_dialog_create (void); -static void prefs_quote_colors_key_pressed (GtkWidget *widget, +static gboolean prefs_quote_colors_key_pressed (GtkWidget *widget, GdkEventKey *event, gpointer data); static void quote_color_set_dialog (GtkWidget *widget, @@ -874,9 +905,9 @@ static void quote_colors_set_dialog_ok (GtkWidget *widget, gpointer data); static void quote_colors_set_dialog_cancel (GtkWidget *widget, gpointer data); -static void quote_colors_set_dialog_key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer data); +static gboolean quote_colors_set_dialog_key_pressed (GtkWidget *widget, + GdkEventKey *event, + gpointer data); static void set_button_bg_color (GtkWidget *widget, gint color); static void prefs_enable_message_color_toggled (void); @@ -884,16 +915,16 @@ static void prefs_recycle_colors_toggled (GtkWidget *widget); static void prefs_font_select (GtkButton *button, GtkEntry *entry); -static void prefs_font_selection_key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer data); +static gboolean prefs_font_selection_key_pressed (GtkWidget *widget, + GdkEventKey *event, + gpointer data); static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry); static void prefs_keybind_select (void); static gint prefs_keybind_deleted (GtkWidget *widget, GdkEventAny *event, gpointer data); -static void prefs_keybind_key_pressed (GtkWidget *widget, +static gboolean prefs_keybind_key_pressed (GtkWidget *widget, GdkEventKey *event, gpointer data); static void prefs_keybind_cancel (void); @@ -902,7 +933,7 @@ static void prefs_keybind_apply_clicked (GtkWidget *widget); static gint prefs_common_deleted (GtkWidget *widget, GdkEventAny *event, gpointer data); -static void prefs_common_key_pressed (GtkWidget *widget, +static gboolean prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); static void prefs_common_ok (void); @@ -985,7 +1016,7 @@ void prefs_common_open(void) } manage_window_set_transient(GTK_WINDOW(dialog.window)); - gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0); + gtk_notebook_set_current_page(GTK_NOTEBOOK(dialog.notebook), 0); gtk_widget_grab_focus(dialog.ok_btn); prefs_set_dialog(param); @@ -1002,16 +1033,16 @@ static void prefs_common_create(void) prefs_dialog_create(&dialog); gtk_window_set_title (GTK_WINDOW(dialog.window), _("Common Preferences")); - gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event", - GTK_SIGNAL_FUNC(prefs_common_deleted), NULL); - gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event", - GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL); + g_signal_connect (G_OBJECT(dialog.window), "delete_event", + G_CALLBACK(prefs_common_deleted), NULL); + g_signal_connect (G_OBJECT(dialog.window), "key_press_event", + G_CALLBACK(prefs_common_key_pressed), NULL); MANAGE_WINDOW_SIGNALS_CONNECT(dialog.window); - gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_common_ok), NULL); - gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_common_apply), NULL); + g_signal_connect (G_OBJECT(dialog.ok_btn), "clicked", + G_CALLBACK(prefs_common_ok), NULL); + g_signal_connect (G_OBJECT(dialog.apply_btn), "clicked", + G_CALLBACK(prefs_common_apply), NULL); gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked", GTK_SIGNAL_FUNC(prefs_common_cancel), GTK_OBJECT(dialog.window)); @@ -1168,7 +1199,7 @@ static void prefs_receive_create(void) (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0); gtk_widget_show (spinbtn_autochk); gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0); - gtk_widget_set_usize (spinbtn_autochk, 64, -1); + gtk_widget_set_size_request (spinbtn_autochk, 64, -1); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE); label_autochk2 = gtk_label_new (_("minute(s)")); @@ -1227,12 +1258,12 @@ static void prefs_receive_create(void) PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu, _("after manual checking")); gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_auto), "toggled", - GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb), - NULL); - gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_manu), "toggled", - GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb), - NULL); + g_signal_connect(G_OBJECT(checkbtn_newmail_auto), "toggled", + G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb), + NULL); + g_signal_connect(G_OBJECT(checkbtn_newmail_manu), "toggled", + G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb), + NULL); hbox_newmail_notify = gtk_hbox_new (FALSE, 8); gtk_widget_show (hbox); @@ -1586,7 +1617,7 @@ static void prefs_compose_create(void) _("Autosave to Drafts folder every ")); entry_autosave_length = gtk_entry_new(); - gtk_widget_set_usize (entry_autosave_length, 64, -1); + gtk_widget_set_size_request (entry_autosave_length, 64, -1); gtk_widget_show (entry_autosave_length); gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0); @@ -1607,7 +1638,7 @@ static void prefs_compose_create(void) (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0); gtk_widget_show (spinbtn_undolevel); gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0); - gtk_widget_set_usize (spinbtn_undolevel, 64, -1); + gtk_widget_set_size_request (spinbtn_undolevel, 64, -1); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE); /* line-wrapping */ @@ -1632,7 +1663,7 @@ static void prefs_compose_create(void) (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0); gtk_widget_show (spinbtn_linewrap); gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0); - gtk_widget_set_usize (spinbtn_linewrap, 64, -1); + gtk_widget_set_size_request (spinbtn_linewrap, 64, -1); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE); label_linewrap = gtk_label_new (_("characters")); @@ -1741,7 +1772,7 @@ static void prefs_quote_create(void) entry_quotemark = gtk_entry_new (); gtk_widget_show (entry_quotemark); gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0); - gtk_widget_set_usize (entry_quotemark, 64, -1); + gtk_widget_set_size_request (entry_quotemark, 64, -1); scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwin_quotefmt); @@ -1750,11 +1781,11 @@ static void prefs_quote_create(void) (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); - text_quotefmt = gtk_text_new (NULL, NULL); + text_quotefmt = gtk_text_view_new (); gtk_widget_show (text_quotefmt); gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt); - gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE); - gtk_widget_set_usize(text_quotefmt, -1, 60); + gtk_text_view_set_editable (GTK_TEXT_VIEW(text_quotefmt), TRUE); + gtk_widget_set_size_request(text_quotefmt, -1, 60); /* forward */ @@ -1781,7 +1812,7 @@ static void prefs_quote_create(void) gtk_widget_show (entry_fw_quotemark); gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark, FALSE, FALSE, 0); - gtk_widget_set_usize (entry_fw_quotemark, 64, -1); + gtk_widget_set_size_request (entry_fw_quotemark, 64, -1); scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwin_quotefmt); @@ -1790,12 +1821,12 @@ static void prefs_quote_create(void) (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); - text_fw_quotefmt = gtk_text_new (NULL, NULL); + text_fw_quotefmt = gtk_text_view_new (); gtk_widget_show (text_fw_quotefmt); gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt); - gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE); - gtk_widget_set_usize(text_fw_quotefmt, -1, 60); + gtk_text_view_set_editable (GTK_TEXT_VIEW (text_fw_quotefmt), TRUE); + gtk_widget_set_size_request(text_fw_quotefmt, -1, 60); hbox1 = gtk_hbox_new (FALSE, 32); gtk_widget_show (hbox1); @@ -1805,8 +1836,8 @@ static void prefs_quote_create(void) gtk_button_new_with_label (_(" Description of symbols ")); gtk_widget_show (btn_quotedesc); gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked", - GTK_SIGNAL_FUNC(quote_fmt_quote_description), NULL); + g_signal_connect(G_OBJECT(btn_quotedesc), "clicked", + G_CALLBACK(quote_fmt_quote_description), NULL); /* quote chars */ @@ -1833,7 +1864,7 @@ static void prefs_quote_create(void) gtk_widget_show (entry_quote_chars); gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars, FALSE, FALSE, 0); - gtk_widget_set_usize (entry_quote_chars, 64, -1); + gtk_widget_set_size_request (entry_quote_chars, 64, -1); compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote; @@ -1901,8 +1932,8 @@ static void prefs_display_create(void) gtk_widget_show (button_textfont); gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1, 0, 0, 0, 0); - gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked", - GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont); + g_signal_connect (G_OBJECT (button_textfont), "clicked", + G_CALLBACK (prefs_font_select), entry_textfont); tmplabel = gtk_label_new (_("Small")); gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5); @@ -1919,8 +1950,8 @@ static void prefs_display_create(void) gtk_widget_show (tmpbutton); gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2, 0, 0, 0, 0); - gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked", - GTK_SIGNAL_FUNC(prefs_font_select), tmpentry); + g_signal_connect (G_OBJECT(tmpbutton), "clicked", + G_CALLBACK(prefs_font_select), tmpentry); display.entry_smallfont = tmpentry; tmplabel = gtk_label_new (_("Normal")); @@ -1938,8 +1969,8 @@ static void prefs_display_create(void) gtk_widget_show (tmpbutton); gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3, 0, 0, 0, 0); - gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked", - GTK_SIGNAL_FUNC(prefs_font_select), tmpentry); + g_signal_connect (G_OBJECT(tmpbutton), "clicked", + G_CALLBACK(prefs_font_select), tmpentry); display.entry_normalfont = tmpentry; tmplabel = gtk_label_new (_("Bold")); @@ -1957,8 +1988,8 @@ static void prefs_display_create(void) gtk_widget_show (tmpbutton); gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4, 0, 0, 0, 0); - gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked", - GTK_SIGNAL_FUNC(prefs_font_select), tmpentry); + g_signal_connect (G_OBJECT(tmpbutton), "clicked", + G_CALLBACK(prefs_font_select), tmpentry); display.entry_boldfont = tmpentry; vbox2 = gtk_vbox_new (FALSE, 0); @@ -1989,7 +2020,7 @@ static void prefs_display_create(void) gtk_widget_show (spinbtn_ng_abbrev_len); gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len, FALSE, FALSE, 0); - gtk_widget_set_usize (spinbtn_ng_abbrev_len, 56, -1); + gtk_widget_set_size_request (spinbtn_ng_abbrev_len, 56, -1); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len), TRUE); @@ -2035,8 +2066,8 @@ static void prefs_display_create(void) gtk_widget_show (button_datefmt); gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked", - GTK_SIGNAL_FUNC (date_format_create), NULL); + g_signal_connect (G_OBJECT (button_datefmt), "clicked", + G_CALLBACK (date_format_create), NULL); PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW); @@ -2048,9 +2079,9 @@ static void prefs_display_create(void) (_(" Set displayed items in summary... ")); gtk_widget_show (button_dispitem); gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked", - GTK_SIGNAL_FUNC (prefs_summary_column_open), - NULL); + g_signal_connect (G_OBJECT (button_dispitem), "clicked", + G_CALLBACK (prefs_summary_column_open), + NULL); display.entry_textfont = entry_textfont; display.button_textfont = button_textfont; @@ -2110,15 +2141,15 @@ static void prefs_message_create(void) PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol, _("Enable coloration of message")); - gtk_signal_connect(GTK_OBJECT(chkbtn_enablecol), "toggled", - GTK_SIGNAL_FUNC(prefs_enable_message_color_toggled), - NULL); + g_signal_connect(G_OBJECT(chkbtn_enablecol), "toggled", + G_CALLBACK(prefs_enable_message_color_toggled), + NULL); button_edit_col = gtk_button_new_with_label (_(" Edit... ")); gtk_widget_show (button_edit_col); gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked", - GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL); + g_signal_connect (G_OBJECT (button_edit_col), "clicked", + G_CALLBACK(prefs_quote_colors_dialog), NULL); SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col); @@ -2143,9 +2174,9 @@ static void prefs_message_create(void) gtk_widget_show (button_edit_disphdr); gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked", - GTK_SIGNAL_FUNC (prefs_display_header_open), - NULL); + g_signal_connect (G_OBJECT (button_edit_disphdr), "clicked", + G_CALLBACK (prefs_display_header_open), + NULL); SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr); @@ -2170,7 +2201,7 @@ static void prefs_message_create(void) gtk_widget_show (spinbtn_linespc); gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc, FALSE, FALSE, 0); - gtk_widget_set_usize (spinbtn_linespc, 64, -1); + gtk_widget_set_size_request (spinbtn_linespc, 64, -1); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE); label_linespc = gtk_label_new (_("pixel(s)")); @@ -2209,7 +2240,7 @@ static void prefs_message_create(void) gtk_widget_show (spinbtn_scrollstep); gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep, FALSE, FALSE, 0); - gtk_widget_set_usize (spinbtn_scrollstep, 64, -1); + gtk_widget_set_size_request (spinbtn_scrollstep, 64, -1); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep), TRUE); @@ -2290,7 +2321,7 @@ static void prefs_privacy_create(void) hbox_spc = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox_spc); gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0); - gtk_widget_set_usize (hbox_spc, 12, -1); + gtk_widget_set_size_request (hbox_spc, 12, -1); label = gtk_label_new (_("Expire after")); gtk_widget_show (label); @@ -2309,7 +2340,7 @@ static void prefs_privacy_create(void) gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_store_passphrase, FALSE, FALSE, 0); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_store_passphrase), TRUE); - gtk_widget_set_usize (spinbtn_store_passphrase, 64, -1); + gtk_widget_set_size_request (spinbtn_store_passphrase, 64, -1); label = gtk_label_new (_("minute(s) ")); gtk_widget_show (label); @@ -2322,7 +2353,7 @@ static void prefs_privacy_create(void) hbox_spc = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox_spc); gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0); - gtk_widget_set_usize (hbox_spc, 12, -1); + gtk_widget_set_size_request (hbox_spc, 12, -1); SET_TOGGLE_SENSITIVITY (checkbtn_store_passphrase, vbox3); @@ -2457,8 +2488,8 @@ static void prefs_interface_create(void) button_keybind = gtk_button_new_with_label (_(" Set key bindings... ")); gtk_widget_show (button_keybind); gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button_keybind), "clicked", - GTK_SIGNAL_FUNC (prefs_keybind_select), NULL); + g_signal_connect (G_OBJECT (button_keybind), "clicked", + G_CALLBACK (prefs_keybind_select), NULL); PACK_FRAME(vbox1, frame_pixmap_theme, _("Icon theme")); @@ -2642,7 +2673,7 @@ static void prefs_other_create(void) loglength_tooltip = gtk_tooltips_new(); loglength_entry = gtk_entry_new (); - gtk_widget_set_usize (GTK_WIDGET (loglength_entry), 64, -1); + gtk_widget_set_size_request (GTK_WIDGET (loglength_entry), 64, -1); gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry, FALSE, TRUE, 0); gtk_widget_show (GTK_WIDGET (loglength_entry)); @@ -2708,7 +2739,7 @@ static void prefs_other_create(void) gtk_widget_show (spinbtn_iotimeout); gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_iotimeout, FALSE, FALSE, 0); - gtk_widget_set_usize (spinbtn_iotimeout, 64, -1); + gtk_widget_set_size_request (spinbtn_iotimeout, 64, -1); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_iotimeout), TRUE); label_iotimeout = gtk_label_new (_("seconds")); @@ -2751,8 +2782,8 @@ static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget) g_return_if_fail(*widget != NULL); g_return_if_fail(display.entry_datefmt != NULL); - datefmt_sample = GTK_WIDGET(gtk_object_get_data - (GTK_OBJECT(*widget), "datefmt_sample")); + datefmt_sample = GTK_WIDGET(g_object_get_data + (G_OBJECT(*widget), "datefmt_sample")); g_return_if_fail(datefmt_sample != NULL); text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1); @@ -2774,11 +2805,12 @@ static void date_format_cancel_btn_clicked(GtkButton *button, *widget = NULL; } -static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event, - GtkWidget **widget) +static gboolean date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event, + GtkWidget **widget) { if (event && event->keyval == GDK_Escape) date_format_cancel_btn_clicked(NULL, widget); + return FALSE; } static gboolean date_format_on_delete(GtkWidget *dialogwidget, @@ -2806,7 +2838,16 @@ static void date_format_entry_on_change(GtkEditable *editable, if (text) strftime(buffer, sizeof buffer, text, cal_time); g_free(text); - gtk_label_set_text(example, buffer); + + text = conv_codeset_strdup(buffer, + conv_get_current_charset_str(), + CS_UTF_8); + if (!text) + text = g_strdup(buffer); + + gtk_label_set_text(example, text); + + g_free(text); } static void date_format_select_row(GtkWidget *date_format_list, gint row, @@ -2815,7 +2856,7 @@ static void date_format_select_row(GtkWidget *date_format_list, gint row, { gint cur_pos; gchar *format; - gchar *old_format; + const gchar *old_format; gchar *new_format; GtkWidget *datefmt_sample; @@ -2917,11 +2958,11 @@ static GtkWidget *date_format_create(GtkButton *button, void *data) if (datefmt_win) return datefmt_win; - datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG); + datefmt_win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8); gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format")); gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER); - gtk_widget_set_usize(datefmt_win, 440, 280); + gtk_widget_set_size_request(datefmt_win, 440, 280); vbox1 = gtk_vbox_new(FALSE, 10); gtk_widget_show(vbox1); @@ -2964,15 +3005,16 @@ static GtkWidget *date_format_create(GtkButton *button, void *data) gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5); - datefmt_entry = gtk_entry_new_with_max_length(256); + datefmt_entry = gtk_entry_new(); + gtk_entry_set_max_length(GTK_ENTRY(datefmt_entry), 256); gtk_widget_show(datefmt_entry); gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1, (GTK_EXPAND | GTK_FILL), 0, 0, 0); /* we need the "sample" entry box; add it as data so callbacks can * get the entry box */ - gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample", - datefmt_entry); + g_object_set_data(G_OBJECT(datefmt_win), "datefmt_sample", + datefmt_entry); label2 = gtk_label_new(_("Example")); gtk_widget_show(label2); @@ -3000,25 +3042,25 @@ static GtkWidget *date_format_create(GtkButton *button, void *data) date_format_entry_on_change(GTK_EDITABLE(datefmt_entry), GTK_LABEL(label3)); - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(date_format_ok_btn_clicked), - &datefmt_win); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked), - &datefmt_win); - gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event", - GTK_SIGNAL_FUNC(date_format_key_pressed), - &datefmt_win); - gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event", - GTK_SIGNAL_FUNC(date_format_on_delete), - &datefmt_win); - gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed", - GTK_SIGNAL_FUNC(date_format_entry_on_change), - label3); - - gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row", - GTK_SIGNAL_FUNC(date_format_select_row), - datefmt_win); + g_signal_connect(G_OBJECT(ok_btn), "clicked", + G_CALLBACK(date_format_ok_btn_clicked), + &datefmt_win); + g_signal_connect(G_OBJECT(cancel_btn), "clicked", + G_CALLBACK(date_format_cancel_btn_clicked), + &datefmt_win); + g_signal_connect(G_OBJECT(datefmt_win), "key_press_event", + G_CALLBACK(date_format_key_pressed), + &datefmt_win); + g_signal_connect(G_OBJECT(datefmt_win), "delete_event", + G_CALLBACK(date_format_on_delete), + &datefmt_win); + g_signal_connect(G_OBJECT(datefmt_entry), "changed", + G_CALLBACK(date_format_entry_on_change), + label3); + + g_signal_connect(G_OBJECT(datefmt_clist), "select_row", + G_CALLBACK(date_format_select_row), + datefmt_win); gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE); @@ -3061,7 +3103,7 @@ static void prefs_quote_colors_dialog_create(void) GtkWidget *recycle_colors_btn; GtkWidget *frame_colors; - window = gtk_window_new(GTK_WINDOW_DIALOG); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER(window), 2); gtk_window_set_title(GTK_WINDOW(window), _("Set message colors")); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); @@ -3083,39 +3125,39 @@ static void prefs_quote_colors_dialog_create(void) color_buttons.quote_level1_btn = gtk_button_new(); gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1, 0, 0, 0, 0); - gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30); + gtk_widget_set_size_request (color_buttons.quote_level1_btn, 40, 30); gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5); color_buttons.quote_level2_btn = gtk_button_new(); gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2, 0, 0, 0, 0); - gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30); + gtk_widget_set_size_request (color_buttons.quote_level2_btn, 40, 30); gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5); color_buttons.quote_level3_btn = gtk_button_new_with_label (""); gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3, 0, 0, 0, 0); - gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30); + gtk_widget_set_size_request (color_buttons.quote_level3_btn, 40, 30); gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5); color_buttons.uri_btn = gtk_button_new_with_label (""); gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4, 0, 0, 0, 0); - gtk_widget_set_usize (color_buttons.uri_btn, 40, 30); + gtk_widget_set_size_request (color_buttons.uri_btn, 40, 30); gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5); color_buttons.tgt_folder_btn = gtk_button_new_with_label (""); gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn, 0, 1, 4, 5, 0, 0, 0, 0); - gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30); + gtk_widget_set_size_request (color_buttons.tgt_folder_btn, 40, 30); gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5); color_buttons.signature_btn = gtk_button_new_with_label (""); gtk_table_attach (GTK_TABLE (table), color_buttons.signature_btn, 0, 1, 5, 6, 0, 0, 0, 0); - gtk_widget_set_usize (color_buttons.signature_btn, 40, 30); + gtk_widget_set_size_request (color_buttons.signature_btn, 40, 30); gtk_container_set_border_width (GTK_CONTAINER (color_buttons.signature_btn), 5); quotelevel1_label = gtk_label_new (_("Quoted Text - First Level")); @@ -3163,28 +3205,28 @@ static void prefs_quote_colors_dialog_create(void) gtk_widget_grab_default(ok_btn); MANAGE_WINDOW_SIGNALS_CONNECT(window); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(gtk_main_quit), NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed), - NULL); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(gtk_main_quit), NULL); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(prefs_quote_colors_key_pressed), + NULL); - gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked", - GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1"); - gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked", - GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2"); - gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked", - GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3"); - gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked", - GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI"); - gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked", - GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD"); - gtk_signal_connect(GTK_OBJECT(color_buttons.signature_btn), "clicked", - GTK_SIGNAL_FUNC(quote_color_set_dialog), "SIGNATURE"); - gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled", - GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL); - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(gtk_main_quit), NULL); + g_signal_connect(G_OBJECT(color_buttons.quote_level1_btn), "clicked", + G_CALLBACK(quote_color_set_dialog), "LEVEL1"); + g_signal_connect(G_OBJECT(color_buttons.quote_level2_btn), "clicked", + G_CALLBACK(quote_color_set_dialog), "LEVEL2"); + g_signal_connect(G_OBJECT(color_buttons.quote_level3_btn), "clicked", + G_CALLBACK(quote_color_set_dialog), "LEVEL3"); + g_signal_connect(G_OBJECT(color_buttons.uri_btn), "clicked", + G_CALLBACK(quote_color_set_dialog), "URI"); + g_signal_connect(G_OBJECT(color_buttons.tgt_folder_btn), "clicked", + G_CALLBACK(quote_color_set_dialog), "TGTFLD"); + g_signal_connect(G_OBJECT(color_buttons.signature_btn), "clicked", + G_CALLBACK(quote_color_set_dialog), "SIGNATURE"); + g_signal_connect(G_OBJECT(recycle_colors_btn), "toggled", + G_CALLBACK(prefs_recycle_colors_toggled), NULL); + g_signal_connect(G_OBJECT(ok_btn), "clicked", + G_CALLBACK(gtk_main_quit), NULL); /* show message button colors and recycle options */ set_button_bg_color(color_buttons.quote_level1_btn, @@ -3206,11 +3248,12 @@ static void prefs_quote_colors_dialog_create(void) quote_color_win = window; } -static void prefs_quote_colors_key_pressed(GtkWidget *widget, - GdkEventKey *event, gpointer data) +static gboolean prefs_quote_colors_key_pressed(GtkWidget *widget, + GdkEventKey *event, gpointer data) { if (event && event->keyval == GDK_Escape) gtk_main_quit(); + return FALSE; } static void quote_color_set_dialog(GtkWidget *widget, gpointer data) @@ -3250,13 +3293,13 @@ static void quote_color_set_dialog(GtkWidget *widget, gpointer data) gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE); manage_window_set_transient(GTK_WINDOW(color_dialog)); - gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button), - "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data); - gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button), - "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data); - gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event", - GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed), - data); + g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button), + "clicked", G_CALLBACK(quote_colors_set_dialog_ok), data); + g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button), + "clicked", G_CALLBACK(quote_colors_set_dialog_cancel), data); + g_signal_connect(G_OBJECT(color_dialog), "key_press_event", + G_CALLBACK(quote_colors_set_dialog_key_pressed), + data); /* preselect the previous color in the color selection dialog */ color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0; @@ -3320,11 +3363,12 @@ static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data) gtk_widget_destroy(color_dialog); } -static void quote_colors_set_dialog_key_pressed(GtkWidget *widget, - GdkEventKey *event, - gpointer data) +static gboolean quote_colors_set_dialog_key_pressed(GtkWidget *widget, + GdkEventKey *event, + gpointer data) { gtk_widget_destroy(color_dialog); + return FALSE; } static void set_button_bg_color(GtkWidget *widget, gint rgbvalue) @@ -3368,29 +3412,30 @@ static void prefs_font_select(GtkButton *button, GtkEntry *entry) if (!font_sel_win) { font_sel_win = gtk_font_selection_dialog_new (_("Font selection")); - gtk_window_position(GTK_WINDOW(font_sel_win), - GTK_WIN_POS_CENTER); - gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event", - GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), - NULL); - gtk_signal_connect - (GTK_OBJECT(font_sel_win), "key_press_event", - GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed), + gtk_window_set_position(GTK_WINDOW(font_sel_win), + GTK_WIN_POS_CENTER); + g_signal_connect(G_OBJECT(font_sel_win), "delete_event", + G_CALLBACK(gtk_widget_hide_on_delete), + NULL); + g_signal_connect + (G_OBJECT(font_sel_win), "key_press_event", + G_CALLBACK(prefs_font_selection_key_pressed), NULL); - gtk_signal_connect_object - (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button), + g_signal_connect_closure + (G_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button), "clicked", - GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), - GTK_OBJECT(font_sel_win)); + g_cclosure_new_swap(G_CALLBACK(gtk_widget_hide_on_delete), + font_sel_win, NULL), + FALSE); } if(font_sel_conn_id) { gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id); } - font_sel_conn_id = gtk_signal_connect - (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), + font_sel_conn_id = g_signal_connect + (G_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), "clicked", - GTK_SIGNAL_FUNC(prefs_font_selection_ok), + G_CALLBACK(prefs_font_selection_ok), entry); printf("%i\n", font_sel_conn_id); @@ -3404,12 +3449,13 @@ static void prefs_font_select(GtkButton *button, GtkEntry *entry) gtk_widget_show(font_sel_win); } -static void prefs_font_selection_key_pressed(GtkWidget *widget, - GdkEventKey *event, - gpointer data) +static gboolean prefs_font_selection_key_pressed(GtkWidget *widget, + GdkEventKey *event, + gpointer data) { if (event && event->keyval == GDK_Escape) gtk_widget_hide(font_sel_win); + return FALSE; } static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry) @@ -3439,7 +3485,7 @@ static void prefs_keybind_select(void) GtkWidget *ok_btn; GtkWidget *cancel_btn; - window = gtk_window_new (GTK_WINDOW_DIALOG); + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (window), 8); gtk_window_set_title (GTK_WINDOW (window), _("Key bindings")); gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER); @@ -3470,7 +3516,7 @@ static void prefs_keybind_select(void) "Mutt", _("Old Sylpheed"), NULL); - gtk_entry_set_editable (GTK_ENTRY (GTK_COMBO (combo)->entry), FALSE); + gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO (combo)->entry), FALSE); hbox1 = gtk_hbox_new (FALSE, 8); gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); @@ -3490,16 +3536,16 @@ static void prefs_keybind_select(void) gtk_widget_grab_default (ok_btn); MANAGE_WINDOW_SIGNALS_CONNECT(window); - gtk_signal_connect (GTK_OBJECT (window), "delete_event", - GTK_SIGNAL_FUNC (prefs_keybind_deleted), NULL); - gtk_signal_connect (GTK_OBJECT (window), "key_press_event", - GTK_SIGNAL_FUNC (prefs_keybind_key_pressed), NULL); - gtk_signal_connect (GTK_OBJECT (ok_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_keybind_apply_clicked), - NULL); - gtk_signal_connect (GTK_OBJECT (cancel_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_keybind_cancel), - NULL); + g_signal_connect (G_OBJECT (window), "delete_event", + G_CALLBACK (prefs_keybind_deleted), NULL); + g_signal_connect (G_OBJECT (window), "key_press_event", + G_CALLBACK (prefs_keybind_key_pressed), NULL); + g_signal_connect (G_OBJECT (ok_btn), "clicked", + G_CALLBACK (prefs_keybind_apply_clicked), + NULL); + g_signal_connect (G_OBJECT (cancel_btn), "clicked", + G_CALLBACK (prefs_keybind_cancel), + NULL); gtk_widget_show_all(window); @@ -3507,11 +3553,12 @@ static void prefs_keybind_select(void) keybind.combo = combo; } -static void prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event, - gpointer data) +static gboolean prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event, + gpointer data) { if (event && event->keyval == GDK_Escape) prefs_keybind_cancel(); + return FALSE; } static gint prefs_keybind_deleted(GtkWidget *widget, GdkEventAny *event, @@ -3527,239 +3574,269 @@ static void prefs_keybind_cancel(void) keybind.window = NULL; keybind.combo = NULL; } + +struct KeyBind { + const gchar *accel_path; + const gchar *accel_key; +}; + +static void prefs_keybind_apply(struct KeyBind keybind[], gint num) +{ + gint i; + guint key; + GdkModifierType mods; + + for (i = 0; i < num; i++) { + const gchar *accel_key + = keybind[i].accel_key ? keybind[i].accel_key : ""; + gtk_accelerator_parse(accel_key, &key, &mods); + gtk_accel_map_change_entry(keybind[i].accel_path, + key, mods, TRUE); + } +} static void prefs_keybind_apply_clicked(GtkWidget *widget) { GtkEntry *entry = GTK_ENTRY(GTK_COMBO(keybind.combo)->entry); - gchar *text; - gchar *rc_str; - - static gchar *default_menurc = - "(menu-path \"
/File/Empty trash\" \"\")\n" - "(menu-path \"
/File/Save as...\" \"S\")\n" - "(menu-path \"
/File/Print...\" \"\")\n" - "(menu-path \"
/File/Exit\" \"Q\")\n" - - "(menu-path \"
/Edit/Copy\" \"C\")\n" - "(menu-path \"
/Edit/Select all\" \"A\")\n" - "(menu-path \"
/Edit/Find in current message...\" \"F\")\n" - "(menu-path \"
/Edit/Search folder...\" \"F\")\n" - - "(menu-path \"
/View/Expand Summary View\" \"V\")\n" - "(menu-path \"
/View/Expand Message View\" \"V\")\n" - "(menu-path \"
/View/Thread view\" \"T\")\n" - "(menu-path \"
/View/Go to/Prev message\" \"P\")\n" - "(menu-path \"
/View/Go to/Next message\" \"N\")\n" - "(menu-path \"
/View/Go to/Prev unread message\" \"P\")\n" - "(menu-path \"
/View/Go to/Next unread message\" \"N\")\n" - "(menu-path \"
/View/Go to/Other folder...\" \"G\")\n" - "(menu-path \"
/View/Open in new window\" \"N\")\n" - "(menu-path \"
/View/View source\" \"U\")\n" - "(menu-path \"
/View/Show all headers\" \"H\")\n" - "(menu-path \"
/View/Update\" \"U\")\n" - - "(menu-path \"
/Message/Get new mail\" \"I\")\n" - "(menu-path \"
/Message/Get from all accounts\" \"I\")\n" - "(menu-path \"
/Message/Compose an email message\" \"M\")\n" - "(menu-path \"
/Message/Reply\" \"R\")\n" - "(menu-path \"
/Message/Reply to/all\" \"R\")\n" - "(menu-path \"
/Message/Reply to/sender\" \"\")\n" - "(menu-path \"
/Message/Reply to/mailing list\" \"L\")\n" - "(menu-path \"
/Message/Forward\" \"F\")\n" - /* "(menu-path \"
/Message/Forward as attachment\" \"\")\n" */ - "(menu-path \"
/Message/Move...\" \"O\")\n" - "(menu-path \"
/Message/Copy...\" \"O\")\n" - "(menu-path \"
/Message/Delete\" \"D\")\n" - "(menu-path \"
/Message/Mark/Mark\" \"asterisk\")\n" - "(menu-path \"
/Message/Mark/Unmark\" \"U\")\n" - "(menu-path \"
/Message/Mark/Mark as unread\" \"exclam\")\n" - "(menu-path \"
/Message/Mark/Mark as read\" \"\")\n" - - "(menu-path \"
/Tools/Address book\" \"A\")\n" - "(menu-path \"
/Tools/Execute\" \"X\")\n" - "(menu-path \"
/Tools/Log window\" \"L\")\n" - - "(menu-path \"/File/Close\" \"W\")\n" - "(menu-path \"/Edit/Select all\" \"A\")\n" - "(menu-path \"/Edit/Advanced/Move a word backward\" \"\")\n" - "(menu-path \"/Edit/Advanced/Move a word forward\" \"\")\n" - "(menu-path \"/Edit/Advanced/Move to beginning of line\" \"\")\n" - "(menu-path \"/Edit/Advanced/Delete a word backward\" \"\")\n" - "(menu-path \"/Edit/Advanced/Delete a word forward\" \"\")"; - - static gchar *mew_wl_menurc = - "(menu-path \"
/File/Empty trash\" \"D\")\n" - "(menu-path \"
/File/Save as...\" \"Y\")\n" - "(menu-path \"
/File/Print...\" \"numbersign\")\n" - "(menu-path \"
/File/Exit\" \"Q\")\n" - - "(menu-path \"
/Edit/Copy\" \"C\")\n" - "(menu-path \"
/Edit/Select all\" \"A\")\n" - "(menu-path \"
/Edit/Find in current message...\" \"F\")\n" - "(menu-path \"
/Edit/Search folder...\" \"S\")\n" - - "(menu-path \"
/View/Expand Summary View\" \"\")\n" - "(menu-path \"
/View/Expand Message View\" \"\")\n" - "(menu-path \"
/View/Thread view\" \"T\")\n" - "(menu-path \"
/View/Go to/Prev message\" \"P\")\n" - "(menu-path \"
/View/Go to/Next message\" \"N\")\n" - "(menu-path \"
/View/Go to/Prev unread message\" \"P\")\n" - "(menu-path \"
/View/Go to/Next unread message\" \"N\")\n" - "(menu-path \"
/View/Go to/Other folder...\" \"G\")\n" - "(menu-path \"
/View/Open in new window\" \"N\")\n" - "(menu-path \"
/View/View source\" \"U\")\n" - "(menu-path \"
/View/Show all headers\" \"H\")\n" - "(menu-path \"
/View/Update\" \"S\")\n" - - "(menu-path \"
/Message/Get new mail\" \"I\")\n" - "(menu-path \"
/Message/Get from all accounts\" \"I\")\n" - "(menu-path \"
/Message/Compose an email message\" \"W\")\n" - "(menu-path \"
/Message/Reply\" \"R\")\n" - "(menu-path \"
/Message/Reply to/all\" \"A\")\n" - "(menu-path \"
/Message/Reply to/sender\" \"\")\n" - "(menu-path \"
/Message/Reply to/mailing list\" \"L\")\n" - "(menu-path \"
/Message/Forward\" \"F\")\n" - /* "(menu-path \"
/Message/Forward as attachment\" \"F\")\n" */ - "(menu-path \"
/Message/Move...\" \"O\")\n" - "(menu-path \"
/Message/Copy...\" \"O\")\n" - "(menu-path \"
/Message/Delete\" \"D\")\n" - "(menu-path \"
/Message/Mark/Mark\" \"asterisk\")\n" - "(menu-path \"
/Message/Mark/Unmark\" \"U\")\n" - "(menu-path \"
/Message/Mark/Mark as unread\" \"exclam\")\n" - "(menu-path \"
/Message/Mark/Mark as read\" \"R\")\n" - - "(menu-path \"
/Tools/Address book\" \"A\")\n" - "(menu-path \"
/Tools/Execute\" \"X\")\n" - "(menu-path \"
/Tools/Log window\" \"L\")\n" - - "(menu-path \"/File/Close\" \"W\")\n" - "(menu-path \"/Edit/Select all\" \"\")\n" - "(menu-path \"/Edit/Advanced/Move a word backward\" \"B\")\n" - "(menu-path \"/Edit/Advanced/Move a word forward\" \"F\")\n" - "(menu-path \"/Edit/Advanced/Move to beginning of line\" \"A\")\n" - "(menu-path \"/Edit/Advanced/Delete a word backward\" \"W\")\n" - "(menu-path \"/Edit/Advanced/Delete a word forward\" \"D\")"; - - static gchar *mutt_menurc = - "(menu-path \"
/File/Empty trash\" \"\")\n" - "(menu-path \"
/File/Save as...\" \"S\")\n" - "(menu-path \"
/File/Print...\" \"P\")\n" - "(menu-path \"
/File/Exit\" \"Q\")\n" - - "(menu-path \"
/Edit/Copy\" \"C\")\n" - "(menu-path \"
/Edit/Select all\" \"A\")\n" - "(menu-path \"
/Edit/Find in current message...\" \"F\")\n" - "(menu-path \"
/Edit/Search messages...\" \"slash\")\n" - - "(menu-path \"
/View/Toggle summary view\" \"V\")\n" - "(menu-path \"
/View/Thread view\" \"T\")\n" - "(menu-path \"
/View/Go to/Prev message\" \"\")\n" - "(menu-path \"
/View/Go to/Next message\" \"\")\n" - "(menu-path \"
/View/Go to/Prev unread message\" \"\")\n" - "(menu-path \"
/View/Go to/Next unread message\" \"\")\n" - "(menu-path \"
/View/Go to/Other folder...\" \"C\")\n" - "(menu-path \"
/View/Open in new window\" \"N\")\n" - "(menu-path \"
/View/View source\" \"U\")\n" - "(menu-path \"
/View/Show all headers\" \"H\")\n" - "(menu-path \"
/View/Update\" \"U\")\n" - - "(menu-path \"
/Message/Get new mail\" \"I\")\n" - "(menu-path \"
/Message/Get from all accounts\" \"I\")\n" - "(menu-path \"
/Message/Compose new message\" \"M\")\n" - "(menu-path \"
/Message/Reply\" \"R\")\n" - "(menu-path \"
/Message/Reply to/all\" \"G\")\n" - "(menu-path \"
/Message/Reply to/sender\" \"\")\n" - "(menu-path \"
/Message/Reply to/mailing list\" \"L\")\n" - "(menu-path \"
/Message/Forward\" \"F\")\n" - "(menu-path \"
/Message/Forward as attachment\" \"\")\n" - "(menu-path \"
/Message/Move...\" \"O\")\n" - "(menu-path \"
/Message/Copy...\" \"C\")\n" - "(menu-path \"
/Message/Delete\" \"D\")\n" - "(menu-path \"
/Message/Mark/Mark\" \"F\")\n" - "(menu-path \"
/Message/Mark/Unmark\" \"U\")\n" - "(menu-path \"
/Message/Mark/Mark as unread\" \"N\")\n" - "(menu-path \"
/Message/Mark/Mark as read\" \"\")\n" - - "(menu-path \"
/Tools/Address book\" \"A\")\n" - "(menu-path \"
/Tools/Execute\" \"X\")\n" - "(menu-path \"
/Tools/Log window\" \"L\")\n" - - "(menu-path \"/File/Close\" \"W\")\n" - "(menu-path \"/Edit/Select all\" \"\")\n" - "(menu-path \"/Edit/Advanced/Move a word backward\" \"B\")\n" - "(menu-path \"/Edit/Advanced/Move a word forward\" \"F\")\n" - "(menu-path \"/Edit/Advanced/Move to beginning of line\" \"A\")\n" - "(menu-path \"/Edit/Advanced/Delete a word backward\" \"W\")\n" - "(menu-path \"/Edit/Advanced/Delete a word forward\" \"D\")"; - - static gchar *old_sylpheed_menurc = - "(menu-path \"
/File/Empty trash\" \"\")\n" - "(menu-path \"
/File/Save as...\" \"\")\n" - "(menu-path \"
/File/Print...\" \"P\")\n" - "(menu-path \"
/File/Exit\" \"Q\")\n" - - "(menu-path \"
/Edit/Copy\" \"C\")\n" - "(menu-path \"
/Edit/Select all\" \"A\")\n" - "(menu-path \"
/Edit/Find in current message...\" \"F\")\n" - "(menu-path \"
/Edit/Search folder...\" \"S\")\n" - - "(menu-path \"
/View/Expand Summary View\" \"\")\n" - "(menu-path \"
/View/Expand Message View\" \"\")\n" - "(menu-path \"
/View/Thread view\" \"T\")\n" - "(menu-path \"
/View/Go to/Prev message\" \"P\")\n" - "(menu-path \"
/View/Go to/Next message\" \"N\")\n" - "(menu-path \"
/View/Go to/Prev unread message\" \"P\")\n" - "(menu-path \"
/View/Go to/Next unread message\" \"N\")\n" - "(menu-path \"
/View/Go to/Other folder...\" \"G\")\n" - "(menu-path \"
/View/Open in new window\" \"N\")\n" - "(menu-path \"
/View/View source\" \"U\")\n" - "(menu-path \"
/View/Show all headers\" \"H\")\n" - "(menu-path \"
/View/Update\" \"U\")\n" - - "(menu-path \"
/Message/Get new mail\" \"I\")\n" - "(menu-path \"
/Message/Get from all accounts\" \"I\")\n" - "(menu-path \"
/Message/Compose an email message\" \"N\")\n" - "(menu-path \"
/Message/Reply\" \"R\")\n" - "(menu-path \"
/Message/Reply to/all\" \"R\")\n" - "(menu-path \"
/Message/Reply to/sender\" \"R\")\n" - "(menu-path \"
/Message/Reply to/mailing list\" \"L\")\n" - "(menu-path \"
/Message/Forward\" \"F\")\n" - /* "(menu-path \"
/Message/Forward as attachment\" \"F\")\n" */ - "(menu-path \"
/Message/Move...\" \"O\")\n" - "(menu-path \"
/Message/Copy...\" \"\")\n" - "(menu-path \"
/Message/Delete\" \"D\")\n" - "(menu-path \"
/Message/Mark/Mark\" \"asterisk\")\n" - "(menu-path \"
/Message/Mark/Unmark\" \"U\")\n" - "(menu-path \"
/Message/Mark/Mark as unread\" \"exclam\")\n" - "(menu-path \"
/Message/Mark/Mark as read\" \"\")\n" - - "(menu-path \"
/Tools/Address book\" \"A\")\n" - "(menu-path \"
/Tools/Execute\" \"X\")\n" - "(menu-path \"
/Tools/Log window\" \"L\")\n" - - "(menu-path \"/File/Close\" \"W\")\n" - "(menu-path \"/Edit/Select all\" \"\")\n" - "(menu-path \"/Edit/Advanced/Move a word backward\" \"B\")\n" - "(menu-path \"/Edit/Advanced/Move a word forward\" \"F\")\n" - "(menu-path \"/Edit/Advanced/Move to beginning of line\" \"A\")\n" - "(menu-path \"/Edit/Advanced/Delete a word backward\" \"W\")\n" - "(menu-path \"/Edit/Advanced/Delete a word forward\" \"D\")"; + const gchar *text; + struct KeyBind *menurc; + gint n_menurc; + + static struct KeyBind default_menurc[] = { + {"
/File/Empty trash", ""}, + {"
/File/Save as...", "S"}, + {"
/File/Print...", ""}, + {"
/File/Exit", "Q"}, + + {"
/Edit/Copy", "C"}, + {"
/Edit/Select all", "A"}, + {"
/Edit/Find in current message...", "F"}, + {"
/Edit/Search folder...", "F"}, + + {"
/View/Expand Summary View", "V"}, + {"
/View/Expand Message View", "V"}, + {"
/View/Thread view", "T"}, + {"
/View/Go to/Prev message", "P"}, + {"
/View/Go to/Next message", "N"}, + {"
/View/Go to/Prev unread message", "P"}, + {"
/View/Go to/Next unread message", "N"}, + {"
/View/Go to/Other folder...", "G"}, + {"
/View/Open in new window", "N"}, + {"
/View/View source", "U"}, + {"
/View/Show all headers", "H"}, + {"
/View/Update", "U"}, + + {"
/Message/Get new mail", "I"}, + {"
/Message/Get from all accounts", "I"}, + {"
/Message/Compose an email message", "M"}, + {"
/Message/Reply", "R"}, + {"
/Message/Reply to/all", "R"}, + {"
/Message/Reply to/sender", ""}, + {"
/Message/Reply to/mailing list", "L"}, + {"
/Message/Forward", "F"}, + /* {"
/Message/Forward as attachment", ""}, */ + {"
/Message/Move...", "O"}, + {"
/Message/Copy...", "O"}, + {"
/Message/Delete", "D"}, + {"
/Message/Mark/Mark", "asterisk"}, + {"
/Message/Mark/Unmark", "U"}, + {"
/Message/Mark/Mark as unread", "exclam"}, + {"
/Message/Mark/Mark as read", ""}, + + {"
/Tools/Address book", "A"}, + {"
/Tools/Execute", "X"}, + {"
/Tools/Log window", "L"}, + + {"/File/Close", "W"}, + {"/Edit/Select all", "A"}, + {"/Edit/Advanced/Move a word backward", ""}, + {"/Edit/Advanced/Move a word forward", ""}, + {"/Edit/Advanced/Move to beginning of line", ""}, + {"/Edit/Advanced/Delete a word backward", ""}, + {"/Edit/Advanced/Delete a word forward", ""}, + }; - text = gtk_entry_get_text(entry); + static struct KeyBind mew_wl_menurc[] = { + {"
/File/Empty trash", "D"}, + {"
/File/Save as...", "Y"}, + {"
/File/Print...", "numbersign"}, + {"
/File/Exit", "Q"}, + + {"
/Edit/Copy", "C"}, + {"
/Edit/Select all", "A"}, + {"
/Edit/Find in current message...", "F"}, + {"
/Edit/Search folder...", "S"}, + + {"
/View/Expand Summary View", ""}, + {"
/View/Expand Message View", ""}, + {"
/View/Thread view", "T"}, + {"
/View/Go to/Prev message", "P"}, + {"
/View/Go to/Next message", "N"}, + {"
/View/Go to/Prev unread message", "P"}, + {"
/View/Go to/Next unread message", "N"}, + {"
/View/Go to/Other folder...", "G"}, + {"
/View/Open in new window", "N"}, + {"
/View/View source", "U"}, + {"
/View/Show all headers", "H"}, + {"
/View/Update", "S"}, + + {"
/Message/Get new mail", "I"}, + {"
/Message/Get from all accounts", "I"}, + {"
/Message/Compose an email message", "W"}, + {"
/Message/Reply", "R"}, + {"
/Message/Reply to/all", "A"}, + {"
/Message/Reply to/sender", ""}, + {"
/Message/Reply to/mailing list", "L"}, + {"
/Message/Forward", "F"}, + /* {"
/Message/Forward as attachment", "F"}, */ + {"
/Message/Move...", "O"}, + {"
/Message/Copy...", "O"}, + {"
/Message/Delete", "D"}, + {"
/Message/Mark/Mark", "asterisk"}, + {"
/Message/Mark/Unmark", "U"}, + {"
/Message/Mark/Mark as unread", "exclam"}, + {"
/Message/Mark/Mark as read", "R"}, + + {"
/Tools/Address book", "A"}, + {"
/Tools/Execute", "X"}, + {"
/Tools/Log window", "L"}, + + {"/File/Close", "W"}, + {"/Edit/Select all", ""}, + {"/Edit/Advanced/Move a word backward," "B"}, + {"/Edit/Advanced/Move a word forward", "F"}, + {"/Edit/Advanced/Move to beginning of line", "A"}, + {"/Edit/Advanced/Delete a word backward", "W"}, + {"/Edit/Advanced/Delete a word forward", "D"}, + }; - if (!strcmp(text, _("Default"))) - rc_str = default_menurc; - else if (!strcmp(text, "Mew / Wanderlust")) - rc_str = mew_wl_menurc; - else if (!strcmp(text, "Mutt")) - rc_str = mutt_menurc; - else if (!strcmp(text, _("Old Sylpheed"))) - rc_str = old_sylpheed_menurc; - else + static struct KeyBind mutt_menurc[] = { + {"
/File/Empty trash", ""}, + {"
/File/Save as...", "S"}, + {"
/File/Print...", "P"}, + {"
/File/Exit", "Q"}, + + {"
/Edit/Copy", "C"}, + {"
/Edit/Select all", "A"}, + {"
/Edit/Find in current message...", "F"}, + {"
/Edit/Search messages...", "slash"}, + + {"
/View/Toggle summary view", "V"}, + {"
/View/Thread view", "T"}, + {"
/View/Go to/Prev message", ""}, + {"
/View/Go to/Next message", ""}, + {"
/View/Go to/Prev unread message", ""}, + {"
/View/Go to/Next unread message", ""}, + {"
/View/Go to/Other folder...", "C"}, + {"
/View/Open in new window", "N"}, + {"
/View/View source", "U"}, + {"
/View/Show all headers", "H"}, + {"
/View/Update", "U"}, + + {"
/Message/Get new mail", "I"}, + {"
/Message/Get from all accounts", "I"}, + {"
/Message/Compose new message", "M"}, + {"
/Message/Reply", "R"}, + {"
/Message/Reply to/all", "G"}, + {"
/Message/Reply to/sender", ""}, + {"
/Message/Reply to/mailing list", "L"}, + {"
/Message/Forward", "F"}, + {"
/Message/Forward as attachment", ""}, + {"
/Message/Move...", "O"}, + {"
/Message/Copy...", "C"}, + {"
/Message/Delete", "D"}, + {"
/Message/Mark/Mark", "F"}, + {"
/Message/Mark/Unmark", "U"}, + {"
/Message/Mark/Mark as unread", "N"}, + {"
/Message/Mark/Mark as read", ""}, + + {"
/Tools/Address book", "A"}, + {"
/Tools/Execute", "X"}, + {"
/Tools/Log window", "L"}, + + {"/File/Close", "W"}, + {"/Edit/Select all", ""}, + {"/Edit/Advanced/Move a word backward", "B"}, + {"/Edit/Advanced/Move a word forward", "F"}, + {"/Edit/Advanced/Move to beginning of line", "A"}, + {"/Edit/Advanced/Delete a word backward", "W"}, + {"/Edit/Advanced/Delete a word forward", "D"}, + }; + + static struct KeyBind old_sylpheed_menurc[] = { + {"
/File/Empty trash", ""}, + {"
/File/Save as...", ""}, + {"
/File/Print...", "P"}, + {"
/File/Exit", "Q"}, + + {"
/Edit/Copy", "C"}, + {"
/Edit/Select all", "A"}, + {"
/Edit/Find in current message...", "F"}, + {"
/Edit/Search folder...", "S"}, + + {"
/View/Expand Summary View", ""}, + {"
/View/Expand Message View", ""}, + {"
/View/Thread view", "T"}, + {"
/View/Go to/Prev message", "P"}, + {"
/View/Go to/Next message", "N"}, + {"
/View/Go to/Prev unread message", "P"}, + {"
/View/Go to/Next unread message", "N"}, + {"
/View/Go to/Other folder...", "G"}, + {"
/View/Open in new window", "N"}, + {"
/View/View source", "U"}, + {"
/View/Show all headers", "H"}, + {"
/View/Update", "U"}, + + {"
/Message/Get new mail", "I"}, + {"
/Message/Get from all accounts", "I"}, + {"
/Message/Compose an email message", "N"}, + {"
/Message/Reply", "R"}, + {"
/Message/Reply to/all", "R"}, + {"
/Message/Reply to/sender", "R"}, + {"
/Message/Reply to/mailing list", "L"}, + {"
/Message/Forward", "F"}, + /* "(menu-path \"
/Message/Forward as attachment", "F"}, */ + {"
/Message/Move...", "O"}, + {"
/Message/Copy...", ""}, + {"
/Message/Delete", "D"}, + {"
/Message/Mark/Mark", "asterisk"}, + {"
/Message/Mark/Unmark", "U"}, + {"
/Message/Mark/Mark as unread", "exclam"}, + {"
/Message/Mark/Mark as read", ""}, + + {"
/Tools/Address book", "A"}, + {"
/Tools/Execute", "X"}, + {"
/Tools/Log window", "L"}, + + {"/File/Close", "W"}, + {"/Edit/Select all", ""}, + {"/Edit/Advanced/Move a word backward", "B"}, + {"/Edit/Advanced/Move a word forward", "F"}, + {"/Edit/Advanced/Move to beginning of line", "A"}, + {"/Edit/Advanced/Delete a word backward", "W"}, + {"/Edit/Advanced/Delete a word forward", "D"}, + }; + + text = gtk_entry_get_text(entry); + + if (!strcmp(text, _("Default"))) { + menurc = default_menurc; + n_menurc = G_N_ELEMENTS(default_menurc); + } else if (!strcmp(text, "Mew / Wanderlust")) { + menurc = mew_wl_menurc; + n_menurc = G_N_ELEMENTS(mew_wl_menurc); + } else if (!strcmp(text, "Mutt")) { + menurc = mutt_menurc; + n_menurc = G_N_ELEMENTS(mutt_menurc); + } else if (!strcmp(text, _("Old Sylpheed"))) { + menurc = old_sylpheed_menurc; + n_menurc = G_N_ELEMENTS(old_sylpheed_menurc); + } else { return; + } - menu_factory_clear_rc(rc_str); - gtk_item_factory_parse_rc_string(rc_str); + /* prefs_keybind_apply(empty_menurc, G_N_ELEMENTS(empty_menurc)); */ + prefs_keybind_apply(menurc, n_menurc); gtk_widget_destroy(keybind.window); keybind.window = NULL; @@ -3774,7 +3851,7 @@ static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam) menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget)); menuitem = gtk_menu_get_active(GTK_MENU(menu)); - charset = gtk_object_get_user_data(GTK_OBJECT(menuitem)); + charset = g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID); g_free(*((gchar **)pparam->data)); *((gchar **)pparam->data) = g_strdup(charset); } @@ -3805,7 +3882,7 @@ static void prefs_common_encoding_set_data_from_optmenu(PrefParam *pparam) menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget)); menuitem = gtk_menu_get_active(GTK_MENU(menu)); *((TransferEncodingMethod *)pparam->data) = GPOINTER_TO_INT - (gtk_object_get_user_data(GTK_OBJECT(menuitem))); + (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID)); } static void prefs_common_encoding_set_optmenu(PrefParam *pparam) @@ -3835,7 +3912,7 @@ static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam) menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget)); menuitem = gtk_menu_get_active(GTK_MENU(menu)); *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT - (gtk_object_get_user_data(GTK_OBJECT(menuitem))); + (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID)); } static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam) @@ -3901,11 +3978,12 @@ static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event, return TRUE; } -static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event, - gpointer data) +static gboolean prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event, + gpointer data) { if (event && event->keyval == GDK_Escape) prefs_common_cancel(); + return FALSE; } static void prefs_common_ok(void) @@ -3918,7 +3996,7 @@ static void prefs_common_ok(void) static void prefs_common_apply(void) { - gchar *entry_pixmap_theme_str; + const gchar *entry_pixmap_theme_str; gboolean update_pixmap_theme; gchar *backup_theme_path; diff --git a/src/prefs_common.h b/src/prefs_common.h index 4fcf29585..c968a48a8 100644 --- a/src/prefs_common.h +++ b/src/prefs_common.h @@ -125,11 +125,20 @@ struct _PrefsCommon #endif /* Display */ + /* obsolete fonts */ + gchar *widgetfont_gtk1; + gchar *textfont_gtk1; + gchar *normalfont_gtk1; + gchar *boldfont_gtk1; + gchar *smallfont_gtk1; + + /* new fonts */ gchar *widgetfont; gchar *textfont; gchar *normalfont; gchar *boldfont; gchar *smallfont; + gchar *titlefont; gboolean trans_hdr; gboolean display_folder_unread; diff --git a/src/prefs_customheader.c b/src/prefs_customheader.c index 4c92f0589..050cd0715 100644 --- a/src/prefs_customheader.c +++ b/src/prefs_customheader.c @@ -81,7 +81,7 @@ static void prefs_custom_header_row_moved (GtkCList *clist, gint dest_row, gpointer data); -static void prefs_custom_header_key_pressed (GtkWidget *widget, +static gboolean prefs_custom_header_key_pressed (GtkWidget *widget, GdkEventKey *event, gpointer data); static void prefs_custom_header_ok (void); @@ -144,9 +144,9 @@ static void prefs_custom_header_create(void) debug_print("Creating custom header setting window...\n"); - window = gtk_window_new (GTK_WINDOW_DIALOG); + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (window), 8); - gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER); + gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (window), TRUE); gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, FALSE); @@ -162,16 +162,16 @@ static void prefs_custom_header_create(void) gtk_window_set_title (GTK_WINDOW(window), _("Custom header configuration")); MANAGE_WINDOW_SIGNALS_CONNECT (window); - gtk_signal_connect (GTK_OBJECT(window), "delete_event", + g_signal_connect (G_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(prefs_custom_header_deleted), NULL); - gtk_signal_connect (GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(prefs_custom_header_key_pressed), - NULL); - gtk_signal_connect (GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_custom_header_ok), NULL); - gtk_signal_connect (GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_custom_header_cancel), NULL); + g_signal_connect (G_OBJECT(window), "key_press_event", + G_CALLBACK(prefs_custom_header_key_pressed), + NULL); + g_signal_connect (G_OBJECT(ok_btn), "clicked", + G_CALLBACK(prefs_custom_header_ok), NULL); + g_signal_connect (G_OBJECT(cancel_btn), "clicked", + G_CALLBACK(prefs_custom_header_cancel), NULL); vbox1 = gtk_vbox_new (FALSE, VSPACING); gtk_widget_show (vbox1); @@ -197,7 +197,7 @@ static void prefs_custom_header_create(void) gtk_table_attach (GTK_TABLE (table1), hdr_combo, 0, 1, 1, 2, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0, 0); - gtk_widget_set_usize (hdr_combo, 150, -1); + gtk_widget_set_size_request (hdr_combo, 150, -1); gtkut_combo_set_items (GTK_COMBO (hdr_combo), "User-Agent", "X-Face", "X-Operating-System", NULL); @@ -214,7 +214,7 @@ static void prefs_custom_header_create(void) gtk_table_attach (GTK_TABLE (table1), val_entry, 1, 2, 1, 2, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0, 0); - gtk_widget_set_usize (val_entry, 200, -1); + gtk_widget_set_size_request (val_entry, 200, -1); /* add / delete */ @@ -225,7 +225,7 @@ static void prefs_custom_header_create(void) arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_OUT); gtk_widget_show (arrow); gtk_box_pack_start (GTK_BOX (reg_hbox), arrow, FALSE, FALSE, 0); - gtk_widget_set_usize (arrow, -1, 16); + gtk_widget_set_size_request (arrow, -1, 16); btn_hbox = gtk_hbox_new (TRUE, 4); gtk_widget_show (btn_hbox); @@ -234,16 +234,16 @@ static void prefs_custom_header_create(void) add_btn = gtk_button_new_with_label (_("Add")); gtk_widget_show (add_btn); gtk_box_pack_start (GTK_BOX (btn_hbox), add_btn, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (add_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_custom_header_add_cb), - NULL); + g_signal_connect (G_OBJECT (add_btn), "clicked", + G_CALLBACK (prefs_custom_header_add_cb), + NULL); del_btn = gtk_button_new_with_label (_(" Delete ")); gtk_widget_show (del_btn); gtk_box_pack_start (GTK_BOX (btn_hbox), del_btn, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (del_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_custom_header_delete_cb), - NULL); + g_signal_connect (G_OBJECT (del_btn), "clicked", + G_CALLBACK (prefs_custom_header_delete_cb), + NULL); ch_hbox = gtk_hbox_new (FALSE, 8); @@ -251,7 +251,7 @@ static void prefs_custom_header_create(void) gtk_box_pack_start (GTK_BOX (vbox1), ch_hbox, TRUE, TRUE, 0); ch_scrolledwin = gtk_scrolled_window_new (NULL, NULL); - gtk_widget_set_usize (ch_scrolledwin, -1, 200); + gtk_widget_set_size_request (ch_scrolledwin, -1, 200); gtk_widget_show (ch_scrolledwin); gtk_box_pack_start (GTK_BOX (ch_hbox), ch_scrolledwin, TRUE, TRUE, 0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (ch_scrolledwin), @@ -269,12 +269,12 @@ static void prefs_custom_header_create(void) gtk_clist_set_use_drag_icons (GTK_CLIST (customhdr_clist), FALSE); GTK_WIDGET_UNSET_FLAGS (GTK_CLIST (customhdr_clist)->column[0].button, GTK_CAN_FOCUS); - gtk_signal_connect (GTK_OBJECT (customhdr_clist), "select_row", - GTK_SIGNAL_FUNC (prefs_custom_header_select), - NULL); - gtk_signal_connect_after - (GTK_OBJECT (customhdr_clist), "row_move", - GTK_SIGNAL_FUNC (prefs_custom_header_row_moved), NULL); + g_signal_connect (G_OBJECT (customhdr_clist), "select_row", + G_CALLBACK (prefs_custom_header_select), + NULL); + g_signal_connect_after + (G_OBJECT (customhdr_clist), "row_move", + G_CALLBACK (prefs_custom_header_row_moved), NULL); btn_vbox = gtk_vbox_new (FALSE, 8); gtk_widget_show (btn_vbox); @@ -283,14 +283,14 @@ static void prefs_custom_header_create(void) up_btn = gtk_button_new_with_label (_("Up")); gtk_widget_show (up_btn); gtk_box_pack_start (GTK_BOX (btn_vbox), up_btn, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (up_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_custom_header_up), NULL); + g_signal_connect (G_OBJECT (up_btn), "clicked", + G_CALLBACK (prefs_custom_header_up), NULL); down_btn = gtk_button_new_with_label (_("Down")); gtk_widget_show (down_btn); gtk_box_pack_start (GTK_BOX (btn_vbox), down_btn, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (down_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_custom_header_down), NULL); + g_signal_connect (G_OBJECT (down_btn), "clicked", + G_CALLBACK (prefs_custom_header_down), NULL); gtk_widget_show_all(window); @@ -475,7 +475,7 @@ static gint prefs_custom_header_clist_set_row(PrefsAccount *ac, gint row) { GtkCList *clist = GTK_CLIST(customhdr.customhdr_clist); CustomHeader *ch; - gchar *entry_text; + const gchar *entry_text; gchar *ch_str[1]; entry_text = gtk_entry_get_text(GTK_ENTRY(customhdr.hdr_entry)); @@ -597,12 +597,13 @@ static void prefs_custom_header_row_moved(GtkCList *clist, gint source_row, prefs_custom_header_set_list(cur_ac); } -static void prefs_custom_header_key_pressed(GtkWidget *widget, - GdkEventKey *event, - gpointer data) +static gboolean prefs_custom_header_key_pressed(GtkWidget *widget, + GdkEventKey *event, + gpointer data) { if (event && event->keyval == GDK_Escape) prefs_custom_header_cancel(); + return FALSE; } static void prefs_custom_header_ok(void) diff --git a/src/prefs_display_header.c b/src/prefs_display_header.c index f9c18493f..d3b364491 100644 --- a/src/prefs_display_header.c +++ b/src/prefs_display_header.c @@ -76,9 +76,9 @@ static void prefs_display_header_row_moved (GtkCList *clist, gint dest_row, gpointer data); -static void prefs_display_header_key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer data); +static gboolean prefs_display_header_key_pressed (GtkWidget *widget, + GdkEventKey *event, + gpointer data); static void prefs_display_header_ok (void); static void prefs_display_header_cancel (void); static gint prefs_display_header_deleted (GtkWidget *widget, @@ -177,9 +177,9 @@ static void prefs_display_header_create(void) debug_print("Creating display header setting window...\n"); - window = gtk_window_new (GTK_WINDOW_DIALOG); + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (window), 8); - gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER); + gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (window), TRUE); gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, FALSE); @@ -200,18 +200,18 @@ static void prefs_display_header_create(void) gtk_window_set_title (GTK_WINDOW(window), _("Displayed header configuration")); MANAGE_WINDOW_SIGNALS_CONNECT(window); - gtk_signal_connect (GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(prefs_display_header_deleted), - NULL); - gtk_signal_connect (GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(prefs_display_header_key_pressed), - NULL); - gtk_signal_connect (GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_display_header_ok), - NULL); - gtk_signal_connect (GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_display_header_cancel), - NULL); + g_signal_connect (G_OBJECT(window), "delete_event", + G_CALLBACK(prefs_display_header_deleted), + NULL); + g_signal_connect (G_OBJECT(window), "key_press_event", + G_CALLBACK(prefs_display_header_key_pressed), + NULL); + g_signal_connect (G_OBJECT(ok_btn), "clicked", + G_CALLBACK(prefs_display_header_ok), + NULL); + g_signal_connect (G_OBJECT(cancel_btn), "clicked", + G_CALLBACK(prefs_display_header_cancel), + NULL); vbox1 = gtk_vbox_new (FALSE, VSPACING); gtk_widget_show (vbox1); @@ -229,7 +229,7 @@ static void prefs_display_header_create(void) hdr_combo = gtk_combo_new (); gtk_widget_show (hdr_combo); gtk_box_pack_start (GTK_BOX (hbox1), hdr_combo, TRUE, TRUE, 0); - gtk_widget_set_usize (hdr_combo, 150, -1); + gtk_widget_set_size_request (hdr_combo, 150, -1); gtkut_combo_set_items (GTK_COMBO (hdr_combo), "From", "To", "Cc", "Subject", "Date", "Reply-To", "Sender", "User-Agent", "X-Mailer", @@ -246,7 +246,7 @@ static void prefs_display_header_create(void) gtk_box_pack_start (GTK_BOX (clist_hbox), clist_hbox1, TRUE, TRUE, 0); clist_scrolledwin = gtk_scrolled_window_new (NULL, NULL); - gtk_widget_set_usize (clist_scrolledwin, 200, 210); + gtk_widget_set_size_request (clist_scrolledwin, 200, 210); gtk_widget_show (clist_scrolledwin); gtk_box_pack_start (GTK_BOX (clist_hbox1), clist_scrolledwin, TRUE, TRUE, 0); @@ -264,9 +264,9 @@ static void prefs_display_header_create(void) gtk_clist_set_use_drag_icons (GTK_CLIST (headers_clist), FALSE); GTK_WIDGET_UNSET_FLAGS (GTK_CLIST (headers_clist)->column[0].button, GTK_CAN_FOCUS); - gtk_signal_connect_after - (GTK_OBJECT (headers_clist), "row_move", - GTK_SIGNAL_FUNC (prefs_display_header_row_moved), NULL); + g_signal_connect_after + (G_OBJECT (headers_clist), "row_move", + G_CALLBACK (prefs_display_header_row_moved), NULL); btn_vbox = gtk_vbox_new (FALSE, 8); gtk_widget_show (btn_vbox); @@ -275,27 +275,27 @@ static void prefs_display_header_create(void) reg_btn = gtk_button_new_with_label (_("Add")); gtk_widget_show (reg_btn); gtk_box_pack_start (GTK_BOX (btn_vbox), reg_btn, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (reg_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_display_header_register_cb), - FALSE); + g_signal_connect (G_OBJECT (reg_btn), "clicked", + G_CALLBACK (prefs_display_header_register_cb), + FALSE); del_btn = gtk_button_new_with_label (_("Delete")); gtk_widget_show (del_btn); gtk_box_pack_start (GTK_BOX (btn_vbox), del_btn, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (del_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_display_header_delete_cb), - headers_clist); + g_signal_connect (G_OBJECT (del_btn), "clicked", + G_CALLBACK (prefs_display_header_delete_cb), + headers_clist); up_btn = gtk_button_new_with_label (_("Up")); gtk_widget_show (up_btn); gtk_box_pack_start (GTK_BOX (btn_vbox), up_btn, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (up_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_display_header_up), NULL); + g_signal_connect (G_OBJECT (up_btn), "clicked", + G_CALLBACK (prefs_display_header_up), NULL); down_btn = gtk_button_new_with_label (_("Down")); gtk_widget_show (down_btn); gtk_box_pack_start (GTK_BOX (btn_vbox), down_btn, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (down_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_display_header_down), NULL); + g_signal_connect (G_OBJECT (down_btn), "clicked", + G_CALLBACK (prefs_display_header_down), NULL); /* hidden headers list */ @@ -304,7 +304,7 @@ static void prefs_display_header_create(void) gtk_box_pack_start (GTK_BOX (clist_hbox), clist_hbox2, TRUE, TRUE, 0); clist_scrolledwin = gtk_scrolled_window_new (NULL, NULL); - gtk_widget_set_usize (clist_scrolledwin, 200, 210); + gtk_widget_set_size_request (clist_scrolledwin, 200, 210); gtk_widget_show (clist_scrolledwin); gtk_box_pack_start (GTK_BOX (clist_hbox2), clist_scrolledwin, TRUE, TRUE, 0); @@ -330,15 +330,15 @@ static void prefs_display_header_create(void) reg_btn = gtk_button_new_with_label (_("Add")); gtk_widget_show (reg_btn); gtk_box_pack_start (GTK_BOX (btn_vbox), reg_btn, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (reg_btn), "clicked", - GTK_SIGNAL_FUNC + g_signal_connect (G_OBJECT (reg_btn), "clicked", + G_CALLBACK (prefs_display_header_register_cb), (void *) TRUE); del_btn = gtk_button_new_with_label (_("Delete")); gtk_widget_show (del_btn); gtk_box_pack_start (GTK_BOX (btn_vbox), del_btn, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (del_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_display_header_delete_cb), + g_signal_connect (G_OBJECT (del_btn), "clicked", + G_CALLBACK (prefs_display_header_delete_cb), (void *) hidden_headers_clist); PACK_CHECK_BUTTON (btn_hbox, checkbtn_other_headers, @@ -521,7 +521,7 @@ static gint prefs_display_header_clist_set_row(gboolean hidden) { GtkCList *clist; DisplayHeaderProp *dp; - gchar *entry_text; + const gchar *entry_text; gchar *dp_str[1]; gint row; @@ -609,12 +609,13 @@ static void prefs_display_header_row_moved(GtkCList *clist, gint source_row, prefs_display_header_set_list(); } -static void prefs_display_header_key_pressed(GtkWidget *widget, +static gboolean prefs_display_header_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) { if (event && event->keyval == GDK_Escape) prefs_display_header_cancel(); + return FALSE; } static void prefs_display_header_ok(void) diff --git a/src/prefs_filtering.c b/src/prefs_filtering.c index 02572b272..240768fe4 100644 --- a/src/prefs_filtering.c +++ b/src/prefs_filtering.c @@ -199,7 +199,7 @@ static void prefs_filtering_create(void) debug_print("Creating filtering configuration window...\n"); - window = gtk_window_new (GTK_WINDOW_DIALOG); + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (window), 8); gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (window), TRUE); @@ -706,7 +706,7 @@ static void prefs_filtering_condition_define_done(MatcherList * matchers) static void prefs_filtering_condition_define(void) { - gchar * cond_str; + const gchar * cond_str; MatcherList * matchers = NULL; cond_str = gtk_entry_get_text(GTK_ENTRY(filtering.cond_entry)); @@ -740,7 +740,7 @@ static void prefs_filtering_action_define_done(GSList * action_list) static void prefs_filtering_action_define(void) { - gchar * action_str; + const gchar * action_str; GSList * action_list = NULL; action_str = gtk_entry_get_text(GTK_ENTRY(filtering.action_entry)); @@ -769,8 +769,8 @@ static void prefs_filtering_action_define(void) static FilteringProp * prefs_filtering_dialog_to_filtering(gboolean alert) { MatcherList * cond; - gchar * cond_str; - gchar * action_str; + const gchar * cond_str; + const gchar * action_str; FilteringProp * prop; GSList * action_list; diff --git a/src/prefs_filtering_action.c b/src/prefs_filtering_action.c index 1e10f3dce..68082c067 100644 --- a/src/prefs_filtering_action.c +++ b/src/prefs_filtering_action.c @@ -254,7 +254,7 @@ static void prefs_filtering_action_create(void) debug_print("Creating matcher configuration window...\n"); - window = gtk_window_new(GTK_WINDOW_DIALOG); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER(window), 8); gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); @@ -713,7 +713,7 @@ static FilteringAction * prefs_filtering_action_dialog_to_action(gboolean alert) gint action_type; gint list_id; gint account_id; - gchar * destination; + const gchar * destination; gint labelcolor = 0; FilteringAction * action; diff --git a/src/prefs_folder_item.c b/src/prefs_folder_item.c index de3de4cc1..7a5c1f99b 100644 --- a/src/prefs_folder_item.c +++ b/src/prefs_folder_item.c @@ -181,14 +181,14 @@ void prefs_folder_item_general_create_widget_func(PrefsPage * _page, rowcount, rowcount + 1); folder_color_btn = gtk_button_new_with_label(""); - gtk_widget_set_usize(folder_color_btn, 36, 26); + gtk_widget_set_size_request(folder_color_btn, 36, 26); gtk_box_pack_start (GTK_BOX(hbox), folder_color_btn, FALSE, FALSE, 0); page->folder_color = item->prefs->color; - gtk_signal_connect(GTK_OBJECT(folder_color_btn), "clicked", - GTK_SIGNAL_FUNC(folder_color_set_dialog), - page); + g_signal_connect(G_OBJECT(folder_color_btn), "clicked", + G_CALLBACK(folder_color_set_dialog), + page); gtkut_set_widget_bgcolor_rgb(folder_color_btn, item->prefs->color); @@ -489,7 +489,7 @@ void prefs_folder_item_compose_save_func(PrefsPage *_page) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->checkbtn_enable_default_account)); menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(page->optmenu_default_account)); menuitem = gtk_menu_get_active(GTK_MENU(menu)); - prefs->default_account = GPOINTER_TO_INT(gtk_object_get_user_data(GTK_OBJECT(menuitem))); + prefs->default_account = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID)); #if USE_ASPELL prefs->enable_default_dictionary = diff --git a/src/prefs_gtk.c b/src/prefs_gtk.c index 1cbc09d56..8797e9683 100644 --- a/src/prefs_gtk.c +++ b/src/prefs_gtk.c @@ -36,6 +36,7 @@ #include "gtkutils.h" #include "passcrypt.h" #include "base64.h" +#include "codeconv.h" #define CL(x) (((gulong) (x) >> (gulong) 8) & 0xFFUL) #define RGB_FROM_GDK_COLOR(c) \ @@ -116,10 +117,23 @@ void prefs_config_parse_one_line(PrefParam *param, const gchar *buf) switch (param[i].type) { case P_STRING: + { +#warning FIXME_GTK2 + gchar *tmp; + + tmp = *value ? + conv_codeset_strdup(value, + conv_get_current_charset_str(), + CS_UTF_8) + : g_strdup(""); + if (!tmp) { + g_warning("faild to convert character set."); + tmp = g_strdup(value); + } g_free(*((gchar **)param[i].data)); - *((gchar **)param[i].data) = - *value ? g_strdup(value) : NULL; + *((gchar **)param[i].data) = tmp; break; + } case P_INT: *((gint *)param[i].data) = (gint)atoi(value); @@ -256,10 +270,24 @@ gint prefs_write_param(PrefParam *param, FILE *fp) for (i = 0; param[i].name != NULL; i++) { switch (param[i].type) { case P_STRING: + { +#warning FIXME_GTK2 + gchar *tmp = NULL; + + if (*((gchar **)param[i].data)) { + tmp = conv_codeset_strdup(*((gchar **)param[i].data), + CS_UTF_8, + conv_get_current_charset_str()); + if (!tmp) + tmp = g_strdup(*((gchar **)param[i].data)); + } + g_snprintf(buf, sizeof(buf), "%s=%s\n", param[i].name, - *((gchar **)param[i].data) ? - *((gchar **)param[i].data) : ""); + tmp ? tmp : ""); + + g_free(tmp); break; + } case P_INT: g_snprintf(buf, sizeof(buf), "%s=%d\n", param[i].name, *((gint *)param[i].data)); @@ -326,14 +354,27 @@ void prefs_set_default(PrefParam *param) if (!param[i].data) continue; switch (param[i].type) { +#warning FIXME_GTK2 case P_STRING: case P_PASSWORD: g_free(*((gchar **)param[i].data)); if (param[i].defval != NULL) { - if (!strncasecmp(param[i].defval, "ENV_", 4)) - *((gchar **)param[i].data) = - g_strdup(g_getenv(param[i].defval + 4)); - else if (param[i].defval[0] == '~') + if (!strncasecmp(param[i].defval, "ENV_", 4)) { + const gchar *envstr; + gchar *tmp; + + envstr = g_getenv(param[i].defval + 4); + tmp = envstr && *envstr ? + conv_codeset_strdup(envstr, + conv_get_current_charset_str(), + CS_UTF_8) + : g_strdup(""); + if (!tmp) { + g_warning("faild to convert character set."); + tmp = g_strdup(envstr); + } + *((gchar **)param[i].data) = tmp; + } else if (param[i].defval[0] == '~') *((gchar **)param[i].data) = g_strconcat(get_home_dir(), param[i].defval + 1, @@ -426,7 +467,7 @@ void prefs_dialog_create(PrefsDialog *dialog) g_return_if_fail(dialog != NULL); - window = gtk_window_new (GTK_WINDOW_DIALOG); + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (window), 8); gtk_window_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (window), TRUE); @@ -516,6 +557,7 @@ void prefs_set_dialog_to_default(PrefParam *param) switch (tmpparam.type) { case P_STRING: case P_PASSWORD: +#warning FIXME_GTK2 if (tmpparam.defval) { if (!strncasecmp(tmpparam.defval, "ENV_", 4)) { str_data = g_strdup(g_getenv(param[i].defval + 4)); @@ -576,7 +618,8 @@ void prefs_set_dialog_to_default(PrefParam *param) void prefs_set_data_from_entry(PrefParam *pparam) { - gchar **str, *entry_str; + gchar **str; + const gchar *entry_str; g_return_if_fail(*pparam->widget != NULL); @@ -631,7 +674,7 @@ void prefs_set_entry(PrefParam *pparam) void prefs_set_data_from_text(PrefParam *pparam) { gchar **str; - gchar *text, *tp; + gchar *text = NULL, *tp = NULL; gchar *tmp, *tmpp; g_return_if_fail(*pparam->widget != NULL); @@ -641,8 +684,20 @@ void prefs_set_data_from_text(PrefParam *pparam) case P_PASSWORD: str = (gchar **)pparam->data; g_free(*str); - tp = text = gtk_editable_get_chars - (GTK_EDITABLE(*pparam->widget), 0, -1); + if (GTK_IS_EDITABLE(*pparam->widget)) { /* need? */ + tp = text = gtk_editable_get_chars + (GTK_EDITABLE(*pparam->widget), 0, -1); + } else if (GTK_IS_TEXT_VIEW(*pparam->widget)) { + GtkTextView *textview = GTK_TEXT_VIEW(*pparam->widget); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(textview); + GtkTextIter start, end; + gtk_text_buffer_get_start_iter(buffer, &start); + gtk_text_buffer_get_iter_at_offset(buffer, &end, -1); + tp = text = gtk_text_buffer_get_text(buffer, &start, &end, FALSE); + } + + g_return_if_fail (tp && text); + if (text[0] == '\0') { *str = NULL; g_free(text); @@ -673,7 +728,9 @@ void prefs_set_text(PrefParam *pparam) { gchar *buf, *sp, *bufp; gchar **str; - GtkText *text; + GtkTextView *text; + GtkTextBuffer *buffer; + GtkTextIter iter; g_return_if_fail(*pparam->widget != NULL); @@ -698,14 +755,14 @@ void prefs_set_text(PrefParam *pparam) } else buf = ""; - text = GTK_TEXT(*pparam->widget); - gtk_text_set_point(text, 0); - gtk_text_forward_delete(text, gtk_text_get_length(text)); - gtk_text_set_point(text, 0); - gtk_text_insert(text, NULL, NULL, NULL, buf, -1); + text = GTK_TEXT_VIEW(*pparam->widget); + buffer = gtk_text_view_get_buffer(text); + gtk_text_buffer_set_text(buffer, "\0", -1); + gtk_text_buffer_get_start_iter(buffer, &iter); + gtk_text_buffer_insert(buffer, &iter, buf, -1); break; default: - g_warning("Invalid PrefType for GtkText widget: %d\n", + g_warning("Invalid PrefType for GtkTextView widget: %d\n", pparam->type); } } diff --git a/src/prefs_matcher.c b/src/prefs_matcher.c index b119a5d51..570f36a45 100644 --- a/src/prefs_matcher.c +++ b/src/prefs_matcher.c @@ -357,7 +357,7 @@ static void prefs_matcher_create(void) debug_print("Creating matcher configuration window...\n"); - window = gtk_window_new(GTK_WINDOW_DIALOG); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER(window), 8); gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); @@ -1049,10 +1049,10 @@ static MatcherProp *prefs_matcher_dialog_to_matcher(void) gint value_criteria; gboolean use_regexp; gboolean case_sensitive; - gchar *header; - gchar *expr; + const gchar *header; + const gchar *expr; gint value; - gchar *value_str; + const gchar *value_str; value_criteria = get_sel_from_list(GTK_LIST(matcher.criteria_list)); diff --git a/src/prefs_scoring.c b/src/prefs_scoring.c index d39d38717..5987dbaf1 100644 --- a/src/prefs_scoring.c +++ b/src/prefs_scoring.c @@ -183,7 +183,7 @@ static void prefs_scoring_create(void) debug_print("Creating scoring configuration window...\n"); - window = gtk_window_new (GTK_WINDOW_DIALOG); + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (window), 8); gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (window), TRUE); @@ -508,7 +508,7 @@ static void prefs_scoring_condition_define_done(MatcherList * matchers) static void prefs_scoring_condition_define(void) { - gchar * cond_str; + const gchar * cond_str; MatcherList * matchers = NULL; cond_str = gtk_entry_get_text(GTK_ENTRY(scoring.cond_entry)); @@ -531,8 +531,8 @@ static void prefs_scoring_condition_define(void) static void prefs_scoring_register_cb(void) { MatcherList * cond; - gchar * cond_str; - gchar * score_str; + const gchar * cond_str; + const gchar * score_str; ScoringProp * prop; gint score; @@ -570,8 +570,8 @@ static void prefs_scoring_substitute_cb(void) GtkCList *clist = GTK_CLIST(scoring.cond_clist); gint row; MatcherList * cond; - gchar * cond_str; - gchar * score_str; + const gchar * cond_str; + const gchar * score_str; ScoringProp * prop; gint score; @@ -722,8 +722,8 @@ static void prefs_scoring_key_pressed(GtkWidget *widget, GdkEventKey *event, static void prefs_scoring_ok(void) { MatcherList * cond; - gchar * cond_str; - gchar * score_str; + const gchar * cond_str; + const gchar * score_str; gchar * scoring_str; gchar * str; ScoringProp * prop; diff --git a/src/prefs_summary_column.c b/src/prefs_summary_column.c index 6521b6e3d..e6d3282d7 100644 --- a/src/prefs_summary_column.c +++ b/src/prefs_summary_column.c @@ -109,7 +109,7 @@ static void prefs_summary_column_cancel (void); static gint prefs_summary_column_delete_event (GtkWidget *widget, GdkEventAny *event, gpointer data); -static void prefs_summary_column_key_pressed (GtkWidget *widget, +static gboolean prefs_summary_column_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); @@ -169,19 +169,19 @@ static void prefs_summary_column_create(void) debug_print("Creating summary column setting window...\n"); - window = gtk_window_new(GTK_WINDOW_DIALOG); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER(window), 8); - gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE); gtk_window_set_title(GTK_WINDOW(window), _("Displayed items configuration")); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(prefs_summary_column_delete_event), - NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(prefs_summary_column_key_pressed), - NULL); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(prefs_summary_column_delete_event), + NULL); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(prefs_summary_column_key_pressed), + NULL); vbox = gtk_vbox_new(FALSE, 6); gtk_widget_show(vbox); @@ -212,7 +212,7 @@ static void prefs_summary_column_create(void) gtk_box_pack_start(GTK_BOX(hbox1), clist_hbox, TRUE, TRUE, 0); scrolledwin = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_set_usize(scrolledwin, 180, 210); + gtk_widget_set_size_request(scrolledwin, 180, 210); gtk_widget_show(scrolledwin); gtk_box_pack_start(GTK_BOX(clist_hbox), scrolledwin, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), @@ -245,17 +245,17 @@ static void prefs_summary_column_create(void) gtk_widget_show(remove_btn); gtk_box_pack_start(GTK_BOX(btn_vbox1), remove_btn, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(add_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_summary_column_add), NULL); - gtk_signal_connect(GTK_OBJECT(remove_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_summary_column_remove), NULL); + g_signal_connect(G_OBJECT(add_btn), "clicked", + G_CALLBACK(prefs_summary_column_add), NULL); + g_signal_connect(G_OBJECT(remove_btn), "clicked", + G_CALLBACK(prefs_summary_column_remove), NULL); clist_hbox = gtk_hbox_new(FALSE, 8); gtk_widget_show(clist_hbox); gtk_box_pack_start(GTK_BOX(hbox1), clist_hbox, TRUE, TRUE, 0); scrolledwin = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_set_usize(scrolledwin, 180, 210); + gtk_widget_set_size_request(scrolledwin, 180, 210); gtk_widget_show(scrolledwin); gtk_box_pack_start(GTK_BOX(clist_hbox), scrolledwin, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), @@ -290,10 +290,10 @@ static void prefs_summary_column_create(void) gtk_widget_show(down_btn); gtk_box_pack_start(GTK_BOX(btn_vbox1), down_btn, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(up_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_summary_column_up), NULL); - gtk_signal_connect(GTK_OBJECT(down_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_summary_column_down), NULL); + g_signal_connect(G_OBJECT(up_btn), "clicked", + G_CALLBACK(prefs_summary_column_up), NULL); + g_signal_connect(G_OBJECT(down_btn), "clicked", + G_CALLBACK(prefs_summary_column_down), NULL); btn_hbox = gtk_hbox_new(FALSE, 8); gtk_widget_show(btn_hbox); @@ -306,9 +306,9 @@ static void prefs_summary_column_create(void) default_btn = gtk_button_new_with_label(_(" Use default ")); gtk_widget_show(default_btn); gtk_box_pack_start(GTK_BOX(btn_vbox), default_btn, TRUE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(default_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_summary_column_set_to_default), - NULL); + g_signal_connect(G_OBJECT(default_btn), "clicked", + G_CALLBACK(prefs_summary_column_set_to_default), + NULL); gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"), &cancel_btn, _("Cancel"), NULL, NULL); @@ -316,10 +316,10 @@ static void prefs_summary_column_create(void) gtk_box_pack_end(GTK_BOX(btn_hbox), confirm_area, FALSE, FALSE, 0); gtk_widget_grab_default(ok_btn); - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_summary_column_ok), NULL); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_summary_column_cancel), NULL); + g_signal_connect(G_OBJECT(ok_btn), "clicked", + G_CALLBACK(prefs_summary_column_ok), NULL); + g_signal_connect(G_OBJECT(cancel_btn), "clicked", + G_CALLBACK(prefs_summary_column_cancel), NULL); summary_col.window = window; summary_col.stock_clist = stock_clist; @@ -534,10 +534,11 @@ static gint prefs_summary_column_delete_event(GtkWidget *widget, return TRUE; } -static void prefs_summary_column_key_pressed(GtkWidget *widget, - GdkEventKey *event, - gpointer data) +static gboolean prefs_summary_column_key_pressed(GtkWidget *widget, + GdkEventKey *event, + gpointer data) { if (event && event->keyval == GDK_Escape) summary_col.finished = TRUE; + return FALSE; } diff --git a/src/prefs_template.c b/src/prefs_template.c index 6c5ea2d38..9762153f0 100644 --- a/src/prefs_template.c +++ b/src/prefs_template.c @@ -62,7 +62,7 @@ static GSList *prefs_template_get_list (void); static gint prefs_template_deleted_cb (GtkWidget *widget, GdkEventAny *event, gpointer data); -static void prefs_template_key_pressed_cb (GtkWidget *widget, +static gboolean prefs_template_key_pressed_cb (GtkWidget *widget, GdkEventKey *event, gpointer data); static void prefs_template_cancel_cb (void); @@ -134,8 +134,8 @@ static void prefs_template_window_create(void) gchar *title[1]; /* main window */ - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE); gtk_window_set_default_size(GTK_WINDOW(window), 400, -1); @@ -186,12 +186,12 @@ static void prefs_template_window_create(void) GTK_POLICY_ALWAYS); gtk_box_pack_start(GTK_BOX(vbox1), scroll2, TRUE, TRUE, 0); - text_value = gtk_text_new(NULL, NULL); + text_value = gtk_text_view_new(); gtk_widget_show(text_value); - gtk_widget_set_usize(text_value, -1, 120); + gtk_widget_set_size_request(text_value, -1, 120); gtk_container_add(GTK_CONTAINER(scroll2), text_value); - gtk_text_set_editable(GTK_TEXT(text_value), TRUE); - gtk_text_set_word_wrap(GTK_TEXT(text_value), TRUE); + gtk_text_view_set_editable(GTK_TEXT_VIEW(text_value), TRUE); + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_value), GTK_WRAP_WORD); /* vbox for buttons and templates list */ vbox2 = gtk_vbox_new(FALSE, 6); @@ -207,7 +207,7 @@ static void prefs_template_window_create(void) arrow1 = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT); gtk_widget_show(arrow1); gtk_box_pack_start(GTK_BOX(hbox2), arrow1, FALSE, FALSE, 0); - gtk_widget_set_usize(arrow1, -1, 16); + gtk_widget_set_size_request(arrow1, -1, 16); hbox3 = gtk_hbox_new(TRUE, 4); gtk_widget_show(hbox3); @@ -216,27 +216,27 @@ static void prefs_template_window_create(void) reg_btn = gtk_button_new_with_label(_("Add")); gtk_widget_show(reg_btn); gtk_box_pack_start(GTK_BOX(hbox3), reg_btn, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT (reg_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_template_register_cb), NULL); + g_signal_connect(G_OBJECT (reg_btn), "clicked", + G_CALLBACK (prefs_template_register_cb), NULL); subst_btn = gtk_button_new_with_label(_(" Replace ")); gtk_widget_show(subst_btn); gtk_box_pack_start(GTK_BOX(hbox3), subst_btn, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(subst_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_template_substitute_cb), - NULL); + g_signal_connect(G_OBJECT(subst_btn), "clicked", + G_CALLBACK(prefs_template_substitute_cb), + NULL); del_btn = gtk_button_new_with_label(_("Delete")); gtk_widget_show(del_btn); gtk_box_pack_start(GTK_BOX(hbox3), del_btn, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(del_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_template_delete_cb), NULL); + g_signal_connect(G_OBJECT(del_btn), "clicked", + G_CALLBACK(prefs_template_delete_cb), NULL); desc_btn = gtk_button_new_with_label(_(" Symbols ")); gtk_widget_show(desc_btn); gtk_box_pack_end(GTK_BOX(hbox2), desc_btn, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(desc_btn), "clicked", - GTK_SIGNAL_FUNC(quote_fmt_quote_description), NULL); + g_signal_connect(G_OBJECT(desc_btn), "clicked", + G_CALLBACK(quote_fmt_quote_description), NULL); /* templates list */ scroll1 = gtk_scrolled_window_new(NULL, NULL); @@ -249,15 +249,15 @@ static void prefs_template_window_create(void) title[0] = _("Current templates"); clist_tmpls = gtk_clist_new_with_titles(1, title); gtk_widget_show(clist_tmpls); - gtk_widget_set_usize(scroll1, -1, 140); + gtk_widget_set_size_request(scroll1, -1, 140); gtk_container_add(GTK_CONTAINER(scroll1), clist_tmpls); gtk_clist_set_column_width(GTK_CLIST(clist_tmpls), 0, 80); gtk_clist_set_selection_mode(GTK_CLIST(clist_tmpls), GTK_SELECTION_BROWSE); GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist_tmpls)->column[0].button, GTK_CAN_FOCUS); - gtk_signal_connect(GTK_OBJECT (clist_tmpls), "select_row", - GTK_SIGNAL_FUNC (prefs_template_select_cb), NULL); + g_signal_connect(G_OBJECT (clist_tmpls), "select_row", + G_CALLBACK (prefs_template_select_cb), NULL); /* ok | cancel */ gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"), @@ -268,15 +268,15 @@ static void prefs_template_window_create(void) gtk_window_set_title(GTK_WINDOW(window), _("Template configuration")); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(prefs_template_deleted_cb), NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(prefs_template_key_pressed_cb), NULL); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(prefs_template_deleted_cb), NULL); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(prefs_template_key_pressed_cb), NULL); MANAGE_WINDOW_SIGNALS_CONNECT(window); - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_template_ok_cb), NULL); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_template_cancel_cb), NULL); + g_signal_connect(G_OBJECT(ok_btn), "clicked", + G_CALLBACK(prefs_template_ok_cb), NULL); + g_signal_connect(G_OBJECT(cancel_btn), "clicked", + G_CALLBACK(prefs_template_cancel_cb), NULL); address_completion_start(window); @@ -345,11 +345,12 @@ static gint prefs_template_deleted_cb(GtkWidget *widget, GdkEventAny *event, return TRUE; } -static void prefs_template_key_pressed_cb(GtkWidget *widget, - GdkEventKey *event, gpointer data) +static gboolean prefs_template_key_pressed_cb(GtkWidget *widget, + GdkEventKey *event, gpointer data) { if (event && event->keyval == GDK_Escape) prefs_template_cancel_cb(); + return FALSE; } static void prefs_template_ok_cb(void) @@ -376,6 +377,8 @@ static void prefs_template_select_cb(GtkCList *clist, gint row, gint column, { Template *tmpl; Template tmpl_def; + GtkTextBuffer *buffer; + GtkTextIter iter; tmpl_def.name = _("Template"); tmpl_def.subject = ""; @@ -397,14 +400,10 @@ static void prefs_template_select_cb(GtkCList *clist, gint row, gint column, gtk_entry_set_text(GTK_ENTRY(templates.entry_subject), tmpl->subject ? tmpl->subject : ""); - gtk_text_freeze(GTK_TEXT(templates.text_value)); - gtk_text_set_point(GTK_TEXT(templates.text_value), 0); - gtk_text_forward_delete - (GTK_TEXT(templates.text_value), - gtk_text_get_length(GTK_TEXT(templates.text_value))); - gtk_text_insert(GTK_TEXT(templates.text_value), NULL, NULL, NULL, - tmpl->value, -1); - gtk_text_thaw(GTK_TEXT(templates.text_value)); + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(templates.text_value)); + gtk_text_buffer_set_text(buffer, "\0", -1); + gtk_text_buffer_get_start_iter(buffer, &iter); + gtk_text_buffer_insert(buffer, &iter, tmpl->value, -1); } static GSList *prefs_template_get_list(void) @@ -434,11 +433,15 @@ static gint prefs_template_clist_set_row(gint row) gchar *bcc; gchar *value; gchar *title[1]; + GtkTextBuffer *buffer; + GtkTextIter start, end; g_return_val_if_fail(row != 0, -1); - value = gtk_editable_get_chars(GTK_EDITABLE(templates.text_value), - 0, -1); + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(templates.text_value)); + gtk_text_buffer_get_start_iter(buffer, &start); + gtk_text_buffer_get_iter_at_offset(buffer, &end, -1); + value = gtk_text_buffer_get_text(buffer, &start, &end, FALSE); if (value && *value != '\0') { gchar *parsed_buf; diff --git a/src/prefs_toolbar.c b/src/prefs_toolbar.c index a5d88c3e9..82524396c 100644 --- a/src/prefs_toolbar.c +++ b/src/prefs_toolbar.c @@ -398,7 +398,7 @@ static void prefs_toolbar_register(GtkButton *button, ToolbarPage *prefs_toolbar if (g_strcasecmp(item[3], syl_act) == 0) { - gchar *entry = gtk_entry_get_text(GTK_ENTRY(prefs_toolbar->combo_syl_entry)); + const gchar *entry = gtk_entry_get_text(GTK_ENTRY(prefs_toolbar->combo_syl_entry)); get_action_name(entry, &item[2]); } else { @@ -469,7 +469,7 @@ static void prefs_toolbar_substitute(GtkButton *button, ToolbarPage *prefs_toolb if (g_strcasecmp(item[3], syl_act) == 0) { - gchar *entry = gtk_entry_get_text(GTK_ENTRY(prefs_toolbar->combo_syl_entry)); + const gchar *entry = gtk_entry_get_text(GTK_ENTRY(prefs_toolbar->combo_syl_entry)); get_action_name(entry, &item[2]); } else { item[2] = g_strdup(gtk_entry_get_text(GTK_ENTRY(prefs_toolbar->entry_icon_text))); diff --git a/src/procheader.c b/src/procheader.c index e008e0585..1c1a5d5a0 100644 --- a/src/procheader.c +++ b/src/procheader.c @@ -903,6 +903,23 @@ void procheader_date_get_localtime(gchar *dest, gint len, const time_t timer) strftime(dest, len, prefs_common.date_format, lt); else strftime(dest, len, default_format, lt); + +#warning FIXME_GTK2 +#if 1 + { + gchar *str; + const gchar *src_codeset, *dest_codeset; + + src_codeset = conv_get_current_charset_str(); + dest_codeset = CS_UTF_8; + str = conv_codeset_strdup(dest, src_codeset, dest_codeset); + if (str) { + g_snprintf(dest, len, "%s", str); + strncpy2(dest, str, len); + g_free(str); + } + } +#endif } gint get_header_from_msginfo(MsgInfo *msginfo, gchar *buf, gint len, gchar *header) diff --git a/src/procmime.c b/src/procmime.c index a7d433022..13d12bc5d 100644 --- a/src/procmime.c +++ b/src/procmime.c @@ -885,7 +885,8 @@ FILE *procmime_get_text_content(MimeInfo *mimeinfo, FILE *infp) dup2(oldout, 1); } else if (mimeinfo->mime_type == MIME_TEXT) { while (fgets(buf, sizeof(buf), tmpfp) != NULL) { - str = conv_codeset_strdup(buf, src_codeset, NULL); +#warning FIXME_GTK2 + str = conv_codeset_strdup(buf, src_codeset, CS_UTF_8); if (str) { fputs(str, outfp); g_free(str); @@ -1043,7 +1044,7 @@ gboolean procmime_find_string(MsgInfo *msginfo, const gchar *str, gchar *procmime_get_tmp_file_name(MimeInfo *mimeinfo) { static guint32 id = 0; - gchar *base; + const gchar *base; gchar *filename; gchar f_prefix[10]; @@ -1054,12 +1055,14 @@ gchar *procmime_get_tmp_file_name(MimeInfo *mimeinfo) if (MIME_TEXT_HTML == mimeinfo->mime_type) base = "mimetmp.html"; else { + gchar *tmp; base = mimeinfo->filename ? mimeinfo->filename : mimeinfo->name ? mimeinfo->name : "mimetmp"; base = g_basename(base); if (*base == '\0') base = "mimetmp"; - Xstrdup_a(base, base, return NULL); - subst_for_filename(base); + Xstrdup_a(tmp, base, return NULL); + subst_for_filename(tmp); + base = tmp; } filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S, diff --git a/src/procmsg.h b/src/procmsg.h index 0bc416932..83d5fb1ae 100644 --- a/src/procmsg.h +++ b/src/procmsg.h @@ -241,6 +241,7 @@ GNode *procmsg_get_thread_tree (GSList *mlist); void procmsg_move_messages (GSList *mlist); void procmsg_copy_messages (GSList *mlist); +/* return path is locale charset */ gchar *procmsg_get_message_file_path (MsgInfo *msginfo); gchar *procmsg_get_message_file (MsgInfo *msginfo); GSList *procmsg_get_message_file_list (MsgInfoList *mlist); diff --git a/src/progressdialog.c b/src/progressdialog.c index 2ff64bcc8..b0bf259db 100644 --- a/src/progressdialog.c +++ b/src/progressdialog.c @@ -55,8 +55,8 @@ ProgressDialog *progress_dialog_create(void) debug_print("Creating progress dialog...\n"); progress = g_new0(ProgressDialog, 1); - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, 460, -1); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request(window, 460, -1); gtk_container_set_border_width(GTK_CONTAINER(window), 8); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, TRUE); @@ -94,7 +94,7 @@ ProgressDialog *progress_dialog_create(void) clist = gtk_clist_new_with_titles(3, text); gtk_widget_show(clist); gtk_container_add(GTK_CONTAINER(scrolledwin), clist); - gtk_widget_set_usize(clist, -1, 120); + gtk_widget_set_size_request(clist, -1, 120); gtk_clist_set_column_justification(GTK_CLIST(clist), 0, GTK_JUSTIFY_CENTER); gtk_clist_set_column_width(GTK_CLIST(clist), 0, 16); diff --git a/src/select-keys.c b/src/select-keys.c index 00da2e045..ee8f2c962 100644 --- a/src/select-keys.c +++ b/src/select-keys.c @@ -82,8 +82,8 @@ static void open_dialog (struct select_keys_s *sk); static void close_dialog (struct select_keys_s *sk); static gint delete_event_cb (GtkWidget *widget, GdkEventAny *event, gpointer data); -static void key_pressed_cb (GtkWidget *widget, - GdkEventKey *event, gpointer data); +static gboolean key_pressed_cb (GtkWidget *widget, + GdkEventKey *event, gpointer data); static void showall_btn_cb (GtkWidget *widget, gpointer data); static void select_btn_cb (GtkWidget *widget, gpointer data); static void cancel_btn_cb (GtkWidget *widget, gpointer data); @@ -267,15 +267,15 @@ create_dialog (struct select_keys_s *sk) const char *titles[N_COL_TITLES]; g_assert (!sk->window); - window = gtk_window_new (GTK_WINDOW_DIALOG); - gtk_widget_set_usize (window, 520, 280); + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request (window, 520, 280); gtk_container_set_border_width (GTK_CONTAINER (window), 8); gtk_window_set_title (GTK_WINDOW (window), _("Select Keys")); gtk_window_set_modal (GTK_WINDOW (window), TRUE); - gtk_signal_connect (GTK_OBJECT (window), "delete_event", - GTK_SIGNAL_FUNC (delete_event_cb), sk); - gtk_signal_connect (GTK_OBJECT (window), "key_press_event", - GTK_SIGNAL_FUNC (key_pressed_cb), sk); + g_signal_connect (G_OBJECT (window), "delete_event", + G_CALLBACK (delete_event_cb), sk); + g_signal_connect (G_OBJECT (window), "key_press_event", + G_CALLBACK (key_pressed_cb), sk); MANAGE_WINDOW_SIGNALS_CONNECT (window); vbox = gtk_vbox_new (FALSE, 8); @@ -310,12 +310,12 @@ create_dialog (struct select_keys_s *sk) gtk_clist_set_column_width (GTK_CLIST(clist), COL_EMAIL, 130); gtk_clist_set_column_width (GTK_CLIST(clist), COL_VALIDITY, 20); gtk_clist_set_selection_mode (GTK_CLIST(clist), GTK_SELECTION_BROWSE); - gtk_signal_connect (GTK_OBJECT(GTK_CLIST(clist)->column[COL_NAME].button), - "clicked", - GTK_SIGNAL_FUNC(sort_keys_name), sk); - gtk_signal_connect (GTK_OBJECT(GTK_CLIST(clist)->column[COL_EMAIL].button), - "clicked", - GTK_SIGNAL_FUNC(sort_keys_email), sk); + g_signal_connect (G_OBJECT(GTK_CLIST(clist)->column[COL_NAME].button), + "clicked", + G_CALLBACK(sort_keys_name), sk); + g_signal_connect (G_OBJECT(GTK_CLIST(clist)->column[COL_EMAIL].button), + "clicked", + G_CALLBACK(sort_keys_email), sk); hbox = gtk_hbox_new (FALSE, 8); gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); @@ -334,12 +334,12 @@ create_dialog (struct select_keys_s *sk) gtk_box_pack_end (GTK_BOX (hbox), bbox, FALSE, FALSE, 0); gtk_widget_grab_default (select_btn); - gtk_signal_connect (GTK_OBJECT (select_btn), "clicked", - GTK_SIGNAL_FUNC (select_btn_cb), sk); - gtk_signal_connect (GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC (cancel_btn_cb), sk); - gtk_signal_connect (GTK_OBJECT (other_btn), "clicked", - GTK_SIGNAL_FUNC (other_btn_cb), sk); + g_signal_connect (G_OBJECT (select_btn), "clicked", + G_CALLBACK (select_btn_cb), sk); + g_signal_connect (G_OBJECT(cancel_btn), "clicked", + G_CALLBACK (cancel_btn_cb), sk); + g_signal_connect (G_OBJECT (other_btn), "clicked", + G_CALLBACK (other_btn_cb), sk); vbox2 = gtk_vbox_new (FALSE, 4); gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0); @@ -386,16 +386,17 @@ delete_event_cb (GtkWidget *widget, GdkEventAny *event, gpointer data) } -static void +static gboolean key_pressed_cb (GtkWidget *widget, GdkEventKey *event, gpointer data) { struct select_keys_s *sk = data; - g_return_if_fail (sk); + g_return_val_if_fail (sk, FALSE); if (event && event->keyval == GDK_Escape) { sk->okay = 0; gtk_main_quit (); } + return FALSE; } diff --git a/src/sigstatus.c b/src/sigstatus.c index da22a8e00..bf3462120 100644 --- a/src/sigstatus.c +++ b/src/sigstatus.c @@ -84,7 +84,7 @@ static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data) return TRUE; } -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) { GpgmegtkSigStatus hd = data; @@ -92,6 +92,7 @@ static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) hd->running = 0; do_destroy(hd); } + return FALSE; } GpgmegtkSigStatus gpgmegtk_sig_status_create(void) @@ -107,16 +108,16 @@ GpgmegtkSigStatus gpgmegtk_sig_status_create(void) hd = g_malloc0(sizeof *hd); hd->running = 1; - window = gtk_window_new(GTK_WINDOW_DIALOG); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); hd->mainwindow = window; - gtk_widget_set_usize(window, 400, -1); + gtk_widget_set_size_request(window, 400, -1); gtk_container_set_border_width(GTK_CONTAINER(window), 8); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(delete_event), hd); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(key_pressed), hd); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(delete_event), hd); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(key_pressed), hd); vbox = gtk_vbox_new(FALSE, 8); gtk_container_add(GTK_CONTAINER(window), vbox); @@ -135,8 +136,8 @@ GpgmegtkSigStatus gpgmegtk_sig_status_create(void) NULL, NULL, NULL, NULL); gtk_box_pack_end(GTK_BOX(vbox), okay_area, FALSE, FALSE, 0); gtk_widget_grab_default(okay_btn); - gtk_signal_connect(GTK_OBJECT(okay_btn), "clicked", - GTK_SIGNAL_FUNC(okay_cb), hd); + g_signal_connect(G_OBJECT(okay_btn), "clicked", + G_CALLBACK(okay_cb), hd); gtk_widget_show_all(window); diff --git a/src/sourcewindow.c b/src/sourcewindow.c index 86a1ff73c..088b48018 100644 --- a/src/sourcewindow.c +++ b/src/sourcewindow.c @@ -40,16 +40,12 @@ static void source_window_size_alloc_cb (GtkWidget *widget, GtkAllocation *allocation); static void source_window_destroy_cb (GtkWidget *widget, SourceWindow *sourcewin); -static void key_pressed (GtkWidget *widget, +static gboolean key_pressed (GtkWidget *widget, GdkEventKey *event, SourceWindow *sourcewin); -static GdkFont *msgfont = NULL; - static void source_window_init() { - if (!msgfont && prefs_common.textfont) - msgfont = gtkut_font_load(prefs_common.textfont); } SourceWindow *source_window_create(void) @@ -58,6 +54,7 @@ SourceWindow *source_window_create(void) GtkWidget *window; GtkWidget *scrolledwin; GtkWidget *text; + static PangoFontDescription *font_desc = NULL; debug_print("Creating source window...\n"); sourcewin = g_new0(SourceWindow, 1); @@ -66,16 +63,16 @@ SourceWindow *source_window_create(void) gtk_window_set_title(GTK_WINDOW(window), _("Source of the message")); gtk_window_set_wmclass(GTK_WINDOW(window), "source_window", "Sylpheed"); gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE); - gtk_widget_set_usize(window, prefs_common.sourcewin_width, - prefs_common.sourcewin_height); - gtk_signal_connect(GTK_OBJECT(window), "size_allocate", - GTK_SIGNAL_FUNC(source_window_size_alloc_cb), - sourcewin); - gtk_signal_connect(GTK_OBJECT(window), "destroy", - GTK_SIGNAL_FUNC(source_window_destroy_cb), - sourcewin); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(key_pressed), sourcewin); + gtk_widget_set_size_request(window, prefs_common.sourcewin_width, + prefs_common.sourcewin_height); + g_signal_connect(G_OBJECT(window), "size_allocate", + G_CALLBACK(source_window_size_alloc_cb), + sourcewin); + g_signal_connect(G_OBJECT(window), "destroy", + G_CALLBACK(source_window_destroy_cb), + sourcewin); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(key_pressed), sourcewin); gtk_widget_realize(window); scrolledwin = gtk_scrolled_window_new(NULL, NULL); @@ -84,10 +81,15 @@ SourceWindow *source_window_create(void) gtk_container_add(GTK_CONTAINER(window), scrolledwin); gtk_widget_show(scrolledwin); - text = gtk_text_new(gtk_scrolled_window_get_hadjustment - (GTK_SCROLLED_WINDOW(scrolledwin)), - gtk_scrolled_window_get_vadjustment - (GTK_SCROLLED_WINDOW(scrolledwin))); + text = gtk_text_view_new(); + gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE); + if (!font_desc && prefs_common.textfont) + font_desc = pango_font_description_from_string + (prefs_common.textfont); + if (font_desc) { + gtk_widget_modify_font(text, font_desc); + pango_font_description_free(font_desc); + } gtk_container_add(GTK_CONTAINER(scrolledwin), text); gtk_widget_show(text); @@ -135,26 +137,27 @@ void source_window_show_msg(SourceWindow *sourcewin, MsgInfo *msginfo) g_free(title); g_free(file); - gtk_text_freeze(GTK_TEXT(sourcewin->text)); - while (fgets(buf, sizeof(buf), fp) != NULL) source_window_append(sourcewin, buf); - gtk_text_thaw(GTK_TEXT(sourcewin->text)); - fclose(fp); } void source_window_append(SourceWindow *sourcewin, const gchar *str) { + GtkTextView *text = GTK_TEXT_VIEW(sourcewin->text); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(text); + GtkTextIter iter; gchar *out; gint len; len = strlen(str) + 1; Xalloca(out, len, return); +#warning FIXME_GTK2 conv_localetodisp(out, len, str); - gtk_text_insert(GTK_TEXT(sourcewin->text), msgfont, NULL, NULL, - out, -1); + + gtk_text_buffer_get_iter_at_offset(buffer, &iter, -1); + gtk_text_buffer_insert(buffer, &iter, out, -1); } static void source_window_size_alloc_cb(GtkWidget *widget, @@ -172,11 +175,11 @@ static void source_window_destroy_cb(GtkWidget *widget, source_window_destroy(sourcewin); } -static void key_pressed(GtkWidget *widget, GdkEventKey *event, - SourceWindow *sourcewin) +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, + SourceWindow *sourcewin) { - if (!event || !sourcewin) return; + if (!event || !sourcewin) return FALSE; switch (event->keyval) { case GDK_A: @@ -188,4 +191,6 @@ static void key_pressed(GtkWidget *widget, GdkEventKey *event, gtk_widget_destroy(sourcewin->window); break; } + + return FALSE; } diff --git a/src/stock_pixmap.c b/src/stock_pixmap.c index f76012c3f..3c93330af 100644 --- a/src/stock_pixmap.c +++ b/src/stock_pixmap.c @@ -20,7 +20,7 @@ #include "defs.h" #include #include -#include +#include #include #include @@ -230,7 +230,7 @@ GtkWidget *stock_pixmap_widget(GtkWidget *window, StockPixmap icon) g_return_val_if_fail(icon >= 0 && icon < N_STOCK_PIXMAPS, NULL); if (stock_pixmap_gdk(window, icon, &pixmap, &mask) != -1) - return gtk_pixmap_new(pixmap, mask); + return gtk_image_new_from_pixmap(pixmap, mask); return NULL; } diff --git a/src/summary_search.c b/src/summary_search.c index 240e04045..3900ae279 100644 --- a/src/summary_search.c +++ b/src/summary_search.c @@ -71,7 +71,7 @@ static void from_activated(void); static void to_activated(void); static void subject_activated(void); static void body_activated(void); -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); void summary_search(SummaryView *summaryview) { @@ -96,15 +96,15 @@ static void summary_search_create(SummaryView *summaryview) GtkWidget *checkbtn_hbox; GtkWidget *confirm_area; - window = gtk_window_new (GTK_WINDOW_DIALOG); + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), _("Search messages")); - gtk_widget_set_usize (window, 450, -1); + gtk_widget_set_size_request (window, 450, -1); gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, TRUE); gtk_container_set_border_width (GTK_CONTAINER (window), 8); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(key_pressed), NULL); + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(gtk_widget_hide_on_delete), NULL); + g_signal_connect(G_OBJECT(window), "key_press_event", + G_CALLBACK(key_pressed), NULL); MANAGE_WINDOW_SIGNALS_CONNECT(window); vbox1 = gtk_vbox_new (FALSE, 0); @@ -122,29 +122,29 @@ static void summary_search_create(SummaryView *summaryview) gtk_widget_show (from_entry); gtk_table_attach (GTK_TABLE (table1), from_entry, 1, 3, 0, 1, GTK_EXPAND|GTK_FILL, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(from_entry), "activate", - GTK_SIGNAL_FUNC(from_activated), summaryview); + g_signal_connect(G_OBJECT(from_entry), "activate", + G_CALLBACK(from_activated), summaryview); to_entry = gtk_entry_new (); gtk_widget_show (to_entry); gtk_table_attach (GTK_TABLE (table1), to_entry, 1, 3, 1, 2, GTK_EXPAND|GTK_FILL, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(to_entry), "activate", - GTK_SIGNAL_FUNC(to_activated), summaryview); + g_signal_connect(G_OBJECT(to_entry), "activate", + G_CALLBACK(to_activated), summaryview); subject_entry = gtk_entry_new (); gtk_widget_show (subject_entry); gtk_table_attach (GTK_TABLE (table1), subject_entry, 1, 3, 2, 3, GTK_EXPAND|GTK_FILL, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(subject_entry), "activate", - GTK_SIGNAL_FUNC(subject_activated), summaryview); + g_signal_connect(G_OBJECT(subject_entry), "activate", + G_CALLBACK(subject_activated), summaryview); body_entry = gtk_entry_new (); gtk_widget_show (body_entry); gtk_table_attach (GTK_TABLE (table1), body_entry, 1, 3, 3, 4, GTK_EXPAND|GTK_FILL, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(body_entry), "activate", - GTK_SIGNAL_FUNC(body_activated), summaryview); + g_signal_connect(G_OBJECT(body_entry), "activate", + G_CALLBACK(body_activated), summaryview); from_label = gtk_label_new (_("From:")); gtk_widget_show (from_label); @@ -210,17 +210,30 @@ static void summary_search_create(SummaryView *summaryview) gtk_box_pack_start (GTK_BOX (vbox1), confirm_area, FALSE, FALSE, 0); gtk_widget_grab_default(search_btn); - gtk_signal_connect(GTK_OBJECT(search_btn), "clicked", - GTK_SIGNAL_FUNC(summary_search_execute), - summaryview); - gtk_signal_connect(GTK_OBJECT(clear_btn), "clicked", - GTK_SIGNAL_FUNC(summary_search_clear), - summaryview); - gtk_signal_connect_object(GTK_OBJECT(close_btn), "clicked", - GTK_SIGNAL_FUNC(gtk_widget_hide), - GTK_OBJECT(window)); + g_signal_connect(G_OBJECT(search_btn), "clicked", + G_CALLBACK(summary_search_execute), + summaryview); + g_signal_connect(G_OBJECT(clear_btn), "clicked", + G_CALLBACK(summary_search_clear), + summaryview); + g_signal_connect_closure + (G_OBJECT(close_btn), "clicked", + g_cclosure_new_swap(G_CALLBACK(gtk_widget_hide), + window, NULL), + FALSE); } +#define GET_ENTRY(entry) gtk_entry_get_text(GTK_ENTRY(entry)) + +#define SHOW_ERROR_MESSAGE(error) \ +{ \ + if (error != NULL) { \ + g_warning("%s\n", error->message); \ + g_error_free(error); \ + } \ +} + +#warning FIXME_GTK2 static void summary_search_execute(GtkButton *button, gpointer data) { SummaryView *summaryview = data; @@ -237,10 +250,12 @@ static void summary_search_execute(GtkButton *button, gpointer data) gboolean to_matched; gboolean subj_matched; gboolean body_matched; - gchar *body_str; + const gchar *body_str; wchar_t *wcs_hs, *fromwcs, *towcs, *subjwcs; wchar_t *(* WCSFindFunc) (const wchar_t *haystack, const wchar_t *needle); + glong items_read, items_written; + GError *error = NULL; if (summary_is_locked(summaryview)) return; summary_lock(summaryview); @@ -267,10 +282,19 @@ static void summary_search_execute(GtkButton *button, gpointer data) else WCSFindFunc = wcscasestr; - fromwcs = (wchar_t *)GTK_ENTRY(from_entry)->text; - towcs = (wchar_t *)GTK_ENTRY(to_entry)->text; - subjwcs = (wchar_t *)GTK_ENTRY(subject_entry)->text; - body_str = gtk_entry_get_text(GTK_ENTRY(body_entry)); + fromwcs = (wchar_t *)g_utf8_to_ucs4(GET_ENTRY(from_entry), + -1, &items_read, &items_written, + &error); + SHOW_ERROR_MESSAGE(error); + towcs = (wchar_t *)g_utf8_to_ucs4(GET_ENTRY(to_entry), + -1, &items_read, &items_written, + &error); + SHOW_ERROR_MESSAGE(error); + subjwcs = (wchar_t *)g_utf8_to_ucs4(GET_ENTRY(subject_entry), + -1, &items_read, &items_written, + &error); + SHOW_ERROR_MESSAGE(error); + body_str = GET_ENTRY(body_entry); if (search_all) { gtk_clist_freeze(GTK_CLIST(ctree)); @@ -342,31 +366,40 @@ static void summary_search_execute(GtkButton *button, gpointer data) msginfo = gtk_ctree_node_get_row_data(ctree, node); - if (*fromwcs && msginfo->from) { - wcs_hs = strdup_mbstowcs(msginfo->from); + if (fromwcs && *fromwcs && msginfo->from) { + wcs_hs = (wchar_t *)g_utf8_to_ucs4(msginfo->from, + -1, &items_read, &items_written, + &error); + SHOW_ERROR_MESSAGE(error); if (wcs_hs && WCSFindFunc(wcs_hs, fromwcs) != NULL) from_matched = TRUE; else all_matched = FALSE; g_free(wcs_hs); } - if (*towcs && msginfo->to) { - wcs_hs = strdup_mbstowcs(msginfo->to); + if (towcs && *towcs && msginfo->to) { + wcs_hs = (wchar_t *)g_utf8_to_ucs4(msginfo->to, + -1, &items_read, &items_written, + &error); + SHOW_ERROR_MESSAGE(error); if (wcs_hs && WCSFindFunc(wcs_hs, towcs) != NULL) to_matched = TRUE; else all_matched = FALSE; g_free(wcs_hs); } - if (*subjwcs && msginfo->subject) { - wcs_hs = strdup_mbstowcs(msginfo->subject); + if (subjwcs && *subjwcs && msginfo->subject) { + wcs_hs = (wchar_t *)g_utf8_to_ucs4(msginfo->subject, + -1, &items_read, &items_written, + &error); + SHOW_ERROR_MESSAGE(error); if (wcs_hs && WCSFindFunc(wcs_hs, subjwcs) != NULL) subj_matched = TRUE; else all_matched = FALSE; g_free(wcs_hs); } - if (*body_str) { + if (body_str && *body_str) { if (procmime_find_string(msginfo, body_str, case_sens)) body_matched = TRUE; else @@ -404,9 +437,15 @@ static void summary_search_execute(GtkButton *button, gpointer data) if (*body_str) main_window_cursor_normal(summaryview->mainwin); + g_free(fromwcs); + g_free(towcs); + g_free(subjwcs); + summary_unlock(summaryview); } +#undef GET_ENTRY + static void summary_search_clear(GtkButton *button, gpointer data) { gtk_editable_delete_text(GTK_EDITABLE(from_entry), 0, -1); @@ -435,8 +474,9 @@ static void body_activated(void) gtk_button_clicked(GTK_BUTTON(search_btn)); } -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) { if (event && event->keyval == GDK_Escape) gtk_widget_hide(window); + return FALSE; } diff --git a/src/summaryview.c b/src/summaryview.c index c3cef2a1f..0af851831 100644 --- a/src/summaryview.c +++ b/src/summaryview.c @@ -2,7 +2,7 @@ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client * Copyright (C) 1999-2003 Hiroyuki Yamamoto * - * This program is free software; you can redistribute it and/or modify + * This program is free software; you can redistributte it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. @@ -91,9 +91,6 @@ #define SUMMARY_COL_LOCKED_WIDTH 13 #define SUMMARY_COL_MIME_WIDTH 11 -static GdkFont *boldfont; -static GdkFont *smallfont; - static GtkStyle *bold_style; static GtkStyle *bold_marked_style; static GtkStyle *bold_deleted_style; @@ -257,16 +254,17 @@ static GtkWidget *summary_ctree_create (SummaryView *summaryview); static gint summary_toggle_pressed (GtkWidget *eventbox, GdkEventButton *event, SummaryView *summaryview); -static void summary_button_pressed (GtkWidget *ctree, +static gboolean summary_button_pressed (GtkWidget *ctree, GdkEventButton *event, SummaryView *summaryview); -static void summary_button_released (GtkWidget *ctree, +static gboolean summary_button_released (GtkWidget *ctree, GdkEventButton *event, SummaryView *summaryview); -static gint summary_key_pressed (GtkWidget *ctree, +static gboolean summary_key_pressed (GtkWidget *ctree, GdkEventKey *event, SummaryView *summaryview); -static gint summary_searchbar_pressed (GtkWidget *ctree, +static gboolean summary_searchbar_pressed + (GtkWidget *ctree, GdkEventKey *event, SummaryView *summaryview); static void summary_searchbar_focus_evt (GtkWidget *ctree, @@ -589,9 +587,9 @@ SummaryView *summary_create(void) gtk_box_pack_end(GTK_BOX(hbox), toggle_eventbox, FALSE, FALSE, 4); toggle_arrow = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT); gtk_container_add(GTK_CONTAINER(toggle_eventbox), toggle_arrow); - gtk_signal_connect(GTK_OBJECT(toggle_eventbox), "button_press_event", - GTK_SIGNAL_FUNC(summary_toggle_pressed), - summaryview); + g_signal_connect(G_OBJECT(toggle_eventbox), "button_press_event", + G_CALLBACK(summary_toggle_pressed), + summaryview); statlabel_msgs = gtk_label_new(""); @@ -605,7 +603,7 @@ SummaryView *summary_create(void) GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0); - gtk_widget_set_usize(vbox, + gtk_widget_set_size_request(vbox, prefs_common.summaryview_width, prefs_common.summaryview_height); @@ -630,21 +628,21 @@ SummaryView *summary_create(void) search_type = gtk_menu_new(); MENUITEM_ADD (search_type, menuitem, _("Subject"), S_SEARCH_SUBJECT); - gtk_signal_connect(GTK_OBJECT(menuitem), "activate", - GTK_SIGNAL_FUNC(summary_searchtype_changed), - summaryview); + g_signal_connect(G_OBJECT(menuitem), "activate", + G_CALLBACK(summary_searchtype_changed), + summaryview); MENUITEM_ADD (search_type, menuitem, _("From"), S_SEARCH_FROM); - gtk_signal_connect(GTK_OBJECT(menuitem), "activate", - GTK_SIGNAL_FUNC(summary_searchtype_changed), - summaryview); + g_signal_connect(G_OBJECT(menuitem), "activate", + G_CALLBACK(summary_searchtype_changed), + summaryview); MENUITEM_ADD (search_type, menuitem, _("To"), S_SEARCH_TO); - gtk_signal_connect(GTK_OBJECT(menuitem), "activate", - GTK_SIGNAL_FUNC(summary_searchtype_changed), - summaryview); + g_signal_connect(G_OBJECT(menuitem), "activate", + G_CALLBACK(summary_searchtype_changed), + summaryview); MENUITEM_ADD (search_type, menuitem, _("Extended"), S_SEARCH_EXTENDED); - gtk_signal_connect(GTK_OBJECT(menuitem), "activate", - GTK_SIGNAL_FUNC(summary_searchtype_changed), - summaryview); + g_signal_connect(G_OBJECT(menuitem), "activate", + G_CALLBACK(summary_searchtype_changed), + summaryview); gtk_option_menu_set_menu(GTK_OPTION_MENU(search_type_opt), search_type); @@ -658,27 +656,27 @@ SummaryView *summary_create(void) gtkut_button_set_create(&search_hbbox, &search_description, _("Extended Symbols"), NULL, NULL, NULL, NULL); - gtk_signal_connect(GTK_OBJECT(search_description), "clicked", - GTK_SIGNAL_FUNC(search_description_cb), NULL); + g_signal_connect(G_OBJECT(search_description), "clicked", + G_CALLBACK(search_description_cb), NULL); gtk_box_pack_start(GTK_BOX(hbox_search), search_hbbox, FALSE, FALSE, 2); gtk_widget_show(search_string); gtk_widget_show(hbox_search); - gtk_signal_connect(GTK_OBJECT(search_string), "key_press_event", - GTK_SIGNAL_FUNC(summary_searchbar_pressed), - summaryview); + g_signal_connect(G_OBJECT(search_string), "key_press_event", + G_CALLBACK(summary_searchbar_pressed), + summaryview); - gtk_signal_connect(GTK_OBJECT(search_string), "focus_in_event", - GTK_SIGNAL_FUNC(summary_searchbar_focus_evt), - summaryview); + g_signal_connect(G_OBJECT(search_string), "focus_in_event", + G_CALLBACK(summary_searchbar_focus_evt), + summaryview); - gtk_signal_connect(GTK_OBJECT(search_string), "focus_out_event", - GTK_SIGNAL_FUNC(summary_searchbar_focus_evt), - summaryview); + g_signal_connect(G_OBJECT(search_string), "focus_out_event", + G_CALLBACK(summary_searchbar_focus_evt), + summaryview); - gtk_signal_connect (GTK_OBJECT(toggle_search), "toggled", - GTK_SIGNAL_FUNC(tog_searchbar_cb), summaryview); + g_signal_connect (G_OBJECT(toggle_search), "toggled", + G_CALLBACK(tog_searchbar_cb), summaryview); /* create popup menu */ n_entries = sizeof(summary_popup_entries) / @@ -752,11 +750,18 @@ void summary_init(SummaryView *summaryview) &gpgsignedxpm, &gpgsignedxpmmask); if (!small_style) { + PangoFontDescription *font_desc = NULL; + small_style = gtk_style_copy (gtk_widget_get_style(summaryview->ctree)); - if (!smallfont) - smallfont = gtkut_font_load(SMALL_FONT); - small_style->font = smallfont; + if (SMALL_FONT) + font_desc = pango_font_description_from_string + (SMALL_FONT); + if (font_desc) { + if (small_style->font_desc) + pango_font_description_free(small_style->font_desc); + small_style->font_desc = font_desc; + } small_marked_style = gtk_style_copy(small_style); small_marked_style->fg[GTK_STATE_NORMAL] = summaryview->color_marked; @@ -765,11 +770,18 @@ void summary_init(SummaryView *summaryview) summaryview->color_dim; } if (!bold_style) { + PangoFontDescription *font_desc = NULL; bold_style = gtk_style_copy (gtk_widget_get_style(summaryview->ctree)); - if (!boldfont) - boldfont = gtkut_font_load(BOLD_FONT); - bold_style->font = boldfont; + if (BOLD_FONT) + font_desc = pango_font_description_from_string + (BOLD_FONT); + if (font_desc) { + if (bold_style->font_desc) + pango_font_description_free + (bold_style->font_desc); + bold_style->font_desc = font_desc; + } bold_marked_style = gtk_style_copy(bold_style); bold_marked_style->fg[GTK_STATE_NORMAL] = summaryview->color_marked; @@ -1014,7 +1026,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item) gint search_type = GPOINTER_TO_INT(gtk_object_get_user_data( GTK_OBJECT(GTK_MENU_ITEM(gtk_menu_get_active( GTK_MENU(summaryview->search_type)))))); - gchar *search_string = gtk_entry_get_text(GTK_ENTRY(summaryview->search_string)); + const gchar *search_string = gtk_entry_get_text(GTK_ENTRY(summaryview->search_string)); gchar *searched_header = NULL; MatcherList * tmp_list = NULL; @@ -1435,12 +1447,15 @@ void summary_select_next_unread(SummaryView *summaryview) } if (val == G_ALERTDEFAULT) { +#warning FIXME_GTK2 +#if 0 if (gtk_signal_n_emissions_by_name (GTK_OBJECT(ctree), "key_press_event") > 0) gtk_signal_emit_stop_by_name (GTK_OBJECT(ctree), "key_press_event"); folderview_select_next_unread(summaryview->folderview); +#endif return; } else @@ -1490,12 +1505,15 @@ void summary_select_next_new(SummaryView *summaryview) "Go to next folder?"), _("Yes"), _("Search again"), _("No")); if (val == G_ALERTDEFAULT) { +#warning FIXME_GTK2 +#if 0 if (gtk_signal_n_emissions_by_name (GTK_OBJECT(ctree), "key_press_event") > 0) gtk_signal_emit_stop_by_name (GTK_OBJECT(ctree), "key_press_event"); folderview_select_next_unread(summaryview->folderview); +#endif return; } else if (val == G_ALERTALTERNATE) node = NULL; @@ -1928,9 +1946,9 @@ static void summary_status_show(SummaryView *summaryview) gchar *name; if (!summaryview->folder_item) { - gtk_label_set(GTK_LABEL(summaryview->statlabel_folder), ""); - gtk_label_set(GTK_LABEL(summaryview->statlabel_select), ""); - gtk_label_set(GTK_LABEL(summaryview->statlabel_msgs), ""); + gtk_label_set_text(GTK_LABEL(summaryview->statlabel_folder), ""); + gtk_label_set_text(GTK_LABEL(summaryview->statlabel_select), ""); + gtk_label_set_text(GTK_LABEL(summaryview->statlabel_msgs), ""); return; } @@ -1948,7 +1966,7 @@ static void summary_status_show(SummaryView *summaryview) } name = folder_item_get_name(summaryview->folder_item); - gtk_label_set(GTK_LABEL(summaryview->statlabel_folder), name); + gtk_label_set_text(GTK_LABEL(summaryview->statlabel_folder), name); g_free(name); if (summaryview->deleted) @@ -1987,7 +2005,7 @@ static void summary_status_show(SummaryView *summaryview) str = g_strconcat(n_selected ? itos(n_selected) : "", itstr, sel, spc, del, mv, cp, NULL); - gtk_label_set(GTK_LABEL(summaryview->statlabel_select), str); + gtk_label_set_text(GTK_LABEL(summaryview->statlabel_select), str); g_free(str); g_free(sel); g_free(del); @@ -2001,7 +2019,7 @@ static void summary_status_show(SummaryView *summaryview) summaryview->folder_item->unread_msgs, summaryview->folder_item->total_msgs, to_human_readable(summaryview->total_size)); - gtk_label_set(GTK_LABEL(summaryview->statlabel_msgs), str); + gtk_label_set_text(GTK_LABEL(summaryview->statlabel_msgs), str); g_free(str); } @@ -2058,7 +2076,7 @@ static void summary_set_column_titles(SummaryView *summaryview) } if (type == S_COL_MIME) { - label = gtk_pixmap_new(clipxpm, clipxpmmask); + label = gtk_image_new_from_pixmap(clipxpm, clipxpmmask); gtk_widget_show(label); gtk_clist_set_column_widget(clist, pos, label); continue; @@ -2572,8 +2590,8 @@ void summary_step(SummaryView *summaryview, GtkScrollType type) if (messageview_is_visible(summaryview->messageview)) summaryview->display_msg = TRUE; - gtk_signal_emit_by_name(GTK_OBJECT(ctree), "scroll_vertical", - type, 0.0); + g_signal_emit_by_name(G_OBJECT(ctree), "scroll_vertical", + type, 0.0); if (GTK_CLIST(ctree)->selection) gtk_sctree_set_anchor_row @@ -3417,7 +3435,21 @@ void summary_save_as(SummaryView *summaryview) Xstrdup_a(filename, msginfo->subject, return); subst_for_filename(filename); } - dest = filesel_select_file(_("Save as"), filename); + if (g_getenv ("G_BROKEN_FILENAMES") && + filename && g_utf8_validate(filename, -1, NULL)) { + gchar *oldstr = filename; + filename = conv_codeset_strdup(filename, + CS_UTF_8, + conv_get_current_charset_str()); + if (!filename) { + g_warning("summary_save_as(): faild to convert character set."); + filename = g_strdup(oldstr); + } + dest = filesel_select_file(_("Save as"), filename); + g_free(filename); + } else + dest = filesel_select_file(_("Save as"), filename); + filename = NULL; if (!dest) return; if (is_file_exist(dest)) { aval = alertpanel(_("Append or Overwrite"), @@ -3716,8 +3748,8 @@ void summary_thread_build(SummaryView *summaryview) STATUSBAR_PUSH(summaryview->mainwin, _("Building threads...")); main_window_cursor_wait(summaryview->mainwin); - gtk_signal_handler_block_by_func(GTK_OBJECT(ctree), - summary_tree_expanded, summaryview); + g_signal_handlers_block_by_func(G_OBJECT(ctree), + G_CALLBACK(summary_tree_expanded), summaryview); gtk_clist_freeze(GTK_CLIST(ctree)); node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); @@ -3765,8 +3797,8 @@ void summary_thread_build(SummaryView *summaryview) gtkut_ctree_set_focus_row(ctree, summaryview->selected); gtk_clist_thaw(GTK_CLIST(ctree)); - gtk_signal_handler_unblock_by_func(GTK_OBJECT(ctree), - summary_tree_expanded, summaryview); + g_signal_handlers_unblock_by_func(G_OBJECT(ctree), + G_CALLBACK(summary_tree_expanded), summaryview); debug_print("done.\n"); STATUSBAR_POP(summaryview->mainwin); @@ -3814,8 +3846,8 @@ void summary_unthread(SummaryView *summaryview) STATUSBAR_PUSH(summaryview->mainwin, _("Unthreading...")); main_window_cursor_wait(summaryview->mainwin); - gtk_signal_handler_block_by_func(GTK_OBJECT(ctree), - summary_tree_collapsed, summaryview); + g_signal_handlers_block_by_func(G_OBJECT(ctree), + summary_tree_collapsed, summaryview); gtk_clist_freeze(GTK_CLIST(ctree)); for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); @@ -3834,8 +3866,8 @@ void summary_unthread(SummaryView *summaryview) gtk_sctree_sort_recursive(ctree, NULL); gtk_clist_thaw(GTK_CLIST(ctree)); - gtk_signal_handler_unblock_by_func(GTK_OBJECT(ctree), - summary_tree_collapsed, summaryview); + g_signal_handlers_unblock_by_func(G_OBJECT(ctree), + G_CALLBACK(summary_tree_collapsed), summaryview); debug_print("done.\n"); STATUSBAR_POP(summaryview->mainwin); @@ -4033,11 +4065,11 @@ static void summary_colorlabel_menu_item_activate_cb(GtkWidget *widget, guint color = GPOINTER_TO_UINT(data); SummaryView *summaryview; - summaryview = gtk_object_get_data(GTK_OBJECT(widget), "summaryview"); + summaryview = g_object_get_data(G_OBJECT(widget), "summaryview"); g_return_if_fail(summaryview != NULL); /* "dont_toggle" state set? */ - if (gtk_object_get_data(GTK_OBJECT(summaryview->colorlabel_menu), + if (g_object_get_data(G_OBJECT(summaryview->colorlabel_menu), "dont_toggle")) return; @@ -4132,13 +4164,13 @@ static void summary_colorlabel_menu_item_activate_item_cb(GtkMenuItem *menu_item /* NOTE: don't return prematurely because we set the "dont_toggle" * state for check menu items */ - gtk_object_set_data(GTK_OBJECT(menu), "dont_toggle", - GINT_TO_POINTER(1)); + g_object_set_data(G_OBJECT(menu), "dont_toggle", + GINT_TO_POINTER(1)); /* clear items. get item pointers. */ for (n = 0, cur = menu->children; cur != NULL; cur = cur->next) { if (GTK_IS_CHECK_MENU_ITEM(cur->data)) { - gtk_check_menu_item_set_state + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(cur->data), FALSE); items[n] = GTK_CHECK_MENU_ITEM(cur->data); n++; @@ -4158,7 +4190,7 @@ static void summary_colorlabel_menu_item_activate_item_cb(GtkMenuItem *menu_item if (msginfo) { clabel = MSG_GET_COLORLABEL_VALUE(msginfo->flags); if (!items[clabel]->active) - gtk_check_menu_item_set_state + gtk_check_menu_item_set_active (items[clabel], TRUE); } } @@ -4166,8 +4198,8 @@ static void summary_colorlabel_menu_item_activate_item_cb(GtkMenuItem *menu_item g_warning("invalid number of color elements (%d)\n", n); /* reset "dont_toggle" state */ - gtk_object_set_data(GTK_OBJECT(menu), "dont_toggle", - GINT_TO_POINTER(0)); + g_object_set_data(G_OBJECT(menu), "dont_toggle", + GINT_TO_POINTER(0)); } static void summary_colorlabel_menu_create(SummaryView *summaryview) @@ -4179,8 +4211,8 @@ static void summary_colorlabel_menu_create(SummaryView *summaryview) label_menuitem = gtk_item_factory_get_item(summaryview->popupfactory, "/Color label"); - gtk_signal_connect(GTK_OBJECT(label_menuitem), "activate", - GTK_SIGNAL_FUNC(summary_colorlabel_menu_item_activate_item_cb), + g_signal_connect(G_OBJECT(label_menuitem), "activate", + G_CALLBACK(summary_colorlabel_menu_item_activate_item_cb), summaryview); gtk_widget_show(label_menuitem); @@ -4192,26 +4224,26 @@ static void summary_colorlabel_menu_create(SummaryView *summaryview) * can always get back the SummaryView pointer. */ item = gtk_check_menu_item_new_with_label(_("None")); - gtk_menu_append(GTK_MENU(menu), item); - gtk_signal_connect(GTK_OBJECT(item), "activate", - GTK_SIGNAL_FUNC(summary_colorlabel_menu_item_activate_cb), + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + g_signal_connect(G_OBJECT(item), "activate", + G_CALLBACK(summary_colorlabel_menu_item_activate_cb), GUINT_TO_POINTER(0)); - gtk_object_set_data(GTK_OBJECT(item), "summaryview", summaryview); + g_object_set_data(G_OBJECT(item), "summaryview", summaryview); gtk_widget_show(item); item = gtk_menu_item_new(); - gtk_menu_append(GTK_MENU(menu), item); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); gtk_widget_show(item); /* create pixmap/label menu items */ for (i = 0; i < N_COLOR_LABELS; i++) { item = colorlabel_create_check_color_menu_item(i); - gtk_menu_append(GTK_MENU(menu), item); - gtk_signal_connect(GTK_OBJECT(item), "activate", - GTK_SIGNAL_FUNC(summary_colorlabel_menu_item_activate_cb), - GUINT_TO_POINTER(i + 1)); - gtk_object_set_data(GTK_OBJECT(item), "summaryview", - summaryview); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + g_signal_connect(G_OBJECT(item), "activate", + G_CALLBACK(summary_colorlabel_menu_item_activate_cb), + GUINT_TO_POINTER(i + 1)); + g_object_set_data(G_OBJECT(item), "summaryview", + summaryview); gtk_widget_show(item); } @@ -4286,7 +4318,7 @@ static GtkWidget *summary_ctree_create(SummaryView *summaryview) GTK_CTREE_EXPANDER_TRIANGLE); #endif gtk_ctree_set_indent(GTK_CTREE(ctree), 16); - gtk_object_set_user_data(GTK_OBJECT(ctree), summaryview); + g_object_set_data(G_OBJECT(ctree), "user_data", summaryview); for (pos = 0; pos < N_SUMMARY_COLS; pos++) { GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[pos].button, @@ -4297,10 +4329,10 @@ static GtkWidget *summary_ctree_create(SummaryView *summaryview) /* connect signal to the buttons for sorting */ #define CLIST_BUTTON_SIGNAL_CONNECT(col, func) \ - gtk_signal_connect \ - (GTK_OBJECT(GTK_CLIST(ctree)->column[col_pos[col]].button), \ + g_signal_connect \ + (G_OBJECT(GTK_CLIST(ctree)->column[col_pos[col]].button), \ "clicked", \ - GTK_SIGNAL_FUNC(func), \ + G_CALLBACK(func), \ summaryview) CLIST_BUTTON_SIGNAL_CONNECT(S_COL_MARK , summary_mark_clicked); @@ -4316,34 +4348,34 @@ static GtkWidget *summary_ctree_create(SummaryView *summaryview) #undef CLIST_BUTTON_SIGNAL_CONNECT - gtk_signal_connect(GTK_OBJECT(ctree), "tree_select_row", - GTK_SIGNAL_FUNC(summary_selected), summaryview); - gtk_signal_connect(GTK_OBJECT(ctree), "button_press_event", - GTK_SIGNAL_FUNC(summary_button_pressed), - summaryview); - gtk_signal_connect(GTK_OBJECT(ctree), "button_release_event", - GTK_SIGNAL_FUNC(summary_button_released), - summaryview); - gtk_signal_connect(GTK_OBJECT(ctree), "key_press_event", - GTK_SIGNAL_FUNC(summary_key_pressed), summaryview); - gtk_signal_connect(GTK_OBJECT(ctree), "resize_column", - GTK_SIGNAL_FUNC(summary_col_resized), summaryview); - gtk_signal_connect(GTK_OBJECT(ctree), "open_row", - GTK_SIGNAL_FUNC(summary_open_row), summaryview); - - gtk_signal_connect_after(GTK_OBJECT(ctree), "tree_expand", - GTK_SIGNAL_FUNC(summary_tree_expanded), - summaryview); - gtk_signal_connect_after(GTK_OBJECT(ctree), "tree_collapse", - GTK_SIGNAL_FUNC(summary_tree_collapsed), - summaryview); - - gtk_signal_connect(GTK_OBJECT(ctree), "start_drag", - GTK_SIGNAL_FUNC(summary_start_drag), - summaryview); - gtk_signal_connect(GTK_OBJECT(ctree), "drag_data_get", - GTK_SIGNAL_FUNC(summary_drag_data_get), - summaryview); + g_signal_connect(G_OBJECT(ctree), "tree_select_row", + G_CALLBACK(summary_selected), summaryview); + g_signal_connect(G_OBJECT(ctree), "button_press_event", + G_CALLBACK(summary_button_pressed), + summaryview); + g_signal_connect(G_OBJECT(ctree), "button_release_event", + G_CALLBACK(summary_button_released), + summaryview); + g_signal_connect(G_OBJECT(ctree), "key_press_event", + G_CALLBACK(summary_key_pressed), summaryview); + g_signal_connect(G_OBJECT(ctree), "resize_column", + G_CALLBACK(summary_col_resized), summaryview); + g_signal_connect(G_OBJECT(ctree), "open_row", + G_CALLBACK(summary_open_row), summaryview); + + g_signal_connect_after(G_OBJECT(ctree), "tree_expand", + G_CALLBACK(summary_tree_expanded), + summaryview); + g_signal_connect_after(G_OBJECT(ctree), "tree_collapse", + G_CALLBACK(summary_tree_collapsed), + summaryview); + + g_signal_connect(G_OBJECT(ctree), "start_drag", + G_CALLBACK(summary_start_drag), + summaryview); + g_signal_connect(G_OBJECT(ctree), "drag_data_get", + G_CALLBACK(summary_drag_data_get), + summaryview); return ctree; } @@ -4363,7 +4395,7 @@ void summary_set_column_order(SummaryView *summaryview) gtk_widget_destroy(summaryview->ctree); summaryview->ctree = ctree = summary_ctree_create(summaryview); - pixmap = gtk_pixmap_new(clipxpm, clipxpmmask); + pixmap = gtk_image_new_from_pixmap(clipxpm, clipxpmmask); gtk_clist_set_column_widget(GTK_CLIST(ctree), summaryview->col_pos[S_COL_MIME], pixmap); gtk_widget_show(pixmap); @@ -4395,10 +4427,10 @@ static gint summary_toggle_pressed(GtkWidget *eventbox, GdkEventButton *event, return TRUE; } -static void summary_button_pressed(GtkWidget *ctree, GdkEventButton *event, - SummaryView *summaryview) +static gboolean summary_button_pressed(GtkWidget *ctree, GdkEventButton *event, + SummaryView *summaryview) { - if (!event) return; + if (!event) return FALSE; if (event->button == 3) { summaryview->display_msg = TRUE; @@ -4412,11 +4444,14 @@ static void summary_button_pressed(GtkWidget *ctree, GdkEventButton *event, messageview_is_visible(summaryview->messageview)) summaryview->display_msg = TRUE; } + + return FALSE; } -static void summary_button_released(GtkWidget *ctree, GdkEventButton *event, - SummaryView *summaryview) +static gboolean summary_button_released(GtkWidget *ctree, GdkEventButton *event, + SummaryView *summaryview) { + return FALSE; } void summary_pass_key_press_event(SummaryView *summaryview, GdkEventKey *event) @@ -4430,8 +4465,8 @@ void summary_pass_key_press_event(SummaryView *summaryview, GdkEventKey *event) #define RETURN_IF_LOCKED() \ if (summaryview->mainwin->lock_count) return TRUE -static gint summary_key_pressed(GtkWidget *widget, GdkEventKey *event, - SummaryView *summaryview) +static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event, + SummaryView *summaryview) { GtkCTree *ctree = GTK_CTREE(widget); GtkCTreeNode *node; @@ -4509,8 +4544,8 @@ static gint summary_key_pressed(GtkWidget *widget, GdkEventKey *event, return TRUE; } -static gint summary_searchbar_pressed(GtkWidget *widget, GdkEventKey *event, - SummaryView *summaryview) +static gboolean summary_searchbar_pressed(GtkWidget *widget, GdkEventKey *event, + SummaryView *summaryview) { if (event != NULL && event->keyval == GDK_Return) summary_show(summaryview, summaryview->folder_item); @@ -4521,13 +4556,13 @@ static void summary_searchbar_focus_evt(GtkWidget *widget, GdkEventFocus *event, SummaryView *summaryview) { if (event != NULL && event->in) - gtk_signal_handler_block_by_func(GTK_OBJECT(summaryview->mainwin->window), - GTK_SIGNAL_FUNC(mainwindow_key_pressed), - summaryview->mainwin); + g_signal_handlers_block_by_func(G_OBJECT(summaryview->mainwin->window), + G_CALLBACK(mainwindow_key_pressed), + summaryview->mainwin); else - gtk_signal_handler_unblock_by_func(GTK_OBJECT(summaryview->mainwin->window), - GTK_SIGNAL_FUNC(mainwindow_key_pressed), - summaryview->mainwin); + g_signal_handlers_unblock_by_func(G_OBJECT(summaryview->mainwin->window), + G_CALLBACK(mainwindow_key_pressed), + summaryview->mainwin); } static void summary_searchtype_changed(GtkMenuItem *widget, gpointer data) diff --git a/src/textview.c b/src/textview.c index 9e0070b26..11581a260 100644 --- a/src/textview.c +++ b/src/textview.c @@ -40,7 +40,6 @@ #include "procheader.h" #include "prefs_common.h" #include "codeconv.h" -#include "gtkstext.h" #include "utils.h" #include "gtkutils.h" #include "procmime.h" @@ -121,14 +120,6 @@ static GdkColor bad_sig_color = { }; #endif -static GdkFont *text_sb_font; -static GdkFont *text_mb_font; -static gint text_sb_font_orig_ascent; -static gint text_sb_font_orig_descent; -static gint text_mb_font_orig_ascent; -static gint text_mb_font_orig_descent; -static GdkFont *spacingfont; - static void textview_show_ertf (TextView *textview, FILE *fp, CodeConverter *conv); @@ -160,12 +151,19 @@ static void textview_show_header (TextView *textview, static gint textview_key_pressed (GtkWidget *widget, GdkEventKey *event, TextView *textview); +#warning FIXME_GTK2 +#if 0 static gint textview_button_pressed (GtkWidget *widget, GdkEventButton *event, TextView *textview); static gint textview_button_released (GtkWidget *widget, GdkEventButton *event, TextView *textview); +#else +static gboolean textview_uri_button_pressed(GtkTextTag *tag, GObject *obj, + GdkEvent *event, GtkTextIter *iter, + TextView *textview); +#endif static void textview_uri_list_remove_all(GSList *uri_list); @@ -183,101 +181,60 @@ TextView *textview_create(void) { TextView *textview; GtkWidget *vbox; - GtkWidget *scrolledwin_sb; - GtkWidget *scrolledwin_mb; - GtkWidget *text_sb; - GtkWidget *text_mb; + GtkWidget *scrolledwin; + GtkWidget *text; + GtkTextBuffer *buffer; + GtkClipboard *clipboard; + PangoFontDescription *font_desc = NULL; debug_print("Creating text view...\n"); textview = g_new0(TextView, 1); - scrolledwin_sb = gtk_scrolled_window_new(NULL, NULL); - scrolledwin_mb = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin_sb), + scrolledwin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin_mb), - GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); - gtk_widget_set_usize(scrolledwin_sb, prefs_common.mainview_width, -1); - gtk_widget_set_usize(scrolledwin_mb, prefs_common.mainview_width, -1); + gtk_widget_set_size_request(scrolledwin, prefs_common.mainview_width, -1); /* create GtkSText widgets for single-byte and multi-byte character */ - text_sb = gtk_stext_new(NULL, NULL); - text_mb = gtk_stext_new(NULL, NULL); - GTK_STEXT(text_sb)->default_tab_width = 8; - GTK_STEXT(text_mb)->default_tab_width = 8; - gtk_widget_show(text_sb); - gtk_widget_show(text_mb); - gtk_stext_set_word_wrap(GTK_STEXT(text_sb), TRUE); - gtk_stext_set_word_wrap(GTK_STEXT(text_mb), TRUE); - gtk_widget_ensure_style(text_sb); - gtk_widget_ensure_style(text_mb); - if (text_sb->style && text_sb->style->font->type == GDK_FONT_FONTSET) { - GtkStyle *style; - GdkFont *font; - - font = gtkut_font_load_from_fontset(prefs_common.normalfont); - if (font) { - style = gtk_style_copy(text_sb->style); - gdk_font_unref(style->font); - style->font = font; - gtk_widget_set_style(text_sb, style); - } + text = gtk_text_view_new(); + gtk_widget_show(text); + gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE); + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_WORD); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY); + gtk_text_buffer_add_selection_clipboard(buffer, clipboard); + + gtk_widget_ensure_style(text); + + if (prefs_common.normalfont) + font_desc = pango_font_description_from_string + (prefs_common.normalfont); + if (font_desc) { + gtk_widget_modify_font(text, font_desc); } - if (text_mb->style && text_mb->style->font->type == GDK_FONT_FONT) { - GtkStyle *style; - GdkFont *font; - - font = gdk_fontset_load(prefs_common.normalfont); - if (font) { - style = gtk_style_copy(text_mb->style); - gdk_font_unref(style->font); - style->font = font; - gtk_widget_set_style(text_mb, style); - } - } - gtk_widget_ref(scrolledwin_sb); - gtk_widget_ref(scrolledwin_mb); - - gtk_container_add(GTK_CONTAINER(scrolledwin_sb), text_sb); - gtk_container_add(GTK_CONTAINER(scrolledwin_mb), text_mb); - gtk_signal_connect(GTK_OBJECT(text_sb), "key_press_event", - GTK_SIGNAL_FUNC(textview_key_pressed), - textview); - gtk_signal_connect_after(GTK_OBJECT(text_sb), "button_press_event", - GTK_SIGNAL_FUNC(textview_button_pressed), - textview); - gtk_signal_connect_after(GTK_OBJECT(text_sb), "button_release_event", - GTK_SIGNAL_FUNC(textview_button_released), - textview); - gtk_signal_connect(GTK_OBJECT(text_mb), "key_press_event", - GTK_SIGNAL_FUNC(textview_key_pressed), - textview); - gtk_signal_connect_after(GTK_OBJECT(text_mb), "button_press_event", - GTK_SIGNAL_FUNC(textview_button_pressed), - textview); - gtk_signal_connect_after(GTK_OBJECT(text_mb), "button_release_event", - GTK_SIGNAL_FUNC(textview_button_released), - textview); - - gtk_widget_show(scrolledwin_sb); - gtk_widget_show(scrolledwin_mb); + pango_font_description_free(font_desc); + + gtk_widget_ref(scrolledwin); + + gtk_container_add(GTK_CONTAINER(scrolledwin), text); + + g_signal_connect(G_OBJECT(text), "key_press_event", + G_CALLBACK(textview_key_pressed), + textview); + + gtk_widget_show(scrolledwin); vbox = gtk_vbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), scrolledwin_sb, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0); gtk_widget_show(vbox); textview->vbox = vbox; - textview->scrolledwin = scrolledwin_sb; - textview->scrolledwin_sb = scrolledwin_sb; - textview->scrolledwin_mb = scrolledwin_mb; - textview->text = text_sb; - textview->text_sb = text_sb; - textview->text_mb = text_mb; - textview->text_is_mb = FALSE; + textview->scrolledwin = scrolledwin; + textview->text = text; textview->uri_list = NULL; textview->body_pos = 0; - textview->cur_pos = 0; textview->show_all_headers = FALSE; textview->last_buttonpress = GDK_NOTHING; textview->show_url_msgid = 0; @@ -285,13 +242,67 @@ TextView *textview_create(void) return textview; } +static void textview_create_tags(GtkTextView *text, TextView *textview) +{ + GtkTextBuffer *buffer = gtk_text_view_get_buffer(text); + GtkTextTag *tag; + + gtk_text_buffer_create_tag(buffer, "header", + "pixels-above-lines", 0, + "pixels-above-lines-set", TRUE, + "pixels-below-lines", 0, + "pixels-below-lines-set", TRUE, + "left-margin", 0, + "left-margin-set", TRUE, + NULL); + gtk_text_buffer_create_tag(buffer, "header_title", + "font", prefs_common.boldfont, + NULL); + gtk_text_buffer_create_tag(buffer, "quote0", + "foreground-gdk", "e_colors[0], + NULL); + gtk_text_buffer_create_tag(buffer, "quote1", + "foreground-gdk", "e_colors[1], + NULL); + gtk_text_buffer_create_tag(buffer, "quote2", + "foreground-gdk", "e_colors[2], + NULL); + gtk_text_buffer_create_tag(buffer, "emphasis", + "foreground-gdk", &emphasis_color, + NULL); + gtk_text_buffer_create_tag(buffer, "signature", + "foreground-gdk", &signature_color, + NULL); + tag = gtk_text_buffer_create_tag(buffer, "link", + "foreground-gdk", &uri_color, + NULL); +#if USE_GPGME + gtk_text_buffer_create_tag(buffer, "good-signature", + "foreground-gdk", &good_sig_color, + NULL); + gtk_text_buffer_create_tag(buffer, "bad-signature", + "foreground-gdk", &bad_sig_color, + NULL); + gtk_text_buffer_create_tag(buffer, "nocheck-signature", + "foreground-gdk", &nocheck_sig_color, + NULL); +#endif /*USE_GPGME */ + + g_signal_connect(G_OBJECT(tag), "event", + G_CALLBACK(textview_uri_button_pressed), textview); + } + void textview_init(TextView *textview) { - gtkut_widget_disable_theme_engine(textview->text_sb); - gtkut_widget_disable_theme_engine(textview->text_mb); +#warning FIXME_GTK2 +#if 0 + gtkut_widget_disable_theme_engine(textview->text); +#endif textview_update_message_colors(); textview_set_all_headers(textview, FALSE); textview_set_font(textview, NULL); + + textview_create_tags(GTK_TEXT_VIEW(textview->text), textview); } void textview_update_message_colors(void) @@ -319,7 +330,6 @@ void textview_update_message_colors(void) void textview_show_message(TextView *textview, MimeInfo *mimeinfo, const gchar *file) { - GtkSText *text; FILE *fp; const gchar *charset = NULL; GPtrArray *headers = NULL; @@ -339,28 +349,29 @@ void textview_show_message(TextView *textview, MimeInfo *mimeinfo, textview_set_font(textview, charset); textview_clear(textview); - text = GTK_STEXT(textview->text); - - gtk_stext_freeze(text); - if (fseek(fp, mimeinfo->fpos, SEEK_SET) < 0) perror("fseek"); headers = textview_scan_header(textview, fp); if (headers) { + GtkTextView *text = GTK_TEXT_VIEW(textview->text); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(text); + GtkTextIter iter; + textview_show_header(textview, headers); procheader_header_array_destroy(headers); - textview->body_pos = gtk_stext_get_length(text); + + gtk_text_buffer_get_end_iter(buffer, &iter); + textview->body_pos = gtk_text_iter_get_offset(&iter); } textview_add_parts(textview, mimeinfo, fp); - gtk_stext_thaw(text); - fclose(fp); + + textview_set_position(textview, 0); } void textview_show_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp) { - GtkSText *text; gchar buf[BUFFSIZE]; const gchar *boundary = NULL; gint boundary_len = 0; @@ -438,30 +449,34 @@ void textview_show_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp) textview_set_font(textview, charset); - text = GTK_STEXT(textview->text); - - gtk_stext_freeze(text); textview_clear(textview); if (headers) { + GtkTextView *text = GTK_TEXT_VIEW(textview->text); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(text); + GtkTextIter iter; + textview_show_header(textview, headers); procheader_header_array_destroy(headers); - textview->body_pos = gtk_stext_get_length(text); - if (!mimeinfo->main) - gtk_stext_insert(text, NULL, NULL, NULL, "\n", 1); + + gtk_text_buffer_get_end_iter(buffer, &iter); + textview->body_pos = gtk_text_iter_get_offset(&iter); + if (!mimeinfo->main) { + gtk_text_buffer_insert(buffer, &iter, "\n", 1); + } } if (mimeinfo->mime_type == MIME_MULTIPART || is_rfc822_part) textview_add_parts(textview, mimeinfo, fp); else textview_write_body(textview, mimeinfo, fp, charset); - - gtk_stext_thaw(text); } static void textview_add_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp) { - GtkSText *text = GTK_STEXT(textview->text); + GtkTextView *text; + GtkTextBuffer *buffer; + GtkTextIter iter; gchar buf[BUFFSIZE]; const gchar *boundary = NULL; gint boundary_len = 0; @@ -471,6 +486,10 @@ static void textview_add_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp) g_return_if_fail(mimeinfo != NULL); g_return_if_fail(fp != NULL); + text = GTK_TEXT_VIEW(textview->text); + buffer = gtk_text_view_get_buffer(text); + gtk_text_buffer_get_end_iter(buffer, &iter); + if (mimeinfo->mime_type == MIME_MULTIPART) return; if (fseek(fp, mimeinfo->fpos, SEEK_SET) < 0) { @@ -489,17 +508,13 @@ static void textview_add_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp) if (mimeinfo->mime_type == MIME_MESSAGE_RFC822) { headers = textview_scan_header(textview, fp); if (headers) { - gtk_stext_freeze(text); - gtk_stext_insert(text, NULL, NULL, NULL, "\n", 1); + gtk_text_buffer_insert(buffer, &iter, "\n", 1); textview_show_header(textview, headers); procheader_header_array_destroy(headers); - gtk_stext_thaw(text); } return; } - gtk_stext_freeze(text); - #if USE_GPGME if (mimeinfo->sigstatus) g_snprintf(buf, sizeof(buf), "\n[%s (%s)]\n", @@ -517,6 +532,8 @@ static void textview_add_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp) #if USE_GPGME if (mimeinfo->sigstatus && !mimeinfo->sigstatus_full) { +#warning FIXME_GTK2 +#if 0 gchar *tmp; /* use standard font */ gpointer oldfont = textview->msgfont; @@ -529,28 +546,35 @@ static void textview_add_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp) textview->msgfont = (GdkFont *)oldfont; oldfont = NULL; g_free(tmp); +#else + gchar *tmp; + + tmp = g_strconcat("pgp: ", _("Check signature"), NULL); + textview_write_link(textview, buf, tmp, NULL); +#endif } else if (mimeinfo->sigstatus) { - GdkColor *color; + const gchar *color; if (!strcmp(mimeinfo->sigstatus, _("Good signature"))) - color = &good_sig_color; + color = "good-signature"; else if (!strcmp(mimeinfo->sigstatus, _("BAD signature"))) - color = &bad_sig_color; + color = "bad-signature"; else - color = &nocheck_sig_color; - gtk_stext_insert(text, NULL, color, NULL, buf, -1); + color = "nocheck-signature"; + gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, "\n", 1, + color, NULL); } else #endif if (mimeinfo->mime_type != MIME_TEXT && mimeinfo->mime_type != MIME_TEXT_HTML && mimeinfo->mime_type != MIME_TEXT_ENRICHED) { - gtk_stext_insert(text, NULL, NULL, NULL, buf, -1); + gtk_text_buffer_insert(buffer, &iter, buf, -1); } else { if (!mimeinfo->main && mimeinfo->parent && mimeinfo->parent->children != mimeinfo) - gtk_stext_insert(text, NULL, NULL, NULL, buf, -1); + gtk_text_buffer_insert(buffer, &iter, buf, -1); else if (prefs_common.display_header) - gtk_stext_insert(text, NULL, NULL, NULL, "\n", 1); + gtk_text_buffer_insert(buffer, &iter, "\n", 1); if (textview->messageview->forced_charset) charset = textview->messageview->forced_charset; else if (prefs_common.force_charset) @@ -559,8 +583,6 @@ static void textview_add_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp) charset = mimeinfo->charset; textview_write_body(textview, mimeinfo, fp, charset); } - - gtk_stext_thaw(text); } static void textview_add_parts(TextView *textview, MimeInfo *mimeinfo, FILE *fp) @@ -586,19 +608,22 @@ static void textview_add_parts(TextView *textview, MimeInfo *mimeinfo, FILE *fp) } #define TEXT_INSERT(str) \ - gtk_stext_insert(text, textview->msgfont, NULL, NULL, str, -1) + gtk_text_buffer_insert(buffer, &iter, str, -1) void textview_show_mime_part(TextView *textview, MimeInfo *partinfo) { - GtkSText *text; + GtkTextView *text; + GtkTextBuffer *buffer; + GtkTextIter iter; if (!partinfo) return; textview_set_font(textview, NULL); - text = GTK_STEXT(textview->text); textview_clear(textview); - gtk_stext_freeze(text); + text = GTK_TEXT_VIEW(textview->text); + buffer = gtk_text_view_get_buffer(text); + gtk_text_buffer_get_start_iter(buffer, &iter); TEXT_INSERT(_("To save this part, pop up the context menu with ")); TEXT_INSERT(_("right click and select `Save as...', ")); @@ -611,22 +636,23 @@ void textview_show_mime_part(TextView *textview, MimeInfo *partinfo) TEXT_INSERT(_("`Open' or `Open with...', ")); TEXT_INSERT(_("or double-click, or click the center button, ")); TEXT_INSERT(_("or press `l' key.")); - - gtk_stext_thaw(text); } #if USE_GPGME void textview_show_signature_part(TextView *textview, MimeInfo *partinfo) { - GtkSText *text; + GtkTextView *text; + GtkTextBuffer *buffer; + GtkTextIter iter; if (!partinfo) return; textview_set_font(textview, NULL); - text = GTK_STEXT(textview->text); textview_clear(textview); - gtk_stext_freeze(text); + text = GTK_TEXT_VIEW(textview->text); + buffer = gtk_text_view_get_buffer(text); + gtk_text_buffer_get_start_iter(buffer, &iter); if (partinfo->sigstatus_full == NULL) { TEXT_INSERT(_("This signature has not been checked yet.\n")); @@ -635,8 +661,6 @@ void textview_show_signature_part(TextView *textview, MimeInfo *partinfo) } else { TEXT_INSERT(partinfo->sigstatus_full); } - - gtk_stext_thaw(text); } #endif /* USE_GPGME */ @@ -998,18 +1022,22 @@ static gchar *make_email_string(const gchar *bp, const gchar *ep) last->next = NULL; \ } else { \ g_warning("alloc error scanning URIs\n"); \ - gtk_stext_insert(text, textview->msgfont, fg_color, NULL, \ - linebuf, -1); \ + gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, \ + linebuf, -1, \ + fg_tag, NULL); \ return; \ } /* textview_make_clickable_parts() - colorizes clickable parts */ static void textview_make_clickable_parts(TextView *textview, - GdkFont *font, - GdkColor *fg_color, - GdkColor *uri_color, + const gchar *fg_tag, + const gchar *uri_tag, const gchar *linebuf) { + GtkTextView *text = GTK_TEXT_VIEW(textview->text); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(text); + GtkTextIter iter; + /* parse table - in order of priority */ struct table { const gchar *needle; /* token */ @@ -1046,7 +1074,7 @@ static void textview_make_clickable_parts(TextView *textview, struct txtpos *next; /* next */ } head = {NULL, NULL, 0, NULL}, *last = &head; - GtkSText *text = GTK_STEXT(textview->text); + gtk_text_buffer_get_end_iter(buffer, &iter); /* parse for clickable parts, and build a list of begin and end positions */ for (walk = linebuf, n = 0;;) { @@ -1090,25 +1118,32 @@ static void textview_make_clickable_parts(TextView *textview, uri = g_new(RemoteURI, 1); if (last->bp - normal_text > 0) - gtk_stext_insert(text, font, - fg_color, NULL, - normal_text, - last->bp - normal_text); + gtk_text_buffer_insert_with_tags_by_name + (buffer, &iter, + normal_text, + last->bp - normal_text, + fg_tag, NULL); uri->uri = parser[last->pti].build_uri(last->bp, last->ep); - uri->start = gtk_stext_get_point(text); - gtk_stext_insert(text, font, uri_color, - NULL, last->bp, last->ep - last->bp); - uri->end = gtk_stext_get_point(text); + uri->start = gtk_text_iter_get_offset(&iter); + gtk_text_buffer_insert_with_tags_by_name + (buffer, &iter, + last->bp, last->ep - last->bp, + uri_tag, NULL); + uri->end = gtk_text_iter_get_offset(&iter); textview->uri_list = g_slist_append(textview->uri_list, uri); } if (*normal_text) - gtk_stext_insert(text, font, fg_color, - NULL, normal_text, -1); - } else - gtk_stext_insert(text, font, fg_color, NULL, linebuf, -1); + gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, + normal_text, -1, + fg_tag, NULL); + } else { + gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, + linebuf, -1, + fg_tag, NULL); + } } #undef ADD_TXT_POS @@ -1116,11 +1151,20 @@ static void textview_make_clickable_parts(TextView *textview, static void textview_write_line(TextView *textview, const gchar *str, CodeConverter *conv) { - GtkSText *text = GTK_STEXT(textview->text); + GtkTextView *text; + GtkTextBuffer *buffer; + GtkTextIter iter; gchar buf[BUFFSIZE]; - GdkColor *fg_color; + gchar *fg_color; gint quotelevel = -1; + gchar quote_tag_str[10]; + text = GTK_TEXT_VIEW(textview->text); + buffer = gtk_text_view_get_buffer(text); + gtk_text_buffer_get_end_iter(buffer, &iter); + +#warning FIXME_GTK2 +#if 0 if (!conv) { if (textview->text_is_mb) conv_localetodisp(buf, sizeof(buf), str); @@ -1130,6 +1174,12 @@ static void textview_write_line(TextView *textview, const gchar *str, conv_localetodisp(buf, sizeof(buf), str); else if (textview->text_is_mb) conv_unreadable_locale(buf); +#else + if (!conv) + strncpy2(buf, str, sizeof(buf)); + else if (conv_convert(conv, buf, sizeof(buf), str) < 0) + conv_localetodisp(buf, sizeof(buf), str); +#endif strcrchomp(buf); if (prefs_common.conv_mb_alnum) conv_mb_alnum(buf); @@ -1155,30 +1205,30 @@ static void textview_write_line(TextView *textview, const gchar *str, if (quotelevel == -1) fg_color = NULL; - else - fg_color = "e_colors[quotelevel]; + else { + g_snprintf(quote_tag_str, sizeof(quote_tag_str), + "quote%d", quotelevel); + fg_color = quote_tag_str; + } if (prefs_common.enable_color && (strcmp(buf,"-- \n") == 0 || textview->is_in_signature)) { - fg_color = &signature_color; + fg_color = "signature"; textview->is_in_signature = TRUE; } - - if (prefs_common.head_space && spacingfont && buf[0] != '\n') - gtk_stext_insert(text, spacingfont, NULL, NULL, " ", 1); if (prefs_common.enable_color) - textview_make_clickable_parts(textview, textview->msgfont, - fg_color, &uri_color, buf); - else - textview_make_clickable_parts(textview, textview->msgfont, - fg_color, NULL, buf); + textview_make_clickable_parts(textview, fg_color, "link", buf); + else + textview_make_clickable_parts(textview, fg_color, NULL, buf); } void textview_write_link(TextView *textview, const gchar *str, const gchar *uri, CodeConverter *conv) { GdkColor *link_color = NULL; - GtkSText *text = GTK_STEXT(textview->text); + GtkTextView *text; + GtkTextBuffer *buffer; + GtkTextIter iter; gchar buf[BUFFSIZE]; gchar *bufp; RemoteURI *r_uri; @@ -1186,6 +1236,12 @@ void textview_write_link(TextView *textview, const gchar *str, if (*str == '\0') return; + text = GTK_TEXT_VIEW(textview->text); + buffer = gtk_text_view_get_buffer(text); + gtk_text_buffer_get_end_iter(buffer, &iter); + +#warning FIXME_GTK2 +#if 0 if (!conv) { if (textview->text_is_mb) conv_localetodisp(buf, sizeof(buf), str); @@ -1195,37 +1251,44 @@ void textview_write_link(TextView *textview, const gchar *str, conv_localetodisp(buf, sizeof(buf), str); else if (textview->text_is_mb) conv_unreadable_locale(buf); +#else + if (!conv) + strncpy2(buf, str, sizeof(buf)); + else if (conv_convert(conv, buf, sizeof(buf), str) < 0) + conv_localetodisp(buf, sizeof(buf), str); +#endif strcrchomp(buf); + gtk_text_buffer_get_end_iter(buffer, &iter); + for (bufp = buf; isspace(*bufp); bufp++) - gtk_stext_insert(text, textview->msgfont, NULL, NULL, bufp, 1); + gtk_text_buffer_insert(buffer, &iter, bufp, 1); if (prefs_common.enable_color) { link_color = &uri_color; } r_uri = g_new(RemoteURI, 1); r_uri->uri = g_strdup(uri); - r_uri->start = gtk_stext_get_point(text); - gtk_stext_insert(text, textview->msgfont, link_color, NULL, bufp, -1); - r_uri->end = gtk_stext_get_point(text); + r_uri->start = gtk_text_iter_get_offset(&iter); + gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, bufp, -1, + "link", NULL); + r_uri->end = gtk_text_iter_get_offset(&iter); textview->uri_list = g_slist_append(textview->uri_list, r_uri); } void textview_clear(TextView *textview) { - GtkSText *text = GTK_STEXT(textview->text); + GtkTextView *text = GTK_TEXT_VIEW(textview->text); + GtkTextBuffer *buffer; - gtk_stext_freeze(text); - gtk_stext_set_point(text, 0); - gtk_stext_forward_delete(text, gtk_stext_get_length(text)); - gtk_stext_thaw(text); + buffer = gtk_text_view_get_buffer(text); + gtk_text_buffer_set_text(buffer, "\0", -1); textview_uri_list_remove_all(textview->uri_list); textview->uri_list = NULL; textview->body_pos = 0; - textview->cur_pos = 0; } void textview_destroy(TextView *textview) @@ -1233,16 +1296,6 @@ void textview_destroy(TextView *textview) textview_uri_list_remove_all(textview->uri_list); textview->uri_list = NULL; - if (!textview->scrolledwin_sb->parent) - gtk_widget_destroy(textview->scrolledwin_sb); - if (!textview->scrolledwin_mb->parent) - gtk_widget_destroy(textview->scrolledwin_mb); - - if (textview->msgfont) - gdk_font_unref(textview->msgfont); - if (textview->boldfont) - gdk_font_unref(textview->boldfont); - g_free(textview); } @@ -1253,102 +1306,26 @@ void textview_set_all_headers(TextView *textview, gboolean all_headers) void textview_set_font(TextView *textview, const gchar *codeset) { - gboolean use_fontset = TRUE; - - /* In multi-byte mode, GtkSText can't display 8bit characters - correctly, so it must be single-byte mode. */ - if (MB_CUR_MAX > 1) { - if (codeset && conv_get_current_charset() != C_UTF_8) { - if (!g_strncasecmp(codeset, "ISO-8859-", 9) || - !g_strcasecmp(codeset, "BALTIC")) - use_fontset = FALSE; - else if (conv_get_current_charset() != C_EUC_JP && - (!g_strncasecmp(codeset, "KOI8-", 5) || - !g_strncasecmp(codeset, "CP", 2) || - !g_strncasecmp(codeset, "WINDOWS-", 8))) - use_fontset = FALSE; - } - } else - use_fontset = FALSE; - - if (textview->text_is_mb && !use_fontset) { - GtkWidget *parent; - - parent = textview->scrolledwin_mb->parent; - gtkut_container_remove(GTK_CONTAINER(parent), - textview->scrolledwin_mb); - gtk_container_add(GTK_CONTAINER(parent), - textview->scrolledwin_sb); - - textview->text = textview->text_sb; - textview->text_is_mb = FALSE; - } else if (!textview->text_is_mb && use_fontset) { - GtkWidget *parent; - - parent = textview->scrolledwin_sb->parent; - gtkut_container_remove(GTK_CONTAINER(parent), - textview->scrolledwin_sb); - gtk_container_add(GTK_CONTAINER(parent), - textview->scrolledwin_mb); - - textview->text = textview->text_mb; - textview->text_is_mb = TRUE; - } - if (prefs_common.textfont) { - GdkFont *font; - - if (use_fontset) { - if (text_mb_font) { - text_mb_font->ascent = text_mb_font_orig_ascent; - text_mb_font->descent = text_mb_font_orig_descent; - } - font = gdk_fontset_load(prefs_common.textfont); - if (font && text_mb_font != font) { - if (text_mb_font) - gdk_font_unref(text_mb_font); - text_mb_font = font; - text_mb_font_orig_ascent = font->ascent; - text_mb_font_orig_descent = font->descent; - } - } else { - if (text_sb_font) { - text_sb_font->ascent = text_sb_font_orig_ascent; - text_sb_font->descent = text_sb_font_orig_descent; - } - if (MB_CUR_MAX > 1) - font = gdk_font_load("-*-courier-medium-r-normal--14-*-*-*-*-*-iso8859-1"); - else - font = gtkut_font_load_from_fontset - (prefs_common.textfont); - if (font && text_sb_font != font) { - if (text_sb_font) - gdk_font_unref(text_sb_font); - text_sb_font = font; - text_sb_font_orig_ascent = font->ascent; - text_sb_font_orig_descent = font->descent; - } - } - - if (font) { - gint ascent, descent; - - descent = prefs_common.line_space / 2; - ascent = prefs_common.line_space - descent; - font->ascent += ascent; - font->descent += descent; - - if (textview->msgfont) - gdk_font_unref(textview->msgfont); - textview->msgfont = font; - gdk_font_ref(font); + PangoFontDescription *font_desc = NULL; + + if (prefs_common.textfont) + font_desc = pango_font_description_from_string + (prefs_common.textfont); + if (font_desc) { + gtk_widget_modify_font(textview->text, font_desc); + pango_font_description_free(font_desc); } } - - if (!textview->boldfont && prefs_common.boldfont) - textview->boldfont = gtkut_font_load(prefs_common.boldfont); - if (!spacingfont) - spacingfont = gdk_font_load("-*-*-medium-r-normal--6-*"); + gtk_text_view_set_pixels_above_lines(GTK_TEXT_VIEW(textview->text), + prefs_common.line_space / 2); + gtk_text_view_set_pixels_below_lines(GTK_TEXT_VIEW(textview->text), + prefs_common.line_space / 2); + if (prefs_common.head_space) { + gtk_text_view_set_left_margin(GTK_TEXT_VIEW(textview->text), 6); + } else { + gtk_text_view_set_left_margin(GTK_TEXT_VIEW(textview->text), 0); + } } enum @@ -1369,12 +1346,12 @@ enum void textview_set_position(TextView *textview, gint pos) { - if (pos < 0) { - textview->cur_pos = - gtk_stext_get_length(GTK_STEXT(textview->text)); - } else { - textview->cur_pos = pos; - } + GtkTextView *text = GTK_TEXT_VIEW(textview->text); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(text); + GtkTextIter iter; + + gtk_text_buffer_get_iter_at_offset(buffer, &iter, pos); + gtk_text_buffer_place_cursor(buffer, &iter); } static GPtrArray *textview_scan_header(TextView *textview, FILE *fp) @@ -1436,23 +1413,32 @@ static GPtrArray *textview_scan_header(TextView *textview, FILE *fp) static void textview_show_header(TextView *textview, GPtrArray *headers) { - GtkSText *text = GTK_STEXT(textview->text); + GtkTextView *text = GTK_TEXT_VIEW(textview->text); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(text); + GtkTextIter iter; Header *header; gint i; g_return_if_fail(headers != NULL); - gtk_stext_freeze(text); - for (i = 0; i < headers->len; i++) { header = g_ptr_array_index(headers, i); g_return_if_fail(header->name != NULL); - gtk_stext_insert(text, textview->boldfont, NULL, NULL, - header->name, -1); + gtk_text_buffer_get_end_iter (buffer, &iter); + gtk_text_buffer_insert_with_tags_by_name + (buffer, &iter, header->name, -1, + "header_title", "header", NULL); if (header->name[strlen(header->name) - 1] != ' ') +#warning FIXME_GTK2 +#if 0 gtk_stext_insert(text, textview->boldfont, NULL, NULL, " ", 1); +#else + gtk_text_buffer_insert_with_tags_by_name + (buffer, &iter, " ", 1, + "header_title", "header", NULL); +#endif if (procheader_headername_equal(header->name, "Subject") || procheader_headername_equal(header->name, "From") || @@ -1460,34 +1446,39 @@ static void textview_show_header(TextView *textview, GPtrArray *headers) procheader_headername_equal(header->name, "Cc")) unfold_line(header->body); +#warning FIXME_GTK2 +#if 0 if (textview->text_is_mb == TRUE) conv_unreadable_locale(header->body); +#endif if (prefs_common.enable_color && (procheader_headername_equal(header->name, "X-Mailer") || procheader_headername_equal(header->name, "X-Newsreader")) && - strstr(header->body, "Sylpheed") != NULL) - gtk_stext_insert(text, NULL, &emphasis_color, NULL, - header->body, -1); - else if (prefs_common.enable_color) { - textview_make_clickable_parts(textview, - NULL, NULL, &uri_color, + strstr(header->body, "Sylpheed") != NULL) { + gtk_text_buffer_get_end_iter (buffer, &iter); + gtk_text_buffer_insert_with_tags_by_name + (buffer, &iter, header->body, -1, + "header", "emphasis", NULL); + } else if (prefs_common.enable_color) { + textview_make_clickable_parts(textview, "header", "link", header->body); } else { - textview_make_clickable_parts(textview, - NULL, NULL, NULL, + textview_make_clickable_parts(textview, "header", NULL, header->body); } - gtk_stext_insert(text, textview->msgfont, NULL, NULL, "\n", 1); + gtk_text_buffer_get_end_iter (buffer, &iter); + gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, "\n", 1, + "header", NULL); } - - gtk_stext_thaw(text); } gboolean textview_search_string(TextView *textview, const gchar *str, gboolean case_sens) { +#warning FIXME_GTK2 /* currently, these search functions ignores case_sens */ +#if 0 GtkSText *text = GTK_STEXT(textview->text); gint pos; gint len; @@ -1509,11 +1500,47 @@ gboolean textview_search_string(TextView *textview, const gchar *str, } return FALSE; +#else + GtkTextView *text = GTK_TEXT_VIEW(textview->text); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(text); + GtkTextMark *mark; + GtkTextIter iter, start, end, *pos; + gboolean found; + gint insert_offset, selbound_offset; + + /* reset selection */ + mark = gtk_text_buffer_get_mark(buffer, "insert"); + gtk_text_buffer_get_iter_at_mark(buffer, &start, mark); + insert_offset = gtk_text_iter_get_offset(&start); + mark = gtk_text_buffer_get_mark(buffer, "selection_bound"); + gtk_text_buffer_get_iter_at_mark(buffer, &end, mark); + selbound_offset = gtk_text_iter_get_offset(&end); + + pos = insert_offset > selbound_offset ? &start : &end; + gtk_text_buffer_place_cursor(buffer, pos); + + /* search */ + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark); + found = gtk_text_iter_forward_search(&iter, str, + GTK_TEXT_SEARCH_VISIBLE_ONLY, + &start, &end, NULL); + if (found) { + gtk_text_buffer_place_cursor(buffer, &start); + gtk_text_buffer_move_mark_by_name(buffer, "selection_bound", &end); + mark = gtk_text_buffer_get_mark(buffer, "insert"); + gtk_text_view_scroll_mark_onscreen(text, mark); + } + + return found; +#endif } gboolean textview_search_string_backward(TextView *textview, const gchar *str, gboolean case_sens) { +#warning FIXME_GTK2 +#if 0 GtkSText *text = GTK_STEXT(textview->text); gint pos; wchar_t *wcs; @@ -1550,11 +1577,46 @@ gboolean textview_search_string_backward(TextView *textview, const gchar *str, g_free(wcs); return found; +#else + GtkTextView *text = GTK_TEXT_VIEW(textview->text); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(text); + GtkTextMark *mark; + GtkTextIter iter, start, end, *pos; + gboolean found; + gint insert_offset, selbound_offset; + + /* reset selection */ + mark = gtk_text_buffer_get_mark(buffer, "insert"); + gtk_text_buffer_get_iter_at_mark(buffer, &start, mark); + insert_offset = gtk_text_iter_get_offset(&start); + mark = gtk_text_buffer_get_mark(buffer, "selection_bound"); + gtk_text_buffer_get_iter_at_mark(buffer, &end, mark); + selbound_offset = gtk_text_iter_get_offset(&end); + + pos = insert_offset < selbound_offset ? &start : &end; + gtk_text_buffer_place_cursor(buffer, pos); + + /* search */ + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark); + found = gtk_text_iter_backward_search(&iter, str, + GTK_TEXT_SEARCH_VISIBLE_ONLY, + &start, &end, NULL); + if (found) { + gtk_text_buffer_place_cursor(buffer, &end); + gtk_text_buffer_move_mark_by_name(buffer, "selection_bound", &start); + mark = gtk_text_buffer_get_mark(buffer, "insert"); + gtk_text_view_scroll_mark_onscreen(text, mark); + } + + return found; +#endif } void textview_scroll_one_line(TextView *textview, gboolean up) { - GtkSText *text = GTK_STEXT(textview->text); + GtkTextView *text = GTK_TEXT_VIEW(textview->text); + GtkAdjustment *vadj = text->vadjustment; gfloat upper; if (prefs_common.enable_smooth_scroll) { @@ -1563,30 +1625,31 @@ void textview_scroll_one_line(TextView *textview, gboolean up) } if (!up) { - upper = text->vadj->upper - text->vadj->page_size; - if (text->vadj->value < upper) { - text->vadj->value += - text->vadj->step_increment * 4; - text->vadj->value = - MIN(text->vadj->value, upper); - gtk_signal_emit_by_name(GTK_OBJECT(text->vadj), - "value_changed"); + upper = vadj->upper - vadj->page_size; + if (vadj->value < upper) { + vadj->value += + vadj->step_increment * 4; + vadj->value = + MIN(vadj->value, upper); + g_signal_emit_by_name(G_OBJECT(vadj), + "value_changed", 0); } } else { - if (text->vadj->value > 0.0) { - text->vadj->value -= - text->vadj->step_increment * 4; - text->vadj->value = - MAX(text->vadj->value, 0.0); - gtk_signal_emit_by_name(GTK_OBJECT(text->vadj), - "value_changed"); + if (vadj->value > 0.0) { + vadj->value -= + vadj->step_increment * 4; + vadj->value = + MAX(vadj->value, 0.0); + g_signal_emit_by_name(G_OBJECT(vadj), + "value_changed", 0); } } } gboolean textview_scroll_page(TextView *textview, gboolean up) { - GtkSText *text = GTK_STEXT(textview->text); + GtkTextView *text = GTK_TEXT_VIEW(textview->text); + GtkAdjustment *vadj = text->vadjustment; gfloat upper; gfloat page_incr; @@ -1594,25 +1657,25 @@ gboolean textview_scroll_page(TextView *textview, gboolean up) return textview_smooth_scroll_page(textview, up); if (prefs_common.scroll_halfpage) - page_incr = text->vadj->page_increment / 2; + page_incr = vadj->page_increment / 2; else - page_incr = text->vadj->page_increment; + page_incr = vadj->page_increment; if (!up) { - upper = text->vadj->upper - text->vadj->page_size; - if (text->vadj->value < upper) { - text->vadj->value += page_incr; - text->vadj->value = MIN(text->vadj->value, upper); - gtk_signal_emit_by_name(GTK_OBJECT(text->vadj), - "value_changed"); + upper = vadj->upper - vadj->page_size; + if (vadj->value < upper) { + vadj->value += page_incr; + vadj->value = MIN(vadj->value, upper); + g_signal_emit_by_name(G_OBJECT(vadj), + "value_changed", 0); } else return FALSE; } else { - if (text->vadj->value > 0.0) { - text->vadj->value -= page_incr; - text->vadj->value = MAX(text->vadj->value, 0.0); - gtk_signal_emit_by_name(GTK_OBJECT(text->vadj), - "value_changed"); + if (vadj->value > 0.0) { + vadj->value -= page_incr; + vadj->value = MAX(vadj->value, 0.0); + g_signal_emit_by_name(G_OBJECT(vadj), + "value_changed", 0); } else return FALSE; } @@ -1624,7 +1687,8 @@ static void textview_smooth_scroll_do(TextView *textview, gfloat old_value, gfloat last_value, gint step) { - GtkSText *text = GTK_STEXT(textview->text); + GtkTextView *text = GTK_TEXT_VIEW(textview->text); + GtkAdjustment *vadj = text->vadjustment; gint change_value; gboolean up; gint i; @@ -1637,33 +1701,36 @@ static void textview_smooth_scroll_do(TextView *textview, up = TRUE; } - gdk_key_repeat_disable(); +#warning FIXME_GTK2 + /* gdk_key_repeat_disable(); */ for (i = step; i <= change_value; i += step) { - text->vadj->value = old_value + (up ? -i : i); - gtk_signal_emit_by_name(GTK_OBJECT(text->vadj), - "value_changed"); + vadj->value = old_value + (up ? -i : i); + g_signal_emit_by_name(G_OBJECT(vadj), + "value_changed", 0); } - text->vadj->value = last_value; - gtk_signal_emit_by_name(GTK_OBJECT(text->vadj), "value_changed"); + vadj->value = last_value; + g_signal_emit_by_name(G_OBJECT(vadj), "value_changed", 0); - gdk_key_repeat_restore(); +#warning FIXME_GTK2 + /* gdk_key_repeat_restore(); */ } static void textview_smooth_scroll_one_line(TextView *textview, gboolean up) { - GtkSText *text = GTK_STEXT(textview->text); + GtkTextView *text = GTK_TEXT_VIEW(textview->text); + GtkAdjustment *vadj = text->vadjustment; gfloat upper; gfloat old_value; gfloat last_value; if (!up) { - upper = text->vadj->upper - text->vadj->page_size; - if (text->vadj->value < upper) { - old_value = text->vadj->value; - last_value = text->vadj->value + - text->vadj->step_increment * 4; + upper = vadj->upper - vadj->page_size; + if (vadj->value < upper) { + old_value = vadj->value; + last_value = vadj->value + + vadj->step_increment * 4; last_value = MIN(last_value, upper); textview_smooth_scroll_do(textview, old_value, @@ -1671,10 +1738,10 @@ static void textview_smooth_scroll_one_line(TextView *textview, gboolean up) prefs_common.scroll_step); } } else { - if (text->vadj->value > 0.0) { - old_value = text->vadj->value; - last_value = text->vadj->value - - text->vadj->step_increment * 4; + if (vadj->value > 0.0) { + old_value = vadj->value; + last_value = vadj->value - + vadj->step_increment * 4; last_value = MAX(last_value, 0.0); textview_smooth_scroll_do(textview, old_value, @@ -1686,22 +1753,23 @@ static void textview_smooth_scroll_one_line(TextView *textview, gboolean up) static gboolean textview_smooth_scroll_page(TextView *textview, gboolean up) { - GtkSText *text = GTK_STEXT(textview->text); + GtkTextView *text = GTK_TEXT_VIEW(textview->text); + GtkAdjustment *vadj = text->vadjustment; gfloat upper; gfloat page_incr; gfloat old_value; gfloat last_value; if (prefs_common.scroll_halfpage) - page_incr = text->vadj->page_increment / 2; + page_incr = vadj->page_increment / 2; else - page_incr = text->vadj->page_increment; + page_incr = vadj->page_increment; if (!up) { - upper = text->vadj->upper - text->vadj->page_size; - if (text->vadj->value < upper) { - old_value = text->vadj->value; - last_value = text->vadj->value + page_incr; + upper = vadj->upper - vadj->page_size; + if (vadj->value < upper) { + old_value = vadj->value; + last_value = vadj->value + page_incr; last_value = MIN(last_value, upper); textview_smooth_scroll_do(textview, old_value, @@ -1710,9 +1778,9 @@ static gboolean textview_smooth_scroll_page(TextView *textview, gboolean up) } else return FALSE; } else { - if (text->vadj->value > 0.0) { - old_value = text->vadj->value; - last_value = text->vadj->value - page_incr; + if (vadj->value > 0.0) { + old_value = vadj->value; + last_value = vadj->value - page_incr; last_value = MAX(last_value, 0.0); textview_smooth_scroll_do(textview, old_value, @@ -1725,12 +1793,19 @@ static gboolean textview_smooth_scroll_page(TextView *textview, gboolean up) return TRUE; } +#warning FIXME_GTK2 +#if 0 #define KEY_PRESS_EVENT_STOP() \ if (gtk_signal_n_emissions_by_name \ (GTK_OBJECT(widget), "key_press_event") > 0) { \ - gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), \ - "key_press_event"); \ + g_signal_stop_emission_by_name(G_OBJECT(widget), \ + "key_press_event"); \ } +#else +#define KEY_PRESS_EVENT_STOP() \ + g_signal_stop_emission_by_name(G_OBJECT(widget), \ + "key_press_event"); +#endif static gint textview_key_pressed(GtkWidget *widget, GdkEventKey *event, TextView *textview) @@ -1816,6 +1891,8 @@ static gint show_url_timeout_cb(gpointer data) return FALSE; } +#warning FIXME_GTK2 +#if 0 static gint textview_button_pressed(GtkWidget *widget, GdkEventButton *event, TextView *textview) { @@ -1920,6 +1997,58 @@ static gint textview_button_released(GtkWidget *widget, GdkEventButton *event, textview->last_buttonpress = event->type; return FALSE; } +#else +static gboolean textview_uri_button_pressed(GtkTextTag *tag, GObject *obj, + GdkEvent *event, GtkTextIter *iter, + TextView *textview) +{ + GtkTextIter start_iter, end_iter; + gint start_pos, end_pos; + GdkEventButton *bevent; + + if (event->type != GDK_BUTTON_PRESS && event->type != GDK_2BUTTON_PRESS) + return FALSE; + + bevent = (GdkEventButton *) event; + + if (event && + ((event->type == GDK_2BUTTON_PRESS && bevent->button == 1) || + bevent->button == 2)) { + GSList *cur; + + start_iter = *iter; + + if(!gtk_text_iter_backward_to_tag_toggle(&start_iter, tag)) { + debug_print("Can't find start."); + return FALSE; + } + start_pos = gtk_text_iter_get_offset(&start_iter); + + end_iter = *iter; + if(!gtk_text_iter_forward_to_tag_toggle(&end_iter, tag)) { + debug_print("Can't find end"); + return FALSE; + } + end_pos = gtk_text_iter_get_offset(&end_iter); + + for (cur = textview->uri_list; cur != NULL; cur = cur->next) { + RemoteURI *uri = (RemoteURI *)cur->data; + + if (start_pos == uri->start && + end_pos == uri->end) { + if (!g_strncasecmp(uri->uri, "mailto:", 7)) + compose_new(NULL, uri->uri + 7, NULL); + else + open_uri(uri->uri, + prefs_common.uri_cmd); + return TRUE; + } + } + } + + return FALSE; +} +#endif static void textview_uri_list_remove_all(GSList *uri_list) { diff --git a/src/textview.h b/src/textview.h index 5ed886ef4..935ab9883 100644 --- a/src/textview.h +++ b/src/textview.h @@ -36,25 +36,16 @@ struct _TextView { GtkWidget *vbox; GtkWidget *scrolledwin; - GtkWidget *scrolledwin_sb; - GtkWidget *scrolledwin_mb; GtkWidget *text; - GtkWidget *text_sb; - GtkWidget *text_mb; GtkWidget *popup_menu; GtkItemFactory *popup_factory; - gboolean text_is_mb; gboolean default_text; gboolean is_in_signature; GSList *uri_list; gint body_pos; - gint cur_pos; - - GdkFont *msgfont; - GdkFont *boldfont; gboolean show_all_headers; diff --git a/src/toolbar.c b/src/toolbar.c index 79598b292..e02bc9985 100644 --- a/src/toolbar.c +++ b/src/toolbar.c @@ -1499,13 +1499,11 @@ Toolbar *toolbar_create(ToolbarType type, toolbar_data = g_new0(Toolbar, 1); - toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, - GTK_TOOLBAR_BOTH); + toolbar = gtk_toolbar_new(); 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); + gtk_toolbar_set_orientation(GTK_TOOLBAR(toolbar), GTK_ORIENTATION_HORIZONTAL); + gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_BOTH); for (cur = toolbar_list; cur != NULL; cur = cur->next) { @@ -1531,7 +1529,7 @@ Toolbar *toolbar_create(ToolbarType type, toolbar_item->text, (""), (""), - icon_wid, toolbar_buttons_cb, + icon_wid, G_CALLBACK(toolbar_buttons_cb), toolbar_item); switch (toolbar_item->index) { @@ -1560,7 +1558,7 @@ Toolbar *toolbar_create(ToolbarType type, _("News"), (""), (""), - icon_news, toolbar_buttons_cb, + icon_news, G_CALLBACK(toolbar_buttons_cb), toolbar_item); toolbar_data->compose_mail_btn = item; gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips), diff --git a/src/undo.c b/src/undo.c index f14c9e470..d20dcafe0 100644 --- a/src/undo.c +++ b/src/undo.c @@ -32,7 +32,6 @@ #include "undo.h" #include "utils.h" #include "prefs_common.h" -#include "gtkstext.h" typedef struct _UndoInfo UndoInfo; @@ -58,20 +57,20 @@ static void undo_add (const gchar *text, gint end_pos, UndoAction action, UndoMain *undostruct); -static gint undo_get_selection (GtkEditable *text, +static gint undo_get_selection (GtkTextView *textview, guint *start, guint *end); -static void undo_insert_text_cb (GtkEditable *editable, +static void undo_insert_text_cb (GtkTextBuffer *textbuf, + GtkTextIter *iter, gchar *new_text, - gint new_text_length, - gint *position, + gint new_text_length, UndoMain *undostruct); -static void undo_delete_text_cb (GtkEditable *editable, - gint start_pos, - gint end_pos, +static void undo_delete_text_cb (GtkTextBuffer *textbuf, + GtkTextIter *start, + GtkTextIter *end, UndoMain *undostruct); -static void undo_paste_clipboard_cb (GtkEditable *editable, +static void undo_paste_clipboard_cb (GtkTextView *textview, UndoMain *undostruct); void undo_undo (UndoMain *undostruct); @@ -81,23 +80,25 @@ void undo_redo (UndoMain *undostruct); UndoMain *undo_init(GtkWidget *text) { UndoMain *undostruct; - + GtkTextView *textview = GTK_TEXT_VIEW(text); + GtkTextBuffer *textbuf = gtk_text_view_get_buffer(textview); + g_return_val_if_fail(text != NULL, NULL); undostruct = g_new(UndoMain, 1); - undostruct->text = text; + undostruct->textview = textview; undostruct->undo = NULL; undostruct->redo = NULL; undostruct->paste = 0; undostruct->undo_state = FALSE; undostruct->redo_state = FALSE; - gtk_signal_connect(GTK_OBJECT(text), "insert-text", - GTK_SIGNAL_FUNC(undo_insert_text_cb), undostruct); - gtk_signal_connect(GTK_OBJECT(text), "delete-text", - GTK_SIGNAL_FUNC(undo_delete_text_cb), undostruct); - gtk_signal_connect(GTK_OBJECT(text), "paste-clipboard", - GTK_SIGNAL_FUNC(undo_paste_clipboard_cb), undostruct); + g_signal_connect(G_OBJECT(textbuf), "insert-text", + G_CALLBACK(undo_insert_text_cb), undostruct); + g_signal_connect(G_OBJECT(textbuf), "delete-range", + G_CALLBACK(undo_delete_text_cb), undostruct); + g_signal_connect(G_OBJECT(textview), "paste-clipboard", + G_CALLBACK(undo_paste_clipboard_cb), undostruct); return undostruct; } @@ -302,6 +303,7 @@ static void undo_add(const gchar *text, UndoAction action, UndoMain *undostruct) { UndoInfo *undoinfo; + GtkAdjustment *vadj; debug_print("undo_add(%i)*%s*\n", strlen (text), text); @@ -332,8 +334,9 @@ static void undo_add(const gchar *text, debug_print("New: %s Action: %d Paste: %d\n", text, action, undostruct->paste); + vadj = GTK_ADJUSTMENT(GTK_TEXT_VIEW(undostruct->textview)->vadjustment); undoinfo = undo_object_new(g_strdup(text), start_pos, end_pos, action, - GTK_ADJUSTMENT(GTK_STEXT(undostruct->text)->vadj)->value); + vadj->value); if (end_pos - start_pos != 1 || text[0] == '\n') undoinfo->mergeable = FALSE; @@ -357,7 +360,10 @@ static void undo_add(const gchar *text, void undo_undo(UndoMain *undostruct) { UndoInfo *undoinfo; - guint start_pos, end_pos; + GtkTextView *textview; + GtkTextBuffer *buffer; + GtkTextIter iter, start_iter, end_iter; + GtkTextMark *mark; g_return_if_fail(undostruct != NULL); @@ -371,32 +377,37 @@ void undo_undo(UndoMain *undostruct) undostruct->redo = g_list_prepend(undostruct->redo, undoinfo); undostruct->undo = g_list_remove(undostruct->undo, undoinfo); + textview = undostruct->textview; + buffer = gtk_text_view_get_buffer(textview); + + undo_block(undostruct); + /* Check if there is a selection active */ - start_pos = GTK_EDITABLE(undostruct->text)->selection_start_pos; - end_pos = GTK_EDITABLE(undostruct->text)->selection_end_pos; - if ((start_pos > 0 || end_pos > 0) && (start_pos != end_pos)) - gtk_editable_select_region(GTK_EDITABLE(undostruct->text), - 0, 0); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark); + gtk_text_buffer_place_cursor(buffer, &iter); /* Move the view (scrollbars) to the correct position */ gtk_adjustment_set_value - (GTK_ADJUSTMENT(GTK_STEXT(undostruct->text)->vadj), + (GTK_ADJUSTMENT(textview->vadjustment), undoinfo->window_position); switch (undoinfo->action) { case UNDO_ACTION_DELETE: - gtk_stext_set_point(GTK_STEXT(undostruct->text), undoinfo->start_pos); - gtk_stext_insert(GTK_STEXT(undostruct->text), NULL, NULL, NULL, undoinfo->text, -1); + gtk_text_buffer_get_iter_at_offset(buffer, &iter, undoinfo->start_pos); + gtk_text_buffer_insert(buffer, &iter, undoinfo->text, -1); debug_print("UNDO_ACTION_DELETE %s\n", undoinfo->text); break; case UNDO_ACTION_INSERT: - gtk_stext_set_point(GTK_STEXT(undostruct->text), undoinfo->end_pos); - gtk_stext_backward_delete(GTK_STEXT(undostruct->text), undoinfo->end_pos-undoinfo->start_pos); + gtk_text_buffer_get_iter_at_offset(buffer, &start_iter, undoinfo->start_pos); + gtk_text_buffer_get_iter_at_offset(buffer, &end_iter, undoinfo->end_pos); + gtk_text_buffer_delete(buffer, &start_iter, &end_iter); debug_print("UNDO_ACTION_INSERT %d\n", undoinfo->end_pos-undoinfo->start_pos); break; case UNDO_ACTION_REPLACE_INSERT: - gtk_stext_set_point(GTK_STEXT(undostruct->text), undoinfo->end_pos); - gtk_stext_backward_delete(GTK_STEXT(undostruct->text), undoinfo->end_pos-undoinfo->start_pos); + gtk_text_buffer_get_iter_at_offset(buffer, &start_iter, undoinfo->start_pos); + gtk_text_buffer_get_iter_at_offset(buffer, &end_iter, undoinfo->end_pos); + gtk_text_buffer_delete(buffer, &start_iter, &end_iter); debug_print("UNDO_ACTION_REPLACE %s\n", undoinfo->text); /* "pull" another data structure from the list */ undoinfo = (UndoInfo *)undostruct->undo->data; @@ -404,8 +415,7 @@ void undo_undo(UndoMain *undostruct) undostruct->redo = g_list_prepend(undostruct->redo, undoinfo); undostruct->undo = g_list_remove(undostruct->undo, undoinfo); g_return_if_fail(undoinfo->action == UNDO_ACTION_REPLACE_DELETE); - gtk_stext_set_point(GTK_STEXT(undostruct->text), undoinfo->start_pos); - gtk_stext_insert(GTK_STEXT(undostruct->text), NULL, NULL, NULL, undoinfo->text, -1); + gtk_text_buffer_insert(buffer, &start_iter, undoinfo->text, -1); debug_print("UNDO_ACTION_REPLACE %s\n", undoinfo->text); break; case UNDO_ACTION_REPLACE_DELETE: @@ -425,6 +435,8 @@ void undo_undo(UndoMain *undostruct) UNDO_STATE_FALSE, UNDO_STATE_UNCHANGED, undostruct->change_state_data); + + undo_unblock(undostruct); } /** @@ -437,7 +449,10 @@ void undo_undo(UndoMain *undostruct) void undo_redo(UndoMain *undostruct) { UndoInfo *redoinfo; - guint start_pos, end_pos; + GtkTextView *textview; + GtkTextBuffer *buffer; + GtkTextIter iter, start_iter, end_iter; + GtkTextMark *mark; g_return_if_fail(undostruct != NULL); @@ -448,49 +463,45 @@ void undo_redo(UndoMain *undostruct) undostruct->undo = g_list_prepend(undostruct->undo, redoinfo); undostruct->redo = g_list_remove(undostruct->redo, redoinfo); + textview = undostruct->textview; + buffer = gtk_text_view_get_buffer(textview); + + undo_block(undostruct); + /* Check if there is a selection active */ - start_pos = GTK_EDITABLE(undostruct->text)->selection_start_pos; - end_pos = GTK_EDITABLE(undostruct->text)->selection_end_pos; - if ((start_pos > 0 || end_pos > 0) && (start_pos != end_pos)) - gtk_editable_select_region(GTK_EDITABLE(undostruct->text), 0, 0); + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark); + gtk_text_buffer_place_cursor(buffer, &iter); /* Move the view to the right position. */ - gtk_adjustment_set_value(GTK_ADJUSTMENT(GTK_STEXT(undostruct->text)->vadj), + gtk_adjustment_set_value(textview->vadjustment, redoinfo->window_position); switch (redoinfo->action) { case UNDO_ACTION_INSERT: - gtk_stext_set_point(GTK_STEXT(undostruct->text), - redoinfo->start_pos); - gtk_stext_insert(GTK_STEXT(undostruct->text), NULL, NULL, - NULL, redoinfo->text, -1); + gtk_text_buffer_get_iter_at_offset(buffer, &iter, redoinfo->start_pos); + gtk_text_buffer_insert(buffer, &iter, redoinfo->text, -1); debug_print("UNDO_ACTION_DELETE %s\n",redoinfo->text); break; case UNDO_ACTION_DELETE: - gtk_stext_set_point(GTK_STEXT(undostruct->text), - redoinfo->end_pos); - gtk_stext_backward_delete - (GTK_STEXT(undostruct->text), - redoinfo->end_pos - redoinfo->start_pos); + gtk_text_buffer_get_iter_at_offset(buffer, &start_iter, redoinfo->start_pos); + gtk_text_buffer_get_iter_at_offset(buffer, &end_iter, redoinfo->end_pos); + gtk_text_buffer_delete(buffer, &start_iter, &end_iter); debug_print("UNDO_ACTION_INSERT %d\n", redoinfo->end_pos-redoinfo->start_pos); break; case UNDO_ACTION_REPLACE_DELETE: - gtk_stext_set_point(GTK_STEXT(undostruct->text), - redoinfo->end_pos); - gtk_stext_backward_delete - (GTK_STEXT(undostruct->text), - redoinfo->end_pos - redoinfo->start_pos); + gtk_text_buffer_get_iter_at_offset(buffer, &start_iter, redoinfo->start_pos); + gtk_text_buffer_get_iter_at_offset(buffer, &end_iter, redoinfo->end_pos); + gtk_text_buffer_delete(buffer, &start_iter, &end_iter); + debug_print("UNDO_ACTION_REPLACE %s\n", redoinfo->text); /* "pull" another data structure from the list */ redoinfo = (UndoInfo *)undostruct->redo->data; g_return_if_fail(redoinfo != NULL); - undostruct->undo = g_list_prepend(undostruct->undo, redoinfo); - undostruct->redo = g_list_remove(undostruct->redo, redoinfo); - g_return_if_fail(redoinfo->action == UNDO_ACTION_REPLACE_INSERT); - gtk_stext_set_point(GTK_STEXT(undostruct->text), - redoinfo->start_pos); - gtk_stext_insert(GTK_STEXT(undostruct->text), NULL, NULL, - NULL, redoinfo->text, -1); + undostruct->undo = g_list_prepend(undostruct->redo, redoinfo); + undostruct->redo = g_list_remove(undostruct->undo, redoinfo); + g_return_if_fail(redoinfo->action == UNDO_ACTION_REPLACE_DELETE); + gtk_text_buffer_insert(buffer, &start_iter, redoinfo->text, -1); break; case UNDO_ACTION_REPLACE_INSERT: g_warning("This should not happen. Redo: UNDO_REPLACE_INSERT"); @@ -509,54 +520,76 @@ void undo_redo(UndoMain *undostruct) UNDO_STATE_UNCHANGED, UNDO_STATE_FALSE, undostruct->change_state_data); + + undo_unblock(undostruct); } -void undo_insert_text_cb(GtkEditable *editable, gchar *new_text, - gint new_text_length, gint *position, +void undo_block(UndoMain *undostruct) +{ + GtkTextBuffer *buffer; + + g_return_if_fail(GTK_IS_TEXT_VIEW(undostruct->textview)); + + buffer = gtk_text_view_get_buffer(undostruct->textview); + g_signal_handlers_block_by_func(buffer, undo_insert_text_cb, undostruct); + g_signal_handlers_block_by_func(buffer, undo_delete_text_cb, undostruct); + g_signal_handlers_block_by_func(buffer, undo_paste_clipboard_cb, + undostruct); +} + +void undo_unblock(UndoMain *undostruct) +{ + GtkTextBuffer *buffer; + + g_return_if_fail(GTK_IS_TEXT_VIEW(undostruct->textview)); + + buffer = gtk_text_view_get_buffer(undostruct->textview); + g_signal_handlers_unblock_by_func(buffer, undo_insert_text_cb, undostruct); + g_signal_handlers_unblock_by_func(buffer, undo_delete_text_cb, undostruct); + g_signal_handlers_unblock_by_func(buffer, undo_paste_clipboard_cb, + undostruct); +} + +void undo_insert_text_cb(GtkTextBuffer *textbuf, GtkTextIter *iter, + gchar *new_text, gint new_text_length, UndoMain *undostruct) { gchar *text_to_insert; - size_t wlen; + gint pos; if (prefs_common.undolevels <= 0) return; - Xstrndup_a(text_to_insert, new_text, new_text_length, return); - if (MB_CUR_MAX > 1) { - wchar_t *wstr; + pos = gtk_text_iter_get_offset(iter); - wstr = g_new(wchar_t, new_text_length + 1); - wlen = mbstowcs(wstr, text_to_insert, new_text_length + 1); - g_free(wstr); - if (wlen < 0) return; - } else - wlen = new_text_length; - - undo_add(text_to_insert, *position, *position + wlen, + Xstrndup_a(text_to_insert, new_text, new_text_length, return); + undo_add(text_to_insert, pos, pos + g_utf8_strlen(text_to_insert, -1), UNDO_ACTION_INSERT, undostruct); } -void undo_delete_text_cb(GtkEditable *editable, gint start_pos, - gint end_pos, UndoMain *undostruct) +void undo_delete_text_cb(GtkTextBuffer *textbuf, GtkTextIter *start, + GtkTextIter *end, UndoMain *undostruct) { gchar *text_to_delete; + gint start_pos, end_pos; if (prefs_common.undolevels <= 0) return; - if (start_pos == end_pos) return; - text_to_delete = gtk_editable_get_chars(GTK_EDITABLE(editable), - start_pos, end_pos); + text_to_delete = gtk_text_buffer_get_text(textbuf, start, end, FALSE); + if (!text_to_delete || !*text_to_delete) return; + + start_pos = gtk_text_iter_get_offset(start); + end_pos = gtk_text_iter_get_offset(end); + undo_add(text_to_delete, start_pos, end_pos, UNDO_ACTION_DELETE, undostruct); g_free(text_to_delete); } -void undo_paste_clipboard_cb(GtkEditable *editable, UndoMain *undostruct) +void undo_paste_clipboard_cb(GtkTextView *textview, UndoMain *undostruct) { - if (editable->clipboard_text == NULL) return; - debug_print("before Paste: %d\n", undostruct->paste); if (prefs_common.undolevels > 0) - if (undo_get_selection(editable, NULL, NULL)) + if (undo_get_selection(textview, NULL, NULL)) undostruct->paste = TRUE; debug_print("after Paste: %d\n", undostruct->paste); } @@ -571,12 +604,17 @@ void undo_paste_clipboard_cb(GtkEditable *editable, UndoMain *undostruct) * * Return Value: TRUE if there is a selection active, FALSE if not **/ -static gint undo_get_selection(GtkEditable *text, guint *start, guint *end) +static gint undo_get_selection(GtkTextView *textview, guint *start, guint *end) { + GtkTextBuffer *buffer; + GtkTextIter start_iter, end_iter; guint start_pos, end_pos; - start_pos = text->selection_start_pos; - end_pos = text->selection_end_pos; + buffer = gtk_text_view_get_buffer(textview); + gtk_text_buffer_get_selection_bounds(buffer, &start_iter, &end_iter); + + start_pos = gtk_text_iter_get_offset(&start_iter); + end_pos = gtk_text_iter_get_offset(&end_iter); /* The user can select from end to start too. If so, swap it*/ if (end_pos < start_pos) { diff --git a/src/undo.h b/src/undo.h index 007519a55..5f50c8b6e 100644 --- a/src/undo.h +++ b/src/undo.h @@ -23,7 +23,7 @@ #define __UNDO_H__ #include -#include +#include #include typedef enum @@ -51,7 +51,7 @@ typedef void (*UndoChangeStateFunc) (UndoMain *undostruct, struct _UndoMain { - GtkWidget *text; + GtkTextView *textview; GList *undo; GList *redo; @@ -74,5 +74,7 @@ void undo_set_change_state_func (UndoMain *undostruct, void undo_undo (UndoMain *undostruct); void undo_redo (UndoMain *undostruct); +void undo_block (UndoMain *undostruct); +void undo_unblock (UndoMain *undostruct); #endif /* __UNDO_H__ */ diff --git a/src/unmime.c b/src/unmime.c index dc2b4f470..b4fff287e 100644 --- a/src/unmime.c +++ b/src/unmime.c @@ -112,7 +112,7 @@ void unmime_header(gchar *out, const gchar *str) } /* convert to locale encoding */ - conv_str = conv_codeset_strdup(decoded_text, charset, NULL); + conv_str = conv_codeset_strdup(decoded_text, charset, CS_UTF_8); if (conv_str) { len = strlen(conv_str); memcpy(outp, conv_str, len); diff --git a/src/vcard.c b/src/vcard.c index 4407f8168..fe3ee5b19 100644 --- a/src/vcard.c +++ b/src/vcard.c @@ -626,7 +626,7 @@ gboolean vcard_validate( const VCardFile *cardFile ) { * be g_free() when done. */ gchar *vcard_find_gnomecard( void ) { - gchar *homedir; + const gchar *homedir; gchar buf[ WORK_BUFLEN ]; gchar str[ WORK_BUFLEN ]; gchar *fileSpec; -- 2.25.1