support for non-selectable devices (WIN32)
authorClaus Gittinger <cg@exept.de>
Wed, 31 Jul 1996 20:36:18 +0200
changeset 1007 6b6b2a63f01d
parent 1006 a5c9784b8b97
child 1008 ca0a38a11bdc
support for non-selectable devices (WIN32)
DevWorkst.st
DeviceWorkstation.st
--- a/DevWorkst.st	Thu Jul 25 22:57:46 1996 +0200
+++ b/DevWorkst.st	Wed Jul 31 20:36:18 1996 +0200
@@ -1232,6 +1232,14 @@
     "Modified: 10.6.1996 / 21:01:50 / cg"
 !
 
+sendsExposeAfterScroll
+    "return true, if this display asynchronously sends expose events after a
+     scroll operation. False otherwise. Asynchronous expose events are an X
+     speciality, which affects a few methods outside of the display class (sorry)"
+
+    ^ false
+!
+
 supportedImageFormats
     "return an array with supported image formats; each array entry
      is another array, consisting of depth and bitsPerPixel values.
@@ -2827,7 +2835,10 @@
      know if events are pending (Xlib reads out event-queue while
      doing output), we also have to install a poll-check block.        
     "
-    inputSema := Semaphore new.
+    OperatingSystem supportsSelect ifTrue:[
+        inputSema := Semaphore new.
+    ].
+
     p := [
 	[dispatching] whileTrue:[
 	    AbortSignal handle:[:ex |
@@ -2835,15 +2846,21 @@
 	    ] do:[
 		self eventPending ifFalse:[
 		    Processor activeProcess setStateTo:#ioWait if:#active.
-		    inputSema wait.
+		    inputSema notNil ifTrue:[
+		        inputSema wait.
+		    ] ifFalse:[
+			Delay waitForMilliseconds:50
+		    ]
 		].
 
 		self dispatchPendingEvents.
 		"/ self checkForEndOfDispatch.
 	    ]
 	].
-	Processor disableSemaphore:inputSema.
-	inputSema := nil.
+	inputSema notNil ifTrue:[
+	    Processor disableSemaphore:inputSema.
+	    inputSema := nil.
+	].
 	AllScreens remove:self.
 	dispatchProcess := nil
     ] newProcess.
@@ -2860,7 +2877,9 @@
     dispatchProcess := p.
     p resume.
 
-    Processor signal:inputSema onInput:fd orCheck:[self eventPending].
+    inputSema notNil ifTrue:[
+        Processor signal:inputSema onInput:fd orCheck:[self eventPending].
+    ]
 
     "Modified: 12.12.1995 / 20:52:57 / stefan"
     "Modified: 18.7.1996 / 17:12:50 / cg"
@@ -4462,6 +4481,14 @@
     ^ self
 !
 
+setBitGravity:how in:aWindowId
+    "set bit gravity for a window"
+
+    "/ default here is to ignore the request
+
+    ^ self
+!
+
 setCursor:aCursorId in:aWindowId
     "set a windows visible shape"
 
@@ -4557,11 +4584,17 @@
      This may be used by the window manager to
      select client specific resources."
 
-    ^ self subclassResponsibility
+    "/ default here is to ignore the request
 
     "Created: 14.6.1996 / 17:23:34 / stefan"
 !
 
+setWindowGravity:how in:aWindowId
+    "set window gravity for a window"
+
+    "/ default here is to ignore the request
+!
+
 setWindowIcon:aForm in:aWindowId
     "set a windows icon"
 
@@ -4599,6 +4632,6 @@
 !DeviceWorkstation  class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libview/Attic/DevWorkst.st,v 1.126 1996-07-25 11:45:28 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libview/Attic/DevWorkst.st,v 1.127 1996-07-31 18:36:18 cg Exp $'
 ! !
 DeviceWorkstation initialize!
--- a/DeviceWorkstation.st	Thu Jul 25 22:57:46 1996 +0200
+++ b/DeviceWorkstation.st	Wed Jul 31 20:36:18 1996 +0200
@@ -1232,6 +1232,14 @@
     "Modified: 10.6.1996 / 21:01:50 / cg"
 !
 
+sendsExposeAfterScroll
+    "return true, if this display asynchronously sends expose events after a
+     scroll operation. False otherwise. Asynchronous expose events are an X
+     speciality, which affects a few methods outside of the display class (sorry)"
+
+    ^ false
+!
+
 supportedImageFormats
     "return an array with supported image formats; each array entry
      is another array, consisting of depth and bitsPerPixel values.
@@ -2827,7 +2835,10 @@
      know if events are pending (Xlib reads out event-queue while
      doing output), we also have to install a poll-check block.        
     "
-    inputSema := Semaphore new.
+    OperatingSystem supportsSelect ifTrue:[
+        inputSema := Semaphore new.
+    ].
+
     p := [
 	[dispatching] whileTrue:[
 	    AbortSignal handle:[:ex |
@@ -2835,15 +2846,21 @@
 	    ] do:[
 		self eventPending ifFalse:[
 		    Processor activeProcess setStateTo:#ioWait if:#active.
-		    inputSema wait.
+		    inputSema notNil ifTrue:[
+		        inputSema wait.
+		    ] ifFalse:[
+			Delay waitForMilliseconds:50
+		    ]
 		].
 
 		self dispatchPendingEvents.
 		"/ self checkForEndOfDispatch.
 	    ]
 	].
-	Processor disableSemaphore:inputSema.
-	inputSema := nil.
+	inputSema notNil ifTrue:[
+	    Processor disableSemaphore:inputSema.
+	    inputSema := nil.
+	].
 	AllScreens remove:self.
 	dispatchProcess := nil
     ] newProcess.
@@ -2860,7 +2877,9 @@
     dispatchProcess := p.
     p resume.
 
-    Processor signal:inputSema onInput:fd orCheck:[self eventPending].
+    inputSema notNil ifTrue:[
+        Processor signal:inputSema onInput:fd orCheck:[self eventPending].
+    ]
 
     "Modified: 12.12.1995 / 20:52:57 / stefan"
     "Modified: 18.7.1996 / 17:12:50 / cg"
@@ -4462,6 +4481,14 @@
     ^ self
 !
 
+setBitGravity:how in:aWindowId
+    "set bit gravity for a window"
+
+    "/ default here is to ignore the request
+
+    ^ self
+!
+
 setCursor:aCursorId in:aWindowId
     "set a windows visible shape"
 
@@ -4557,11 +4584,17 @@
      This may be used by the window manager to
      select client specific resources."
 
-    ^ self subclassResponsibility
+    "/ default here is to ignore the request
 
     "Created: 14.6.1996 / 17:23:34 / stefan"
 !
 
+setWindowGravity:how in:aWindowId
+    "set window gravity for a window"
+
+    "/ default here is to ignore the request
+!
+
 setWindowIcon:aForm in:aWindowId
     "set a windows icon"
 
@@ -4599,6 +4632,6 @@
 !DeviceWorkstation  class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libview/DeviceWorkstation.st,v 1.126 1996-07-25 11:45:28 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libview/DeviceWorkstation.st,v 1.127 1996-07-31 18:36:18 cg Exp $'
 ! !
 DeviceWorkstation initialize!