6666
6767// PRIVATE FUNCTIONS //////////////////////////////////////////////////////////
6868
69+ static Bool buttonTriggersOnMouseDown (GameWindow *window)
70+ {
71+ // Buttons with the on down status set trigger on mouse down. jba. [8/6/2003]
72+ Bool onDown = BitIsSet ( window->winGetStatus (), WIN_STATUS_ON_MOUSE_DOWN);
73+
74+ // Checkboxes always trigger on mouse down. jba [8/6/2003]
75+ if (BitIsSet ( window->winGetStatus (), WIN_STATUS_CHECK_LIKE )) {
76+ onDown = true ;
77+ }
78+ return onDown;
79+ }
80+
6981// GadgetPushButtonInput ======================================================
7082/* * Handle input for push button */
7183// =============================================================================
@@ -171,8 +183,6 @@ WindowMsgHandledType GadgetPushButtonInput( GameWindow *window,
171183 else
172184 BitSet ( instData->m_state , WIN_STATE_SELECTED );
173185
174- TheWindowManager->winSendSystemMsg ( instData->getOwner (), GBM_SELECTED,
175- (WindowMsgData)window, mData1 );
176186
177187 }
178188 else
@@ -183,6 +193,11 @@ WindowMsgHandledType GadgetPushButtonInput( GameWindow *window,
183193
184194 }
185195
196+ if (buttonTriggersOnMouseDown (window)) {
197+ TheWindowManager->winSendSystemMsg ( instData->getOwner (), GBM_SELECTED,
198+ (WindowMsgData)window, mData1 );
199+ }
200+
186201 break ;
187202 }
188203
@@ -198,8 +213,11 @@ WindowMsgHandledType GadgetPushButtonInput( GameWindow *window,
198213 BitIsSet ( window->winGetStatus (), WIN_STATUS_CHECK_LIKE ) == FALSE )
199214 {
200215
201- TheWindowManager->winSendSystemMsg ( instData->getOwner (), GBM_SELECTED,
202- (WindowMsgData)window, mData1 );
216+ if (!buttonTriggersOnMouseDown (window)) {
217+ // If it didn't trigger on mouse down, trigger on the mouse up. jba [8/6/2003]
218+ TheWindowManager->winSendSystemMsg ( instData->getOwner (), GBM_SELECTED,
219+ (WindowMsgData)window, mData1 );
220+ }
203221
204222 BitClear ( instData->m_state , WIN_STATE_SELECTED );
205223
0 commit comments