comparison os2/dw.c @ 207:767fca804cea

Fixed scrollbar value_change on OS/2... ID must be set on the scrollbar, similar to OS/2 container widgets.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sat, 01 Feb 2003 09:15:29 +0000
parents e0beea487e8f
children b9c7b762c104
comparison
equal deleted inserted replaced
206:f7911991c5df 207:767fca804cea
1869 if(msg == WM_BUTTON2DOWN || msg == WM_BUTTON3DOWN) 1869 if(msg == WM_BUTTON2DOWN || msg == WM_BUTTON3DOWN)
1870 msg = WM_BUTTON1DOWN; 1870 msg = WM_BUTTON1DOWN;
1871 if(msg == WM_BUTTON2UP || msg == WM_BUTTON3UP) 1871 if(msg == WM_BUTTON2UP || msg == WM_BUTTON3UP)
1872 msg = WM_BUTTON1UP; 1872 msg = WM_BUTTON1UP;
1873 if(msg == WM_VSCROLL || msg == WM_HSCROLL) 1873 if(msg == WM_VSCROLL || msg == WM_HSCROLL)
1874 msg = SLN_SLIDERTRACK; 1874 msg = WM_CONTROL;
1875 1875
1876 /* Find any callbacks for this function */ 1876 /* Find any callbacks for this function */
1877 while(tmp) 1877 while(tmp)
1878 { 1878 {
1879 if(tmp->message == msg || msg == WM_CONTROL || tmp->message == WM_USER+1) 1879 if(tmp->message == msg || msg == WM_CONTROL || tmp->message == WM_USER+1)
2048 tmp = NULL; 2048 tmp = NULL;
2049 } 2049 }
2050 } 2050 }
2051 break; 2051 break;
2052 case WM_CONTROL: 2052 case WM_CONTROL:
2053 if(tmp->message == SHORT2FROMMP(mp1) || (tmp->message == SLN_SLIDERTRACK && SHORT2FROMMP(mp1) == SLN_CHANGE)) 2053 if(origmsg == WM_VSCROLL || origmsg == WM_HSCROLL || tmp->message == SHORT2FROMMP(mp1) ||
2054 (tmp->message == SLN_SLIDERTRACK && SHORT2FROMMP(mp1) == SLN_CHANGE))
2054 { 2055 {
2055 switch(SHORT2FROMMP(mp1)) 2056 int svar = SLN_SLIDERTRACK;
2057 if(origmsg == WM_CONTROL)
2058 svar = SHORT2FROMMP(mp1);
2059
2060 switch(svar)
2056 { 2061 {
2057 case CN_ENTER: 2062 case CN_ENTER:
2058 { 2063 {
2059 int (* API containerselectfunc)(HWND, char *, void *) = (int (* API)(HWND, char *, void *))tmp->signalfunction; 2064 int (* API containerselectfunc)(HWND, char *, void *) = (int (* API)(HWND, char *, void *))tmp->signalfunction;
2060 int id = SHORT1FROMMP(mp1); 2065 int id = SHORT1FROMMP(mp1);
2240 break; 2245 break;
2241 case SLN_SLIDERTRACK: 2246 case SLN_SLIDERTRACK:
2242 { 2247 {
2243 int (* API valuechangedfunc)(HWND, int, void *) = (int (* API)(HWND, int, void *))tmp->signalfunction; 2248 int (* API valuechangedfunc)(HWND, int, void *) = (int (* API)(HWND, int, void *))tmp->signalfunction;
2244 2249
2245 if(origmsg == SLN_SLIDERTRACK) 2250 if(origmsg == WM_CONTROL)
2246 { 2251 {
2247 /* Handle Slider control */ 2252 /* Handle Slider control */
2248 if(tmp->window == hWnd || WinQueryWindow(tmp->window, QW_PARENT) == hWnd) 2253 if(tmp->window == hWnd || WinQueryWindow(tmp->window, QW_PARENT) == hWnd)
2249 { 2254 {
2250 static int lastvalue = -1; 2255 static int lastvalue = -1;
2261 } 2266 }
2262 } 2267 }
2263 else 2268 else
2264 { 2269 {
2265 /* Handle scrollbar control */ 2270 /* Handle scrollbar control */
2266 if(tmp->window = hWnd) 2271 if(tmp->window > 65535 && tmp->window == WinWindowFromID(hWnd, (ULONG)mp1))
2267 { 2272 {
2268 int pos = (int) SHORT1FROMMP(mp2); 2273 int pos = (int) SHORT1FROMMP(mp2);
2269 2274
2270 dw_window_set_data(hWnd, "_dw_scrollbar_value", (void *)pos); 2275 dw_window_set_data(tmp->window, "_dw_scrollbar_value", (void *)pos);
2271 result = valuechangedfunc(tmp->window, pos, tmp->data); 2276 result = valuechangedfunc(tmp->window, pos, tmp->data);
2272 tmp = NULL; 2277 tmp = NULL;
2273 } 2278 }
2274 } 2279 }
2275 } 2280 }
2293 { 2298 {
2294 Box *blah = WinQueryWindowPtr(hWnd, QWP_USER); 2299 Box *blah = WinQueryWindowPtr(hWnd, QWP_USER);
2295 2300
2296 switch(msg) 2301 switch(msg)
2297 { 2302 {
2303 case WM_VSCROLL:
2304 case WM_HSCROLL:
2298 case WM_CONTROL: 2305 case WM_CONTROL:
2299 _run_event(hWnd, msg, mp1, mp2); 2306 _run_event(hWnd, msg, mp1, mp2);
2300 break; 2307 break;
2301 } 2308 }
2302 2309
4325 * increments: Number of increments available. 4332 * increments: Number of increments available.
4326 * id: An ID to be used with WinWindowFromID() or 0L. 4333 * id: An ID to be used with WinWindowFromID() or 0L.
4327 */ 4334 */
4328 HWND API dw_scrollbar_new(int vertical, int increments, ULONG id) 4335 HWND API dw_scrollbar_new(int vertical, int increments, ULONG id)
4329 { 4336 {
4330 HWND tmp; 4337 return WinCreateWindow(HWND_OBJECT,
4331 4338 WC_SCROLLBAR,
4332 tmp = WinCreateWindow(HWND_OBJECT, 4339 "",
4333 WC_SCROLLBAR, 4340 WS_VISIBLE | SBS_AUTOTRACK |
4334 "", 4341 (vertical ? SBS_VERT : SBS_HORZ),
4335 WS_VISIBLE | SBS_AUTOTRACK | 4342 0,0,2000,1000,
4336 (vertical ? SBS_VERT : SBS_HORZ), 4343 NULLHANDLE,
4337 0,0,2000,1000, 4344 HWND_TOP,
4338 NULLHANDLE, 4345 id,
4339 HWND_TOP, 4346 NULL,
4340 id, 4347 NULL);
4341 NULL,
4342 NULL);
4343 return tmp;
4344 } 4348 }
4345 4349
4346 /* 4350 /*
4347 * Create a new percent bar window (widget) to be packed. 4351 * Create a new percent bar window (widget) to be packed.
4348 * Parameters: 4352 * Parameters: