sync with 0.6.6hiro3-0.6.6hiro9

This commit is contained in:
Alfons Hoogervorst 2001-12-22 00:30:32 +00:00
parent 9465e8ab61
commit c0bceaf6c7
36 changed files with 976 additions and 554 deletions

View file

@ -1,3 +1,60 @@
2001-12-21
* src/template.c: template_write_config(): fixed a typo.
* src/compose.c: toolbar_linewrap_cb(): call compose_wrap_line_all().
* src/filter.[ch]
src/prefs_filter.c: supported regular expression (thanks to
Yukihiro Nakai).
* src/undo.c: undo_paste_clipboard_cb(): fixed a bug that broke
undo state when pasted clipboard was empty.
undo_check_size(): use g_list_last().
undo_undo()
undo_redo(): fixed NULL checking and made a bit of optimization.
Some code cleanups.
* src/prefs_common.c: changed the default value of linewrap length
to 72.
2001-12-20
* reorganization of pixmap management.
* src/stock_pixmap.[ch]: new. This module manages all static pixmaps.
* modified every files which directly use pixmaps data to use
stock_pixmap_*().
* src/undo.[ch]: renamed undo_set_undo_change_funct() to
undo_set_change_state_func(), and changed its argument from
GtkWidget* to gpointer.
undo_merge(): code cleanup.
* src/compose.c: renamed compose_set_undo() to
compose_undo_state_changed().
2001-12-19
* src/account.c: account_find_from_address(): made it case
insensitive.
* src/addressbook.c: addressbook_create(): set wmclass.
* src/compose.c: compose_insert_file(): supported DOS/Win/Mac line
break.
* src/importldif.c
src/ldif.[ch]: merged from the claws branch.
* src/importldif.c: removed some warnings.
imp_ldif_field_list_toggle(): fixed button checking.
imp_ldif_dialog_create(): minor layout fix.
* src/ldif.c: removed some warnings.
* INSTALL
INSTALL.jp: updated confirmation list.
* src/vcard.c:
vcard_read_file()
vcard_test_read_file(): fixed a memory leak of tagtemp.
Some code cleanups (decreasing the indent level).
* src/addrindex.c
src/jpilot.[ch]
src/syldap.[ch]: disabled runtime library checking because JPilot
and LDAP libraries are linked on the build time, and the program
doesn't execute without them anyway.
* src/addressbook.c
src/addrindex.c: changed "J-Pilot" to "JPilot".
Removed warning for atoi().
2001-12-18
* src/procmsg.c: procmsg_empty_trash()

View file

@ -1,3 +1,8 @@
2001-12-21 [alfons] 0.6.6claws7
* sync with sylpheed 0.6.6cvs4-9
(may have forgotten something: LAST_STABLE is 0.6.6claws6)
2001-12-21 [christoph] 0.6.6claws6
* src/compose.c

View file

@ -1,3 +1,59 @@
2001-12-21
* src/template.c: template_write_config(): typo を修正。
* src/compose.c: toolbar_linewrap_cb(): compose_wrap_line_all() を
呼ぶようにした。
* src/filter.[ch]
src/prefs_filter.c: 正規表現に対応(中井さん thanks)。
* src/undo.c: undo_paste_clipboard_cb(): ペーストしたクリップボード
が空のときアンドゥの状態を破壊するバグを修正。
undo_check_size(): g_list_last() を使用。
undo_undo()
undo_redo(): NULL チェックを修正し、少し最適化。
コードの整理。
* src/prefs_common.c: 自動改行の行長のデフォルトを72に変更。
2001-12-20
* pixmap 管理の再構成。
* src/stock_pixmap.[ch]: 新規。このモジュールは全ての static な
pixmap を管理する。
* pixmap データを直接使う全てのファイルを stock_pixmap_*() を
使用するように修正。
* src/undo.[ch]: undo_set_undo_change_funct() を
undo_set_change_state_func() に名称変更し、引数を GtkWidget*
から gpointer に変更。
undo_merge(): コードの整理。
* src/compose.c: compose_set_undo() を compose_undo_state_changed()
に名称変更。
2001-12-19
* src/account.c: account_find_from_address(): 大小文字を区別しない
ようにした。
* src/addressbook.c: addressbook_create(): wmclass をセット。
* src/compose.c: compose_insert_file(): DOS/Win/Mac の改行に対応。
* src/importldif.c
src/ldif.[ch]: claws ブランチからマージ。
* src/importldif.c: 警告を除去。
imp_ldif_field_list_toggle(): ボタンのチェックを修正。
imp_ldif_dialog_create(): レイアウトをわずかに修正。
* src/ldif.c: 警告を除去。
* INSTALL
INSTALL.jp: 動作確認リストを更新。
* src/vcard.c:
vcard_read_file()
vcard_test_read_file(): tagtemp のメモリリークを修正。
コードの整理(インデントのレベルを削減)。
* src/addrindex.c
src/jpilot.[ch]
src/syldap.[ch]: JPilot と LDAP のライブラリはビルド時にリンクされ、
それらなしでは結局実行できないため、実行時のライブラリチェックを
行わないようにした。
* src/addressbook.c
src/addrindex.c: "J-Pilot" を "JPilot" に変更。
atoi() の警告を除去。
2001-12-18
* src/procmsg.c: procmsg_empty_trash()

16
INSTALL
View file

@ -9,18 +9,24 @@ on the other environment.
It is confirmed to work on the following environments:
Linux
o Debian GNU/Linux unstable (sid) (glibc 2.2.x)
o Debian GNU/Linux testing (woody) (glibc 2.2.x)
o Debian GNU/Linux 2.2 (potato) (glibc 2.1.3)
o Kondara MNU/Linux (glibc 2.1.x)
o Kondara MNU/Linux 1.2
o Kondara MNU/Linux 2.0
o Vine Linux 1.1 (glibc 2.0.x + libwcsmbs)
o Vine Linux 2.0 (glibc 2.1.x) (Intel, PPC)
o Vine Linux 2.1
o Vine Linux 2.1.5
o Laser5 Linux 6.0 (glibc 2.1.x)
o Laser5 Linux 6.2 (glibc 2.1.x)
o Laser5 Linux 6.4 (glibc 2.1.x)
o TurboLinux 4.0 (glibc 2.0.7 + libwcsmbs)
o TurboLinux 6.0 (glibc 2.1.2)
o TurboLinux 7.0 (glibc 2.2.x)
o Miracle Linux Standard Edition Version1.0
o Miracle Linux for PostgreSQL Version1.0
o Miracle Linux for Samba Version1.0
@ -63,6 +69,9 @@ o Conectiva Linux 5.0
o Vector Linux 1.5
o Yellow Dog Linux 2.0 (glibc 2.2.1)
o Yellow Dog Linux 2.1 (PowerPC)
BSD
o FreeBSD 3.2-RELEASE
o FreeBSD 3.4-RELEASE
o FreeBSD 4.0-RELEASE
@ -78,7 +87,11 @@ o NetBSD 1.5.2
o OpenBSD 2.7
o OpenBSD 2.8 (i386)
o OpenBSD 2.9
o OpenBSD 3.0
o BSD/OS 4.0.1
Other commercial Unix
o Solaris 2.5
o Solaris 2.5.1
o Solaris 2.6
@ -92,6 +105,9 @@ o HP-UX 11i
o Tru64 Unix 5.0 (OSF1 V5.0)
o SCO UnixWare 7
o Mac OS X (Darwin 1.3) + Xtools (has locale problem)
Others
o Windows (cygwin + GTK+ for win32) (unstable)

View file

@ -8,18 +8,24 @@
以下の環境で動作が確認されています:
Linux
o Debian GNU/Linux unstable (sid) (glibc 2.2.x)
o Debian GNU/Linux testing (woody) (glibc 2.2.x)
o Debian GNU/Linux 2.2 (potato) (glibc 2.1.3)
o Kondara MNU/Linux (glibc 2.1.x)
o Kondara MNU/Linux 1.2
o Kondara MNU/Linux 2.0
o Vine Linux 1.1 (glibc 2.0.x + libwcsmbs)
o Vine Linux 2.0 (glibc 2.1.x) (Intel, PPC)
o Vine Linux 2.1
o Vine Linux 2.1.5
o Laser5 Linux 6.0 (glibc 2.1.x)
o Laser5 Linux 6.2 (glibc 2.1.x)
o Laser5 Linux 6.4 (glibc 2.1.x)
o TurboLinux 4.0 (glibc 2.0.7 + libwcsmbs)
o TurboLinux 6.0 (glibc 2.1.2)
o TurboLinux 7.0 (glibc 2.2.x)
o Miracle Linux Standard Edition Version1.0
o Miracle Linux for PostgreSQL Version1.0
o Miracle Linux for Samba Version1.0
@ -62,6 +68,9 @@ o Conectiva Linux 5.0
o Vector Linux 1.5
o Yellow Dog Linux 2.0 (glibc 2.2.1)
o Yellow Dog Linux 2.1 (PowerPC)
BSD
o FreeBSD 3.2-RELEASE
o FreeBSD 3.4-RELEASE
o FreeBSD 4.0-RELEASE
@ -77,7 +86,11 @@ o NetBSD 1.5.2
o OpenBSD 2.7
o OpenBSD 2.8 (i386)
o OpenBSD 2.9
o OpenBSD 3.0
o BSD/OS 4.0.1
その他商用 Unix
o Solaris 2.5
o Solaris 2.5.1
o Solaris 2.6
@ -91,6 +104,9 @@ o HP-UX 11i
o Tru64 Unix 5.0 (OSF1 V5.0)
o SCO UnixWare 7
o Mac OS X (Darwin 1.3) + Xtools (locale に問題あり)
その他
o Windows (cygwin + GTK+ for win32) (unstable)

5
NEWS
View file

@ -5,14 +5,15 @@ Changes of Sylpheed
* The newsgroup subscription dialog has been enhanced.
* Template function has been improved.
* New wrapping function for composition window has been implemented.
* Mailto URL has been supported on the --compose option.
* The --status option that displays current message count was added.
* Mailto URL has been supported for the --compose option.
* The --status option to display current message count has been added.
* Workaround for RFC-incompliant Date header has been made.
* Check connection between IMAP or NNTP server only if access time
limit is expired.
* Thai encodings have been supported.
* Hungarian message catalog has been added.
* Copy and paste problems have been fixed.
* Some IMAP4 bugs have been fixed.
* Some other bugs have been fixed.
* 0.6.5

View file

@ -8,7 +8,7 @@ MINOR_VERSION=6
MICRO_VERSION=6
INTERFACE_AGE=0
BINARY_AGE=0
EXTRA_VERSION=claws6
EXTRA_VERSION=claws7
VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
dnl

View file

@ -24,6 +24,7 @@ sylpheed_SOURCES = \
gtkshruler.c gtkshruler.h \
gtksctree.c gtksctree.h \
menu.c menu.h \
stock_pixmap.c stock_pixmap.h \
prefs.c prefs.h \
prefs_common.c prefs_common.h \
prefs_filter.c prefs_filter.h \

View file

@ -30,7 +30,6 @@
#include <gtk/gtksignal.h>
#include <gtk/gtkvbox.h>
#include <gtk/gtkhbox.h>
#include <gtk/gtkpixmap.h>
#include <gtk/gtklabel.h>
#include <gtk/gtkhseparator.h>
#include <gtk/gtkscrolledwindow.h>
@ -43,12 +42,11 @@
#include "intl.h"
#include "about.h"
#include "gtkutils.h"
#include "stock_pixmap.h"
#include "prefs_common.h"
#include "utils.h"
#include "version.h"
#include "pixmaps/sylpheed-logo.xpm"
static GtkWidget *window;
static void about_create(void);
@ -66,8 +64,6 @@ void about_show(void)
static void about_create(void)
{
GtkWidget *vbox;
GdkPixmap *logoxpm = NULL;
GdkBitmap *logoxpmmask;
GtkWidget *pixmap;
GtkWidget *label;
GtkWidget *hbox;
@ -101,8 +97,7 @@ static void about_create(void)
vbox = gtk_vbox_new(FALSE, 6);
gtk_container_add(GTK_CONTAINER(window), vbox);
PIXMAP_CREATE(window, logoxpm, logoxpmmask, sylpheed_logo_xpm);
pixmap = gtk_pixmap_new(logoxpm, logoxpmmask);
pixmap = stock_pixmap_widget(window, STOCK_PIXMAP_SYLPHEED_LOGO);
gtk_box_pack_start(GTK_BOX(vbox), pixmap, FALSE, FALSE, 0);
label = gtk_label_new("version "VERSION);

View file

@ -40,6 +40,7 @@
#include "prefs_folder_item.h"
#include "compose.h"
#include "manage_window.h"
#include "stock_pixmap.h"
#include "inc.h"
#include "gtkutils.h"
#include "utils.h"
@ -175,6 +176,9 @@ PrefsAccount *account_find_from_smtp_server(const gchar *address,
GList *cur;
PrefsAccount *ac;
g_return_val_if_fail(address != NULL, NULL);
g_return_val_if_fail(smtp_server != NULL, NULL);
for (cur = account_list; cur != NULL; cur = cur->next) {
ac = (PrefsAccount *)cur->data;
if (!strcmp2(address, ac->address) &&
@ -198,9 +202,12 @@ PrefsAccount *account_find_from_address(const gchar *address)
GList *cur;
PrefsAccount *ac;
g_return_val_if_fail(address != NULL, NULL);
for (cur = account_list; cur != NULL; cur = cur->next) {
ac = (PrefsAccount *)cur->data;
if (ac->protocol != A_NNTP && strcasestr(address, ac->address))
if (ac->protocol != A_NNTP && ac->address &&
!g_strcasecmp(address, ac->address))
return ac;
}
@ -527,10 +534,11 @@ static void account_edit_create(void)
GTK_SIGNAL_FUNC (account_edit_close),
NULL);
PIXMAP_CREATE(clist, markxpm, markxpmmask, mark_xpm);
PIXMAP_CREATE(clist, checkboxonxpm, checkboxonxpmmask, checkbox_on_xpm);
PIXMAP_CREATE(clist, checkboxoffxpm, checkboxoffxpmmask,
checkbox_off_xpm);
stock_pixmap_gdk(clist, STOCK_PIXMAP_MARK, &markxpm, &markxpmmask);
stock_pixmap_gdk(clist, STOCK_PIXMAP_CHECKBOX_ON,
&checkboxonxpm, &checkboxonxpmmask);
stock_pixmap_gdk(clist, STOCK_PIXMAP_CHECKBOX_OFF,
&checkboxoffxpm, &checkboxoffxpmmask);
edit_account.window = window;
edit_account.clist = clist;

View file

@ -39,6 +39,7 @@
#include "intl.h"
#include "gtkutils.h"
#include "stock_pixmap.h"
#include "prefs_common.h"
#include "addressadd.h"
#include "addritem.h"
@ -46,9 +47,6 @@
#include "addrindex.h"
#include "manage_window.h"
#include "pixmaps/book.xpm"
#include "pixmaps/dir-open.xpm"
typedef struct {
AddressBookFile *book;
ItemFolder *folder;
@ -270,8 +268,9 @@ static void addressadd_create( void ) {
gtk_widget_show_all( window );
PIXMAP_CREATE( window, bookXpm, bookXpmMask, book_xpm );
PIXMAP_CREATE( window, folderXpm, folderXpmMask, dir_open_xpm );
stock_pixmap_gdk( window, STOCK_PIXMAP_BOOK, &bookXpm, &bookXpmMask );
stock_pixmap_gdk( window, STOCK_PIXMAP_DIR_OPEN,
&folderXpm, &folderXpmMask );
}
static void addressadd_load_folder( GtkCTreeNode *parentNode, ItemFolder *parentFolder,

View file

@ -52,6 +52,7 @@
#include "alertpanel.h"
#include "inputdialog.h"
#include "menu.h"
#include "stock_pixmap.h"
#include "xml.h"
#include "prefs.h"
#include "procmime.h"
@ -91,17 +92,6 @@
#define ADDRESSBOOK_LDAP_BUSYMSG "Busy"
#endif
#include "pixmaps/dir-close.xpm"
#include "pixmaps/dir-open.xpm"
#include "pixmaps/group.xpm"
#include "pixmaps/interface.xpm"
#include "pixmaps/book.xpm"
#include "pixmaps/address.xpm"
#include "pixmaps/vcard.xpm"
#include "pixmaps/jpilot.xpm"
#include "pixmaps/category.xpm"
#include "pixmaps/ldap.xpm"
typedef enum
{
COL_NAME = 0,
@ -339,7 +329,7 @@ static void addressbook_list_select_clear (void);
static void addressbook_list_select_add (AddressObject *obj);
static void addressbook_list_select_remove (AddressObject *obj);
static void addressbook_import_ldif_cb ();
static void addressbook_import_ldif_cb (void);
static void addressbook_import_mutt_cb ();
static GtkItemFactoryEntry addressbook_entries[] =
@ -348,7 +338,7 @@ static GtkItemFactoryEntry addressbook_entries[] =
{N_("/_File/New _Book"), "<alt>B", addressbook_new_book_cb, 0, NULL},
{N_("/_File/New _vCard"), "<alt>D", addressbook_new_vcard_cb, 0, NULL},
#ifdef USE_JPILOT
{N_("/_File/New _J-Pilot"), "<alt>J", addressbook_new_jpilot_cb, 0, NULL},
{N_("/_File/New _JPilot"), "<alt>J", addressbook_new_jpilot_cb, 0, NULL},
#endif
#ifdef USE_LDAP
{N_("/_File/New _Server"), "<alt>S", addressbook_new_ldap_cb, 0, NULL},
@ -367,7 +357,7 @@ static GtkItemFactoryEntry addressbook_entries[] =
{N_("/_Address/_Edit"), "<alt>Return", addressbook_edit_address_cb, 0, NULL},
{N_("/_Address/_Delete"), NULL, addressbook_delete_address_cb, 0, NULL},
{N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_Tools/Import _LDIF"), NULL, addressbook_import_ldif_cb, 0, NULL},
{N_("/_Tools/Import _LDIF file"), NULL, addressbook_import_ldif_cb, 0, NULL},
{N_("/_Tools/Import M_utt"), NULL, addressbook_import_mutt_cb, 0, NULL},
{N_("/_Help"), NULL, NULL, 0, "<LastBranch>"},
{N_("/_Help/_About"), NULL, about_show, 0, NULL}
@ -383,8 +373,8 @@ static GtkItemFactoryEntry addressbook_entries[] =
{N_("/_Tools/Import _Mozilla"), NULL, NULL, 0, NULL},
{N_("/_Tools/Import _vCard"), NULL, NULL, 0, NULL},
{N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_Tools/Export _LDIF"), NULL, NULL, 0, NULL},
{N_("/_Tools/Export V-_Card"), NULL, NULL, 0, NULL},
{N_("/_Tools/Export _LDIF file"), NULL, NULL, 0, NULL},
{N_("/_Tools/Export v_Card"), NULL, NULL, 0, NULL},
*/
static GtkItemFactoryEntry addressbook_tree_popup_entries[] =
@ -675,7 +665,8 @@ static void addressbook_create(void)
GINT_TO_POINTER(COMPOSE_BCC));
/* Build icons for interface */
PIXMAP_CREATE( window, interfacexpm, interfacexpmmask, interface_xpm );
stock_pixmap_gdk( window, STOCK_PIXMAP_INTERFACE,
&interfacexpm, &interfacexpmmask );
/* Build control tables */
addrbookctl_build_map(window);
@ -1008,7 +999,7 @@ static void addressbook_menubar_set_sensitive( gboolean sensitive ) {
menu_set_sensitive( addrbook.menu_factory, "/File/New Book", sensitive );
menu_set_sensitive( addrbook.menu_factory, "/File/New vCard", sensitive );
#ifdef USE_JPILOT
menu_set_sensitive( addrbook.menu_factory, "/File/New J-Pilot", sensitive );
menu_set_sensitive( addrbook.menu_factory, "/File/New JPilot", sensitive );
#endif
#ifdef USE_LDAP
menu_set_sensitive( addrbook.menu_factory, "/File/New Server", sensitive );
@ -1883,7 +1874,7 @@ static void addressbook_edit_address_cb( gpointer data, guint action, GtkWidget
/* Edit person - basic page */
ItemPerson *person = ( ItemPerson * ) obj;
if( addressbook_edit_person( abf, NULL, person, FALSE ) == NULL ) return;
gtk_ctree_select( ctree, addrbook.opened);
gtk_ctree_select( ctree, addrbook.opened );
invalidate_address_completion();
return;
}
@ -3020,15 +3011,15 @@ void addrbookctl_build_map( GtkWidget *window ) {
AddressTypeControlItem *atci;
/* Build icons */
PIXMAP_CREATE(window, folderxpm, folderxpmmask, dir_close_xpm);
PIXMAP_CREATE(window, folderopenxpm, folderopenxpmmask, dir_open_xpm);
PIXMAP_CREATE(window, groupxpm, groupxpmmask, group_xpm);
PIXMAP_CREATE(window, vcardxpm, vcardxpmmask, vcard_xpm);
PIXMAP_CREATE(window, bookxpm, bookxpmmask, book_xpm);
PIXMAP_CREATE(window, addressxpm, addressxpmmask, address_xpm);
PIXMAP_CREATE(window, jpilotxpm, jpilotxpmmask, jpilot_xpm);
PIXMAP_CREATE(window, categoryxpm, categoryxpmmask, category_xpm);
PIXMAP_CREATE(window, ldapxpm, ldapxpmmask, ldap_xpm);
stock_pixmap_gdk(window, STOCK_PIXMAP_DIR_CLOSE, &folderxpm, &folderxpmmask);
stock_pixmap_gdk(window, STOCK_PIXMAP_DIR_OPEN, &folderopenxpm, &folderopenxpmmask);
stock_pixmap_gdk(window, STOCK_PIXMAP_GROUP, &groupxpm, &groupxpmmask);
stock_pixmap_gdk(window, STOCK_PIXMAP_VCARD, &vcardxpm, &vcardxpmmask);
stock_pixmap_gdk(window, STOCK_PIXMAP_BOOK, &bookxpm, &bookxpmmask);
stock_pixmap_gdk(window, STOCK_PIXMAP_ADDRESS, &addressxpm, &addressxpmmask);
stock_pixmap_gdk(window, STOCK_PIXMAP_JPILOT, &jpilotxpm, &jpilotxpmmask);
stock_pixmap_gdk(window, STOCK_PIXMAP_CATEGORY, &categoryxpm, &categoryxpmmask);
stock_pixmap_gdk(window, STOCK_PIXMAP_LDAP, &ldapxpm, &ldapxpmmask);
_addressBookTypeHash_ = g_hash_table_new( g_int_hash, g_int_equal );
_addressBookTypeList_ = NULL;
@ -3145,19 +3136,19 @@ void addrbookctl_build_map( GtkWidget *window ) {
g_hash_table_insert( _addressBookTypeHash_, &atci->objectType, atci );
_addressBookTypeList_ = g_list_append( _addressBookTypeList_, atci );
/* J-Pilot */
/* JPilot */
atci = g_new0( AddressTypeControlItem, 1 );
atci->objectType = ADDR_JPILOT;
atci->interfaceType = ADDR_IF_JPILOT;
atci->showInTree = TRUE;
atci->treeExpand = TRUE;
atci->treeLeaf = FALSE;
atci->displayName = _( "J-Pilot" );
atci->displayName = _( "JPilot" );
atci->iconXpm = jpilotxpm;
atci->maskXpm = jpilotxpmmask;
atci->iconXpmOpen = jpilotxpm;
atci->maskXpmOpen = jpilotxpmmask;
atci->menuCommand = "/File/New J-Pilot";
atci->menuCommand = "/File/New JPilot";
g_hash_table_insert( _addressBookTypeHash_, &atci->objectType, atci );
_addressBookTypeList_ = g_list_append( _addressBookTypeList_, atci );
@ -3168,7 +3159,7 @@ void addrbookctl_build_map( GtkWidget *window ) {
atci->showInTree = TRUE;
atci->treeExpand = TRUE;
atci->treeLeaf = TRUE;
atci->displayName = _( "J-Pilot" );
atci->displayName = _( "JPilot" );
atci->iconXpm = categoryxpm;
atci->maskXpm = categoryxpmmask;
atci->iconXpmOpen = categoryxpm;
@ -3526,4 +3517,3 @@ static void addressbook_import_mutt_cb() {
/*
* End of Source.
*/

View file

@ -28,6 +28,7 @@
#include "defs.h"
#include <glib.h>
#include <stdlib.h>
#include "intl.h"
#include "mgutils.h"
@ -180,9 +181,10 @@ static void addrindex_build_if_list( AddressIndex *addrIndex ) {
addrIndex->interfaceList = g_list_append( addrIndex->interfaceList, iface );
ADDRITEM_PARENT(iface) = ADDRITEM_OBJECT(addrIndex);
iface = addrindex_create_interface( ADDR_IF_JPILOT, "J-Pilot", TAG_IF_JPILOT, TAG_DS_JPILOT );
iface = addrindex_create_interface( ADDR_IF_JPILOT, "JPilot", TAG_IF_JPILOT, TAG_DS_JPILOT );
#ifdef USE_JPILOT
iface->haveLibrary = jpilot_test_pilot_lib();
/* iface->haveLibrary = jpilot_test_pilot_lib(); */
iface->haveLibrary = TRUE;
iface->useInterface = iface->haveLibrary;
iface->getModifyFlag = ( void * ) jpilot_get_modified;
iface->getAccessFlag = ( void * ) jpilot_get_accessed;
@ -204,7 +206,8 @@ static void addrindex_build_if_list( AddressIndex *addrIndex ) {
iface = addrindex_create_interface( ADDR_IF_LDAP, "LDAP", TAG_IF_LDAP, TAG_DS_LDAP );
#ifdef USE_LDAP
iface->haveLibrary = syldap_test_ldap_lib();
/* iface->haveLibrary = syldap_test_ldap_lib(); */
iface->haveLibrary = TRUE;
iface->useInterface = iface->haveLibrary;
iface->getAccessFlag = ( void * ) syldap_get_accessed;
/* iface->getModifyFlag = ( void * ) syldap_get_modified; */

View file

@ -77,6 +77,7 @@
#include "folderview.h"
#include "procmsg.h"
#include "menu.h"
#include "stock_pixmap.h"
#include "send.h"
#include "imap.h"
#include "news.h"
@ -229,10 +230,10 @@ static void compose_input_cb (gpointer data,
static void compose_set_ext_editor_sensitive (Compose *compose,
gboolean sensitive);
static void compose_set_undo (UndoMain *undostruct,
static void compose_undo_state_changed (UndoMain *undostruct,
gint undo_state,
gint redo_state,
GtkWidget *changewidget);
gpointer data);
static gint calc_cursor_xpos (GtkSText *text,
gint extra,
@ -1809,15 +1810,13 @@ static void compose_insert_file(Compose *compose, const gchar *file)
gtk_stext_freeze(text);
while (fgets(buf, sizeof(buf), fp) != NULL) {
/* Strip <CR> if DOS/Windoze file, replace <CR> with <LF> if MAC file */
/* strip <CR> if DOS/Windows file,
replace <CR> with <LF> if Macintosh file. */
strcrchomp(buf);
len = strlen(buf);
if (len > 1 && buf[len - 2] == '\r' && buf[len - 1] == '\n') {
buf[len - 2] = '\n';
buf[len - 1] = '\0';
} else {
while (--len > 0)
if (buf[len] == '\r')
buf[len] = '\n';
if (len > 0 && buf[len - 1] != '\n') {
while (--len >= 0)
if (buf[len] == '\r') buf[len] = '\n';
}
gtk_stext_insert(text, NULL, NULL, NULL, buf, -1);
@ -4361,7 +4360,8 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode)
}
undostruct = undo_init(text);
undo_set_undo_change_funct(undostruct, &compose_set_undo, menubar);
undo_set_change_state_func(undostruct, &compose_undo_state_changed,
menubar);
gtk_widget_show(window);
@ -4560,8 +4560,6 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode)
static void compose_toolbar_create(Compose *compose, GtkWidget *container)
{
GtkWidget *toolbar;
GdkPixmap *icon;
GdkBitmap *mask;
GtkWidget *icon_wid;
GtkWidget *send_btn;
GtkWidget *sendl_btn;
@ -4581,15 +4579,14 @@ static void compose_toolbar_create(Compose *compose, GtkWidget *container)
gtk_toolbar_set_space_style(GTK_TOOLBAR(toolbar),
GTK_TOOLBAR_SPACE_LINE);
CREATE_TOOLBAR_ICON(stock_mail_send_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_SEND);
send_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Send"),
_("Send message"),
"Send",
icon_wid, toolbar_send_cb, compose);
CREATE_TOOLBAR_ICON(stock_mail_send_queue_xpm);
/* CREATE_TOOLBAR_ICON(tb_mail_queue_send_xpm); */
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_SEND_QUEUE);
sendl_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Send later"),
_("Put into queue folder and send later"),
@ -4597,7 +4594,7 @@ static void compose_toolbar_create(Compose *compose, GtkWidget *container)
icon_wid, toolbar_send_later_cb,
compose);
CREATE_TOOLBAR_ICON(stock_mail_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL);
draft_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Draft"),
_("Save to draft folder"),
@ -4607,7 +4604,7 @@ static void compose_toolbar_create(Compose *compose, GtkWidget *container)
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
CREATE_TOOLBAR_ICON(stock_paste_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_PASTE);
insert_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Insert"),
_("Insert file"),
@ -4615,7 +4612,7 @@ static void compose_toolbar_create(Compose *compose, GtkWidget *container)
icon_wid, toolbar_insert_cb,
compose);
CREATE_TOOLBAR_ICON(stock_mail_attach_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_ATTACH);
attach_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Attach"),
_("Attach file"),
@ -4625,7 +4622,7 @@ static void compose_toolbar_create(Compose *compose, GtkWidget *container)
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
CREATE_TOOLBAR_ICON(stock_mail_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL);
sig_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Signature"),
_("Insert signature"),
@ -4634,7 +4631,7 @@ static void compose_toolbar_create(Compose *compose, GtkWidget *container)
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
CREATE_TOOLBAR_ICON(stock_mail_compose_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_COMPOSE);
exteditor_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Editor"),
_("Edit with external editor"),
@ -4643,10 +4640,10 @@ static void compose_toolbar_create(Compose *compose, GtkWidget *container)
toolbar_ext_editor_cb,
compose);
CREATE_TOOLBAR_ICON(linewrap_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_LINEWRAP);
linewrap_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Linewrap"),
_("Wrap current paragraph"),
_("Wrap all long lines"),
"Linewrap",
icon_wid,
toolbar_linewrap_cb,
@ -4654,7 +4651,7 @@ static void compose_toolbar_create(Compose *compose, GtkWidget *container)
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
CREATE_TOOLBAR_ICON(tb_address_book_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_ADDRESS_BOOK);
addrbook_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Address"),
_("Address book"),
@ -4676,8 +4673,6 @@ static void compose_toolbar_create(Compose *compose, GtkWidget *container)
gtk_widget_show_all(toolbar);
}
#undef CREATE_TOOLBAR_ICON
static GtkWidget *compose_account_option_menu_create(Compose *compose)
{
GList *accounts;
@ -5383,20 +5378,21 @@ static void compose_set_ext_editor_sensitive(Compose *compose,
}
/**
* undo_set_undo:
* compose_undo_state_changed:
*
* Change the sensivity of the menuentries undo and redo
**/
static void compose_set_undo(UndoMain *undostruct, gint undo_state,
gint redo_state, GtkWidget *changewidget)
static void compose_undo_state_changed(UndoMain *undostruct, gint undo_state,
gint redo_state, gpointer data)
{
GtkWidget *widget = GTK_WIDGET(data);
GtkItemFactory *ifactory;
g_return_if_fail(changewidget != NULL);
g_return_if_fail(widget != NULL);
debug_print("Set_undo. UNDO:%i REDO:%i\n", undo_state, redo_state);
ifactory = gtk_item_factory_from_widget(changewidget);
ifactory = gtk_item_factory_from_widget(widget);
switch (undo_state) {
case UNDO_STATE_TRUE:

View file

@ -1,6 +1,6 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
* Copyright (C) 1999,2000 Hiroyuki Yamamoto
* Copyright (C) 1999-2001 Hiroyuki Yamamoto
*
* 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
@ -25,6 +25,7 @@
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include <regex.h>
#include "intl.h"
#include "procheader.h"
@ -86,6 +87,26 @@ static gboolean strcasenotfind(const gchar *haystack, const gchar *needle)
return strcasestr(haystack, needle) != NULL ? FALSE : TRUE;
}
static gboolean strmatch_regex(const gchar *haystack, const gchar *needle)
{
gint ret = 0;
regex_t preg;
regmatch_t pmatch[1];
ret = regcomp(&preg, needle, 0);
if (ret != 0) return FALSE;
ret = regexec(&preg, haystack, 1, pmatch, 0);
regfree(&preg);
if (ret == REG_NOMATCH) return FALSE;
if (pmatch[0].rm_so != -1)
return TRUE;
else
return FALSE;
}
gboolean filter_match_condition(Filter *filter, GSList *hlist)
{
Header *header;
@ -94,13 +115,17 @@ gboolean filter_match_condition(Filter *filter, GSList *hlist)
g_return_val_if_fail(filter->name1 != NULL, FALSE);
if (FLT_IS_CASE_SENS(filter->flag1))
if (FLT_IS_REGEX(filter->flag1))
StrFind1 = strmatch_regex;
else if (FLT_IS_CASE_SENS(filter->flag1))
StrFind1 = FLT_IS_CONTAIN(filter->flag1)
? strfind : strnotfind;
else
StrFind1 = FLT_IS_CONTAIN(filter->flag1)
? strcasefind : strcasenotfind;
if (FLT_IS_REGEX(filter->flag2))
StrFind2 = strmatch_regex;
if (FLT_IS_CASE_SENS(filter->flag2))
StrFind2 = FLT_IS_CONTAIN(filter->flag2)
? strfind : strnotfind;

View file

@ -1,6 +1,6 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
* Copyright (C) 1999,2000 Hiroyuki Yamamoto
* Copyright (C) 1999-2001 Hiroyuki Yamamoto
*
* 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
@ -29,7 +29,8 @@ typedef struct _Filter Filter;
typedef enum
{
FLT_CONTAIN = 1 << 0,
FLT_CASE_SENS = 1 << 1
FLT_CASE_SENS = 1 << 1,
FLT_REGEX = 1 << 2
} FilterFlag;
typedef enum
@ -48,6 +49,7 @@ typedef enum
#define FLT_IS_CONTAIN(flag) ((flag & FLT_CONTAIN) != 0)
#define FLT_IS_CASE_SENS(flag) ((flag & FLT_CASE_SENS) != 0)
#define FLT_IS_REGEX(flag) ((flag & FLT_REGEX) != 0)
struct _Filter
{

View file

@ -42,14 +42,12 @@
#include "main.h"
#include "utils.h"
#include "gtkutils.h"
#include "stock_pixmap.h"
#include "foldersel.h"
#include "alertpanel.h"
#include "manage_window.h"
#include "folder.h"
#include "pixmaps/dir-close.xpm"
#include "pixmaps/dir-open.xpm"
static GdkPixmap *folderxpm;
static GdkBitmap *folderxpmmask;
static GdkPixmap *folderopenxpm;
@ -191,8 +189,10 @@ static void foldersel_create(void)
static void foldersel_init(void)
{
PIXMAP_CREATE(ctree, folderxpm, folderxpmmask, dir_close_xpm);
PIXMAP_CREATE(ctree, folderopenxpm, folderopenxpmmask, dir_open_xpm);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_DIR_CLOSE,
&folderxpm, &folderxpmmask);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_DIR_OPEN,
&folderopenxpm, &folderopenxpmmask);
}
static gboolean foldersel_gnode_func(GtkCTree *ctree, guint depth,

View file

@ -48,6 +48,7 @@
#include "manage_window.h"
#include "alertpanel.h"
#include "menu.h"
#include "stock_pixmap.h"
#include "procmsg.h"
#include "utils.h"
#include "gtkutils.h"
@ -57,16 +58,6 @@
#include "folder.h"
#include "inc.h"
#include "pixmaps/inbox.xpm"
#include "pixmaps/inbox-hrm.xpm"
#include "pixmaps/outbox.xpm"
#include "pixmaps/outbox-hrm.xpm"
#include "pixmaps/dir-close.xpm"
#include "pixmaps/dir-open.xpm"
#include "pixmaps/dir-open-hrm.xpm"
#include "pixmaps/trash.xpm"
#include "pixmaps/trash-hrm.xpm"
typedef enum
{
COL_FOLDER = 0,
@ -455,16 +446,14 @@ void folderview_init(FolderView *folderview)
{
GtkWidget *ctree = folderview->ctree;
PIXMAP_CREATE(ctree, inboxxpm, inboxxpmmask, inbox_xpm);
PIXMAP_CREATE(ctree, inboxhrmxpm, inboxhrmxpmmask, inbox_hrm_xpm);
PIXMAP_CREATE(ctree, outboxxpm, outboxxpmmask, outbox_xpm);
PIXMAP_CREATE(ctree, outboxhrmxpm, outboxhrmxpmmask, outbox_hrm_xpm);
PIXMAP_CREATE(ctree, folderxpm, folderxpmmask, dir_close_xpm);
PIXMAP_CREATE(ctree, folderopenxpm, folderopenxpmmask, dir_open_xpm);
PIXMAP_CREATE(ctree, folderopenhrmxpm, folderopenhrmxpmmask,
dir_open_hrm_xpm);
PIXMAP_CREATE(ctree, trashxpm, trashxpmmask, trash_xpm);
PIXMAP_CREATE(ctree, trashhrmxpm, trashhrmxpmmask, trash_hrm_xpm);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_INBOX, &inboxxpm, &inboxxpmmask);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_OUTBOX,
&outboxxpm, &outboxxpmmask);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_DIR_CLOSE,
&folderxpm, &folderxpmmask);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_DIR_OPEN,
&folderopenxpm, &folderopenxpmmask);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_TRASH, &trashxpm, &trashxpmmask);
if (!normalfont)
normalfont = gdk_fontset_load(NORMAL_FONT);

View file

@ -41,13 +41,12 @@
#include "addressbook.h"
#include "addressitem.h"
#include "gtkutils.h"
#include "stock_pixmap.h"
#include "prefs_common.h"
#include "manage_window.h"
#include "mgutils.h"
#include "ldif.h"
#include "pixmaps/mark.xpm"
#define IMPORTLDIF_GUESS_NAME "LDIF Import"
#define PAGE_FILE_INFO 0
@ -219,7 +218,7 @@ static void imp_ldif_field_list_selected( GtkCList *clist, gint row, gint column
static void imp_ldif_field_list_toggle( GtkCList *clist, GdkEventButton *event, gpointer data ) {
if( ! event ) return;
if( impldif_dlg.rowIndSelect < 0 ) return;
if( event->button = 1 ) {
if( event->button == 1 ) {
if( event->type == GDK_2BUTTON_PRESS ) {
Ldif_FieldRec *rec = gtk_clist_get_row_data( clist, impldif_dlg.rowIndSelect );
if( rec ) {
@ -325,7 +324,7 @@ static gboolean imp_ldif_file_move() {
ldif_set_file( _ldifFile_, sFile );
if( ldif_read_tags( _ldifFile_ ) == MGU_SUCCESS ) {
/* Load fields */
// ldif_print_file( _ldifFile_, stdout );
/* ldif_print_file( _ldifFile_, stdout ); */
imp_ldif_load_fields( _ldifFile_ );
retVal = TRUE;
}
@ -481,10 +480,7 @@ static void imp_ldif_page_file( gint pageNum, gchar *pageLbl ) {
GtkWidget *label;
GtkWidget *file_entry;
GtkWidget *name_entry;
GtkWidget *hbbox;
GtkWidget *hsep;
GtkWidget *file_btn;
GtkWidget *hsbox;
gint top;
vbox = gtk_vbox_new(FALSE, 8);
@ -505,7 +501,7 @@ static void imp_ldif_page_file( gint pageNum, gchar *pageLbl ) {
gtk_table_set_row_spacings(GTK_TABLE(table), 8);
gtk_table_set_col_spacings(GTK_TABLE(table), 8 );
// First row
/* First row */
top = 0;
label = gtk_label_new(_("Address Book"));
gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1),
@ -516,7 +512,7 @@ static void imp_ldif_page_file( gint pageNum, gchar *pageLbl ) {
gtk_table_attach(GTK_TABLE(table), name_entry, 1, 2, top, (top + 1),
GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
// Second row
/* Second row */
top = 1;
label = gtk_label_new(_("File Name"));
gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1),
@ -658,10 +654,6 @@ static void imp_ldif_page_finish( gint pageNum, gchar *pageLbl ) {
GtkWidget *labelBook;
GtkWidget *labelFile;
GtkWidget *labelRecs;
GtkWidget *hbbox;
GtkWidget *hsep;
GtkWidget *file_btn;
GtkWidget *hsbox;
gint top;
vbox = gtk_vbox_new(FALSE, 8);
@ -721,7 +713,6 @@ static void imp_ldif_dialog_create() {
GtkWidget *vnbox;
GtkWidget *notebook;
GtkWidget *hbbox;
GtkWidget *hsep;
GtkWidget *btnPrev;
GtkWidget *btnNext;
GtkWidget *btnCancel;
@ -764,9 +755,11 @@ static void imp_ldif_dialog_create() {
gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH);
/* Button panel */
gtkut_button_set_create( &hbbox, &btnPrev, _( "Prev" ),
&btnNext, _( "Next" ), &btnCancel, _( "Dismiss" ) );
gtkut_button_set_create(&hbbox, &btnPrev, _( "Prev" ),
&btnNext, _( "Next" ),
&btnCancel, _( "Cancel" ) );
gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(hbbox), 2);
gtk_widget_grab_default(btnNext);
/* Button handlers */
@ -817,7 +810,8 @@ AddressBookFile *addressbook_imp_ldif( AddressIndex *addrIndex ) {
gtk_notebook_set_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 );
PIXMAP_CREATE( impldif_dlg.window, markxpm, markxpmmask, mark_xpm);
stock_pixmap_gdk( impldif_dlg.window, STOCK_PIXMAP_MARK,
&markxpm, &markxpmmask );
imp_ldif_message();
gtk_widget_grab_focus(impldif_dlg.file_entry);

View file

@ -56,6 +56,7 @@
#include "gtkutils.h"
#include "statusbar.h"
#include "manage_window.h"
#include "stock_pixmap.h"
#include "progressdialog.h"
#include "inputdialog.h"
#include "alertpanel.h"
@ -64,10 +65,6 @@
#include "folder.h"
#include "filtering.h"
#include "pixmaps/continue.xpm"
#include "pixmaps/complete.xpm"
#include "pixmaps/error.xpm"
static guint inc_lock_count = 0;
static GdkPixmap *currentxpm;
@ -287,10 +284,12 @@ static IncProgressDialog *inc_progress_dialog_create(void)
progress_dialog_set_value(progress, 0.0);
PIXMAP_CREATE(progress->clist, okxpm, okxpmmask, complete_xpm);
PIXMAP_CREATE(progress->clist,
currentxpm, currentxpmmask, continue_xpm);
PIXMAP_CREATE(progress->clist, errorxpm, errorxpmmask, error_xpm);
stock_pixmap_gdk(progress->clist, STOCK_PIXMAP_COMPLETE,
&okxpm, &okxpmmask);
stock_pixmap_gdk(progress->clist, STOCK_PIXMAP_CONTINUE,
&currentxpm, &currentxpmmask);
stock_pixmap_gdk(progress->clist, STOCK_PIXMAP_ERROR,
&errorxpm, &errorxpmmask);
if (prefs_common.recv_dialog_mode == RECV_DIALOG_ALWAYS ||
(prefs_common.recv_dialog_mode == RECV_DIALOG_ACTIVE &&

View file

@ -35,7 +35,7 @@
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <dlfcn.h>
/* #include <dlfcn.h> */
#include <netinet/in.h>
#ifdef HAVE_LIBPISOCK_PI_ARGS_H
@ -1608,6 +1608,7 @@ gboolean jpilot_test_custom_label( JPilotFile *pilotFile, const gchar *labelName
* Test whether pilot link library installed.
* Return: TRUE if library available.
*/
#if 0
gboolean jpilot_test_pilot_lib( void ) {
void *handle, *fun;
@ -1631,6 +1632,7 @@ gboolean jpilot_test_pilot_lib( void ) {
dlclose( handle );
return TRUE;
}
#endif /* 0 */
#endif /* USE_JPILOT */

View file

@ -107,7 +107,7 @@ void jpilot_clear_custom_labels ( JPilotFile *pilotFile );
void jpilot_add_custom_label ( JPilotFile *pilotFile, const gchar *labelName );
GList *jpilot_get_custom_labels ( JPilotFile *pilotFile );
gboolean jpilot_test_custom_label ( JPilotFile *pilotFile, const gchar *labelName );
gboolean jpilot_test_pilot_lib ( void );
/* gboolean jpilot_test_pilot_lib ( void ); */
gint jpilot_read_modified ( JPilotFile *pilotFile );

View file

@ -463,7 +463,6 @@ static void ldif_add_user_attr( Ldif_ParsedRec *rec, gchar *tagName, gchar *tagV
Ldif_FieldRec *fld = NULL;
Ldif_UserAttr *attr = NULL;
gchar *name;
gchar *value;
fld = g_hash_table_lookup( hashField, tagName );
if( fld ) {
@ -554,6 +553,7 @@ static void ldif_clear_rec( Ldif_ParsedRec *rec ) {
/*
* Print parsed data.
*/
#if 0
static void ldif_print_record( Ldif_ParsedRec *rec, FILE *stream ) {
GSList *list;
@ -585,6 +585,7 @@ static void ldif_print_record( Ldif_ParsedRec *rec, FILE *stream ) {
}
list = NULL;
}
#endif
static void ldif_dump_b64( gchar *buf ) {
Base64Decoder *decoder = NULL;
@ -766,7 +767,7 @@ static void ldif_hash_add_list( GHashTable *table, GSList *list ) {
static int ldif_field_compare( gconstpointer ptr1, gconstpointer ptr2 ) {
const Ldif_FieldRec *rec1 = ptr1;
const Ldif_FieldRec *rec2 = ptr2;
return strcasecmp(rec1->tagName, rec2->tagName );
return g_strcasecmp( rec1->tagName, rec2->tagName );
}
/*

View file

@ -52,6 +52,7 @@
#include "message_search.h"
#include "headerview.h"
#include "menu.h"
#include "stock_pixmap.h"
#include "folder.h"
#include "inc.h"
#include "compose.h"
@ -1725,35 +1726,10 @@ static void main_window_set_widgets(MainWindow *mainwin, SeparateType type)
debug_print(_("done.\n"));
}
#include "pixmaps/stock_mail_receive.xpm"
#include "pixmaps/stock_mail_receive_all.xpm"
#include "pixmaps/stock_mail_compose.xpm"
#include "pixmaps/stock_news_compose.xpm"
#include "pixmaps/stock_mail_reply.xpm"
#include "pixmaps/stock_mail_reply_to_all.xpm"
#include "pixmaps/stock_mail_reply_to_author.xpm"
#include "pixmaps/stock_mail_forward.xpm"
#include "pixmaps/stock_mail_send.xpm"
#include "pixmaps/stock_preferences.xpm"
#include "pixmaps/stock_properties.xpm"
#include "pixmaps/stock_down_arrow.xpm"
#include "pixmaps/stock_close.xpm"
#include "pixmaps/stock_exec.xpm"
#define CREATE_TOOLBAR_ICON(xpm_d) \
{ \
icon = gdk_pixmap_create_from_xpm_d(container->window, &mask, \
&container->style->white, \
xpm_d); \
icon_wid = gtk_pixmap_new(icon, mask); \
}
static void main_window_toolbar_create(MainWindow *mainwin,
GtkWidget *container)
{
GtkWidget *toolbar;
GdkPixmap *icon;
GdkBitmap *mask;
GtkWidget *icon_wid;
GtkWidget *get_btn;
GtkWidget *getall_btn;
@ -1782,13 +1758,13 @@ static void main_window_toolbar_create(MainWindow *mainwin,
gtk_toolbar_set_space_style(GTK_TOOLBAR(toolbar),
GTK_TOOLBAR_SPACE_LINE);
CREATE_TOOLBAR_ICON(stock_mail_receive_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_RECEIVE);
get_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Get"),
_("Get new mail from current account"),
"Get",
icon_wid, toolbar_inc_cb, mainwin);
CREATE_TOOLBAR_ICON(stock_mail_receive_all_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_RECEIVE_ALL);
getall_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Get all"),
_("Get new mail from all accounts"),
@ -1799,7 +1775,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
CREATE_TOOLBAR_ICON(stock_mail_send_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_SEND);
send_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Send"),
_("Send queued message(s)"),
@ -1809,8 +1785,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
mainwin);
/* insert compose mail button widget */
CREATE_TOOLBAR_ICON(stock_mail_compose_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_COMPOSE);
compose_mail_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Email"),
_("Compose an email message"),
@ -1820,8 +1795,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
mainwin);
/* insert compose news button widget */
CREATE_TOOLBAR_ICON(stock_news_compose_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_NEWS_COMPOSE);
compose_news_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("News"),
_("Compose a news message"),
@ -1834,7 +1808,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
/* reply button */
CREATE_TOOLBAR_ICON(stock_mail_reply_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_REPLY);
reply_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Reply"),
_("Reply to the message - Right button: more options"),
@ -1844,8 +1818,8 @@ static void main_window_toolbar_create(MainWindow *mainwin,
mainwin);
/* replyall button */
CREATE_TOOLBAR_ICON(stock_mail_reply_to_all_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_REPLY_TO_ALL);
replyall_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("All"),
_("Reply to all - Right button: more options"),
@ -1855,8 +1829,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
mainwin);
/* reply to sender button */
CREATE_TOOLBAR_ICON(stock_mail_reply_to_author_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_REPLY_TO_AUTHOR);
replysender_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Sender"),
_("Reply to sender - Right button: more options"),
@ -1866,8 +1839,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
mainwin);
/* forward button */
CREATE_TOOLBAR_ICON(stock_mail_forward_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_FORWARD);
fwd_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Forward"),
_("Forward the message - Right button: more options"),
@ -1878,7 +1850,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
CREATE_TOOLBAR_ICON(stock_close_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_CLOSE);
delete_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Delete"),
_("Delete the message"),
@ -1887,7 +1859,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
toolbar_delete_cb,
mainwin);
CREATE_TOOLBAR_ICON(stock_exec_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_EXEC);
exec_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Execute"),
_("Execute marked process"),
@ -1896,7 +1868,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
toolbar_exec_cb,
mainwin);
CREATE_TOOLBAR_ICON(stock_down_arrow_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_DOWN_ARROW);
next_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Next"),
_("Next unread message"),
@ -1908,7 +1880,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
/*
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
CREATE_TOOLBAR_ICON(stock_preferences_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_PREFERENCES);
prefs_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Prefs"),
_("Common preference"),
@ -1916,7 +1888,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
icon_wid,
toolbar_prefs_cb,
mainwin);
CREATE_TOOLBAR_ICON(stock_properties_xpm);
icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_PROPERTIES);
account_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
_("Account"),
_("Account setting"),

View file

@ -1,6 +1,6 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
* Copyright (C) 1999,2000 Hiroyuki Yamamoto
* Copyright (C) 1999-2001 Hiroyuki Yamamoto
*
* 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
@ -29,7 +29,7 @@ GtkWidget *focus_window;
gint manage_window_focus_in(GtkWidget *widget, GdkEventFocus *event,
gpointer data)
{
debug_print("Focus in event: window: %08x\n", (guint)widget);
/* debug_print("Focus in event: window: %08x\n", (guint)widget); */
focus_window = widget;
@ -39,8 +39,8 @@ gint manage_window_focus_in(GtkWidget *widget, GdkEventFocus *event,
gint manage_window_focus_out(GtkWidget *widget, GdkEventFocus *event,
gpointer data)
{
debug_print("Focused window: %08x\n", (guint)focus_window);
debug_print("Focus out event: window: %08x\n", (guint)widget);
/* debug_print("Focused window: %08x\n", (guint)focus_window); */
/* debug_print("Focus out event: window: %08x\n", (guint)widget); */
if (focus_window == widget)
focus_window = NULL;
@ -50,8 +50,8 @@ gint manage_window_focus_out(GtkWidget *widget, GdkEventFocus *event,
void manage_window_set_transient(GtkWindow *window)
{
debug_print("window = %08x, focus_window = %08x\n",
(guint)window, (guint)focus_window);
/* debug_print("window = %08x, focus_window = %08x\n",
(guint)window, (guint)focus_window); */
if (window && focus_window)
gtk_window_set_transient_for(window, GTK_WINDOW(focus_window));

View file

@ -325,8 +325,8 @@ static PrefParam param[] = {
&compose.spinbtn_undolevel,
prefs_set_data_from_spinbtn, prefs_set_spinbtn},
{"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
&compose.spinbtn_linewrap,
{"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
&compose.spinbtn_linewrap,
prefs_set_data_from_spinbtn, prefs_set_spinbtn},
{"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
&compose.checkbtn_wrapquote,
@ -2712,8 +2712,7 @@ static GtkWidget *date_format_create(GtkButton *button, void *data)
datefmt_clist = gtk_clist_new_with_titles(2, titles);
gtk_widget_show(datefmt_clist);
gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
/* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
/* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
GTK_SELECTION_BROWSE);
@ -2831,7 +2830,6 @@ static void prefs_quote_colors_dialog_create(void)
GtkWidget *tgt_folder_label;
GtkWidget *hbbox;
GtkWidget *ok_btn;
//GtkWidget *cancel_btn;
GtkWidget *recycle_colors_btn;
GtkWidget *frame_colors;

View file

@ -105,6 +105,7 @@ static void prefs_filter_row_move (GtkCList *clist,
static void prefs_filter_dest_radio_button_toggled (void);
static void prefs_filter_notrecv_radio_button_toggled (void);
static void prefs_filter_regex_check_button_toggled (void);
static gint prefs_filter_deleted (GtkWidget *widget,
GdkEventAny *event,
@ -367,7 +368,11 @@ static void prefs_filter_create(void)
NULL);
PACK_CHECK_BUTTON (dest_hbox, regex_chkbtn, _("Use regex"));
gtk_widget_set_sensitive(regex_chkbtn, FALSE);
//gtk_widget_set_sensitive(regex_chkbtn, FALSE);
gtk_signal_connect
(GTK_OBJECT (regex_chkbtn), "toggled",
GTK_SIGNAL_FUNC (prefs_filter_regex_check_button_toggled),
NULL);
notrecv_radiobtn = gtk_radio_button_new_with_label
(recv_group, _("Don't receive"));
@ -646,12 +651,16 @@ static gint prefs_filter_clist_set_row(gint row)
flt->body2 = g_strdup(entry_text);
}
if (gtk_toggle_button_get_active
(GTK_TOGGLE_BUTTON(filter.regex_chkbtn)))
flt->flag1 = flt->flag2 = FLT_REGEX;
GET_ENTRY(filter.pred_entry1);
if (!strcmp(entry_text, _("contains")))
flt->flag1 = FLT_CONTAIN;
flt->flag1 |= FLT_CONTAIN;
GET_ENTRY(filter.pred_entry2);
if (!strcmp(entry_text, _("contains")))
flt->flag2 = FLT_CONTAIN;
flt->flag2 |= FLT_CONTAIN;
GET_ENTRY(filter.op_entry);
if (!strcmp(entry_text, "and"))
@ -776,6 +785,7 @@ static void prefs_filter_select(GtkCList *clist, gint row, gint column,
Filter default_flt = {"Subject", NULL, _("(none)"), NULL,
FLT_CONTAIN, FLT_CONTAIN, FLT_AND,
NULL, FLT_MOVE};
gboolean is_regex;
flt = gtk_clist_get_row_data(clist, row);
if (!flt)
@ -795,6 +805,12 @@ static void prefs_filter_select(GtkCList *clist, gint row, gint column,
FLT_IS_CONTAIN(flt->flag2)
? _("contains") : _("not contain"));
is_regex = FLT_IS_REGEX(flt->flag1);
gtk_widget_set_sensitive(filter.pred_combo1, !is_regex);
gtk_widget_set_sensitive(filter.pred_combo2, !is_regex);
gtk_toggle_button_set_active
(GTK_TOGGLE_BUTTON(filter.regex_chkbtn), is_regex);
gtk_entry_set_text(GTK_ENTRY(filter.op_entry),
flt->cond == FLT_OR ? "or" : "and");
if (flt->action == FLT_NOTRECV)
@ -827,6 +843,16 @@ static void prefs_filter_notrecv_radio_button_toggled(void)
gtk_widget_set_sensitive(filter.destsel_btn, FALSE);
}
static void prefs_filter_regex_check_button_toggled(void)
{
gboolean is_regex;
is_regex = gtk_toggle_button_get_active
(GTK_TOGGLE_BUTTON(filter.regex_chkbtn));
gtk_widget_set_sensitive(filter.pred_combo1, !is_regex);
gtk_widget_set_sensitive(filter.pred_combo2, !is_regex);
}
static gint prefs_filter_deleted(GtkWidget *widget, GdkEventAny *event,
gpointer data)
{

169
src/stock_pixmap.c Normal file
View file

@ -0,0 +1,169 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
* Copyright (C) 1999-2001 Hiroyuki Yamamoto
*
* 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 of the License, or
* (at your option) any later version.
*
* 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.
*
* 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.
*/
#include <glib.h>
#include <gtk/gtkwidget.h>
#include <gtk/gtkpixmap.h>
#include "stock_pixmap.h"
#include "gtkutils.h"
#include "pixmaps/address.xpm"
#include "pixmaps/book.xpm"
#include "pixmaps/category.xpm"
#include "pixmaps/checkbox_off.xpm"
#include "pixmaps/checkbox_on.xpm"
#include "pixmaps/clip.xpm"
#include "pixmaps/complete.xpm"
#include "pixmaps/continue.xpm"
#include "pixmaps/deleted.xpm"
#include "pixmaps/dir-close.xpm"
#include "pixmaps/dir-open.xpm"
#include "pixmaps/error.xpm"
#include "pixmaps/forwarded.xpm"
#include "pixmaps/group.xpm"
#include "pixmaps/inbox.xpm"
#include "pixmaps/interface.xpm"
#include "pixmaps/jpilot.xpm"
#include "pixmaps/ldap.xpm"
#include "pixmaps/linewrap.xpm"
#include "pixmaps/mark.xpm"
#include "pixmaps/new.xpm"
#include "pixmaps/outbox.xpm"
#include "pixmaps/replied.xpm"
#include "pixmaps/stock_close.xpm"
#include "pixmaps/stock_down_arrow.xpm"
#include "pixmaps/stock_exec.xpm"
#include "pixmaps/stock_mail.xpm"
#include "pixmaps/stock_mail_attach.xpm"
#include "pixmaps/stock_mail_compose.xpm"
#include "pixmaps/stock_mail_forward.xpm"
#include "pixmaps/stock_mail_receive.xpm"
#include "pixmaps/stock_mail_receive_all.xpm"
#include "pixmaps/stock_mail_reply.xpm"
#include "pixmaps/stock_mail_reply_to_all.xpm"
#include "pixmaps/stock_mail_reply_to_author.xpm"
#include "pixmaps/stock_mail_send.xpm"
#include "pixmaps/stock_mail_send_queue.xpm"
#include "pixmaps/stock_news_compose.xpm"
#include "pixmaps/stock_paste.xpm"
#include "pixmaps/stock_preferences.xpm"
#include "pixmaps/stock_properties.xpm"
#include "pixmaps/sylpheed-logo.xpm"
#include "pixmaps/tb_address_book.xpm"
#include "pixmaps/trash.xpm"
#include "pixmaps/unread.xpm"
#include "pixmaps/vcard.xpm"
typedef struct _StockPixmapData StockPixmapData;
struct _StockPixmapData
{
gchar **data;
GdkPixmap *pixmap;
GdkBitmap *mask;
};
static StockPixmapData pixmaps[] =
{
{address_xpm , NULL, NULL},
{book_xpm , NULL, NULL},
{category_xpm , NULL, NULL},
{checkbox_off_xpm , NULL, NULL},
{checkbox_on_xpm , NULL, NULL},
{clip_xpm , NULL, NULL},
{complete_xpm , NULL, NULL},
{continue_xpm , NULL, NULL},
{deleted_xpm , NULL, NULL},
{dir_close_xpm , NULL, NULL},
{dir_open_xpm , NULL, NULL},
{error_xpm , NULL, NULL},
{forwarded_xpm , NULL, NULL},
{group_xpm , NULL, NULL},
{inbox_xpm , NULL, NULL},
{interface_xpm , NULL, NULL},
{jpilot_xpm , NULL, NULL},
{ldap_xpm , NULL, NULL},
{linewrap_xpm , NULL, NULL},
{mark_xpm , NULL, NULL},
{new_xpm , NULL, NULL},
{outbox_xpm , NULL, NULL},
{replied_xpm , NULL, NULL},
{stock_close_xpm , NULL, NULL},
{stock_down_arrow_xpm , NULL, NULL},
{stock_exec_xpm , NULL, NULL},
{stock_mail_xpm , NULL, NULL},
{stock_mail_attach_xpm , NULL, NULL},
{stock_mail_compose_xpm , NULL, NULL},
{stock_mail_forward_xpm , NULL, NULL},
{stock_mail_receive_xpm , NULL, NULL},
{stock_mail_receive_all_xpm , NULL, NULL},
{stock_mail_reply_xpm , NULL, NULL},
{stock_mail_reply_to_all_xpm , NULL, NULL},
{stock_mail_reply_to_author_xpm , NULL, NULL},
{stock_mail_send_xpm , NULL, NULL},
{stock_mail_send_queue_xpm , NULL, NULL},
{stock_news_compose_xpm , NULL, NULL},
{stock_paste_xpm , NULL, NULL},
{stock_preferences_xpm , NULL, NULL},
{stock_properties_xpm , NULL, NULL},
{sylpheed_logo_xpm , NULL, NULL},
{tb_address_book_xpm , NULL, NULL},
{trash_xpm , NULL, NULL},
{unread_xpm , NULL, NULL},
{vcard_xpm , NULL, NULL},
};
/* return newly constructed GtkPixmap from GdkPixmap */
GtkWidget *stock_pixmap_widget(GtkWidget *window, StockPixmap icon)
{
GdkPixmap *pixmap;
GdkBitmap *mask;
g_return_val_if_fail(window != NULL, NULL);
g_return_val_if_fail(icon >= 0 && icon < N_STOCK_PIXMAPS, NULL);
stock_pixmap_gdk(window, icon, &pixmap, &mask);
return gtk_pixmap_new(pixmap, mask);
}
/* create GdkPixmap if it has not created yet */
gint stock_pixmap_gdk(GtkWidget *window, StockPixmap icon,
GdkPixmap **pixmap, GdkBitmap **mask)
{
StockPixmapData *pix_d;
if (pixmap) *pixmap = NULL;
if (mask) *mask = NULL;
g_return_val_if_fail(window != NULL, -1);
g_return_val_if_fail(icon >= 0 && icon < N_STOCK_PIXMAPS, -1);
pix_d = &pixmaps[icon];
if (!pix_d->pixmap) {
PIXMAP_CREATE(window, pix_d->pixmap, pix_d->mask,
pix_d->data);
}
if (pixmap) *pixmap = pix_d->pixmap;
if (mask) *mask = pix_d->mask;
return 0;
}

85
src/stock_pixmap.h Normal file
View file

@ -0,0 +1,85 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
* Copyright (C) 1999-2001 Hiroyuki Yamamoto
*
* 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 of the License, or
* (at your option) any later version.
*
* 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.
*
* 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.
*/
#ifndef __STOCK_PIXMAP_H__
#define __STOCK_PIXMAP_H__
#include <glib.h>
#include <gtk/gtkwidget.h>
typedef enum
{
STOCK_PIXMAP_ADDRESS,
STOCK_PIXMAP_BOOK,
STOCK_PIXMAP_CATEGORY,
STOCK_PIXMAP_CHECKBOX_OFF,
STOCK_PIXMAP_CHECKBOX_ON,
STOCK_PIXMAP_CLIP,
STOCK_PIXMAP_COMPLETE,
STOCK_PIXMAP_CONTINUE,
STOCK_PIXMAP_DELETED,
STOCK_PIXMAP_DIR_CLOSE,
STOCK_PIXMAP_DIR_OPEN,
STOCK_PIXMAP_ERROR,
STOCK_PIXMAP_FORWARDED,
STOCK_PIXMAP_GROUP,
STOCK_PIXMAP_INBOX,
STOCK_PIXMAP_INTERFACE,
STOCK_PIXMAP_JPILOT,
STOCK_PIXMAP_LDAP,
STOCK_PIXMAP_LINEWRAP,
STOCK_PIXMAP_MARK,
STOCK_PIXMAP_NEW,
STOCK_PIXMAP_OUTBOX,
STOCK_PIXMAP_REPLIED,
STOCK_PIXMAP_CLOSE,
STOCK_PIXMAP_DOWN_ARROW,
STOCK_PIXMAP_EXEC,
STOCK_PIXMAP_MAIL,
STOCK_PIXMAP_MAIL_ATTACH,
STOCK_PIXMAP_MAIL_COMPOSE,
STOCK_PIXMAP_MAIL_FORWARD,
STOCK_PIXMAP_MAIL_RECEIVE,
STOCK_PIXMAP_MAIL_RECEIVE_ALL,
STOCK_PIXMAP_MAIL_REPLY,
STOCK_PIXMAP_MAIL_REPLY_TO_ALL,
STOCK_PIXMAP_MAIL_REPLY_TO_AUTHOR,
STOCK_PIXMAP_MAIL_SEND,
STOCK_PIXMAP_MAIL_SEND_QUEUE,
STOCK_PIXMAP_NEWS_COMPOSE,
STOCK_PIXMAP_PASTE,
STOCK_PIXMAP_PREFERENCES,
STOCK_PIXMAP_PROPERTIES,
STOCK_PIXMAP_SYLPHEED_LOGO,
STOCK_PIXMAP_ADDRESS_BOOK,
STOCK_PIXMAP_TRASH,
STOCK_PIXMAP_UNREAD,
STOCK_PIXMAP_VCARD,
N_STOCK_PIXMAPS
} StockPixmap;
GtkWidget *stock_pixmap_widget (GtkWidget *window,
StockPixmap icon);
gint stock_pixmap_gdk (GtkWidget *window,
StockPixmap icon,
GdkPixmap **pixmap,
GdkBitmap **mask);
#endif /* __STOCK_PIXMAP_H__ */

View file

@ -65,6 +65,7 @@
#include "compose.h"
#include "utils.h"
#include "gtkutils.h"
#include "stock_pixmap.h"
#include "filesel.h"
#include "manage_window.h"
#include "alertpanel.h"
@ -81,17 +82,6 @@
#include "prefs_folder_item.h"
#include "filtering.h"
#include "pixmaps/dir-open.xpm"
#include "pixmaps/mark.xpm"
#include "pixmaps/deleted.xpm"
#include "pixmaps/new.xpm"
#include "pixmaps/unread.xpm"
#include "pixmaps/replied.xpm"
#include "pixmaps/forwarded.xpm"
#include "pixmaps/clip.xpm"
#include "pixmaps/ignorethread.xpm"
#include "pixmaps/locked.xpm"
#define STATUSBAR_PUSH(mainwin, str) \
{ \
gtk_statusbar_push(GTK_STATUSBAR(mainwin->statusbar), \
@ -120,9 +110,6 @@ static GtkStyle *small_style;
static GtkStyle *small_marked_style;
static GtkStyle *small_deleted_style;
static GdkPixmap *folderxpm;
static GdkBitmap *folderxpmmask;
static GdkPixmap *markxpm;
static GdkBitmap *markxpmmask;
static GdkPixmap *deletedxpm;
@ -534,21 +521,20 @@ void summary_init(SummaryView *summaryview)
GtkStyle *style;
GtkWidget *pixmap;
PIXMAP_CREATE(summaryview->ctree, markxpm, markxpmmask, mark_xpm);
PIXMAP_CREATE(summaryview->ctree, deletedxpm, deletedxpmmask,
deleted_xpm);
PIXMAP_CREATE(summaryview->ctree, newxpm, newxpmmask, new_xpm);
PIXMAP_CREATE(summaryview->ctree, unreadxpm, unreadxpmmask, unread_xpm);
PIXMAP_CREATE(summaryview->ctree, repliedxpm, repliedxpmmask,
replied_xpm);
PIXMAP_CREATE(summaryview->ctree, forwardedxpm, forwardedxpmmask,
forwarded_xpm);
PIXMAP_CREATE(summaryview->ctree, ignorethreadxpm, ignorethreadxpmmask,
ignorethread_xpm);
PIXMAP_CREATE(summaryview->ctree, lockedxpm, lockedxpmmask, locked_xpm);
PIXMAP_CREATE(summaryview->ctree, clipxpm, clipxpmmask, clip_xpm);
PIXMAP_CREATE(summaryview->hbox, folderxpm, folderxpmmask,
dir_open_xpm);
stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_MARK,
&markxpm, &markxpmmask);
stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_DELETED,
&deletedxpm, &deletedxpmmask);
stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_NEW,
&newxpm, &newxpmmask);
stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_UNREAD,
&unreadxpm, &unreadxpmmask);
stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_REPLIED,
&repliedxpm, &repliedxpmmask);
stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_FORWARDED,
&forwardedxpm, &forwardedxpmmask);
stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_CLIP,
&clipxpm, &clipxpmmask);
if (!small_style) {
small_style = gtk_style_copy
@ -584,7 +570,7 @@ void summary_init(SummaryView *summaryview)
gtk_widget_set_style(summaryview->statlabel_select, style);
gtk_widget_set_style(summaryview->statlabel_msgs, style);
pixmap = gtk_pixmap_new(folderxpm, folderxpmmask);
pixmap = stock_pixmap_widget(summaryview->hbox, STOCK_PIXMAP_DIR_OPEN);
gtk_box_pack_start(GTK_BOX(summaryview->hbox), pixmap, FALSE, FALSE, 4);
gtk_box_reorder_child(GTK_BOX(summaryview->hbox), pixmap, 0);
gtk_widget_show(pixmap);

View file

@ -35,7 +35,7 @@
#include <ldap.h>
#include <lber.h>
#include <pthread.h>
#include <dlfcn.h>
/* #include <dlfcn.h> */
#include "mgutils.h"
#include "addritem.h"
@ -1065,6 +1065,7 @@ gboolean syldap_test_connect( SyldapServer *ldapServer ) {
* Test whether LDAP libraries installed.
* Return: TRUE if library available.
*/
#if 0
gboolean syldap_test_ldap_lib() {
void *handle, *fun;
@ -1117,6 +1118,7 @@ gboolean syldap_test_ldap_lib() {
return TRUE;
}
#endif /* 0 */
#endif /* USE_LDAP */

View file

@ -104,7 +104,7 @@ GList *syldap_read_basedn_s ( const gchar *host, const gint port, const gchar *b
GList *syldap_read_basedn ( SyldapServer *ldapServer );
gboolean syldap_test_connect_s ( const gchar *host, const gint port );
gboolean syldap_test_connect ( SyldapServer *ldapServer );
gboolean syldap_test_ldap_lib ( void );
/* gboolean syldap_test_ldap_lib ( void ); */
#endif /* USE_LDAP */

View file

@ -164,7 +164,7 @@ void template_write_config(GSList *tmpl_list)
if (!is_dir_exist(path)) {
if (is_file_exist(path)) {
g_warning(_("file %s allready exists\n"), path);
g_warning(_("file %s already exists\n"), path);
return;
}
if (mkdir(path, S_IRWXU) < 0) {

View file

@ -25,13 +25,13 @@
#endif
#include <glib.h>
#include "gtkstext.h"
#include <string.h> /* for strlen */
#include <stdlib.h> /* for mbstowcs */
#include "undo.h"
#include "utils.h"
#include "gtkstext.h"
#include "prefs_common.h"
typedef struct _UndoInfo UndoInfo;
@ -42,8 +42,8 @@ struct _UndoInfo
gchar *text;
gint start_pos;
gint end_pos;
float window_position;
int mergeable;
gfloat window_position;
gint mergeable;
};
static void undo_free_list (GList **list_pointer);
@ -114,10 +114,10 @@ static UndoInfo *undo_object_new(gchar *text, gint start_pos, gint end_pos,
{
UndoInfo *undoinfo;
undoinfo = g_new (UndoInfo, 1);
undoinfo->text = text;
undoinfo->start_pos = start_pos;
undoinfo->end_pos = end_pos;
undoinfo->action = action;
undoinfo->text = text;
undoinfo->start_pos = start_pos;
undoinfo->end_pos = end_pos;
undoinfo->action = action;
undoinfo->window_position = window_position;
return undoinfo;
}
@ -136,29 +136,27 @@ static void undo_object_free(UndoInfo *undo)
**/
static void undo_free_list(GList **list_pointer)
{
UndoInfo *nth_redo;
GList *cur, *list = *list_pointer;
UndoInfo *undo;
GList *cur, *list = *list_pointer;
if (list == NULL)
return;
debug_print("length of list: %d\n", g_list_length(list));
if (list == NULL) return;
for (cur = list; cur != NULL; cur = cur->next) {
nth_redo = cur->data;
undo_object_free(nth_redo);
undo = (UndoInfo *)cur->data;
undo_object_free(undo);
}
g_list_free(list);
g_list_free(list);
*list_pointer = NULL;
}
void undo_set_undo_change_funct(UndoMain *undostruct, UndoChangeState func,
GtkWidget *changewidget)
void undo_set_change_state_func(UndoMain *undostruct, UndoChangeStateFunc func,
gpointer data)
{
g_return_if_fail(undostruct != NULL);
undostruct->change_func = func;
undostruct->changewidget = changewidget;
g_return_if_fail(undostruct != NULL);
undostruct->change_state_func = func;
undostruct->change_state_data = data;
}
/**
@ -171,20 +169,20 @@ void undo_set_undo_change_funct(UndoMain *undostruct, UndoChangeState func,
**/
static void undo_check_size(UndoMain *undostruct)
{
UndoInfo *nth_undo;
UndoInfo *last_undo;
guint length;
if (prefs_common.undolevels < 1)
return;
if (prefs_common.undolevels < 1) return;
/* No need to check for the redo list size since the undo
list gets freed on any call to compose_undo_add */
if (g_list_length(undostruct->undo) >= prefs_common.undolevels && prefs_common.undolevels > 0) {
nth_undo = g_list_nth_data(undostruct->undo, g_list_length(undostruct->undo) - 1);
undostruct->undo = g_list_remove(undostruct->undo, nth_undo);
g_free (nth_undo->text);
g_free (nth_undo);
}
debug_print("g_list_length (undostruct->undo): %d\n", g_list_length(undostruct->undo));
/* No need to check for the redo list size since the undo
list gets freed on any call to compose_undo_add */
length = g_list_length(undostruct->undo);
if (length >= prefs_common.undolevels && prefs_common.undolevels > 0) {
last_undo = (UndoInfo *)g_list_last(undostruct->undo)->data;
undostruct->undo = g_list_remove(undostruct->undo, last_undo);
undo_object_free(last_undo);
}
debug_print("g_list_length(undostruct->undo): %d\n", length);
}
/**
@ -200,99 +198,90 @@ static void undo_check_size(UndoMain *undostruct)
*
* Return Value: TRUE is merge was sucessful, FALSE otherwise
**/
static gint undo_merge (GList *list, guint start_pos, guint end_pos, gint action, const guchar* text)
static gint undo_merge(GList *list, guint start_pos, guint end_pos,
gint action, const guchar *text)
{
guchar *temp_string;
UndoInfo *last_undo;
gboolean checkit = TRUE;
guchar *temp_string;
UndoInfo *last_undo;
/* This are the cases in which we will NOT merge :
1. if (last_undo->mergeable == FALSE)
[mergeable = FALSE when the size of the undo data was not 1.
or if the data was size = 1 but = '\n' or if the undo object
has been "undone" already ]
2. The size of text is not 1
3. If the new merging data is a '\n'
4. If the last char of the undo_last data is a space/tab
and the new char is not a space/tab ( so that we undo
words and not chars )
5. If the type (action) of undo is different from the last one
Chema */
/* This are the cases in which we will NOT merge :
1. if (last_undo->mergeable == FALSE)
[mergeable = FALSE when the size of the undo data was not 1.
or if the data was size = 1 but = '\n' or if the undo object
has been "undone" already ]
2. The size of text is not 1
3. If the new merging data is a '\n'
4. If the last char of the undo_last data is a space/tab
and the new char is not a space/tab ( so that we undo
words and not chars )
5. If the type (action) of undo is different from the last one
Chema */
if (list == NULL)
return FALSE;
if (list == NULL) return FALSE;
last_undo = list->data;
last_undo = list->data;
if (!last_undo->mergeable)
return FALSE;
if (!last_undo->mergeable) return FALSE;
if (end_pos-start_pos != 1) {
last_undo->mergeable = FALSE;
return FALSE;
}
if (text[0] == '\n')
checkit = FALSE;
if (action != last_undo->action)
checkit = FALSE;
if (action == UNDO_ACTION_REPLACE_INSERT || action == UNDO_ACTION_REPLACE_DELETE)
checkit = FALSE;
if (action == UNDO_ACTION_DELETE && checkit) {
if (last_undo->start_pos!=end_pos && last_undo->start_pos != start_pos && checkit)
checkit = FALSE;
if (last_undo->start_pos == start_pos && checkit) {
/* Deleted with the delete key */
if ( text[0] != ' ' && text[0] != '\t' && checkit &&
(last_undo->text[last_undo->end_pos-last_undo->start_pos - 1] == ' '
|| last_undo->text[last_undo->end_pos-last_undo->start_pos - 1] == '\t'))
checkit = FALSE;
temp_string = g_strdup_printf("%s%s", last_undo->text, text);
g_free(last_undo->text);
last_undo->end_pos += 1;
last_undo->text = temp_string;
} else if (checkit) {
/* Deleted with the backspace key */
if ( text[0] != ' ' && text[0] != '\t' && checkit &&
(last_undo->text[0] == ' '
|| last_undo->text[0] == '\t'))
checkit = FALSE;
temp_string = g_strdup_printf("%s%s", text, last_undo->text);
g_free(last_undo->text);
last_undo->start_pos = start_pos;
last_undo->text = temp_string;
}
} else if (action == UNDO_ACTION_INSERT && checkit) {
if (last_undo->end_pos != start_pos && checkit)
checkit = FALSE;
/* if ( text[0]!=' ' && text[0]!='\t' &&
(last_undo->text [last_undo->end_pos-last_undo->start_pos - 1] ==' '
|| last_undo->text [last_undo->end_pos-last_undo->start_pos - 1] == '\t'))
goto compose_undo_do_not_merge;
*/
if (checkit) {
temp_string = g_strdup_printf("%s%s", last_undo->text, text);
g_free(last_undo->text);
last_undo->end_pos = end_pos;
last_undo->text = temp_string;
}
} else if (checkit)
debug_print("Unknown action [%i] inside undo merge encountered", action);
if (checkit) {
debug_print("Merged: %s\n", text);
return TRUE;
} else {
if (end_pos - start_pos != 1 ||
text[0] == '\n' ||
action != last_undo->action ||
action == UNDO_ACTION_REPLACE_INSERT ||
action == UNDO_ACTION_REPLACE_DELETE) {
last_undo->mergeable = FALSE;
return FALSE;
}
if (action == UNDO_ACTION_DELETE) {
gboolean checkit = TRUE;
if (last_undo->start_pos != end_pos &&
last_undo->start_pos != start_pos) {
last_undo->mergeable = FALSE;
return FALSE;
} else if (last_undo->start_pos == start_pos) {
/* Deleted with the delete key */
if (text[0] != ' ' && text[0] != '\t' &&
(last_undo->text[last_undo->end_pos - last_undo->start_pos - 1] == ' ' ||
last_undo->text[last_undo->end_pos - last_undo->start_pos - 1] == '\t'))
checkit = FALSE;
temp_string = g_strdup_printf("%s%s", last_undo->text, text);
last_undo->end_pos++;
g_free(last_undo->text);
last_undo->text = temp_string;
} else {
/* Deleted with the backspace key */
if (text[0] != ' ' && text[0] != '\t' &&
(last_undo->text[0] == ' ' ||
last_undo->text[0] == '\t'))
checkit = FALSE;
temp_string = g_strdup_printf("%s%s", text, last_undo->text);
last_undo->start_pos = start_pos;
g_free(last_undo->text);
last_undo->text = temp_string;
}
if (!checkit) {
last_undo->mergeable = FALSE;
return FALSE;
}
} else if (action == UNDO_ACTION_INSERT) {
if (last_undo->end_pos != start_pos) {
last_undo->mergeable = FALSE;
return FALSE;
} else {
temp_string = g_strdup_printf("%s%s", last_undo->text, text);
g_free(last_undo->text);
last_undo->end_pos = end_pos;
last_undo->text = temp_string;
}
} else
debug_print("Unknown action [%i] inside undo merge encountered", action);
debug_print("Merged: %s\n", text);
return TRUE;
}
/**
@ -312,18 +301,19 @@ static void undo_add(const gchar *text,
gint start_pos, gint end_pos,
UndoAction action, UndoMain *undostruct)
{
UndoInfo *undoinfo;
UndoInfo *undoinfo;
debug_print("undo_add(%i)*%s*\n", strlen (text), text);
debug_print("undo_add(%i)*%s*\n", strlen (text), text);
g_return_if_fail(text != NULL);
g_return_if_fail(end_pos >= start_pos);
g_return_if_fail(end_pos >= start_pos);
undo_free_list(&undostruct->redo);
undo_free_list(&undostruct->redo);
/* Set the redo sensitivity */
undostruct->change_func(undostruct, UNDO_STATE_UNCHANGED, UNDO_STATE_FALSE,
undostruct->changewidget);
/* Set the redo sensitivity */
undostruct->change_state_func(undostruct,
UNDO_STATE_UNCHANGED, UNDO_STATE_FALSE,
undostruct->change_state_data);
if (undostruct->paste != 0) {
if (action == UNDO_ACTION_INSERT)
@ -335,8 +325,8 @@ static void undo_add(const gchar *text,
undostruct->paste = 0;
}
if (undo_merge(undostruct->undo, start_pos, end_pos, action, text))
return;
if (undo_merge(undostruct->undo, start_pos, end_pos, action, text))
return;
undo_check_size(undostruct);
@ -345,14 +335,16 @@ static void undo_add(const gchar *text,
undoinfo = undo_object_new(g_strdup(text), start_pos, end_pos, action,
GTK_ADJUSTMENT(GTK_STEXT(undostruct->text)->vadj)->value);
if (end_pos-start_pos != 1 || text[0] == '\n')
undoinfo->mergeable = FALSE;
else
undoinfo->mergeable = TRUE;
if (end_pos - start_pos != 1 || text[0] == '\n')
undoinfo->mergeable = FALSE;
else
undoinfo->mergeable = TRUE;
undostruct->undo = g_list_prepend(undostruct->undo, undoinfo);
undostruct->change_func(undostruct, UNDO_STATE_TRUE, UNDO_STATE_UNCHANGED, undostruct->changewidget);
undostruct->change_state_func(undostruct,
UNDO_STATE_TRUE, UNDO_STATE_UNCHANGED,
undostruct->change_state_data);
}
/**
@ -365,30 +357,31 @@ static void undo_add(const gchar *text,
void undo_undo(UndoMain *undostruct)
{
UndoInfo *undoinfo;
guint start_pos, end_pos;
if (undostruct->undo == NULL)
return;
guint start_pos, end_pos;
g_return_if_fail(undostruct != NULL);
if (undostruct->undo == NULL) return;
/* The undo data we need is always at the top op the
stack. So, therefore, the first one */
undoinfo = g_list_nth_data(undostruct->undo, 0);
undoinfo = (UndoInfo *)undostruct->undo->data;
g_return_if_fail(undoinfo != NULL);
undoinfo->mergeable = FALSE;
undostruct->redo = g_list_prepend(undostruct->redo, undoinfo);
undostruct->undo = g_list_remove(undostruct->undo, undoinfo);
/* 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;
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);
gtk_editable_select_region(GTK_EDITABLE(undostruct->text),
0, 0);
/* Move the view (scrollbars) to the correct position */
gtk_adjustment_set_value(GTK_ADJUSTMENT(GTK_STEXT(undostruct->text)->vadj), undoinfo->window_position);
gtk_adjustment_set_value
(GTK_ADJUSTMENT(GTK_STEXT(undostruct->text)->vadj),
undoinfo->window_position);
switch (undoinfo->action) {
case UNDO_ACTION_DELETE:
@ -401,35 +394,37 @@ void undo_undo(UndoMain *undostruct)
gtk_stext_backward_delete(GTK_STEXT(undostruct->text), undoinfo->end_pos-undoinfo->start_pos);
debug_print("UNDO_ACTION_INSERT %d\n", undoinfo->end_pos-undoinfo->start_pos);
break;
case UNDO_ACTION_REPLACE_INSERT:
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);
debug_print("UNDO_ACTION_REPLACE %s\n", undoinfo->text);
/* "pull" another data structure from the list */
undoinfo = g_list_nth_data(undostruct->undo, 0);
g_return_if_fail(undoinfo != NULL);
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);
/* "pull" another data structure from the list */
undoinfo = (UndoInfo *)undostruct->undo->data;
g_return_if_fail(undoinfo != NULL);
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);
debug_print("UNDO_ACTION_REPLACE %s\n", undoinfo->text);
break;
case UNDO_ACTION_REPLACE_DELETE:
g_warning("This should not happen. UNDO_REPLACE_DELETE");
break;
break;
case UNDO_ACTION_REPLACE_DELETE:
g_warning("This should not happen. UNDO_REPLACE_DELETE");
break;
default:
g_assert_not_reached();
break;
}
undostruct->change_func(undostruct, UNDO_STATE_UNCHANGED,
UNDO_STATE_TRUE, undostruct->changewidget);
if (g_list_length (undostruct->undo) == 0)
undostruct->change_func(undostruct, UNDO_STATE_FALSE,
UNDO_STATE_UNCHANGED,
undostruct->changewidget);
undostruct->change_state_func(undostruct,
UNDO_STATE_UNCHANGED, UNDO_STATE_TRUE,
undostruct->change_state_data);
if (undostruct->undo == NULL)
undostruct->change_state_func(undostruct,
UNDO_STATE_FALSE,
UNDO_STATE_UNCHANGED,
undostruct->change_state_data);
}
/**
@ -442,22 +437,20 @@ void undo_undo(UndoMain *undostruct)
void undo_redo(UndoMain *undostruct)
{
UndoInfo *redoinfo;
guint start_pos, end_pos;
guint start_pos, end_pos;
if (undostruct->redo == NULL)
return;
g_return_if_fail(undostruct != NULL);
if (undostruct==NULL)
return;
if (undostruct->redo == NULL) return;
redoinfo = g_list_nth_data(undostruct->redo, 0);
g_return_if_fail (redoinfo!=NULL);
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);
/* 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;
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);
@ -467,46 +460,55 @@ void undo_redo(UndoMain *undostruct)
switch (redoinfo->action) {
case UNDO_ACTION_INSERT:
gtk_stext_set_point(GTK_STEXT(undostruct->text), redoinfo->start_pos);
gtk_stext_set_point(GTK_STEXT(undostruct->text),
redoinfo->start_pos);
gtk_stext_insert(GTK_STEXT(undostruct->text), NULL, NULL,
NULL, redoinfo->text, -1);
NULL, 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_stext_set_point(GTK_STEXT(undostruct->text),
redoinfo->end_pos);
gtk_stext_backward_delete
(GTK_STEXT(undostruct->text),
redoinfo->end_pos - redoinfo->start_pos);
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);
/* "pull" another data structure from the list */
redoinfo = g_list_nth_data(undostruct->redo, 0);
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);
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);
/* "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);
break;
case UNDO_ACTION_REPLACE_INSERT:
g_warning("This should not happen. Redo: UNDO_REPLACE_INSERT");
break;
NULL, redoinfo->text, -1);
break;
case UNDO_ACTION_REPLACE_INSERT:
g_warning("This should not happen. Redo: UNDO_REPLACE_INSERT");
break;
default:
g_assert_not_reached();
break;
}
undostruct->change_func(undostruct, UNDO_STATE_TRUE, UNDO_STATE_UNCHANGED,
undostruct->changewidget);
if (g_list_length(undostruct->redo) == 0)
undostruct->change_func(undostruct, UNDO_STATE_UNCHANGED,
UNDO_STATE_FALSE, undostruct->changewidget);
undostruct->change_state_func(undostruct,
UNDO_STATE_TRUE, UNDO_STATE_UNCHANGED,
undostruct->change_state_data);
if (undostruct->redo == NULL)
undostruct->change_state_func(undostruct,
UNDO_STATE_UNCHANGED,
UNDO_STATE_FALSE,
undostruct->change_state_data);
}
void undo_insert_text_cb(GtkEditable *editable, gchar *new_text,
@ -535,22 +537,24 @@ void undo_insert_text_cb(GtkEditable *editable, gchar *new_text,
void undo_delete_text_cb(GtkEditable *editable, gint start_pos,
gint end_pos, UndoMain *undostruct)
{
gchar *text_to_delete;
gchar *text_to_delete;
if (prefs_common.undolevels <= 0) return;
if (start_pos == end_pos) return;
text_to_delete = gtk_editable_get_chars(GTK_EDITABLE(editable),
text_to_delete = gtk_editable_get_chars(GTK_EDITABLE(editable),
start_pos, end_pos);
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(GtkEditable *editable, UndoMain *undostruct)
{
debug_print("befor Paste: %d\n", undostruct->paste);
if (prefs_common.undolevels > 0)
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))
undostruct->paste = TRUE;
debug_print("after Paste: %d\n", undostruct->paste);
@ -568,27 +572,27 @@ void undo_paste_clipboard_cb (GtkEditable *editable, UndoMain *undostruct)
**/
static gint undo_get_selection(GtkEditable *text, guint *start, guint *end)
{
guint start_pos, end_pos;
guint start_pos, end_pos;
start_pos = text->selection_start_pos;
end_pos = text->selection_end_pos;
start_pos = text->selection_start_pos;
end_pos = text->selection_end_pos;
/* The user can select from end to start too. If so, swap it*/
if (end_pos < start_pos) {
guint swap_pos;
swap_pos = end_pos;
end_pos = start_pos;
start_pos = swap_pos;
}
/* The user can select from end to start too. If so, swap it*/
if (end_pos < start_pos) {
guint swap_pos;
swap_pos = end_pos;
end_pos = start_pos;
start_pos = swap_pos;
}
if (start != NULL)
*start = start_pos;
if (start != NULL)
*start = start_pos;
if (end != NULL)
*end = end_pos;
if (end != NULL)
*end = end_pos;
if ((start_pos > 0 || end_pos > 0) && (start_pos != end_pos))
return TRUE;
else
return FALSE;
if ((start_pos > 0 || end_pos > 0) && (start_pos != end_pos))
return TRUE;
else
return FALSE;
}

View file

@ -44,30 +44,35 @@ typedef enum
typedef struct _UndoMain UndoMain;
typedef void (*UndoChangeState) (UndoMain *undostruct,
gint undo_state,
gint redo_state,
GtkWidget *changewidget);
typedef void (*UndoChangeStateFunc) (UndoMain *undostruct,
gint undo_state,
gint redo_state,
gpointer data);
struct _UndoMain
{
GtkWidget *text;
GtkWidget *changewidget;
GList *undo;
GList *redo;
UndoChangeState change_func;
UndoChangeStateFunc change_state_func;
gpointer change_state_data;
gboolean undo_state : 1;
gboolean redo_state : 1;
gint paste;
};
UndoMain *undo_init (GtkWidget *text);
void undo_destroy (UndoMain *undostruct);
void undo_set_undo_change_funct (UndoMain *undostruct,
UndoChangeState func,
GtkWidget *changewidget);
UndoMain *undo_init (GtkWidget *text);
void undo_destroy (UndoMain *undostruct);
void undo_undo (UndoMain *undostruct);
void undo_redo (UndoMain *undostruct);
void undo_set_change_state_func (UndoMain *undostruct,
UndoChangeStateFunc func,
gpointer data);
void undo_undo (UndoMain *undostruct);
void undo_redo (UndoMain *undostruct);
#endif /* __UNDO_H__ */

View file

@ -270,10 +270,11 @@ static void vcard_free_lists( GSList *listName, GSList *listAddr, GSList *listRe
* Param: cardFile - object.
* Param: tagvalue - will be placed into the linked list.
*/
static gchar *vcard_read_qp( VCardFile *cardFile, char *tagvalue ) {
static gchar *vcard_read_qp( VCardFile *cardFile, gchar *tagvalue ) {
GSList *listQP = NULL;
gint len = 0;
gchar *line = tagvalue;
while( line ) {
listQP = g_slist_append( listQP, line );
len = strlen( line ) - 1;
@ -297,10 +298,11 @@ static gchar *vcard_read_qp( VCardFile *cardFile, char *tagvalue ) {
* Parse tag name from line buffer.
* Return: Buffer containing the tag name, or NULL if no delimiter char found.
*/
static gchar *vcard_get_tagname( char* line, gchar dlm ) {
static gchar *vcard_get_tagname( gchar* line, gchar dlm ) {
gint len = 0;
gchar *tag = NULL;
gchar *lptr = line;
while( *lptr++ ) {
if( *lptr == dlm ) {
len = lptr - line;
@ -467,70 +469,81 @@ static void vcard_read_file( VCardFile *cardFile ) {
/* GSList *listQP = NULL; */
for( ;; ) {
gchar *line = vcard_get_line( cardFile );
gchar *line;
line = vcard_get_line( cardFile );
if( line == NULL ) break;
/* fprintf( stdout, "%s\n", line ); */
/* Parse line */
tagtemp = vcard_get_tagname( line, VCARD_SEP_TAG );
if( tagtemp ) {
/* fprintf( stdout, "\ttemp: %s\n", tagtemp ); */
tagvalue = vcard_get_tagvalue( line, VCARD_SEP_TAG );
tagname = vcard_get_tagname( tagtemp, VCARD_SEP_TYPE );
tagtype = vcard_get_tagvalue( tagtemp, VCARD_SEP_TYPE );
if( tagname == NULL ) {
tagname = tagtemp;
tagtemp = NULL;
}
/* fprintf( stdout, "\tname: %s\n", tagname ); */
/* fprintf( stdout, "\ttype: %s\n", tagtype ); */
/* fprintf( stdout, "\tvalue: %s\n", tagvalue ); */
if( tagvalue ) {
if( g_strcasecmp( tagtype, VCARD_TYPE_QP ) == 0 ) {
/* Quoted-Printable: could span multiple lines */
tagvalue = vcard_read_qp( cardFile, tagvalue );
vcard_unescape_qp( tagvalue );
/* fprintf( stdout, "QUOTED-PRINTABLE !!! final\n>%s<\n", tagvalue ); */
}
if( g_strcasecmp( tagname, VCARD_TAG_START ) == 0 &&
g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) {
/* fprintf( stdout, "start card\n" ); */
vcard_free_lists( listName, listAddress, listRemarks, listID );
listName = listAddress = listRemarks = listID = NULL;
}
if( g_strcasecmp( tagname, VCARD_TAG_FULLNAME ) == 0 ) {
/* fprintf( stdout, "- full name: %s\n", tagvalue ); */
listName = g_slist_append( listName, g_strdup( tagvalue ) );
}
if( g_strcasecmp( tagname, VCARD_TAG_EMAIL ) == 0 ) {
/* fprintf( stdout, "- address: %s\n", tagvalue ); */
listAddress = g_slist_append( listAddress, g_strdup( tagvalue ) );
listRemarks = g_slist_append( listRemarks, g_strdup( tagtype ) );
}
if( g_strcasecmp( tagname, VCARD_TAG_UID ) == 0 ) {
/* fprintf( stdout, "- id: %s\n", tagvalue ); */
listID = g_slist_append( listID, g_strdup( tagvalue ) );
}
if( g_strcasecmp( tagname, VCARD_TAG_END ) == 0 &&
g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) {
/* vCard is complete */
/* fprintf( stdout, "end card\n--\n" ); */
/* vcard_dump_lists( listName, listAddress, listRemarks, listID, stdout ); */
vcard_build_items( cardFile, listName, listAddress, listRemarks, listID );
vcard_free_lists( listName, listAddress, listRemarks, listID );
listName = listAddress = listRemarks = listID = NULL;
}
g_free( tagvalue );
}
g_free( tagname );
g_free( tagtype );
if( tagtemp == NULL ) {
g_free( line );
continue;
}
/* fprintf( stdout, "\ttemp: %s\n", tagtemp ); */
tagvalue = vcard_get_tagvalue( line, VCARD_SEP_TAG );
if( tagvalue == NULL ) {
g_free( tagtemp );
g_free( line );
continue;
}
tagname = vcard_get_tagname( tagtemp, VCARD_SEP_TYPE );
tagtype = vcard_get_tagvalue( tagtemp, VCARD_SEP_TYPE );
if( tagname == NULL ) {
tagname = tagtemp;
tagtemp = NULL;
}
/* fprintf( stdout, "\tname: %s\n", tagname ); */
/* fprintf( stdout, "\ttype: %s\n", tagtype ); */
/* fprintf( stdout, "\tvalue: %s\n", tagvalue ); */
if( g_strcasecmp( tagtype, VCARD_TYPE_QP ) == 0 ) {
/* Quoted-Printable: could span multiple lines */
tagvalue = vcard_read_qp( cardFile, tagvalue );
vcard_unescape_qp( tagvalue );
/* fprintf( stdout, "QUOTED-PRINTABLE !!! final\n>%s<\n", tagvalue ); */
}
if( g_strcasecmp( tagname, VCARD_TAG_START ) == 0 &&
g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) {
/* fprintf( stdout, "start card\n" ); */
vcard_free_lists( listName, listAddress, listRemarks, listID );
listName = listAddress = listRemarks = listID = NULL;
}
if( g_strcasecmp( tagname, VCARD_TAG_FULLNAME ) == 0 ) {
/* fprintf( stdout, "- full name: %s\n", tagvalue ); */
listName = g_slist_append( listName, g_strdup( tagvalue ) );
}
if( g_strcasecmp( tagname, VCARD_TAG_EMAIL ) == 0 ) {
/* fprintf( stdout, "- address: %s\n", tagvalue ); */
listAddress = g_slist_append( listAddress, g_strdup( tagvalue ) );
listRemarks = g_slist_append( listRemarks, g_strdup( tagtype ) );
}
if( g_strcasecmp( tagname, VCARD_TAG_UID ) == 0 ) {
/* fprintf( stdout, "- id: %s\n", tagvalue ); */
listID = g_slist_append( listID, g_strdup( tagvalue ) );
}
if( g_strcasecmp( tagname, VCARD_TAG_END ) == 0 &&
g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) {
/* vCard is complete */
/* fprintf( stdout, "end card\n--\n" ); */
/* vcard_dump_lists( listName, listAddress, listRemarks, listID, stdout ); */
vcard_build_items( cardFile, listName, listAddress, listRemarks, listID );
vcard_free_lists( listName, listAddress, listRemarks, listID );
listName = listAddress = listRemarks = listID = NULL;
}
g_free( tagname );
g_free( tagtype );
g_free( tagvalue );
g_free( tagtemp );
g_free( line );
line = NULL;
}
/* Free lists */
@ -709,37 +722,45 @@ gint vcard_test_read_file( const gchar *fileSpec ) {
/* Parse line */
tagtemp = vcard_get_tagname( line, VCARD_SEP_TAG );
if( tagtemp ) {
tagvalue = vcard_get_tagvalue( line, VCARD_SEP_TAG );
tagname = vcard_get_tagname( tagtemp, VCARD_SEP_TYPE );
tagtype = vcard_get_tagvalue( tagtemp, VCARD_SEP_TYPE );
if( tagname == NULL ) {
tagname = tagtemp;
tagtemp = NULL;
}
if( tagvalue ) {
if( g_strcasecmp( tagtype, VCARD_TYPE_QP ) == 0 ) {
/* Quoted-Printable: could span multiple lines */
tagvalue = vcard_read_qp( cardFile, tagvalue );
vcard_unescape_qp( tagvalue );
}
if( g_strcasecmp( tagname, VCARD_TAG_START ) == 0 &&
g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) {
haveStart = TRUE;
}
if( g_strcasecmp( tagname, VCARD_TAG_END ) == 0 &&
g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) {
/* vCard is complete */
if( haveStart ) cardFile->retVal = MGU_SUCCESS;
}
g_free( tagvalue );
}
g_free( tagname );
g_free( tagtype );
if( tagtemp == NULL ) {
g_free( line );
continue;
}
tagvalue = vcard_get_tagvalue( line, VCARD_SEP_TAG );
if( tagvalue == NULL ) {
g_free( tagtemp );
g_free( line );
continue;
}
tagname = vcard_get_tagname( tagtemp, VCARD_SEP_TYPE );
tagtype = vcard_get_tagvalue( tagtemp, VCARD_SEP_TYPE );
if( tagname == NULL ) {
tagname = tagtemp;
tagtemp = NULL;
}
if( g_strcasecmp( tagtype, VCARD_TYPE_QP ) == 0 ) {
/* Quoted-Printable: could span multiple lines */
tagvalue = vcard_read_qp( cardFile, tagvalue );
vcard_unescape_qp( tagvalue );
}
if( g_strcasecmp( tagname, VCARD_TAG_START ) == 0 &&
g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) {
haveStart = TRUE;
}
if( g_strcasecmp( tagname, VCARD_TAG_END ) == 0 &&
g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) {
/* vCard is complete */
if( haveStart ) cardFile->retVal = MGU_SUCCESS;
}
g_free( tagname );
g_free( tagtype );
g_free( tagvalue );
g_free( tagtemp );
g_free( line );
line = NULL;
}
vcard_close_file( cardFile );
}
@ -752,4 +773,3 @@ gint vcard_test_read_file( const gchar *fileSpec ) {
/*
* End of Source.
*/