diff options
author | Karoly Lorentey <lorentey@elte.hu> | 2006-05-03 11:56:53 +0000 |
---|---|---|
committer | Karoly Lorentey <lorentey@elte.hu> | 2006-05-03 11:56:53 +0000 |
commit | c044516d384ff70e820686d4e995dcc23ee22e6f (patch) | |
tree | 4a9b52cf3e7da73040903b719dfca8113a765884 /src/macfns.c | |
parent | b33c71f58623306001d4d4fe4f7354d8c360edaa (diff) | |
parent | 9d6bb9e0af2671a4deca1509f4a2d5655400f67a (diff) | |
download | emacs-c044516d384ff70e820686d4e995dcc23ee22e6f.tar.gz emacs-c044516d384ff70e820686d4e995dcc23ee22e6f.tar.bz2 emacs-c044516d384ff70e820686d4e995dcc23ee22e6f.zip |
Merged from emacs@sv.gnu.org
Patches applied:
* emacs@sv.gnu.org/emacs--devo--0--patch-252
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-253
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-254
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-255
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-256
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-257
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-258
Clean up lisp/gnus/ChangeLog a bit
* emacs@sv.gnu.org/emacs--devo--0--patch-259
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-260
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-261
lisp/replace.el (occur-engine): Bind `inhibit-field-text-motion' to t
* emacs@sv.gnu.org/emacs--devo--0--patch-262
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-96
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-97
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-98
Update from CVS
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-554
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) x_set_scroll_bar_width (f, arg, oldval); } +#if TARGET_API_MAC_CARBON +static void +mac_update_proxy_icon (f) + struct frame *f; +{ + Lisp_Object file_name = + XBUFFER (XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer)->filename; + Window w = FRAME_MAC_WINDOW (f); + + if (FRAME_FILE_NAME (f) == NULL && !STRINGP (file_name)) + return; + if (FRAME_FILE_NAME (f) && STRINGP (file_name) + && strcmp (FRAME_FILE_NAME (f), SDATA (file_name)) == 0) + return; + + if (FRAME_FILE_NAME (f)) + { + xfree (FRAME_FILE_NAME (f)); + FRAME_FILE_NAME (f) = NULL; + } + + BLOCK_INPUT; + + if (STRINGP (file_name)) + { + OSStatus err; + AEDesc desc; + Lisp_Object encoded_file_name = ENCODE_FILE (file_name); + +#ifdef MAC_OS8 + SetPortWindowPort (w); +#endif + err = AECoercePtr (TYPE_FILE_NAME, SDATA (encoded_file_name), + SBYTES (encoded_file_name), typeAlias, &desc); + if (err == noErr) + { + Size size = AEGetDescDataSize (&desc); + AliasHandle alias = (AliasHandle) NewHandle (size); + + if (alias == NULL) + err = memFullErr; + else + { + HLock ((Handle) alias); + err = AEGetDescData (&desc, *alias, size); + HUnlock ((Handle) alias); + if (err == noErr) + err = SetWindowProxyAlias (w, alias); + DisposeHandle ((Handle) alias); + } + AEDisposeDesc (&desc); + } + if (err == noErr) + { + FRAME_FILE_NAME (f) = xmalloc (SBYTES (file_name) + 1); + strcpy (FRAME_FILE_NAME (f), SDATA (file_name)); + } + } + + if (FRAME_FILE_NAME (f) == NULL) + RemoveWindowProxy (w); + + UNBLOCK_INPUT; +} +#endif + +void +mac_update_title_bar (f, save_match_data) + struct frame *f; + int save_match_data; +{ +#if TARGET_API_MAC_CARBON + struct window *w; + int modified_p; + + if (!FRAME_MAC_P (f)) + return; + + w = XWINDOW (FRAME_SELECTED_WINDOW (f)); + modified_p = (BUF_SAVE_MODIFF (XBUFFER (w->buffer)) + < BUF_MODIFF (XBUFFER (w->buffer))); + if (windows_or_buffers_changed + /* Minibuffer modification status shown in the close button is + confusing. */ + || (!MINI_WINDOW_P (w) + && (modified_p != !NILP (w->last_had_star)))) + SetWindowModified (FRAME_MAC_WINDOW (f), + !MINI_WINDOW_P (w) && modified_p); + + if (windows_or_buffers_changed) + mac_update_proxy_icon (f); +#endif +} + /* Subroutines of creating a frame. */ @@ -3470,6 +3564,9 @@ show_hourglass (timer) if (FRAME_LIVE_P (f) && FRAME_MAC_P (f) && FRAME_MAC_WINDOW (f) != tip_window) { +#if USE_CG_DRAWING + mac_prepare_for_quickdraw (f); +#endif if (!f->output_data.mac->hourglass_control) { Window w = FRAME_MAC_WINDOW (f); @@ -3514,7 +3611,12 @@ hide_hourglass () if (FRAME_MAC_P (f) /* Watch out for newly created frames. */ && f->output_data.mac->hourglass_control) - HideControl (f->output_data.mac->hourglass_control); + { +#if USE_CG_DRAWING + mac_prepare_for_quickdraw (f); +#endif + HideControl (f->output_data.mac->hourglass_control); + } } hourglass_shown_p = 0; |