diff options
author | Miles Bader <miles@gnu.org> | 2008-04-23 05:55:42 +0000 |
---|---|---|
committer | Miles Bader <miles@gnu.org> | 2008-04-23 05:55:42 +0000 |
commit | a113b3ca322fd73d97d0d9d69c9f48dc13fb326a (patch) | |
tree | 37b3ad22a198a83f68738ef86aec187bb6d926d9 /src | |
parent | e96a8d6dc0ffc35cf6c02924de2453c69fa8f6fe (diff) | |
parent | 81fe843b5a3cc7708e0800aeb5bc0dbe448e800a (diff) | |
download | emacs-a113b3ca322fd73d97d0d9d69c9f48dc13fb326a.tar.gz |
Merge from emacs--rel--22
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-1121
Diffstat (limited to 'src')
-rw-r--r-- | src/ChangeLog | 61 | ||||
-rw-r--r-- | src/alloc.c | 6 | ||||
-rw-r--r-- | src/mac.c | 151 | ||||
-rw-r--r-- | src/macgui.h | 5 | ||||
-rw-r--r-- | src/macterm.c | 122 | ||||
-rw-r--r-- | src/macterm.h | 15 | ||||
-rw-r--r-- | src/mactoolbox.c | 85 | ||||
-rw-r--r-- | src/w32.c | 5 | ||||
-rw-r--r-- | src/w32proc.c | 10 |
9 files changed, 283 insertions, 177 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 378718dfc81..c346bb9f31d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,64 @@ +2008-04-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * mac.c (create_apple_event) [TARGET_API_MAC_CARBON]: + Make function non-static. + (create_apple_event_from_event_ref) [TARGET_API_MAC_CARBON]: + Remove function. + (create_apple_event_from_drag_ref) [TARGET_API_MAC_CARBON]: + Move to mactoolbox.c. + (mac_event_parameters_to_lisp) [TARGET_API_MAC_CARBON]: New function. + + * macgui.h (CGFloat) [!CGFLOAT_DEFINED]: New typedef. + (mac_rect_make): New macro. + + * macterm.c (mac_draw_image_string_atsui) [MAC_OSX]: Use CGFloat + instead of float. + (mac_draw_image_string_cg) [USE_CG_TEXT_DRAWING]: Likewise. + (init_cg_color, mac_draw_line, mac_draw_cg_image, XSetForeground) + (XSetBackground) [USE_CG_DRAWING]: Likewise. + (mac_draw_image_string_atsui) [MAC_OSX]: Use mac_rect_make instead of + CGRectMake. + (mac_draw_image_string_cg) [USE_CG_TEXT_DRAWING]: Likewise. + (mac_erase_rectangle, mac_draw_cg_image, mac_fill_rectangle) + (mac_set_clip_rectangles) [USE_CG_DRAWING]: Likewise. + (XCreatePixmap, XCreatePixmapFromBitmapData): Use Window + instead of WindowRef in argument type. + (XCreatePixmap) [!MAC_OS8]: Don't call SetPortWindowPort. + (mac_invert_rectangle): Use CGContextSetBlendMode if available. + (mac_set_clip_rectangles, mac_reset_clip_rectangles): Take argument F + instead of DISPLAY. All uses changed. + (mac_handle_size_change): Don't call SET_FRAME_GARBAGED. + (x_calc_absolute_position): Simplify so as not to use + FRAME_PIXEL_WIDTH/FRAME_PIXEL_HEIGHT. + + * macterm.h (XCreatePixmap, XCreatePixmapFromBitmapData): Use Window + instead of WindowRef in argument type. + (create_apple_event_from_event_ref, create_apple_event_from_drag_ref) + [TARGET_API_MAC_CARBON]: Remove externs. + (create_apple_event, mac_event_parameters_to_lisp) + [TARGET_API_MAC_CARBON]: Add externs. + + * mactoolbox.c: (Vmac_ts_script_language_on_focus) + (saved_ts_script_language_on_focus) [USE_MAC_TSM]: Remove externs. + (XTread_socket) [USE_MAC_TOOLBAR]: Select window if its structure part + is clicked. + (x_activate_menubar): Remove extern for saved_menu_event_location. + (create_apple_event_from_drag_ref) [TARGET_API_MAC_CARBON]: + Move from mac.c. + +2008-04-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * alloc.c [!SYSTEM_MALLOC && !SYNC_INPUT] (uninterrupt_malloc) + [HAVE_GTK_AND_PTHREAD && !DOUG_LEA_MALLOC]: Don't use recursive mutex. + +2008-04-10 Jason Rumney <jasonr@gnu.org> + + * w32.c (stat): When Vw32_get_true_file_attributes is Qlocal, get + attributes only for local files. + + * w32proc.c (syms_of_ntproc): Change Vw32_get_true_file attributes + default to Qlocal. + 2008-04-22 Juri Linkov <juri@jurta.org> * buffer.c (Fswitch_to_buffer): Change interactive spec to call diff --git a/src/alloc.c b/src/alloc.c index fe37eec9379..64c8cc8264e 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -1366,6 +1366,7 @@ void uninterrupt_malloc () { #ifdef HAVE_GTK_AND_PTHREAD +#ifdef DOUG_LEA_MALLOC pthread_mutexattr_t attr; /* GLIBC has a faster way to do this, but lets keep it portable. @@ -1373,6 +1374,11 @@ uninterrupt_malloc () pthread_mutexattr_init (&attr); pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init (&alloc_mutex, &attr); +#else /* !DOUG_LEA_MALLOC */ + /* Some systems such as Solaris 2.6 doesn't have a recursive mutex, + and the bundled gmalloc.c doesn't require it. */ + pthread_mutex_init (&alloc_mutex, NULL); +#endif /* !DOUG_LEA_MALLOC */ #endif /* HAVE_GTK_AND_PTHREAD */ if (__free_hook != emacs_blocked_free) diff --git a/src/mac.c b/src/mac.c index 0ae233f048e..22f34747ea8 100644 --- a/src/mac.c +++ b/src/mac.c @@ -817,7 +817,7 @@ init_coercion_handler () } #if TARGET_API_MAC_CARBON -static OSErr +OSErr create_apple_event (class, id, result) AEEventClass class; AEEventID id; @@ -842,129 +842,76 @@ create_apple_event (class, id, result) return err; } -OSStatus -create_apple_event_from_event_ref (event, num_params, names, types, result) +Lisp_Object +mac_event_parameters_to_lisp (event, num_params, names, types) EventRef event; UInt32 num_params; const EventParamName *names; const EventParamType *types; - AppleEvent *result; { OSStatus err; - UInt32 i, size; + Lisp_Object result = Qnil; + UInt32 i; + ByteCount size; +#ifdef MAC_OSX CFStringRef string; CFDataRef data; - char *buf = NULL; - - err = create_apple_event (0, 0, result); /* Dummy class and ID. */ - if (err != noErr) - return err; - - for (i = 0; i < num_params; i++) - switch (types[i]) - { -#ifdef MAC_OSX - case typeCFStringRef: - err = GetEventParameter (event, names[i], typeCFStringRef, NULL, - sizeof (CFStringRef), NULL, &string); - if (err != noErr) - break; - data = CFStringCreateExternalRepresentation (NULL, string, - kCFStringEncodingUTF8, - '?'); - if (data == NULL) - break; - AEPutParamPtr (result, names[i], typeUTF8Text, - CFDataGetBytePtr (data), CFDataGetLength (data)); - CFRelease (data); - break; #endif - - default: - err = GetEventParameter (event, names[i], types[i], NULL, - 0, &size, NULL); - if (err != noErr) - break; - buf = xrealloc (buf, size); - err = GetEventParameter (event, names[i], types[i], NULL, - size, NULL, buf); - if (err == noErr) - AEPutParamPtr (result, names[i], types[i], buf, size); - break; - } - if (buf) - xfree (buf); - - return noErr; -} - -OSErr -create_apple_event_from_drag_ref (drag, num_types, types, result) - DragRef drag; - UInt32 num_types; - const FlavorType *types; - AppleEvent *result; -{ - OSErr err; - UInt16 num_items; - AppleEvent items; - long index; char *buf = NULL; - err = CountDragItems (drag, &num_items); - if (err != noErr) - return err; - err = AECreateList (NULL, 0, false, &items); - if (err != noErr) - return err; - - for (index = 1; index <= num_items; index++) + for (i = 0; i < num_params; i++) { - ItemReference item; - DescType desc_type = typeNull; - Size size; + EventParamName name = names[i]; + EventParamType type = types[i]; - err = GetDragItemReferenceNumber (drag, index, &item); - if (err == noErr) + switch (type) { - int i; +#ifdef MAC_OSX + case typeCFStringRef: + err = GetEventParameter (event, name, typeCFStringRef, NULL, + sizeof (CFStringRef), NULL, &string); + if (err != noErr) + break; + data = CFStringCreateExternalRepresentation (NULL, string, + kCFStringEncodingUTF8, + '?'); + if (data == NULL) + break; + name = EndianU32_NtoB (name); + type = EndianU32_NtoB (typeUTF8Text); + result = + Fcons (Fcons (make_unibyte_string ((char *) &name, 4), + Fcons (make_unibyte_string ((char *) &type, 4), + make_unibyte_string (CFDataGetBytePtr (data), + CFDataGetLength (data)))), + result); + CFRelease (data); + break; +#endif - for (i = 0; i < num_types; i++) + default: + err = GetEventParameter (event, name, type, NULL, 0, &size, NULL); + if (err != noErr) + break; + buf = xrealloc (buf, size); + err = GetEventParameter (event, name, type, NULL, size, NULL, buf); + if (err == noErr) { - err = GetFlavorDataSize (drag, item, types[i], &size); - if (err == noErr) - { - buf = xrealloc (buf, size); - err = GetFlavorData (drag, item, types[i], buf, &size, 0); - } - if (err == noErr) - { - desc_type = types[i]; - break; - } + name = EndianU32_NtoB (name); + type = EndianU32_NtoB (type); + result = + Fcons (Fcons (make_unibyte_string ((char *) &name, 4), + Fcons (make_unibyte_string ((char *) &type, 4), + make_unibyte_string (buf, size))), + result); } + break; } - err = AEPutPtr (&items, index, desc_type, - desc_type != typeNull ? buf : NULL, - desc_type != typeNull ? size : 0); - if (err != noErr) - break; } if (buf) xfree (buf); - if (err == noErr) - { - err = create_apple_event (0, 0, result); /* Dummy class and ID. */ - if (err == noErr) - err = AEPutParamDesc (result, keyDirectObject, &items); - if (err != noErr) - AEDisposeDesc (result); - } - - AEDisposeDesc (&items); - - return err; + return result; } #endif /* TARGET_API_MAC_CARBON */ diff --git a/src/macgui.h b/src/macgui.h index c549a885f48..41ac28f49ec 100644 --- a/src/macgui.h +++ b/src/macgui.h @@ -126,6 +126,10 @@ typedef unsigned long Time; #endif #endif +#ifndef CGFLOAT_DEFINED +typedef float CGFloat; +#endif + typedef WindowRef Window; #if TARGET_API_MAC_CARBON typedef ScrapRef Selection; @@ -149,6 +153,7 @@ typedef int Selection; #define mac_size_window SizeWindow #define mac_get_global_mouse GetGlobalMouse #define mac_is_window_toolbar_visible IsWindowToolbarVisible +#define mac_rect_make(f, x, y, w, h) CGRectMake (x, y, w, h) typedef GWorldPtr Pixmap; #define Cursor ThemeCursor diff --git a/src/macterm.c b/src/macterm.c index 842e1844f50..f4715c7f772 100644 --- a/src/macterm.c +++ b/src/macterm.c @@ -351,7 +351,7 @@ init_cg_color () if (CGColorGetTypeID != NULL) #endif { - float rgba[] = {0.0f, 0.0f, 0.0f, 1.0f}; + CGFloat rgba[] = {0.0f, 0.0f, 0.0f, 1.0f}; mac_cg_color_black = CGColorCreate (mac_cg_color_space_rgb, rgba); } @@ -460,7 +460,7 @@ mac_draw_line (f, gc, x1, y1, x2, y2) { #if USE_CG_DRAWING CGContextRef context; - float gx1 = x1, gy1 = y1, gx2 = x2, gy2 = y2; + CGFloat gx1 = x1, gy1 = y1, gx2 = x2, gy2 = y2; if (y1 != y2) gx1 += 0.5f, gx2 += 0.5f; @@ -553,7 +553,7 @@ mac_erase_rectangle (f, gc, x, y, width, height) context = mac_begin_cg_clip (f, gc); CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, gc); - CGContextFillRect (context, CGRectMake (x, y, width, height)); + CGContextFillRect (context, mac_rect_make (f, x, y, width, height)); mac_end_cg_clip (f); } #else @@ -632,8 +632,8 @@ mac_draw_cg_image (image, f, gc, src_x, src_y, width, height, int dest_x, dest_y, overlay_p; { CGContextRef context; - float port_height = FRAME_PIXEL_HEIGHT (f); - CGRect dest_rect = CGRectMake (dest_x, dest_y, width, height); + CGFloat port_height = FRAME_PIXEL_HEIGHT (f); + CGRect dest_rect = mac_rect_make (f, dest_x, dest_y, width, height); context = mac_begin_cg_clip (f, gc); if (!overlay_p) @@ -647,11 +647,11 @@ mac_draw_cg_image (image, f, gc, src_x, src_y, width, height, if (CGImageIsMask (image)) CG_SET_FILL_COLOR_WITH_GC_FOREGROUND (context, gc); CGContextDrawImage (context, - CGRectMake (dest_x - src_x, - port_height - (dest_y - src_y - + CGImageGetHeight (image)), - CGImageGetWidth (image), - CGImageGetHeight (image)), + mac_rect_make (f, dest_x - src_x, + port_height - (dest_y - src_y + + CGImageGetHeight (image)), + CGImageGetWidth (image), + CGImageGetHeight (image)), image); mac_end_cg_clip (f); } @@ -744,7 +744,7 @@ mac_free_bitmap (bitmap) Pixmap XCreatePixmap (display, w, width, height, depth) Display *display; - WindowRef w; + Window w; unsigned int width, height; unsigned int depth; { @@ -752,8 +752,9 @@ XCreatePixmap (display, w, width, height, depth) Rect r; QDErr err; +#ifdef MAC_OS8 SetPortWindowPort (w); - +#endif SetRect (&r, 0, 0, width, height); #if !defined (WORDS_BIG_ENDIAN) && USE_CG_DRAWING if (depth == 1) @@ -773,7 +774,7 @@ XCreatePixmap (display, w, width, height, depth) Pixmap XCreatePixmapFromBitmapData (display, w, data, width, height, fg, bg, depth) Display *display; - WindowRef w; + Window w; char *data; unsigned int width, height; unsigned long fg, bg; @@ -838,7 +839,7 @@ mac_fill_rectangle (f, gc, x, y, width, height) context = mac_begin_cg_clip (f, gc); CG_SET_FILL_COLOR_WITH_GC_FOREGROUND (context, gc); - CGContextFillRect (context, CGRectMake (x, y, width, height)); + CGContextFillRect (context, mac_rect_make (f, x, y, width, height)); mac_end_cg_clip (f); #else Rect r; @@ -887,7 +888,26 @@ mac_invert_rectangle (f, x, y, width, height) int x, y; unsigned int width, height; { - Rect r; +#if USE_CG_DRAWING && MAC_OS_X_VERSION_MAX_ALLOWED >= 1040 +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1040 && MAC_OS_X_VERSION_MIN_REQUIRED >= 1020 + if (CGContextSetBlendMode != NULL) +#endif + { + CGContextRef context; + + context = mac_begin_cg_clip (f, NULL); + CGContextSetRGBFillColor (context, 1.0f, 1.0f, 1.0f, 1.0f); + CGContextSetBlendMode (context, kCGBlendModeDifference); + CGContextFillRect (context, mac_rect_make (f, x, y, width, height)); + mac_end_cg_clip (f); + } +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1040 && MAC_OS_X_VERSION_MIN_REQUIRED >= 1020 + else /* CGContextSetBlendMode == NULL */ +#endif +#endif /* USE_CG_DRAWING && MAC_OS_X_VERSION_MAX_ALLOWED >= 1040 */ +#if !USE_CG_DRAWING || MAC_OS_X_VERSION_MAX_ALLOWED < 1040 || (MAC_OS_X_VERSION_MIN_REQUIRED < 1040 && MAC_OS_X_VERSION_MIN_REQUIRED >= 1020) + { + Rect r; #if USE_CG_DRAWING mac_prepare_for_quickdraw (f); @@ -1018,7 +1038,7 @@ mac_draw_image_string_atsui (f, gc, x, y, buf, nchars, bg_width, else { static CGContextRef context; - float port_height = FRAME_PIXEL_HEIGHT (f); + CGFloat port_height = FRAME_PIXEL_HEIGHT (f); static const ATSUAttributeTag tags[] = {kATSUCGContextTag}; static const ByteCount sizes[] = {sizeof (CGContextRef)}; static const ATSUAttributeValuePtr values[] = {&context}; @@ -1042,9 +1062,10 @@ mac_draw_image_string_atsui (f, gc, x, y, buf, nchars, bg_width, { CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, gc); CGContextFillRect (context, - CGRectMake (x, y - FONT_BASE (GC_FONT (gc)), - bg_width, - FONT_HEIGHT (GC_FONT (gc)))); + mac_rect_make (f, + x, y - FONT_BASE (GC_FONT (gc)), + bg_width, + FONT_HEIGHT (GC_FONT (gc)))); } CGContextScaleCTM (context, 1, -1); CGContextTranslateCTM (context, 0, -port_height); @@ -1388,7 +1409,7 @@ mac_draw_image_string_cg (f, gc, x, y, buf, nchars, bg_width, overstrike_p) XChar2b *buf; int nchars, bg_width, overstrike_p; { - float port_height, gx, gy; + CGFloat port_height, gx, gy; int i; CGContextRef context; CGGlyph *glyphs; @@ -1430,8 +1451,8 @@ mac_draw_image_string_cg (f, gc, x, y, buf, nchars, bg_width, overstrike_p) CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, gc); CGContextFillRect (context, - CGRectMake (gx, y - FONT_BASE (GC_FONT (gc)), - bg_width, FONT_HEIGHT (GC_FONT (gc)))); + mac_rect_make (f, gx, y - FONT_BASE (GC_FONT (gc)), + bg_width, FONT_HEIGHT (GC_FONT (gc)))); } CGContextScaleCTM (context, 1, -1); CGContextTranslateCTM (context, 0, -port_height); @@ -1733,7 +1754,7 @@ XSetForeground (display, gc, color) } else { - float rgba[4]; + CGFloat rgba[4]; rgba[0] = gc->fore_color.red / 65535.0f; rgba[1] = gc->fore_color.green / 65535.0f; @@ -1774,7 +1795,7 @@ XSetBackground (display, gc, color) } else { - float rgba[4]; + CGFloat rgba[4]; rgba[0] = gc->back_color.red / 65535.0f; rgba[1] = gc->back_color.green / 65535.0f; @@ -1803,8 +1824,8 @@ XSetFont (display, gc, font) /* Mac replacement for XSetClipRectangles. */ static void -mac_set_clip_rectangles (display, gc, rectangles, n) - Display *display; +mac_set_clip_rectangles (f, gc, rectangles, n) + struct frame *f; GC gc; Rect *rectangles; int n; @@ -1836,9 +1857,9 @@ mac_set_clip_rectangles (display, gc, rectangles, n) { Rect *rect = rectangles + i; - gc->clip_rects[i] = CGRectMake (rect->left, rect->top, - rect->right - rect->left, - rect->bottom - rect->top); + gc->clip_rects[i] = mac_rect_make (f, rect->left, rect->top, + rect->right - rect->left, + rect->bottom - rect->top); } #endif } @@ -1847,8 +1868,8 @@ mac_set_clip_rectangles (display, gc, rectangles, n) /* Mac replacement for XSetClipMask. */ static INLINE void -mac_reset_clip_rectangles (display, gc) - Display *display; +mac_reset_clip_rectangles (f, gc) + struct frame *f; GC gc; { gc->n_clip_rects = 0; @@ -2338,7 +2359,7 @@ x_draw_fringe_bitmap (w, row, p) XSetForeground (display, face->gc, gcv.foreground); } - mac_reset_clip_rectangles (display, face->gc); + mac_reset_clip_rectangles (f, face->gc); } #if USE_CG_DRAWING @@ -2852,7 +2873,7 @@ x_set_glyph_string_clipping (s) int n; n = get_glyph_string_clip_rects (s, rects, MAX_CLIP_RECTS); - mac_set_clip_rectangles (s->display, s->gc, rects, n); + mac_set_clip_rectangles (s->f, s->gc, rects, n); } @@ -3442,7 +3463,7 @@ x_draw_relief_rect (f, left_x, top_y, right_x, bottom_y, width, gc = f->output_data.mac->white_relief.gc; else gc = f->output_data.mac->black_relief.gc; - mac_set_clip_rectangles (dpy, gc, clip_rect, 1); + mac_set_clip_rectangles (f, gc, clip_rect, 1); /* Top. */ if (top_p) @@ -3457,12 +3478,12 @@ x_draw_relief_rect (f, left_x, top_y, right_x, bottom_y, width, mac_draw_line (f, gc, left_x + i, top_y + i, left_x + i, bottom_y - i + 1); - mac_reset_clip_rectangles (dpy, gc); + mac_reset_clip_rectangles (f, gc); if (raised_p) gc = f->output_data.mac->black_relief.gc; else gc = f->output_data.mac->white_relief.gc; - mac_set_clip_rectangles (dpy, gc, clip_rect, 1); + mac_set_clip_rectangles (f, gc, clip_rect, 1); /* Bottom. */ if (bot_p) @@ -3477,7 +3498,7 @@ x_draw_relief_rect (f, left_x, top_y, right_x, bottom_y, width, mac_draw_line (f, gc, right_x - i, top_y + i + 1, right_x - i, bottom_y - i); - mac_reset_clip_rectangles (dpy, gc); + mac_reset_clip_rectangles (f, gc); } @@ -3499,7 +3520,7 @@ x_draw_box_rect (s, left_x, top_y, right_x, bottom_y, width, XGetGCValues (s->display, s->gc, GCForeground, &xgcv); XSetForeground (s->display, s->gc, s->face->box_color); - mac_set_clip_rectangles (s->display, s->gc, clip_rect, 1); + mac_set_clip_rectangles (s->f, s->gc, clip_rect, 1); /* Top. */ mac_fill_rectangle (s->f, s->gc, left_x, top_y, @@ -3520,7 +3541,7 @@ x_draw_box_rect (s, left_x, top_y, right_x, bottom_y, width, top_y, width, bottom_y - top_y + 1); XSetForeground (s->display, s->gc, xgcv.foreground); - mac_reset_clip_rectangles (s->display, s->gc); + mac_reset_clip_rectangles (s->f, s->gc); } @@ -3829,7 +3850,7 @@ x_draw_stretch_glyph_string (s) gc = s->face->gc; get_glyph_string_clip_rect (s, &r); - mac_set_clip_rectangles (s->display, gc, &r, 1); + mac_set_clip_rectangles (s->f, gc, &r, 1); #if 0 /* MAC_TODO: stipple */ if (s->face->stipple) @@ -4029,7 +4050,7 @@ x_draw_glyph_string (s) } /* Reset clipping. */ - mac_reset_clip_rectangles (s->display, s->gc); + mac_reset_clip_rectangles (s->f, s->gc); } /* Shift display to make room for inserted glyphs. */ @@ -6409,7 +6430,7 @@ x_draw_bar_cursor (w, row, width, kind) cursor_glyph->pixel_width, width); - mac_reset_clip_rectangles (dpy, gc); + mac_reset_clip_rectangles (f, gc); } } @@ -6739,7 +6760,6 @@ mac_handle_size_change (f, pixelwidth, pixelheight) change_frame_size (f, rows, cols, 0, 1, 0); FRAME_PIXEL_WIDTH (f) = pixelwidth; FRAME_PIXEL_HEIGHT (f) = pixelheight; - SET_FRAME_GARBAGED (f); /* If cursor was outside the new size, mark it as off. */ mark_window_cursors_off (XWINDOW (f->root_window)); @@ -6772,7 +6792,6 @@ void x_calc_absolute_position (f) struct frame *f; { - int width_diff = 0, height_diff = 0; int flags = f->size_hint_flags; Rect inner, outer; @@ -6787,22 +6806,15 @@ x_calc_absolute_position (f) mac_get_window_bounds (f, &inner, &outer); UNBLOCK_INPUT; - width_diff = (outer.right - outer.left) - (inner.right - inner.left); - height_diff = (outer.bottom - outer.top) - (inner.bottom - inner.top); - /* Treat negative positions as relative to the leftmost bottommost position that fits on the screen. */ if (flags & XNegative) - f->left_pos = (FRAME_MAC_DISPLAY_INFO (f)->width - - width_diff - - FRAME_PIXEL_WIDTH (f) - + f->left_pos); + f->left_pos += (FRAME_MAC_DISPLAY_INFO (f)->width + - (outer.right - outer.left)); if (flags & YNegative) - f->top_pos = (FRAME_MAC_DISPLAY_INFO (f)->height - - height_diff - - FRAME_PIXEL_HEIGHT (f) - + f->top_pos); + f->top_pos += (FRAME_MAC_DISPLAY_INFO (f)->height + - (outer.bottom - outer.top)); /* The left_pos and top_pos are now relative to the top and left screen edges, diff --git a/src/macterm.h b/src/macterm.h index 0a448484873..6a000451785 100644 --- a/src/macterm.h +++ b/src/macterm.h @@ -628,9 +628,9 @@ extern void x_destroy_window P_ ((struct frame *)); extern void x_wm_set_size_hint P_ ((struct frame *, long, int)); extern void x_delete_display P_ ((struct x_display_info *)); extern void mac_initialize P_ ((void)); -extern Pixmap XCreatePixmap P_ ((Display *, WindowRef, unsigned int, +extern Pixmap XCreatePixmap P_ ((Display *, Window, unsigned int, unsigned int, unsigned int)); -extern Pixmap XCreatePixmapFromBitmapData P_ ((Display *, WindowRef, char *, +extern Pixmap XCreatePixmapFromBitmapData P_ ((Display *, Window, char *, unsigned int, unsigned int, unsigned long, unsigned long, unsigned int)); @@ -673,13 +673,10 @@ extern void mac_clear_font_name_table P_ ((void)); extern Lisp_Object mac_aedesc_to_lisp P_ ((const AEDesc *)); extern OSErr mac_ae_put_lisp P_ ((AEDescList *, UInt32, Lisp_Object)); #if TARGET_API_MAC_CARBON -extern OSStatus create_apple_event_from_event_ref P_ ((EventRef, UInt32, - const EventParamName *, - const EventParamType *, - AppleEvent *)); -extern OSErr create_apple_event_from_drag_ref P_ ((DragRef, UInt32, - const FlavorType *, - AppleEvent *)); +extern OSErr create_apple_event P_ ((AEEventClass, AEEventID, AppleEvent *)); +extern Lisp_Object mac_event_parameters_to_lisp P_ ((EventRef, UInt32, + const EventParamName *, + const EventParamType *)); extern CFStringRef cfstring_create_with_utf8_cstring P_ ((const char *)); extern CFStringRef cfstring_create_with_string P_ ((Lisp_Object)); extern Lisp_Object cfdata_to_lisp P_ ((CFDataRef)); diff --git a/src/mactoolbox.c b/src/mactoolbox.c index 6b4d22049a9..71abce23fe0 100644 --- a/src/mactoolbox.c +++ b/src/mactoolbox.c @@ -120,8 +120,6 @@ extern Lisp_Object Qtext_input; extern Lisp_Object Qupdate_active_input_area, Qunicode_for_key_event; extern Lisp_Object Vmac_ts_active_input_overlay; extern Lisp_Object Qbefore_string; -extern Lisp_Object Vmac_ts_script_language_on_focus; -extern Lisp_Object saved_ts_script_language_on_focus; #endif static int mac_event_to_emacs_modifiers P_ ((EventRef)); @@ -606,15 +604,15 @@ install_application_handler () #if USE_MAC_TSM if (err == noErr) { - static const EventTypeSpec spec[] = + static const EventTypeSpec specs[] = {{kEventClassTextInput, kEventTextInputUpdateActiveInputArea}, {kEventClassTextInput, kEventTextInputUnicodeForKeyEvent}, {kEventClassTextInput, kEventTextInputOffsetToPos}}; err = InstallApplicationEventHandler (NewEventHandlerUPP (mac_handle_text_input_event), - GetEventTypeCount (spec), - spec, NULL, NULL); + GetEventTypeCount (specs), + specs, NULL, NULL); } #endif @@ -3009,8 +3007,8 @@ mac_event_to_emacs_modifiers (EventRef eventRef) GetEventParameter (eventRef, kEventParamKeyModifiers, typeUInt32, NULL, sizeof (UInt32), NULL, &mods); class = GetEventClass (eventRef); - if (!NILP (Vmac_emulate_three_button_mouse) && - (class == kEventClassMouse || class == kEventClassCommand)) + if (!NILP (Vmac_emulate_three_button_mouse) + && (class == kEventClassMouse || class == kEventClassCommand)) { mods &= ~(optionKey | cmdKey); } @@ -3560,6 +3558,9 @@ XTread_socket (sd, expected, hold_quit) OSStatus err; HIViewRef ch; + if (FrontNonFloatingWindow () != window_ptr) + SelectWindow (window_ptr); + err = HIViewGetViewForMouseEvent (HIViewGetRoot (window_ptr), eventRef, &ch); /* This doesn't work on Mac OS X 10.2. */ @@ -4248,7 +4249,6 @@ x_activate_menubar (f) { SInt32 menu_choice; SInt16 menu_id, menu_item; - extern Point saved_menu_event_location; set_frame_menubar (f, 0, 1); BLOCK_INPUT; @@ -5704,6 +5704,75 @@ static pascal OSErr mac_do_receive_drag P_ ((WindowRef, void *, DragRef)); static DragTrackingHandlerUPP mac_do_track_dragUPP = NULL; static DragReceiveHandlerUPP mac_do_receive_dragUPP = NULL; +static OSErr +create_apple_event_from_drag_ref (drag, num_types, types, result) + DragRef drag; + UInt32 num_types; + const FlavorType *types; + AppleEvent *result; +{ + OSErr err; + UInt16 num_items; + AppleEvent items; + long index; + char *buf = NULL; + + err = CountDragItems (drag, &num_items); + if (err != noErr) + return err; + err = AECreateList (NULL, 0, false, &items); + if (err != noErr) + return err; + + for (index = 1; index <= num_items; index++) + { + ItemReference item; + DescType desc_type = typeNull; + Size size; + + err = GetDragItemReferenceNumber (drag, index, &item); + if (err == noErr) + { + int i; + + for (i = 0; i < num_types; i++) + { + err = GetFlavorDataSize (drag, item, types[i], &size); + if (err == noErr) + { + buf = xrealloc (buf, size); + err = GetFlavorData (drag, item, types[i], buf, &size, 0); + } + if (err == noErr) + { + desc_type = types[i]; + break; + } + } + } + err = AEPutPtr (&items, index, desc_type, + desc_type != typeNull ? buf : NULL, + desc_type != typeNull ? size : 0); + if (err != noErr) + break; + } + if (buf) + xfree (buf); + + if (err == noErr) + { + err = create_apple_event (0, 0, result); /* Dummy class and ID. */ + if (err == noErr) + err = AEPutParamDesc (result, keyDirectObject, &items); + if (err != noErr) + AEDisposeDesc (result); + } + + AEDisposeDesc (&items); + + return err; +} + static void mac_store_drag_event (window, mouse_pos, modifiers, desc) WindowRef window; diff --git a/src/w32.c b/src/w32.c index a04de3032e1..25756087a63 100644 --- a/src/w32.c +++ b/src/w32.c @@ -110,6 +110,9 @@ void globals_of_w32 (); extern Lisp_Object Vw32_downcase_file_names; extern Lisp_Object Vw32_generate_fake_inodes; extern Lisp_Object Vw32_get_true_file_attributes; +/* Defined in process.c for its own purpose. */ +extern Lisp_Object Qlocal; + extern int w32_num_mouse_buttons; @@ -2644,6 +2647,8 @@ stat (const char * path, struct stat * buf) } if (!NILP (Vw32_get_true_file_attributes) + && !(EQ (Vw32_get_true_file_attributes, Qlocal) && + GetDriveType (name) == DRIVE_FIXED) /* No access rights required to get info. */ && (fh = CreateFile (name, 0, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL)) diff --git a/src/w32proc.c b/src/w32proc.c index fbb4030e319..0665fa28f16 100644 --- a/src/w32proc.c +++ b/src/w32proc.c @@ -110,6 +110,7 @@ Lisp_Object Vw32_generate_fake_inodes; exactly, at the expense of slower operation. Since true hard links are supported on NTFS volumes, this is only relevant on NT. */ Lisp_Object Vw32_get_true_file_attributes; +extern Lisp_Object Qlocal; Lisp_Object Qhigh, Qlow; @@ -2353,9 +2354,12 @@ the truename of a file can be slow. */); DEFVAR_LISP ("w32-get-true-file-attributes", &Vw32_get_true_file_attributes, doc: /* Non-nil means determine accurate link count in `file-attributes'. -Note that this option is only useful for files on NTFS volumes, where hard links -are supported. Moreover, it slows down `file-attributes' noticeably. */); - Vw32_get_true_file_attributes = Qt; +This option is only useful for files on NTFS volumes, where +hard links are supported. The default value `local' means only do +this for files on local harddrives. Any other non-nil value means do +this even on remote and removable drives where the performance impact +may be noticeable even on modern hardware. */); + Vw32_get_true_file_attributes = Qlocal; staticpro (&Vw32_valid_locale_ids); staticpro (&Vw32_valid_codepages); |