| 1899 | | switch (msg) { |
|---|
| 1900 | | case WM_ERASEBKGND: |
|---|
| 1901 | | { |
|---|
| 1902 | | RECT rect; |
|---|
| 1903 | | int orefcount; |
|---|
| 1904 | | HDC ohdc; |
|---|
| 1905 | | int ret; |
|---|
| 1906 | | |
|---|
| 1907 | | orefcount = f->output_data.mw32->hdc_nestlevel; |
|---|
| 1908 | | ohdc = f->output_data.mw32->hdc; |
|---|
| 1909 | | |
|---|
| 1910 | | f->output_data.mw32->hdc = (HDC) wParam; |
|---|
| 1911 | | f->output_data.mw32->hdc_nestlevel = 1; |
|---|
| 1912 | | |
|---|
| 1913 | | ret = GetUpdateRect (FRAME_MW32_WINDOW (f), &rect, FALSE); |
|---|
| 1914 | | if (ret) |
|---|
| 1915 | | mw32_clear_native_frame_area (f, rect.left, rect.top, |
|---|
| 1916 | | rect.right, rect.bottom); |
|---|
| 1917 | | |
|---|
| 1918 | | f->output_data.mw32->hdc = ohdc; |
|---|
| 1919 | | f->output_data.mw32->hdc_nestlevel = orefcount; |
|---|
| 1920 | | |
|---|
| 1921 | | return ret ? 1 : 0; |
|---|
| 1922 | | } |
|---|
| 1923 | | |
|---|
| 1924 | | case WM_PAINT: |
|---|
| 1925 | | { |
|---|
| | 1899 | switch (msg) |
|---|
| | 1900 | { |
|---|
| | 1901 | case WM_ERASEBKGND: |
|---|
| | 1902 | { |
|---|
| | 1903 | RECT rect; |
|---|
| | 1904 | int orefcount; |
|---|
| | 1905 | HDC ohdc; |
|---|
| | 1906 | int ret; |
|---|
| | 1907 | |
|---|
| | 1908 | orefcount = f->output_data.mw32->hdc_nestlevel; |
|---|
| | 1909 | ohdc = f->output_data.mw32->hdc; |
|---|
| | 1910 | |
|---|
| | 1911 | f->output_data.mw32->hdc = (HDC) wParam; |
|---|
| | 1912 | f->output_data.mw32->hdc_nestlevel = 1; |
|---|
| | 1913 | |
|---|
| | 1914 | ret = GetUpdateRect (FRAME_MW32_WINDOW (f), &rect, FALSE); |
|---|
| | 1915 | if (ret) |
|---|
| | 1916 | mw32_clear_native_frame_area (f, rect.left, rect.top, |
|---|
| | 1917 | rect.right, rect.bottom); |
|---|
| | 1918 | |
|---|
| | 1919 | f->output_data.mw32->hdc = ohdc; |
|---|
| | 1920 | f->output_data.mw32->hdc_nestlevel = orefcount; |
|---|
| | 1921 | |
|---|
| | 1922 | return ret ? 1 : 0; |
|---|
| | 1923 | } |
|---|
| | 1924 | |
|---|
| | 1925 | case WM_PAINT: |
|---|
| 1973 | | } |
|---|
| 1974 | | |
|---|
| 1975 | | goto dflt; |
|---|
| 1976 | | |
|---|
| 1977 | | case WM_SETFOCUS: |
|---|
| 1978 | | |
|---|
| 1979 | | mw32_new_focus_frame (dpyinfo, f); |
|---|
| 1980 | | |
|---|
| 1981 | | /* This code is for switching selected-frame. In order to |
|---|
| 1982 | | generate no events before Emacs is set up, check whether |
|---|
| 1983 | | selected_frame is initial terminal frame. This is because |
|---|
| 1984 | | input_pending should be false at the startup to show startup |
|---|
| 1985 | | message. */ |
|---|
| 1986 | | if (SELECTED_FRAME () |
|---|
| 1987 | | && (SELECTED_FRAME () != XFRAME (Vterminal_frame)) |
|---|
| 1988 | | && (SELECTED_FRAME () != f)) |
|---|
| 1989 | | PostMessage (hwnd, WM_EMACS_ACTIVATE, |
|---|
| 1990 | | (WPARAM) 0, (LPARAM) 0); |
|---|
| 1991 | | |
|---|
| 1992 | | mw32_update_frame_alpha (f); |
|---|
| 1993 | | |
|---|
| 1994 | | /* Synchronize caret state */ |
|---|
| 1995 | | if (CARET_CURSOR_P (XWINDOW (f->selected_window)->phys_cursor_type) |
|---|
| 1996 | | && MW32_FRAME_CARET_SHOWN (f)) |
|---|
| 1997 | | { |
|---|
| 1998 | | DestroyCaret (); |
|---|
| 1999 | | MW32_FRAME_CARET_STATE (f) = NO_CARET; |
|---|
| 2000 | | MW32_FRAME_CARET_BLOCKED (f) = FALSE; |
|---|
| 2001 | | PostMessage (hwnd, WM_EMACS_SETCARET, (WPARAM)SHOWN_CARET, (LPARAM)0); |
|---|
| 2002 | | } |
|---|
| 2003 | | return 0; |
|---|
| 2004 | | |
|---|
| 2005 | | case WM_KILLFOCUS: |
|---|
| 2006 | | |
|---|
| 2007 | | if (MW32_FRAME_CARET_STATE (f) > NO_CARET) |
|---|
| 2008 | | { |
|---|
| 2009 | | DestroyCaret (); |
|---|
| 2010 | | MW32_FRAME_CARET_STATE (f) = NO_CARET; |
|---|
| 2011 | | MW32_FRAME_CARET_BLOCKED (f) = FALSE; |
|---|
| 2012 | | } |
|---|
| 2013 | | |
|---|
| 2014 | | if (f == FRAME_MW32_DISPLAY_INFO (f)->mw32_focus_frame) |
|---|
| 2015 | | mw32_new_focus_frame (dpyinfo, NULL); |
|---|
| 2016 | | |
|---|
| 2017 | | /* reset mouse face and help echo. */ |
|---|
| 2018 | | mw32_update_frame_alpha (f); |
|---|
| 2019 | | |
|---|
| 2020 | | PostMessage (hwnd, WM_EMACS_CLEAR_MOUSE_FACE, |
|---|
| 2021 | | (WPARAM) 1, (LPARAM) 0); |
|---|
| 2022 | | |
|---|
| 2023 | | return 0; |
|---|
| 2024 | | |
|---|
| 2025 | | case WM_MOVING: |
|---|
| 2026 | | f->output_data.mw32->frame_moving_or_sizing = 1; |
|---|
| 2027 | | mw32_update_frame_alpha (f); |
|---|
| 2028 | | return TRUE; |
|---|
| 2029 | | |
|---|
| 2030 | | case WM_SIZING: |
|---|
| 2031 | | f->output_data.mw32->frame_moving_or_sizing = 2; |
|---|
| 2032 | | mw32_update_frame_alpha (f); |
|---|
| 2033 | | return TRUE; |
|---|
| 2034 | | |
|---|
| 2035 | | case WM_EXITSIZEMOVE: |
|---|
| 2036 | | f->output_data.mw32->frame_moving_or_sizing = 0; |
|---|
| 2037 | | mw32_update_frame_alpha (f); |
|---|
| 2038 | | |
|---|
| 2039 | | return TRUE; |
|---|
| 2040 | | |
|---|
| 2041 | | case WM_MOVE: |
|---|
| 2042 | | |
|---|
| 2043 | | if (!f->async_iconified && f->async_visible) |
|---|
| 2044 | | { |
|---|
| 2045 | | RECT rect; |
|---|
| 2046 | | |
|---|
| 2047 | | GetWindowRect (hwnd, &rect); |
|---|
| 2048 | | |
|---|
| 2049 | | mw32_real_positions (f, &f->left_pos, &f->top_pos); |
|---|
| 2050 | | } |
|---|
| 2051 | | |
|---|
| 2052 | | break; |
|---|
| 2053 | | |
|---|
| 2054 | | case WM_SIZE: |
|---|
| 2055 | | |
|---|
| 2056 | | switch (wParam) |
|---|
| 2057 | | { |
|---|
| 2058 | | case SIZE_MINIMIZED: |
|---|
| 2059 | | f->async_visible = 0; |
|---|
| 2060 | | f->async_iconified = 1; |
|---|
| 2061 | | break; |
|---|
| 2062 | | case SIZE_MAXIMIZED: |
|---|
| 2063 | | f->want_fullscreen |= FULLSCREEN_BOTH; |
|---|
| 2064 | | /* fall through */ |
|---|
| 2065 | | case SIZE_RESTORED: |
|---|
| | 1973 | |
|---|
| | 1974 | goto dflt; |
|---|
| | 1975 | |
|---|
| | 1976 | case WM_SETFOCUS: |
|---|
| | 1977 | |
|---|
| | 1978 | mw32_new_focus_frame (dpyinfo, f); |
|---|
| | 1979 | |
|---|
| | 1980 | /* This code is for switching selected-frame. In order to |
|---|
| | 1981 | generate no events before Emacs is set up, check whether |
|---|
| | 1982 | selected_frame is initial terminal frame. This is because |
|---|
| | 1983 | input_pending should be false at the startup to show startup |
|---|
| | 1984 | message. */ |
|---|
| | 1985 | if (SELECTED_FRAME () |
|---|
| | 1986 | && (SELECTED_FRAME () != XFRAME (Vterminal_frame)) |
|---|
| | 1987 | && (SELECTED_FRAME () != f)) |
|---|
| | 1988 | PostMessage (hwnd, WM_EMACS_ACTIVATE, (WPARAM) 0, (LPARAM) 0); |
|---|
| | 1989 | |
|---|
| | 1990 | mw32_update_frame_alpha (f); |
|---|
| | 1991 | |
|---|
| | 1992 | /* Synchronize caret state */ |
|---|
| | 1993 | if (CARET_CURSOR_P (XWINDOW (f->selected_window)->phys_cursor_type) |
|---|
| | 1994 | && MW32_FRAME_CARET_SHOWN (f)) |
|---|
| | 1995 | { |
|---|
| | 1996 | DestroyCaret (); |
|---|
| | 1997 | MW32_FRAME_CARET_STATE (f) = NO_CARET; |
|---|
| | 1998 | MW32_FRAME_CARET_BLOCKED (f) = FALSE; |
|---|
| | 1999 | PostMessage (hwnd, WM_EMACS_SETCARET, |
|---|
| | 2000 | (WPARAM)SHOWN_CARET, (LPARAM)0); |
|---|
| | 2001 | } |
|---|
| | 2002 | return 0; |
|---|
| | 2003 | |
|---|
| | 2004 | case WM_KILLFOCUS: |
|---|
| | 2005 | |
|---|
| | 2006 | if (MW32_FRAME_CARET_STATE (f) > NO_CARET) |
|---|
| | 2007 | { |
|---|
| | 2008 | DestroyCaret (); |
|---|
| | 2009 | MW32_FRAME_CARET_STATE (f) = NO_CARET; |
|---|
| | 2010 | MW32_FRAME_CARET_BLOCKED (f) = FALSE; |
|---|
| | 2011 | } |
|---|
| | 2012 | |
|---|
| | 2013 | if (f == FRAME_MW32_DISPLAY_INFO (f)->mw32_focus_frame) |
|---|
| | 2014 | mw32_new_focus_frame (dpyinfo, NULL); |
|---|
| | 2015 | |
|---|
| | 2016 | /* reset mouse face and help echo. */ |
|---|
| | 2017 | mw32_update_frame_alpha (f); |
|---|
| | 2018 | |
|---|
| | 2019 | PostMessage (hwnd, WM_EMACS_CLEAR_MOUSE_FACE, (WPARAM) 1, (LPARAM) 0); |
|---|
| | 2020 | |
|---|
| | 2021 | return 0; |
|---|
| | 2022 | |
|---|
| | 2023 | case WM_MOVING: |
|---|
| | 2024 | f->output_data.mw32->frame_moving_or_sizing = 1; |
|---|
| | 2025 | mw32_update_frame_alpha (f); |
|---|
| | 2026 | return TRUE; |
|---|
| | 2027 | |
|---|
| | 2028 | case WM_SIZING: |
|---|
| | 2029 | f->output_data.mw32->frame_moving_or_sizing = 2; |
|---|
| | 2030 | mw32_update_frame_alpha (f); |
|---|
| | 2031 | return TRUE; |
|---|
| | 2032 | |
|---|
| | 2033 | case WM_EXITSIZEMOVE: |
|---|
| | 2034 | f->output_data.mw32->frame_moving_or_sizing = 0; |
|---|
| | 2035 | mw32_update_frame_alpha (f); |
|---|
| | 2036 | |
|---|
| | 2037 | return TRUE; |
|---|
| | 2038 | |
|---|
| | 2039 | case WM_MOVE: |
|---|
| | 2040 | |
|---|
| | 2041 | if (!f->async_iconified && f->async_visible) |
|---|
| | 2049 | |
|---|
| | 2050 | break; |
|---|
| | 2051 | |
|---|
| | 2052 | case WM_SIZE: |
|---|
| | 2053 | |
|---|
| | 2054 | switch (wParam) |
|---|
| | 2055 | { |
|---|
| | 2056 | case SIZE_MINIMIZED: |
|---|
| | 2057 | f->async_visible = 0; |
|---|
| | 2058 | f->async_iconified = 1; |
|---|
| | 2059 | break; |
|---|
| | 2060 | case SIZE_MAXIMIZED: |
|---|
| | 2061 | f->want_fullscreen |= FULLSCREEN_BOTH; |
|---|
| | 2062 | /* fall through */ |
|---|
| | 2063 | case SIZE_RESTORED: |
|---|
| | 2064 | { |
|---|
| | 2065 | RECT rect; |
|---|
| | 2066 | |
|---|
| | 2067 | GetWindowRect (hwnd, &rect); |
|---|
| | 2068 | |
|---|
| | 2069 | f->async_visible = IsWindowVisible (hwnd); |
|---|
| | 2070 | f->async_iconified = IsIconic (hwnd); |
|---|
| | 2071 | mw32_real_positions (f, &f->left_pos, &f->top_pos); |
|---|
| | 2072 | SET_FRAME_GARBAGED (f); |
|---|
| | 2073 | mw32_update_frame_alpha (f); |
|---|
| | 2074 | } |
|---|
| | 2075 | } |
|---|
| | 2076 | |
|---|
| | 2077 | break; |
|---|
| | 2078 | |
|---|
| | 2079 | case WM_SHOWWINDOW: |
|---|
| | 2080 | if (!wParam) |
|---|
| | 2081 | { |
|---|
| | 2082 | f->async_visible = 0; |
|---|
| | 2083 | f->async_iconified = 1; |
|---|
| | 2084 | } |
|---|
| | 2085 | goto dflt; |
|---|
| | 2086 | |
|---|
| | 2087 | case WM_NCMOUSEMOVE: |
|---|
| | 2088 | /* reset mouse face only. */ |
|---|
| | 2089 | PostMessage (hwnd, WM_EMACS_CLEAR_MOUSE_FACE, (WPARAM) 0, (LPARAM) 0); |
|---|
| | 2090 | goto dflt; |
|---|
| | 2091 | |
|---|
| | 2092 | case WM_WINDOWPOSCHANGED: |
|---|
| | 2093 | if (!f->async_iconified && f->async_visible) |
|---|
| | 2094 | { |
|---|
| | 2095 | int call_defprocp = 1; |
|---|
| | 2096 | RECT rect; |
|---|
| | 2097 | LPWINDOWPOS lppos = (LPWINDOWPOS) lParam; |
|---|
| | 2098 | |
|---|
| | 2099 | if (!(lppos->flags & SWP_NOMOVE)) |
|---|
| | 2100 | { |
|---|
| | 2101 | GetWindowRect (hwnd, &rect); |
|---|
| | 2102 | /* position change */ |
|---|
| | 2103 | mw32_real_positions (f, &f->left_pos, &f->top_pos); |
|---|
| | 2104 | call_defprocp = 0; |
|---|
| | 2105 | } |
|---|
| | 2106 | |
|---|
| | 2107 | GetClientRect (hwnd, &rect); |
|---|
| | 2108 | if (!(lppos->flags & SWP_NOSIZE) |
|---|
| | 2109 | || lppos->flags & SWP_DRAWFRAME) |
|---|
| | 2110 | { |
|---|
| | 2111 | /* size change */ |
|---|
| | 2112 | int width, height; |
|---|
| | 2113 | int rows, cols; |
|---|
| | 2114 | int wdiff = 0, hdiff = 0; |
|---|
| | 2115 | |
|---|
| | 2116 | height = rect.bottom - rect.top; |
|---|
| | 2117 | width = rect.right - rect.left; |
|---|
| | 2118 | |
|---|
| | 2119 | if ((width < (2 * (FRAME_INTERNAL_BORDER_WIDTH (f) |
|---|
| | 2120 | + FRAME_TOTAL_FRINGE_WIDTH (f)) |
|---|
| | 2121 | + f->scroll_bar_actual_width)) |
|---|
| | 2122 | || (height < (2 * FRAME_INTERNAL_BORDER_WIDTH (f)))) |
|---|
| | 2123 | { |
|---|
| | 2124 | /* This case MUST not happen. Because it means that the |
|---|
| | 2125 | window size is smaller than required size. Normally, |
|---|
| | 2126 | this case is caused by iconification on Windows. So |
|---|
| | 2127 | we MUST not regard it as a normal window size changing |
|---|
| | 2128 | message. (by himi) Call DefWindowProc() to generate |
|---|
| | 2129 | WM_SIZE message. |
|---|
| | 2130 | */ |
|---|
| | 2131 | goto dflt; |
|---|
| | 2132 | } |
|---|
| | 2133 | |
|---|
| | 2134 | if (!(f->want_fullscreen & FULLSCREEN_WIDTH) |
|---|
| | 2135 | || !(f->want_fullscreen & FULLSCREEN_HEIGHT)) |
|---|
| | 2136 | { |
|---|
| | 2137 | wdiff = ((width |
|---|
| | 2138 | - 2 * (FRAME_INTERNAL_BORDER_WIDTH (f) |
|---|
| | 2139 | + FRAME_TOTAL_FRINGE_WIDTH (f)) |
|---|
| | 2140 | - f->scroll_bar_actual_width) |
|---|
| | 2141 | % FRAME_DEFAULT_FONT_WIDTH (f)); |
|---|
| | 2142 | hdiff = ((height |
|---|
| | 2143 | - 2 * FRAME_INTERNAL_BORDER_WIDTH (f)) |
|---|
| | 2144 | % FRAME_LINE_HEIGHT (f)); |
|---|
| | 2145 | if ((2 * wdiff) > FRAME_DEFAULT_FONT_WIDTH (f)) |
|---|
| | 2146 | wdiff -= FRAME_DEFAULT_FONT_WIDTH (f); |
|---|
| | 2147 | if ((2 * hdiff) > FRAME_LINE_HEIGHT (f)) |
|---|
| | 2148 | hdiff -= FRAME_LINE_HEIGHT (f); |
|---|
| | 2149 | |
|---|
| | 2150 | width -= wdiff; |
|---|
| | 2151 | height -= hdiff; |
|---|
| | 2152 | |
|---|
| | 2153 | { |
|---|
| | 2154 | /* |
|---|
| | 2155 | Rearrange the frame size, which should be |
|---|
| | 2156 | smaller than the display size. |
|---|
| | 2157 | */ |
|---|
| | 2158 | HDC hdc = GetDC (hwnd); |
|---|
| | 2159 | RECT nrect; |
|---|
| | 2160 | int work_area_w, work_area_h; |
|---|
| | 2161 | |
|---|
| | 2162 | nrect.left = nrect.top = 0; |
|---|
| | 2163 | nrect.right = width; |
|---|
| | 2164 | nrect.bottom = height; |
|---|
| | 2165 | AdjustWindowRectEx (&nrect, f->output_data.mw32->dwStyle, |
|---|
| | 2166 | FRAME_EXTERNAL_MENU_BAR (f), |
|---|
| | 2167 | f->output_data.mw32->dwStyleEx); |
|---|
| | 2168 | |
|---|
| | 2169 | get_working_area_size (hwnd, &work_area_w, &work_area_h); |
|---|
| | 2170 | if (nrect.bottom - nrect.top > work_area_h) |
|---|
| | 2171 | { |
|---|
| | 2172 | hdiff += FRAME_LINE_HEIGHT (f); |
|---|
| | 2173 | height -= FRAME_LINE_HEIGHT (f); |
|---|
| | 2174 | } |
|---|
| | 2175 | if (nrect.right - nrect.left > work_area_w) |
|---|
| | 2176 | { |
|---|
| | 2177 | wdiff += FRAME_DEFAULT_FONT_WIDTH (f); |
|---|
| | 2178 | width -= FRAME_DEFAULT_FONT_WIDTH (f); |
|---|
| | 2179 | } |
|---|
| | 2180 | ReleaseDC (hwnd, hdc); |
|---|
| | 2181 | } |
|---|
| | 2182 | } |
|---|
| | 2183 | |
|---|
| | 2184 | rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, height); |
|---|
| | 2185 | cols = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, width); |
|---|
| | 2186 | |
|---|
| | 2187 | if (cols != f->text_cols |
|---|
| | 2188 | || rows != f->text_lines |
|---|
| | 2189 | || width != FRAME_PIXEL_WIDTH (f) |
|---|
| | 2190 | || height != FRAME_PIXEL_HEIGHT (f)) |
|---|
| | 2191 | { |
|---|
| | 2192 | change_frame_size (f, rows, cols, 0, 1, 0); |
|---|
| | 2193 | SET_FRAME_GARBAGED (f); |
|---|
| | 2194 | cancel_mouse_face (f); |
|---|
| | 2195 | FRAME_PIXEL_WIDTH (f) = width; |
|---|
| | 2196 | FRAME_PIXEL_HEIGHT (f) = height; |
|---|
| | 2197 | f->win_gravity = NorthWestGravity; |
|---|
| | 2198 | } |
|---|
| | 2199 | |
|---|
| | 2200 | /* To adjust window correctly, |
|---|
| | 2201 | we must check size of the window twice |
|---|
| | 2202 | (strictly speaking number of dimention), |
|---|
| | 2203 | thus, width and height. */ |
|---|
| | 2204 | if ((f->output_data.mw32->frame_change_state < 2) |
|---|
| | 2205 | && (wdiff || hdiff)) |
|---|
| | 2206 | { |
|---|
| | 2207 | f->output_data.mw32->frame_change_state++; |
|---|
| | 2208 | SetWindowPos (hwnd, NULL, 0, 0, lppos->cx - wdiff, |
|---|
| | 2209 | lppos->cy - hdiff, SWP_NOZORDER | SWP_NOMOVE); |
|---|
| | 2210 | } |
|---|
| | 2211 | else |
|---|
| | 2212 | f->output_data.mw32->frame_change_state = 0; |
|---|
| | 2213 | |
|---|
| | 2214 | call_defprocp = 0; |
|---|
| | 2215 | } |
|---|
| | 2216 | else |
|---|
| | 2217 | f->output_data.mw32->frame_change_state = 0; |
|---|
| | 2218 | |
|---|
| | 2219 | if (!call_defprocp) |
|---|
| | 2220 | return 0; |
|---|
| | 2221 | } |
|---|
| | 2222 | |
|---|
| | 2223 | goto dflt; |
|---|
| | 2224 | |
|---|
| | 2225 | case WM_ACTIVATE: |
|---|
| | 2226 | case WM_ACTIVATEAPP: |
|---|
| | 2227 | mw32_check_fullscreen (f); |
|---|
| | 2228 | |
|---|
| | 2229 | goto dflt; |
|---|
| | 2230 | |
|---|
| | 2231 | case WM_CLOSE: |
|---|
| | 2232 | PostMessage (hwnd, WM_EMACS_DESTROY, wParam, lParam); |
|---|
| | 2233 | return 0; |
|---|
| | 2234 | |
|---|
| | 2235 | case WM_CREATE: |
|---|
| | 2236 | return 0; |
|---|
| | 2237 | |
|---|
| | 2238 | case WM_INITMENU: |
|---|
| | 2239 | if (f->output_data.mw32->menubar_handle == (HMENU) wParam) |
|---|
| | 2240 | mw32_menu_bar_store_activate_event (f); |
|---|
| | 2241 | return 0; |
|---|
| | 2242 | |
|---|
| | 2243 | case WM_MENUSELECT: |
|---|
| | 2244 | /* Direct handling of help_echo in menus. Should be safe now |
|---|
| | 2245 | that we generate the help_echo by placing a help event in the |
|---|
| | 2246 | keyboard buffer. */ |
|---|
| | 2247 | { |
|---|
| | 2248 | HMENU menu = (HMENU) lParam; |
|---|
| | 2249 | UINT menu_item = (UINT) LOWORD (wParam); |
|---|
| | 2250 | UINT flags = (UINT) HIWORD (wParam); |
|---|
| | 2251 | |
|---|
| | 2252 | mw32_menu_display_help (hwnd, menu, menu_item, flags); |
|---|
| 2078 | | |
|---|
| 2079 | | break; |
|---|
| 2080 | | |
|---|
| 2081 | | case WM_SHOWWINDOW: |
|---|
| 2082 | | if (!wParam) |
|---|
| 2083 | | { |
|---|
| 2084 | | f->async_visible = 0; |
|---|
| 2085 | | f->async_iconified = 1; |
|---|
| 2086 | | } |
|---|
| 2087 | | goto dflt; |
|---|
| 2088 | | |
|---|
| 2089 | | case WM_NCMOUSEMOVE: |
|---|
| 2090 | | /* reset mouse face only. */ |
|---|
| 2091 | | PostMessage (hwnd, WM_EMACS_CLEAR_MOUSE_FACE, |
|---|
| 2092 | | (WPARAM) 0, (LPARAM) 0); |
|---|
| 2093 | | goto dflt; |
|---|
| 2094 | | |
|---|
| 2095 | | case WM_WINDOWPOSCHANGED: |
|---|
| 2096 | | if (!f->async_iconified && f->async_visible) |
|---|
| 2097 | | { |
|---|
| 2098 | | int call_defprocp = 1; |
|---|
| 2099 | | RECT rect; |
|---|
| 2100 | | LPWINDOWPOS lppos = (LPWINDOWPOS) lParam; |
|---|
| 2101 | | |
|---|
| 2102 | | if (!(lppos->flags & SWP_NOMOVE)) |
|---|
| 2103 | | { |
|---|
| 2104 | | GetWindowRect (hwnd, &rect); |
|---|
| 2105 | | /* position change */ |
|---|
| 2106 | | mw32_real_positions (f, &f->left_pos, &f->top_pos); |
|---|
| 2107 | | call_defprocp = 0; |
|---|
| 2108 | | } |
|---|
| 2109 | | |
|---|
| 2110 | | GetClientRect (hwnd, &rect); |
|---|
| 2111 | | if (!(lppos->flags & SWP_NOSIZE) |
|---|
| 2112 | | || lppos->flags & SWP_DRAWFRAME) |
|---|
| 2113 | | { |
|---|
| 2114 | | /* size change */ |
|---|
| 2115 | | int width, height; |
|---|
| 2116 | | int rows, cols; |
|---|
| 2117 | | int wdiff = 0, hdiff = 0; |
|---|
| 2118 | | |
|---|
| 2119 | | height = rect.bottom - rect.top; |
|---|
| 2120 | | width = rect.right - rect.left; |
|---|
| 2121 | | |
|---|
| 2122 | | if ((width < (2 * (FRAME_INTERNAL_BORDER_WIDTH (f) |
|---|
| 2123 | | + FRAME_TOTAL_FRINGE_WIDTH (f)) |
|---|
| 2124 | | + f->scroll_bar_actual_width)) |
|---|
| 2125 | | || (height < (2 * FRAME_INTERNAL_BORDER_WIDTH (f)))) |
|---|
| 2126 | | { |
|---|
| 2127 | | /* This case MUST not happen. Because it means that the |
|---|
| 2128 | | window size is smaller than required size. Normally, |
|---|
| 2129 | | this case is caused by iconification on Windows. So |
|---|
| 2130 | | we MUST not regard it as a normal window size changing |
|---|
| 2131 | | message. (by himi) Call DefWindowProc() to generate |
|---|
| 2132 | | WM_SIZE message. |
|---|
| 2133 | | */ |
|---|
| 2134 | | goto dflt; |
|---|
| 2135 | | } |
|---|
| 2136 | | |
|---|
| 2137 | | if (!(f->want_fullscreen & FULLSCREEN_WIDTH) |
|---|
| 2138 | | || !(f->want_fullscreen & FULLSCREEN_HEIGHT)) |
|---|
| 2139 | | { |
|---|
| 2140 | | wdiff = ((width |
|---|
| 2141 | | - 2 * (FRAME_INTERNAL_BORDER_WIDTH (f) |
|---|
| 2142 | | + FRAME_TOTAL_FRINGE_WIDTH (f)) |
|---|
| 2143 | | - f->scroll_bar_actual_width) |
|---|
| 2144 | | % FRAME_DEFAULT_FONT_WIDTH (f)); |
|---|
| 2145 | | hdiff = ((height |
|---|
| 2146 | | - 2 * FRAME_INTERNAL_BORDER_WIDTH (f)) |
|---|
| 2147 | | % FRAME_LINE_HEIGHT (f)); |
|---|
| 2148 | | if ((2 * wdiff) > FRAME_DEFAULT_FONT_WIDTH (f)) |
|---|
| 2149 | | wdiff -= FRAME_DEFAULT_FONT_WIDTH (f); |
|---|
| 2150 | | if ((2 * hdiff) > FRAME_LINE_HEIGHT (f)) |
|---|
| 2151 | | hdiff -= FRAME_LINE_HEIGHT (f); |
|---|
| 2152 | | |
|---|
| 2153 | | width -= wdiff; |
|---|
| 2154 | | height -= hdiff; |
|---|
| 2155 | | |
|---|
| | 2254 | return 0; |
|---|
| | 2255 | |
|---|
| | 2256 | case WM_MEASUREITEM: |
|---|
| | 2257 | if (f) |
|---|
| | 2258 | { |
|---|
| | 2259 | MEASUREITEMSTRUCT * pMis = (MEASUREITEMSTRUCT *) lParam; |
|---|
| | 2260 | |
|---|
| | 2261 | if (pMis->CtlType == ODT_MENU) |
|---|
| | 2262 | { |
|---|
| | 2263 | /* Work out dimensions for popup menu titles. */ |
|---|
| | 2264 | char * title = (char *) pMis->itemData; |
|---|
| | 2265 | HDC hdc = GetDC (hwnd); |
|---|
| | 2266 | HFONT menu_font = GetCurrentObject (hdc, OBJ_FONT); |
|---|
| | 2267 | LOGFONT menu_logfont; |
|---|
| | 2268 | HFONT old_font; |
|---|
| | 2269 | SIZE size; |
|---|
| | 2270 | |
|---|
| | 2271 | GetObject (menu_font, sizeof (menu_logfont), &menu_logfont); |
|---|
| | 2272 | menu_logfont.lfWeight = FW_BOLD; |
|---|
| | 2273 | menu_font = CreateFontIndirect (&menu_logfont); |
|---|
| | 2274 | old_font = SelectObject (hdc, menu_font); |
|---|
| | 2275 | |
|---|
| | 2276 | pMis->itemHeight = GetSystemMetrics (SM_CYMENUSIZE); |
|---|
| | 2277 | if (title) |
|---|
| 2157 | | /* |
|---|
| 2158 | | Rearrange the frame size, which should be smaller than the |
|---|
| 2159 | | display size. |
|---|
| 2160 | | */ |
|---|
| 2161 | | HDC hdc = GetDC (hwnd); |
|---|
| 2162 | | RECT nrect; |
|---|
| 2163 | | int work_area_w, work_area_h; |
|---|
| 2164 | | |
|---|
| 2165 | | nrect.left = nrect.top = 0; |
|---|
| 2166 | | nrect.right = width; |
|---|
| 2167 | | nrect.bottom = height; |
|---|
| 2168 | | AdjustWindowRectEx (&nrect, f->output_data.mw32->dwStyle, |
|---|
| 2169 | | FRAME_EXTERNAL_MENU_BAR (f), |
|---|
| 2170 | | f->output_data.mw32->dwStyleEx); |
|---|
| 2171 | | |
|---|
| 2172 | | get_working_area_size (hwnd, &work_area_w, &work_area_h); |
|---|
| 2173 | | if (nrect.bottom - nrect.top > work_area_h) |
|---|
| 2174 | | { |
|---|
| 2175 | | hdiff += FRAME_LINE_HEIGHT (f); |
|---|
| 2176 | | height -= FRAME_LINE_HEIGHT (f); |
|---|
| 2177 | | } |
|---|
| 2178 | | if (nrect.right - nrect.left > work_area_w) |
|---|
| 2179 | | { |
|---|
| 2180 | | wdiff += FRAME_DEFAULT_FONT_WIDTH (f); |
|---|
| 2181 | | width -= FRAME_DEFAULT_FONT_WIDTH (f); |
|---|
| 2182 | | } |
|---|
| 2183 | | ReleaseDC (hwnd, hdc); |
|---|
| | 2279 | GetTextExtentPoint32 (hdc, title, strlen (title), &size); |
|---|
| | 2280 | pMis->itemWidth = size.cx; |
|---|
| | 2281 | if (pMis->itemHeight < size.cy) |
|---|
| | 2282 | pMis->itemHeight = size.cy; |
|---|
| 2185 | | } |
|---|
| 2186 | | |
|---|
| 2187 | | rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, height); |
|---|
| 2188 | | cols = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, width); |
|---|
| 2189 | | |
|---|
| 2190 | | if (cols != f->text_cols |
|---|
| 2191 | | || rows != f->text_lines |
|---|
| 2192 | | || width != FRAME_PIXEL_WIDTH (f) |
|---|
| 2193 | | || height != FRAME_PIXEL_HEIGHT (f)) |
|---|
| 2194 | | { |
|---|
| 2195 | | change_frame_size (f, rows, cols, 0, 1, 0); |
|---|
| 2196 | | SET_FRAME_GARBAGED (f); |
|---|
| 2197 | | cancel_mouse_face (f); |
|---|
| 2198 | | FRAME_PIXEL_WIDTH (f) = width; |
|---|
| 2199 | | FRAME_PIXEL_HEIGHT (f) = height; |
|---|
| 2200 | | f->win_gravity = NorthWestGravity; |
|---|
| 2201 | | } |
|---|
| 2202 | | |
|---|
| 2203 | | /* To adjust window correctly, |
|---|
| 2204 | | we must check size of the window twice |
|---|
| 2205 | | (strictly speaking number of dimention), |
|---|
| 2206 | | thus, width and height. */ |
|---|
| 2207 | | if ((f->output_data.mw32->frame_change_state < 2) |
|---|
| 2208 | | && (wdiff || hdiff)) |
|---|
| 2209 | | { |
|---|
| 2210 | | f->output_data.mw32->frame_change_state++; |
|---|
| 2211 | | SetWindowPos (hwnd, NULL, 0, 0, |
|---|
| 2212 | | lppos->cx - wdiff, |
|---|
| 2213 | | lppos->cy - hdiff, |
|---|
| 2214 | | SWP_NOZORDER | SWP_NOMOVE); |
|---|
| 2215 | | } |
|---|
| 2216 | | else |
|---|
| 2217 | | f->output_data.mw32->frame_change_state = 0; |
|---|
| 2218 | | |
|---|
| 2219 | | call_defprocp = 0; |
|---|
| 2220 | | } |
|---|
| 2221 | | else |
|---|
| 2222 | | f->output_data.mw32->frame_change_state = 0; |
|---|
| 2223 | | |
|---|
| 2224 | | if (!call_defprocp) |
|---|
| 2225 | | return 0; |
|---|
| 2226 | | } |
|---|
| 2227 | | |
|---|
| 2228 | | goto dflt; |
|---|
| 2229 | | |
|---|
| 2230 | | case WM_ACTIVATE: |
|---|
| 2231 | | case WM_ACTIVATEAPP: |
|---|
| 2232 | | mw32_check_fullscreen (f); |
|---|
| 2233 | | |
|---|
| 2234 | | goto dflt; |
|---|
| 2235 | | |
|---|
| 2236 | | case WM_CLOSE: |
|---|
| 2237 | | PostMessage (hwnd, WM_EMACS_DESTROY, wParam, lParam); |
|---|
| 2238 | | return 0; |
|---|
| 2239 | | |
|---|
| 2240 | | case WM_CREATE: |
|---|
| 2241 | | return 0; |
|---|
| 2242 | | |
|---|
| 2243 | | case WM_INITMENU: |
|---|
| 2244 | | { |
|---|
| 2245 | | if (f->output_data.mw32->menubar_handle == (HMENU) wParam) |
|---|
| 2246 | | mw32_menu_bar_store_activate_event (f); |
|---|
| | 2284 | else |
|---|
| | 2285 | pMis->itemWidth = 0; |
|---|
| | 2286 | |
|---|
| | 2287 | SelectObject (hdc, old_font); |
|---|
| | 2288 | DeleteObject (menu_font); |
|---|
| | 2289 | ReleaseDC (hwnd, hdc); |
|---|
| | 2290 | return TRUE; |
|---|
| | 2291 | } |
|---|
| | 2292 | } |
|---|
| 2248 | | } |
|---|
| 2249 | | |
|---|
| 2250 | | case WM_MENUSELECT: |
|---|
| 2251 | | /* Direct handling of help_echo in menus. Should be safe now |
|---|
| 2252 | | that we generate the help_echo by placing a help event in the |
|---|
| 2253 | | keyboard buffer. */ |
|---|
| 2254 | | { |
|---|
| 2255 | | HMENU menu = (HMENU) lParam; |
|---|
| 2256 | | UINT menu_item = (UINT) LOWORD (wParam); |
|---|
| 2257 | | UINT flags = (UINT) HIWORD (wParam); |
|---|
| 2258 | | |
|---|
| 2259 | | mw32_menu_display_help (hwnd, menu, menu_item, flags); |
|---|
| 2260 | | } |
|---|
| 2261 | | return 0; |
|---|
| 2262 | | |
|---|
| 2263 | | case WM_MEASUREITEM: |
|---|
| 2264 | | if (f) |
|---|
| 2265 | | { |
|---|
| 2266 | | MEASUREITEMSTRUCT * pMis = (MEASUREITEMSTRUCT *) lParam; |
|---|
| 2267 | | |
|---|
| 2268 | | if (pMis->CtlType == ODT_MENU) |
|---|
| 2269 | | { |
|---|
| 2270 | | /* Work out dimensions for popup menu titles. */ |
|---|
| 2271 | | char * title = (char *) pMis->itemData; |
|---|
| 2272 | | HDC hdc = GetDC (hwnd); |
|---|
| 2273 | | HFONT menu_font = GetCurrentObject (hdc, OBJ_FONT); |
|---|
| 2274 | | LOGFONT menu_logfont; |
|---|
| 2275 | | HFONT old_font; |
|---|
| 2276 | | SIZE size; |
|---|
| 2277 | | |
|---|
| 2278 | | GetObject (menu_font, sizeof (menu_logfont), &menu_logfont); |
|---|
| 2279 | | menu_logfont.lfWeight = FW_BOLD; |
|---|
| 2280 | | menu_font = CreateFontIndirect (&menu_logfont); |
|---|
| 2281 | | old_font = SelectObject (hdc, menu_font); |
|---|
| 2282 | | |
|---|
| 2283 | | pMis->itemHeight = GetSystemMetrics (SM_CYMENUSIZE); |
|---|
| 2284 | | if (title) |
|---|
| 2285 | | { |
|---|
| 2286 | | GetTextExtentPoint32 (hdc, title, strlen (title), &size); |
|---|
| 2287 | | pMis->itemWidth = size.cx; |
|---|
| 2288 | | if (pMis->itemHeight < size.cy) |
|---|
| 2289 | | pMis->itemHeight = size.cy; |
|---|
| 2290 | | } |
|---|
| 2291 | | else |
|---|
| 2292 | | pMis->itemWidth = 0; |
|---|
| 2293 | | |
|---|
| 2294 | | SelectObject (hdc, old_font); |
|---|
| 2295 | | DeleteObject (menu_font); |
|---|
| 2296 | | ReleaseDC (hwnd, hdc); |
|---|
| 2297 | | return TRUE; |
|---|
| 2298 | | } |
|---|
| 2299 | | } |
|---|
| 2300 | | return 0; |
|---|
| 2301 | | |
|---|
| 2302 | | case WM_DRAWITEM: |
|---|
| 2303 | | if (f) |
|---|
| 2304 | | { |
|---|
| 2305 | | DRAWITEMSTRUCT * pDis = (DRAWITEMSTRUCT *) lParam; |
|---|
| 2306 | | |
|---|
| 2307 | | if (pDis->CtlType == ODT_MENU) |
|---|
| 2308 | | { |
|---|
| 2309 | | /* Draw popup menu title. */ |
|---|
| 2310 | | char * title = (char *) pDis->itemData; |
|---|
| 2311 | | if (title) |
|---|
| 2312 | | { |
|---|
| 2313 | | HDC hdc = pDis->hDC; |
|---|
| 2314 | | HFONT menu_font = GetCurrentObject (hdc, OBJ_FONT); |
|---|
| 2315 | | LOGFONT menu_logfont; |
|---|
| 2316 | | HFONT old_font; |
|---|
| 2317 | | |
|---|
| 2318 | | GetObject (menu_font, sizeof (menu_logfont), &menu_logfont); |
|---|
| 2319 | | menu_logfont.lfWeight = FW_BOLD; |
|---|
| 2320 | | menu_font = CreateFontIndirect (&menu_logfont); |
|---|
| 2321 | | old_font = SelectObject (hdc, menu_font); |
|---|
| 2322 | | |
|---|
| 2323 | | /* Always draw title as if not selected. */ |
|---|
| 2324 | | ExtTextOut (hdc, |
|---|
| 2325 | | pDis->rcItem.left |
|---|
| 2326 | | + GetSystemMetrics (SM_CXMENUCHECK), |
|---|
| 2327 | | pDis->rcItem.top, |
|---|
| 2328 | | ETO_OPAQUE, &pDis->rcItem, |
|---|
| 2329 | | title, strlen (title), NULL); |
|---|
| 2330 | | |
|---|
| 2331 | | SelectObject (hdc, old_font); |
|---|
| 2332 | | DeleteObject (menu_font); |
|---|
| 2333 | | } |
|---|
| 2334 | | return TRUE; |
|---|
| 2335 | | } |
|---|
| 2336 | | } |
|---|
| 2337 | | return 0; |
|---|
| 2338 | | |
|---|
| 2339 | | case WM_ENTERMENULOOP: |
|---|
| 2340 | | if (dpyinfo->mouse_cursor_stat < 0) |
|---|
| 2341 | | { |
|---|
| 2342 | | ShowCursor (TRUE); |
|---|
| 2343 | | dpyinfo->mouse_cursor_stat = 0; |
|---|
| 2344 | | } |
|---|
| 2345 | | return 0; |
|---|
| 2346 | | |
|---|
| 2347 | | case WM_EXITMENULOOP: |
|---|
| 2348 | | { |
|---|
| | 2294 | |
|---|
| | 2295 | case WM_DRAWITEM: |
|---|
| | 2296 | if (f) |
|---|
| | 2297 | { |
|---|
| | 2298 | DRAWITEMSTRUCT * pDis = (DRAWITEMSTRUCT *) lParam; |
|---|
| | 2299 | |
|---|
| | 2300 | if (pDis->CtlType == ODT_MENU) |
|---|
| | 2301 | { |
|---|
| | 2302 | /* Draw popup menu title. */ |
|---|
| | 2303 | char * title = (char *) pDis->itemData; |
|---|
| | 2304 | if (title) |
|---|
| | 2305 | { |
|---|
| | 2306 | HDC hdc = pDis->hDC; |
|---|
| | 2307 | HFONT menu_font = GetCurrentObject (hdc, OBJ_FONT); |
|---|
| | 2308 | LOGFONT menu_logfont; |
|---|
| | 2309 | HFONT old_font; |
|---|
| | 2310 | |
|---|
| | 2311 | GetObject (menu_font, sizeof (menu_logfont), &menu_logfont); |
|---|
| | 2312 | menu_logfont.lfWeight = FW_BOLD; |
|---|
| | 2313 | menu_font = CreateFontIndirect (&menu_logfont); |
|---|
| | 2314 | old_font = SelectObject (hdc, menu_font); |
|---|
| | 2315 | |
|---|
| | 2316 | /* Always draw title as if not selected. */ |
|---|
| | 2317 | ExtTextOut (hdc, |
|---|
| | 2318 | pDis->rcItem.left |
|---|
| | 2319 | + GetSystemMetrics (SM_CXMENUCHECK), |
|---|
| | 2320 | pDis->rcItem.top, |
|---|
| | 2321 | ETO_OPAQUE, &pDis->rcItem, |
|---|
| | 2322 | title, strlen (title), NULL); |
|---|
| | 2323 | |
|---|
| | 2324 | SelectObject (hdc, old_font); |
|---|
| | 2325 | DeleteObject (menu_font); |
|---|
| | 2326 | } |
|---|
| | 2327 | return TRUE; |
|---|
| | 2328 | } |
|---|
| | 2329 | } |
|---|
| | 2330 | return 0; |
|---|
| | 2331 | |
|---|
| | 2332 | case WM_ENTERMENULOOP: |
|---|
| | 2333 | if (dpyinfo->mouse_cursor_stat < 0) |
|---|
| | 2334 | { |
|---|
| | 2335 | ShowCursor (TRUE); |
|---|
| | 2336 | dpyinfo->mouse_cursor_stat = 0; |
|---|
| | 2337 | } |
|---|
| | 2338 | return 0; |
|---|
| | 2339 | |
|---|
| | 2340 | case WM_EXITMENULOOP: |
|---|
| 2465 | | case WM_IME_REPORT: |
|---|
| 2466 | | switch (wParam) |
|---|
| | 2444 | case WM_IME_REPORT: |
|---|
| | 2445 | switch (wParam) |
|---|
| | 2446 | { |
|---|
| | 2447 | case IR_STRING: |
|---|
| | 2448 | { |
|---|
| | 2449 | HANDLE himestr; |
|---|
| | 2450 | |
|---|
| | 2451 | himestr = mw32_ime_string_handle ((HANDLE) lParam); |
|---|
| | 2452 | if (!himestr) break; |
|---|
| | 2453 | |
|---|
| | 2454 | PostMessage (NULL, WM_MULE_IME_REPORT, |
|---|
| | 2455 | (WPARAM) himestr, (LPARAM) f); |
|---|
| | 2456 | return 1; |
|---|
| | 2457 | } |
|---|
| | 2458 | case IR_OPENCONVERT: |
|---|
| | 2459 | case IR_CLOSECONVERT: |
|---|
| | 2460 | if (!IME_event_off_count) |
|---|
| | 2461 | PostMessage (hwnd, WM_MULE_IME_STATUS, 0, 0); |
|---|
| | 2462 | else |
|---|
| | 2463 | IME_event_off_count--; |
|---|
| | 2464 | SetEvent (fep_switch_event); |
|---|
| | 2465 | return 0; |
|---|
| | 2466 | } |
|---|
| | 2467 | #endif /* not W32_VER4 */ |
|---|
| | 2468 | case WM_MULE_IMM_SET_COMPOSITION_FONT: |
|---|
| | 2469 | f->output_data.mw32->ime_logfont = *((LPLOGFONT) lParam); |
|---|
| | 2470 | mw32_set_ime_font (hwnd, (LPLOGFONT) lParam); |
|---|
| | 2471 | POST_THREAD_INFORM_MESSAGE (main_thread_id, |
|---|
| | 2472 | WM_MULE_IMM_SET_COMPOSITION_FONT_REPLY, |
|---|
| | 2473 | (WPARAM) 0, (LPARAM) 0); |
|---|
| | 2474 | break; |
|---|
| | 2475 | case WM_MULE_IMM_SET_CONVERSION_WINDOW: |
|---|
| | 2476 | mw32_set_ime_conv_window (hwnd, (struct window *) wParam); |
|---|
| | 2477 | break; |
|---|
| | 2478 | |
|---|
| | 2479 | case WM_MULE_IMM_SET_COMPOSITION_STRING: |
|---|
| | 2480 | mw32_ime_set_composition_string (hwnd, (char*) wParam); |
|---|
| | 2481 | break; |
|---|
| | 2482 | |
|---|
| | 2483 | case WM_MULE_IMM_GET_COMPOSITION_STRING: |
|---|
| | 2484 | mw32_ime_get_composition_string (hwnd); |
|---|
| | 2485 | break; |
|---|
| | 2486 | |
|---|
| | 2487 | #endif /* not MEADOW and IME_CONTROL */ |
|---|
| | 2488 | |
|---|
| | 2489 | /* Emacs private message entries. */ |
|---|
| | 2490 | case WM_EMACS_CREATE_FRAME: |
|---|
| | 2491 | mw32m_create_frame_window ((struct frame*) wParam, (LPSTR) lParam); |
|---|
| | 2492 | break; |
|---|
| | 2493 | |
|---|
| | 2494 | case WM_EMACS_CREATE_TIP_FRAME: |
|---|
| | 2495 | mw32m_create_tip_frame_window ((struct frame *) wParam); |
|---|
| | 2496 | break; |
|---|
| | 2497 | |
|---|
| | 2498 | case WM_EMACS_CREATE_SCROLLBAR: |
|---|
| | 2499 | mw32m_create_scrollbar (hwnd, (LPRECT) wParam, (HINSTANCE) lParam); |
|---|
| | 2500 | break; |
|---|
| | 2501 | |
|---|
| | 2502 | #ifdef IME_CONTROL |
|---|
| | 2503 | case WM_MULE_IME_CREATE_AGENT: |
|---|
| | 2504 | mw32m_ime_create_agent (); |
|---|
| | 2505 | break; |
|---|
| | 2506 | case WM_MULE_IME_DESTROY_AGENT: |
|---|
| | 2507 | mw32m_ime_destroy_agent (hwnd); |
|---|
| | 2508 | break; |
|---|
| | 2509 | #endif |
|---|
| | 2510 | case WM_EMACS_DESTROY_FRAME: |
|---|
| | 2511 | mw32m_destroy_frame (hwnd); |
|---|
| | 2512 | break; |
|---|
| | 2513 | |
|---|
| | 2514 | case WM_EMACS_POPUP_MENU: |
|---|
| | 2515 | /* Use menubar_active to indicate that WM_INITMENU is from |
|---|
| | 2516 | TrackPopupMenu below, and should be ignored. */ |
|---|
| | 2517 | f = mw32_window_to_frame (dpyinfo, hwnd); |
|---|
| | 2518 | if (f) |
|---|
| | 2519 | f->output_data.mw32->menubar_active = 1; |
|---|
| | 2520 | |
|---|
| | 2521 | mw32m_track_popup_menu (hwnd, (HANDLE) wParam, (LPPOINT) lParam); |
|---|
| | 2522 | dpyinfo->grabbed = 0; |
|---|
| | 2523 | break; |
|---|
| | 2524 | |
|---|
| | 2525 | case WM_EMACS_SETCARET: |
|---|