[comp.sys.apollo] Strange screen flicker in DIALOG

i91@nikhefh.hep.nl (Fons Rademakers) (02/06/88)

For a DIALOG guru:

I have the following problem with DIALOG and GMR3D. Every time when a popup
or help pops down my GMR3D area gets completely refreshed by DIALOG before
it enters my own refresh routine. I know that after an action given in a
popup, DIALOG should refresh the screen since the action could have changed
the screen. The screen refresh should not happen when a help popup pops down
or when no action is performed in a popup. DIALOG should just restore the
bitmap under the popup. The screen refresh is only in the GMR area, not in 
the complete PAD. I also know that screen flicker occurs when dynamic 
strings without SIZE attribute gets changed, but in that case the whole PAD 
gets refreshed. 

Does somebody know in what direction I have to look to solve this problem?
Why does DIALOG always think that an action has been perfromed, even when 
leaving a help popup?

Using DIALOG v2.0 and SR9.7.
 
===== description of GPR task I use:

   gmr_area := GPR :
      APPL_CRSR_CTRL = true;
      INIT_RTN = init_gmr_area;
      ENTERED_WINDOW => <RETURN>;
      LEFT_WINDOW => <RETURN>;
      BUTTONS => <RETURN>;
      LOCATOR => <CALL locator_input>;
      KEYSTROKE => <CALL keystroke_input>;
      KEYS = [m1, m1u, m2, m2u, m3, m3u, r, R];
      END

==== and the techniques:

   gmr_tech := GRAPHICS_AREA :
      TASK = gmr_area;
      OUTLINE = on;
      BORDER_WIDTH = 2;
      HELP_TEXT =  "This is the area where the GMR "
                  &"file is displayed.";
      SIZE = ((200 200) (500 500) (10000 10000)) pixels;
      END

   ...
   ...
   ...

   STD_WINDOW :
      CONTENTS = everything;
      [M1, F1]        => <* select>;
      [M3]            => <* help>;
      [M2]            => <>;
      [M1U, M2U, M3U] => <>;
      END

==== My init_gmr_area routine:

      SUBROUTINE init_gmr_area(task_id, event_id)
      INTEGER*4  task_id, event_id
*
%INCLUDE '/sys/ins/gmr3d.ins.ftn'
*
      COMMON    /stream/ pad_stream
      INTEGER*2 num_planes, bitmap_size(2), pad_stream
      INTEGER*4 gmr_bitmap_d, status
*
      EXTERNAL dm_refresh
*
      bitmap_size(1) = 1280
      bitmap_size(2) = 1024
      num_planes     = 8
      CALL gmr_$init(gmr_$current_bitmap, pad_stream, bitmap_size,
     #               num_planes, status)
*
      CALL dp_$gpr_inq_bitmap(task_id, gmr_bitmap_d, status)
      CALL gpr_$set_bitmap(gmr_bitmap_d, status)
      CALL gmr_$dm_refresh_entry(IADDR(dm_refresh), status)
*
      RETURN
      END

===================

Regards,
  Fons Rademakers

-- 
Org:    NIKHEF-H, National Institute for Nuclear and High-Energy Physics.
Mail:   Kruislaan 409, P.O. Box 41882, 1009 DB Amsterdam, the Netherlands
Phone:  (20)5925018 or 5925003                      Telex: 10262 (hef nl)
UUCP:   i91@nikhefh.hep.nl               BITNET: nikhefh!i91@mcvax.bitnet