2002/07/01 21:02:57
authormegacz <megacz@xwt.org>
Fri, 30 Jan 2004 06:48:36 +0000 (06:48 +0000)
committermegacz <megacz@xwt.org>
Fri, 30 Jan 2004 06:48:36 +0000 (06:48 +0000)
darcs-hash:20040130064836-2ba56-ee854ab69758f5d00bc540f7751e536a2f69572b.gz

CHANGES
src/org/xwt/plat/POSIX.cc
src/org/xwt/plat/POSIX.java

diff --git a/CHANGES b/CHANGES
index 479c6a7..c582287 100644 (file)
--- a/CHANGES
+++ b/CHANGES
 24-Jun megacz MessageQueue.java: fix to MessageQueue to improve
               XML-RPC/SOAP performance
 
-01-Jul megacz DERObjectIdentifier.java: fix to work around GCC compiler bug
\ No newline at end of file
+01-Jul megacz DERObjectIdentifier.java: fix to work around GCC compiler bug
+
+01-Jul megacz XWF.java: fixed an int[] sharing problem
+
+01-Jul megacz XMLRPC.java, NativeDate.java: XMLRPC can now send dateTime's
+
+01-Jul megacz POSIX.java, POSIX.cc: initial window size, DISPLAY
+              string logging, http_proxy environment variable checking, font fixes
index 1f6f4ea..10580b2 100644 (file)
@@ -408,7 +408,7 @@ void org::xwt::plat::POSIX$X11Surface::natInit() {
         KeyPressMask | KeyReleaseMask | ButtonPressMask |
         ButtonReleaseMask | EnterWindowMask | LeaveWindowMask |
         PointerMotionMask | ButtonMotionMask | ConfigureNotify | FocusChangeMask;
-    *((Window*)window) = XCreateWindow(display, RootWindow(display, screen_num), 10, 10, 500, 300, 0,
+    *((Window*)window) = XCreateWindow(display, RootWindow(display, screen_num), 10, 10, 10, 10, 0,
                                        colorDepth, InputOutput, CopyFromParent,
                                        CWColormap | CWBitGravity | CWEventMask, &xswa);
     
@@ -655,8 +655,12 @@ void org::xwt::plat::POSIX$X11Surface::syncCursor() {
 jint org::xwt::plat::POSIX::_getScreenWidth() { return WidthOfScreen(DefaultScreenOfDisplay(display)); }
 jint org::xwt::plat::POSIX::_getScreenHeight() { return HeightOfScreen(DefaultScreenOfDisplay(display)); }
 
-jstring org::xwt::plat::POSIX::getBrowserEnvString() {
-    char* envstr = getenv("BROWSER");
+jstring org::xwt::plat::POSIX::getEnv(jstring key) {
+    int len = JvGetStringUTFLength(key);
+    char buf[len + 1];
+    JvGetStringUTFRegion(key, 0, len, buf);
+    buf[len] = '\0';
+    char* envstr = getenv(buf);
     return envstr == NULL ? NULL : JvNewStringLatin1(envstr);
 }
 
@@ -767,7 +771,7 @@ void org::xwt::plat::POSIX::natInit() {
     selectionWindow = XCreateWindow(display, RootWindow(display, screen_num), 0, 0, 1, 1, 0, colorDepth, InputOutput, CopyFromParent, 0, NULL);
     visual = DefaultVisual(display, screen_num);
     char buf[255];
-    sprintf(buf, "X11 DISPLAY: %s", JvNewStringLatin1(XDisplayString(display)));
+    sprintf(buf, "X11 DISPLAY: %s", XDisplayString(display));
     org::xwt::util::Log::log(this->getClass(), JvNewStringLatin1(buf));
     sprintf(buf, "X11 SHM:     %s", shm_supported ? "enabled" : "disabled");
     org::xwt::util::Log::log(this->getClass(), JvNewStringLatin1(buf));
@@ -802,7 +806,7 @@ void org::xwt::plat::POSIX::natInit() {
 
 JArray<java::lang::String*>* org::xwt::plat::POSIX::listNativeFonts() {
     int numfonts;
-    char** xfonts = XListFonts(display, "-*-*-*-*-*-*-*-*-*-*-*-*-*-*", 0xFFFFFFFF, &numfonts);
+    char** xfonts = XListFonts(display, "-*-*-*-*-normal-*-*-*-*-*-*-*-*-*", 0xFFFFFFFF, &numfonts);
     JArray<java::lang::String*>* fonts = (JArray<java::lang::String*>*)JvNewObjectArray(numfonts, &(::java::lang::String::class$), NULL);
     java::lang::String** jfonts = (java::lang::String**)(elements(fonts));
     for(int i=0; i<numfonts; i++)
index 0be6ced..f8766ba 100644 (file)
@@ -52,14 +52,65 @@ public class POSIX extends GCJ {
     protected native void eventThread();
     private native void natInit();
 
-    /** returns the $BROWSER environment variable, since System.getenv() is useless */
-    private static native String getBrowserEnvString();
+    /** returns the $BROWSER environment variable, since System.getEnv() is useless */
+    private static native String getEnv(String key);
 
     /** spawns a process which is immune to SIGHUP */
     private static native void spawnChildProcess(String[] command);
 
+    protected synchronized HTTP.ProxyInfo _detectProxy() {
+
+        HTTP.ProxyInfo ret = new HTTP.ProxyInfo();
+
+        ret.httpProxyHost = getEnv("http_proxy");
+        if (ret.httpProxyHost != null) {
+            if (ret.httpProxyHost.startsWith("http://")) ret.httpProxyHost = ret.httpProxyHost.substring(7);
+            if (ret.httpProxyHost.endsWith("/")) ret.httpProxyHost = ret.httpProxyHost.substring(0, ret.httpProxyHost.length() - 1);
+            if (ret.httpProxyHost.indexOf(':') != -1) {
+                ret.httpProxyPort = Integer.parseInt(ret.httpProxyHost.substring(ret.httpProxyHost.indexOf(':') + 1));
+                ret.httpProxyHost = ret.httpProxyHost.substring(0, ret.httpProxyHost.indexOf(':'));
+            } else {
+                ret.httpProxyPort = 80;
+            }
+        }
+
+        ret.httpsProxyHost = getEnv("https_proxy");
+        if (ret.httpsProxyHost != null) {
+            if (ret.httpsProxyHost.startsWith("https://")) ret.httpsProxyHost = ret.httpsProxyHost.substring(7);
+            if (ret.httpsProxyHost.endsWith("/")) ret.httpsProxyHost = ret.httpsProxyHost.substring(0, ret.httpsProxyHost.length() - 1);
+            if (ret.httpsProxyHost.indexOf(':') != -1) {
+                ret.httpsProxyPort = Integer.parseInt(ret.httpsProxyHost.substring(ret.httpsProxyHost.indexOf(':') + 1));
+                ret.httpsProxyHost = ret.httpsProxyHost.substring(0, ret.httpsProxyHost.indexOf(':'));
+            } else {
+                ret.httpsProxyPort = 80;
+            }
+        }
+
+        ret.socksProxyHost = getEnv("socks_proxy");
+        if (ret.socksProxyHost != null) {
+            if (ret.socksProxyHost.startsWith("socks://")) ret.socksProxyHost = ret.socksProxyHost.substring(7);
+            if (ret.socksProxyHost.endsWith("/")) ret.socksProxyHost = ret.socksProxyHost.substring(0, ret.socksProxyHost.length() - 1);
+            if (ret.socksProxyHost.indexOf(':') != -1) {
+                ret.socksProxyPort = Integer.parseInt(ret.socksProxyHost.substring(ret.socksProxyHost.indexOf(':') + 1));
+                ret.socksProxyHost = ret.socksProxyHost.substring(0, ret.socksProxyHost.indexOf(':'));
+            } else {
+                ret.socksProxyPort = 80;
+            }
+        }
+
+        String noproxy = getEnv("no_proxy");
+        if (noproxy != null) {
+            StringTokenizer st = new StringTokenizer(noproxy, ",");
+            ret.excluded = new String[st.countTokens()];
+            for(int i=0; st.hasMoreTokens(); i++) ret.excluded[i] = st.nextToken();
+        }
+
+        if (ret.httpProxyHost == null && ret.socksProxyHost == null) return null;
+        return ret;
+    }
+
     protected void _newBrowserWindow(String url) {
-        String browserString = getBrowserEnvString();
+        String browserString = getEnv("BROWSER");
         if (browserString == null) {
             browserString = "netscape " + url;
         } else if (browserString.indexOf("%s") != -1) {
@@ -256,6 +307,7 @@ public class POSIX extends GCJ {
     public void initFonts() {
         // use the font list to build nativeFontList
         String[] fonts = listNativeFonts();
+
         for(int k=0; k<fonts.length; k++) {
             String s = fonts[k].toLowerCase();
             StringTokenizer st = new StringTokenizer(s, "-", false);
@@ -263,9 +315,16 @@ public class POSIX extends GCJ {
             
             try {
                 for(int i=0; st.hasMoreTokens(); i++) font[i] = st.nextToken();
+
+                // limit to iso8559 until we can do I18N properly....
+                if (font.length > 13) {
+                    if (!font[13].equals("iso8559")) continue;
+                    if (font.length < 15 || !font[14].equals("1")) continue;
+                }
+
                 String name = font[1];
                 String size = font[6];
-                String slant = font[3].equals("i") ? "i" : "";
+                String slant = (font[3].equals("i") || font[3].equals("o")) ? "i" : "";
                 String bold = font[2].equals("bold") ? "b" : "";
                 String tail = s.substring(1 + font[0].length() + 1 + font[1].length() + 1 + font[2].length() + 1 +
                                           font[3].length() + 1 + font[4].length() + 1);