[Search for users]
[Overall Top Noters]
[List of all Conferences]
[Download this site]
Title: | DECWINDOWS 26-JAN-89 to 29-NOV-90 |
Notice: | See 1639.0 for VMS V5.3 kit; 2043.0 for 5.4 IFT kit |
Moderator: | STAR::VATNE |
|
Created: | Mon Oct 30 1989 |
Last Modified: | Mon Dec 31 1990 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 3726 |
Total number of notes: | 19516 |
1227.0. "Difference between XNextEvent and XtNextEvent?" by EWBV37::HIME () Thu Aug 03 1989 08:17
My customer would like to flashing the text on the window, so
he tries to use AST routine from SYS$SETIMR().
But, the application that uses both SYS$SETIMR() and XNextEvent, does not
work well. Timer AST routine is delivered but after that I can't catch
the Window-Event.
The program is as following.
(following is part of 'sample1.for')
DO WHILE (.TRUE.)
CALL X$NEXT_EVENT(DPY,EVENT)
IF (EVENT.EVNT_TYPE .EQ. X$C_EXPOSE) THEN
TYPE *,'EXPOSE EVENT'
ELSE IF (EVENT.EVNT_TYPE .EQ. X$C_BUTTON_PRESS) THEN
TYPE *,'MOUSE BUTTON CLICK EVENT'
STATE = 0
CALL SET_AST_TRIG ! This subroutine sets the timer AST
END IF
END DO
END
However, the aplication that uses XtNextEvent() ,instead of XNextEvent(),
works well.
What is different XNextEvent and XtNextEvent?
Is there any restrictions on usage of XNextEvent?
(following is part of 'sample2.for')
DO WHILE (.TRUE.)
CALL XT$NEXT_EVENT(EVENT)
IF (EVENT.EVNT_TYPE .EQ. X$C_EXPOSE) THEN
TYPE *,'EXPOSE EVENT'
ELSE IF (EVENT.EVNT_TYPE .EQ. X$C_BUTTON_PRESS) THEN
TYPE *,'MOUSE BUTTON CLICK EVENT'
STATE = 0
CALL SET_AST_TRIG
END IF
END DO
END
-Toru.
!
! SAMPLE PROGRAM TO REPRODUCE MY PROBLEM.
!
PROGRAM SAMPLE1
C
IMPLICIT NONE
INCLUDE 'SYS$LIBRARY:DECW$XLIBDEF'
C
INTEGER*4 DPY,WINDOW,GCON,GCOFF,STATE
COMMON /GLOBAL/ DPY,WINDOW,GCON,GCOFF,STATE
C
INTEGER*4 SCREEN,DEPTH,ATTR_MASK,GC_MASK
RECORD /X$VISUAL/ VISUAL
RECORD /X$SET_WIN_ATTRIBUTES/ XSWDA
RECORD /X$GC_VALUES/ XGCVL
RECORD /X$SIZE_HINTS/ XSZHN
RECORD /X$EVENT/ EVENT
C
DPY = X$OPEN_DISPLAY()
IF (DPY .EQ. 0) THEN
TYPE *,'DISPLAY NOT OPENED !'
CALL SYS$EXIT(%VAL(1))
END IF
C
SCREEN = X$DEFAULT_SCREEN_OF_DISPLAY(DPY)
DEPTH = X$DEFAULT_DEPTH_OF_SCREEN(SCREEN)
CALL X$DEFAULT_VISUAL_OF_SCREEN(SCREEN,VISUAL)
ATTR_MASK = X$M_CW_EVENT_MASK .OR. X$M_CW_BACK_PIXEL
XSWDA.X$L_SWDA_EVENT_MASK = X$M_EXPOSURE .OR. X$M_BUTTON_PRESS
XSWDA.X$L_SWDA_BACKGROUND_PIXEL = X$WHITE_PIXEL_OF_SCREEN(SCREEN)
WINDOW = X$CREATE_WINDOW(DPY,X$ROOT_WINDOW_OF_SCREEN(SCREEN),
* 100,100,100,100,
* 0,DEPTH,X$C_INPUT_OUTPUT,VISUAL,
* ATTR_MASK,XSWDA)
XGCVL.X$L_GCVL_FOREGROUND = X$BLACK_PIXEL_OF_SCREEN(SCREEN)
XGCVL.X$L_GCVL_BACKGROUND = X$WHITE_PIXEL_OF_SCREEN(SCREEN)
GC_MASK = X$M_GC_FOREGROUND .OR. X$M_GC_BACKGROUND
GCON = X$CREATE_GC(DPY,WINDOW,GC_MASK,XGCVL)
XGCVL.X$L_GCVL_FOREGROUND = X$WHITE_PIXEL_OF_SCREEN(SCREEN)
GCOFF = X$CREATE_GC(DPY,WINDOW,GC_MASK,XGCVL)
C
CALL X$MAP_WINDOW(DPY,WINDOW)
C
DO WHILE (.TRUE.)
TYPE *,'GET NEXT EVENT'
CALL X$NEXT_EVENT(DPY,EVENT)
IF (EVENT.EVNT_TYPE .EQ. X$C_EXPOSE) THEN
TYPE *,'EXPOSE EVENT'
ELSE IF (EVENT.EVNT_TYPE .EQ. X$C_BUTTON_PRESS) THEN
TYPE *,'MOUSE BUTTON CLICK EVENT'
STATE = 0
CALL SET_AST_TRIG
END IF
END DO
END
SUBROUTINE SET_AST_TRIG
INTEGER*4 SYS$SETIMR
INTEGER*4 TIME_DELAY(2) /-2500000,-1/
EXTERNAL AST_FLSH
C
CALL SYS$SETIMR(%VAL(2),TIME_DELAY,AST_FLSH,)
RETURN
END
SUBROUTINE AST_FLSH
IMPLICIT NONE
INCLUDE 'SYS$LIBRARY:DECW$XLIBDEF'
C
INTEGER*4 DPY,WINDOW,GCON,GCOFF,STATE
COMMON /GLOBAL/ DPY,WINDOW,GCON,GCOFF,STATE
INTEGER*4 STATUS
CALL SET_AST_TRIG
IF (STATE .EQ. 0) THEN
CALL X$DRAW_IMAGE_STRING(DPY,WINDOW,GCON,10,10,'HELLO')
ELSE
CALL X$DRAW_IMAGE_STRING(DPY,WINDOW,GCOFF,10,10,'HELLO')
END IF
STATE = STATE .XOR. 1
CALL X$SYNC(DPY,STATUS)
RETURN
END
!
! SAMPLE PROGRAM TO REPRODUCE MY PROBLEM.
!
PROGRAM SAMPLE2
C
IMPLICIT NONE
INCLUDE 'SYS$LIBRARY:DECW$XLIBDEF'
INCLUDE 'SYS$LIBRARY:DECW$DWTDEF'
C
INTEGER*4 DPY,WINDOW,GCON,GCOFF,STATE
COMMON /GLOBAL/ DPY,WINDOW,GCON,GCOFF,STATE
C
INTEGER*4 SCREEN,DEPTH,ATTR_MASK,GC_MASK
INTEGER*4 TOPLEVEL,ARGC
RECORD /X$VISUAL/ VISUAL
RECORD /X$SET_WIN_ATTRIBUTES/ XSWDA
RECORD /X$GC_VALUES/ XGCVL
RECORD /X$SIZE_HINTS/ XSZHN
RECORD /X$EVENT/ EVENT
C
CALL DWT$INITIALIZE_DRM
ARGC = 0
TOPLEVEL = XT$INITIALIZE (
* ' ',
* 'EXAMPLE',
* %VAL(0),
* 0,
* ARGC,
* %VAL(0))
DPY = XT$DISPLAY(TOPLEVEL)
IF (DPY .EQ. 0) THEN
TYPE *,'DISPLAY NOT OPENED !'
CALL SYS$EXIT(%VAL(1))
END IF
C
SCREEN = X$DEFAULT_SCREEN_OF_DISPLAY(DPY)
DEPTH = X$DEFAULT_DEPTH_OF_SCREEN(SCREEN)
CALL X$DEFAULT_VISUAL_OF_SCREEN(SCREEN,VISUAL)
ATTR_MASK = X$M_CW_EVENT_MASK .OR. X$M_CW_BACK_PIXEL
XSWDA.X$L_SWDA_EVENT_MASK = X$M_EXPOSURE .OR. X$M_BUTTON_PRESS
XSWDA.X$L_SWDA_BACKGROUND_PIXEL = X$WHITE_PIXEL_OF_SCREEN(SCREEN)
WINDOW = X$CREATE_WINDOW(DPY,X$ROOT_WINDOW_OF_SCREEN(SCREEN),
* 100,100,100,100,
* 0,DEPTH,X$C_INPUT_OUTPUT,VISUAL,
* ATTR_MASK,XSWDA)
XGCVL.X$L_GCVL_FOREGROUND = X$BLACK_PIXEL_OF_SCREEN(SCREEN)
XGCVL.X$L_GCVL_BACKGROUND = X$WHITE_PIXEL_OF_SCREEN(SCREEN)
GC_MASK = X$M_GC_FOREGROUND .OR. X$M_GC_BACKGROUND
GCON = X$CREATE_GC(DPY,WINDOW,GC_MASK,XGCVL)
XGCVL.X$L_GCVL_FOREGROUND = X$WHITE_PIXEL_OF_SCREEN(SCREEN)
GCOFF = X$CREATE_GC(DPY,WINDOW,GC_MASK,XGCVL)
C
CALL X$MAP_WINDOW(DPY,WINDOW)
C
DO WHILE (.TRUE.)
TYPE *,'GET NEXT EVENT'
CALL XT$NEXT_EVENT(EVENT)
! CALL X$NEXT_EVENT(DPY,EVENT)
IF (EVENT.EVNT_TYPE .EQ. X$C_EXPOSE) THEN
TYPE *,'EXPOSE EVENT'
ELSE IF (EVENT.EVNT_TYPE .EQ. X$C_BUTTON_PRESS) THEN
TYPE *,'MOUSE BUTTON CLICK EVENT'
STATE = 0
CALL SET_AST_TRIG
END IF
END DO
END
SUBROUTINE SET_AST_TRIG
INTEGER*4 SYS$SETIMR
INTEGER*4 TIME_DELAY(2) /-2500000,-1/
EXTERNAL AST_FLSH
C
CALL SYS$SETIMR(%VAL(2),TIME_DELAY,AST_FLSH,)
RETURN
END
SUBROUTINE AST_FLSH
IMPLICIT NONE
INCLUDE 'SYS$LIBRARY:DECW$XLIBDEF'
C
INTEGER*4 DPY,WINDOW,GCON,GCOFF,STATE
COMMON /GLOBAL/ DPY,WINDOW,GCON,GCOFF,STATE
INTEGER*4 STATUS
CALL SET_AST_TRIG
IF (STATE .EQ. 0) THEN
CALL X$DRAW_IMAGE_STRING(DPY,WINDOW,GCON,10,10,'HELLO')
ELSE
CALL X$DRAW_IMAGE_STRING(DPY,WINDOW,GCOFF,10,10,'HELLO')
END IF
STATE = STATE .XOR. 1
CALL X$SYNC(DPY,STATUS)
RETURN
END
T.R | Title | User | Personal Name | Date | Lines
|
---|