diff options
Diffstat (limited to 'src/macfns.c')
| -rw-r--r-- | src/macfns.c | 104 |
1 files changed, 103 insertions, 1 deletions
diff --git a/src/macfns.c b/src/macfns.c index 3f5151daee9..2a83fef0870 100644 --- a/src/macfns.c +++ b/src/macfns.c | |||
| @@ -1919,6 +1919,100 @@ mac_set_scroll_bar_width (f, arg, oldval) | |||
| 1919 | x_set_scroll_bar_width (f, arg, oldval); | 1919 | x_set_scroll_bar_width (f, arg, oldval); |
| 1920 | } | 1920 | } |
| 1921 | 1921 | ||
| 1922 | #if TARGET_API_MAC_CARBON | ||
| 1923 | static void | ||
| 1924 | mac_update_proxy_icon (f) | ||
| 1925 | struct frame *f; | ||
| 1926 | { | ||
| 1927 | Lisp_Object file_name = | ||
| 1928 | XBUFFER (XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer)->filename; | ||
| 1929 | Window w = FRAME_MAC_WINDOW (f); | ||
| 1930 | |||
| 1931 | if (FRAME_FILE_NAME (f) == NULL && !STRINGP (file_name)) | ||
| 1932 | return; | ||
| 1933 | if (FRAME_FILE_NAME (f) && STRINGP (file_name) | ||
| 1934 | && strcmp (FRAME_FILE_NAME (f), SDATA (file_name)) == 0) | ||
| 1935 | return; | ||
| 1936 | |||
| 1937 | if (FRAME_FILE_NAME (f)) | ||
| 1938 | { | ||
| 1939 | xfree (FRAME_FILE_NAME (f)); | ||
| 1940 | FRAME_FILE_NAME (f) = NULL; | ||
| 1941 | } | ||
| 1942 | |||
| 1943 | BLOCK_INPUT; | ||
| 1944 | |||
| 1945 | if (STRINGP (file_name)) | ||
| 1946 | { | ||
| 1947 | OSStatus err; | ||
| 1948 | AEDesc desc; | ||
| 1949 | Lisp_Object encoded_file_name = ENCODE_FILE (file_name); | ||
| 1950 | |||
| 1951 | #ifdef MAC_OS8 | ||
| 1952 | SetPortWindowPort (w); | ||
| 1953 | #endif | ||
| 1954 | err = AECoercePtr (TYPE_FILE_NAME, SDATA (encoded_file_name), | ||
| 1955 | SBYTES (encoded_file_name), typeAlias, &desc); | ||
| 1956 | if (err == noErr) | ||
| 1957 | { | ||
| 1958 | Size size = AEGetDescDataSize (&desc); | ||
| 1959 | AliasHandle alias = (AliasHandle) NewHandle (size); | ||
| 1960 | |||
| 1961 | if (alias == NULL) | ||
| 1962 | err = memFullErr; | ||
| 1963 | else | ||
| 1964 | { | ||
| 1965 | HLock ((Handle) alias); | ||
| 1966 | err = AEGetDescData (&desc, *alias, size); | ||
| 1967 | HUnlock ((Handle) alias); | ||
| 1968 | if (err == noErr) | ||
| 1969 | err = SetWindowProxyAlias (w, alias); | ||
| 1970 | DisposeHandle ((Handle) alias); | ||
| 1971 | } | ||
| 1972 | AEDisposeDesc (&desc); | ||
| 1973 | } | ||
| 1974 | if (err == noErr) | ||
| 1975 | { | ||
| 1976 | FRAME_FILE_NAME (f) = xmalloc (SBYTES (file_name) + 1); | ||
| 1977 | strcpy (FRAME_FILE_NAME (f), SDATA (file_name)); | ||
| 1978 | } | ||
| 1979 | } | ||
| 1980 | |||
| 1981 | if (FRAME_FILE_NAME (f) == NULL) | ||
| 1982 | RemoveWindowProxy (w); | ||
| 1983 | |||
| 1984 | UNBLOCK_INPUT; | ||
| 1985 | } | ||
| 1986 | #endif | ||
| 1987 | |||
| 1988 | void | ||
| 1989 | mac_update_title_bar (f, save_match_data) | ||
| 1990 | struct frame *f; | ||
| 1991 | int save_match_data; | ||
| 1992 | { | ||
| 1993 | #if TARGET_API_MAC_CARBON | ||
| 1994 | struct window *w; | ||
| 1995 | int modified_p; | ||
| 1996 | |||
| 1997 | if (!FRAME_MAC_P (f)) | ||
| 1998 | return; | ||
| 1999 | |||
| 2000 | w = XWINDOW (FRAME_SELECTED_WINDOW (f)); | ||
| 2001 | modified_p = (BUF_SAVE_MODIFF (XBUFFER (w->buffer)) | ||
| 2002 | < BUF_MODIFF (XBUFFER (w->buffer))); | ||
| 2003 | if (windows_or_buffers_changed | ||
| 2004 | /* Minibuffer modification status shown in the close button is | ||
| 2005 | confusing. */ | ||
| 2006 | || (!MINI_WINDOW_P (w) | ||
| 2007 | && (modified_p != !NILP (w->last_had_star)))) | ||
| 2008 | SetWindowModified (FRAME_MAC_WINDOW (f), | ||
| 2009 | !MINI_WINDOW_P (w) && modified_p); | ||
| 2010 | |||
| 2011 | if (windows_or_buffers_changed) | ||
| 2012 | mac_update_proxy_icon (f); | ||
| 2013 | #endif | ||
| 2014 | } | ||
| 2015 | |||
| 1922 | 2016 | ||
| 1923 | /* Subroutines of creating a frame. */ | 2017 | /* Subroutines of creating a frame. */ |
| 1924 | 2018 | ||
| @@ -3470,6 +3564,9 @@ show_hourglass (timer) | |||
| 3470 | if (FRAME_LIVE_P (f) && FRAME_MAC_P (f) | 3564 | if (FRAME_LIVE_P (f) && FRAME_MAC_P (f) |
| 3471 | && FRAME_MAC_WINDOW (f) != tip_window) | 3565 | && FRAME_MAC_WINDOW (f) != tip_window) |
| 3472 | { | 3566 | { |
| 3567 | #if USE_CG_DRAWING | ||
| 3568 | mac_prepare_for_quickdraw (f); | ||
| 3569 | #endif | ||
| 3473 | if (!f->output_data.mac->hourglass_control) | 3570 | if (!f->output_data.mac->hourglass_control) |
| 3474 | { | 3571 | { |
| 3475 | Window w = FRAME_MAC_WINDOW (f); | 3572 | Window w = FRAME_MAC_WINDOW (f); |
| @@ -3514,7 +3611,12 @@ hide_hourglass () | |||
| 3514 | if (FRAME_MAC_P (f) | 3611 | if (FRAME_MAC_P (f) |
| 3515 | /* Watch out for newly created frames. */ | 3612 | /* Watch out for newly created frames. */ |
| 3516 | && f->output_data.mac->hourglass_control) | 3613 | && f->output_data.mac->hourglass_control) |
| 3517 | HideControl (f->output_data.mac->hourglass_control); | 3614 | { |
| 3615 | #if USE_CG_DRAWING | ||
| 3616 | mac_prepare_for_quickdraw (f); | ||
| 3617 | #endif | ||
| 3618 | HideControl (f->output_data.mac->hourglass_control); | ||
| 3619 | } | ||
| 3518 | } | 3620 | } |
| 3519 | 3621 | ||
| 3520 | hourglass_shown_p = 0; | 3622 | hourglass_shown_p = 0; |