WindowGroup.st
author Claus Gittinger <cg@exept.de>
Fri, 28 Nov 2014 13:03:58 +0100
changeset 6638 953215a3f78d
parent 6619 60873972b27f
child 6742 2e8554df5439
permissions -rw-r--r--
class: WindowGroup changed: #focusCameByTab nil must be interpreted as false.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
     1
"
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
     2
 COPYRIGHT (c) 1993 by Claus Gittinger
72
3e84121988c3 *** empty log message ***
claus
parents: 65
diff changeset
     3
	      All Rights Reserved
26
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
     4
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
     5
 This software is furnished under a license and may be used
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
     6
 only in accordance with the terms of that license and with the
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
     8
 be provided or otherwise made available to, or used by, any
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
     9
 other person.  No title to or ownership of the software is
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
    10
 hereby transferred.
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
    11
"
3212
bdefd01df684 rel5 migration
Claus Gittinger <cg@exept.de>
parents: 3173
diff changeset
    12
"{ Package: 'stx:libview' }"
bdefd01df684 rel5 migration
Claus Gittinger <cg@exept.de>
parents: 3173
diff changeset
    13
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
    14
Object subclass:#WindowGroup
2857
b9bff260f854 cache graphicsDevice - its called often
Claus Gittinger <cg@exept.de>
parents: 2851
diff changeset
    15
	instanceVariableNames:'graphicsDevice views topViews myProcess mySensor isModal
b9bff260f854 cache graphicsDevice - its called often
Claus Gittinger <cg@exept.de>
parents: 2851
diff changeset
    16
		previousGroup focusView focusSequence preEventHook postEventHook
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
    17
		pointerView isForModalSubview focusByTab groupHasFocus busyHook
6120
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
    18
		busyHookTimeout inModalLoop isDebugged preEventHooks
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
    19
		postEventHooks creatingProcess traceEvents processPriority
6466
e4eebb5bd759 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
    20
		inWithCursorDoBlock doNotCloseOnAbortSignal previousFocusView'
956
32a642b5dcd3 when asking for the active windowGroup, ask the windowGroupQuerySignal
Claus Gittinger <cg@exept.de>
parents: 949
diff changeset
    21
	classVariableNames:'LastActiveGroup LastActiveProcess LeaveSignal
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
    22
		WindowGroupQuerySignal LastEventQuerySignal BusyHookTime'
317
7a1271ecb987 use new #cursor:now: if many cursors are switched
Claus Gittinger <cg@exept.de>
parents: 313
diff changeset
    23
	poolDictionaries:''
5276
bbd43e02ae25 category change
Claus Gittinger <cg@exept.de>
parents: 5270
diff changeset
    24
	category:'Interface-Support-UI'
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
    25
!
bc3949e465a0 Initial revision
claus
parents:
diff changeset
    26
5691
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
    27
Query subclass:#LastEventQuery
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
    28
	instanceVariableNames:''
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
    29
	classVariableNames:''
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
    30
	poolDictionaries:''
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
    31
	privateIn:WindowGroup
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
    32
!
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
    33
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
    34
Query subclass:#WindowGroupQuery
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
    35
	instanceVariableNames:''
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
    36
	classVariableNames:''
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
    37
	poolDictionaries:''
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
    38
	privateIn:WindowGroup
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
    39
!
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
    40
1110
3ffcd22497fd last event query signal
ca
parents: 956
diff changeset
    41
!WindowGroup class methodsFor:'documentation'!
46
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    42
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    43
copyright
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    44
"
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    45
 COPYRIGHT (c) 1993 by Claus Gittinger
72
3e84121988c3 *** empty log message ***
claus
parents: 65
diff changeset
    46
	      All Rights Reserved
46
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    47
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    48
 This software is furnished under a license and may be used
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    49
 only in accordance with the terms of that license and with the
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    50
 inclusion of the above copyright notice.   This software may not
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    51
 be provided or otherwise made available to, or used by, any
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    52
 other person.  No title to or ownership of the software is
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    53
 hereby transferred.
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    54
"
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    55
!
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    56
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    57
documentation
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
    58
"
103
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
    59
    In Smalltalk/X, the known (ST-80) concept of a controller has been
297
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    60
    extended (split) into a WindowGroup which handles process related stuff, 
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    61
    and the Controller, which only handles events for a view and defines the user interaction.
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
    62
    The controller functionality might be (actually: often is) included in the view components.
297
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    63
    All interaction is via event queues - there is no polling in controllers (not even conceptionally).
103
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
    64
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
    65
    WindowGroups are responsible to wait for and forward events for a group of 
297
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    66
    windows. All views in a windowGroup share a single windowSensor which holds the
1503
47c18026683d commentary
Claus Gittinger <cg@exept.de>
parents: 1494
diff changeset
    67
    event queue (therefore subviews all share the same input event queue).
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
    68
    Actually, there are two separate event queues - one for damage and view-visibility-related events,
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
    69
    another one for user interaction (such as mouse, keyboard etc.)
144
claus
parents: 141
diff changeset
    70
297
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    71
    The event queues are filled with incoming events as arriving from the physical display.
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    72
    This is done by a separate process (so called event-dispatcher) which runs at a higher
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
    73
    priority. The event dispatcher determines the queue into which an event has to be placed,
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
    74
    by asking the view for which the event is destined (via the views sensor).
297
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    75
    There may be multiple event dispatchers running (to support multiple displays);
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    76
    see the documentation/examples in DeviceWorkstation/XWorkstation on how this is done.
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    77
103
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
    78
    Except for modal boxes, a separate process is created for each windowGroup 
297
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    79
    which waits for events to arrive and processes them, by sending corresponding
144
claus
parents: 141
diff changeset
    80
    event messages to the views controller or the view (*). 
297
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    81
    The controller is determined by asking the view (for which the event is destined);
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    82
    if the returned controller is nil, the event is sent directly to the view.
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    83
    This allows for simple views to work without a controller.
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    84
    (all of this is actually done in a WindowEvent method)
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    85
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    86
    Therefore, multiple applications run pseudo parallel.
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    87
    Even if some window performs a long time computation, events are still received
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    88
    and entered into the corresponding event queues (because the event dispatcher process
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    89
    runs at a higher priority). However, the actual processing of the event is only
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
    90
    possibly if no other process is busy at the same or a higher priority (unless timeslicing is enabled).
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
    91
    If timeslicing is off, it is possible to change a windowProcesses priority in order to give 
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
    92
    other windows a chance to execute (some views do this while performing longtime actions).
297
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    93
103
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
    94
    Modal boxes create an extra window group for the components of the modal
297
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    95
    box, but execute the event-processing loop for this new group in the original process - 
144
claus
parents: 141
diff changeset
    96
    therefore, the original windowgroup is blocked for the duration of the modal 
297
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    97
    interaction.
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    98
    However, the modal-event processing loop peeks into the original groups event queue
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
    99
    from time to time, and handles expose events. Thus, even while blocked for user input,
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
   100
    the original group continues to get update/redraw events.
103
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
   101
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
   102
    Normally, one windowgroup is associated to each topview (StandardSystemView)
144
claus
parents: 141
diff changeset
   103
    and all of its subviews. However, this is not strictly required; 
claus
parents: 141
diff changeset
   104
    it is possible to create extra windowgroups for subviews, which will let them
claus
parents: 141
diff changeset
   105
    run in parallel 
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   106
        (for example, the FileBrowsers kill-Button is created that 
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   107
         way, to allow a kill of an executing unix command, while the browser 
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   108
         itself reads the pipeStream for incoming text.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   109
         Even if the fileBrowser is busy reading the pipe, the killButton is still
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   110
         working and allows terminating the pipe-read action).
144
claus
parents: 141
diff changeset
   111
claus
parents: 141
diff changeset
   112
    On the other hand, multiple topviews can be placed into the same windowGroup;
claus
parents: 141
diff changeset
   113
    which allows for multiview applications, of which only one communicates with
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   114
    the user at a time (for example: the GUI painters canvas and gallery are in the same group).
297
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
   115
    Multiple topviews within a windowGropup can be configured to behave like one 
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
   116
    unit with respect to iconification, deiconification and termination.
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
   117
    This is done by creating multiple topViews in one group, and setting up a master/slave
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
   118
    or partner relation among them (see TopView>>beSlave and TopView>>bePartner).
103
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
   119
109
ba47d9d6bda8 *** empty log message ***
claus
parents: 107
diff changeset
   120
    WindowGroups also support a focus window: this is the one that gets the
103
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
   121
    keyboard input - even if the cursor is located in another subview.
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   122
    The sequence is defined by the topView or its model (typically an applicationModel).
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   123
    It should return an orderedCollection of subviews when asked via #focusSequence.
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   124
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   125
    For debugging or special event manipulations, windowGroups allow for hooks to be installed 
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   126
    around the processing of events - preEventHook is sent a #procesEvent: message before an event is processed,
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   127
    postEventHook is informed after the event has been processed.
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   128
    The preEventHook should return a boolean - if it returns true, the event is considered
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   129
    being already processed by the hook and ignored.
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   130
    This allows for event-tracing, timing or even filtering (if preEventHook returns true).
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   131
    (notice: there is also an eventHook facility available in the sensor class.)
103
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
   132
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
   133
    Finally, windowgroups are the perfect place for things like defining a
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   134
    cursor for all associated views, flushing all input, waiting for expose events etc.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   135
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   136
    Late News:
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   137
      a busyHook and busyHookTimeout has been added; this hook-(block) gets invoked, whenever
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   138
      the process was busy handling an event for some time. This can be used to automatically install
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   139
      a busy cursor (hour-glass) in an application, if some processing takes some time
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   140
      (without a need for #withCursorDo: all over the place in the application)
103
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
   141
297
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
   142
    Dont get confused:
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   143
        You dont have to care for all those details in the normal case;
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   144
        a windowgroup is created for you automatically, when a view is opened.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   145
        All of the internals are not required to be known for most applications.
297
9942b0660ae5 documentation update
Claus Gittinger <cg@exept.de>
parents: 275
diff changeset
   146
103
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
   147
597
958e2673ca11 commentary
Claus Gittinger <cg@exept.de>
parents: 582
diff changeset
   148
    [instance variables:]
144
claus
parents: 141
diff changeset
   149
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   150
        views                   collection of views of this group
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   151
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   152
        topViews                collection of topviews of this group
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   153
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   154
        myProcess               the process executing the events
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   155
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   156
        mySensor                my input sensor
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   157
6120
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   158
        isModal                 true if this is for a modal box; i.e. running a separate
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   159
                                modal event loop on top of another window group.
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   160
                                Those execute in the same process as the underlying group
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   161
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   162
        inModalLoop             true if this group's event processing is currently suspended
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   163
                                because I have opened a modal window (with its own 'isModal'
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   164
                                group) which handles events for a while.
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   165
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   166
        isDebugged              true if a debugger sits on top of me
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   167
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   168
        previousGroup           if modal, the group that started this one
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   169
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   170
        focusView               the one that has the keyboard focus (or nil)
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   171
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   172
        focusByTab              if focus came via tabbing 
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   173
                                (as opposed to an implicit focus change)
2485
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
   174
                                
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   175
        focusSequence           defines the focus sequence
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   176
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   177
        preEventHook            if non-nil, that one gets notified of incoming
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   178
                                events BEFORE an event is dispatched.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   179
                                May eat events (i.e. suppress dispatch)
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   180
                                (hook for event filters or recorders)
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   181
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   182
        postEventHook           if non-nil, that one gets notified
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   183
                                AFTER an event was dispatched.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   184
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   185
        isForModalSubView
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   186
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   187
        groupHasFocus           true, if this windowGroup has the focus
2506
221b75206a75 focus handling changed.
Claus Gittinger <cg@exept.de>
parents: 2497
diff changeset
   188
103
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
   189
597
958e2673ca11 commentary
Claus Gittinger <cg@exept.de>
parents: 582
diff changeset
   190
    [class variables:]
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   191
        LeaveSignal             if raised, a modal box leaves (closes)
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   192
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   193
        WindowGroupQuerySignal  to ask for the current windowGroup,
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   194
                                anywhere in the program, simply raise this
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   195
                                signal. The raise returns nil, for processes,
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   196
                                which are not under control of a windowGroup.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   197
                                (i.e. wg := WindowGroup windowGroupQuerySignal raise)
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   198
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   199
        LastEventQuerySignal    to ask for the event which was responsible
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   200
                                for being where you are (whereever that is).
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   201
                                The raise returns nil, if you did not arrive
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   202
                                there due to an event.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   203
                                (i.e. ev := WindowGroup lastEventQuerySignal raise)
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   204
                                The event can be asked for the view, the type
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   205
                                of event, x/y position etc.
2506
221b75206a75 focus handling changed.
Claus Gittinger <cg@exept.de>
parents: 2497
diff changeset
   206
221b75206a75 focus handling changed.
Claus Gittinger <cg@exept.de>
parents: 2497
diff changeset
   207
144
claus
parents: 141
diff changeset
   208
    (*) 
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   209
        due to historic reasons, many views have the controller functionality
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   210
        integrated, and handle events themself. The windowSensor takes care
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   211
        of this, by checking if a view has a controller, and, if so, forwarding 
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   212
        the events to it. Otherwise, events are sent directly to the view.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   213
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   214
        In the future, all views will be rewritten to actually use a controller.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   215
        Currently (being in the middle of this migration), only some views
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   216
        (buttons, toggles and subclasses) do so.
144
claus
parents: 141
diff changeset
   217
103
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
   218
    For more information, read 'introduction to view programming' in the
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
   219
    doc/online directory.
597
958e2673ca11 commentary
Claus Gittinger <cg@exept.de>
parents: 582
diff changeset
   220
612
8758d0c9933e documentation
Claus Gittinger <cg@exept.de>
parents: 605
diff changeset
   221
    [author:]
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   222
        Claus Gittinger
612
8758d0c9933e documentation
Claus Gittinger <cg@exept.de>
parents: 605
diff changeset
   223
597
958e2673ca11 commentary
Claus Gittinger <cg@exept.de>
parents: 582
diff changeset
   224
    [see also:]
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   225
        WindowSensor WindowEvent EventListener KeyboardForwarder
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   226
        DeviceWorkstation
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   227
        View StandardSystemView
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   228
        ApplicationModel
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   229
        Process ProcessorScheduler
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   230
        (``Working with processes (programmers manual)'': programming/processes.html#VIEWSNPROCS)
46
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
   231
"
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
   232
! !
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
   233
1110
3ffcd22497fd last event query signal
ca
parents: 956
diff changeset
   234
!WindowGroup class methodsFor:'initialization'!
46
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
   235
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
   236
initialize
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
   237
    LeaveSignal isNil ifTrue:[
5691
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   238
        LeaveSignal := (Signal new) mayProceed:true.
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   239
        LeaveSignal nameClass:self message:#leaveSignal.
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   240
        LeaveSignal notifierString:'unhandled leave signal'.
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   241
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   242
        WindowGroupQuerySignal := WindowGroupQuery.
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   243
        LastEventQuerySignal := LastEventQuery.
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   244
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   245
"/        WindowGroupQuerySignal := QuerySignal new.
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   246
"/        WindowGroupQuerySignal nameClass:self message:#windowGroupQuerySignal.
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   247
"/        WindowGroupQuerySignal notifierString:'query for windowgroup'.
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   248
"/
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   249
"/        LastEventQuerySignal := QuerySignal new.
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   250
"/        LastEventQuerySignal nameClass:self message:#lastEventQuerySignal.
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   251
"/        LastEventQuerySignal notifierString:'query for last event'.
54
29a6b2f8e042 *** empty log message ***
claus
parents: 48
diff changeset
   252
    ].
46
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
   253
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
   254
    "WindowGroup initialize"
956
32a642b5dcd3 when asking for the active windowGroup, ask the windowGroupQuerySignal
Claus Gittinger <cg@exept.de>
parents: 949
diff changeset
   255
5691
b2381760f050 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   256
    "Modified: / 27-01-2011 / 18:14:34 / cg"
46
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
   257
! !
7b331e9012fd *** empty log message ***
claus
parents: 28
diff changeset
   258
1110
3ffcd22497fd last event query signal
ca
parents: 956
diff changeset
   259
!WindowGroup class methodsFor:'instance creation'!
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   260
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   261
new
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   262
    "create and return a new WindowGroup object"
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   263
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   264
    ^ self basicNew initialize
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   265
! !
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   266
1110
3ffcd22497fd last event query signal
ca
parents: 956
diff changeset
   267
!WindowGroup class methodsFor:'Signal constants'!
3ffcd22497fd last event query signal
ca
parents: 956
diff changeset
   268
3ffcd22497fd last event query signal
ca
parents: 956
diff changeset
   269
lastEventQuerySignal
3ffcd22497fd last event query signal
ca
parents: 956
diff changeset
   270
    "return the signal which is used to query for the last event"
3ffcd22497fd last event query signal
ca
parents: 956
diff changeset
   271
3ffcd22497fd last event query signal
ca
parents: 956
diff changeset
   272
    ^ LastEventQuerySignal
3ffcd22497fd last event query signal
ca
parents: 956
diff changeset
   273
3ffcd22497fd last event query signal
ca
parents: 956
diff changeset
   274
    "Created: 17.7.1996 / 20:36:04 / cg"
3ffcd22497fd last event query signal
ca
parents: 956
diff changeset
   275
!
72
3e84121988c3 *** empty log message ***
claus
parents: 65
diff changeset
   276
3e84121988c3 *** empty log message ***
claus
parents: 65
diff changeset
   277
leaveSignal
109
ba47d9d6bda8 *** empty log message ***
claus
parents: 107
diff changeset
   278
    "return the signal which is used to exit a modal loop.
1752
Claus Gittinger <cg@exept.de>
parents: 1652
diff changeset
   279
     This private signal, is always caught while a modalbox is active.
144
claus
parents: 141
diff changeset
   280
     Raising it will exit the modal loop and return from the views #openModal
claus
parents: 141
diff changeset
   281
     method."
109
ba47d9d6bda8 *** empty log message ***
claus
parents: 107
diff changeset
   282
72
3e84121988c3 *** empty log message ***
claus
parents: 65
diff changeset
   283
    ^ LeaveSignal
956
32a642b5dcd3 when asking for the active windowGroup, ask the windowGroupQuerySignal
Claus Gittinger <cg@exept.de>
parents: 949
diff changeset
   284
!
32a642b5dcd3 when asking for the active windowGroup, ask the windowGroupQuerySignal
Claus Gittinger <cg@exept.de>
parents: 949
diff changeset
   285
32a642b5dcd3 when asking for the active windowGroup, ask the windowGroupQuerySignal
Claus Gittinger <cg@exept.de>
parents: 949
diff changeset
   286
windowGroupQuerySignal
32a642b5dcd3 when asking for the active windowGroup, ask the windowGroupQuerySignal
Claus Gittinger <cg@exept.de>
parents: 949
diff changeset
   287
    "return the signal which is used to query for the windowGroup"
32a642b5dcd3 when asking for the active windowGroup, ask the windowGroupQuerySignal
Claus Gittinger <cg@exept.de>
parents: 949
diff changeset
   288
32a642b5dcd3 when asking for the active windowGroup, ask the windowGroupQuerySignal
Claus Gittinger <cg@exept.de>
parents: 949
diff changeset
   289
    ^ WindowGroupQuerySignal
32a642b5dcd3 when asking for the active windowGroup, ask the windowGroupQuerySignal
Claus Gittinger <cg@exept.de>
parents: 949
diff changeset
   290
32a642b5dcd3 when asking for the active windowGroup, ask the windowGroupQuerySignal
Claus Gittinger <cg@exept.de>
parents: 949
diff changeset
   291
    "Created: 17.7.1996 / 20:36:04 / cg"
72
3e84121988c3 *** empty log message ***
claus
parents: 65
diff changeset
   292
! !
3e84121988c3 *** empty log message ***
claus
parents: 65
diff changeset
   293
1110
3ffcd22497fd last event query signal
ca
parents: 956
diff changeset
   294
!WindowGroup class methodsFor:'accessing'!
26
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
   295
3172
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   296
activeApplication
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   297
    "return the currently active application.
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   298
     Notice: this may be a modal dialogs application - i.e. it is not
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   299
     always the main application."
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   300
3751
274feeb50190 rewrite
Michael Beyl <mb@exept.de>
parents: 3737
diff changeset
   301
    |activeGroup|
3172
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   302
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   303
    (activeGroup := self activeGroup) notNil ifTrue:[
3751
274feeb50190 rewrite
Michael Beyl <mb@exept.de>
parents: 3737
diff changeset
   304
        ^ activeGroup application
3173
1947c87324d5 oops - the active* queries should return nil sometimes
Claus Gittinger <cg@exept.de>
parents: 3172
diff changeset
   305
    ].
1947c87324d5 oops - the active* queries should return nil sometimes
Claus Gittinger <cg@exept.de>
parents: 3172
diff changeset
   306
    ^ nil
3172
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   307
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   308
    "
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   309
     WindowGroup activeApplication 
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   310
    "
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   311
!
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   312
26
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
   313
activeGroup
180
claus
parents: 172
diff changeset
   314
    "return the currently active windowGroup.
claus
parents: 172
diff changeset
   315
     The returned value may not be fully correct, in case the current process
1298
d070db2e4530 always handle a windowGroupQuery - use that first when being asked for a group
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   316
     handles multiple windowGroups simultaneously. In this case, 
d070db2e4530 always handle a windowGroupQuery - use that first when being asked for a group
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   317
     (usually) the first group is returned (prefering a modal if there is one). 
180
claus
parents: 172
diff changeset
   318
     (maybe we should return a collection of windowGroups here).
claus
parents: 172
diff changeset
   319
claus
parents: 172
diff changeset
   320
     This method is required to simulate the historic ST-80 single display
claus
parents: 172
diff changeset
   321
     behavior for Cursor>>show / Cursor>>showWhile and some others (raising the
claus
parents: 172
diff changeset
   322
     activeGroups topView when modalBoxes appear) on multiple display screens. 
claus
parents: 172
diff changeset
   323
     These methods should change the cursor for the currently 
claus
parents: 172
diff changeset
   324
     active windowGroup ONLY, instead of globally affecting the display or
claus
parents: 172
diff changeset
   325
     all views
claus
parents: 172
diff changeset
   326
     (since, depending on the priority, other views could be unaffacted by this 
claus
parents: 172
diff changeset
   327
      and an overall cursor change does not make sense.)"
claus
parents: 172
diff changeset
   328
claus
parents: 172
diff changeset
   329
    |activeProcess groups wg|
claus
parents: 172
diff changeset
   330
claus
parents: 172
diff changeset
   331
    Processor isNil ifTrue:[^ nil]. "/ only during very early init phase
26
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
   332
180
claus
parents: 172
diff changeset
   333
    activeProcess := Processor activeProcess.
claus
parents: 172
diff changeset
   334
    " caching the last value ..."
565
6867f1a9a470 oops - leftover global LastActive
Claus Gittinger <cg@exept.de>
parents: 513
diff changeset
   335
    activeProcess == LastActiveProcess ifTrue:[
3541
7909bbc0bf42 oops (care for nil LastGroup)
Claus Gittinger <cg@exept.de>
parents: 3538
diff changeset
   336
        (LastActiveGroup notNil 
5260
8ce66f3e7141 care to ignore cached last activeGroup, if it has already closed its views.
Claus Gittinger <cg@exept.de>
parents: 5215
diff changeset
   337
        and:[LastActiveGroup process == LastActiveProcess
8ce66f3e7141 care to ignore cached last activeGroup, if it has already closed its views.
Claus Gittinger <cg@exept.de>
parents: 5215
diff changeset
   338
        and:[LastActiveGroup views notEmptyOrNil ]]) ifTrue:[
3212
bdefd01df684 rel5 migration
Claus Gittinger <cg@exept.de>
parents: 3173
diff changeset
   339
            ^ LastActiveGroup
bdefd01df684 rel5 migration
Claus Gittinger <cg@exept.de>
parents: 3173
diff changeset
   340
        ]
180
claus
parents: 172
diff changeset
   341
    ].
1298
d070db2e4530 always handle a windowGroupQuery - use that first when being asked for a group
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   342
3212
bdefd01df684 rel5 migration
Claus Gittinger <cg@exept.de>
parents: 3173
diff changeset
   343
    WindowGroupQuerySignal isNil ifTrue:[^ nil]. "/ only during very early init phase
2521
fe236fa74d5b Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 2519
diff changeset
   344
    wg := WindowGroupQuerySignal query.
956
32a642b5dcd3 when asking for the active windowGroup, ask the windowGroupQuerySignal
Claus Gittinger <cg@exept.de>
parents: 949
diff changeset
   345
32a642b5dcd3 when asking for the active windowGroup, ask the windowGroupQuerySignal
Claus Gittinger <cg@exept.de>
parents: 949
diff changeset
   346
    wg isNil ifTrue:[
3212
bdefd01df684 rel5 migration
Claus Gittinger <cg@exept.de>
parents: 3173
diff changeset
   347
        "/ mhmh - noone willing to answer that question ...
bdefd01df684 rel5 migration
Claus Gittinger <cg@exept.de>
parents: 3173
diff changeset
   348
        "/ (how can this happen ?)
bdefd01df684 rel5 migration
Claus Gittinger <cg@exept.de>
parents: 3173
diff changeset
   349
        groups := self scheduledWindowGroups 
bdefd01df684 rel5 migration
Claus Gittinger <cg@exept.de>
parents: 3173
diff changeset
   350
                    select:[:wg | wg process == activeProcess].
3619
efb3d3ad58e6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3618
diff changeset
   351
        groups notEmpty ifTrue:[
efb3d3ad58e6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3618
diff changeset
   352
            wg := groups detect:[:wg | wg isModal] ifNone:nil.
efb3d3ad58e6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3618
diff changeset
   353
            wg isNil ifTrue:[
efb3d3ad58e6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3618
diff changeset
   354
                wg := groups anElement
3212
bdefd01df684 rel5 migration
Claus Gittinger <cg@exept.de>
parents: 3173
diff changeset
   355
            ]
bdefd01df684 rel5 migration
Claus Gittinger <cg@exept.de>
parents: 3173
diff changeset
   356
        ].
956
32a642b5dcd3 when asking for the active windowGroup, ask the windowGroupQuerySignal
Claus Gittinger <cg@exept.de>
parents: 949
diff changeset
   357
    ].
32a642b5dcd3 when asking for the active windowGroup, ask the windowGroupQuerySignal
Claus Gittinger <cg@exept.de>
parents: 949
diff changeset
   358
180
claus
parents: 172
diff changeset
   359
    wg notNil ifTrue:[
3212
bdefd01df684 rel5 migration
Claus Gittinger <cg@exept.de>
parents: 3173
diff changeset
   360
        LastActiveProcess := activeProcess.
bdefd01df684 rel5 migration
Claus Gittinger <cg@exept.de>
parents: 3173
diff changeset
   361
        LastActiveGroup := wg.
180
claus
parents: 172
diff changeset
   362
    ].
claus
parents: 172
diff changeset
   363
    ^ wg
claus
parents: 172
diff changeset
   364
claus
parents: 172
diff changeset
   365
    "
claus
parents: 172
diff changeset
   366
     WindowGroup activeGroup 
claus
parents: 172
diff changeset
   367
    "
claus
parents: 172
diff changeset
   368
2089
07ed201c592e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2086
diff changeset
   369
    "Modified: / 3.9.1995 / 14:49:53 / claus"
07ed201c592e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2086
diff changeset
   370
    "Modified: / 17.4.1998 / 11:49:28 / cg"
2521
fe236fa74d5b Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 2519
diff changeset
   371
    "Modified: / 18.3.1999 / 18:30:33 / stefan"
54
29a6b2f8e042 *** empty log message ***
claus
parents: 48
diff changeset
   372
!
29a6b2f8e042 *** empty log message ***
claus
parents: 48
diff changeset
   373
3172
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   374
activeMainApplication
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   375
    "return the currently active main application.
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   376
     Notice: 
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   377
        if invoked by a modal application, this returns the main (non-modal)
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   378
        application."
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   379
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   380
    |activeGroup mainView|
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   381
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   382
    (activeGroup := self activeGroup) notNil ifTrue:[
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   383
        (mainView := activeGroup mainGroup mainView) notNil ifTrue:[
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   384
            ^ mainView application
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   385
        ]
3173
1947c87324d5 oops - the active* queries should return nil sometimes
Claus Gittinger <cg@exept.de>
parents: 3172
diff changeset
   386
    ].
1947c87324d5 oops - the active* queries should return nil sometimes
Claus Gittinger <cg@exept.de>
parents: 3172
diff changeset
   387
    ^ nil
3172
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   388
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   389
    "
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   390
     WindowGroup activeMainApplication 
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   391
    "
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   392
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   393
!
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
   394
54
29a6b2f8e042 *** empty log message ***
claus
parents: 48
diff changeset
   395
scheduledWindowGroups
180
claus
parents: 172
diff changeset
   396
    "return a collection of all windowGroups (possibly for different
claus
parents: 172
diff changeset
   397
     display devices) which are scheduled (i.e. which have a process 
claus
parents: 172
diff changeset
   398
     running, handling events)."
claus
parents: 172
diff changeset
   399
claus
parents: 172
diff changeset
   400
    |set screens|
claus
parents: 172
diff changeset
   401
claus
parents: 172
diff changeset
   402
    screens := Screen allScreens.
1869
24813440013f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   403
    screens size == 0 ifTrue:[^ #()].
180
claus
parents: 172
diff changeset
   404
claus
parents: 172
diff changeset
   405
    set := IdentitySet new.
claus
parents: 172
diff changeset
   406
    screens do:[:aDevice |
1977
9bda3ac0d83d no need for #flush in event-loop (already done by threads suspendAction)
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
   407
	aDevice allViewsDo:[:aView |
9bda3ac0d83d no need for #flush in event-loop (already done by threads suspendAction)
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
   408
	    |wg|
109
ba47d9d6bda8 *** empty log message ***
claus
parents: 107
diff changeset
   409
1977
9bda3ac0d83d no need for #flush in event-loop (already done by threads suspendAction)
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
   410
	    (wg := aView windowGroup) notNil ifTrue:[
9bda3ac0d83d no need for #flush in event-loop (already done by threads suspendAction)
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
   411
		wg process notNil ifTrue:[
9bda3ac0d83d no need for #flush in event-loop (already done by threads suspendAction)
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
   412
		    set add:wg
9bda3ac0d83d no need for #flush in event-loop (already done by threads suspendAction)
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
   413
		]
9bda3ac0d83d no need for #flush in event-loop (already done by threads suspendAction)
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
   414
	    ].
9bda3ac0d83d no need for #flush in event-loop (already done by threads suspendAction)
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
   415
	].
180
claus
parents: 172
diff changeset
   416
    ].
claus
parents: 172
diff changeset
   417
    ^ set asArray
claus
parents: 172
diff changeset
   418
claus
parents: 172
diff changeset
   419
    "
claus
parents: 172
diff changeset
   420
     WindowGroup scheduledWindowGroups   
claus
parents: 172
diff changeset
   421
    "
claus
parents: 172
diff changeset
   422
claus
parents: 172
diff changeset
   423
    "Modified: 1.9.1995 / 13:43:09 / claus"
1869
24813440013f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   424
    "Modified: 18.8.1997 / 18:44:29 / cg"
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   425
!
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   426
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   427
setActiveGroup:aGroup
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   428
    "set the currently active windowGroup.
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   429
     Temporary; do not use this interface, it will vanish."
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   430
6123
6a3c7f771d1d class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6120
diff changeset
   431
    aGroup isNil ifTrue:[
6a3c7f771d1d class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6120
diff changeset
   432
        LastActiveProcess := LastActiveGroup := nil.
6a3c7f771d1d class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6120
diff changeset
   433
    ] ifFalse:[
6a3c7f771d1d class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6120
diff changeset
   434
        LastActiveProcess := Processor activeProcess.
6a3c7f771d1d class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6120
diff changeset
   435
        LastActiveGroup := aGroup
6a3c7f771d1d class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6120
diff changeset
   436
    ].
6a3c7f771d1d class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6120
diff changeset
   437
6a3c7f771d1d class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6120
diff changeset
   438
    "Modified: / 29-08-2013 / 14:49:11 / cg"
26
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
   439
! !
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
   440
2723
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   441
!WindowGroup class methodsFor:'focus control support'!
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   442
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   443
takeFocusFromDevice:aDevice
4341
391e0f8aedb5 Remove unused method var
Stefan Vogel <sv@exept.de>
parents: 4340
diff changeset
   444
    |prevFocusView prevFocusGroup prevFocusCameViaTab|
2723
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   445
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   446
    "/
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   447
    "/ take the focus from whichEver view had it previously
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   448
    "/
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   449
    prevFocusView := aDevice focusView.
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   450
    prevFocusView notNil ifTrue:[
4676
4c84e69d7a15 focusHandling
Claus Gittinger <cg@exept.de>
parents: 4571
diff changeset
   451
        aDevice focusView:nil.
4c84e69d7a15 focusHandling
Claus Gittinger <cg@exept.de>
parents: 4571
diff changeset
   452
        (prevFocusGroup := prevFocusView windowGroup) notNil ifTrue:[
3376
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   453
            prevFocusCameViaTab := prevFocusGroup focusCameByTab.
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   454
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   455
            prevFocusView showNoFocus:prevFocusCameViaTab. "/ true is bad - see pullDownMenu.
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   456
            self sendKeyboardFocusEventTo:prevFocusView withArgument:false.
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   457
        ].
2723
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   458
    ].
4676
4c84e69d7a15 focusHandling
Claus Gittinger <cg@exept.de>
parents: 4571
diff changeset
   459
4c84e69d7a15 focusHandling
Claus Gittinger <cg@exept.de>
parents: 4571
diff changeset
   460
    "Modified: / 08-11-2006 / 12:05:22 / cg"
2723
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   461
! !
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   462
3376
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   463
!WindowGroup class methodsFor:'others'!
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   464
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   465
sendKeyboardFocusEventTo:aView withArgument:arg
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   466
    |sensor ev|
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   467
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   468
    aView isNil ifTrue:[^ self].
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   469
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   470
    (sensor := aView sensor) notNil ifTrue:[
3857
219231fc7e14 Use SynchronousWindoeSensor if no windowGroup
Stefan Vogel <sv@exept.de>
parents: 3853
diff changeset
   471
        ev := WindowEvent keyboardFocus:arg view:aView.   
3376
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   472
        sensor notifyEventListenersAbout:ev.
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   473
        sensor pushEvent:ev.
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   474
    ] ifFalse:[
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   475
        aView hasKeyboardFocus:arg
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   476
    ].
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   477
! !
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
   478
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
   479
!WindowGroup methodsFor:'accessing'!
bc3949e465a0 Initial revision
claus
parents:
diff changeset
   480
3780
69a0a7142c48 remember process which created a modal group,
Claus Gittinger <cg@exept.de>
parents: 3777
diff changeset
   481
creatingProcess
69a0a7142c48 remember process which created a modal group,
Claus Gittinger <cg@exept.de>
parents: 3777
diff changeset
   482
    "return the process which created this group or nil.
69a0a7142c48 remember process which created a modal group,
Claus Gittinger <cg@exept.de>
parents: 3777
diff changeset
   483
     Only returns non-nil for modal groups."
69a0a7142c48 remember process which created a modal group,
Claus Gittinger <cg@exept.de>
parents: 3777
diff changeset
   484
69a0a7142c48 remember process which created a modal group,
Claus Gittinger <cg@exept.de>
parents: 3777
diff changeset
   485
    ^ creatingProcess
69a0a7142c48 remember process which created a modal group,
Claus Gittinger <cg@exept.de>
parents: 3777
diff changeset
   486
69a0a7142c48 remember process which created a modal group,
Claus Gittinger <cg@exept.de>
parents: 3777
diff changeset
   487
    "Modified: / 17.8.1998 / 10:21:29 / cg"
69a0a7142c48 remember process which created a modal group,
Claus Gittinger <cg@exept.de>
parents: 3777
diff changeset
   488
!
69a0a7142c48 remember process which created a modal group,
Claus Gittinger <cg@exept.de>
parents: 3777
diff changeset
   489
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   490
device
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   491
    "return the device, we receive our events from"
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   492
3436
0c0c8b88b669 Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3400
diff changeset
   493
    <resource:#obsolete>
0c0c8b88b669 Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 3400
diff changeset
   494
926
1b8422921e4d use #graphicsDevice instead of #device.
Claus Gittinger <cg@exept.de>
parents: 777
diff changeset
   495
    self obsoleteMethodWarning:'use #graphicsDevice'.
1b8422921e4d use #graphicsDevice instead of #device.
Claus Gittinger <cg@exept.de>
parents: 777
diff changeset
   496
    ^ self graphicsDevice
1b8422921e4d use #graphicsDevice instead of #device.
Claus Gittinger <cg@exept.de>
parents: 777
diff changeset
   497
1b8422921e4d use #graphicsDevice instead of #device.
Claus Gittinger <cg@exept.de>
parents: 777
diff changeset
   498
    "Modified: 5.7.1996 / 17:53:58 / cg"
1b8422921e4d use #graphicsDevice instead of #device.
Claus Gittinger <cg@exept.de>
parents: 777
diff changeset
   499
!
1b8422921e4d use #graphicsDevice instead of #device.
Claus Gittinger <cg@exept.de>
parents: 777
diff changeset
   500
5288
2e17963ed9b5 added: doNotCloseOnAbortSignal
ca
parents: 5285
diff changeset
   501
doNotCloseOnAbortSignal:something
2e17963ed9b5 added: doNotCloseOnAbortSignal
ca
parents: 5285
diff changeset
   502
    "normally, an abortSignal closes a modal dialog, which is different from a non-modal
2e17963ed9b5 added: doNotCloseOnAbortSignal
ca
parents: 5285
diff changeset
   503
     one, where only the current action (event handling) is aborted.
2e17963ed9b5 added: doNotCloseOnAbortSignal
ca
parents: 5285
diff changeset
   504
2e17963ed9b5 added: doNotCloseOnAbortSignal
ca
parents: 5285
diff changeset
   505
     This can be disabled, if you want to avoid closing a modal application,
2e17963ed9b5 added: doNotCloseOnAbortSignal
ca
parents: 5285
diff changeset
   506
     but instead have the same non-modal behavior for modal app vies"
2e17963ed9b5 added: doNotCloseOnAbortSignal
ca
parents: 5285
diff changeset
   507
2e17963ed9b5 added: doNotCloseOnAbortSignal
ca
parents: 5285
diff changeset
   508
    doNotCloseOnAbortSignal := something.
2e17963ed9b5 added: doNotCloseOnAbortSignal
ca
parents: 5285
diff changeset
   509
!
2e17963ed9b5 added: doNotCloseOnAbortSignal
ca
parents: 5285
diff changeset
   510
926
1b8422921e4d use #graphicsDevice instead of #device.
Claus Gittinger <cg@exept.de>
parents: 777
diff changeset
   511
graphicsDevice
1b8422921e4d use #graphicsDevice instead of #device.
Claus Gittinger <cg@exept.de>
parents: 777
diff changeset
   512
    "return the device, we receive our events from"
1b8422921e4d use #graphicsDevice instead of #device.
Claus Gittinger <cg@exept.de>
parents: 777
diff changeset
   513
1311
0746d3fe9a62 changed (fixed ?) graphicsDevice
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   514
    |dev|
0746d3fe9a62 changed (fixed ?) graphicsDevice
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   515
2857
b9bff260f854 cache graphicsDevice - its called often
Claus Gittinger <cg@exept.de>
parents: 2851
diff changeset
   516
    graphicsDevice notNil ifTrue:[^ graphicsDevice].
b9bff260f854 cache graphicsDevice - its called often
Claus Gittinger <cg@exept.de>
parents: 2851
diff changeset
   517
1311
0746d3fe9a62 changed (fixed ?) graphicsDevice
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   518
    topViews notNil ifTrue:[
3077
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   519
	topViews do:[:v |
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   520
	    |app|
1116
c04e4739b42c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1111
diff changeset
   521
3077
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   522
	    v notNil ifTrue:[
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   523
		(app := v application) notNil ifTrue:[
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   524
		    "/
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   525
		    "/ ok, it has an application;
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   526
		    "/ ask it for preferences.
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   527
		    "/
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   528
		    (dev := app graphicsDevice) notNil ifTrue:[
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   529
			^ (graphicsDevice := dev)
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   530
		    ]
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   531
		].
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   532
		(dev := v graphicsDevice) notNil ifTrue:[
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   533
		    ^ (graphicsDevice := dev)
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   534
		]
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   535
	    ]
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   536
	]
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   537
    ].
1311
0746d3fe9a62 changed (fixed ?) graphicsDevice
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   538
    views notNil ifTrue:[
3077
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   539
	views do:[:v |
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   540
	    v notNil ifTrue:[
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   541
		(dev := v graphicsDevice) notNil ifTrue:[
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   542
		    ^ (graphicsDevice := dev)
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   543
		]
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   544
	    ]
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   545
	]
2170
44b86a4cc0d5 in #graphicsDevice: if there are no views, ask previousGroup if there is one.
Claus Gittinger <cg@exept.de>
parents: 2168
diff changeset
   546
    ].
44b86a4cc0d5 in #graphicsDevice: if there are no views, ask previousGroup if there is one.
Claus Gittinger <cg@exept.de>
parents: 2168
diff changeset
   547
    "/ ask the previousGroup; I could be a popUp-views group,
44b86a4cc0d5 in #graphicsDevice: if there are no views, ask previousGroup if there is one.
Claus Gittinger <cg@exept.de>
parents: 2168
diff changeset
   548
    "/ which has already closed its views (and is performing its action)
44b86a4cc0d5 in #graphicsDevice: if there are no views, ask previousGroup if there is one.
Claus Gittinger <cg@exept.de>
parents: 2168
diff changeset
   549
    previousGroup notNil ifTrue:[
3077
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
   550
	^ previousGroup graphicsDevice
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   551
    ].
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   552
    ^ nil
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   553
2170
44b86a4cc0d5 in #graphicsDevice: if there are no views, ask previousGroup if there is one.
Claus Gittinger <cg@exept.de>
parents: 2168
diff changeset
   554
    "Modified: / 9.7.1998 / 18:18:08 / cg"
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   555
!
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   556
6120
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   557
isDebugged
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   558
    "return true, if the receiver has a debugger sitting on top of me,
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   559
     so I do not have control"
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   560
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   561
    ^ isDebugged ? false
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   562
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   563
    "Created: / 28-08-2013 / 21:51:33 / cg"
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   564
!
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   565
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   566
isDebugged:aBoolean
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   567
    "only set by the debugger to mark the currently active group as being debugged"
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   568
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   569
    isDebugged := aBoolean
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   570
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   571
    "Created: / 28-08-2013 / 21:52:35 / cg"
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   572
!
71e5142091fc class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6118
diff changeset
   573
3737
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
   574
isInModalLoop
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
   575
    "return true, if the receiver has given up control to some other modal windowGroup
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
   576
     (i.e. if it has popped up a modal dialog or a popUpMenu)"
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
   577
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
   578
    ^ inModalLoop ? false
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
   579
!
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
   580
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   581
isModal
3737
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
   582
    "return true, if the receiver is for a modal view
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
   583
     (i.e. it is for a modal box, dialog or popUpMenu). 
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
   584
     The suspended windowgroup would return true to the isInModalLoop query if this is the case."
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   585
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   586
    ^ isModal
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   587
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   588
    "Modified: 7.3.1996 / 14:29:46 / cg"
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   589
!
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   590
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   591
mainGroup
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   592
    "return the main windowgroup (for modal groups only) 
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   593
     that is the top one, which is not modal.
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   594
     NonModal groups return themSelf.
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   595
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   596
     There is one exception to this: the debugger (which is sort of modal)
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   597
     returns itself as mainGroup (not its debuggee)."
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   598
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   599
    |g prev|
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   600
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   601
    g := self.
6364
47ed6ce16ea2 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6343
diff changeset
   602
    [(g isModal or:[g isPopUp])
47ed6ce16ea2 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6343
diff changeset
   603
     and:[(prev := g previousGroup) notNil]] whileTrue:[
3354
9c5bc350dec4 application fetch fix
Claus Gittinger <cg@exept.de>
parents: 3352
diff changeset
   604
        g := prev
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   605
    ].
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   606
    ^ g
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   607
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   608
    "Modified: 3.9.1995 / 14:57:20 / claus"
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   609
    "Modified: 7.3.1996 / 14:29:28 / cg"
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   610
!
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   611
1876
6b5a5931a2b9 allow autonomous windowGroup processes to
Claus Gittinger <cg@exept.de>
parents: 1869
diff changeset
   612
mainGroup:aWindowGroup
6b5a5931a2b9 allow autonomous windowGroup processes to
Claus Gittinger <cg@exept.de>
parents: 1869
diff changeset
   613
    "set the main windowgroup (for modal/autonomous groups only) 
6b5a5931a2b9 allow autonomous windowGroup processes to
Claus Gittinger <cg@exept.de>
parents: 1869
diff changeset
   614
     Exposeevents for that windowGroup will be handled by this group
6b5a5931a2b9 allow autonomous windowGroup processes to
Claus Gittinger <cg@exept.de>
parents: 1869
diff changeset
   615
     as well."
6b5a5931a2b9 allow autonomous windowGroup processes to
Claus Gittinger <cg@exept.de>
parents: 1869
diff changeset
   616
6118
1a2751687549 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6097
diff changeset
   617
    self assert:(aWindowGroup ~~ self).
1876
6b5a5931a2b9 allow autonomous windowGroup processes to
Claus Gittinger <cg@exept.de>
parents: 1869
diff changeset
   618
    previousGroup := aWindowGroup
6b5a5931a2b9 allow autonomous windowGroup processes to
Claus Gittinger <cg@exept.de>
parents: 1869
diff changeset
   619
6b5a5931a2b9 allow autonomous windowGroup processes to
Claus Gittinger <cg@exept.de>
parents: 1869
diff changeset
   620
    "Created: 20.8.1997 / 17:57:35 / cg"
6b5a5931a2b9 allow autonomous windowGroup processes to
Claus Gittinger <cg@exept.de>
parents: 1869
diff changeset
   621
!
6b5a5931a2b9 allow autonomous windowGroup processes to
Claus Gittinger <cg@exept.de>
parents: 1869
diff changeset
   622
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   623
previousGroup
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   624
    "return the windowgroup that started this group. (for modal groups only).
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   625
     This may be another modalGroup (for boxes opened by boxes).
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   626
     NonModal groups return nil."
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   627
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   628
    ^ previousGroup
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   629
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   630
    "Modified: 7.3.1996 / 14:28:46 / cg"
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   631
!
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   632
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   633
process 
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   634
    "return the windowGroups process"
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   635
2250
281f9fafdbe0 follow parentGroup in #process-query
Claus Gittinger <cg@exept.de>
parents: 2221
diff changeset
   636
    myProcess isNil ifTrue:[
2363
e456e5040a57 care for homeless (non-top) views when assigning the focus
Claus Gittinger <cg@exept.de>
parents: 2353
diff changeset
   637
	previousGroup notNil ifTrue:[
e456e5040a57 care for homeless (non-top) views when assigning the focus
Claus Gittinger <cg@exept.de>
parents: 2353
diff changeset
   638
	    ^ previousGroup process
e456e5040a57 care for homeless (non-top) views when assigning the focus
Claus Gittinger <cg@exept.de>
parents: 2353
diff changeset
   639
	]
2250
281f9fafdbe0 follow parentGroup in #process-query
Claus Gittinger <cg@exept.de>
parents: 2221
diff changeset
   640
    ].
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   641
    ^ myProcess
2250
281f9fafdbe0 follow parentGroup in #process-query
Claus Gittinger <cg@exept.de>
parents: 2221
diff changeset
   642
281f9fafdbe0 follow parentGroup in #process-query
Claus Gittinger <cg@exept.de>
parents: 2221
diff changeset
   643
    "Modified: / 17.8.1998 / 10:21:29 / cg"
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   644
!
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   645
4375
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   646
processPriority
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   647
    ^ processPriority
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   648
!
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   649
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   650
processPriority:anInteger
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   651
    processPriority := anInteger.
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   652
    myProcess notNil ifTrue:[
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   653
        myProcess priority:anInteger.
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   654
    ].
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   655
!
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   656
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   657
sensor
5911
a37b2a34e6c7 comment
Claus Gittinger <cg@exept.de>
parents: 5691
diff changeset
   658
    "return the windowGroup's sensor.
a37b2a34e6c7 comment
Claus Gittinger <cg@exept.de>
parents: 5691
diff changeset
   659
     All events for any of the group's views is handled by that sensor."
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   660
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   661
    ^ mySensor
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   662
5911
a37b2a34e6c7 comment
Claus Gittinger <cg@exept.de>
parents: 5691
diff changeset
   663
    "Modified: / 07-03-1996 / 14:30:21 / cg"
a37b2a34e6c7 comment
Claus Gittinger <cg@exept.de>
parents: 5691
diff changeset
   664
    "Modified (comment): / 27-04-2012 / 13:55:53 / cg"
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   665
!
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   666
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   667
sensor:aSensor
5215
2353f63cce28 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 5003
diff changeset
   668
    <resource: #obsolete>
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   669
    "set the windowGroups sensor"
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   670
3683
1f38878b9669 avoid trouble in reinit with leftOver windowGroups
penk
parents: 3681
diff changeset
   671
self obsoleteMethodWarning.
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   672
    mySensor := aSensor
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   673
! !
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   674
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   675
!WindowGroup methodsFor:'accessing-hooks'!
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   676
3511
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   677
addPostEventHook:anEventProcessor
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   678
    "add another postEventHook"
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   679
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   680
    postEventHooks isNil ifTrue:[
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   681
        postEventHooks := OrderedCollection new.
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   682
    ].
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   683
    (postEventHooks includesIdentical:anEventProcessor) ifFalse:[
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   684
        postEventHooks add:anEventProcessor
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   685
    ].
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   686
!
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   687
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   688
addPreEventHook:anEventProcessor
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   689
    "add another preEventHook"
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   690
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   691
    preEventHooks isNil ifTrue:[
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   692
        preEventHooks := OrderedCollection new.
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   693
    ].
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   694
    (preEventHooks includesIdentical:anEventProcessor) ifFalse:[
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   695
        preEventHooks add:anEventProcessor
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   696
    ].
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   697
!
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   698
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   699
busyHook 
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   700
    "return the busyHook if any"
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   701
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   702
    ^ busyHook
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   703
!
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   704
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   705
busyHook:anObject 
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   706
    "set the busyHook - this one will be invoked when the event-handling action
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   707
     takes some time."
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   708
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   709
    busyHook := anObject
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   710
!
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   711
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   712
busyHookTimeout
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   713
    "return the busyHooks timeout if any"
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   714
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   715
    ^ busyHookTimeout
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   716
!
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   717
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   718
busyHookTimeout:anObject 
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   719
    "set the busyHooks timeout - the busyHook will be invoked when the event-handling action
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   720
     takes longer than this time."
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   721
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   722
    busyHookTimeout := anObject
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
   723
!
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   724
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   725
postEventHook 
3786
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   726
    "return the postEventHook if any.
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   727
     That is a backwardCompatibility leftOver - no multiple hooks are supported."
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   728
4174
5dffd8de17fc Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 4153
diff changeset
   729
    <resource:#obsolete>
3786
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   730
    self obsoleteMethodWarning:'use #postEventHooks'.
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   731
    ^ postEventHook
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   732
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   733
    "Created: 7.3.1996 / 14:42:46 / cg"
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   734
!
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   735
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   736
postEventHook:anObject 
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   737
    "set the postEventHook - this one will get all events
3786
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   738
     passed after being processed here (via #processEvent:).
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   739
     That is a backwardCompatibility leftOver - no multiple hooks are supported."
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   740
4174
5dffd8de17fc Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 4153
diff changeset
   741
    <resource:#obsolete>
3786
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   742
    self obsoleteMethodWarning:'use #addPostEventHook:/removePostEventHook:'.
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   743
    postEventHook := anObject
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   744
!
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   745
3786
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   746
postEventHooks 
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   747
    "return the postEventHooks if any"
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   748
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   749
    ^ postEventHooks
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   750
!
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   751
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   752
preEventHook 
3786
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   753
    "return the preEventHook if any.
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   754
     That is a backwardCompatibility leftOver - no multiple hooks are supported."
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   755
4174
5dffd8de17fc Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 4153
diff changeset
   756
    <resource:#obsolete>
3786
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   757
    self obsoleteMethodWarning:'use #preEventHooks'.
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   758
    ^ preEventHook
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   759
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   760
    "Created: 7.3.1996 / 14:42:42 / cg"
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   761
!
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   762
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   763
preEventHook:anObject 
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   764
    "set the preEventHook - this one will get all events
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   765
     passed before being processed here (via #processEvent:).
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   766
     If this returns true, the event is supposed to be already
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   767
     processed and ignored here.
3786
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   768
     Otherwise, it is processed as usual.
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   769
     That is a backwardCompatibility leftOver - no multiple hooks are supported."
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   770
4174
5dffd8de17fc Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 4153
diff changeset
   771
    <resource:#obsolete>
3786
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
   772
    self obsoleteMethodWarning:'use #addPreEventHook:/removePreEventHook:'.
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   773
    preEventHook := anObject
3280
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
   774
!
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
   775
3511
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   776
preEventHooks 
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   777
    "return the preEventHooks if any"
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   778
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   779
    ^ preEventHooks
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   780
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   781
    "Created: 7.3.1996 / 14:42:42 / cg"
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   782
!
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   783
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   784
removePostEventHook:anEventProcessor
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   785
    "remove a postEventHook"
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   786
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   787
    postEventHooks notNil ifTrue:[
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   788
        postEventHooks removeIdentical:anEventProcessor ifAbsent:nil.
6093
931a298739a0 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6043
diff changeset
   789
        postEventHooks := postEventHooks asNilIfEmpty.
3511
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   790
    ].
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   791
!
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   792
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   793
removePreEventHook:anEventProcessor
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   794
    "remove a preEventHook"
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   795
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   796
    preEventHooks notNil ifTrue:[
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   797
        preEventHooks removeIdentical:anEventProcessor ifAbsent:nil.
6097
7a07f79ffb1a class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6093
diff changeset
   798
        preEventHooks := preEventHooks asNilIfEmpty. 
3511
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   799
    ].
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   800
!
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
   801
3280
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
   802
showWaitCursorWhenBusyForMillis:millis
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
   803
    "setup a busyHook, which automatically shows a waitCursor, 
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
   804
     whenever some action takes longer than millis"
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
   805
3288
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
   806
    self busyHookTimeout:millis.
3280
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
   807
    self 
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
   808
        busyHook:[:isBusy | 
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
   809
            isBusy ifTrue:[
3281
95e6d0e98f92 care for modal dialogs in automatic busy cursor handling
Claus Gittinger <cg@exept.de>
parents: 3280
diff changeset
   810
                self showCursor:(Cursor wait).
4536
cab69dafe1f2 busyHook runs under timeoutHandlerProcess
ca
parents: 4519
diff changeset
   811
            ] ifFalse:[    
3280
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
   812
                self restoreCursors
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
   813
            ]
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
   814
        ].
512
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   815
! !
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   816
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   817
!WindowGroup methodsFor:'accessing-views'!
e8bc1216a254 commentary & hook access
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   818
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   819
addTopView:aView
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   820
    "add a topview to the group"
26
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
   821
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   822
    topViews isNil ifTrue:[
2723
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   823
	topViews := OrderedCollection with:aView.
2445
a51931237c01 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2444
diff changeset
   824
    ] ifFalse:[
2723
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   825
	(topViews includesIdentical:aView) ifFalse:[
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   826
	    topViews add:aView
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   827
	]
500
a313e9fda9f0 ask topView for focusSequence; focusKey handling now done in TopView/Controller
Claus Gittinger <cg@exept.de>
parents: 496
diff changeset
   828
    ]
a313e9fda9f0 ask topView for focusSequence; focusKey handling now done in TopView/Controller
Claus Gittinger <cg@exept.de>
parents: 496
diff changeset
   829
a313e9fda9f0 ask topView for focusSequence; focusKey handling now done in TopView/Controller
Claus Gittinger <cg@exept.de>
parents: 496
diff changeset
   830
    "Modified: 6.3.1996 / 15:35:15 / cg"
26
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
   831
!
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
   832
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
   833
addView:aView
26
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
   834
    "add aView to the windowGroup"
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
   835
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
   836
    views isNil ifTrue:[
3151
7a79503e33fd register/ deregister views in focusSequence
ca
parents: 3130
diff changeset
   837
        views := OrderedCollection with:aView.
2445
a51931237c01 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2444
diff changeset
   838
    ] ifFalse:[
3151
7a79503e33fd register/ deregister views in focusSequence
ca
parents: 3130
diff changeset
   839
        (views includesIdentical:aView) ifFalse:[
7a79503e33fd register/ deregister views in focusSequence
ca
parents: 3130
diff changeset
   840
            views add:aView
7a79503e33fd register/ deregister views in focusSequence
ca
parents: 3130
diff changeset
   841
        ]
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
   842
    ]
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
   843
!
bc3949e465a0 Initial revision
claus
parents:
diff changeset
   844
3751
274feeb50190 rewrite
Michael Beyl <mb@exept.de>
parents: 3737
diff changeset
   845
application
274feeb50190 rewrite
Michael Beyl <mb@exept.de>
parents: 3737
diff changeset
   846
    |mainView|
274feeb50190 rewrite
Michael Beyl <mb@exept.de>
parents: 3737
diff changeset
   847
274feeb50190 rewrite
Michael Beyl <mb@exept.de>
parents: 3737
diff changeset
   848
    (mainView := self mainView) notNil ifTrue:[
274feeb50190 rewrite
Michael Beyl <mb@exept.de>
parents: 3737
diff changeset
   849
        ^ mainView application
274feeb50190 rewrite
Michael Beyl <mb@exept.de>
parents: 3737
diff changeset
   850
    ].
274feeb50190 rewrite
Michael Beyl <mb@exept.de>
parents: 3737
diff changeset
   851
    ^ nil
274feeb50190 rewrite
Michael Beyl <mb@exept.de>
parents: 3737
diff changeset
   852
!
274feeb50190 rewrite
Michael Beyl <mb@exept.de>
parents: 3737
diff changeset
   853
2445
a51931237c01 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2444
diff changeset
   854
mainView
a51931237c01 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2444
diff changeset
   855
    "return the mainview. Thats the first topView by default"
a51931237c01 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2444
diff changeset
   856
a51931237c01 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2444
diff changeset
   857
    topViews size == 0 ifTrue:[ ^ nil].
a51931237c01 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2444
diff changeset
   858
    ^ topViews first
a51931237c01 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2444
diff changeset
   859
!
a51931237c01 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2444
diff changeset
   860
26
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
   861
removeView:aView
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
   862
    "remove aView from the windowGroup;
ac9f66dc8f53 *** empty log message ***
claus
parents: 23
diff changeset
   863
     if this was the last view in this group, 
81
4ba554473294 *** empty log message ***
claus
parents: 78
diff changeset
   864
     also shut down the corresponding process 
4ba554473294 *** empty log message ***
claus
parents: 78
diff changeset
   865
     (actually, only wake it up here - it will terminate itself 
4ba554473294 *** empty log message ***
claus
parents: 78
diff changeset
   866
      when finding out that all views are gone)"
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
   867
263
Claus Gittinger <cg@exept.de>
parents: 262
diff changeset
   868
    |sema|
Claus Gittinger <cg@exept.de>
parents: 262
diff changeset
   869
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
   870
    focusView == aView ifTrue:[
3486
f93691c57540 cleanup - single access to focusView
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   871
        self setFocusView:nil
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
   872
    ].
3151
7a79503e33fd register/ deregister views in focusSequence
ca
parents: 3130
diff changeset
   873
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
   874
    views notNil ifTrue:[
3151
7a79503e33fd register/ deregister views in focusSequence
ca
parents: 3130
diff changeset
   875
        views removeIdentical:aView ifAbsent:nil.
6097
7a07f79ffb1a class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6093
diff changeset
   876
        views := views asNilIfEmpty. 
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
   877
    ].
bc3949e465a0 Initial revision
claus
parents:
diff changeset
   878
    topViews notNil ifTrue:[
3151
7a79503e33fd register/ deregister views in focusSequence
ca
parents: 3130
diff changeset
   879
        topViews removeIdentical:aView ifAbsent:nil.
6097
7a07f79ffb1a class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6093
diff changeset
   880
        topViews := topViews asNilIfEmpty. 
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
   881
    ].
54
29a6b2f8e042 *** empty log message ***
claus
parents: 48
diff changeset
   882
    "
29a6b2f8e042 *** empty log message ***
claus
parents: 48
diff changeset
   883
     wakeup my process to look if last view has been
262
546f42586e3c only signal sema if there is one (when views are removed)
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   884
     removed (modalBoxes terminate their modalLoop if so)
54
29a6b2f8e042 *** empty log message ***
claus
parents: 48
diff changeset
   885
    "
262
546f42586e3c only signal sema if there is one (when views are removed)
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   886
    mySensor notNil ifTrue:[
3151
7a79503e33fd register/ deregister views in focusSequence
ca
parents: 3130
diff changeset
   887
        (sema := mySensor eventSemaphore) notNil ifTrue:[
7a79503e33fd register/ deregister views in focusSequence
ca
parents: 3130
diff changeset
   888
            sema signal
7a79503e33fd register/ deregister views in focusSequence
ca
parents: 3130
diff changeset
   889
        ]
262
546f42586e3c only signal sema if there is one (when views are removed)
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   890
    ]
1304
d914bfc99b49 use #removeIdentical
Claus Gittinger <cg@exept.de>
parents: 1298
diff changeset
   891
d914bfc99b49 use #removeIdentical
Claus Gittinger <cg@exept.de>
parents: 1298
diff changeset
   892
    "Modified: 1.2.1997 / 12:13:26 / cg"
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
   893
!
bc3949e465a0 Initial revision
claus
parents:
diff changeset
   894
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   895
topViews
2445
a51931237c01 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2444
diff changeset
   896
    "return the topviews associated to this windowGroup"
172
claus
parents: 162
diff changeset
   897
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   898
    ^ topViews
172
claus
parents: 162
diff changeset
   899
!
claus
parents: 162
diff changeset
   900
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   901
views
2445
a51931237c01 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2444
diff changeset
   902
    "return the views associated to this windowGroup"
172
claus
parents: 162
diff changeset
   903
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   904
    ^ views
54
29a6b2f8e042 *** empty log message ***
claus
parents: 48
diff changeset
   905
! !
29a6b2f8e042 *** empty log message ***
claus
parents: 48
diff changeset
   906
3887
01f98c2951a6 method category rename
Claus Gittinger <cg@exept.de>
parents: 3857
diff changeset
   907
!WindowGroup methodsFor:'activation & deactivation'!
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   908
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   909
closeDownViews
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   910
    "destroy all views associated to this window group"
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   911
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   912
    topViews notNil ifTrue:[
3130
d489adbd1fd2 enumerate a copy of the collection, when closing down views
Claus Gittinger <cg@exept.de>
parents: 3103
diff changeset
   913
        topViews copy do:[:aTopView | 
d489adbd1fd2 enumerate a copy of the collection, when closing down views
Claus Gittinger <cg@exept.de>
parents: 3103
diff changeset
   914
            aTopView notNil ifTrue:[
d489adbd1fd2 enumerate a copy of the collection, when closing down views
Claus Gittinger <cg@exept.de>
parents: 3103
diff changeset
   915
                aTopView destroy
d489adbd1fd2 enumerate a copy of the collection, when closing down views
Claus Gittinger <cg@exept.de>
parents: 3103
diff changeset
   916
            ]
d489adbd1fd2 enumerate a copy of the collection, when closing down views
Claus Gittinger <cg@exept.de>
parents: 3103
diff changeset
   917
        ]
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   918
    ].
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   919
    views := nil.
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   920
    topViews := nil.
5285
6dfae0d329e6 cleanup scheme fixed
ca
parents: 5276
diff changeset
   921
6dfae0d329e6 cleanup scheme fixed
ca
parents: 5276
diff changeset
   922
    "/ keep the sensor in case there are pending incoming events;
6dfae0d329e6 cleanup scheme fixed
ca
parents: 5276
diff changeset
   923
    "/ otherwise there is a chance that we end up in a debugger in the
6dfae0d329e6 cleanup scheme fixed
ca
parents: 5276
diff changeset
   924
    "/ device's event handling (wGroup nonNil, but sensor isNil) for
6dfae0d329e6 cleanup scheme fixed
ca
parents: 5276
diff changeset
   925
    "/ the unmappedView and focusOUT events.
6dfae0d329e6 cleanup scheme fixed
ca
parents: 5276
diff changeset
   926
    mySensor flushAllEvents.
6dfae0d329e6 cleanup scheme fixed
ca
parents: 5276
diff changeset
   927
    "/ mySensor := nil.
2644
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   928
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   929
    "Modified: / 6.5.1999 / 09:47:18 / cg"
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   930
!
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   931
3286
21f022859294 flush device-queue when showing cursor,
Claus Gittinger <cg@exept.de>
parents: 3281
diff changeset
   932
modalDialogFinished
21f022859294 flush device-queue when showing cursor,
Claus Gittinger <cg@exept.de>
parents: 3281
diff changeset
   933
    "invoked, when a modal dialog is closed"
21f022859294 flush device-queue when showing cursor,
Claus Gittinger <cg@exept.de>
parents: 3281
diff changeset
   934
21f022859294 flush device-queue when showing cursor,
Claus Gittinger <cg@exept.de>
parents: 3281
diff changeset
   935
    inModalLoop := false.
21f022859294 flush device-queue when showing cursor,
Claus Gittinger <cg@exept.de>
parents: 3281
diff changeset
   936
!
21f022859294 flush device-queue when showing cursor,
Claus Gittinger <cg@exept.de>
parents: 3281
diff changeset
   937
21f022859294 flush device-queue when showing cursor,
Claus Gittinger <cg@exept.de>
parents: 3281
diff changeset
   938
modalDialogStarts
21f022859294 flush device-queue when showing cursor,
Claus Gittinger <cg@exept.de>
parents: 3281
diff changeset
   939
    "invoked, when a modal dialog is opened"
21f022859294 flush device-queue when showing cursor,
Claus Gittinger <cg@exept.de>
parents: 3281
diff changeset
   940
6023
4b20fb242062 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 5948
diff changeset
   941
    self processEvents. "/ process any bufferd message send events
3286
21f022859294 flush device-queue when showing cursor,
Claus Gittinger <cg@exept.de>
parents: 3281
diff changeset
   942
    inModalLoop := true.
21f022859294 flush device-queue when showing cursor,
Claus Gittinger <cg@exept.de>
parents: 3281
diff changeset
   943
!
21f022859294 flush device-queue when showing cursor,
Claus Gittinger <cg@exept.de>
parents: 3281
diff changeset
   944
1822
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
   945
realizeTopViews
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
   946
    "realize all topViews associated to this windowGroup."
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   947
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   948
    topViews notNil ifTrue:[
1977
9bda3ac0d83d no need for #flush in event-loop (already done by threads suspendAction)
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
   949
	topViews do:[:aView |
9bda3ac0d83d no need for #flush in event-loop (already done by threads suspendAction)
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
   950
	    aView realize.
9bda3ac0d83d no need for #flush in event-loop (already done by threads suspendAction)
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
   951
	].
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   952
    ].
1822
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
   953
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
   954
    "Created: 24.7.1997 / 12:56:09 / cg"
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
   955
!
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
   956
2644
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   957
restart
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   958
    "restart after a snapin.
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   959
     This re-creates the windowGroup process and informs
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   960
     my views."
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   961
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   962
    topViews notNil ifTrue:[
2723
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   963
	"
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   964
	 need a new semaphore, since obsolete processes 
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   965
	 (from our previous live) may still sit on the current semaphore
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   966
	"
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   967
	mySensor eventSemaphore:(Semaphore new name:'WGroup eventSema').
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   968
	isModal ifFalse:[
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   969
	    self startupWith:[self restartTopViews].
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   970
	]
2644
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   971
    ]
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   972
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   973
    "Modified: / 6.5.1999 / 09:46:08 / cg"
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   974
!
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   975
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   976
restartTopViews
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   977
    "inform all topViews associated to this windowGroup.
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   978
     about the restart."
1822
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
   979
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
   980
    topViews notNil ifTrue:[
2723
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   981
	topViews do:[:aView |
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   982
	    aView isPopUpView ifFalse:[
2644
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   983
"/                aView realize.
2723
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   984
		aView restarted
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   985
	    ].
3e54762a7840 new focus mechanism
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
   986
	].
1822
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
   987
    ].
180
claus
parents: 172
diff changeset
   988
2644
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   989
    "Modified: / 6.5.1999 / 09:42:37 / cg"
bb15778539af oops - restart with iconified views recreated them
Claus Gittinger <cg@exept.de>
parents: 2587
diff changeset
   990
    "Created: / 6.5.1999 / 09:46:33 / cg"
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
   991
!
180
claus
parents: 172
diff changeset
   992
4375
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   993
shutDown
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   994
    "shutdown the window group; close all views and
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   995
     terminate the process"
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   996
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   997
    self closeDownViews.
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   998
    self shutDownProcess.
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
   999
!
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  1000
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  1001
shutDownProcess
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  1002
    "shutdown the window group process"
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  1003
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  1004
    |p|
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  1005
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  1006
    myProcess notNil ifTrue:[
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  1007
        p := myProcess.
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  1008
        myProcess := nil.
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  1009
        p terminate.
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  1010
    ]
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  1011
!
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  1012
1822
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1013
startupModal:checkBlock
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1014
    "startup the window-group in a modal loop 
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1015
     (i.e. under the currently running process);
1876
6b5a5931a2b9 allow autonomous windowGroup processes to
Claus Gittinger <cg@exept.de>
parents: 1869
diff changeset
  1016
     checkBlock is evaluated and the modal loop is left, 
6b5a5931a2b9 allow autonomous windowGroup processes to
Claus Gittinger <cg@exept.de>
parents: 1869
diff changeset
  1017
     whenever false is returned."
1822
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1018
1876
6b5a5931a2b9 allow autonomous windowGroup processes to
Claus Gittinger <cg@exept.de>
parents: 1869
diff changeset
  1019
    ^ self startupModal:checkBlock forGroup:(WindowGroup activeGroup).
1822
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1020
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1021
    "Created: 10.12.1995 / 14:15:11 / cg"
1876
6b5a5931a2b9 allow autonomous windowGroup processes to
Claus Gittinger <cg@exept.de>
parents: 1869
diff changeset
  1022
    "Modified: 20.8.1997 / 17:54:33 / cg"
1822
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1023
!
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1024
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1025
startupModal:checkBlock forGroup:mainGroup
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1026
    "startup the window-group in a modal loop 
3780
69a0a7142c48 remember process which created a modal group,
Claus Gittinger <cg@exept.de>
parents: 3777
diff changeset
  1027
     (i.e. under the currently running process - NOT creating a new process);
69a0a7142c48 remember process which created a modal group,
Claus Gittinger <cg@exept.de>
parents: 3777
diff changeset
  1028
     checkBlock is evaluated and loop is left, when false is returned.
1822
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1029
     The mainGroup info is required to allow peeking into its
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1030
     event queue in order for its expose/redraws to be handled."
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1031
4182
ccf4b7f75ebf try new focus-scheme
ca
parents: 4180
diff changeset
  1032
    |prevActiveKeyboardGrab prevActivePointerGrab prevFocus device tops prevGroup
5270
5db2458e62c4 return focus disabled (the getKeyboadFocus as implemented
Claus Gittinger <cg@exept.de>
parents: 5267
diff changeset
  1033
     oldFocusScheme returnFocus|
5db2458e62c4 return focus disabled (the getKeyboadFocus as implemented
Claus Gittinger <cg@exept.de>
parents: 5267
diff changeset
  1034
5445
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1035
    "/ experimental (but seem to work fine...)
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1036
    returnFocus := false.
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1037
    oldFocusScheme := false.
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1038
1822
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1039
    "set previousGroup to the main (non-modal) group"
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1040
6118
1a2751687549 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6097
diff changeset
  1041
    previousGroup isNil ifTrue:[
1a2751687549 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6097
diff changeset
  1042
        self assert:(mainGroup ~~ self).
1a2751687549 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6097
diff changeset
  1043
        previousGroup := mainGroup
1a2751687549 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6097
diff changeset
  1044
    ].
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1045
    prevGroup := previousGroup.
3354
9c5bc350dec4 application fetch fix
Claus Gittinger <cg@exept.de>
parents: 3352
diff changeset
  1046
    prevGroup notNil ifTrue:[
9c5bc350dec4 application fetch fix
Claus Gittinger <cg@exept.de>
parents: 3352
diff changeset
  1047
        "/ remember current grab, in case I am opened by
9c5bc350dec4 application fetch fix
Claus Gittinger <cg@exept.de>
parents: 3352
diff changeset
  1048
        "/ a popup (such as an extendedComboBox) ...
9c5bc350dec4 application fetch fix
Claus Gittinger <cg@exept.de>
parents: 3352
diff changeset
  1049
        device := prevGroup graphicsDevice.
9c5bc350dec4 application fetch fix
Claus Gittinger <cg@exept.de>
parents: 3352
diff changeset
  1050
        prevActiveKeyboardGrab := device activeKeyboardGrab.
9c5bc350dec4 application fetch fix
Claus Gittinger <cg@exept.de>
parents: 3352
diff changeset
  1051
        prevActivePointerGrab := device activePointerGrab.
9c5bc350dec4 application fetch fix
Claus Gittinger <cg@exept.de>
parents: 3352
diff changeset
  1052
    ].
1822
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1053
    isModal := true.
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1054
3780
69a0a7142c48 remember process which created a modal group,
Claus Gittinger <cg@exept.de>
parents: 3777
diff changeset
  1055
    myProcess isNil ifTrue:[
69a0a7142c48 remember process which created a modal group,
Claus Gittinger <cg@exept.de>
parents: 3777
diff changeset
  1056
        creatingProcess := Processor activeProcess
69a0a7142c48 remember process which created a modal group,
Claus Gittinger <cg@exept.de>
parents: 3777
diff changeset
  1057
    ].
69a0a7142c48 remember process which created a modal group,
Claus Gittinger <cg@exept.de>
parents: 3777
diff changeset
  1058
5445
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1059
    oldFocusScheme ifTrue:[
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1060
        previousGroup notNil ifTrue:[
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1061
            prevFocus := previousGroup focusView.
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1062
        ].
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1063
    ].
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1064
3281
95e6d0e98f92 care for modal dialogs in automatic busy cursor handling
Claus Gittinger <cg@exept.de>
parents: 3280
diff changeset
  1065
    mainGroup notNil ifTrue:[
95e6d0e98f92 care for modal dialogs in automatic busy cursor handling
Claus Gittinger <cg@exept.de>
parents: 3280
diff changeset
  1066
        "/ tell the other group, that some modal dialog has started.
95e6d0e98f92 care for modal dialogs in automatic busy cursor handling
Claus Gittinger <cg@exept.de>
parents: 3280
diff changeset
  1067
        mainGroup modalDialogStarts
95e6d0e98f92 care for modal dialogs in automatic busy cursor handling
Claus Gittinger <cg@exept.de>
parents: 3280
diff changeset
  1068
    ].
5445
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1069
    [
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1070
        WindowGroupQuerySignal answer:self do:[
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1071
            LastActiveGroup := nil.
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1072
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1073
            self realizeTopViews.
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1074
            self 
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1075
                eventLoopWhile:checkBlock 
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1076
                onLeave:[]
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1077
        ].
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1078
    ] ensure:[
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1079
        mainGroup notNil ifTrue:[
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1080
            "/ tell the other group, that some modal dialog has closed down.
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1081
            mainGroup modalDialogFinished
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1082
        ]
3352
47697e8eb891 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3349
diff changeset
  1083
    ].
5445
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1084
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1085
    returnFocus ifTrue:[
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1086
        "/ restore current grab, in case was opened by
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1087
        "/ a popup (such as an extendedComboBox) ...
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1088
        mainGroup notNil ifTrue:[
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1089
            (prevGroup isModal or:[prevGroup isPopUp]) ifTrue:[
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1090
                "
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1091
                 return the input focus to the previously active group's top.
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1092
                "
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1093
                tops := prevGroup topViews.
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1094
                tops notEmptyOrNil ifTrue:[
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1095
                    tops first getKeyboardFocus.
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1096
                ].
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1097
            ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1098
        ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1099
    ].
5445
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1100
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1101
    oldFocusScheme ifFalse:[
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1102
        previousGroup notNil ifTrue:[ 
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1103
            prevFocus := previousGroup focusView.
eb5e6920f2da changed: #startupModal:forGroup:
Claus Gittinger <cg@exept.de>
parents: 5364
diff changeset
  1104
        ].
4182
ccf4b7f75ebf try new focus-scheme
ca
parents: 4180
diff changeset
  1105
    ].
ccf4b7f75ebf try new focus-scheme
ca
parents: 4180
diff changeset
  1106
ccf4b7f75ebf try new focus-scheme
ca
parents: 4180
diff changeset
  1107
    prevFocus notNil ifTrue:[ 
ccf4b7f75ebf try new focus-scheme
ca
parents: 4180
diff changeset
  1108
        previousGroup focusView requestFocus 
ccf4b7f75ebf try new focus-scheme
ca
parents: 4180
diff changeset
  1109
    ].
ccf4b7f75ebf try new focus-scheme
ca
parents: 4180
diff changeset
  1110
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1111
    prevActivePointerGrab notNil ifTrue:[ device grabPointerInView:prevActivePointerGrab ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1112
    prevActiveKeyboardGrab notNil ifTrue:[ device grabKeyboardInView:prevActiveKeyboardGrab ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1113
1822
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1114
    "Created: 10.12.1995 / 14:14:26 / cg"
1876
6b5a5931a2b9 allow autonomous windowGroup processes to
Claus Gittinger <cg@exept.de>
parents: 1869
diff changeset
  1115
    "Modified: 20.8.1997 / 18:12:20 / cg"
1822
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1116
!
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1117
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1118
startupWith:startupAction
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1119
    "startup the window-group;
1822
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1120
     this creates a new window group process, which does the event processing.
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1121
     The startupAction arg is evaluated by the windowGroup process,
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1122
     before the eventLoop is entered, and is used to realize any views.
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1123
     [this is done to have the new process realize its views, instead of
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1124
      the caller - which may make a difference in case of errors and/or
38f24dca2eb2 changes to support #openIconified.
Claus Gittinger <cg@exept.de>
parents: 1806
diff changeset
  1125
      blocking operations ...]"
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1126
2958
128f33a77fb1 added a hook to allow interception of new-sub-application
ca
parents: 2957
diff changeset
  1127
    |top nm dev devNm invokingApp|
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1128
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1129
    previousGroup := nil.
1186
e1fbbabcd682 no longer use exitBlocks - a termination-unwind handler will
Claus Gittinger <cg@exept.de>
parents: 1157
diff changeset
  1130
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1131
    myProcess isNil ifTrue:[
3172
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1132
        isModal := false.
1186
e1fbbabcd682 no longer use exitBlocks - a termination-unwind handler will
Claus Gittinger <cg@exept.de>
parents: 1157
diff changeset
  1133
3172
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1134
        "/
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1135
        "/ this is the windowGroup process;
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1136
        "/ realize all views, then handle events forever
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1137
        "/ (well, not really forever ... ;-)
2878
477c46142b9f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2870
diff changeset
  1138
3172
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1139
        myProcess := [
4340
de4c36dc3076 Use #answer:do: instead of #handle:do where appropriate
Stefan Vogel <sv@exept.de>
parents: 4335
diff changeset
  1140
            WindowGroupQuerySignal answer:self do:[
3538
54c7307306b6 oops - redraw of a modal box which had a mdal box open
Claus Gittinger <cg@exept.de>
parents: 3511
diff changeset
  1141
                LastActiveGroup := nil.
3172
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1142
                [
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1143
                    startupAction value.
6550
ab2d57d5b787 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6518
diff changeset
  1144
                    self showWaitCursorWhenBusyForMillis:400.
3172
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1145
                    self eventLoopWhile:[true] onLeave:[]
3604
e32b5044a59e #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 3557
diff changeset
  1146
                ] ensure:[
3695
d960a1cbf0f1 send release to application
penk
parents: 3683
diff changeset
  1147
                    |dev w app|
d960a1cbf0f1 send release to application
penk
parents: 3683
diff changeset
  1148
d960a1cbf0f1 send release to application
penk
parents: 3683
diff changeset
  1149
                    (w := self mainView) notNil ifTrue:[
d960a1cbf0f1 send release to application
penk
parents: 3683
diff changeset
  1150
                        (app := w application) notNil ifTrue:[
d960a1cbf0f1 send release to application
penk
parents: 3683
diff changeset
  1151
                            app release
d960a1cbf0f1 send release to application
penk
parents: 3683
diff changeset
  1152
                        ]
d960a1cbf0f1 send release to application
penk
parents: 3683
diff changeset
  1153
                    ].
3172
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1154
                    (dev := self graphicsDevice) notNil ifTrue:[
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1155
                        dev deviceIOErrorSignal handle:[:ex |
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1156
                        ] do:[
5285
6dfae0d329e6 cleanup scheme fixed
ca
parents: 5276
diff changeset
  1157
                            "/ just in case the view did not yet have a chance to 
6dfae0d329e6 cleanup scheme fixed
ca
parents: 5276
diff changeset
  1158
                            "/ shutDown properly (process killed in processMonitor)
6dfae0d329e6 cleanup scheme fixed
ca
parents: 5276
diff changeset
  1159
                            views notNil ifTrue:[
6dfae0d329e6 cleanup scheme fixed
ca
parents: 5276
diff changeset
  1160
                                self closeDownViews
6dfae0d329e6 cleanup scheme fixed
ca
parents: 5276
diff changeset
  1161
                            ]
3172
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1162
                        ]
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1163
                    ]
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1164
                ]
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1165
            ]
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1166
        ] newProcess.
1186
e1fbbabcd682 no longer use exitBlocks - a termination-unwind handler will
Claus Gittinger <cg@exept.de>
parents: 1157
diff changeset
  1167
4375
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  1168
        self setProcessNameWithRedirectIndicator:''.
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  1169
        myProcess priority:processPriority;
3341
222b9d88fb04 Fix comment
Stefan Vogel <sv@exept.de>
parents: 3335
diff changeset
  1170
                  beGroupLeader;
222b9d88fb04 Fix comment
Stefan Vogel <sv@exept.de>
parents: 3335
diff changeset
  1171
                  beGUIProcess.
180
claus
parents: 172
diff changeset
  1172
3172
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1173
        "/
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1174
        "/ when the process gets suspended, 
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1175
        "/ there maybe still buffered draw requests.
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1176
        "/ Arrange for them to be flushed then.
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1177
        "/ (otherwise, you would not see the output of a process,
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1178
        "/  which suspends and waits - or we had to add buffer flushes
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1179
        "/  all over the place)
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1180
        "/
4801
bfca038bcf44 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4737
diff changeset
  1181
        myProcess 
bfca038bcf44 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4737
diff changeset
  1182
            addSuspendAction:[ 
bfca038bcf44 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4737
diff changeset
  1183
                |dev|
bfca038bcf44 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4737
diff changeset
  1184
bfca038bcf44 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4737
diff changeset
  1185
                dev := self graphicsDevice.
bfca038bcf44 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4737
diff changeset
  1186
                dev notNil ifTrue:[dev flush].
bfca038bcf44 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4737
diff changeset
  1187
            ].
2851
c43fdd39d2e5 startupWith:startupAction
Claus Gittinger <cg@exept.de>
parents: 2815
diff changeset
  1188
3172
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1189
        "/ allow for the currently active application,
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1190
        "/ to hook on new-application process creation.
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1191
        (invokingApp := WindowGroup activeMainApplication) notNil ifTrue:[
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1192
            invokingApp postApplicationProcessCreate:myProcess windowGroup:self.
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1193
        ].
4224
c0e06759a298 Avoid dangling references in context
Stefan Vogel <sv@exept.de>
parents: 4220
diff changeset
  1194
        top := nm := dev := devNm := invokingApp:= nil.  "/ to avoid dangling references via blocks home context.
2959
a7969f737425 care for mainGroup/view/app being nil before accessing
ca
parents: 2958
diff changeset
  1195
3172
9dbb035935b6 Define #activeApplication and #activeMainApplication (cg)
Stefan Vogel <sv@exept.de>
parents: 3156
diff changeset
  1196
        myProcess resume.
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1197
    ]
313
2b776b2a26c5 stefans changes
Claus Gittinger <cg@exept.de>
parents: 302
diff changeset
  1198
4801
bfca038bcf44 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4737
diff changeset
  1199
    "Modified: / 13-12-1995 / 14:04:53 / stefan"
bfca038bcf44 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4737
diff changeset
  1200
    "Created: / 24-07-1997 / 12:52:04 / cg"
bfca038bcf44 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4737
diff changeset
  1201
    "Modified: / 17-09-2007 / 10:59:34 / cg"
3373
3585120d4d58 only eat a modal Escape-key event, if the modalView did unmap
Claus Gittinger <cg@exept.de>
parents: 3372
diff changeset
  1202
! !
180
claus
parents: 172
diff changeset
  1203
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  1204
!WindowGroup methodsFor:'enumerating'!
54
29a6b2f8e042 *** empty log message ***
claus
parents: 48
diff changeset
  1205
1117
a4eb82737146 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1116
diff changeset
  1206
allNonTopViewsDo:aBlock
a4eb82737146 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1116
diff changeset
  1207
    "evaluate aBlock for all nonTopviews (i.e. subviews) in this group.
1334
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1208
     This enumerates a copy of the view collection, to allow for
1240
1dc8c6d791fd comment
Claus Gittinger <cg@exept.de>
parents: 1186
diff changeset
  1209
     destroy and other collection changing operations to be performed in the loop."
1117
a4eb82737146 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1116
diff changeset
  1210
a4eb82737146 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1116
diff changeset
  1211
    views notNil ifTrue:[
1977
9bda3ac0d83d no need for #flush in event-loop (already done by threads suspendAction)
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
  1212
	views copy nonNilElementsDo:aBlock
1117
a4eb82737146 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1116
diff changeset
  1213
    ]
1334
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1214
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1215
    "Modified: 12.2.1997 / 12:20:25 / cg"
1117
a4eb82737146 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1116
diff changeset
  1216
!
a4eb82737146 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1116
diff changeset
  1217
1153
9a10a934c137 commentary
Claus Gittinger <cg@exept.de>
parents: 1117
diff changeset
  1218
allTopViewsDo:aBlock
9a10a934c137 commentary
Claus Gittinger <cg@exept.de>
parents: 1117
diff changeset
  1219
    "evaluate aBlock for all topviews in this group.
1334
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1220
     This enumerates a copy of the view collection, to allow for
1240
1dc8c6d791fd comment
Claus Gittinger <cg@exept.de>
parents: 1186
diff changeset
  1221
     destroy and other collection changing operations to be performed in the loop."
1153
9a10a934c137 commentary
Claus Gittinger <cg@exept.de>
parents: 1117
diff changeset
  1222
9a10a934c137 commentary
Claus Gittinger <cg@exept.de>
parents: 1117
diff changeset
  1223
    topViews notNil ifTrue:[
1977
9bda3ac0d83d no need for #flush in event-loop (already done by threads suspendAction)
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
  1224
	topViews copy nonNilElementsDo:aBlock
1153
9a10a934c137 commentary
Claus Gittinger <cg@exept.de>
parents: 1117
diff changeset
  1225
    ]
1334
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1226
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1227
    "Modified: 12.2.1997 / 12:20:30 / cg"
1153
9a10a934c137 commentary
Claus Gittinger <cg@exept.de>
parents: 1117
diff changeset
  1228
!
9a10a934c137 commentary
Claus Gittinger <cg@exept.de>
parents: 1117
diff changeset
  1229
54
29a6b2f8e042 *** empty log message ***
claus
parents: 48
diff changeset
  1230
allTopViewsExcept:aView do:aBlock
157
claus
parents: 152
diff changeset
  1231
    "evaluate aBlock for all topviews except aView in this group.
1334
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1232
     This enumerates a copy of the view collection, to allow for
1240
1dc8c6d791fd comment
Claus Gittinger <cg@exept.de>
parents: 1186
diff changeset
  1233
     destroy and other collection changing operations to be performed in the loop."
157
claus
parents: 152
diff changeset
  1234
1334
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1235
    self allTopViewsDo:[:v |
1977
9bda3ac0d83d no need for #flush in event-loop (already done by threads suspendAction)
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
  1236
	v ~~ aView ifTrue:[aBlock value:v]
157
claus
parents: 152
diff changeset
  1237
    ].
1334
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1238
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1239
    "Modified: 12.2.1997 / 12:22:10 / cg"
157
claus
parents: 152
diff changeset
  1240
!
claus
parents: 152
diff changeset
  1241
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1242
allViewsDo:aBlock
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1243
    "evaluate aBlock for all views & topviews in this group.
1334
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1244
     This enumerates a copy of the view collection, to allow for
1240
1dc8c6d791fd comment
Claus Gittinger <cg@exept.de>
parents: 1186
diff changeset
  1245
     destroy and other collection changing operations to be performed in the loop."
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1246
1117
a4eb82737146 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1116
diff changeset
  1247
    self allTopViewsDo:aBlock.
a4eb82737146 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1116
diff changeset
  1248
    self allNonTopViewsDo:aBlock.
1334
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1249
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1250
    "Modified: 12.2.1997 / 12:20:20 / cg"
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1251
!
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1252
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1253
partnersDo:aBlock
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1254
    "evaluate aBlock for all partnerViews.
1334
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1255
     This enumerates a copy of the view collection, to allow for
1240
1dc8c6d791fd comment
Claus Gittinger <cg@exept.de>
parents: 1186
diff changeset
  1256
     destroy and other collection changing operations to be performed in the loop."
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1257
1334
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1258
    self allTopViewsDo:[:v |
3622
42b9c35a0f18 use #isSlave, #isPartner instead of comparing the type
Claus Gittinger <cg@exept.de>
parents: 3619
diff changeset
  1259
        v isPartner ifTrue:[aBlock value:v].
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1260
    ].
1334
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1261
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1262
    "Modified: 12.2.1997 / 12:21:41 / cg"
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1263
!
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1264
157
claus
parents: 152
diff changeset
  1265
slavesDo:aBlock
claus
parents: 152
diff changeset
  1266
    "evaluate aBlock for all slaveViews.
1334
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1267
     This enumerates a copy of the view collection, to allow for
1240
1dc8c6d791fd comment
Claus Gittinger <cg@exept.de>
parents: 1186
diff changeset
  1268
     destroy and other collection changing operations to be performed in the loop."
54
29a6b2f8e042 *** empty log message ***
claus
parents: 48
diff changeset
  1269
1334
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1270
    self allTopViewsDo:[:v |
3622
42b9c35a0f18 use #isSlave, #isPartner instead of comparing the type
Claus Gittinger <cg@exept.de>
parents: 3619
diff changeset
  1271
        v isSlave ifTrue:[aBlock value:v].
157
claus
parents: 152
diff changeset
  1272
    ].
1334
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1273
4d1065c38970 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1328
diff changeset
  1274
    "Modified: 12.2.1997 / 12:21:46 / cg"
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
  1275
! !
bc3949e465a0 Initial revision
claus
parents:
diff changeset
  1276
605
20f960026796 convenient interface for eventTracing ; comments & docu
Claus Gittinger <cg@exept.de>
parents: 598
diff changeset
  1277
!WindowGroup methodsFor:'event debugging'!
20f960026796 convenient interface for eventTracing ; comments & docu
Claus Gittinger <cg@exept.de>
parents: 598
diff changeset
  1278
3786
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1279
traceEvents
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1280
    "return the event tracing flag"
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1281
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1282
    ^ traceEvents
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1283
!
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1284
605
20f960026796 convenient interface for eventTracing ; comments & docu
Claus Gittinger <cg@exept.de>
parents: 598
diff changeset
  1285
traceEvents:trueOrFalse
3786
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1286
    "turn event tracing on/off"
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1287
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1288
    traceEvents := trueOrFalse
605
20f960026796 convenient interface for eventTracing ; comments & docu
Claus Gittinger <cg@exept.de>
parents: 598
diff changeset
  1289
! !
20f960026796 convenient interface for eventTracing ; comments & docu
Claus Gittinger <cg@exept.de>
parents: 598
diff changeset
  1290
19
74683e998f36 *** empty log message ***
claus
parents: 17
diff changeset
  1291
!WindowGroup methodsFor:'event handling'!
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
  1292
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1293
eventLoop
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1294
    "loop executed by windowGroup process;
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1295
     wait-for and process events forever"
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1296
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1297
   self eventLoopWhile:[true] onLeave:[]
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1298
!
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1299
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1300
eventLoopWhile:aBlock onLeave:cleanupActions
513
47b0f4bf4d89 use a single handler for handled signals
Claus Gittinger <cg@exept.de>
parents: 512
diff changeset
  1301
    "wait-for and process events.
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1302
     Stay in this loop while there are still any views to dispatch for,
513
47b0f4bf4d89 use a single handler for handled signals
Claus Gittinger <cg@exept.de>
parents: 512
diff changeset
  1303
     and aBlock evaluates to true.
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1304
1752
Claus Gittinger <cg@exept.de>
parents: 1652
diff changeset
  1305
     Some signals are caught & handled: 
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1306
        LeaveSignal forces an exit from the eventLoop;
4220
03efe93c8f79 use class based exceptions
Stefan Vogel <sv@exept.de>
parents: 4183
diff changeset
  1307
        AbortOperationRequest brings us back into the loop, processing the next event;
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1308
        ActivityNotifications send a #showActivity: if nonModal, 
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1309
        otherwise they are ignored."
513
47b0f4bf4d89 use a single handler for handled signals
Claus Gittinger <cg@exept.de>
parents: 512
diff changeset
  1310
5520
2711e254f54c changed:
Stefan Vogel <sv@exept.de>
parents: 5518
diff changeset
  1311
    |thisProcess signalsToHandle|
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1312
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1313
    thisProcess := Processor activeProcess.
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1314
5520
2711e254f54c changed:
Stefan Vogel <sv@exept.de>
parents: 5518
diff changeset
  1315
    signalsToHandle := SignalSet
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1316
                with:LeaveSignal 
5350
120c1f2ec686 changed: #eventLoopWhile:onLeave:
Claus Gittinger <cg@exept.de>
parents: 5291
diff changeset
  1317
                with:ActivityNotification.
513
47b0f4bf4d89 use a single handler for handled signals
Claus Gittinger <cg@exept.de>
parents: 512
diff changeset
  1318
4474
58a2e62065a6 pass up AbortAllSignals to the original handler
Claus Gittinger <cg@exept.de>
parents: 4413
diff changeset
  1319
    (isModal not or:[AbortAllOperationRequest isHandled not]) ifTrue:[
5520
2711e254f54c changed:
Stefan Vogel <sv@exept.de>
parents: 5518
diff changeset
  1320
        signalsToHandle add:AbortAllOperationRequest
4474
58a2e62065a6 pass up AbortAllSignals to the original handler
Claus Gittinger <cg@exept.de>
parents: 4413
diff changeset
  1321
    ].
5520
2711e254f54c changed:
Stefan Vogel <sv@exept.de>
parents: 5518
diff changeset
  1322
    doNotCloseOnAbortSignal ifTrue:[
2711e254f54c changed:
Stefan Vogel <sv@exept.de>
parents: 5518
diff changeset
  1323
        signalsToHandle add:AbortOperationRequest
5288
2e17963ed9b5 added: doNotCloseOnAbortSignal
ca
parents: 5285
diff changeset
  1324
    ].
2e17963ed9b5 added: doNotCloseOnAbortSignal
ca
parents: 5285
diff changeset
  1325
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1326
    [
5520
2711e254f54c changed:
Stefan Vogel <sv@exept.de>
parents: 5518
diff changeset
  1327
        |p g s mainGroup mySema waitSema mainSema groupForSema|
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1328
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1329
        waitSema := mySema := mySensor eventSemaphore.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1330
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1331
        isModal ifTrue:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1332
            mainGroup := self mainGroup.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1333
            mainGroup == self ifTrue:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1334
                mainGroup := nil
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1335
            ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1336
        ] ifFalse:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1337
            mainGroup := previousGroup
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1338
        ].
5364
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1339
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1340
        "/ if this is an event loop for a modal loop (popup or dialog),
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1341
        "/ also make sure that we react on events coming for the mainGroup
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1342
        "/ to allow for redraw of those views.
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1343
        mainGroup notNil ifTrue:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1344
            mainSema := mainGroup sensor eventSemaphore.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1345
            waitSema := SemaphoreSet with:mySema with:mainSema.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1346
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1347
            "/ must also care for all other groups in between
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1348
            "/ (in case its a modal dialog opened from a modal dialog)
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1349
            g := previousGroup.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1350
            g ~~ mainGroup ifTrue:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1351
                groupForSema := IdentityDictionary new.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1352
                [g ~~ mainGroup] whileTrue:[
4329
514438e41210 care for group without sensor (already finished dialog)
Claus Gittinger <cg@exept.de>
parents: 4224
diff changeset
  1353
                    g sensor notNil ifTrue:[
514438e41210 care for group without sensor (already finished dialog)
Claus Gittinger <cg@exept.de>
parents: 4224
diff changeset
  1354
                        s := g sensor eventSemaphore.
514438e41210 care for group without sensor (already finished dialog)
Claus Gittinger <cg@exept.de>
parents: 4224
diff changeset
  1355
                        waitSema add:s.
514438e41210 care for group without sensor (already finished dialog)
Claus Gittinger <cg@exept.de>
parents: 4224
diff changeset
  1356
                        groupForSema at:s put:g.
514438e41210 care for group without sensor (already finished dialog)
Claus Gittinger <cg@exept.de>
parents: 4224
diff changeset
  1357
                    ].
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1358
                    g := g previousGroup.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1359
                ]
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1360
            ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1361
        ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1362
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1363
        [aBlock value] whileTrue:[ 
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1364
            LastActiveGroup := self.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1365
            LastActiveProcess := thisProcess.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1366
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1367
            (views isNil and:[topViews isNil]) ifTrue:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1368
                myProcess notNil ifTrue:[
4153
a6d682af620b *** empty log message ***
werner
parents: 4152
diff changeset
  1369
                    self shutDownProcess.
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1370
                    "not reached - there is no life after death"
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1371
                ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1372
                "
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1373
                 this is the end of a modal loop
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1374
                 (not having a private process ...)
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1375
                "
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1376
                ^ self
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1377
            ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1378
4408
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1379
            (graphicsDevice notNil and:[graphicsDevice isOpen not]) ifTrue:[
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1380
                self closeDownViews.
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1381
                ^ self.
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1382
            ].
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1383
5520
2711e254f54c changed:
Stefan Vogel <sv@exept.de>
parents: 5518
diff changeset
  1384
            signalsToHandle handle:[:ex |
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1385
                |theSig|
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1386
6043
3c78815733e5 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6023
diff changeset
  1387
                theSig := ex creator.
4335
b4bd7fae96bb AbortOperationRequest is now a subclass (and child-Exception) of.
Stefan Vogel <sv@exept.de>
parents: 4329
diff changeset
  1388
                (AbortAllOperationRequest accepts:theSig) ifTrue:[
5520
2711e254f54c changed:
Stefan Vogel <sv@exept.de>
parents: 5518
diff changeset
  1389
                    "on AbortAllOperationRequest or AbortOperationRequest, 
2711e254f54c changed:
Stefan Vogel <sv@exept.de>
parents: 5518
diff changeset
  1390
                     stay in loop"
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1391
                    ex return
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1392
                ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1393
                theSig == LeaveSignal ifTrue:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1394
                    "/
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1395
                    "/ on leave, exit the event loop
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1396
                    "/
3737
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
  1397
                    self closeDownViews.    
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1398
                    ^ self
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1399
                ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1400
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1401
                "/ ActivityNotification
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1402
                "/
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1403
                "/ if I am a modal-group, let it be handled
4183
b923650b87cf from claus:
james
parents: 4182
diff changeset
  1404
                "/ by the outer main-groups handler (but only if there is one)
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1405
                "/ otherwise show the activityMessage and continue.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1406
                "/
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1407
                isModal ifTrue:[
5520
2711e254f54c changed:
Stefan Vogel <sv@exept.de>
parents: 5518
diff changeset
  1408
                    (theSig isHandledIn:ex handlerContext sender) ifTrue:[
2711e254f54c changed:
Stefan Vogel <sv@exept.de>
parents: 5518
diff changeset
  1409
                        ex reject.
2711e254f54c changed:
Stefan Vogel <sv@exept.de>
parents: 5518
diff changeset
  1410
                        "never reached"
4183
b923650b87cf from claus:
james
parents: 4182
diff changeset
  1411
                    ].
5520
2711e254f54c changed:
Stefan Vogel <sv@exept.de>
parents: 5518
diff changeset
  1412
                ] ifFalse:[
2711e254f54c changed:
Stefan Vogel <sv@exept.de>
parents: 5518
diff changeset
  1413
                    self showActivity:ex messageText.
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1414
                ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1415
                ex proceedWith:nil.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1416
            ] do:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1417
                |dev gotSema mainView|
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1418
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1419
                (mainGroup notNil or:[mySensor hasEvents not]) ifTrue:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1420
                    waitSema isNil ifTrue:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1421
                        "/ oops - how can this happen ....
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1422
                        ^ self.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1423
                    ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1424
                    "/ Flush device output before going to sleep. 
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1425
                    "/ This may produce more events to arrive.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1426
                    "/ Q: is this still needed (see suspendAction) ?
4408
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1427
                    Error 
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1428
                        handle:[:ex |
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1429
                            (graphicsDevice notNil and:[graphicsDevice isOpen not]) ifTrue:[
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1430
                                'WindowGroup [warning]: Error in flush - closing views' errorPrintCR.
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1431
                                self closeDownViews.
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1432
                                ^ self.
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1433
                            ].
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1434
                            ex reject.
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1435
                        ] 
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1436
                        do:[
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1437
                            self graphicsDevice flush.
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  1438
                        ].
5569
25b945e9c1f5 changed: #eventLoopWhile:onLeave:
Claus Gittinger <cg@exept.de>
parents: 5520
diff changeset
  1439
25b945e9c1f5 changed: #eventLoopWhile:onLeave:
Claus Gittinger <cg@exept.de>
parents: 5520
diff changeset
  1440
                    self isModal ifTrue:[
25b945e9c1f5 changed: #eventLoopWhile:onLeave:
Claus Gittinger <cg@exept.de>
parents: 5520
diff changeset
  1441
                        thisProcess setStateTo:#modalEventWait if:#active.
25b945e9c1f5 changed: #eventLoopWhile:onLeave:
Claus Gittinger <cg@exept.de>
parents: 5520
diff changeset
  1442
                    ] ifFalse:[
25b945e9c1f5 changed: #eventLoopWhile:onLeave:
Claus Gittinger <cg@exept.de>
parents: 5520
diff changeset
  1443
                        thisProcess setStateTo:#eventWait if:#active.
25b945e9c1f5 changed: #eventLoopWhile:onLeave:
Claus Gittinger <cg@exept.de>
parents: 5520
diff changeset
  1444
                    ].
3557
2eddc9324df9 comment
Claus Gittinger <cg@exept.de>
parents: 3552
diff changeset
  1445
2eddc9324df9 comment
Claus Gittinger <cg@exept.de>
parents: 3552
diff changeset
  1446
                    "/ now, wait for an event to arrive
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1447
                    gotSema := waitSema wait.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1448
                ] ifFalse:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1449
                    gotSema := mySema
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1450
                ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1451
                LastActiveGroup := self.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1452
                LastActiveProcess := thisProcess.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1453
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1454
                "/ some bad guy ;-) could have closed all down
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1455
                "/ in the meanwhile ...
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1456
                mySensor notNil ifTrue:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1457
                    gotSema == mySema ifTrue:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1458
                        "/
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1459
                        "/ an event for me 
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1460
                        "/
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1461
                        self processEventsWithModalGroup:nil
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1462
                    ] ifFalse:[
5364
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1463
                        "/
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1464
                        "/ modal and an event for my mainGroup or one of the groups in-between
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1465
                        "/ (we arrive here after we woke up on maingroup sensor eventSemaphore)
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1466
                        "/
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1467
                        groupForSema notNil ifTrue:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1468
                            g := groupForSema at:gotSema ifAbsent:nil.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1469
                            g := g ? mainGroup.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1470
                        ] ifFalse:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1471
                            g := mainGroup
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1472
                        ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1473
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1474
                        g topViews notNil ifTrue:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1475
                            mainView := g topViews first
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1476
                        ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1477
                        mainView notNil ifTrue:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1478
                            "/ if anything happened to the mainGroup
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1479
                            "/ bring my own topView back to the front
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1480
                            "/ This keeps modalBoxes visible
4847
14c2810c8822 suppress reaiseDeiconified of the modal topview, if
Stefan Vogel <sv@exept.de>
parents: 4846
diff changeset
  1481
                            "/ (not needed with X, where the windowManager does it for us)
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1482
                            (g sensor hasConfigureEventFor:mainView) ifTrue:[
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1483
                                topViews size > 0 ifTrue:[
4847
14c2810c8822 suppress reaiseDeiconified of the modal topview, if
Stefan Vogel <sv@exept.de>
parents: 4846
diff changeset
  1484
                                    topViews first shown ifTrue:[
4846
9a6f29cf47bf suppress reaiseDeiconified of the modal topview, if
Stefan Vogel <sv@exept.de>
parents: 4801
diff changeset
  1485
                                        topViews first raiseDeiconified
9a6f29cf47bf suppress reaiseDeiconified of the modal topview, if
Stefan Vogel <sv@exept.de>
parents: 4801
diff changeset
  1486
                                    ].
3348
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1487
                                ]
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1488
                            ]
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1489
                        ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1490
                        g processEventsWithModalGroup:self.
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1491
                    ]
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1492
                ]
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1493
            ].
7049f1baa6de remember focus and grab, when starting a modal loop;
ca
parents: 3341
diff changeset
  1494
        ].
5285
6dfae0d329e6 cleanup scheme fixed
ca
parents: 5276
diff changeset
  1495
    ] ensure:cleanupActions
313
2b776b2a26c5 stefans changes
Claus Gittinger <cg@exept.de>
parents: 302
diff changeset
  1496
4571
4ccda5e9bb8f activityNotification - only pass message (not description)
Claus Gittinger <cg@exept.de>
parents: 4536
diff changeset
  1497
    "Modified: / 14-12-1995 / 11:12:24 / stefan"
5569
25b945e9c1f5 changed: #eventLoopWhile:onLeave:
Claus Gittinger <cg@exept.de>
parents: 5520
diff changeset
  1498
    "Modified: / 06-07-2010 / 11:47:27 / cg"
3373
3585120d4d58 only eat a modal Escape-key event, if the modalView did unmap
Claus Gittinger <cg@exept.de>
parents: 3372
diff changeset
  1499
!
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1500
3511
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1501
executePostEventHooksFor:anEvent
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1502
    postEventHook notNil ifTrue:[
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1503
        postEventHook processEvent:anEvent
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1504
    ].
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1505
    postEventHooks notNil ifTrue:[
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1506
        postEventHooks do:[:eachHook |
3786
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1507
            eachHook isBlock ifTrue:[
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1508
                eachHook value:anEvent
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1509
            ] ifFalse:[
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1510
                eachHook processEvent:anEvent
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1511
            ]
3511
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1512
        ]
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1513
    ].
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1514
!
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1515
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1516
executePreEventHooksFor:anEvent
5003
59c3b1d86175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4973
diff changeset
  1517
    "return true, if the event was eaten"
59c3b1d86175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4973
diff changeset
  1518
3786
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1519
    traceEvents == true ifTrue:[
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1520
        anEvent displayString infoPrintCR.
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1521
    ].
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1522
3511
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1523
    preEventHook notNil ifTrue:[
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1524
        (preEventHook processEvent:anEvent) ifTrue:[ ^ true ].
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1525
    ].
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1526
    preEventHooks notNil ifTrue:[
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1527
        preEventHooks do:[:eachHook |
5584
57e0a4a74d0e changed: #executePreEventHooksFor:
Claus Gittinger <cg@exept.de>
parents: 5569
diff changeset
  1528
            "/ can only be nil if changed, while enumerating...
57e0a4a74d0e changed: #executePreEventHooksFor:
Claus Gittinger <cg@exept.de>
parents: 5569
diff changeset
  1529
            eachHook notNil ifTrue:[
57e0a4a74d0e changed: #executePreEventHooksFor:
Claus Gittinger <cg@exept.de>
parents: 5569
diff changeset
  1530
                eachHook isBlock ifTrue:[
57e0a4a74d0e changed: #executePreEventHooksFor:
Claus Gittinger <cg@exept.de>
parents: 5569
diff changeset
  1531
                    (eachHook value:anEvent) ifTrue:[ ^ true ].
57e0a4a74d0e changed: #executePreEventHooksFor:
Claus Gittinger <cg@exept.de>
parents: 5569
diff changeset
  1532
                ] ifFalse:[
57e0a4a74d0e changed: #executePreEventHooksFor:
Claus Gittinger <cg@exept.de>
parents: 5569
diff changeset
  1533
                    (eachHook processEvent:anEvent) ifTrue:[ ^ true ].
57e0a4a74d0e changed: #executePreEventHooksFor:
Claus Gittinger <cg@exept.de>
parents: 5569
diff changeset
  1534
                ]
3786
8e238ec303d8 obsoleted preEventHook and postEventHook;
Claus Gittinger <cg@exept.de>
parents: 3780
diff changeset
  1535
            ]
3511
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1536
        ]
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1537
    ].
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1538
    ^ false
5584
57e0a4a74d0e changed: #executePreEventHooksFor:
Claus Gittinger <cg@exept.de>
parents: 5569
diff changeset
  1539
57e0a4a74d0e changed: #executePreEventHooksFor:
Claus Gittinger <cg@exept.de>
parents: 5569
diff changeset
  1540
    "Modified: / 28-07-2010 / 03:34:33 / cg"
3511
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1541
!
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1542
3736
2be34b98b33a add lastEvent query
penk
parents: 3695
diff changeset
  1543
lastEvent
2be34b98b33a add lastEvent query
penk
parents: 3695
diff changeset
  1544
    ^ LastEventQuerySignal query
2be34b98b33a add lastEvent query
penk
parents: 3695
diff changeset
  1545
!
2be34b98b33a add lastEvent query
penk
parents: 3695
diff changeset
  1546
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1547
leaveEventLoop
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1548
    "immediately leave the event loop, returning way back.
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1549
     This can be used to leave (and closedown) a modal group.
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1550
     (for normal views, this does not make sense)"
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1551
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1552
    ^ LeaveSignal raise
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1553
!
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  1554
3737
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
  1555
leaveModalLoop
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
  1556
    "if the receiver has a modal window open (i.e. is in a modalLoop),
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
  1557
     force him to leave it and proceed as usual.
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
  1558
     Be warned: this is not a regular (i.e. OK/ESCAPE) the modal box closing."
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
  1559
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
  1560
    self isInModalLoop ifTrue:[
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
  1561
        LeaveSignal isHandled ifTrue:[
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
  1562
            self process interruptWith:[LeaveSignal raise]
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
  1563
        ]
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
  1564
    ].
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
  1565
!
52afcf068624 added #leaveModalLoop
Claus Gittinger <cg@exept.de>
parents: 3736
diff changeset
  1566
103
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
  1567
processEvents
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
  1568
    "process events from either the damage- or user input queues.
6156d12a414d *** empty log message ***
claus
parents: 90
diff changeset
  1569
     Abort is assumed to be handled elsewhere."
19
74683e998f36 *** empty log message ***
claus
parents: 17
diff changeset
  1570
1419
a40a4f3ad589 while blocked by a modal view, forward key events to
Claus Gittinger <cg@exept.de>
parents: 1411
diff changeset
  1571
    self processEventsWithModalGroup:nil
a40a4f3ad589 while blocked by a modal view, forward key events to
Claus Gittinger <cg@exept.de>
parents: 1411
diff changeset
  1572
a40a4f3ad589 while blocked by a modal view, forward key events to
Claus Gittinger <cg@exept.de>
parents: 1411
diff changeset
  1573
    "Modified: 5.3.1997 / 11:33:51 / cg"
1328
99ffa52743c5 in modalGroup: only ignore key- and buttonEvents;
ca
parents: 1317
diff changeset
  1574
!
99ffa52743c5 in modalGroup: only ignore key- and buttonEvents;
ca
parents: 1317
diff changeset
  1575
1419
a40a4f3ad589 while blocked by a modal view, forward key events to
Claus Gittinger <cg@exept.de>
parents: 1411
diff changeset
  1576
processEventsWithModalGroup:modalGroup
1328
99ffa52743c5 in modalGroup: only ignore key- and buttonEvents;
ca
parents: 1317
diff changeset
  1577
    "process events from either the damage- or user input queues.
5364
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1578
     Abort is assumed to be handled elsewhere.
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1579
     If modalGroup is non-nil, this is actually called from a modal-groups eventloop,
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1580
     in order for the underlying mainGroup (me) to handle its redraw events.
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1581
     In this case, ignore any user input events."
1328
99ffa52743c5 in modalGroup: only ignore key- and buttonEvents;
ca
parents: 1317
diff changeset
  1582
513
47b0f4bf4d89 use a single handler for handled signals
Claus Gittinger <cg@exept.de>
parents: 512
diff changeset
  1583
    <resource: #keyboard (#Escape )>
496
71ecf6bfdff2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 429
diff changeset
  1584
3652
9cdfdb903a20 Remove unused method vars
Stefan Vogel <sv@exept.de>
parents: 3651
diff changeset
  1585
    |event ignore focus firstTop evView
9cdfdb903a20 Remove unused method vars
Stefan Vogel <sv@exept.de>
parents: 3651
diff changeset
  1586
     modalTops modalTop modalDelegate keyboardProcessor
3681
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1587
     busyHookBlock busyHookCalled top evReceiver|
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
  1588
72
3e84121988c3 *** empty log message ***
claus
parents: 65
diff changeset
  1589
    self processExposeEvents.
180
claus
parents: 172
diff changeset
  1590
3279
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1591
    [
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1592
        LastEventQuerySignal handle:[:ex |
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1593
            ex proceedWith:event
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1594
        ] do:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1595
            [mySensor notNil
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1596
             and:[(event := mySensor nextEvent) notNil]] whileTrue:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1597
                ignore := false.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1598
                focus := focusView.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1599
                modalDelegate := false.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1600
                modalTop := nil.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1601
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1602
                modalGroup notNil ifTrue:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1603
                    "/ an incoming event for a masterView, 
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1604
                    "/ while being blocked by some other modalView.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1605
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1606
                    modalTops := modalGroup topViews.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1607
                    modalTops size > 0 ifTrue:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1608
                        modalTop := modalTops first.
3096
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1609
                    ].
3279
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1610
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1611
                    event isKeyEvent ifTrue:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1612
                        "/ forward keyboard events to my modal
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1613
                        "/ groups first topView ...
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1614
                        modalTop notNil ifTrue:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1615
                            focus := modalTop.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1616
                            modalDelegate := true.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1617
                        ].
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1618
                        modalGroup focusView notNil ifTrue:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1619
                            focus := modalGroup focusView
5364
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1620
                        ].
3279
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1621
                    ] ifFalse:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1622
                        event isFocusEvent ifTrue:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1623
                            event isFocusInEvent ifTrue:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1624
                                "/ move focus over to modalBox
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1625
                                modalTop notNil ifTrue:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1626
                                    modalTop getKeyboardFocus.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1627
                                    "/ focusIn is forwarded to the modalGroup
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1628
                                    "/ (since keyboard is forwarded)
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1629
                                    event view:modalTop.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1630
                                    focus := modalTop.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1631
                                ]
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1632
                            ] ifFalse:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1633
                                "/ focusOut goes to both the modal and
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1634
                                "/ the blocked main-group
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1635
                                "/ (actually, only the very first focusOut
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1636
                                "/  is needed in the mainGroup (to turn off the cursor)
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1637
                                "/  all others are only needed in the modalGroup)
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1638
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1639
    "/                            syntheticEvent := event copy.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1640
    "/                            syntheticEvent view:modalTop.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1641
    "/                            LastEventQuerySignal handle:[:ex |
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1642
    "/                                ex proceedWith:syntheticEvent
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1643
    "/                            ] do:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1644
    "/                                syntheticEvent sendEventWithFocusOn:nil.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1645
    "/                            ].
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1646
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1647
                                "/ event view:modalTop.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1648
                            ].
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1649
                            modalDelegate := true.
3096
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1650
                        ] ifFalse:[
3279
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1651
                            event isPointerLeaveEvent ifTrue:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1652
                            ] ifFalse:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1653
                                event isUserEvent ifTrue:[
3455
b519ff519547 button press in a view while a modal dialog is active:
Claus Gittinger <cg@exept.de>
parents: 3442
diff changeset
  1654
                                    ignore := true.
b519ff519547 button press in a view while a modal dialog is active:
Claus Gittinger <cg@exept.de>
parents: 3442
diff changeset
  1655
b519ff519547 button press in a view while a modal dialog is active:
Claus Gittinger <cg@exept.de>
parents: 3442
diff changeset
  1656
                                    event isButtonPressEvent ifTrue:[
b519ff519547 button press in a view while a modal dialog is active:
Claus Gittinger <cg@exept.de>
parents: 3442
diff changeset
  1657
                                        "/ raise the modalTop and beep 
b519ff519547 button press in a view while a modal dialog is active:
Claus Gittinger <cg@exept.de>
parents: 3442
diff changeset
  1658
                                        event view device beep.
b519ff519547 button press in a view while a modal dialog is active:
Claus Gittinger <cg@exept.de>
parents: 3442
diff changeset
  1659
                                        modalTop notNil ifTrue:[ modalTop raise ].
b519ff519547 button press in a view while a modal dialog is active:
Claus Gittinger <cg@exept.de>
parents: 3442
diff changeset
  1660
                                    ]
3279
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1661
                                ]
3096
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1662
                            ]
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1663
                        ]
5364
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1664
                    ].
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1665
                    "/ also update the slave-sensor's modifier state from the master-sensor's
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1666
                    "/ state. This is needed for a popUpView to see the correct shift-, ctrl- and alt states
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1667
                    "/ in its own sensor.
6513
a501f2a7fcc5 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6466
diff changeset
  1668
a501f2a7fcc5 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6466
diff changeset
  1669
                    "/ cg: disabled 15-jun-2014
a501f2a7fcc5 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6466
diff changeset
  1670
                    "/ mhmh - something seems to have changed on a lower level,
a501f2a7fcc5 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6466
diff changeset
  1671
                    "/ so now the modal sensor already has the correct sensor state
a501f2a7fcc5 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6466
diff changeset
  1672
                    "/ (as opposed to previous versions, where this was not true).
a501f2a7fcc5 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6466
diff changeset
  1673
                    "/ Now, enabling the following line leads to a confirmation dialog to NOT
a501f2a7fcc5 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6466
diff changeset
  1674
                    "/ behave correctly w.r.t. Shift-CursroRight.
a501f2a7fcc5 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6466
diff changeset
  1675
                    "/ I wonder, what is responsible for that fixing side effect... (sigh)
a501f2a7fcc5 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6466
diff changeset
  1676
                    "/ modalGroup sensor updateModifierStatesFrom:mySensor
3279
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1677
                ].
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1678
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1679
                ignore ifFalse:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1680
                    (views notNil or:[topViews notNil]) ifTrue:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1681
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1682
                        "/ give eventRecorders, catchers etc. 
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1683
                        "/ a chance to eat or modify that event
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1684
3777
c09c9ef205f4 also check for masterGroups preEventHooks
penk
parents: 3751
diff changeset
  1685
                        modalGroup notNil ifTrue:[
c09c9ef205f4 also check for masterGroups preEventHooks
penk
parents: 3751
diff changeset
  1686
                            ignore := (modalGroup executePreEventHooksFor:event).
c09c9ef205f4 also check for masterGroups preEventHooks
penk
parents: 3751
diff changeset
  1687
                        ] ifFalse:[
c09c9ef205f4 also check for masterGroups preEventHooks
penk
parents: 3751
diff changeset
  1688
                            ignore := false
c09c9ef205f4 also check for masterGroups preEventHooks
penk
parents: 3751
diff changeset
  1689
                        ].
c09c9ef205f4 also check for masterGroups preEventHooks
penk
parents: 3751
diff changeset
  1690
                        ignore ifFalse:[
c09c9ef205f4 also check for masterGroups preEventHooks
penk
parents: 3751
diff changeset
  1691
                            ignore := (self executePreEventHooksFor:event).
4475
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1692
                            ignore ifFalse:[
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1693
                                evView := event view.
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1694
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1695
                                (event isKeyEvent 
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1696
                                and:[(keyboardProcessor := (modalTop ? evView topView) keyboardProcessor) notNil]) ifTrue:[
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1697
                                    ignore := keyboardProcessor processEvent:event forModalView:modalTop
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1698
                                ].
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1699
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1700
                                ignore ifFalse:[
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1701
                                    "/ event handling below will vanish ...
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1702
                                    "/ (keyboardProcessor will do it eventually)
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1703
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1704
                                    event isKeyPressEvent ifTrue:[
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1705
                                        event key == #Escape ifTrue:[
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1706
                                            modalDelegate ifTrue:[
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1707
                                                top := modalTop.
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1708
                                            ] ifFalse:[
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1709
                                                (isModal and:[topViews size > 0]) ifTrue:[
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1710
                                                    top := topViews first.
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1711
                                                ]
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1712
                                            ].
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1713
                                            top notNil ifTrue:[
5364
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1714
                                                "/ a popUpView does it himself (only closing one submenu)
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1715
                                                (top isPopUpView not
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1716
                                                or:[ UserPreferences current closePopUpMenuChainOnEscape ]) ifTrue:[
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1717
                                                    top escapeIsCancel ifTrue:[
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1718
                                                        top closeCancel.
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1719
                                                        "/ top hideRequest. 
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1720
                                                        top realized ifFalse:[ ignore := true ].
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  1721
                                                    ]
4475
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1722
                                                ]
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1723
                                            ].
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1724
                                        ]
3279
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1725
                                    ] ifFalse:[
4475
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1726
                                        "/
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1727
                                        "/ keep track of which view has the pointer
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1728
                                        "/
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1729
                                        event isPointerEnterEvent ifTrue:[
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1730
                                            pointerView := evView
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1731
                                        ] ifFalse:[
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1732
                                            event isPointerLeaveEvent ifTrue:[
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1733
                                                pointerView := nil
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1734
                                            ]
3096
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1735
                                        ]
3440
33d132092b22 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3438
diff changeset
  1736
                                    ].
4475
f94446a203a0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4474
diff changeset
  1737
                                ].
3279
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1738
                            ].
3349
ba099abb6b5c do not pass an Escape, which closes a modalBox
ca
parents: 3348
diff changeset
  1739
                        ].
ba099abb6b5c do not pass an Escape, which closes a modalBox
ca
parents: 3348
diff changeset
  1740
ba099abb6b5c do not pass an Escape, which closes a modalBox
ca
parents: 3348
diff changeset
  1741
                        ignore ifFalse:[
3279
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1742
                            "/
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1743
                            "/ buttonPress events turn off explicit focus, and reverts
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1744
                            "/ to implicit focus control
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1745
                            "/ This used to be done for every click -
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1746
                            "/ but behaved ugly if clicking in a scrollbar ...
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1747
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1748
                            "/ XXX: move to dispatchEvent
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1749
                            event isButtonPressEvent ifTrue:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1750
                                (evView wantsFocusWithButtonPress) ifTrue:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1751
                                    "/ cannot use 'evView requestFocus' here,
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1752
                                    "/ since we want to enforce it without giving the
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1753
                                    "/ view a chance to circumvent this.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1754
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1755
                                    "/ evView requestFocus.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1756
                                    self focusView:evView.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1757
                                ].
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1758
                            ].
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1759
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1760
                            LastActiveGroup := self.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1761
                            LastActiveProcess := Processor activeProcess.
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1762
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1763
                            (busyHook notNil and:[busyHookBlock isNil]) ifTrue:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1764
                                (event isKeyEvent or:[event isButtonPressEvent]) ifTrue:[
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1765
                                    "/ start a timeout action - to invoke the busyHook after some time
3298
88ac22e6a249 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
  1766
                                    busyHookCalled := false.
3281
95e6d0e98f92 care for modal dialogs in automatic busy cursor handling
Claus Gittinger <cg@exept.de>
parents: 3280
diff changeset
  1767
                                    busyHookBlock := [ 
95e6d0e98f92 care for modal dialogs in automatic busy cursor handling
Claus Gittinger <cg@exept.de>
parents: 3280
diff changeset
  1768
                                                        (inModalLoop ~~ true and:[busyHookCalled not]) ifTrue:[ 
95e6d0e98f92 care for modal dialogs in automatic busy cursor handling
Claus Gittinger <cg@exept.de>
parents: 3280
diff changeset
  1769
                                                            busyHook value:true. 
95e6d0e98f92 care for modal dialogs in automatic busy cursor handling
Claus Gittinger <cg@exept.de>
parents: 3280
diff changeset
  1770
                                                            busyHookCalled := true 
95e6d0e98f92 care for modal dialogs in automatic busy cursor handling
Claus Gittinger <cg@exept.de>
parents: 3280
diff changeset
  1771
                                                        ] 
95e6d0e98f92 care for modal dialogs in automatic busy cursor handling
Claus Gittinger <cg@exept.de>
parents: 3280
diff changeset
  1772
                                                     ].
4536
cab69dafe1f2 busyHook runs under timeoutHandlerProcess
ca
parents: 4519
diff changeset
  1773
                                    Processor 
cab69dafe1f2 busyHook runs under timeoutHandlerProcess
ca
parents: 4519
diff changeset
  1774
                                        addTimedBlock:busyHookBlock 
cab69dafe1f2 busyHook runs under timeoutHandlerProcess
ca
parents: 4519
diff changeset
  1775
                                        for:Processor timeoutHandlerProcess
cab69dafe1f2 busyHook runs under timeoutHandlerProcess
ca
parents: 4519
diff changeset
  1776
                                        afterMilliseconds:(busyHookTimeout ? BusyHookTime ? 150).
3279
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1777
                                ].
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1778
                            ].
3681
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1779
                            event isMessageSendEvent ifTrue:[
6023
4b20fb242062 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 5948
diff changeset
  1780
                                "/ a synthetic event (delayed message)
4b20fb242062 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 5948
diff changeset
  1781
"/ cg: seems to not be a good idea (see modalLoopStarts):
4b20fb242062 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 5948
diff changeset
  1782
"/ if in a modal-loop, do not process now, but repush onto the queue
4b20fb242062 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 5948
diff changeset
  1783
"/                                modalGroup notNil ifTrue:[
4b20fb242062 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 5948
diff changeset
  1784
"/                                    mySensor pushEvent:event
4b20fb242062 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 5948
diff changeset
  1785
"/                                ] ifFalse:[
4b20fb242062 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 5948
diff changeset
  1786
                                    event value 
4b20fb242062 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 5948
diff changeset
  1787
"/                                ]
3279
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1788
                            ] ifFalse:[
3681
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1789
                                "
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1790
                                 if there is no view information in the event,
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1791
                                 it must have been sent directly to the sensor.
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1792
                                 Send it to the first topView.
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1793
                                "
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1794
                                (evReceiver := evView) isNil ifTrue:[
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1795
                                    (firstTop := topViews first) notNil ifTrue:[
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1796
                                        event isApplicationEvent ifTrue:[
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1797
                                            evReceiver := firstTop application ? firstTop
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1798
                                        ] ifFalse:[
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1799
                                            evReceiver := firstTop.
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1800
                                        ]. 
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1801
                                    ]
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1802
                                ].
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1803
                                evReceiver isNil ifTrue:[
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1804
                                    ('WindowGroup [warning]: no receiver to dispatch ' , event type asString , '-event to. Ignored.') infoPrintCR.
3298
88ac22e6a249 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
  1805
                                ] ifFalse:[
3681
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1806
                                    evReceiver dispatchEvent:event withFocusOn:focus delegate:true
358b0a956887 preps for applicationEvents;
ca
parents: 3657
diff changeset
  1807
                                ].
3096
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1808
                            ].
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1809
                        ].
2494
792881c4d938 slight change in keyboardProcessorHandling
Claus Gittinger <cg@exept.de>
parents: 2493
diff changeset
  1810
3279
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1811
                        "/ give eventRecorders, postProcessors 
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1812
                        "/ a chance to see that event
3511
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1813
                        self executePostEventHooksFor:event
3279
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1814
                    ]
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1815
                ].
3096
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1816
            ].
3279
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1817
        ]
3604
e32b5044a59e #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 3557
diff changeset
  1818
    ] ensure:[
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1819
        busyHookBlock notNil ifTrue:[
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1820
            Processor removeTimedBlock:busyHookBlock.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1821
            busyHookBlock := nil.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1822
            busyHookCalled ifTrue:[
3281
95e6d0e98f92 care for modal dialogs in automatic busy cursor handling
Claus Gittinger <cg@exept.de>
parents: 3280
diff changeset
  1823
                busyHook value:false.
95e6d0e98f92 care for modal dialogs in automatic busy cursor handling
Claus Gittinger <cg@exept.de>
parents: 3280
diff changeset
  1824
                busyHookCalled := false.
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1825
            ]
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1826
        ].
3279
9d7a9a94bec0 unwind-protect busyBlock evaluation
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
  1827
    ].
357
3655807445b7 keep track of pointerView, for implizit focus tracking
Claus Gittinger <cg@exept.de>
parents: 330
diff changeset
  1828
2126
1f108c76dfdb moved event dispatching code to view (where it belongs)
Claus Gittinger <cg@exept.de>
parents: 2116
diff changeset
  1829
    "Created: / 5.3.1997 / 11:33:11 / cg"
3373
3585120d4d58 only eat a modal Escape-key event, if the modalView did unmap
Claus Gittinger <cg@exept.de>
parents: 3372
diff changeset
  1830
    "Modified: / 4.8.1998 / 18:18:55 / cg"
3585120d4d58 only eat a modal Escape-key event, if the modalView did unmap
Claus Gittinger <cg@exept.de>
parents: 3372
diff changeset
  1831
!
48
9e584329a6da last version with separate queue
claus
parents: 46
diff changeset
  1832
9e584329a6da last version with separate queue
claus
parents: 46
diff changeset
  1833
processExposeEvents
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1834
    "process only expose events from the damage queue.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1835
     This also handles resize, mapped and unmap events."
48
9e584329a6da last version with separate queue
claus
parents: 46
diff changeset
  1836
2407
bff2063d865a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2363
diff changeset
  1837
    self processExposeEventsFor:nil
bff2063d865a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2363
diff changeset
  1838
bff2063d865a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2363
diff changeset
  1839
    "Modified: / 3.12.1998 / 14:01:57 / cg"
bff2063d865a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2363
diff changeset
  1840
!
bff2063d865a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2363
diff changeset
  1841
bff2063d865a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2363
diff changeset
  1842
processExposeEventsFor:aViewOrNil
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1843
    "process only expose events from the damage queue.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1844
     This also handles resize, mapped and unmap events."
2407
bff2063d865a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2363
diff changeset
  1845
3652
9cdfdb903a20 Remove unused method vars
Stefan Vogel <sv@exept.de>
parents: 3651
diff changeset
  1846
    |event view sensor thisProcess|
109
ba47d9d6bda8 *** empty log message ***
claus
parents: 107
diff changeset
  1847
ba47d9d6bda8 *** empty log message ***
claus
parents: 107
diff changeset
  1848
    (sensor := mySensor) isNil ifTrue:[^ self].
2154
4b2a478e59b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
  1849
    (sensor damageCount ~~ 0) ifTrue:[
3096
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1850
        thisProcess := Processor activeProcess.
180
claus
parents: 172
diff changeset
  1851
3096
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1852
        [(event := sensor nextDamageEventFor:aViewOrNil) notNil] whileTrue:[
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1853
            LastActiveGroup := self.
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1854
            LastActiveProcess := thisProcess.
180
claus
parents: 172
diff changeset
  1855
3096
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1856
            (views notNil or:[topViews notNil]) ifTrue:[
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1857
                view := event view.
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1858
                (aViewOrNil isNil or:[aViewOrNil == view]) ifTrue:[
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1859
                    LastEventQuerySignal handle:[:ex |
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1860
                        ex proceedWith:event
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1861
                    ] do:[
3511
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1862
                        (self executePreEventHooksFor:event) ifFalse:[
3096
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1863
                            "/
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1864
                            "/ if the view is no longer shown (iconified or closed),
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1865
                            "/ this is a leftover event and ignored.
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1866
                            "/
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1867
                            "/ could this ever be a non-damage ?
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1868
                            "/
4152
2d74d85b765d *** empty log message ***
werner
parents: 4141
diff changeset
  1869
                            view notNil ifTrue:[
2d74d85b765d *** empty log message ***
werner
parents: 4141
diff changeset
  1870
                                (view shown or:[event isDamage not]) ifTrue:[
2d74d85b765d *** empty log message ***
werner
parents: 4141
diff changeset
  1871
                                    LastActiveGroup := self.
2d74d85b765d *** empty log message ***
werner
parents: 4141
diff changeset
  1872
                                    LastActiveProcess := thisProcess.
2d74d85b765d *** empty log message ***
werner
parents: 4141
diff changeset
  1873
2d74d85b765d *** empty log message ***
werner
parents: 4141
diff changeset
  1874
                                    view dispatchEvent:event withFocusOn:nil delegate:true. 
2d74d85b765d *** empty log message ***
werner
parents: 4141
diff changeset
  1875
                                ].
3096
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1876
                            ].
3511
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1877
                        ].
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1878
                        self executePostEventHooksFor:event.
3096
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1879
                    ].
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1880
                ]
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1881
            ]
6ee19dabbba1 always use the same dispatch methods
ca
parents: 3077
diff changeset
  1882
        ]
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  1883
    ]
1157
ffcb958058ad checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  1884
2407
bff2063d865a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2363
diff changeset
  1885
    "Created: / 3.12.1998 / 14:01:39 / cg"
2440
a0002dc34d0a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2438
diff changeset
  1886
    "Modified: / 5.2.1999 / 22:26:44 / cg"
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
  1887
!
bc3949e465a0 Initial revision
claus
parents:
diff changeset
  1888
1806
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1889
processRealExposeEvents
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1890
    "process only expose events from the damage queue
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1891
     (for any of my views).
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1892
     This only handles true expose events - leaving map, unmap etc. in the queue.
1806
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1893
     This is required after a scroll operation,
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1894
     to wait for either a noExpose or a real expose."
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1895
2093
955072f08466 checkin from browser
ca
parents: 2089
diff changeset
  1896
    self processRealExposeEventsFor:nil
955072f08466 checkin from browser
ca
parents: 2089
diff changeset
  1897
!
955072f08466 checkin from browser
ca
parents: 2089
diff changeset
  1898
955072f08466 checkin from browser
ca
parents: 2089
diff changeset
  1899
processRealExposeEventsFor:someViewOrNil
955072f08466 checkin from browser
ca
parents: 2089
diff changeset
  1900
    "process only expose events from the damage queue
955072f08466 checkin from browser
ca
parents: 2089
diff changeset
  1901
     (for any of my views if the arg is nil).
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1902
     This only handles true expose events - leaving map, unmap etc. in the queue.
2093
955072f08466 checkin from browser
ca
parents: 2089
diff changeset
  1903
     This is required after a scroll operation,
955072f08466 checkin from browser
ca
parents: 2089
diff changeset
  1904
     to wait for either a noExpose or a real expose."
955072f08466 checkin from browser
ca
parents: 2089
diff changeset
  1905
4040
53895a8ecd71 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3887
diff changeset
  1906
    |event view sensor thisProcess|
1806
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1907
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1908
    (sensor := mySensor) isNil ifTrue:[^ self].
2086
069a179b1849 dont yield when asking for pending events.
Claus Gittinger <cg@exept.de>
parents: 2051
diff changeset
  1909
    sensor damageCount == 0 ifTrue:[^ self].
1806
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1910
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1911
    thisProcess := Processor activeProcess.
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1912
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1913
    [true] whileTrue:[
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1914
        LastActiveGroup := self.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1915
        LastActiveProcess := thisProcess.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1916
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1917
        "/ event := aView nextDamage.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1918
        event := sensor nextExposeEventFor:someViewOrNil.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1919
        event isNil ifTrue:[^ self].
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1920
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1921
        (views notNil or:[topViews notNil]) ifTrue:[
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1922
            LastEventQuerySignal handle:[:ex |
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1923
                ex proceedWith:event
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1924
            ] do:[
3511
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1925
                (self executePreEventHooksFor:event) ifFalse:[
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1926
                    view := event view.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1927
                    "/
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1928
                    "/ if the view is no longer shown (iconified or closed),
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1929
                    "/ this is a leftover event and ignored.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1930
                    "/
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1931
                    view shown ifTrue:[
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1932
                        LastActiveGroup := self.
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1933
                        LastActiveProcess := thisProcess.
4040
53895a8ecd71 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3887
diff changeset
  1934
                        view dispatchEvent:event withFocusOn:nil delegate:true. 
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1935
                    ]
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1936
                ].
3511
5c695c10caa1 multiple pre/post event hooks;
Claus Gittinger <cg@exept.de>
parents: 3486
diff changeset
  1937
                self executePostEventHooksFor:event.
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1938
            ]
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1939
        ]
1806
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1940
    ]
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1941
2086
069a179b1849 dont yield when asking for pending events.
Claus Gittinger <cg@exept.de>
parents: 2051
diff changeset
  1942
    "Created: / 2.7.1997 / 14:32:19 / cg"
069a179b1849 dont yield when asking for pending events.
Claus Gittinger <cg@exept.de>
parents: 2051
diff changeset
  1943
    "Modified: / 5.4.1998 / 11:35:43 / cg"
1806
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1944
!
16c958be35d8 fixed no-deviceID error with destroy arriving while waiting for
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1945
2444
6b4c26e1949c added #repairDamage
Claus Gittinger <cg@exept.de>
parents: 2440
diff changeset
  1946
repairDamage
6b4c26e1949c added #repairDamage
Claus Gittinger <cg@exept.de>
parents: 2440
diff changeset
  1947
    "repair all damaged areas for any of my views right now."
6b4c26e1949c added #repairDamage
Claus Gittinger <cg@exept.de>
parents: 2440
diff changeset
  1948
6b4c26e1949c added #repairDamage
Claus Gittinger <cg@exept.de>
parents: 2440
diff changeset
  1949
    self processExposeEvents
6b4c26e1949c added #repairDamage
Claus Gittinger <cg@exept.de>
parents: 2440
diff changeset
  1950
6b4c26e1949c added #repairDamage
Claus Gittinger <cg@exept.de>
parents: 2440
diff changeset
  1951
!
6b4c26e1949c added #repairDamage
Claus Gittinger <cg@exept.de>
parents: 2440
diff changeset
  1952
28
3879ff2138f1 *** empty log message ***
claus
parents: 26
diff changeset
  1953
waitForExposeFor:aView
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1954
    "wait for an expose or noExpose event for aView, then process all exposes.
500
a313e9fda9f0 ask topView for focusSequence; focusKey handling now done in TopView/Controller
Claus Gittinger <cg@exept.de>
parents: 496
diff changeset
  1955
     To be used after a scroll.
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1956
     This is very X-specific and not needed with other systems
500
a313e9fda9f0 ask topView for focusSequence; focusKey handling now done in TopView/Controller
Claus Gittinger <cg@exept.de>
parents: 496
diff changeset
  1957
     (i.e. a synthetic noExpose may be generated there)."
28
3879ff2138f1 *** empty log message ***
claus
parents: 26
diff changeset
  1958
3879ff2138f1 *** empty log message ***
claus
parents: 26
diff changeset
  1959
    mySensor waitForExposeFor:aView.
4220
03efe93c8f79 use class based exceptions
Stefan Vogel <sv@exept.de>
parents: 4183
diff changeset
  1960
    AbortOperationRequest catch:[
3278
ecdd26a9d003 added busy hook (to support automatic hour-glass cursor)
Claus Gittinger <cg@exept.de>
parents: 3276
diff changeset
  1961
        self processRealExposeEventsFor:aView
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  1962
    ]
500
a313e9fda9f0 ask topView for focusSequence; focusKey handling now done in TopView/Controller
Claus Gittinger <cg@exept.de>
parents: 496
diff changeset
  1963
1851
6a6225647696 fixes for expose-event-lost after re-map
Claus Gittinger <cg@exept.de>
parents: 1822
diff changeset
  1964
    "Modified: 6.8.1997 / 19:50:24 / cg"
11
bc3949e465a0 Initial revision
claus
parents:
diff changeset
  1965
! !
19
74683e998f36 *** empty log message ***
claus
parents: 17
diff changeset
  1966
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  1967
!WindowGroup methodsFor:'focus control'!
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  1968
2691
26dd87552563 provide a hook for a defaultFocusWidget (not yet implemented)
Claus Gittinger <cg@exept.de>
parents: 2686
diff changeset
  1969
defaultKeyboardConsumer
4180
85392e34c7a7 initial focus
Claus Gittinger <cg@exept.de>
parents: 4174
diff changeset
  1970
    |view keyboardProcessor|
85392e34c7a7 initial focus
Claus Gittinger <cg@exept.de>
parents: 4174
diff changeset
  1971
85392e34c7a7 initial focus
Claus Gittinger <cg@exept.de>
parents: 4174
diff changeset
  1972
    view := self mainView.
85392e34c7a7 initial focus
Claus Gittinger <cg@exept.de>
parents: 4174
diff changeset
  1973
    view notNil ifTrue:[
85392e34c7a7 initial focus
Claus Gittinger <cg@exept.de>
parents: 4174
diff changeset
  1974
        keyboardProcessor := view keyboardProcessor.
85392e34c7a7 initial focus
Claus Gittinger <cg@exept.de>
parents: 4174
diff changeset
  1975
        keyboardProcessor notNil ifTrue:[
85392e34c7a7 initial focus
Claus Gittinger <cg@exept.de>
parents: 4174
diff changeset
  1976
            ^ keyboardProcessor componentWithInitialFocus.
85392e34c7a7 initial focus
Claus Gittinger <cg@exept.de>
parents: 4174
diff changeset
  1977
        ]
85392e34c7a7 initial focus
Claus Gittinger <cg@exept.de>
parents: 4174
diff changeset
  1978
    ].
2691
26dd87552563 provide a hook for a defaultFocusWidget (not yet implemented)
Claus Gittinger <cg@exept.de>
parents: 2686
diff changeset
  1979
    ^ nil
26dd87552563 provide a hook for a defaultFocusWidget (not yet implemented)
Claus Gittinger <cg@exept.de>
parents: 2686
diff changeset
  1980
!
26dd87552563 provide a hook for a defaultFocusWidget (not yet implemented)
Claus Gittinger <cg@exept.de>
parents: 2686
diff changeset
  1981
2519
97a5b44f150c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2517
diff changeset
  1982
explicitFocusView
97a5b44f150c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2517
diff changeset
  1983
    "return the view which currently has the explicit (i.e. tabbed) focus"
97a5b44f150c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2517
diff changeset
  1984
97a5b44f150c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2517
diff changeset
  1985
    focusByTab == true ifFalse:[^ nil].
97a5b44f150c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2517
diff changeset
  1986
    ^ focusView
97a5b44f150c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2517
diff changeset
  1987
!
97a5b44f150c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2517
diff changeset
  1988
6466
e4eebb5bd759 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1989
focusBackToPreviousFocusView
e4eebb5bd759 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1990
    "give focus to the view who had it before"
e4eebb5bd759 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1991
e4eebb5bd759 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1992
    previousFocusView notNil ifTrue:[
e4eebb5bd759 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1993
        previousFocusView isVisible ifTrue:[
e4eebb5bd759 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1994
            self focusToView:previousFocusView
e4eebb5bd759 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1995
        ]
e4eebb5bd759 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1996
    ]
e4eebb5bd759 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1997
!
e4eebb5bd759 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1998
2517
9abe2b73c605 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2514
diff changeset
  1999
focusCameByTab
6638
953215a3f78d class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6619
diff changeset
  2000
    ^ focusByTab ? false
2517
9abe2b73c605 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2514
diff changeset
  2001
!
9abe2b73c605 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2514
diff changeset
  2002
6518
e829b772d544 class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6513
diff changeset
  2003
focusMomentaryRelease
e829b772d544 class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6513
diff changeset
  2004
    "release and reacquire focus.
6619
60873972b27f class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6564
diff changeset
  2005
     Use this to allow inputs fields with accept on lost focus
6518
e829b772d544 class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6513
diff changeset
  2006
     to accept when a button or menu item is pressed"
e829b772d544 class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6513
diff changeset
  2007
e829b772d544 class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6513
diff changeset
  2008
    |oldFocusView|
e829b772d544 class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6513
diff changeset
  2009
6564
90112191cacb class: WindowGroup
ca
parents: 6550
diff changeset
  2010
    "/ the problem was that the #focusToView: asked for canTab
90112191cacb class: WindowGroup
ca
parents: 6550
diff changeset
  2011
    "/ what should not be done during restore (might anser false).
90112191cacb class: WindowGroup
ca
parents: 6550
diff changeset
  2012
6518
e829b772d544 class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6513
diff changeset
  2013
    oldFocusView := self focusView.
6564
90112191cacb class: WindowGroup
ca
parents: 6550
diff changeset
  2014
    oldFocusView isNil ifTrue:[^ self].
90112191cacb class: WindowGroup
ca
parents: 6550
diff changeset
  2015
    
90112191cacb class: WindowGroup
ca
parents: 6550
diff changeset
  2016
    self focusView:nil.
90112191cacb class: WindowGroup
ca
parents: 6550
diff changeset
  2017
90112191cacb class: WindowGroup
ca
parents: 6550
diff changeset
  2018
    self focusView == oldFocusView ifTrue:[^ self].
90112191cacb class: WindowGroup
ca
parents: 6550
diff changeset
  2019
    (oldFocusView shown and:[oldFocusView enabled]) ifTrue:[
90112191cacb class: WindowGroup
ca
parents: 6550
diff changeset
  2020
        self focusView:oldFocusView.
90112191cacb class: WindowGroup
ca
parents: 6550
diff changeset
  2021
    ].
90112191cacb class: WindowGroup
ca
parents: 6550
diff changeset
  2022
"/    self focusToView:nil.
90112191cacb class: WindowGroup
ca
parents: 6550
diff changeset
  2023
"/    self focusToView:oldFocusView
6518
e829b772d544 class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6513
diff changeset
  2024
!
e829b772d544 class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6513
diff changeset
  2025
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2026
focusNext
6466
e4eebb5bd759 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  2027
    "give focus to next view in the focusSequence from focusView or topView
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2028
    "
4733
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2029
    |curView oldView nxtView myTopViews|
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2030
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2031
    (myTopViews := topViews) isEmptyOrNil ifTrue:[
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2032
        self setFocusView:nil.
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2033
        ^ self
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2034
    ].
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2035
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2036
    (curView := focusView) isNil ifTrue:[
4733
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2037
        myTopViews do:[:aView|
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2038
            (aView shown and:[(nxtView := aView focusNext) notNil]) ifTrue:[
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2039
                ^ self focusView:nxtView byTab:true
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2040
            ].
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2041
        ].
4733
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2042
        ^ self
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2043
    ].
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2044
    (nxtView := curView focusNext) notNil ifTrue:[
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2045
        self focusView:nxtView byTab:true.
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2046
        ^ self
949
3894d442e895 care for invisible views when stepping the focus
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
  2047
    ].
4733
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2048
    self setFocusView:nil.
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2049
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2050
    [   oldView := curView.
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2051
        (curView := curView superView) notNil
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2052
    ] whileTrue:[
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2053
        curView shown ifTrue:[
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2054
            nxtView := curView focusNextChildAfter:oldView.
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2055
            nxtView notNil ifTrue:[
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2056
                ^ self focusView:nxtView byTab:true
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2057
            ].
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2058
        ].
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2059
    ].
4733
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2060
    "/ ? should tab through the windowGroup ?
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2061
    focusView isNil ifTrue:[
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2062
        self focusNext
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2063
    ].
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2064
!
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2065
2219
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2066
focusNextFrom:aView
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2067
    "give focus to the view after aView in the focusSequence"
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2068
3486
f93691c57540 cleanup - single access to focusView
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
  2069
    self setFocusView:aView.
2219
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2070
    self focusNext
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2071
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2072
    "Created: / 4.8.1998 / 02:43:17 / cg"
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2073
!
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2074
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2075
focusPrevious
6466
e4eebb5bd759 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  2076
    "give focus to previous view in the focusSequence from focusView or topView
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2077
    "
4733
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2078
    |curView oldView nxtView subViews done|
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2079
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2080
    (curView := focusView) isNil ifTrue:[
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2081
        topViews notNil ifTrue:[
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2082
            curView := topViews detect:[:aView|aView shown] ifNone:nil.
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2083
        ]
2479
2dbe1821533b care for subWidgets when searching for the currentFocusView
Claus Gittinger <cg@exept.de>
parents: 2445
diff changeset
  2084
    ].
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2085
    curView isNil ifTrue:[^ self].
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2086
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2087
    focusView isNil ifTrue:[
4733
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2088
        subViews := curView subviewsInFocusOrder.
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2089
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2090
        subViews size ~~ 0 ifTrue:[
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2091
            curView := subViews detectLast:[:v|v shown] ifNone:nil
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2092
        ].
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2093
        curView isNil ifTrue:[
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2094
            ^ self focusToView:nil
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2095
        ].
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2096
        done := false.
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2097
4733
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2098
        [done not and:[(subViews := curView subviewsInFocusOrder) size ~~ 0]] whileTrue:[
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2099
            nxtView := subViews detectLast:[:v|v shown] ifNone:nil.
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2100
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2101
            nxtView notNil ifTrue:[curView := nxtView]
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2102
                          ifFalse:[done    := true].
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2103
        ].
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2104
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2105
        (curView canTab and:[curView enabled]) ifTrue:[
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2106
            ^ self focusView:curView byTab:true
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2107
        ].
3486
f93691c57540 cleanup - single access to focusView
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
  2108
        self setFocusView:curView.
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2109
    ] ifFalse:[
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2110
        nxtView := focusView.
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2111
        "/ check whether all superView's are shown
949
3894d442e895 care for invisible views when stepping the focus
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
  2112
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2113
        [(nxtView := nxtView superView) notNil] whileTrue:[
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2114
            nxtView shown ifFalse:[
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2115
                curView := nxtView superView
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2116
            ]
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2117
        ].
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2118
        curView ~~ focusView ifTrue:[
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2119
            curView isNil ifTrue:[
3486
f93691c57540 cleanup - single access to focusView
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
  2120
                self setFocusView:nil.
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2121
                self focusPrevious.
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2122
            ] ifFalse:[
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2123
                self focusView:curView byTab:true
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2124
            ].
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2125
            ^ self
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2126
        ].
3486
f93691c57540 cleanup - single access to focusView
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
  2127
        self setFocusView:nil.
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2128
    ].
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2129
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2130
    [true] whileTrue:[
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2131
        oldView := curView.
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2132
        curView := curView superView.
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2133
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2134
        curView isNil ifTrue:[
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2135
            focusView notNil ifTrue:[
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2136
                ^ self
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2137
            ].
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2138
            ^ self focusPrevious
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2139
        ].
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2140
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2141
        curView shown ifTrue:[
4733
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2142
            nxtView := curView focusPreviousChildBefore:oldView.
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2143
            nxtView notNil ifTrue:[
80b915a584ab focus handling changed: looking for subviewsInFocusOrder
ca
parents: 4677
diff changeset
  2144
                ^ self focusView:nxtView byTab:true
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2145
            ].
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2146
        ].
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2147
    ].
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2148
!
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2149
2219
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2150
focusPreviousFrom:aView
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2151
    "give focus to the view before aView in the focusSequence"
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2152
3486
f93691c57540 cleanup - single access to focusView
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
  2153
    self setFocusView:aView.
2219
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2154
    self focusPrevious
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2155
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2156
    "Created: / 4.8.1998 / 02:43:08 / cg"
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2157
!
8dcff419009d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2213
diff changeset
  2158
2506
221b75206a75 focus handling changed.
Claus Gittinger <cg@exept.de>
parents: 2497
diff changeset
  2159
focusRequestFrom:aView
221b75206a75 focus handling changed.
Claus Gittinger <cg@exept.de>
parents: 2497
diff changeset
  2160
    "aView requests focus. I will grant it, if I have no explicit
221b75206a75 focus handling changed.
Claus Gittinger <cg@exept.de>
parents: 2497
diff changeset
  2161
     focusView (i.e. not tabbed)"
221b75206a75 focus handling changed.
Claus Gittinger <cg@exept.de>
parents: 2497
diff changeset
  2162
3651
a102c4f2a6d8 Fix #focusRequestFrom:
Stefan Vogel <sv@exept.de>
parents: 3622
diff changeset
  2163
    |prevFocusView myDisplay|
2686
f074aa7d0748 care for activateOnClick mode when granting a focusRequest.
Claus Gittinger <cg@exept.de>
parents: 2644
diff changeset
  2164
2692
79a3b3d740f9 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2691
diff changeset
  2165
"/    'focusRequest:' print. aView print. 
79a3b3d740f9 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2691
diff changeset
  2166
2686
f074aa7d0748 care for activateOnClick mode when granting a focusRequest.
Claus Gittinger <cg@exept.de>
parents: 2644
diff changeset
  2167
    myDisplay := self graphicsDevice.
3651
a102c4f2a6d8 Fix #focusRequestFrom:
Stefan Vogel <sv@exept.de>
parents: 3622
diff changeset
  2168
    (myDisplay notNil and:[myDisplay activateOnClick:nil]) ifTrue:[
3400
ff43dd6a2148 fixed focusRequestFrom:aView.
tm
parents: 3391
diff changeset
  2169
        prevFocusView := myDisplay focusView.
ff43dd6a2148 fixed focusRequestFrom:aView.
tm
parents: 3391
diff changeset
  2170
        (prevFocusView notNil 
3651
a102c4f2a6d8 Fix #focusRequestFrom:
Stefan Vogel <sv@exept.de>
parents: 3622
diff changeset
  2171
         and:[prevFocusView windowGroup ~~ aView windowGroup]) ifTrue:[
3400
ff43dd6a2148 fixed focusRequestFrom:aView.
tm
parents: 3391
diff changeset
  2172
            "/ a view from another windowGroup requests the focus.
ff43dd6a2148 fixed focusRequestFrom:aView.
tm
parents: 3391
diff changeset
  2173
            "/ Do not grant this, if in windows-activateOnClick mode.
2686
f074aa7d0748 care for activateOnClick mode when granting a focusRequest.
Claus Gittinger <cg@exept.de>
parents: 2644
diff changeset
  2174
2692
79a3b3d740f9 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2691
diff changeset
  2175
"/            ' not granted' printCR.
3657
cde3dc24daea focus handling watch this
Claus Gittinger <cg@exept.de>
parents: 3652
diff changeset
  2176
                
cde3dc24daea focus handling watch this
Claus Gittinger <cg@exept.de>
parents: 3652
diff changeset
  2177
            "/ check this - must be commented for windows
cde3dc24daea focus handling watch this
Claus Gittinger <cg@exept.de>
parents: 3652
diff changeset
  2178
"/            prevFocusView getKeyboardFocus.
3400
ff43dd6a2148 fixed focusRequestFrom:aView.
tm
parents: 3391
diff changeset
  2179
            ^ false
ff43dd6a2148 fixed focusRequestFrom:aView.
tm
parents: 3391
diff changeset
  2180
        ].
2686
f074aa7d0748 care for activateOnClick mode when granting a focusRequest.
Claus Gittinger <cg@exept.de>
parents: 2644
diff changeset
  2181
    ].
f074aa7d0748 care for activateOnClick mode when granting a focusRequest.
Claus Gittinger <cg@exept.de>
parents: 2644
diff changeset
  2182
2692
79a3b3d740f9 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2691
diff changeset
  2183
"/    ' granted' printCR.
79a3b3d740f9 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2691
diff changeset
  2184
2506
221b75206a75 focus handling changed.
Claus Gittinger <cg@exept.de>
parents: 2497
diff changeset
  2185
    (focusView isNil or:[focusByTab not]) ifTrue:[
3400
ff43dd6a2148 fixed focusRequestFrom:aView.
tm
parents: 3391
diff changeset
  2186
        (aView isNil or:[aView ~~ focusView]) ifTrue:[
6141
061fbecc2095 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6139
diff changeset
  2187
            self focusView:aView byTab:false. "/ do not change to true - focus followsMouse will no longer work then
3400
ff43dd6a2148 fixed focusRequestFrom:aView.
tm
parents: 3391
diff changeset
  2188
        ].
ff43dd6a2148 fixed focusRequestFrom:aView.
tm
parents: 3391
diff changeset
  2189
        ^ true
2506
221b75206a75 focus handling changed.
Claus Gittinger <cg@exept.de>
parents: 2497
diff changeset
  2190
    ].
221b75206a75 focus handling changed.
Claus Gittinger <cg@exept.de>
parents: 2497
diff changeset
  2191
    ^ false
2686
f074aa7d0748 care for activateOnClick mode when granting a focusRequest.
Claus Gittinger <cg@exept.de>
parents: 2644
diff changeset
  2192
2692
79a3b3d740f9 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2691
diff changeset
  2193
    "Modified: / 20.5.1999 / 18:30:31 / cg"
2506
221b75206a75 focus handling changed.
Claus Gittinger <cg@exept.de>
parents: 2497
diff changeset
  2194
!
221b75206a75 focus handling changed.
Claus Gittinger <cg@exept.de>
parents: 2497
diff changeset
  2195
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2196
focusSequence:aSequenceableCollection
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2197
    "define the focus sequence for focusNext/focusPrevious.
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2198
     Focus is stepped in the order in which subviews occur in
1946
17a52204481e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1876
diff changeset
  2199
     the sequence."
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2200
!
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2201
2353
e04098201f7c added #focusToView: - checks if its a valid view in the focusSequence.
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  2202
focusToView:aViewOrNil
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2203
    "give focus to aViewOrNil"
2353
e04098201f7c added #focusToView: - checks if its a valid view in the focusSequence.
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  2204
e04098201f7c added #focusToView: - checks if its a valid view in the focusSequence.
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  2205
    focusView == aViewOrNil ifFalse:[
4943
e2905176c7ef code indentation
Claus Gittinger <cg@exept.de>
parents: 4847
diff changeset
  2206
        (aViewOrNil isNil
3156
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2207
         or:[(aViewOrNil canTab and:[aViewOrNil enabled])]
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2208
        ) ifTrue:[
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2209
            self focusView:aViewOrNil
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2210
        ]
38b73e5c08aa focusNext and focusPrevious reimplemented; abwärts compatible
ca
parents: 3151
diff changeset
  2211
    ].
2353
e04098201f7c added #focusToView: - checks if its a valid view in the focusSequence.
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  2212
!
e04098201f7c added #focusToView: - checks if its a valid view in the focusSequence.
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  2213
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2214
focusView
135
claus
parents: 121
diff changeset
  2215
    "return the view which currently has the focus"
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2216
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2217
    ^ focusView
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2218
!
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2219
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2220
focusView:aViewOrNil
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2221
    "give focus to aViewOrNil"
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2222
2485
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2223
    self focusView:aViewOrNil byTab:false
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2224
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2225
    "
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2226
     |top v1 v2|
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2227
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2228
     top := StandardSystemView new.
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2229
     v1 := EditTextView origin:0.0@0.0 corner:1.0@0.5 in:top.
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2230
     v2 := EditTextView origin:0.0@0.5 corner:1.0@1.0 in:top.
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2231
     top open.
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2232
     top windowGroup focusView:v1.
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2233
    "
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2234
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2235
    "Modified: 31.5.1996 / 21:13:25 / cg"
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2236
!
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2237
5003
59c3b1d86175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4973
diff changeset
  2238
focusView:aViewOrNil byTab:focusCameViaTabOrNil
2507
daaf44f27cdd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2506
diff changeset
  2239
    "give focus to aViewOrNil.
5003
59c3b1d86175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4973
diff changeset
  2240
     The focusCameViaTabOrNil argument specifies if the focus came via
59c3b1d86175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4973
diff changeset
  2241
     tabbing or by pointer-movement/automatic or (if nil) by reassigning the topView focus
59c3b1d86175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4973
diff changeset
  2242
     to the windowGroup which had it before.
2507
daaf44f27cdd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2506
diff changeset
  2243
     If it came via tabbing, the view is notified differently, to allow
6141
061fbecc2095 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6139
diff changeset
  2244
     for special highlighting (i.e. drawing a focus-border around itself).
061fbecc2095 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6139
diff changeset
  2245
     Also, if tabbed in, the focusFollowsMouse behavior is disabled (as we assume,
061fbecc2095 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6139
diff changeset
  2246
     that the user has explicitely tabbed into the view to force focus to it)"
2485
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2247
3652
9cdfdb903a20 Remove unused method vars
Stefan Vogel <sv@exept.de>
parents: 3651
diff changeset
  2248
    |prevFocusView myDisplay|
2506
221b75206a75 focus handling changed.
Claus Gittinger <cg@exept.de>
parents: 2497
diff changeset
  2249
6125
e9877f35e9ac class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6123
diff changeset
  2250
    "/'focusToView:' print. aViewOrNil print. 
e9877f35e9ac class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6123
diff changeset
  2251
    "/' (prev: ' print.  focusView print. ')' printCR.
2692
79a3b3d740f9 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2691
diff changeset
  2252
2507
daaf44f27cdd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2506
diff changeset
  2253
    myDisplay := self graphicsDevice.
2522
a6a84d36b161 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2521
diff changeset
  2254
    myDisplay notNil ifTrue:[
3376
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2255
        "/
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2256
        "/ take the focus from whichEver view had it previously
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2257
        "/
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2258
        prevFocusView := myDisplay focusView.
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2259
        prevFocusView ~~ aViewOrNil ifTrue:[
6125
e9877f35e9ac class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6123
diff changeset
  2260
            "/'take focus from ' print. prevFocusView printCR. 
3376
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2261
            self class takeFocusFromDevice:myDisplay.
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2262
        ].
2506
221b75206a75 focus handling changed.
Claus Gittinger <cg@exept.de>
parents: 2497
diff changeset
  2263
    ].
221b75206a75 focus handling changed.
Claus Gittinger <cg@exept.de>
parents: 2497
diff changeset
  2264
4677
Claus Gittinger <cg@exept.de>
parents: 4676
diff changeset
  2265
    myDisplay focusView:aViewOrNil.
4676
4c84e69d7a15 focusHandling
Claus Gittinger <cg@exept.de>
parents: 4571
diff changeset
  2266
2485
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2267
    focusView == aViewOrNil ifTrue:[
3376
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2268
        focusView notNil ifTrue:[
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2269
            "/ this is the case when the mouse-pointer reenters
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2270
            "/ into a topView which had a focusView
4973
3414fa1d71ea focus came by tab handling
Claus Gittinger <cg@exept.de>
parents: 4962
diff changeset
  2271
            "/ cg: disabled 5.jun.08
5003
59c3b1d86175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4973
diff changeset
  2272
            focusCameViaTabOrNil notNil ifTrue:[
59c3b1d86175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4973
diff changeset
  2273
                focusByTab := focusCameViaTabOrNil "or:[focusByTab]".
59c3b1d86175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4973
diff changeset
  2274
            ].
6125
e9877f35e9ac class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6123
diff changeset
  2275
            false ifTrue:[
e9877f35e9ac class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6123
diff changeset
  2276
                focusView showFocus:focusByTab.
e9877f35e9ac class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6123
diff changeset
  2277
                'give focus to ' print. aViewOrNil printCR. 
e9877f35e9ac class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6123
diff changeset
  2278
                self class sendKeyboardFocusEventTo:aViewOrNil withArgument:true.
e9877f35e9ac class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6123
diff changeset
  2279
            ].
3376
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2280
        ].
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2281
        ^ self
2485
410e810ccbcc remember if focus came by tabbing or clicking into the focusView
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  2282
    ].
410
9d9d03fa5d82 moved Tab handling to topView (which sends #focusNext if no subview handled it)
Claus Gittinger <cg@exept.de>
parents: 408
diff changeset
  2283
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2284
    focusView notNil ifTrue:[
3376
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2285
        "/ lost explicit focus
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2286
        focusView == aViewOrNil ifTrue:[
6125
e9877f35e9ac class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6123
diff changeset
  2287
            "/'give focus to ' print. aViewOrNil printCR. 
3376
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2288
            self class sendKeyboardFocusEventTo:aViewOrNil withArgument:true.
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2289
            ^ self
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2290
        ].
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2291
    ].
387
aa80487842b8 compile event classes with optSpace;
Claus Gittinger <cg@exept.de>
parents: 385
diff changeset
  2292
3486
f93691c57540 cleanup - single access to focusView
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
  2293
    self setFocusView:aViewOrNil.
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2294
    focusView notNil ifTrue:[
3376
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2295
        "/ got explicit focus
5003
59c3b1d86175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4973
diff changeset
  2296
        aViewOrNil showFocus:(focusCameViaTabOrNil ? true).
6125
e9877f35e9ac class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6123
diff changeset
  2297
        "/'give focus to ' print. aViewOrNil printCR. 
3376
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2298
        self class sendKeyboardFocusEventTo:aViewOrNil withArgument:true.
5003
59c3b1d86175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4973
diff changeset
  2299
        focusCameViaTabOrNil notNil ifTrue:[
59c3b1d86175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4973
diff changeset
  2300
            focusByTab := focusCameViaTabOrNil.
59c3b1d86175 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4973
diff changeset
  2301
        ]
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2302
    ].
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2303
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2304
    "
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2305
     |top v1 v2|
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2306
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2307
     top := StandardSystemView new.
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2308
     v1 := EditTextView origin:0.0@0.0 corner:1.0@0.5 in:top.
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2309
     v2 := EditTextView origin:0.0@0.5 corner:1.0@1.0 in:top.
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2310
     top open.
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2311
     top windowGroup focusView:v1.
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2312
    "
357
3655807445b7 keep track of pointerView, for implizit focus tracking
Claus Gittinger <cg@exept.de>
parents: 330
diff changeset
  2313
5676
d5d971d044ef changed: #focusView:byTab:
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  2314
    "Modified: / 20-01-2011 / 22:39:57 / cg"
2479
2dbe1821533b care for subWidgets when searching for the currentFocusView
Claus Gittinger <cg@exept.de>
parents: 2445
diff changeset
  2315
!
2dbe1821533b care for subWidgets when searching for the currentFocusView
Claus Gittinger <cg@exept.de>
parents: 2445
diff changeset
  2316
4737
f0c3a28d96ef focus handling
ca
parents: 4733
diff changeset
  2317
focusViewUnmapped
f0c3a28d96ef focus handling
ca
parents: 4733
diff changeset
  2318
    "the view which currently had the focus was unmapped"
f0c3a28d96ef focus handling
ca
parents: 4733
diff changeset
  2319
f0c3a28d96ef focus handling
ca
parents: 4733
diff changeset
  2320
    self focusView:nil
f0c3a28d96ef focus handling
ca
parents: 4733
diff changeset
  2321
!
f0c3a28d96ef focus handling
ca
parents: 4733
diff changeset
  2322
2737
f8ca00c8e6d4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2723
diff changeset
  2323
pointerView
f8ca00c8e6d4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2723
diff changeset
  2324
    "return the view which currently has the pointer"
f8ca00c8e6d4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2723
diff changeset
  2325
f8ca00c8e6d4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2723
diff changeset
  2326
    ^ pointerView
3486
f93691c57540 cleanup - single access to focusView
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
  2327
!
f93691c57540 cleanup - single access to focusView
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
  2328
f93691c57540 cleanup - single access to focusView
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
  2329
setFocusView:aViewOrNil
6147
19c3eddaa8e1 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  2330
    focusView notNil ifTrue:[
19c3eddaa8e1 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  2331
        self class sendKeyboardFocusEventTo:focusView withArgument:false
19c3eddaa8e1 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  2332
    ].
6466
e4eebb5bd759 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  2333
    previousFocusView := focusView.
6147
19c3eddaa8e1 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  2334
    focusView := aViewOrNil.
19c3eddaa8e1 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  2335
    focusView notNil ifTrue:[
19c3eddaa8e1 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  2336
        self class sendKeyboardFocusEventTo:focusView withArgument:true
19c3eddaa8e1 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  2337
    ].
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2338
! !
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2339
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2340
!WindowGroup methodsFor:'initialization'!
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2341
3683
1f38878b9669 avoid trouble in reinit with leftOver windowGroups
penk
parents: 3681
diff changeset
  2342
beSynchronous
1f38878b9669 avoid trouble in reinit with leftOver windowGroups
penk
parents: 3681
diff changeset
  2343
    mySensor := SynchronousWindowSensor new.
1f38878b9669 avoid trouble in reinit with leftOver windowGroups
penk
parents: 3681
diff changeset
  2344
!
1f38878b9669 avoid trouble in reinit with leftOver windowGroups
penk
parents: 3681
diff changeset
  2345
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2346
initialize
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2347
    "setup the windowgroup, by creating a new sensor
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2348
     and an event semaphore"
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2349
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2350
    mySensor := WindowSensor new.
1273
158d030a5553 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1270
diff changeset
  2351
    mySensor eventSemaphore:(Semaphore new name:'WGroup eventSema').
4375
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2352
    processPriority := Processor userSchedulingPriority.
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2353
    isModal := false.
417
940ebb195fc6 added isModalForSubView flag
Claus Gittinger <cg@exept.de>
parents: 410
diff changeset
  2354
    isForModalSubview := false.
5520
2711e254f54c changed:
Stefan Vogel <sv@exept.de>
parents: 5518
diff changeset
  2355
    doNotCloseOnAbortSignal := false.
1273
158d030a5553 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1270
diff changeset
  2356
158d030a5553 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1270
diff changeset
  2357
    "Modified: 25.1.1997 / 00:20:19 / cg"
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2358
!
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2359
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2360
reinitialize
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2361
    "reinitialize the windowgroup after an image restart"
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2362
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2363
    "throw away old (zombie) process"
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2364
    myProcess notNil ifTrue:[
3683
1f38878b9669 avoid trouble in reinit with leftOver windowGroups
penk
parents: 3681
diff changeset
  2365
        "/ careful: the old processes exit-actions must be cleared.
1f38878b9669 avoid trouble in reinit with leftOver windowGroups
penk
parents: 3681
diff changeset
  2366
        "/ otherwise, it might do destroy or other actions when it
1f38878b9669 avoid trouble in reinit with leftOver windowGroups
penk
parents: 3681
diff changeset
  2367
        "/ gets finalized ...
1186
e1fbbabcd682 no longer use exitBlocks - a termination-unwind handler will
Claus Gittinger <cg@exept.de>
parents: 1157
diff changeset
  2368
e1fbbabcd682 no longer use exitBlocks - a termination-unwind handler will
Claus Gittinger <cg@exept.de>
parents: 1157
diff changeset
  2369
"/        myProcess removeAllExitActions.
3683
1f38878b9669 avoid trouble in reinit with leftOver windowGroups
penk
parents: 3681
diff changeset
  2370
        myProcess removeAllSuspendActions.
4375
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2371
        processPriority := myProcess priority. "save old priority"
3683
1f38878b9669 avoid trouble in reinit with leftOver windowGroups
penk
parents: 3681
diff changeset
  2372
        myProcess := nil.
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2373
    ].
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2374
5918
68269d30bd75 changed: #reinitialize
Stefan Vogel <sv@exept.de>
parents: 5911
diff changeset
  2375
    inWithCursorDoBlock := false.
68269d30bd75 changed: #reinitialize
Stefan Vogel <sv@exept.de>
parents: 5911
diff changeset
  2376
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2377
    "throw away old events"
3683
1f38878b9669 avoid trouble in reinit with leftOver windowGroups
penk
parents: 3681
diff changeset
  2378
    mySensor notNil ifTrue:[mySensor reinitialize]
313
2b776b2a26c5 stefans changes
Claus Gittinger <cg@exept.de>
parents: 302
diff changeset
  2379
2b776b2a26c5 stefans changes
Claus Gittinger <cg@exept.de>
parents: 302
diff changeset
  2380
    "Modified: 13.12.1995 / 13:45:35 / stefan"
1186
e1fbbabcd682 no longer use exitBlocks - a termination-unwind handler will
Claus Gittinger <cg@exept.de>
parents: 1157
diff changeset
  2381
    "Modified: 12.1.1997 / 00:45:01 / cg"
4375
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2382
!
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2383
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2384
setProcessNameWithRedirectIndicator:redirectString
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2385
    "give the windowGroup process a user friendly name.
5291
a963f9a65251 comment
Claus Gittinger <cg@exept.de>
parents: 5288
diff changeset
  2386
     This name shows up in the ProcessMonitor.
a963f9a65251 comment
Claus Gittinger <cg@exept.de>
parents: 5288
diff changeset
  2387
     redirectString is nonEmpty, for remote display views"
4375
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2388
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2389
    |top nm dev devNm defaultDisplay|
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2390
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2391
    "ask my topView for the processName, and
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2392
     optionally append the displayName (if its not the default)"
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2393
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2394
    topViews size ~~ 0 ifTrue:[
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2395
        top := topViews first.
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2396
        nm := top processName.
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2397
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2398
        dev := top graphicsDevice.
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2399
        defaultDisplay := Screen default.
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2400
        (dev notNil and:[dev ~~ defaultDisplay]) ifTrue:[
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2401
            devNm := dev displayName.
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2402
            (devNm notNil and:[defaultDisplay isNil or:[devNm ~= defaultDisplay displayName]]) ifTrue:[
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2403
                nm := nm , ' (' , redirectString , devNm , ')'
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2404
            ]
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2405
        ]
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2406
    ] ifFalse:[
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2407
        nm := 'window handler'.
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2408
    ].
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2409
    myProcess name:nm.
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2410
! !
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2411
3372
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2412
!WindowGroup methodsFor:'keyboard control'!
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2413
3391
c11ca001a8ef - rename #mnemonicViewNext: to #processMnemonic:
ca
parents: 3376
diff changeset
  2414
processMnemonic:aKeyEvent
3372
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2415
    "a  mnemonicKey event as forwarded from the keyboardProcessor - if there
3822
decfe19a2bb2 comment
Claus Gittinger <cg@exept.de>
parents: 3786
diff changeset
  2416
     is the mnemonic-key defined for a subView, true is returned and the view
decfe19a2bb2 comment
Claus Gittinger <cg@exept.de>
parents: 3786
diff changeset
  2417
     becomes the focusView. Otherwise return false.
3372
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2418
    "
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2419
    |topView mnemonicView|
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2420
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2421
    focusView notNil ifTrue:[
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2422
        "/ start from current focusView
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2423
        mnemonicView := focusView mnemonicViewNext:aKeyEvent.
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2424
3391
c11ca001a8ef - rename #mnemonicViewNext: to #processMnemonic:
ca
parents: 3376
diff changeset
  2425
        (mnemonicView notNil and:[true "mnemonicView canTab" and:[mnemonicView enabled]]) ifTrue:[
3372
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2426
            self focusView:mnemonicView byTab:false.
3822
decfe19a2bb2 comment
Claus Gittinger <cg@exept.de>
parents: 3786
diff changeset
  2427
            ^ true
3372
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2428
        ]
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2429
    ].
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2430
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2431
    "/ start from any topview
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2432
    topViews notNil ifTrue:[
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2433
        topView := topViews detect:[:aView| aView shown ] ifNone:nil.
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2434
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2435
        topView notNil ifTrue:[
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2436
            mnemonicView := topView mnemonicViewNext:aKeyEvent.
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2437
3391
c11ca001a8ef - rename #mnemonicViewNext: to #processMnemonic:
ca
parents: 3376
diff changeset
  2438
            (mnemonicView notNil and:[true "mnemonicView canTab" and:[mnemonicView enabled]]) ifTrue:[
3372
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2439
                self focusView:mnemonicView byTab:false.
3822
decfe19a2bb2 comment
Claus Gittinger <cg@exept.de>
parents: 3786
diff changeset
  2440
                ^ true
3372
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2441
            ]
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2442
        ]
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2443
    ].
3376
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2444
    ^ false
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2445
!
3372
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2446
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2447
processShortcut:aKeyEvent
3652
9cdfdb903a20 Remove unused method vars
Stefan Vogel <sv@exept.de>
parents: 3651
diff changeset
  2448
    "a shortcut key event as forwarded from the keyboardProcessor - if there is the
4943
e2905176c7ef code indentation
Claus Gittinger <cg@exept.de>
parents: 4847
diff changeset
  2449
     shortcut key defined, process the shortcut and return true - otherwise false."
e2905176c7ef code indentation
Claus Gittinger <cg@exept.de>
parents: 4847
diff changeset
  2450
3652
9cdfdb903a20 Remove unused method vars
Stefan Vogel <sv@exept.de>
parents: 3651
diff changeset
  2451
    |topView|
3372
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2452
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2453
    "/ start from current focusView
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2454
    (focusView notNil and:[focusView processShortcut:aKeyEvent]) ifTrue:[
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2455
        ^ true
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2456
    ].
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2457
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2458
    "/ start from any topview
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2459
    topViews notNil ifTrue:[
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2460
        topView := topViews detect:[:v| v ~~ focusView and:[v shown]] ifNone:nil.
4943
e2905176c7ef code indentation
Claus Gittinger <cg@exept.de>
parents: 4847
diff changeset
  2461
        ^ topView notNil and:[topView processShortcut:aKeyEvent]
3372
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2462
    ].
3376
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2463
    ^ false
a9784be22e6a added hasKeyboardFocus event
tm
parents: 3373
diff changeset
  2464
! !
3372
af010559c138 mnemonic-key and shortcut-key support;
ca
parents: 3354
diff changeset
  2465
3276
9ed39f7e7282 category change
Claus Gittinger <cg@exept.de>
parents: 3212
diff changeset
  2466
!WindowGroup methodsFor:'printing & storing'!
19
74683e998f36 *** empty log message ***
claus
parents: 17
diff changeset
  2467
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2468
printOn:aStream
19
74683e998f36 *** empty log message ***
claus
parents: 17
diff changeset
  2469
    "return a printed representation;
144
claus
parents: 141
diff changeset
  2470
     just for more user friendlyness: add name of process."
19
74683e998f36 *** empty log message ***
claus
parents: 17
diff changeset
  2471
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2472
    myProcess isNil ifTrue:[
3077
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
  2473
	(previousGroup notNil and:[previousGroup process notNil]) ifTrue:[
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
  2474
	    aStream nextPutAll:('WindowGroup(modal in ' , previousGroup process nameOrId , ')').
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
  2475
	    ^ self.
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
  2476
	].
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
  2477
	^ super printOn:aStream
2870
7805fc861445 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2863
diff changeset
  2478
    ].
7805fc861445 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2863
diff changeset
  2479
    isModal ifTrue:[
3077
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
  2480
	aStream nextPutAll:('WindowGroup(modal for ' , myProcess nameOrId , ')').
aa0c8fc61fd0 *** empty log message ***
ps
parents: 3062
diff changeset
  2481
	^ self.
90
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2482
    ].
b1f1d7fc96eb *** empty log message ***
claus
parents: 86
diff changeset
  2483
    aStream nextPutAll:('WindowGroup(' , myProcess nameOrId , ')')
19
74683e998f36 *** empty log message ***
claus
parents: 17
diff changeset
  2484
! !
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2485
4962
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2486
!WindowGroup methodsFor:'queries'!
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2487
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2488
anyViewHasFocus
5948
10a31dfaab1d changed: #anyViewHasFocus
Claus Gittinger <cg@exept.de>
parents: 5922
diff changeset
  2489
    |focusVw|
10a31dfaab1d changed: #anyViewHasFocus
Claus Gittinger <cg@exept.de>
parents: 5922
diff changeset
  2490
4962
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2491
    ^ graphicsDevice notNil
5948
10a31dfaab1d changed: #anyViewHasFocus
Claus Gittinger <cg@exept.de>
parents: 5922
diff changeset
  2492
    and:[ (focusVw := graphicsDevice focusView) notNil
10a31dfaab1d changed: #anyViewHasFocus
Claus Gittinger <cg@exept.de>
parents: 5922
diff changeset
  2493
    and:[ focusVw windowGroup == self ]]
4962
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2494
!
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2495
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2496
isPopUp
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2497
    "return true, if the receiver is for a popUp view"
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2498
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2499
    isModal ifFalse:[^ false].
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2500
    topViews isNil ifTrue:[^ true]. "/ a closed popup ...
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2501
    ^ topViews first isPopUpView
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2502
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2503
    "Created: / 9.7.1998 / 01:13:01 / cg"
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2504
    "Modified: / 9.7.1998 / 01:17:11 / cg"
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2505
! !
d9ea7dfd084f anyViewHasFocus query
Claus Gittinger <cg@exept.de>
parents: 4943
diff changeset
  2506
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2507
!WindowGroup methodsFor:'special'!
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2508
3293
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2509
migrateTo:anotherDisplay
3302
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2510
    "migrate all of my views to some other display device"
3293
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2511
4375
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2512
    |myDevice previouslyRealized|
3293
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2513
3304
6dcc6bb7c3e5 block migration of a modalBox
Claus Gittinger <cg@exept.de>
parents: 3302
diff changeset
  2514
    self isModal ifTrue:[
6dcc6bb7c3e5 block migration of a modalBox
Claus Gittinger <cg@exept.de>
parents: 3302
diff changeset
  2515
        "/ cannot migrate a modal box away from its owner ...
6dcc6bb7c3e5 block migration of a modalBox
Claus Gittinger <cg@exept.de>
parents: 3302
diff changeset
  2516
        "/ (need a separate process and views may not be owned)
4348
26cf51169d4c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4341
diff changeset
  2517
        Transcript showCR:'Modal windogroup cannot be migrated.'.
26cf51169d4c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4341
diff changeset
  2518
        "/ self error:'Modal windogroup cannot be migrated.'.
3304
6dcc6bb7c3e5 block migration of a modalBox
Claus Gittinger <cg@exept.de>
parents: 3302
diff changeset
  2519
        ^ self
6dcc6bb7c3e5 block migration of a modalBox
Claus Gittinger <cg@exept.de>
parents: 3302
diff changeset
  2520
    ].
6dcc6bb7c3e5 block migration of a modalBox
Claus Gittinger <cg@exept.de>
parents: 3302
diff changeset
  2521
3293
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2522
    previouslyRealized := IdentitySet new.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2523
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2524
    myDevice := self graphicsDevice.
3308
f20f8481741c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3304
diff changeset
  2525
    DeviceWorkstation flushCachedLastScreen.
3293
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2526
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2527
    graphicsDevice := nil.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2528
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2529
    "/ enumerate views - flush their device info ...
3841
39b293125434 care for 'migrate back' pressed without any topViews left (closed before).
martin
parents: 3822
diff changeset
  2530
    self allTopViewsDo:[:eachTopView |
3293
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2531
        eachTopView realized ifTrue:[
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2532
            previouslyRealized add:eachTopView
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2533
        ].
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2534
        eachTopView unmap.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2535
    ].
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2536
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2537
    "/ destroy them - but without notifying application/views
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2538
    self allViewsDo:[:eachView |
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2539
        eachView releaseDeviceResources.
3302
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2540
        eachView setDevice:anotherDisplay id:nil gcId:nil.
3293
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2541
    ].
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2542
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2543
    "/ recreate them ...
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2544
    self allViewsDo:[:eachView |
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2545
        eachView recreate.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2546
        eachView fetchDeviceResources
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2547
    ].
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2548
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2549
    "/ realize them ...
3304
6dcc6bb7c3e5 block migration of a modalBox
Claus Gittinger <cg@exept.de>
parents: 3302
diff changeset
  2550
    (topViews ? previouslyRealized) do:[:eachTopView |
3293
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2551
        (previouslyRealized includes:eachTopView) ifTrue:[
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2552
            eachTopView realize
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2553
        ].
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2554
    ].
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2555
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2556
    graphicsDevice := anotherDisplay.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2557
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2558
    anotherDisplay sync.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2559
    myDevice sync.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2560
4375
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2561
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2562
    "change the name of my process"
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2563
    self setProcessNameWithRedirectIndicator:'->'.
d16dc7e26e38 On snapshot image restart, restore the priority
Stefan Vogel <sv@exept.de>
parents: 4348
diff changeset
  2564
3293
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2565
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2566
    "
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2567
     |anotherDisplay v host|
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2568
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2569
     v := StandardSystemView new.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2570
     v extent:100@100.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2571
     v addSubView:(Button label:'foo').
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2572
     v openAndWait.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2573
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2574
     host := Dialog request:'display:' initialAnswer:'dawn:0'.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2575
     host isNil ifTrue:[^ self].
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2576
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2577
     anotherDisplay := XWorkstation newDispatchingFor:host.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2578
     anotherDisplay isNil ifTrue:[
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2579
         self warn:'Could not connect to remote display'.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2580
         ^ self
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2581
     ].
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2582
     Smalltalk at:#Display2 put:anotherDisplay.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2583
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2584
     v windowGroup migrateTo:anotherDisplay
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2585
    "
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2586
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2587
    "
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2588
     |anotherDisplay app host|
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2589
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2590
     app := NewSystemBrowser open.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2591
     app window waitUntilVisible.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2592
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2593
     host := Dialog request:'display:' initialAnswer:'dawn:0'.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2594
     host isNil ifTrue:[^ self].
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2595
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2596
     anotherDisplay := XWorkstation newDispatchingFor:host.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2597
     anotherDisplay isNil ifTrue:[
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2598
         self warn:'Could not connect to remote display'.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2599
         ^ self
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2600
     ].
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2601
     Smalltalk at:#Display2 put:anotherDisplay.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2602
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2603
     app windowGroup migrateTo:anotherDisplay
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2604
    "
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2605
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2606
    "
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2607
     |host anotherDisplay|
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2608
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2609
     host := Dialog request:'display:' initialAnswer:'dawn:0'.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2610
     host isNil ifTrue:[^ self].
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2611
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2612
     anotherDisplay := XWorkstation newDispatchingFor:host.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2613
     anotherDisplay isNil ifTrue:[
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2614
         self warn:'Could not connect to remote display'.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2615
         ^ self
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2616
     ].
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2617
     Smalltalk at:#Display2 put:anotherDisplay.
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2618
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2619
     Transcript topView windowGroup migrateTo:anotherDisplay
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2620
    "
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2621
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2622
    "
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2623
     Transcript topView windowGroup migrateTo:Display
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2624
    "
3302
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2625
! !
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2626
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2627
!WindowGroup methodsFor:'special-accessing'!
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2628
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2629
isForModalSubview 
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2630
    "special for windowgroups for modal subviews.
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2631
     These must be flagged specially to avoid the views being reassigned
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2632
     to the maingroup.
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2633
     This is a private interface to the SimpleView class"
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2634
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2635
    ^ isForModalSubview
3293
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2636
!
a5c5d64b36e9 migration - not yet finished
Claus Gittinger <cg@exept.de>
parents: 3288
diff changeset
  2637
3302
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2638
isForModalSubview:aBoolean
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2639
    "special for windowgroups for modal subviews.
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2640
     These must be flagged specially to avoid the views being reassigned
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2641
     to the maingroup.
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2642
     This is a private interface to the SimpleView class"
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2643
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2644
    isForModalSubview := aBoolean
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2645
!
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2646
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2647
setModal:aBoolean
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2648
    "special entry for debugger: set the modal flag.
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2649
     Not for public use"
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2650
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2651
    isModal := aBoolean
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2652
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2653
    "Modified: 3.9.1995 / 14:51:04 / claus"
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2654
!
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2655
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2656
setPreviousGroup:aGroup
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2657
    "special entry for debugger:
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2658
     set the windowgroup that started this group (for modal groups only).
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2659
     This is not a public interface."
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2660
6118
1a2751687549 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6097
diff changeset
  2661
    self assert:(aGroup ~~ self).
3302
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2662
    previousGroup := aGroup
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2663
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2664
    "Modified: 3.9.1995 / 14:55:40 / claus"
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2665
!
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2666
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2667
setProcess:aProcess 
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2668
    "special entry for debugger: set the windowGroups process.
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2669
     Not for public use."
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2670
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2671
    myProcess := aProcess
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2672
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2673
    "Modified: 3.9.1995 / 14:25:38 / claus"
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2674
! !
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2675
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2676
!WindowGroup methodsFor:'special-user interaction'!
c06a207c33da *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3298
diff changeset
  2677
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2678
restoreCursors
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2679
    "restore the original cursors in all of my views"
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2680
3288
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2681
    |myDevice|
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2682
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2683
    myDevice := self graphicsDevice.
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2684
330
13a3fa93330c careful - view could have been destroyed in the meanwhile (in restoreCursors)
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
  2685
    self allViewsDo:[:aView |  
3288
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2686
        |c dev id cid|
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2687
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2688
        dev := aView graphicsDevice.
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2689
        dev notNil ifTrue:[
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2690
            (id := aView id) notNil ifTrue:[
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2691
                c := aView cursor.
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2692
                c notNil ifTrue:[
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2693
                    c := c onDevice:dev.
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2694
                    (c notNil and:[(cid := c id) notNil]) ifTrue:[
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2695
                        dev setCursor:cid in:id.
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2696
                        dev ~~ myDevice ifTrue:[
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2697
                            dev flush
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2698
                        ]
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2699
                    ].
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2700
                ]
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2701
            ]
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2702
        ]
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2703
    ].
3288
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2704
    myDevice flush
743
64c9b71b3cc4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 698
diff changeset
  2705
2097
d290e7910bec dont change cursors of mainGroup
Claus Gittinger <cg@exept.de>
parents: 2093
diff changeset
  2706
    "Modified: / 22.4.1998 / 14:28:22 / cg"
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2707
!
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2708
328
7bbe05da5769 activity notification added
Claus Gittinger <cg@exept.de>
parents: 325
diff changeset
  2709
showActivity:someMessage
597
958e2673ca11 commentary
Claus Gittinger <cg@exept.de>
parents: 582
diff changeset
  2710
    "some activityNotification shalt be communicated to
958e2673ca11 commentary
Claus Gittinger <cg@exept.de>
parents: 582
diff changeset
  2711
     the user; 
958e2673ca11 commentary
Claus Gittinger <cg@exept.de>
parents: 582
diff changeset
  2712
     forward it to my first topView if there is one
958e2673ca11 commentary
Claus Gittinger <cg@exept.de>
parents: 582
diff changeset
  2713
     (that one should know how to deal with it)"
958e2673ca11 commentary
Claus Gittinger <cg@exept.de>
parents: 582
diff changeset
  2714
328
7bbe05da5769 activity notification added
Claus Gittinger <cg@exept.de>
parents: 325
diff changeset
  2715
    topViews notNil ifTrue:[
1977
9bda3ac0d83d no need for #flush in event-loop (already done by threads suspendAction)
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
  2716
	topViews first showActivity:someMessage
328
7bbe05da5769 activity notification added
Claus Gittinger <cg@exept.de>
parents: 325
diff changeset
  2717
    ]
7bbe05da5769 activity notification added
Claus Gittinger <cg@exept.de>
parents: 325
diff changeset
  2718
7bbe05da5769 activity notification added
Claus Gittinger <cg@exept.de>
parents: 325
diff changeset
  2719
    "Created: 16.12.1995 / 18:39:40 / cg"
597
958e2673ca11 commentary
Claus Gittinger <cg@exept.de>
parents: 582
diff changeset
  2720
    "Modified: 23.4.1996 / 21:36:54 / cg"
328
7bbe05da5769 activity notification added
Claus Gittinger <cg@exept.de>
parents: 325
diff changeset
  2721
!
7bbe05da5769 activity notification added
Claus Gittinger <cg@exept.de>
parents: 325
diff changeset
  2722
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2723
showCursor:aCursor
3280
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
  2724
    "change the cursor to aCursor in all of my views
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
  2725
     (This sets the cursor directly, without changing the state of the cursor instance variable;
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
  2726
      the reason is to allow for #restoreCursors to be able to undo this)."
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2727
3288
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2728
    |myDevice c|
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2729
3062
76e91b0a9ab7 care for nil cursors
Claus Gittinger <cg@exept.de>
parents: 2993
diff changeset
  2730
    aCursor isNil ifTrue:[^ self].
76e91b0a9ab7 care for nil cursors
Claus Gittinger <cg@exept.de>
parents: 2993
diff changeset
  2731
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2732
    c := aCursor.
3288
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2733
    myDevice := self graphicsDevice.
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2734
    self allViewsDo:[:aView |  
3288
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2735
        |cId vId dev|
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2736
3280
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
  2737
        dev := aView graphicsDevice.
4408
308c798612a8 more care for brokenConnections.
Claus Gittinger <cg@exept.de>
parents: 4378
diff changeset
  2738
        (dev notNil and:[dev isOpen]) ifTrue:[
3280
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
  2739
            c := c onDevice:dev.
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
  2740
            (cId := c id) notNil ifTrue:[
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
  2741
               (vId := aView id) notNil ifTrue:[
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
  2742
                    dev setCursor:cId in:vId.
3288
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2743
                    dev ~~ myDevice ifTrue:[
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2744
                        dev flush
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2745
                    ]
3280
fc8a810432c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3279
diff changeset
  2746
                ]
3288
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2747
            ].
3286
21f022859294 flush device-queue when showing cursor,
Claus Gittinger <cg@exept.de>
parents: 3281
diff changeset
  2748
        ].
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2749
    ].
3288
13ae063e593e only flush once in #showCursor
Claus Gittinger <cg@exept.de>
parents: 3286
diff changeset
  2750
    myDevice flush
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2751
!
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2752
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2753
withCursor:aCursor do:aBlock
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2754
    "evaluate aBlock while showing aCursor in all
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2755
     my views (used to show wait-cursor while doing something).
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2756
     Return the result as returned by aBlock."
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2757
6343
5747b4dbc94b class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6147
diff changeset
  2758
    |oldCursors dev deviceCursor|
317
7a1271ecb987 use new #cursor:now: if many cursors are switched
Claus Gittinger <cg@exept.de>
parents: 313
diff changeset
  2759
926
1b8422921e4d use #graphicsDevice instead of #device.
Claus Gittinger <cg@exept.de>
parents: 777
diff changeset
  2760
    dev := self graphicsDevice.   
5518
8f69e48c8568 changed: #withCursor:do:
Stefan Vogel <sv@exept.de>
parents: 5445
diff changeset
  2761
    (dev isNil or:[aCursor isNil] or:[inWithCursorDoBlock == true]) ifTrue:[
5266
e0a7f249435e remember when already in a withCursorDo-block,
Claus Gittinger <cg@exept.de>
parents: 5260
diff changeset
  2762
        ^ aBlock value
e0a7f249435e remember when already in a withCursorDo-block,
Claus Gittinger <cg@exept.de>
parents: 5260
diff changeset
  2763
    ].
e0a7f249435e remember when already in a withCursorDo-block,
Claus Gittinger <cg@exept.de>
parents: 5260
diff changeset
  2764
1652
5745269f78a3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1561
diff changeset
  2765
    deviceCursor := aCursor onDevice:dev.
5745269f78a3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1561
diff changeset
  2766
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2767
    "
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2768
     get mapping of view->cursor for all of my subviews
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2769
    "
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2770
    oldCursors := IdentityDictionary new.
6343
5747b4dbc94b class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6147
diff changeset
  2771
    self allViewsDo:[:eachView |
3604
e32b5044a59e #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 3557
diff changeset
  2772
        |old|
e32b5044a59e #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 3557
diff changeset
  2773
6343
5747b4dbc94b class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6147
diff changeset
  2774
        old := eachView cursor.
4519
c51bf4114a4b #withCursorDo:
Stefan Vogel <sv@exept.de>
parents: 4475
diff changeset
  2775
        old ~~ deviceCursor ifTrue:[
6343
5747b4dbc94b class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6147
diff changeset
  2776
            oldCursors at:eachView put:old.
5747b4dbc94b class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6147
diff changeset
  2777
            eachView cursor:deviceCursor now:false
3604
e32b5044a59e #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 3557
diff changeset
  2778
        ]
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2779
    ].
1387
3fabdef0790d better behavior if called recursively
Claus Gittinger <cg@exept.de>
parents: 1364
diff changeset
  2780
5518
8f69e48c8568 changed: #withCursor:do:
Stefan Vogel <sv@exept.de>
parents: 5445
diff changeset
  2781
    oldCursors isEmpty ifTrue:[
6343
5747b4dbc94b class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6147
diff changeset
  2782
        ^ aBlock value. 
1986
344c50a87cbe #withCursor:do: for a modal group
ca
parents: 1977
diff changeset
  2783
    ] ifFalse:[
6343
5747b4dbc94b class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6147
diff changeset
  2784
        "used to do a sync here to make the cursor visible,
5747b4dbc94b class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6147
diff changeset
  2785
         but everything is so fast nowaday, that it doesn't make a difference"
5747b4dbc94b class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6147
diff changeset
  2786
        dev flush.
5747b4dbc94b class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6147
diff changeset
  2787
        inWithCursorDoBlock := true.
5747b4dbc94b class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6147
diff changeset
  2788
        ^ aBlock ensure:[
5266
e0a7f249435e remember when already in a withCursorDo-block,
Claus Gittinger <cg@exept.de>
parents: 5260
diff changeset
  2789
                "
e0a7f249435e remember when already in a withCursorDo-block,
Claus Gittinger <cg@exept.de>
parents: 5260
diff changeset
  2790
                 restore cursors from the mapping
e0a7f249435e remember when already in a withCursorDo-block,
Claus Gittinger <cg@exept.de>
parents: 5260
diff changeset
  2791
                "
6343
5747b4dbc94b class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6147
diff changeset
  2792
                oldCursors keysAndValuesDo:[:eachView :eachCursor |
5747b4dbc94b class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6147
diff changeset
  2793
                    eachView cursor:eachCursor now:false.
5266
e0a7f249435e remember when already in a withCursorDo-block,
Claus Gittinger <cg@exept.de>
parents: 5260
diff changeset
  2794
                ].
5267
9257e56c0b35 changed #withCursor:do:
Claus Gittinger <cg@exept.de>
parents: 5266
diff changeset
  2795
                dev flush.
9257e56c0b35 changed #withCursor:do:
Claus Gittinger <cg@exept.de>
parents: 5266
diff changeset
  2796
                inWithCursorDoBlock := false.
5266
e0a7f249435e remember when already in a withCursorDo-block,
Claus Gittinger <cg@exept.de>
parents: 5260
diff changeset
  2797
            ].
1387
3fabdef0790d better behavior if called recursively
Claus Gittinger <cg@exept.de>
parents: 1364
diff changeset
  2798
    ].
3fabdef0790d better behavior if called recursively
Claus Gittinger <cg@exept.de>
parents: 1364
diff changeset
  2799
2097
d290e7910bec dont change cursors of mainGroup
Claus Gittinger <cg@exept.de>
parents: 2093
diff changeset
  2800
"/    (self isModal and:[previousGroup notNil]) ifTrue:[
d290e7910bec dont change cursors of mainGroup
Claus Gittinger <cg@exept.de>
parents: 2093
diff changeset
  2801
"/        "/ pass the work to my parentGroup
d290e7910bec dont change cursors of mainGroup
Claus Gittinger <cg@exept.de>
parents: 2093
diff changeset
  2802
"/        ^ previousGroup withCursor:aCursor do:action
d290e7910bec dont change cursors of mainGroup
Claus Gittinger <cg@exept.de>
parents: 2093
diff changeset
  2803
"/    ].
6343
5747b4dbc94b class: WindowGroup
Stefan Vogel <sv@exept.de>
parents: 6147
diff changeset
  2804
317
7a1271ecb987 use new #cursor:now: if many cursors are switched
Claus Gittinger <cg@exept.de>
parents: 313
diff changeset
  2805
2097
d290e7910bec dont change cursors of mainGroup
Claus Gittinger <cg@exept.de>
parents: 2093
diff changeset
  2806
    "Modified: / 22.4.1998 / 14:36:47 / cg"
408
bd946e47bc07 added #withCursor:do:
Claus Gittinger <cg@exept.de>
parents: 407
diff changeset
  2807
!
bd946e47bc07 added #withCursor:do:
Claus Gittinger <cg@exept.de>
parents: 407
diff changeset
  2808
2213
84035dc560e0 added #withExecuteCursorDo: (for completeness)
Claus Gittinger <cg@exept.de>
parents: 2172
diff changeset
  2809
withExecuteCursorDo:aBlock
84035dc560e0 added #withExecuteCursorDo: (for completeness)
Claus Gittinger <cg@exept.de>
parents: 2172
diff changeset
  2810
    "evaluate aBlock while showing a busyCursor in all
84035dc560e0 added #withExecuteCursorDo: (for completeness)
Claus Gittinger <cg@exept.de>
parents: 2172
diff changeset
  2811
     my views (used to show busy-cursor while doing something time consuming).
84035dc560e0 added #withExecuteCursorDo: (for completeness)
Claus Gittinger <cg@exept.de>
parents: 2172
diff changeset
  2812
     Return the result as returned by aBlock."
84035dc560e0 added #withExecuteCursorDo: (for completeness)
Claus Gittinger <cg@exept.de>
parents: 2172
diff changeset
  2813
84035dc560e0 added #withExecuteCursorDo: (for completeness)
Claus Gittinger <cg@exept.de>
parents: 2172
diff changeset
  2814
    ^ self withCursor:(Cursor execute) do:aBlock
84035dc560e0 added #withExecuteCursorDo: (for completeness)
Claus Gittinger <cg@exept.de>
parents: 2172
diff changeset
  2815
84035dc560e0 added #withExecuteCursorDo: (for completeness)
Claus Gittinger <cg@exept.de>
parents: 2172
diff changeset
  2816
    "Created: / 31.7.1998 / 20:11:52 / cg"
84035dc560e0 added #withExecuteCursorDo: (for completeness)
Claus Gittinger <cg@exept.de>
parents: 2172
diff changeset
  2817
!
84035dc560e0 added #withExecuteCursorDo: (for completeness)
Claus Gittinger <cg@exept.de>
parents: 2172
diff changeset
  2818
5922
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2819
withReadCursorDo:aBlock
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2820
    "evaluate aBlock while showing a readCursor in all
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2821
     my views (used to show read-cursor while reading a file).
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2822
     Return the result as returned by aBlock."
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2823
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2824
    ^ self withCursor:(Cursor read) do:aBlock
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2825
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2826
    "Created: / 27-07-2012 / 09:43:47 / cg"
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2827
!
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2828
408
bd946e47bc07 added #withCursor:do:
Claus Gittinger <cg@exept.de>
parents: 407
diff changeset
  2829
withWaitCursorDo:aBlock
bd946e47bc07 added #withCursor:do:
Claus Gittinger <cg@exept.de>
parents: 407
diff changeset
  2830
    "evaluate aBlock while showing a waitCursor in all
bd946e47bc07 added #withCursor:do:
Claus Gittinger <cg@exept.de>
parents: 407
diff changeset
  2831
     my views (used to show wait-cursor while doing something time consuming).
bd946e47bc07 added #withCursor:do:
Claus Gittinger <cg@exept.de>
parents: 407
diff changeset
  2832
     Return the result as returned by aBlock."
bd946e47bc07 added #withCursor:do:
Claus Gittinger <cg@exept.de>
parents: 407
diff changeset
  2833
bd946e47bc07 added #withCursor:do:
Claus Gittinger <cg@exept.de>
parents: 407
diff changeset
  2834
    ^ self withCursor:(Cursor wait) do:aBlock
bd946e47bc07 added #withCursor:do:
Claus Gittinger <cg@exept.de>
parents: 407
diff changeset
  2835
bd946e47bc07 added #withCursor:do:
Claus Gittinger <cg@exept.de>
parents: 407
diff changeset
  2836
    "Created: 6.2.1996 / 19:51:53 / cg"
5922
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2837
!
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2838
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2839
withWriteCursorDo:aBlock
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2840
    "evaluate aBlock while showing a writeCursor in all
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2841
     my views (used to show read-cursor while writing a file).
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2842
     Return the result as returned by aBlock."
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2843
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2844
    ^ self withCursor:(Cursor write) do:aBlock
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2845
Claus Gittinger <cg@exept.de>
parents: 5918
diff changeset
  2846
    "Created: / 27-07-2012 / 09:44:00 / cg"
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2847
! !
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2848
1110
3ffcd22497fd last event query signal
ca
parents: 956
diff changeset
  2849
!WindowGroup class methodsFor:'documentation'!
251
915de9a65169 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 244
diff changeset
  2850
915de9a65169 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 244
diff changeset
  2851
version
6638
953215a3f78d class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6619
diff changeset
  2852
    ^ '$Header: /cvs/stx/stx/libview/WindowGroup.st,v 1.335 2014-11-28 12:03:58 cg Exp $'
5364
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  2853
!
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  2854
6f4ceb2bc439 behavior of escape key, while a chain of popup-menus is open
Claus Gittinger <cg@exept.de>
parents: 5350
diff changeset
  2855
version_CVS
6638
953215a3f78d class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 6619
diff changeset
  2856
    ^ '$Header: /cvs/stx/stx/libview/WindowGroup.st,v 1.335 2014-11-28 12:03:58 cg Exp $'
251
915de9a65169 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 244
diff changeset
  2857
! !
3736
2be34b98b33a add lastEvent query
penk
parents: 3695
diff changeset
  2858
6023
4b20fb242062 class: WindowGroup
Claus Gittinger <cg@exept.de>
parents: 5948
diff changeset
  2859
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 221
diff changeset
  2860
WindowGroup initialize!