TreeView should not send two click notifications when bTrack is true.
[wine] / dlls / comctl32 / draglist.c
1 /*
2  * Drag List control
3  *
4  * Copyright 1999 Eric Kohl
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  * NOTES
21  *   This is just a dummy control. An author is needed! Any volunteers?
22  *   I will only improve this control once in a while.
23  *     Eric <ekohl@abo.rhein-zeitung.de>
24  *
25  * TODO:
26  *   - Everything.
27  */
28
29 #include "commctrl.h"
30 #include "wine/debug.h"
31
32 WINE_DEFAULT_DEBUG_CHANNEL(commctrl);
33
34
35 static DWORD dwLastScrollTime = 0;
36
37 /***********************************************************************
38  *              MakeDragList (COMCTL32.13)
39  */
40 BOOL WINAPI MakeDragList (HWND hwndLB)
41 {
42     FIXME("(%p)\n", hwndLB);
43
44
45     return FALSE;
46 }
47
48 /***********************************************************************
49  *              DrawInsert (COMCTL32.15)
50  */
51 VOID WINAPI DrawInsert (HWND hwndParent, HWND hwndLB, INT nItem)
52 {
53     FIXME("(%p %p %d)\n", hwndParent, hwndLB, nItem);
54
55
56 }
57
58 /***********************************************************************
59  *              LBItemFromPt (COMCTL32.14)
60  */
61 INT WINAPI LBItemFromPt (HWND hwndLB, POINT pt, BOOL bAutoScroll)
62 {
63     RECT rcClient;
64     INT nIndex;
65     DWORD dwScrollTime;
66
67     FIXME("(%p %ld x %ld %s)\n",
68            hwndLB, pt.x, pt.y, bAutoScroll ? "TRUE" : "FALSE");
69
70     ScreenToClient (hwndLB, &pt);
71     GetClientRect (hwndLB, &rcClient);
72     nIndex = (INT)SendMessageA (hwndLB, LB_GETTOPINDEX, 0, 0);
73
74     if (PtInRect (&rcClient, pt))
75     {
76         /* point is inside -- get the item index */
77         while (TRUE)
78         {
79             if (SendMessageA (hwndLB, LB_GETITEMRECT, nIndex, (LPARAM)&rcClient) == LB_ERR)
80                 return -1;
81
82             if (PtInRect (&rcClient, pt))
83                 return nIndex;
84
85             nIndex++;
86         }
87     }
88     else
89     {
90         /* point is outside */
91         if (!bAutoScroll)
92             return -1;
93
94         if ((pt.x > rcClient.right) || (pt.x < rcClient.left))
95             return -1;
96
97         if (pt.y < 0)
98             nIndex--;
99         else
100             nIndex++;
101
102         dwScrollTime = GetTickCount ();
103
104         if ((dwScrollTime - dwLastScrollTime) < 200)
105             return -1;
106
107         dwLastScrollTime = dwScrollTime;
108
109         SendMessageA (hwndLB, LB_SETTOPINDEX, (WPARAM)nIndex, 0);
110     }
111
112     return -1;
113 }
114
115
116 #if 0
117 static LRESULT CALLBACK
118 DRAGLIST_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
119 {
120
121     return FALSE;
122 }
123 #endif
124
125
126