You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ap...@apache.org on 2007/05/10 15:53:38 UTC

svn commit: r536867 - in /harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux: LinuxEvent.java LinuxWindow.java

Author: apetrenko
Date: Thu May 10 06:53:37 2007
New Revision: 536867

URL: http://svn.apache.org/viewvc?view=rev&rev=536867
Log:
Patch for HARMONY-3541 "[classlib][awt] Some tests crash VM on Linux"

Modified:
    harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxEvent.java
    harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWindow.java

Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxEvent.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxEvent.java?view=diff&rev=536867&r1=536866&r2=536867
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxEvent.java (original)
+++ harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxEvent.java Thu May 10 06:53:37 2007
@@ -282,6 +282,10 @@
 
     private void processMotionEvent(X11.XMotionEvent event) {
         LinuxWindow win = (LinuxWindow) factory.getWindowById(windowId);
+        
+        if (win == null) {
+            return;
+        }
 
         localPos = new Point(event.get_x(), event.get_y());
         if (!localPos.equals(win.queryPointer())) {
@@ -357,6 +361,11 @@
 
     private void processConfigureEvent(X11.XConfigureEvent event) {
         LinuxWindow win = (LinuxWindow)factory.getWindowById(windowId);
+        
+        if (win == null) {
+            return;
+        }
+        
         boolean child = win.isChild();
         boolean isSynthetic = event.get_send_event() != 0;
 
@@ -441,9 +450,11 @@
      */
     private void processInsetsChange(Insets newInsets) {
         LinuxWindow win = (LinuxWindow) factory.getWindowById(windowId);
+        
         if ((win == null) || win.isChild() || win.isUndecorated()) {
             return;
         }
+        
         eventId = ID_INSETS_CHANGED;
 
         if (newInsets != null) {
@@ -482,6 +493,11 @@
 
     private void deriveNewWindowState(int typesCount, CLongPointer types) {
         LinuxWindow win = (LinuxWindow) factory.getWindowById(windowId);
+
+        if (win == null) {
+            return;
+        }
+        
         int oldState = win.getState();
         int newState = 0;
         boolean oldAlwaysOnTop = win.alwaysOnTop;
@@ -610,17 +626,20 @@
     }
 
     private long getContentId(long winId) {
-        if (factory.validWindowId(winId)) {
-            LinuxWindow win = (LinuxWindow) factory
-                    .getWindowById(winId);
+        LinuxWindow win = (LinuxWindow) factory.getWindowById(winId);
+        
+        if (win != null) {
             LinuxWindow content = win.getContentWindow();
+            
             if (content != null) {
                 long contentId = content.getId();
+                
                 if (factory.validWindowId(contentId)) {
                     return contentId;
                 }
             }
         }
+        
         return winId;
     }
 

Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWindow.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWindow.java?view=diff&rev=536867&r1=536866&r2=536867
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWindow.java (original)
+++ harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWindow.java Thu May 10 06:53:37 2007
@@ -636,12 +636,17 @@
         PointerPointer children = bridge.createPointerPointer(1, true);
         Int32Pointer count = bridge.createInt32Pointer(1, false);
 
-        x11.XQueryTree(display, windowID, root, parent, children, count);
-        VoidPointer data = children.get(0);
-        if (data != null) {
-            x11.XFree(data);
+        if (x11.XQueryTree(display, windowID, root, parent, children, count) != 0) {
+            final VoidPointer data = children.get(0);
+            
+            if (data != null) {
+                x11.XFree(data);
+            }
+            
+            return parent.get(0);
         }
-        return parent.get(0);
+        
+        return 0;
     }
 
     private long getFrameID(long windowId, long rootID) {