Files
TransPyC/includes/fltk/cfltk/fltk.patch
T
TermiNexus 6892183cc9 feat(fltk): 新增 FLTK 1.4 纯 extern FFI 绑定库(对接 cfltk C API)
- 生成 24 个 _cfl*.vp(10327 条 extern 声明)+ _types/_enums 常量

- __init__.vp 提供 Fl/Fl_Widget/Fl_Window/Fl_Button/Fl_Input/Fl_Text_Buffer/Fl_Group/Fl_Menu_Bar/Fl_Native_File_Chooser 等包装类

- 回调(Fl_Callback)按 bytes 不透明处理,菜单回调位传 t.CPtr(0)

- 新增 examples/hello.vp、dialog.vp 冒烟样例,26 个 .vp 全部通过 vast parse

- 内嵌 cfltk(C API 封装)与 FLTK 1.4 完整源码,构建目标 cfltk2
2026-09-01 19:53:54 +08:00

63 lines
2.3 KiB
Diff

diff --git a/src/Fl_win32.cxx b/src/Fl_win32.cxx
index e7539737f..e7d92a206 100644
--- a/src/Fl_win32.cxx
+++ b/src/Fl_win32.cxx
@@ -572,16 +572,16 @@ class Fl_Win32_At_Exit {
public:
Fl_Win32_At_Exit() {}
~Fl_Win32_At_Exit() {
- fl_free_fonts(); // do some Windows cleanup
- fl_cleanup_pens();
- OleUninitialize();
- if (fl_graphics_driver) fl_brush_action(1);
- fl_cleanup_dc_list();
- // This is actually too late in the cleanup process to remove the
- // clipboard notifications, but we have no earlier hook so we try
- // to work around it anyway.
- if (clipboard_wnd != NULL)
- fl_clipboard_notify_untarget(clipboard_wnd);
+ // fl_free_fonts(); // do some Windows cleanup
+ // fl_cleanup_pens();
+ // OleUninitialize();
+ // if (fl_graphics_driver) fl_brush_action(1);
+ // fl_cleanup_dc_list();
+ // // This is actually too late in the cleanup process to remove the
+ // // clipboard notifications, but we have no earlier hook so we try
+ // // to work around it anyway.
+ // if (clipboard_wnd != NULL)
+ // fl_clipboard_notify_untarget(clipboard_wnd);
#if USE_GDIPLUS
Fl_GDIplus_Graphics_Driver::shutdown();
#endif
@@ -1200,6 +1200,8 @@ static Fl_Window *resize_bug_fix;
extern void fl_save_pen(void);
extern void fl_restore_pen(void);
+static bool left_window = true;
+
static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
// Copy the message to fl_msg so add_handler code can see it.
@@ -1373,6 +1375,14 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
}
case WM_MOUSEMOVE:
+ if (left_window) {
+ Fl_Window *tw = window;
+ while (tw->parent()) // find top level window
+ tw = tw->window();
+ Fl::handle(FL_ENTER, tw);
+ left_window = false;
+ return 0;
+ }
#ifdef USE_TRACK_MOUSE
if (track_mouse_win != window) {
TRACKMOUSEEVENT tme;
@@ -1392,6 +1402,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
while (tw->parent()) // find top level window
tw = tw->window();
Fl::belowmouse(0);
+ left_window = true;
Fl::handle(FL_LEAVE, tw);
}
track_mouse_win = 0; // force TrackMouseEvent() restart