changeset 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 f7911991c5df
children 5349a0735fda
files dwtest.c os2/dw.c
diffstat 2 files changed, 25 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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);
 }
 
 /*