summaryrefslogtreecommitdiff
path: root/src/lib/ecore_win32
diff options
context:
space:
mode:
authorVincent Torri <vincent dot torri at gmail dot com>2015-10-15 23:11:28 +0200
committerCedric BAIL <cedric@osg.samsung.com>2015-12-01 12:13:12 -0800
commitabf4364b3085d4717187154491f2040ae4d4ce66 (patch)
treedda378efb18148e11029afcb7e2ee1c0a53ca31d /src/lib/ecore_win32
parent9e5852fcfb3f3ef7def4908c9f3d8c0c8b1c25f4 (diff)
ecore_win32: add clipboard management
@feature Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Diffstat (limited to 'src/lib/ecore_win32')
-rw-r--r--src/lib/ecore_win32/Ecore_Win32.h114
-rw-r--r--src/lib/ecore_win32/ecore_win32.c53
-rw-r--r--src/lib/ecore_win32/ecore_win32_clipboard.c188
-rw-r--r--src/lib/ecore_win32/ecore_win32_event.c70
-rw-r--r--src/lib/ecore_win32/ecore_win32_private.h1
5 files changed, 419 insertions, 7 deletions
diff --git a/src/lib/ecore_win32/Ecore_Win32.h b/src/lib/ecore_win32/Ecore_Win32.h
index 154ede87b6..0e0582ba96 100644
--- a/src/lib/ecore_win32/Ecore_Win32.h
+++ b/src/lib/ecore_win32/Ecore_Win32.h
@@ -129,6 +129,21 @@ typedef enum
129} Ecore_Win32_DnD_State; 129} Ecore_Win32_DnD_State;
130 130
131/** 131/**
132 * @typedef Ecore_Win32_Selection
133 * Type of the selection.
134 *
135 * @since 1.16
136 */
137typedef enum
138{
139 ECORE_WIN32_SELECTION_PRIMARY,
140 ECORE_WIN32_SELECTION_SECONDARY,
141 ECORE_WIN32_SELECTION_DND,
142 ECORE_WIN32_SELECTION_CLIPBOARD,
143 ECORE_WIN32_SELECTION_OTHER
144} Ecore_Win32_Selection;
145
146/**
132 * @typedef Ecore_Win32_Window 147 * @typedef Ecore_Win32_Window
133 * Abstract type for a window. 148 * Abstract type for a window.
134 */ 149 */
@@ -214,6 +229,22 @@ typedef struct _Ecore_Win32_Event_Window_Resize Ecore_Win32_Event_Window
214typedef struct _Ecore_Win32_Event_Window_Delete_Request Ecore_Win32_Event_Window_Delete_Request; 229typedef struct _Ecore_Win32_Event_Window_Delete_Request Ecore_Win32_Event_Window_Delete_Request;
215 230
216/** 231/**
232 * @typedef Ecore_Win32_Event_Selection_Clear
233 * Event sent when the content of the clipboard has been removed.
234 *
235 * @since 1.16
236 */
237typedef struct _Ecore_Win32_Event_Selection_Clear Ecore_Win32_Event_Selection_Clear;
238
239/**
240 * @typedef Ecore_Win32_Event_Selection_Notify
241 * Event sent when the content of the clipboard has been added.
242 *
243 * @since 1.16
244 */
245typedef struct _Ecore_Win32_Event_Selection_Notify Ecore_Win32_Event_Selection_Notify;
246
247/**
217 * @struct _Ecore_Win32_Event_Mouse_In 248 * @struct _Ecore_Win32_Event_Mouse_In
218 * Event sent when the mouse enters the window. 249 * Event sent when the mouse enters the window.
219 */ 250 */
@@ -351,6 +382,33 @@ struct _Ecore_Win32_Event_Window_Delete_Request
351}; 382};
352 383
353/** 384/**
385 * @struct _Ecore_Win32_Event_Selection_Clear
386 * Event sent when the content of the clipboard has been removed.
387 *
388 * @since 1.16
389 */
390struct _Ecore_Win32_Event_Selection_Clear
391{
392 Ecore_Win32_Window *window; /**< The window that received the event */
393 unsigned long timestamp; /**< The time the event occurred */
394 Ecore_Win32_Selection selection; /**< The type of the selection */
395};
396
397/**
398 * @struct _Ecore_Win32_Event_Selection_Notify
399 * Event sent when the content of the clipboard has been added.
400 *
401 * @since 1.16
402 */
403struct _Ecore_Win32_Event_Selection_Notify
404{
405 Ecore_Win32_Window *window; /**< The window that received the event */
406 unsigned long timestamp; /**< The time the event occurred */
407 Ecore_Win32_Selection selection; /**< The type of the selection */
408 void *data; /**< The data of the selection */
409};
410
411/**
354 * @typedef Ecore_Win32_Dnd_DropTarget_Callback 412 * @typedef Ecore_Win32_Dnd_DropTarget_Callback
355 * Callback type for Drop operations. See ecore_win32_dnd_register_drop_target(). 413 * Callback type for Drop operations. See ecore_win32_dnd_register_drop_target().
356 */ 414 */
@@ -368,6 +426,8 @@ EAPI extern int ECORE_WIN32_EVENT_WINDOW_SHOW; /**< Ecore_Event for the Ecore_Wi
368EAPI extern int ECORE_WIN32_EVENT_WINDOW_CONFIGURE; /**< Ecore_Event for the Ecore_Win32_Event_Configure event */ 426EAPI extern int ECORE_WIN32_EVENT_WINDOW_CONFIGURE; /**< Ecore_Event for the Ecore_Win32_Event_Configure event */
369EAPI extern int ECORE_WIN32_EVENT_WINDOW_RESIZE; /**< Ecore_Event for the Ecore_Win32_Event_Resize event */ 427EAPI extern int ECORE_WIN32_EVENT_WINDOW_RESIZE; /**< Ecore_Event for the Ecore_Win32_Event_Resize event */
370EAPI extern int ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST; /**< Ecore_Event for the #Ecore_Win32_Event_Window_Delete_Request event */ 428EAPI extern int ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST; /**< Ecore_Event for the #Ecore_Win32_Event_Window_Delete_Request event */
429EAPI extern int ECORE_WIN32_EVENT_SELECTION_CLEAR; /**< Ecore_Event for the #Ecore_Win32_Event_Selection_Clear event @since 1.16 */
430EAPI extern int ECORE_WIN32_EVENT_SELECTION_NOTIFY; /**< Ecore_Event for the #Ecore_Win32_Event_Selection_Notify event @since 1.16 */
371 431
372 432
373/* Core */ 433/* Core */
@@ -516,6 +576,60 @@ EAPI Eina_Bool ecore_win32_dnd_register_drop_target(Ecore_Win32_Window
516 Ecore_Win32_Dnd_DropTarget_Callback callback); 576 Ecore_Win32_Dnd_DropTarget_Callback callback);
517EAPI void ecore_win32_dnd_unregister_drop_target(Ecore_Win32_Window *window); 577EAPI void ecore_win32_dnd_unregister_drop_target(Ecore_Win32_Window *window);
518 578
579/* Clipboard */
580
581/**
582 * @brief Set data to the clipboard.
583 *
584 * @param[in] window The window that owns the clipboard.
585 * @param[in] data The data to set.
586 * @param[in] size The size of the data.
587 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
588 *
589 * This function sets @p data of size @p size in the clipboard owned by
590 * @p window. This function returns #EINA_TRUE on success, and
591 * #EINA_FALSE otherwise. If @p window or @p data are @c NULL, or @p size
592 * is less than or equal to 0, this function returns #EINA_FALSE.
593 *
594 * @since 1.16
595 */
596EAPI Eina_Bool ecore_win32_clipboard_set(const Ecore_Win32_Window *window,
597 const void *data,
598 int size);
599
600/**
601 * @brief Get data from the clipboard.
602 *
603 * @param[in] window The window that owns the clipboard.
604 * @param[out] data The retrieved data.
605 * @param[out] size The size of the data.
606 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
607 *
608 * This function gets @p data of size @p size from the clipboard owned by
609 * @p window. This function returns #EINA_TRUE on success, and
610 * #EINA_FALSE otherwise. If @p window is @c NULL, this function returns
611 * #EINA_FALSE. @p data and @p size must be valid buffers.
612 *
613 * @since 1.16
614 */
615EAPI Eina_Bool ecore_win32_clipboard_get(const Ecore_Win32_Window *window,
616 void **data,
617 int *size);
618
619/**
620 * @brief Cleat the clipboard.
621 *
622 * @param[in] window The window that owns the clipboard.
623 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
624 *
625 * This function clears the clipboard owned by @p window. This
626 * function returns #EINA_TRUE on success, and #EINA_FALSE otherwise.
627 * If @p window is @c NULL, this function returns #EINA_FALSE.
628 *
629 * @since 1.16
630 */
631EAPI Eina_Bool ecore_win32_clipboard_clear(const Ecore_Win32_Window *window);
632
519/** 633/**
520 * @} 634 * @}
521 */ 635 */
diff --git a/src/lib/ecore_win32/ecore_win32.c b/src/lib/ecore_win32/ecore_win32.c
index 37b79565b4..cdee3916ee 100644
--- a/src/lib/ecore_win32/ecore_win32.c
+++ b/src/lib/ecore_win32/ecore_win32.c
@@ -24,10 +24,18 @@
24 * @cond LOCAL 24 * @cond LOCAL
25 */ 25 */
26 26
27/* FIXME: uncomment when mingw-w64 will be updated in win-builds */
28
29/* #if _WIN32_WINNT >= 0x0600 */
30/* # ifndef WM_CLIPBOARDUPDATE */
31# define WM_CLIPBOARDUPDATE 0x031D
32/* # endif */
33/* #endif */
34
27/* OLE IID for Drag'n Drop */ 35/* OLE IID for Drag'n Drop */
28 36
29# define INITGUID 37#define INITGUID
30# include <basetyps.h> 38#include <basetyps.h>
31DEFINE_OLEGUID(IID_IEnumFORMATETC, 0x00000103L, 0, 0); 39DEFINE_OLEGUID(IID_IEnumFORMATETC, 0x00000103L, 0, 0);
32DEFINE_OLEGUID(IID_IDataObject, 0x0000010EL, 0, 0); 40DEFINE_OLEGUID(IID_IDataObject, 0x0000010EL, 0, 0);
33DEFINE_OLEGUID(IID_IDropSource, 0x00000121L, 0, 0); 41DEFINE_OLEGUID(IID_IDropSource, 0x00000121L, 0, 0);
@@ -36,7 +44,10 @@ DEFINE_OLEGUID(IID_IUnknown, 0x00000000L, 0, 0);
36 44
37#define IDI_ICON 101 45#define IDI_ICON 101
38 46
39static int _ecore_win32_init_count = 0; 47typedef BOOL WINAPI (*efl_AddClipboardFormatListener)(_In_ HWND hwnd);
48typedef BOOL WINAPI (*efl_RemoveClipboardFormatListener)(_In_ HWND hwnd);
49
50static int _ecore_win32_init_count = 0;
40 51
41LRESULT CALLBACK 52LRESULT CALLBACK
42_ecore_win32_window_procedure(HWND window, 53_ecore_win32_window_procedure(HWND window,
@@ -194,13 +205,33 @@ _ecore_win32_window_procedure(HWND window,
194 return 0; 205 return 0;
195 /* Window notifications */ 206 /* Window notifications */
196 case WM_CREATE: 207 case WM_CREATE:
197 INF("create window message"); 208 {
209 efl_AddClipboardFormatListener acfl;
210
211 INF("create window message");
212 acfl = (efl_AddClipboardFormatListener)GetProcAddress(GetModuleHandle("user32.dll"),
213 "AddClipboardFormatListener");
214 if (acfl)
215 {
216 if (!acfl(window))
217 INF("can not create clipboard format listener; no clipboard notification will be sent");
218 }
198 _ecore_win32_event_handle_create_notify(data); 219 _ecore_win32_event_handle_create_notify(data);
199 return 0; 220 return 0;
221 }
200 case WM_DESTROY: 222 case WM_DESTROY:
201 INF("destroy window message"); 223 {
202 _ecore_win32_event_handle_destroy_notify(data); 224 efl_RemoveClipboardFormatListener rcfl;
203 return 0; 225
226 INF("destroy window message");
227 _ecore_win32_event_handle_destroy_notify(data);
228
229 rcfl = (efl_RemoveClipboardFormatListener)GetProcAddress(GetModuleHandle("user32.dll"),
230 "RemoveClipboardFormatListener");
231 if (rcfl)
232 rcfl(window);
233 return 0;
234 }
204 case WM_SHOWWINDOW: 235 case WM_SHOWWINDOW:
205 INF("show window message"); 236 INF("show window message");
206 if ((data->data_param == SW_OTHERUNZOOM) || 237 if ((data->data_param == SW_OTHERUNZOOM) ||
@@ -299,6 +330,10 @@ _ecore_win32_window_procedure(HWND window,
299 return 0; 330 return 0;
300 } 331 }
301 return DefWindowProc(window, message, window_param, data_param); 332 return DefWindowProc(window, message, window_param, data_param);
333 case WM_CLIPBOARDUPDATE:
334 INF("clipboard data updated");
335 _ecore_win32_event_handle_selection_notify(data);
336 return 0;
302 /* GDI notifications */ 337 /* GDI notifications */
303 case WM_PAINT: 338 case WM_PAINT:
304 { 339 {
@@ -358,6 +393,8 @@ int ECORE_WIN32_EVENT_WINDOW_HIDE = 0;
358int ECORE_WIN32_EVENT_WINDOW_CONFIGURE = 0; 393int ECORE_WIN32_EVENT_WINDOW_CONFIGURE = 0;
359int ECORE_WIN32_EVENT_WINDOW_RESIZE = 0; 394int ECORE_WIN32_EVENT_WINDOW_RESIZE = 0;
360int ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST = 0; 395int ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST = 0;
396int ECORE_WIN32_EVENT_SELECTION_CLEAR = 0;
397int ECORE_WIN32_EVENT_SELECTION_NOTIFY = 0;
361 398
362/*============================================================================* 399/*============================================================================*
363 * API * 400 * API *
@@ -504,6 +541,8 @@ ecore_win32_init()
504 ECORE_WIN32_EVENT_WINDOW_CONFIGURE = ecore_event_type_new(); 541 ECORE_WIN32_EVENT_WINDOW_CONFIGURE = ecore_event_type_new();
505 ECORE_WIN32_EVENT_WINDOW_RESIZE = ecore_event_type_new(); 542 ECORE_WIN32_EVENT_WINDOW_RESIZE = ecore_event_type_new();
506 ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST = ecore_event_type_new(); 543 ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST = ecore_event_type_new();
544 ECORE_WIN32_EVENT_SELECTION_CLEAR = ecore_event_type_new();
545 ECORE_WIN32_EVENT_SELECTION_NOTIFY = ecore_event_type_new();
507 } 546 }
508 547
509 return _ecore_win32_init_count; 548 return _ecore_win32_init_count;
diff --git a/src/lib/ecore_win32/ecore_win32_clipboard.c b/src/lib/ecore_win32/ecore_win32_clipboard.c
new file mode 100644
index 0000000000..a20be680c0
--- /dev/null
+++ b/src/lib/ecore_win32/ecore_win32_clipboard.c
@@ -0,0 +1,188 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
5#define WIN32_LEAN_AND_MEAN
6#include <windows.h>
7#undef WIN32_LEAN_AND_MEAN
8
9#include <Eina.h>
10
11#include "Ecore_Win32.h"
12#include "ecore_win32_private.h"
13
14/*============================================================================*
15 * Local *
16 *============================================================================*/
17
18/**
19 * @cond LOCAL
20 */
21
22
23
24/**
25 * @endcond
26 */
27
28
29/*============================================================================*
30 * Global *
31 *============================================================================*/
32
33
34/*============================================================================*
35 * API *
36 *============================================================================*/
37
38
39EAPI Eina_Bool
40ecore_win32_clipboard_set(const Ecore_Win32_Window *window,
41 const void *data,
42 int size)
43{
44 HGLOBAL global;
45 char *d;
46
47 /*
48 * See: https://msdn.microsoft.com/en-us/library/windows/desktop/ms649016%28v=vs.85%29.aspx#_win32_Copying_Information_to_the_Clipboard
49 * 1. Open the clipboard
50 * 2. Empty the clipboard
51 * 3. Set the data
52 * 4. Close the clipboard
53 */
54
55 INF("setting data to the clipboard");
56
57 if (!window || !data || (size <= 0))
58 return EINA_FALSE;
59
60 if (!OpenClipboard(window->window))
61 return EINA_FALSE;
62
63 if (!EmptyClipboard())
64 goto close_clipboard;
65
66 global = GlobalAlloc(GMEM_MOVEABLE, size + 1);
67 if (!global)
68 goto close_clipboard;
69
70 d = (char *)GlobalLock(global);
71 if (!d)
72 goto unlock_global;
73
74 memcpy(d, data, size);
75 d[size] = '\0';
76 GlobalUnlock(global);
77 SetClipboardData(CF_TEXT, global);
78 CloseClipboard();
79
80 return EINA_TRUE;
81
82 unlock_global:
83 GlobalUnlock(global);
84 close_clipboard:
85 CloseClipboard();
86
87 return EINA_FALSE;
88}
89
90EAPI Eina_Bool
91ecore_win32_clipboard_get(const Ecore_Win32_Window *window,
92 void **data,
93 int *size)
94{
95 HGLOBAL global;
96 void *d;
97 void *p;
98
99 /*
100 * See https://msdn.microsoft.com/en-us/library/windows/desktop/ms649016%28v=vs.85%29.aspx#_win32_Pasting_Information_from_the_Clipboard
101 * 1. Open Clipboard
102 * 2. Determine format
103 * 3. Retrieve data
104 * 4. Manage data
105 * 5. Close clipboard
106 */
107
108 INF("getting data from the clipboard");
109
110 if (!window)
111 return EINA_FALSE;
112
113 if (!IsClipboardFormatAvailable(CF_TEXT))
114 return EINA_FALSE;
115
116 if (!OpenClipboard(window->window))
117 goto set_val;
118
119 /* { */
120 /* UINT fmt = 0; */
121
122 /* while (1) */
123 /* { */
124 /* fmt = EnumClipboardFormats(fmt); */
125 /* printf(" $ Format : %x\n", fmt); */
126 /* if (!fmt) */
127 /* break; */
128 /* } */
129 /* } */
130
131 global = GetClipboardData(CF_TEXT);
132 if (!global)
133 goto close_clipboard;
134
135 d = GlobalLock(global);
136 if (!d)
137 goto unlock_global;
138
139 *size = strlen(d);
140 p = malloc(*size);
141 if (!p)
142 goto unlock_global;
143
144 memcpy(p, d, *size);
145 *data = p;
146 GlobalUnlock(global);
147 CloseClipboard();
148
149 return EINA_TRUE;
150
151 unlock_global:
152 GlobalUnlock(global);
153 close_clipboard:
154 CloseClipboard();
155 set_val:
156 *data = NULL;
157 *size = 0;
158
159 return EINA_FALSE;
160}
161
162EAPI Eina_Bool
163ecore_win32_clipboard_clear(const Ecore_Win32_Window *window)
164{
165 INF("clearing the clipboard");
166
167 if (!window)
168 return EINA_FALSE;
169
170 if (!OpenClipboard(window->window))
171 return EINA_FALSE;
172
173 if (!EmptyClipboard())
174 goto close_clipboard;
175
176 CloseClipboard();
177
178 return EINA_TRUE;
179
180 close_clipboard:
181 CloseClipboard();
182
183 return EINA_FALSE;
184}
185
186/**
187 * @}
188 */
diff --git a/src/lib/ecore_win32/ecore_win32_event.c b/src/lib/ecore_win32/ecore_win32_event.c
index 99ad2d49bf..b5f0d604ed 100644
--- a/src/lib/ecore_win32/ecore_win32_event.c
+++ b/src/lib/ecore_win32/ecore_win32_event.c
@@ -40,6 +40,7 @@ static int _ecore_win32_mouse_down_did_triple = 0;
40static int _ecore_win32_mouse_up_count = 0; 40static int _ecore_win32_mouse_up_count = 0;
41static Ecore_Win32_Key_Mask _ecore_win32_key_mask = 0; 41static Ecore_Win32_Key_Mask _ecore_win32_key_mask = 0;
42static Eina_Bool _ecore_win32_ctrl_fake = EINA_FALSE; 42static Eina_Bool _ecore_win32_ctrl_fake = EINA_FALSE;
43static Eina_Bool _ecore_win32_clipboard_has_data = EINA_FALSE;
43 44
44static unsigned int 45static unsigned int
45_ecore_win32_modifiers_get(void) 46_ecore_win32_modifiers_get(void)
@@ -1895,3 +1896,72 @@ _ecore_win32_event_handle_delete_request(Ecore_Win32_Callback_Data *msg)
1895 1896
1896 ecore_event_add(ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST, e, NULL, NULL); 1897 ecore_event_add(ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST, e, NULL, NULL);
1897} 1898}
1899
1900void
1901_ecore_win32_event_handle_selection_notify(Ecore_Win32_Callback_Data *msg)
1902{
1903 Ecore_Win32_Event_Selection_Notify *e;
1904 HGLOBAL global;
1905 char *str;
1906
1907 INF("selection_notify");
1908
1909 /*
1910 * we have text data in clipboard but no data before,
1911 * so text data has just been added
1912 */
1913 if (IsClipboardFormatAvailable(CF_TEXT) && !_ecore_win32_clipboard_has_data)
1914 {
1915 e = calloc(1, sizeof(Ecore_Win32_Event_Selection_Notify));
1916 if (!e) return;
1917
1918 e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA);
1919 e->timestamp = _ecore_win32_event_last_time;
1920 e->selection = ECORE_WIN32_SELECTION_CLIPBOARD;
1921
1922 if (!OpenClipboard(msg->window))
1923 goto free_e;
1924
1925 global = GetClipboardData(CF_TEXT);
1926 if (!global)
1927 goto close_clipboard;
1928
1929 str = GlobalLock(global);
1930 if (str)
1931 {
1932 e->data = strdup(str);
1933 GlobalUnlock(global);
1934 }
1935
1936 CloseClipboard();
1937
1938 ecore_event_add(ECORE_WIN32_EVENT_SELECTION_NOTIFY, e, NULL, NULL);
1939
1940 _ecore_win32_clipboard_has_data = EINA_TRUE;
1941 }
1942
1943 /*
1944 * we have no more text data in clipboard and data before,
1945 * so text data has just been removed
1946 */
1947 if (!IsClipboardFormatAvailable(CF_TEXT) && _ecore_win32_clipboard_has_data)
1948 {
1949 e = calloc(1, sizeof(Ecore_Win32_Event_Selection_Clear));
1950 if (!e) return;
1951
1952 e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA);
1953 e->timestamp = _ecore_win32_event_last_time;
1954 e->selection = ECORE_WIN32_SELECTION_CLIPBOARD;
1955
1956 ecore_event_add(ECORE_WIN32_EVENT_SELECTION_CLEAR, e, NULL, NULL);
1957
1958 _ecore_win32_clipboard_has_data = EINA_FALSE;
1959 }
1960
1961 return;
1962
1963 close_clipboard:
1964 CloseClipboard();
1965 free_e:
1966 free(e);
1967}
diff --git a/src/lib/ecore_win32/ecore_win32_private.h b/src/lib/ecore_win32/ecore_win32_private.h
index 1e2bb1bd19..23af65ad98 100644
--- a/src/lib/ecore_win32/ecore_win32_private.h
+++ b/src/lib/ecore_win32/ecore_win32_private.h
@@ -164,6 +164,7 @@ void _ecore_win32_event_handle_unmap_notify(Ecore_Win32_Callback_Data *msg);
164void _ecore_win32_event_handle_configure_notify(Ecore_Win32_Callback_Data *msg); 164void _ecore_win32_event_handle_configure_notify(Ecore_Win32_Callback_Data *msg);
165void _ecore_win32_event_handle_resize(Ecore_Win32_Callback_Data *msg); 165void _ecore_win32_event_handle_resize(Ecore_Win32_Callback_Data *msg);
166void _ecore_win32_event_handle_delete_request(Ecore_Win32_Callback_Data *msg); 166void _ecore_win32_event_handle_delete_request(Ecore_Win32_Callback_Data *msg);
167void _ecore_win32_event_handle_selection_notify(Ecore_Win32_Callback_Data *msg);
167 168
168void *_ecore_win32_dnd_data_object_new(void *fmtetc, void *stgmeds, int count); 169void *_ecore_win32_dnd_data_object_new(void *fmtetc, void *stgmeds, int count);
169void _ecore_win32_dnd_data_object_free(void *data_object); 170void _ecore_win32_dnd_data_object_free(void *data_object);