# HG changeset patch # User Daniel Atallah # Date 1267676539 0 # Node ID b248178bc7b0258c71a475d0c6081e254936cbd3 # Parent 1469137fb045a17b0179be53e1476e96858b2108 Upgrade GtkSpell to 2.0.16 on Windows. The installer needs a bunch more work, but that is for later diff -r 1469137fb045 -r b248178bc7b0 Makefile.mingw --- a/Makefile.mingw Thu Mar 04 04:16:49 2010 +0000 +++ b/Makefile.mingw Thu Mar 04 04:22:19 2010 +0000 @@ -45,7 +45,8 @@ gssapi32.dll \ k5sprt32.dll \ krb5_32.dll \ - libgtkspell.dll \ + libenchant.dll \ + libgtkspell-0.dll \ libmeanwhile-1.dll \ libnspr4.dll \ libplc4.dll \ @@ -88,6 +89,10 @@ endif $(MAKE) -C share/ca-certs -f $(MINGW_MAKEFILE) install $(MAKE) -C share/sounds -f $(MINGW_MAKEFILE) install + mkdir -p $(PIDGIN_INSTALL_DIR)/spellcheck + cp $(GTKSPELL_TOP)/bin/libgtkspell-0.dll $(PIDGIN_INSTALL_DIR)/spellcheck + cp $(ENCHANT_TOP)/bin/libenchant.dll $(PIDGIN_INSTALL_DIR)/spellcheck + cp -R $(ENCHANT_TOP)/lib $(PIDGIN_INSTALL_DIR)/spellcheck pidgin/win32/nsis/gtk-runtime-$(GTK_BUNDLE_VERSION).zip: pidgin/win32/nsis/generate_gtk_zip.sh `pwd` @@ -101,7 +106,9 @@ create_release_install_dir: install rm -rf $(STRIPPED_RELEASE_DIR) - cp -R $(PIDGIN_INSTALL_DIR) $(STRIPPED_RELEASE_DIR) + mkdir $(STRIPPED_RELEASE_DIR) + tar -cf - $(PIDGIN_INSTALL_DIR) --exclude=Gtk --exclude=exchndl.dll --exclude=spellcheck \ + | tar --strip 2 -xC $(STRIPPED_RELEASE_DIR) -f - find $(STRIPPED_RELEASE_DIR) \( -name '*.dll' -o -name '*.exe' \) \ -not \( -false $(EXTERNAL_DLLS_FIND_EXP) \) \ -exec $(STRIP) --strip-unneeded {} ';' diff -r 1469137fb045 -r b248178bc7b0 libpurple/win32/global.mak --- a/libpurple/win32/global.mak Thu Mar 04 04:16:49 2010 +0000 +++ b/libpurple/win32/global.mak Thu Mar 04 04:22:19 2010 +0000 @@ -10,8 +10,8 @@ # Locations of our various dependencies WIN32_DEV_TOP ?= $(PIDGIN_TREE_TOP)/../win32-dev -ASPELL_TOP ?= $(WIN32_DEV_TOP)/aspell-dev-0-50-3-3 -GTKSPELL_TOP ?= $(WIN32_DEV_TOP)/gtkspell-2.0.11-daa1 +GTKSPELL_TOP ?= $(WIN32_DEV_TOP)/gtkspell-2.0.16 +ENCHANT_TOP ?= $(WIN32_DEV_TOP)/enchant_1.5.0-2_win32 GTK_TOP ?= $(WIN32_DEV_TOP)/gtk_2_0-2.14 GTK_BIN ?= $(GTK_TOP)/bin BONJOUR_TOP ?= $(WIN32_DEV_TOP)/Bonjour_SDK diff -r 1469137fb045 -r b248178bc7b0 pidgin/Makefile.mingw --- a/pidgin/Makefile.mingw Thu Mar 04 04:16:49 2010 +0000 +++ b/pidgin/Makefile.mingw Thu Mar 04 04:22:19 2010 +0000 @@ -9,8 +9,6 @@ DEFINES := $(subst -DWIN32_LEAN_AND_MEAN,,$(DEFINES)) -NEEDED_DLLS = $(GTKSPELL_TOP)/gtkspell/libgtkspell.dll - ## ## VARIABLE DEFINITIONS ## @@ -43,14 +41,12 @@ -I$(GTK_TOP)/include/atk-1.0 \ -I$(GTK_TOP)/include/cairo \ -I$(GTK_TOP)/lib/gtk-2.0/include \ - -I$(GTKSPELL_TOP) \ - -I$(ASPELL_TOP)/include + -I$(GTKSPELL_TOP)/include/gtkspell-2.0 LIB_PATHS += -L$(GTK_TOP)/lib \ -L$(PURPLE_TOP) \ -L$(PIDGIN_TOP) \ - -L$(PIDGIN_IDLETRACK_TOP) \ - -L$(ASPELL_TOP)/lib + -L$(PIDGIN_IDLETRACK_TOP) ## ## SOURCES, OBJECTS @@ -151,7 +147,6 @@ install_shallow: $(PIDGIN_INSTALL_DIR) $(EXE_TARGET).exe $(PIDGIN_TARGET).dll cp $(EXE_TARGET).exe $(PIDGIN_TARGET).dll $(PIDGIN_INSTALL_DIR) - cp $(NEEDED_DLLS) $(PIDGIN_INSTALL_DIR) install: install_shallow all $(MAKE) -C $(PIDGIN_PLUGINS_TOP) -f $(MINGW_MAKEFILE) install diff -r 1469137fb045 -r b248178bc7b0 pidgin/win32/winpidgin.c --- a/pidgin/win32/winpidgin.c Thu Mar 04 04:16:49 2010 +0000 +++ b/pidgin/win32/winpidgin.c Thu Mar 04 04:22:19 2010 +0000 @@ -188,6 +188,18 @@ return TRUE; } +static BOOL dll_prep(const TCHAR *pidgin_dir) { + TCHAR path[MAX_PATH + 1]; + path[0] = _T('\0'); + + if (*pidgin_dir) { + _sntprintf(path, sizeof(path) / sizeof(TCHAR), _T("%s\\Gtk\\bin"), pidgin_dir); + path[sizeof(path) / sizeof(TCHAR)] = _T('\0'); + } + + return common_dll_prep(path); +} + static void portable_mode_dll_prep(const TCHAR *pidgin_dir) { /* need to be able to fit MAX_PATH + "PIDGIN_ASPELL_DIR=\\Aspell\\bin" in path2 */ TCHAR path[MAX_PATH + 1]; @@ -233,18 +245,6 @@ } } -static BOOL dll_prep(const TCHAR *pidgin_dir) { - TCHAR path[MAX_PATH + 1]; - path[0] = _T('\0'); - - if (*pidgin_dir) { - _sntprintf(path, sizeof(path) / sizeof(TCHAR), _T("%s\\Gtk\\bin"), pidgin_dir); - path[sizeof(path) / sizeof(TCHAR)] = _T('\0'); - } - - return common_dll_prep(path); -} - static TCHAR* winpidgin_lcid_to_posix(LCID lcid) { TCHAR *posix = NULL; int lang_id = PRIMARYLANGID(lcid); diff -r 1469137fb045 -r b248178bc7b0 pidgin/win32/wspell.c --- a/pidgin/win32/wspell.c Thu Mar 04 04:16:49 2010 +0000 +++ b/pidgin/win32/wspell.c Thu Mar 04 04:22:19 2010 +0000 @@ -3,7 +3,7 @@ * * File: wspell.c * Date: March, 2003 - * Description: Windows Purple gtkspell interface. + * Description: Windows Pidgin gtkspell interface. * * Copyright (C) 2002-2003, Herman Bloggs * @@ -32,8 +32,22 @@ #include "win32dep.h" #include "wspell.h" +/* Intermediate function so that we can eat Enchant error popups when it doesn't find a DLL + * This is fixed upstream, but not released */ +GtkSpell* (*wpidginspell_new_attach_proxy) (GtkTextView *, + const gchar *, + GError **) = NULL; + /* GTKSPELL DUMMY FUNCS */ -static GtkSpell* wgtkspell_new_attach(GtkTextView *view, const gchar *lang, GError **error) {return NULL;} +static GtkSpell* wgtkspell_new_attach(GtkTextView *view, const gchar *lang, GError **error) { + GtkSpell *ret = NULL; + if (wpidginspell_new_attach_proxy) { + UINT old_error_mode = SetErrorMode(SEM_FAILCRITICALERRORS); + ret = wpidginspell_new_attach_proxy(view, lang, error); + SetErrorMode(old_error_mode); + } + return ret; +} static GtkSpell* wgtkspell_get_from_text_view(GtkTextView *view) {return NULL;} static void wgtkspell_detach(GtkSpell *spell) {} static gboolean wgtkspell_set_language(GtkSpell *spell, const gchar *lang, GError **error) {return FALSE;} @@ -54,28 +68,44 @@ void (*wpidginspell_recheck_all) (GtkSpell*) = wgtkspell_recheck_all; +#define GTKSPELL_DLL "libgtkspell-0.dll" + static void load_gtkspell() { - wpidginspell_new_attach = (void*) wpurple_find_and_loadproc("libgtkspell.dll", "gtkspell_new_attach" ); - wpidginspell_get_from_text_view = (void*) wpurple_find_and_loadproc("libgtkspell.dll", "gtkspell_get_from_text_view"); - wpidginspell_detach = (void*) wpurple_find_and_loadproc("libgtkspell.dll", "gtkspell_detach"); - wpidginspell_set_language = (void*) wpurple_find_and_loadproc("libgtkspell.dll", "gtkspell_set_language"); - wpidginspell_recheck_all = (void*) wpurple_find_and_loadproc("libgtkspell.dll", "gtkspell_recheck_all"); + UINT old_error_mode = SetErrorMode(SEM_FAILCRITICALERRORS); + gchar *tmp, *tmp2; + const char *path = g_getenv("PATH"); + tmp = g_build_filename(wpurple_install_dir(), "spellcheck", NULL); + tmp2 = g_strdup_printf("%s%s%s", (path ? path : ""), + (path ? G_SEARCHPATH_SEPARATOR_S : ""), + tmp); + g_free(tmp); + g_setenv("PATH", tmp2, TRUE); + + /* Suppress error popups */ + wpidginspell_new_attach_proxy = (void*) wpurple_find_and_loadproc(GTKSPELL_DLL, "gtkspell_new_attach" ); + if (wpidginspell_new_attach_proxy) { + wpidginspell_get_from_text_view = (void*) wpurple_find_and_loadproc(GTKSPELL_DLL, "gtkspell_get_from_text_view"); + wpidginspell_detach = (void*) wpurple_find_and_loadproc(GTKSPELL_DLL, "gtkspell_detach"); + wpidginspell_set_language = (void*) wpurple_find_and_loadproc(GTKSPELL_DLL, "gtkspell_set_language"); + wpidginspell_recheck_all = (void*) wpurple_find_and_loadproc(GTKSPELL_DLL, "gtkspell_recheck_all"); + } else { + purple_debug_warning("wspell", "Couldn't load gtkspell (%s) \n", GTKSPELL_DLL); + /*wpidginspell_new_attach = wgtkspell_new_attach;*/ + } + SetErrorMode(old_error_mode); } -static char* lookup_aspell_path() { +static void lookup_aspell_path() { const char *tmp; + gchar *aspell_path; if ((tmp = g_getenv("PIDGIN_ASPELL_DIR"))) - return g_strdup(tmp); - - return wpurple_read_reg_string(HKEY_LOCAL_MACHINE, "Software\\Aspell", "Path"); -} - -void winpidgin_spell_init() { - char *aspell_path = lookup_aspell_path(); + aspell_path = g_strdup(tmp); + else + aspell_path = wpurple_read_reg_string(HKEY_LOCAL_MACHINE, "Software\\Aspell", "Path"); if (aspell_path != NULL) { - char *tmp = g_strconcat(aspell_path, "\\aspell-15.dll", NULL); + char *tmp = g_build_filename(aspell_path, "aspell-15.dll", NULL); if (g_file_test(tmp, G_FILE_TEST_EXISTS)) { const char *path = g_getenv("PATH"); purple_debug_info("wspell", "Found Aspell in %s\n", aspell_path); @@ -88,14 +118,18 @@ g_setenv("PATH", tmp, TRUE); - load_gtkspell(); - } else { + } else purple_debug_warning("wspell", "Couldn't find aspell-15.dll\n"); - } g_free(tmp); g_free(aspell_path); - } else { - purple_debug_warning("wspell", "Couldn't find path for Aspell\n"); - } + } else + purple_debug_warning("wspell", "Aspell installation not found (this isn't necessarily a problem)\n"); } + +void winpidgin_spell_init() { + /* We keep doing the aspell path thing so that previously installed dictionaries still work */ + lookup_aspell_path(); + + load_gtkspell(); +}