+void
+mac_set_scroll_bar_width (f, arg, oldval)
+ struct frame *f;
+ Lisp_Object arg, oldval;
+{
+#ifdef MAC_OSX
+ if (INTEGERP (arg) && XINT (arg) > 0)
+ {
+ if (XINT (arg) < (MAC_AQUA_SMALL_VERTICAL_SCROLL_BAR_WIDTH
+ + MAC_AQUA_VERTICAL_SCROLL_BAR_WIDTH) / 2)
+ XSETINT (arg, MAC_AQUA_SMALL_VERTICAL_SCROLL_BAR_WIDTH);
+ else
+ XSETINT (arg, MAC_AQUA_VERTICAL_SCROLL_BAR_WIDTH);
+ }
+#endif
+ x_set_scroll_bar_width (f, arg, oldval);
+}
+
+static void
+mac_set_font (f, arg, oldval)
+ struct frame *f;
+ Lisp_Object arg, oldval;
+{
+ x_set_font (f, arg, oldval);
+#if USE_MAC_FONT_PANEL
+ {
+ Lisp_Object focus_frame = x_get_focus_frame (f);
+
+ if ((NILP (focus_frame) && f == SELECTED_FRAME ())
+ || XFRAME (focus_frame) == f)
+ {
+ BLOCK_INPUT;
+ mac_set_font_info_for_selection (f, DEFAULT_FACE_ID, 0);
+ UNBLOCK_INPUT;
+ }
+ }
+#endif
+}
+
+#if TARGET_API_MAC_CARBON
+static void
+mac_update_proxy_icon (f)
+ struct frame *f;
+{
+ OSStatus err;
+ Lisp_Object file_name =
+ XBUFFER (XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer)->filename;
+ Window w = FRAME_MAC_WINDOW (f);
+ AliasHandle alias = NULL;
+
+ BLOCK_INPUT;
+
+ err = GetWindowProxyAlias (w, &alias);
+ if (err == errWindowDoesNotHaveProxy && !STRINGP (file_name))
+ goto out;
+
+ if (STRINGP (file_name))
+ {
+ AEDesc desc;
+#ifdef MAC_OSX
+ FSRef fref;
+#else
+ FSSpec fss;
+#endif
+ Boolean changed;
+ Lisp_Object encoded_file_name = ENCODE_FILE (file_name);
+
+#ifdef MAC_OSX
+ err = AECoercePtr (TYPE_FILE_NAME, SDATA (encoded_file_name),
+ SBYTES (encoded_file_name), typeFSRef, &desc);
+#else
+ SetPortWindowPort (w);
+ err = AECoercePtr (TYPE_FILE_NAME, SDATA (encoded_file_name),
+ SBYTES (encoded_file_name), typeFSS, &desc);
+#endif
+ if (err == noErr)
+ {
+#ifdef MAC_OSX
+ err = AEGetDescData (&desc, &fref, sizeof (FSRef));
+#else
+ err = AEGetDescData (&desc, &fss, sizeof (FSSpec));
+#endif
+ AEDisposeDesc (&desc);
+ }
+ if (err == noErr)
+ {
+ if (alias)
+ {
+#ifdef MAC_OSX
+ err = FSUpdateAlias (NULL, &fref, alias, &changed);
+#else
+ err = UpdateAlias (NULL, &fss, alias, &changed);
+#endif
+ }
+ if (err != noErr || alias == NULL)
+ {
+ if (alias)
+ DisposeHandle ((Handle) alias);
+#ifdef MAC_OSX
+ err = FSNewAliasMinimal (&fref, &alias);
+#else
+ err = NewAliasMinimal (&fss, &alias);
+#endif
+ changed = true;
+ }
+ }
+ if (err == noErr)
+ if (changed)
+ err = SetWindowProxyAlias (w, alias);
+ }
+
+ if (alias)
+ DisposeHandle ((Handle) alias);
+
+ if (err != noErr || !STRINGP (file_name))
+ RemoveWindowProxy (w);
+
+ out:
+ 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
+}
+