# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1044090929 0 # Node ID 767fca804cea2307ba0dd8b14722b9617f42c5dd # Parent f7911991c5df2f6c3841b2eb65b793c5d028e31d Fixed scrollbar value_change on OS/2... ID must be set on the scrollbar, similar to OS/2 container widgets. diff -r f7911991c5df -r 767fca804cea dwtest.c --- a/dwtest.c Sat Feb 01 08:30:20 2003 +0000 +++ b/dwtest.c Sat Feb 01 09:15:29 2003 +0000 @@ -178,7 +178,7 @@ dw_box_pack_start( pagebox, textbox2, font_width*width2, font_height*rows, TRUE, TRUE, 4); dw_window_set_font(textbox2, "9.WarpSans"); - scrollbar = dw_scrollbar_new(FALSE, 100, 0); + scrollbar = dw_scrollbar_new(FALSE, 100, 50); dw_box_pack_start( pagebox, scrollbar, 100, 20, TRUE, FALSE, 0); dw_scrollbar_set_range(scrollbar, 100, 50); dw_scrollbar_set_pos(scrollbar, 10); diff -r f7911991c5df -r 767fca804cea os2/dw.c --- a/os2/dw.c Sat Feb 01 08:30:20 2003 +0000 +++ b/os2/dw.c Sat Feb 01 09:15:29 2003 +0000 @@ -1871,7 +1871,7 @@ if(msg == WM_BUTTON2UP || msg == WM_BUTTON3UP) msg = WM_BUTTON1UP; if(msg == WM_VSCROLL || msg == WM_HSCROLL) - msg = SLN_SLIDERTRACK; + msg = WM_CONTROL; /* Find any callbacks for this function */ while(tmp) @@ -2050,9 +2050,14 @@ } break; case WM_CONTROL: - if(tmp->message == SHORT2FROMMP(mp1) || (tmp->message == SLN_SLIDERTRACK && SHORT2FROMMP(mp1) == SLN_CHANGE)) + if(origmsg == WM_VSCROLL || origmsg == WM_HSCROLL || tmp->message == SHORT2FROMMP(mp1) || + (tmp->message == SLN_SLIDERTRACK && SHORT2FROMMP(mp1) == SLN_CHANGE)) { - switch(SHORT2FROMMP(mp1)) + int svar = SLN_SLIDERTRACK; + if(origmsg == WM_CONTROL) + svar = SHORT2FROMMP(mp1); + + switch(svar) { case CN_ENTER: { @@ -2242,7 +2247,7 @@ { int (* API valuechangedfunc)(HWND, int, void *) = (int (* API)(HWND, int, void *))tmp->signalfunction; - if(origmsg == SLN_SLIDERTRACK) + if(origmsg == WM_CONTROL) { /* Handle Slider control */ if(tmp->window == hWnd || WinQueryWindow(tmp->window, QW_PARENT) == hWnd) @@ -2263,11 +2268,11 @@ else { /* Handle scrollbar control */ - if(tmp->window = hWnd) + if(tmp->window > 65535 && tmp->window == WinWindowFromID(hWnd, (ULONG)mp1)) { int pos = (int) SHORT1FROMMP(mp2); - dw_window_set_data(hWnd, "_dw_scrollbar_value", (void *)pos); + dw_window_set_data(tmp->window, "_dw_scrollbar_value", (void *)pos); result = valuechangedfunc(tmp->window, pos, tmp->data); tmp = NULL; } @@ -2295,6 +2300,8 @@ switch(msg) { + case WM_VSCROLL: + case WM_HSCROLL: case WM_CONTROL: _run_event(hWnd, msg, mp1, mp2); break; @@ -4327,20 +4334,17 @@ */ HWND API dw_scrollbar_new(int vertical, int increments, ULONG id) { - HWND tmp; - - tmp = WinCreateWindow(HWND_OBJECT, - WC_SCROLLBAR, - "", - WS_VISIBLE | SBS_AUTOTRACK | - (vertical ? SBS_VERT : SBS_HORZ), - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - return tmp; + return WinCreateWindow(HWND_OBJECT, + WC_SCROLLBAR, + "", + WS_VISIBLE | SBS_AUTOTRACK | + (vertical ? SBS_VERT : SBS_HORZ), + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); } /*