changeset 4862:0fe2ffdb7906

[gaim-migrate @ 5189] Win32 interface to gtkspell. If Aspell installation is found Gaim will load and use gtkspell dll, if not dummy funcs are used. committer: Tailor Script <tailor@pidgin.im>
author Herman Bloggs <hermanator12002@yahoo.com>
date Sat, 22 Mar 2003 18:38:25 +0000
parents 6cb8b0686e46
children ee46d3875cc8
files src/win32/wspell.c src/win32/wspell.h
diffstat 2 files changed, 121 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/win32/wspell.c	Sat Mar 22 18:38:25 2003 +0000
@@ -0,0 +1,87 @@
+/*
+ *  wspell.c
+ *
+ *  Author: Herman Bloggs <hermanator12002@yahoo.com>
+ *  Date: March, 2003
+ *  Description: Windows Gaim gtkspell interface.
+ */
+#include <windows.h>
+#include <string.h>
+#include <stdlib.h>
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gtkspell/gtkspell.h>
+#include "win32dep.h"
+
+extern void debug_printf(char * fmt, ...);
+
+/* GTKSPELL DUMMY FUNCS */
+GtkSpell* wgtkspell_new_attach(GtkTextView *view,
+			       const gchar *lang, 
+			       GError **error) {return NULL;}
+GtkSpell* wgtkspell_get_from_text_view(GtkTextView *view) {return NULL;}
+void      wgtkspell_detach(GtkSpell *spell) {}
+gboolean  wgtkspell_set_language(GtkSpell *spell,
+				const gchar *lang,
+				GError **error) {return 0;}
+void      wgtkspell_recheck_all(GtkSpell *spell) {}
+
+/* GTKSPELL PROTOS */
+GtkSpell*         (*wgaim_gtkspell_new_attach)              (GtkTextView *,
+							     const gchar *, 
+							     GError **) = wgtkspell_new_attach;
+
+GtkSpell*         (*wgaim_gtkspell_get_from_text_view)      (GtkTextView*) = wgtkspell_get_from_text_view;
+
+void              (*wgaim_gtkspell_detach)                  (GtkSpell*) = wgtkspell_detach;
+
+gboolean          (*wgaim_gtkspell_set_language)            (GtkSpell*,
+							     const gchar*,
+							     GError**) = wgtkspell_set_language;
+
+void              (*wgaim_gtkspell_recheck_all)             (GtkSpell*) = wgtkspell_recheck_all;
+
+static void load_gtkspell() {
+	wgaim_gtkspell_new_attach = (void*)wgaim_find_and_loadproc("libgtkspell.dll", "gtkspell_new_attach" );
+	wgaim_gtkspell_get_from_text_view = (void*)wgaim_find_and_loadproc("libgtkspell.dll", "gtkspell_get_from_text_view");
+	wgaim_gtkspell_detach = (void*)wgaim_find_and_loadproc("libgtkspell.dll", "gtkspell_detach");
+	wgaim_gtkspell_set_language = (void*)wgaim_find_and_loadproc("libgtkspell.dll", "gtkspell_set_language");
+	wgaim_gtkspell_recheck_all = (void*)wgaim_find_and_loadproc("libgtkspell.dll", "gtkspell_recheck_all");
+}
+
+void wgaim_gtkspell_init() {
+	    HKEY hKey;
+	    const char buffer[1024] = "";
+	    DWORD size = sizeof(buffer);
+	    DWORD type;
+
+	    if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
+					     "Software\\Aspell", 
+					     0,  
+					     KEY_QUERY_VALUE,  
+					     &hKey)) {
+		    /* Official aspell.net win32 installation or Gaim's aspell installation */
+		    if(ERROR_SUCCESS == RegQueryValueEx(hKey, "Path", NULL, &type, (LPBYTE)buffer, &size) ||
+		       ERROR_SUCCESS == RegQueryValueEx(hKey, "", NULL, &type, (LPBYTE)buffer, &size)) {
+			    int mark = strlen(buffer);
+			    strcat(buffer, "\\aspell-15.dll");
+			    if(_access( buffer, 0 ) < 0)
+				    debug_printf("Couldn't find aspell-15.dll\n");
+			    else {
+				    char* tmp=NULL;
+				    buffer[mark] = '\0';
+				    debug_printf("Found Aspell in %s\n", buffer);
+				    /* Add path to Aspell dlls to PATH */
+				    tmp = g_malloc0(strlen(getenv("PATH")) + strlen(buffer) + 7);
+				    sprintf(tmp, "PATH=%s;%s", getenv("PATH"), buffer);
+				    putenv(tmp);
+				    g_free(tmp);
+				    load_gtkspell();
+			    }
+		    }
+		    else {
+			    debug_printf("Couldn't find path for Aspell\n");
+		    }
+		    RegCloseKey(hKey);
+	    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/win32/wspell.h	Sat Mar 22 18:38:25 2003 +0000
@@ -0,0 +1,34 @@
+/*
+ *  wspell.h
+ *
+ *  Author: Herman Bloggs <hermanator12002@yahoo.com>
+ *  Date: March, 2003
+ *  Description: Windows Gaim gtkspell interface.
+ */
+#ifndef _WSPELL_H_
+#define _WSPELL_H_
+#include <gtkspell/gtkspell.h>
+
+extern void wgaim_gtkspell_init();
+
+extern GtkSpell* (*wgaim_gtkspell_new_attach)(GtkTextView*, const gchar*, GError**);
+#define gtkspell_new_attach( view, lang, error ) \
+wgaim_gtkspell_new_attach( ## view ##, ## lang ##, ## error ## )
+
+extern GtkSpell* (*wgaim_gtkspell_get_from_text_view)(GtkTextView*);
+#define gtkspell_get_from_text_view( view ) \
+wgaim_gtkspell_get_from_text_view( ## view ## )
+
+extern void (*wgaim_gtkspell_detach)(GtkSpell*);
+#define gtkspell_detach( spell ) \
+wgaim_gtkspell_detach( ## spell ## )
+
+extern gboolean (*wgaim_gtkspell_set_language)(GtkSpell*,	const gchar*, GError**);
+#define gtkspell_set_language( spell, lang, error ) \
+wgaim_gtkspell_set_language( ## spell ##, ## lang ##, ## error ## )
+
+extern void (*wgaim_gtkspell_recheck_all)(GtkSpell*);
+#define gtkspell_recheck_all( spell ) \
+wgaim_gtkspell_recheck_all( ## spell ## )
+
+#endif /* _WSPELL_H_ */