case wxCLEAR:        mode = GDK_CLEAR;         break;
         case wxSET:          mode = GDK_SET;           break;
         case wxOR_INVERT:    mode = GDK_OR_INVERT;     break;
-        case wxSRC_AND:
         case wxAND:          mode = GDK_AND;           break;
-        case wxSRC_OR:
         case wxOR:           mode = GDK_OR;            break;
         case wxEQUIV:        mode = GDK_EQUIV;         break;
         case wxNAND:         mode = GDK_NAND;          break;
         case wxCOPY:         mode = GDK_COPY;          break;
         case wxNO_OP:        mode = GDK_NOOP;          break;
         case wxSRC_INVERT:   mode = GDK_COPY_INVERT;   break;
+        
+        // unsupported by GTK
+        case wxNOR:          mode = GDK_COPY;          break;
+
+        // these are actually ternary ROPs
+        case wxSRC_AND:      mode = GDK_AND;           break;
+        case wxSRC_OR:       mode = GDK_OR;            break;
 #endif
         default:
         {
 
                       (GdkEventMask)
                          (GDK_BUTTON_PRESS_MASK |
                           GDK_BUTTON_RELEASE_MASK |
-                          GDK_KEY_PRESS_MASK |
-                          GDK_KEY_RELEASE_MASK |
                           GDK_POINTER_MOTION_HINT_MASK |
                           GDK_POINTER_MOTION_MASK),
                       (GdkWindow *) NULL,
 
         case wxCLEAR:        mode = GDK_CLEAR;         break;
         case wxSET:          mode = GDK_SET;           break;
         case wxOR_INVERT:    mode = GDK_OR_INVERT;     break;
-        case wxSRC_AND:
         case wxAND:          mode = GDK_AND;           break;
-        case wxSRC_OR:
         case wxOR:           mode = GDK_OR;            break;
         case wxEQUIV:        mode = GDK_EQUIV;         break;
         case wxNAND:         mode = GDK_NAND;          break;
         case wxCOPY:         mode = GDK_COPY;          break;
         case wxNO_OP:        mode = GDK_NOOP;          break;
         case wxSRC_INVERT:   mode = GDK_COPY_INVERT;   break;
+        
+        // unsupported by GTK
+        case wxNOR:          mode = GDK_COPY;          break;
+
+        // these are actually ternary ROPs
+        case wxSRC_AND:      mode = GDK_AND;           break;
+        case wxSRC_OR:       mode = GDK_OR;            break;
 #endif
         default:
         {
 
                       (GdkEventMask)
                          (GDK_BUTTON_PRESS_MASK |
                           GDK_BUTTON_RELEASE_MASK |
-                          GDK_KEY_PRESS_MASK |
-                          GDK_KEY_RELEASE_MASK |
                           GDK_POINTER_MOTION_HINT_MASK |
                           GDK_POINTER_MOTION_MASK),
                       (GdkWindow *) NULL,
 
         return;
 
     int c_rop;
+    
     // These may be wrong
     switch (m_logicalFunction)
     {
     case wxEQUIV:
     case wxNAND:
     case wxCOPY:
+    
+#if 0
+        // these probably wouldn't be wrong, RR
+
+           case wxXOR:          c_rop = R2_XORPEN;        break;
+           case wxINVERT:       c_rop = R2_NOT;           break;
+           case wxOR_REVERSE:   c_rop = R2_MERGEPENNOT;   break;
+           case wxAND_REVERSE:  c_rop = R2_MASKPENNOT;    break;
+           case wxCLEAR:        c_rop = R2_BLACK;         break;
+           case wxSET:          c_rop = R2_WHITE;         break;
+           case wxOR_INVERT:    c_rop = R2_MERGENOTPEN;   break;
+           case wxAND:          c_rop = R2_MASKPEN;       break;
+           case wxOR:           c_rop = R2_MERGEPEN;      break;
+           case wxEQUIV:        c_rop = R2_NOTXORPEN;     break;
+           case wxNAND:         c_rop = R2_NOTMASKPEN;    break;
+           case wxAND_INVERT:   c_rop = R2_MASKNOTPEN;    break;
+           case wxCOPY:         c_rop = R2_COPYPEN;       break;
+           case wxNO_OP:        c_rop = R2_NOP;           break;
+           case wxSRC_INVERT:   c_rop = R2_NOTCOPYPEN;    break;
+        
+        // what is this one?
+        case wxNOR:          c_rop = R2_COPYPEN;       break;
+
+        // these are actually ternary ROPs
+        case wxSRC_AND:      c_rop = R2_MASKPEN;       break;
+        case wxSRC_OR:       c_rop = R2_MERGEPEN;      break;
+#endif
+    
     default:
         c_rop = R2_COPYPEN; break;
     }