diff options
Diffstat (limited to 'src/gui_w32.c')
-rw-r--r-- | src/gui_w32.c | 552 |
1 files changed, 148 insertions, 404 deletions
diff --git a/src/gui_w32.c b/src/gui_w32.c index 75d600fcb..be2158dc6 100644 --- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -319,7 +319,7 @@ static int destroying = FALSE; /* call DestroyWindow() ourselves */ #ifdef MSWIN_FIND_REPLACE static UINT s_findrep_msg = 0; /* set in gui_w[16/32].c */ static FINDREPLACE s_findrep_struct; -# if defined(FEAT_MBYTE) && defined(WIN3264) +# ifdef FEAT_MBYTE static FINDREPLACEW s_findrep_struct_w; # endif static HWND s_findrep_hwnd = NULL; @@ -369,7 +369,7 @@ static int allow_scrollbar = FALSE; # define MyTranslateMessage(x) TranslateMessage(x) #endif -#if (defined(WIN3264) && defined(FEAT_MBYTE)) || defined(GLOBAL_IME) +#if defined(FEAT_MBYTE) || defined(GLOBAL_IME) /* use of WindowProc depends on wide_WindowProc */ # define MyWindowProc vim_WindowProc #else @@ -473,10 +473,6 @@ static UINT s_wait_timer = 0; /* Timer for get char from user */ static int s_timed_out = FALSE; static int dead_key = 0; /* 0: no dead key, 1: dead key pressed */ -#ifdef WIN3264 -static OSVERSIONINFO os_version; /* like it says. Init in gui_mch_init() */ -#endif - #ifdef FEAT_BEVAL /* balloon-eval WM_NOTIFY_HANDLER */ static void Handle_WM_Notify(HWND hwnd, LPNMHDR pnmh); @@ -695,61 +691,41 @@ char_to_string(int ch, char_u *string, int slen, int had_alt) WCHAR wstring[2]; char_u *ws = NULL; - if (os_version.dwPlatformId != VER_PLATFORM_WIN32_NT) + wstring[0] = ch; + len = 1; + + /* "ch" is a UTF-16 character. Convert it to a string of bytes. When + * "enc_codepage" is non-zero use the standard Win32 function, + * otherwise use our own conversion function (e.g., for UTF-8). */ + if (enc_codepage > 0) { - /* On Windows 95/98 we apparently get the character in the active - * codepage, not in UCS-2. If conversion is needed convert it to - * UCS-2 first. */ - if ((int)GetACP() == enc_codepage) - len = 0; /* no conversion required */ - else + len = WideCharToMultiByte(enc_codepage, 0, wstring, len, + (LPSTR)string, slen, 0, NULL); + /* If we had included the ALT key into the character but now the + * upper bit is no longer set, that probably means the conversion + * failed. Convert the original character and set the upper bit + * afterwards. */ + if (had_alt && len == 1 && ch >= 0x80 && string[0] < 0x80) { - string[0] = ch; - len = MultiByteToWideChar(GetACP(), 0, (LPCSTR)string, - 1, wstring, 2); + wstring[0] = ch & 0x7f; + len = WideCharToMultiByte(enc_codepage, 0, wstring, len, + (LPSTR)string, slen, 0, NULL); + if (len == 1) /* safety check */ + string[0] |= 0x80; } } else { - wstring[0] = ch; len = 1; - } - - if (len > 0) - { - /* "ch" is a UTF-16 character. Convert it to a string of bytes. When - * "enc_codepage" is non-zero use the standard Win32 function, - * otherwise use our own conversion function (e.g., for UTF-8). */ - if (enc_codepage > 0) - { - len = WideCharToMultiByte(enc_codepage, 0, wstring, len, - (LPSTR)string, slen, 0, NULL); - /* If we had included the ALT key into the character but now the - * upper bit is no longer set, that probably means the conversion - * failed. Convert the original character and set the upper bit - * afterwards. */ - if (had_alt && len == 1 && ch >= 0x80 && string[0] < 0x80) - { - wstring[0] = ch & 0x7f; - len = WideCharToMultiByte(enc_codepage, 0, wstring, len, - (LPSTR)string, slen, 0, NULL); - if (len == 1) /* safety check */ - string[0] |= 0x80; - } - } + ws = utf16_to_enc(wstring, &len); + if (ws == NULL) + len = 0; else { - len = 1; - ws = utf16_to_enc(wstring, &len); - if (ws == NULL) - len = 0; - else - { - if (len > slen) /* just in case */ - len = slen; - mch_memmove(string, ws, len); - vim_free(ws); - } + if (len > slen) /* just in case */ + len = slen; + mch_memmove(string, ws, len); + vim_free(ws); } } @@ -1079,7 +1055,7 @@ _OnMenu( #endif #ifdef MSWIN_FIND_REPLACE -# if defined(FEAT_MBYTE) && defined(WIN3264) +# ifdef FEAT_MBYTE /* * copy useful data from structure LPFINDREPLACE to structure LPFINDREPLACEW */ @@ -1127,11 +1103,10 @@ _OnFindRepl(void) int flags = 0; int down; -# if defined(FEAT_MBYTE) && defined(WIN3264) +# ifdef FEAT_MBYTE /* If the OS is Windows NT, and 'encoding' differs from active codepage: * convert text from wide string. */ - if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && enc_codepage >= 0 && (int)GetACP() != enc_codepage) + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { findrep_wtoa(&s_findrep_struct, &s_findrep_struct_w); } @@ -1279,7 +1254,7 @@ _TextAreaWndProc( } } -#if (defined(WIN3264) && defined(FEAT_MBYTE)) \ +#if defined(FEAT_MBYTE) \ || defined(GLOBAL_IME) \ || defined(PROTO) # ifdef PROTO @@ -1586,10 +1561,9 @@ gui_mch_get_color(char_u *name) static SysColorTable sys_table[] = { -#ifdef WIN3264 {"SYS_3DDKSHADOW", COLOR_3DDKSHADOW}, {"SYS_3DHILIGHT", COLOR_3DHILIGHT}, -#ifndef __MINGW32__ +#ifdef COLOR_3DHIGHLIGHT {"SYS_3DHIGHLIGHT", COLOR_3DHIGHLIGHT}, #endif {"SYS_BTNHILIGHT", COLOR_BTNHILIGHT}, @@ -1600,7 +1574,6 @@ gui_mch_get_color(char_u *name) {"SYS_INFOBK", COLOR_INFOBK}, {"SYS_INFOTEXT", COLOR_INFOTEXT}, {"SYS_3DFACE", COLOR_3DFACE}, -#endif {"SYS_BTNFACE", COLOR_BTNFACE}, {"SYS_BTNSHADOW", COLOR_BTNSHADOW}, {"SYS_ACTIVEBORDER", COLOR_ACTIVEBORDER}, @@ -2094,11 +2067,7 @@ gui_mch_wait_for_chars(int wtime) if (s_need_activate) { -#ifdef WIN32 (void)SetForegroundWindow(s_hwnd); -#else - (void)SetActiveWindow(s_hwnd); -#endif s_need_activate = FALSE; } @@ -2421,7 +2390,6 @@ add_tabline_popup_menu_entry(HMENU pmenu, UINT item_id, char_u *item_text) { #ifdef FEAT_MBYTE WCHAR *wn = NULL; - int n; if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { @@ -2438,11 +2406,8 @@ add_tabline_popup_menu_entry(HMENU pmenu, UINT item_id, char_u *item_text) infow.fType = MFT_STRING; infow.dwTypeData = wn; infow.cch = (UINT)wcslen(wn); - n = InsertMenuItemW(pmenu, item_id, FALSE, &infow); + InsertMenuItemW(pmenu, item_id, FALSE, &infow); vim_free(wn); - if (n == 0 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - /* Failed, try using non-wide function. */ - wn = NULL; } } @@ -2563,7 +2528,7 @@ gui_mch_update_tabline(void) if (s_tabhwnd == NULL) return; -#if defined(FEAT_MBYTE) +#ifdef FEAT_MBYTE # ifndef CCM_SETUNICODEFORMAT /* For older compilers. We assume this never changes. */ # define CCM_SETUNICODEFORMAT 0x2005 @@ -2708,18 +2673,15 @@ set_window_title(HWND hwnd, char *title) if (title != NULL && enc_codepage >= 0 && enc_codepage != (int)GetACP()) { WCHAR *wbuf; - int n; /* Convert the title from 'encoding' to UTF-16. */ wbuf = (WCHAR *)enc_to_utf16((char_u *)title, NULL); if (wbuf != NULL) { - n = SetWindowTextW(hwnd, wbuf); + SetWindowTextW(hwnd, wbuf); vim_free(wbuf); - if (n != 0 || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return; - /* Retry with non-wide function (for Windows 98). */ } + return; } #endif (void)SetWindowText(hwnd, (LPCSTR)title); @@ -2737,11 +2699,10 @@ gui_mch_find_dialog(exarg_T *eap) if (!IsWindow(s_findrep_hwnd)) { initialise_findrep(eap->arg); -# if defined(FEAT_MBYTE) && defined(WIN3264) +# ifdef FEAT_MBYTE /* If the OS is Windows NT, and 'encoding' differs from active * codepage: convert text and use wide function. */ - if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && enc_codepage >= 0 && (int)GetACP() != enc_codepage) + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { findrep_atow(&s_findrep_struct_w, &s_findrep_struct); s_findrep_hwnd = FindTextW( @@ -2774,9 +2735,8 @@ gui_mch_replace_dialog(exarg_T *eap) if (!IsWindow(s_findrep_hwnd)) { initialise_findrep(eap->arg); -# if defined(FEAT_MBYTE) && defined(WIN3264) - if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && enc_codepage >= 0 && (int)GetACP() != enc_codepage) +# ifdef FEAT_MBYTE + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { findrep_atow(&s_findrep_struct_w, &s_findrep_struct); s_findrep_hwnd = ReplaceTextW( @@ -3466,11 +3426,7 @@ static LPCSTR mshape_idcs[] = IDC_SIZEWE, /* leftright */ IDC_SIZEWE, /* lrsizing */ IDC_WAIT, /* busy */ -#ifdef WIN3264 IDC_NO, /* no */ -#else - IDC_ICON, /* no */ -#endif IDC_ARROW, /* crosshair */ IDC_ARROW, /* hand1 */ IDC_ARROW, /* hand2 */ @@ -3497,11 +3453,7 @@ mch_set_mouse_shape(int shape) #ifdef SetClassLongPtr SetClassLongPtr(s_textArea, GCLP_HCURSOR, (__int3264)(LONG_PTR)LoadCursor(NULL, idc)); #else -# ifdef WIN32 SetClassLong(s_textArea, GCL_HCURSOR, (long_u)LoadCursor(NULL, idc)); -# else /* Win16 */ - SetClassWord(s_textArea, GCW_HCURSOR, (WORD)LoadCursor(NULL, idc)); -# endif #endif if (!p_mh) { @@ -3523,7 +3475,7 @@ mch_set_mouse_shape(int shape) * Windows NT/2000/XP the "W" functions are used. */ -# if defined(FEAT_MBYTE) && defined(WIN3264) +# ifdef FEAT_MBYTE /* * Wide version of convert_filter(). */ @@ -3728,17 +3680,15 @@ gui_mch_browse( char_u *initdir, char_u *filter) { +# ifdef FEAT_MBYTE + return gui_mch_browseW(saving, title, dflt, ext, initdir, filter); +# else OPENFILENAME fileStruct; char_u fileBuf[MAXPATHL]; char_u *initdirp = NULL; char_u *filterp; char_u *p; -# if defined(FEAT_MBYTE) && defined(WIN3264) - if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT) - return gui_mch_browseW(saving, title, dflt, ext, initdir, filter); -# endif - if (dflt == NULL) fileBuf[0] = NUL; else @@ -3748,12 +3698,12 @@ gui_mch_browse( filterp = convert_filter(filter); vim_memset(&fileStruct, 0, sizeof(OPENFILENAME)); -#ifdef OPENFILENAME_SIZE_VERSION_400 +# ifdef OPENFILENAME_SIZE_VERSION_400 /* be compatible with Windows NT 4.0 */ fileStruct.lStructSize = OPENFILENAME_SIZE_VERSION_400; -#else +# else fileStruct.lStructSize = sizeof(fileStruct); -#endif +# endif fileStruct.lpstrTitle = (LPSTR)title; fileStruct.lpstrDefExt = (LPSTR)ext; @@ -3783,10 +3733,10 @@ gui_mch_browse( * Don't use OFN_OVERWRITEPROMPT, Vim has its own ":confirm" dialog. */ fileStruct.Flags = (OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY); -#ifdef FEAT_SHORTCUT +# ifdef FEAT_SHORTCUT if (curbuf->b_p_bin) fileStruct.Flags |= OFN_NODEREFERENCELINKS; -#endif +# endif if (saving) { if (!GetSaveFileName(&fileStruct)) @@ -3806,6 +3756,7 @@ gui_mch_browse( /* Shorten the file name if possible */ return vim_strsave(shorten_fname1((char_u *)fileBuf)); +# endif } #endif /* FEAT_BROWSE */ @@ -3816,16 +3767,11 @@ _OnDropFiles( HDROP hDrop) { #ifdef FEAT_WINDOWS -#ifdef WIN3264 # define BUFPATHLEN _MAX_PATH # define DRAGQVAL 0xFFFFFFFF -#else -# define BUFPATHLEN MAXPATHL -# define DRAGQVAL 0xFFFF -#endif -#ifdef FEAT_MBYTE +# ifdef FEAT_MBYTE WCHAR wszFile[BUFPATHLEN]; -#endif +# endif char szFile[BUFPATHLEN]; UINT cFiles = DragQueryFile(hDrop, DRAGQVAL, NULL, 0); UINT i; @@ -3846,11 +3792,11 @@ _OnDropFiles( if (fnames != NULL) for (i = 0; i < cFiles; ++i) { -#ifdef FEAT_MBYTE +# ifdef FEAT_MBYTE if (DragQueryFileW(hDrop, i, wszFile, BUFPATHLEN) > 0) fnames[i] = utf16_to_enc(wszFile, NULL); else -#endif +# endif { DragQueryFile(hDrop, i, szFile, BUFPATHLEN); fnames[i] = vim_strsave((char_u *)szFile); @@ -3888,14 +3834,10 @@ _OnScroll( long val; int dragging = FALSE; int dont_scroll_save = dont_scroll; -#ifndef WIN3264 - int nPos; -#else SCROLLINFO si; si.cbSize = sizeof(si); si.fMask = SIF_POS; -#endif sb = gui_mswin_find_scrollbar(hwndCtl); if (sb == NULL) @@ -3960,13 +3902,8 @@ _OnScroll( } prev_code = code; -#ifdef WIN3264 si.nPos = (sb->scroll_shift > 0) ? val >> sb->scroll_shift : val; SetScrollInfo(hwndCtl, SB_CTL, &si, TRUE); -#else - nPos = (sb->scroll_shift > 0) ? val >> sb->scroll_shift : val; - SetScrollPos(hwndCtl, SB_CTL, nPos, TRUE); -#endif /* * When moving a vertical scrollbar, move the other vertical scrollbar too. @@ -3976,11 +3913,7 @@ _OnScroll( scrollbar_T *sba = sb->wp->w_scrollbars; HWND id = sba[ (sb == sba + SBAR_LEFT) ? SBAR_RIGHT : SBAR_LEFT].id; -#ifdef WIN3264 SetScrollInfo(id, SB_CTL, &si, TRUE); -#else - SetScrollPos(id, SB_CTL, nPos, TRUE); -#endif } /* Don't let us be interrupted here by another message. */ @@ -4448,7 +4381,6 @@ static int dialog_default_button = -1; /* Intellimouse support */ static int mouse_scroll_lines = 0; -static UINT msh_msgmousewheel = 0; static int s_usenewlook; /* emulate W95/NT4 non-bold dialogs */ #ifdef FEAT_TOOLBAR @@ -4505,34 +4437,6 @@ static void dyn_imm_load(void); # define pImmSetConversionStatus ImmSetConversionStatus #endif -/* multi monitor support */ -typedef struct _MONITORINFOstruct -{ - DWORD cbSize; - RECT rcMonitor; - RECT rcWork; - DWORD dwFlags; -} _MONITORINFO; - -typedef HANDLE _HMONITOR; -typedef _HMONITOR (WINAPI *TMonitorFromWindow)(HWND, DWORD); -typedef BOOL (WINAPI *TGetMonitorInfo)(_HMONITOR, _MONITORINFO *); - -static TMonitorFromWindow pMonitorFromWindow = NULL; -static TGetMonitorInfo pGetMonitorInfo = NULL; -static HANDLE user32_lib = NULL; -/* - * Return TRUE when running under Windows NT 3.x or Win32s, both of which have - * less fancy GUI APIs. - */ - static int -is_winnt_3(void) -{ - return ((os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && os_version.dwMajorVersion == 3) - || (os_version.dwPlatformId == VER_PLATFORM_WIN32s)); -} - #ifdef FEAT_MENU /* * Figure out how high the menu bar is at the moment. @@ -4564,45 +4468,20 @@ gui_mswin_get_menu_height( } else { - if (is_winnt_3()) /* for NT 3.xx */ - { - if (gui.starting) - menu_height = GetSystemMetrics(SM_CYMENU); - else - { - RECT r1, r2; - int frameht = GetSystemMetrics(SM_CYFRAME); - int capht = GetSystemMetrics(SM_CYCAPTION); - - /* get window rect of s_hwnd - * get client rect of s_hwnd - * get cap height - * subtract from window rect, the sum of client height, - * (if not maximized)frame thickness, and caption height. - */ - GetWindowRect(s_hwnd, &r1); - GetClientRect(s_hwnd, &r2); - menu_height = r1.bottom - r1.top - (r2.bottom - r2.top - + 2 * frameht * (!IsZoomed(s_hwnd)) + capht); - } - } - else /* win95 and variants (NT 4.0, I guess) */ + /* + * In case 'lines' is set in _vimrc/_gvimrc window width doesn't + * seem to have been set yet, so menu wraps in default window + * width which is very narrow. Instead just return height of a + * single menu item. Will still be wrong when the menu really + * should wrap over more than one line. + */ + GetMenuItemRect(s_hwnd, s_menuBar, 0, &rc1); + if (gui.starting) + menu_height = rc1.bottom - rc1.top + 1; + else { - /* - * In case 'lines' is set in _vimrc/_gvimrc window width doesn't - * seem to have been set yet, so menu wraps in default window - * width which is very narrow. Instead just return height of a - * single menu item. Will still be wrong when the menu really - * should wrap over more than one line. - */ - GetMenuItemRect(s_hwnd, s_menuBar, 0, &rc1); - if (gui.starting) - menu_height = rc1.bottom - rc1.top + 1; - else - { - GetMenuItemRect(s_hwnd, s_menuBar, num - 1, &rc2); - menu_height = rc2.bottom - rc1.top + 1; - } + GetMenuItemRect(s_hwnd, s_menuBar, num - 1, &rc2); + menu_height = rc2.bottom - rc1.top + 1; } } @@ -4636,42 +4515,11 @@ init_mouse_wheel(void) #define VMSH_MOUSEWHEEL "MSWHEEL_ROLLMSG" #define VMSH_SCROLL_LINES "MSH_SCROLL_LINES_MSG" - HWND hdl_mswheel; - UINT msh_msgscrolllines; - - msh_msgmousewheel = 0; mouse_scroll_lines = 3; /* reasonable default */ - if ((os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && os_version.dwMajorVersion >= 4) - || (os_version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS - && ((os_version.dwMajorVersion == 4 - && os_version.dwMinorVersion >= 10) - || os_version.dwMajorVersion >= 5))) - { - /* if NT 4.0+ (or Win98) get scroll lines directly from system */ - SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, - &mouse_scroll_lines, 0); - } - else if (os_version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS - || (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && os_version.dwMajorVersion < 4)) - { /* - * If Win95 or NT 3.51, - * try to find the hidden point32 window. - */ - hdl_mswheel = FindWindow(VMOUSEZ_CLASSNAME, VMOUSEZ_TITLE); - if (hdl_mswheel) - { - msh_msgscrolllines = RegisterWindowMessage(VMSH_SCROLL_LINES); - if (msh_msgscrolllines) - { - mouse_scroll_lines = (int)SendMessage(hdl_mswheel, - msh_msgscrolllines, 0, 0); - msh_msgmousewheel = RegisterWindowMessage(VMSH_MOUSEWHEEL); - } - } - } + /* if NT 4.0+ (or Win98) get scroll lines directly from system */ + SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, + &mouse_scroll_lines, 0); } @@ -5210,13 +5058,8 @@ _WndProc( #endif default: - if (uMsg == msh_msgmousewheel && msh_msgmousewheel != 0) - { /* handle MSH_MOUSEWHEEL messages for Intellimouse */ - _OnMouseWheel(hwnd, HIWORD(wParam)); - return 0L; - } #ifdef MSWIN_FIND_REPLACE - else if (uMsg == s_findrep_msg && s_findrep_msg != 0) + if (uMsg == s_findrep_msg && s_findrep_msg != 0) { _OnFindRepl(); } @@ -5376,42 +5219,6 @@ gui_mch_prepare(int *argc, char **argv) } } #endif - - /* get the OS version info */ - os_version.dwOSVersionInfoSize = sizeof(os_version); - GetVersionEx(&os_version); /* this call works on Win32s, Win95 and WinNT */ - - /* try and load the user32.dll library and get the entry points for - * multi-monitor-support. */ - if ((user32_lib = vimLoadLib("User32.dll")) != NULL) - { - pMonitorFromWindow = (TMonitorFromWindow)GetProcAddress(user32_lib, - "MonitorFromWindow"); - - /* there are ...A and ...W version of GetMonitorInfo - looking at - * winuser.h, they have exactly the same declaration. */ - pGetMonitorInfo = (TGetMonitorInfo)GetProcAddress(user32_lib, - "GetMonitorInfoA"); - } - -#ifdef FEAT_MBYTE - /* If the OS is Windows NT, use wide functions; - * this enables common dialogs input unicode from IME. */ - if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT) - { - pDispatchMessage = DispatchMessageW; - pGetMessage = GetMessageW; - pIsDialogMessage = IsDialogMessageW; - pPeekMessage = PeekMessageW; - } - else - { - pDispatchMessage = DispatchMessageA; - pGetMessage = GetMessageA; - pIsDialogMessage = IsDialogMessageA; - pPeekMessage = PeekMessageA; - } -#endif } /* @@ -5475,12 +5282,7 @@ gui_mch_init(void) atom = #endif RegisterClassW(&wndclassw)) == 0) - { - if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return FAIL; - - /* Must be Windows 98, fall back to non-wide function. */ - } + return FAIL; else wide_WindowProc = TRUE; } @@ -5710,7 +5512,7 @@ gui_mch_init(void) s_findrep_struct.lpstrReplaceWith[0] = NUL; s_findrep_struct.wFindWhatLen = MSWIN_FR_BUFSIZE; s_findrep_struct.wReplaceWithLen = MSWIN_FR_BUFSIZE; -# if defined(FEAT_MBYTE) && defined(WIN3264) +# ifdef FEAT_MBYTE s_findrep_struct_w.lStructSize = sizeof(s_findrep_struct_w); s_findrep_struct_w.lpstrFindWhat = (LPWSTR)alloc(MSWIN_FR_BUFSIZE * sizeof(WCHAR)); @@ -5753,22 +5555,18 @@ theend: static void get_work_area(RECT *spi_rect) { - _HMONITOR mon; - _MONITORINFO moninfo; + HMONITOR mon; + MONITORINFO moninfo; - /* use these functions only if available */ - if (pMonitorFromWindow != NULL && pGetMonitorInfo != NULL) + /* work out which monitor the window is on, and get *it's* work area */ + mon = MonitorFromWindow(s_hwnd, 1 /*MONITOR_DEFAULTTOPRIMARY*/); + if (mon != NULL) { - /* work out which monitor the window is on, and get *it's* work area */ - mon = pMonitorFromWindow(s_hwnd, 1 /*MONITOR_DEFAULTTOPRIMARY*/); - if (mon != NULL) + moninfo.cbSize = sizeof(MONITORINFO); + if (GetMonitorInfo(mon, &moninfo)) { - moninfo.cbSize = sizeof(_MONITORINFO); - if (pGetMonitorInfo(mon, &moninfo)) - { - *spi_rect = moninfo.rcWork; - return; - } + *spi_rect = moninfo.rcWork; + return; } } /* this is the old method... */ @@ -6307,29 +6105,10 @@ RevOut( HDC s_hdc, CONST INT *padding) { int ix; - static int special = -1; - - if (special == -1) - { - /* Check windows version: special treatment is needed if it is NT 5 or - * Win98 or higher. */ - if ((os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && os_version.dwMajorVersion >= 5) - || (os_version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS - && (os_version.dwMajorVersion > 4 - || (os_version.dwMajorVersion == 4 - && os_version.dwMinorVersion > 0)))) - special = 1; - else - special = 0; - } - if (special) - for (ix = 0; ix < (int)len; ++ix) - ExtTextOut(s_hdc, col + TEXT_X(ix), row, foptions, - pcliprect, text + ix, 1, padding); - else - ExtTextOut(s_hdc, col, row, foptions, pcliprect, text, len, padding); + for (ix = 0; ix < (int)len; ++ix) + ExtTextOut(s_hdc, col + TEXT_X(ix), row, foptions, + pcliprect, text + ix, 1, padding); } #endif @@ -6718,63 +6497,50 @@ gui_mch_add_menu( if (menu_is_menubar(menu->name)) { - if (is_winnt_3()) - { - InsertMenu((parent == NULL) ? s_menuBar : parent->submenu_id, - (UINT)pos, MF_POPUP | MF_STRING | MF_BYPOSITION, - (long_u)menu->submenu_id, (LPCTSTR) menu->name); - } - else - { #ifdef FEAT_MBYTE - WCHAR *wn = NULL; - int n; + WCHAR *wn = NULL; - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { + /* 'encoding' differs from active codepage: convert menu name + * and use wide function */ + wn = enc_to_utf16(menu->name, NULL); + if (wn != NULL) { - /* 'encoding' differs from active codepage: convert menu name - * and use wide function */ - wn = enc_to_utf16(menu->name, NULL); - if (wn != NULL) - { - MENUITEMINFOW infow; - - infow.cbSize = sizeof(infow); - infow.fMask = MIIM_DATA | MIIM_TYPE | MIIM_ID - | MIIM_SUBMENU; - infow.dwItemData = (long_u)menu; - infow.wID = menu->id; - infow.fType = MFT_STRING; - infow.dwTypeData = wn; - infow.cch = (UINT)wcslen(wn); - infow.hSubMenu = menu->submenu_id; - n = InsertMenuItemW((parent == NULL) - ? s_menuBar : parent->submenu_id, - (UINT)pos, TRUE, &infow); - vim_free(wn); - if (n == 0 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - /* Failed, try using non-wide function. */ - wn = NULL; - } + MENUITEMINFOW infow; + + infow.cbSize = sizeof(infow); + infow.fMask = MIIM_DATA | MIIM_TYPE | MIIM_ID + | MIIM_SUBMENU; + infow.dwItemData = (long_u)menu; + infow.wID = menu->id; + infow.fType = MFT_STRING; + infow.dwTypeData = wn; + infow.cch = (UINT)wcslen(wn); + infow.hSubMenu = menu->submenu_id; + InsertMenuItemW((parent == NULL) + ? s_menuBar : parent->submenu_id, + (UINT)pos, TRUE, &infow); + vim_free(wn); } + } - if (wn == NULL) + if (wn == NULL) #endif - { - MENUITEMINFO info; - - info.cbSize = sizeof(info); - info.fMask = MIIM_DATA | MIIM_TYPE | MIIM_ID | MIIM_SUBMENU; - info.dwItemData = (long_u)menu; - info.wID = menu->id; - info.fType = MFT_STRING; - info.dwTypeData = (LPTSTR)menu->name; - info.cch = (UINT)STRLEN(menu->name); - info.hSubMenu = menu->submenu_id; - InsertMenuItem((parent == NULL) - ? s_menuBar : parent->submenu_id, - (UINT)pos, TRUE, &info); - } + { + MENUITEMINFO info; + + info.cbSize = sizeof(info); + info.fMask = MIIM_DATA | MIIM_TYPE | MIIM_ID | MIIM_SUBMENU; + info.dwItemData = (long_u)menu; + info.wID = menu->id; + info.fType = MFT_STRING; + info.dwTypeData = (LPTSTR)menu->name; + info.cch = (UINT)STRLEN(menu->name); + info.hSubMenu = menu->submenu_id; + InsertMenuItem((parent == NULL) + ? s_menuBar : parent->submenu_id, + (UINT)pos, TRUE, &info); } } @@ -6890,7 +6656,6 @@ gui_mch_add_menu_item( { #ifdef FEAT_MBYTE WCHAR *wn = NULL; - int n; if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { @@ -6899,14 +6664,11 @@ gui_mch_add_menu_item( wn = enc_to_utf16(menu->name, NULL); if (wn != NULL) { - n = InsertMenuW(parent->submenu_id, (UINT)idx, + InsertMenuW(parent->submenu_id, (UINT)idx, (menu_is_separator(menu->name) ? MF_SEPARATOR : MF_STRING) | MF_BYPOSITION, (UINT)menu->id, wn); vim_free(wn); - if (n == 0 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - /* Failed, try using non-wide function. */ - wn = NULL; } } if (wn == NULL) @@ -7105,11 +6867,10 @@ dialog_callback( /* If the edit box exists, copy the string. */ if (s_textfield != NULL) { -# if defined(FEAT_MBYTE) && defined(WIN3264) +# ifdef FEAT_MBYTE /* If the OS is Windows NT, and 'encoding' differs from active * codepage: use wide function and convert text. */ - if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && enc_codepage >= 0 && (int)GetACP() != enc_codepage) + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { WCHAR *wp = (WCHAR *)alloc(IOSIZE * sizeof(WCHAR)); char_u *p; @@ -7866,38 +7627,31 @@ get_dialog_font_metrics(void) s_usenewlook = FALSE; - /* - * For NT3.51 and Win32s, we stick with the old look - * because it matches everything else. - */ - if (!is_winnt_3()) - { #ifdef USE_SYSMENU_FONT - if (gui_w32_get_menu_font(&lfSysmenu) == OK) - hfontTools = CreateFontIndirect(&lfSysmenu); - else + if (gui_w32_get_menu_font(&lfSysmenu) == OK) + hfontTools = CreateFontIndirect(&lfSysmenu); + else #endif hfontTools = CreateFont(-DLG_FONT_POINT_SIZE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VARIABLE_PITCH , DLG_FONT_NAME); - if (hfontTools) - { - hdc = GetDC(s_hwnd); - SelectObject(hdc, hfontTools); - /* - * GetTextMetrics() doesn't return the right value in - * tmAveCharWidth, so we have to figure out the dialog base units - * ourselves. - */ - GetTextExtentPoint(hdc, - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", - 52, &size); - ReleaseDC(s_hwnd, hdc); - - s_dlgfntwidth = (WORD)((size.cx / 26 + 1) / 2); - s_dlgfntheight = (WORD)size.cy; - s_usenewlook = TRUE; - } + if (hfontTools) + { + hdc = GetDC(s_hwnd); + SelectObject(hdc, hfontTools); + /* + * GetTextMetrics() doesn't return the right value in + * tmAveCharWidth, so we have to figure out the dialog base units + * ourselves. + */ + GetTextExtentPoint(hdc, + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", + 52, &size); + ReleaseDC(s_hwnd, hdc); + + s_dlgfntwidth = (WORD)((size.cx / 26 + 1) / 2); + s_dlgfntheight = (WORD)size.cy; + s_usenewlook = TRUE; } if (!s_usenewlook) @@ -8044,10 +7798,6 @@ gui_mch_tearoff( dlgwidth = textWidth; dlgwidth += 2 * TEAROFF_PADDING_X + TEAROFF_BUTTON_PAD_X; - /* W95 can't do thin dialogs, they look v. weird! */ - if (mch_windows95() && dlgwidth < TEAROFF_MIN_WIDTH) - dlgwidth = TEAROFF_MIN_WIDTH; - /* start to fill in the dlgtemplate information. addressing by WORDs */ if (s_usenewlook) lStyle = DS_MODALFRAME | WS_CAPTION| WS_SYSMENU |DS_SETFONT| WS_VISIBLE; @@ -8299,7 +8049,7 @@ get_toolbar_bitmap(vimmenu_T *menu) /* * Check user bitmaps first, unless builtin is specified. */ - if (!is_winnt_3() && !menu->icon_builtin) + if (!menu->icon_builtin) { char_u fname[MAXPATHL]; HANDLE hbitmap = NULL; @@ -8556,12 +8306,6 @@ gui_mch_register_sign(char_u *signfile) signicon_t sign, *psign; char_u *ext; - if (is_winnt_3()) - { - EMSG(_(e_signdata)); - return NULL; - } - sign.hImage = NULL; ext = signfile + STRLEN(signfile) - 4; /* get extension */ if (ext > signfile) |