#endif
#ifdef NS_IMPL_COCOA
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
#include "macfont.h"
#endif
-#endif
/* call tracing */
#if 0
static Lisp_Object Qmodifier_value;
Lisp_Object Qalt, Qcontrol, Qhyper, Qmeta, Qsuper;
-extern Lisp_Object Qcursor_color, Qcursor_type, Qns, Qleft;
+extern Lisp_Object Qcursor_color, Qcursor_type, Qns;
static Lisp_Object QUTF8_STRING;
static Lisp_Object Qcocoa, Qgnustep;
ns_update_auto_hide_menu_bar (void)
{
#ifdef NS_IMPL_COCOA
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
block_input ();
NSTRACE (ns_update_auto_hide_menu_bar);
unblock_input ();
#endif
-#endif
}
block_input ();
- check_frame_size (f, &width, &height, pixelwise);
-
- compute_fringe_widths (f, 0);
-
if (pixelwise)
{
pixelwidth = FRAME_TEXT_TO_PIXEL_WIDTH (f, width);
cancel_mouse_face (f);
unblock_input ();
+
+ do_pending_window_change (0);
}
block_input ();
- if (dpyinfo->last_mouse_scroll_bar != nil && insist == 0)
- {
- /* TODO: we do not use this path at the moment because drag events will
- go directly to the EmacsScroller. Leaving code in for now. */
- [dpyinfo->last_mouse_scroll_bar
- getMouseMotionPart: (int *)part window: bar_window x: x y: y];
- if (time)
- *time = dpyinfo->last_mouse_movement_time;
- dpyinfo->last_mouse_scroll_bar = nil;
- }
+ /* Clear the mouse-moved flag for every frame on this display. */
+ FOR_EACH_FRAME (tail, frame)
+ if (FRAME_NS_P (XFRAME (frame))
+ && FRAME_NS_DISPLAY (XFRAME (frame)) == FRAME_NS_DISPLAY (*fp))
+ XFRAME (frame)->mouse_moved = 0;
+
+ dpyinfo->last_mouse_scroll_bar = nil;
+ if (dpyinfo->last_mouse_frame
+ && FRAME_LIVE_P (dpyinfo->last_mouse_frame))
+ f = dpyinfo->last_mouse_frame;
else
- {
- /* Clear the mouse-moved flag for every frame on this display. */
- FOR_EACH_FRAME (tail, frame)
- if (FRAME_NS_P (XFRAME (frame))
- && FRAME_NS_DISPLAY (XFRAME (frame)) == FRAME_NS_DISPLAY (*fp))
- XFRAME (frame)->mouse_moved = 0;
+ f = dpyinfo->x_focus_frame ? dpyinfo->x_focus_frame : SELECTED_FRAME ();
- dpyinfo->last_mouse_scroll_bar = nil;
- if (dpyinfo->last_mouse_frame
- && FRAME_LIVE_P (dpyinfo->last_mouse_frame))
- f = dpyinfo->last_mouse_frame;
- else
- f = dpyinfo->x_focus_frame ? dpyinfo->x_focus_frame
- : SELECTED_FRAME ();
-
- if (f && FRAME_NS_P (f))
- {
- view = FRAME_NS_VIEW (*fp);
+ if (f && FRAME_NS_P (f))
+ {
+ view = FRAME_NS_VIEW (*fp);
- position = [[view window] mouseLocationOutsideOfEventStream];
- position = [view convertPoint: position fromView: nil];
- remember_mouse_glyph (f, position.x, position.y,
- &dpyinfo->last_mouse_glyph);
+ position = [[view window] mouseLocationOutsideOfEventStream];
+ position = [view convertPoint: position fromView: nil];
+ remember_mouse_glyph (f, position.x, position.y,
+ &dpyinfo->last_mouse_glyph);
/*fprintf (stderr, "ns_mouse_position: %.0f, %.0f\n", position.x, position.y); */
- if (bar_window) *bar_window = Qnil;
- if (part) *part = 0; /*scroll_bar_handle; */
+ if (bar_window) *bar_window = Qnil;
+ if (part) *part = scroll_bar_above_handle;
- if (x) XSETINT (*x, lrint (position.x));
- if (y) XSETINT (*y, lrint (position.y));
- if (time)
- *time = dpyinfo->last_mouse_movement_time;
- *fp = f;
- }
+ if (x) XSETINT (*x, lrint (position.x));
+ if (y) XSETINT (*y, lrint (position.y));
+ if (time)
+ *time = dpyinfo->last_mouse_movement_time;
+ *fp = f;
}
unblock_input ();
{
int bx = p->bx, by = p->by, nx = p->nx, ny = p->ny;
- /* If the fringe is adjacent to the left (right) scroll bar of a
- leftmost (rightmost, respectively) window, then extend its
- background to the gap between the fringe and the bar. */
- if ((WINDOW_LEFTMOST_P (w)
- && WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w))
- || (WINDOW_RIGHTMOST_P (w)
- && WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w)))
- {
- int sb_width = WINDOW_CONFIG_SCROLL_BAR_WIDTH (w);
-
- if (sb_width > 0)
- {
- int bar_area_x = WINDOW_SCROLL_BAR_AREA_X (w);
- int bar_area_width = (WINDOW_CONFIG_SCROLL_BAR_COLS (w)
- * FRAME_COLUMN_WIDTH (f));
-
- if (bx < 0)
- {
- /* Bitmap fills the fringe. */
- if (bar_area_x + bar_area_width == p->x)
- bx = bar_area_x + sb_width;
- else if (p->x + p->wd == bar_area_x)
- bx = bar_area_x;
- if (bx >= 0)
- {
- int header_line_height = WINDOW_HEADER_LINE_HEIGHT (w);
-
- nx = bar_area_width - sb_width;
- by = WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height,
- row->y));
- ny = row->visible_height;
- }
- }
- else
- {
- if (bar_area_x + bar_area_width == bx)
- {
- bx = bar_area_x + sb_width;
- nx += bar_area_width - sb_width;
- }
- else if (bx + nx == bar_area_x)
- nx += bar_area_width - sb_width;
- }
- }
- }
-
if (bx >= 0 && nx > 0)
{
NSRect r = NSMakeRect (bx, by, nx, ny);
to erase the whole background. */
[ns_lookup_indexed_color(face->background, f) set];
NSRectFill (r);
- [img setXBMColor: ns_lookup_indexed_color(face->foreground, f)];
-#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
+
+ {
+ NSColor *bm_color;
+ if (!p->cursor_p)
+ bm_color = ns_lookup_indexed_color(face->foreground, f);
+ else if (p->overlay_p)
+ bm_color = ns_lookup_indexed_color(face->background, f);
+ else
+ bm_color = f->output_data.ns->cursor_color;
+ [img setXBMColor: bm_color];
+ }
+
+#ifdef NS_IMPL_COCOA
[img drawInRect: r
fromRect: NSZeroRect
operation: NSCompositeSourceOver
else if (cursor_type == HBAR_CURSOR)
{
cursor_height = (cursor_width < 1) ? lrint (0.25 * h) : cursor_width;
- fy += h - cursor_height;
+ if (cursor_height > glyph_row->height)
+ cursor_height = glyph_row->height;
+ if (h > cursor_height) // Cursor smaller than line height, move down
+ fy += h - cursor_height;
h = cursor_height;
}
ns_unfocus (f);
}
-
-void
-show_hourglass (struct atimer *timer)
+static void
+ns_show_hourglass (struct frame *f)
{
- if (hourglass_shown_p)
- return;
-
- block_input ();
-
- /* TODO: add NSProgressIndicator to selected frame (see macfns.c) */
-
- hourglass_shown_p = 1;
- unblock_input ();
+ /* TODO: add NSProgressIndicator to all frames. */
}
-
-void
-hide_hourglass (void)
+static void
+ns_hide_hourglass (struct frame *f)
{
- if (!hourglass_shown_p)
- return;
-
- block_input ();
-
- /* TODO: remove NSProgressIndicator from all frames */
-
- hourglass_shown_p = 0;
- unblock_input ();
+ /* TODO: remove NSProgressIndicator from all frames. */
}
-
-
/* ==========================================================================
Glyph drawing operations
/* Draw the image.. do we need to draw placeholder if img ==nil? */
if (img != nil)
{
-#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
+#ifdef NS_IMPL_COCOA
NSRect dr = NSMakeRect (x, y, s->slice.width, s->slice.height);
NSRect ir = NSMakeRect (s->slice.x, s->slice.y,
s->slice.width, s->slice.height);
}
#endif
-/* GNUstep and OSX <= 10.4 does not have cancelTracking. */
-#if defined (NS_IMPL_COCOA) && \
- MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
+/* GNUstep does not have cancelTracking. */
+#ifdef NS_IMPL_COCOA
/* Check if menu open should be canceled or continued as normal. */
void
ns_check_menu_open (NSMenu *menu)
menu_will_open_state = MENU_OPENING;
}
}
-#endif /* NS_IMPL_COCOA) && >= MAC_OS_X_VERSION_10_5 */
+#endif /* NS_IMPL_COCOA */
+
+static void
+unwind_apploopnr (Lisp_Object not_used)
+{
+ --apploopnr;
+ n_emacs_events_pending = 0;
+ ns_finish_events ();
+ q_event_ptr = NULL;
+}
static int
ns_read_socket (struct terminal *terminal, struct input_event *hold_quit)
}
else
{
+ ptrdiff_t specpdl_count = SPECPDL_INDEX ();
/* Run and wait for events. We must always send one NX_APPDEFINED event
to ourself, otherwise [NXApp run] will never exit. */
send_appdefined = YES;
{
emacs_abort ();
}
+ record_unwind_protect (unwind_apploopnr, Qt);
[NSApp run];
- --apploopnr;
+ unbind_to (specpdl_count, Qnil); /* calls unwind_apploopnr */
}
nevents = n_emacs_events_pending;
{
emacs_abort ();
}
- [NSApp run];
- --apploopnr;
+
+ {
+ ptrdiff_t specpdl_count = SPECPDL_INDEX ();
+ record_unwind_protect (unwind_apploopnr, Qt);
+ [NSApp run];
+ unbind_to (specpdl_count, Qnil); /* calls unwind_apploopnr */
+ }
+
ns_finish_events ();
if (nr > 0 && readfds)
{
NSRect r, v;
struct frame *f = XFRAME (WINDOW_FRAME (window));
EmacsView *view = FRAME_NS_VIEW (f);
- int window_y, window_height;
- int top, left, height, width, sb_width, sb_left;
EmacsScroller *bar;
- BOOL fringe_extended_p;
+ int window_y, window_height;
+ int top, left, height, width;
+ BOOL update_p = YES;
/* optimization; display engine sends WAY too many of these.. */
if (!NILP (window->vertical_scroll_bar))
}
else
view->scrollbarsNeedingUpdate--;
+ update_p = NO;
}
}
width = WINDOW_CONFIG_SCROLL_BAR_COLS (window) * FRAME_COLUMN_WIDTH (f);
left = WINDOW_SCROLL_BAR_AREA_X (window);
- /* allow for displaying a skinnier scrollbar than char area allotted */
- sb_width = (WINDOW_CONFIG_SCROLL_BAR_WIDTH (window) > 0) ?
- WINDOW_CONFIG_SCROLL_BAR_WIDTH (window) : width;
- sb_left = left;
-
- r = NSMakeRect (sb_left, top, sb_width, height);
+ r = NSMakeRect (left, top, width, height);
/* the parent view is flipped, so we need to flip y value */
v = [view frame];
r.origin.y = (v.size.height - r.size.height - r.origin.y);
- fringe_extended_p = WINDOW_FRINGE_EXTENDED_P (window);
-
XSETWINDOW (win, window);
block_input ();
[bar removeFromSuperview];
wset_vertical_scroll_bar (window, Qnil);
}
- ns_clear_frame_area (f, sb_left, top, width, height);
+ ns_clear_frame_area (f, left, top, width, height);
unblock_input ();
return;
}
if (NILP (window->vertical_scroll_bar))
{
if (width > 0 && height > 0)
- {
- if (fringe_extended_p)
- ns_clear_frame_area (f, sb_left, top, sb_width, height);
- else
- ns_clear_frame_area (f, left, top, width, height);
- }
+ ns_clear_frame_area (f, left, top, width, height);
bar = [[EmacsScroller alloc] initFrame: r window: win];
wset_vertical_scroll_bar (window, make_save_ptr (bar));
+ update_p = YES;
}
else
{
if (FRAME_LIVE_P (f) && !NSEqualRects (oldRect, r))
{
if (oldRect.origin.x != r.origin.x)
- ns_clear_frame_area (f, sb_left, top, width, height);
+ ns_clear_frame_area (f, left, top, width, height);
[bar setFrame: r];
}
}
}
+static void
+ns_set_horizontal_scroll_bar (struct window *window,
+ int portion, int whole, int position)
+/* --------------------------------------------------------------------------
+ External (hook): Update or add scrollbar
+ -------------------------------------------------------------------------- */
+{
+ Lisp_Object win;
+ NSRect r, v;
+ struct frame *f = XFRAME (WINDOW_FRAME (window));
+ EmacsView *view = FRAME_NS_VIEW (f);
+ EmacsScroller *bar;
+ int top, height, left, width;
+ int window_x, window_width;
+ int pixel_width = WINDOW_PIXEL_WIDTH (window);
+
+ /* optimization; display engine sends WAY too many of these.. */
+ if (!NILP (window->horizontal_scroll_bar))
+ {
+ bar = XNS_SCROLL_BAR (window->horizontal_scroll_bar);
+ if ([bar checkSamePosition: position portion: portion whole: whole])
+ {
+ if (view->scrollbarsNeedingUpdate == 0)
+ {
+ if (!windows_or_buffers_changed)
+ return;
+ }
+ else
+ view->scrollbarsNeedingUpdate--;
+ }
+ }
+
+ NSTRACE (ns_set_horizontal_scroll_bar);
+
+ /* Get dimensions. */
+ window_box (window, ANY_AREA, 0, &window_x, &window_width, 0);
+ left = window_x;
+ width = window_width;
+ height = WINDOW_CONFIG_SCROLL_BAR_LINES (window) * FRAME_LINE_HEIGHT (f);
+ top = WINDOW_SCROLL_BAR_AREA_Y (window);
+
+ r = NSMakeRect (left, top, width, height);
+ /* the parent view is flipped, so we need to flip y value */
+ v = [view frame];
+ /* ??????? PXW/scrollbars !!!!!!!!!!!!!!!!!!!! */
+ r.origin.y = (v.size.height - r.size.height - r.origin.y);
+
+ XSETWINDOW (win, window);
+ block_input ();
+
+ if (WINDOW_TOTAL_COLS (window) < 5)
+ {
+ if (!NILP (window->horizontal_scroll_bar))
+ {
+ bar = XNS_SCROLL_BAR (window->horizontal_scroll_bar);
+ [bar removeFromSuperview];
+ wset_horizontal_scroll_bar (window, Qnil);
+ }
+ ns_clear_frame_area (f, left, top, width, height);
+ unblock_input ();
+ return;
+ }
+
+ if (NILP (window->horizontal_scroll_bar))
+ {
+ if (width > 0 && height > 0)
+ ns_clear_frame_area (f, left, top, width, height);
+
+ bar = [[EmacsScroller alloc] initFrame: r window: win];
+ wset_horizontal_scroll_bar (window, make_save_ptr (bar));
+ }
+ else
+ {
+ NSRect oldRect;
+ bar = XNS_SCROLL_BAR (window->horizontal_scroll_bar);
+ oldRect = [bar frame];
+ r.size.width = oldRect.size.width;
+ if (FRAME_LIVE_P (f) && !NSEqualRects (oldRect, r))
+ {
+ if (oldRect.origin.x != r.origin.x)
+ ns_clear_frame_area (f, left, top, width, height);
+ [bar setFrame: r];
+ update_p = YES;
+ }
+ }
+
+ if (update_p)
+ [bar setPosition: position portion: portion whole: whole];
+ unblock_input ();
+}
+
+
static void
ns_condemn_scroll_bars (struct frame *f)
/* --------------------------------------------------------------------------
bar = XNS_SCROLL_BAR (window->vertical_scroll_bar);
[bar reprieve];
}
+
+ if (!NILP (window->horizontal_scroll_bar))
+ {
+ bar = XNS_SCROLL_BAR (window->horizontal_scroll_bar);
+ [bar reprieve];
+ }
}
ns_draw_window_cursor,
ns_draw_vertical_window_border,
ns_draw_window_divider,
- ns_shift_glyphs_for_insert
+ ns_shift_glyphs_for_insert,
+ ns_show_hourglass,
+ ns_hide_hourglass
};
#ifdef NS_IMPL_COCOA
- (void)run
{
-#ifndef NSAppKitVersionNumber10_8
-#define NSAppKitVersionNumber10_8 1187
+#ifndef NSAppKitVersionNumber10_9
+#define NSAppKitVersionNumber10_9 1265
#endif
- if (NSAppKitVersionNumber <= NSAppKitVersionNumber10_8)
- {
- [super run];
- return;
- }
+ if ((int)NSAppKitVersionNumber != NSAppKitVersionNumber10_9)
+ {
+ [super run];
+ return;
+ }
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self sendEvent:event];
[self updateWindows];
} while (shouldKeepRunning);
-
+
[pool release];
}
((EmacsApp *)self)->applicationDidFinishLaunchingCalled = YES;
#endif
[NSApp setServicesProvider: NSApp];
+
+ [self antialiasThresholdDidChange:nil];
+#ifdef NS_IMPL_COCOA
+ [[NSNotificationCenter defaultCenter]
+ addObserver:self
+ selector:@selector(antialiasThresholdDidChange:)
+ name:NSAntialiasThresholdChangedNotification
+ object:nil];
+#endif
+
ns_send_appdefined (-2);
}
+- (void)antialiasThresholdDidChange:(NSNotification *)notification
+{
+#ifdef NS_IMPL_COCOA
+ macfont_update_antialias_threshold ();
+#endif
+}
+
/* Termination sequences:
C-x C-c:
if (!emacs_event)
return;
- if (EQ (font->driver->type, Qns))
- nsfont = ((struct nsfont_info *)font)->nsfont;
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
- else
- nsfont = (NSFont *) macfont_get_nsctfont (font);
+#ifdef NS_IMPL_GNUSTEP
+ nsfont = ((struct nsfont_info *)font)->nsfont;
+#endif
+#ifdef NS_IMPL_COCOA
+ nsfont = (NSFont *) macfont_get_nsctfont (font);
#endif
if ((newFont = [sender convertFont: nsfont]))
int code;
unsigned fnKeysym = 0;
static NSMutableArray *nsEvArray;
-#if !defined (NS_IMPL_COCOA) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6
+#ifdef NS_IMPL_GNUSTEP
static BOOL firstTime = YES;
#endif
int left_is_none;
}
-#if !defined (NS_IMPL_COCOA) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6
+#ifdef NS_IMPL_GNUSTEP
/* if we get here we should send the key for input manager processing */
/* Disable warning, there is nothing a user can do about it anyway, and
it does not seem to matter. */
{
#ifdef NS_IMPL_GNUSTEP
// GNUstep does not always update the tool bar height. Force it.
- if (toolbar) update_frame_tool_bar (emacsframe);
+ if (toolbar && [toolbar isVisible])
+ update_frame_tool_bar (emacsframe);
#endif
extra = FRAME_NS_TITLEBAR_HEIGHT (emacsframe)
// Did resize increments change because of a font change?
if (sz.width != FRAME_COLUMN_WIDTH (emacsframe) ||
- sz.height != FRAME_LINE_HEIGHT (emacsframe))
+ sz.height != FRAME_LINE_HEIGHT (emacsframe) ||
+ (frame_resize_pixelwise && sz.width != 1))
{
- sz.width = FRAME_COLUMN_WIDTH (emacsframe);
- sz.height = FRAME_LINE_HEIGHT (emacsframe);
+ sz.width = frame_resize_pixelwise
+ ? 1 : FRAME_COLUMN_WIDTH (emacsframe);
+ sz.height = frame_resize_pixelwise
+ ? 1 : FRAME_LINE_HEIGHT (emacsframe);
[win setResizeIncrements: sz];
NSTRACE_SIZE ("New size", NSMakeSize (neww, newh));
[win setDelegate: self];
[win useOptimizedDrawing: YES];
- sz.width = FRAME_COLUMN_WIDTH (f);
- sz.height = FRAME_LINE_HEIGHT (f);
+ sz.width = frame_resize_pixelwise ? 1 : FRAME_COLUMN_WIDTH (f);
+ sz.height = frame_resize_pixelwise ? 1 : FRAME_LINE_HEIGHT (f);
[win setResizeIncrements: sz];
[[win contentView] addSubview: self];
(FRAME_DEFAULT_FACE (f)),
f);
- sz.width = FRAME_COLUMN_WIDTH (f);
- sz.height = FRAME_LINE_HEIGHT (f);
+ sz.width = frame_resize_pixelwise ? 1 : FRAME_COLUMN_WIDTH (f);
+ sz.height = frame_resize_pixelwise ? 1 : FRAME_LINE_HEIGHT (f);
if (fs_state != FULLSCREEN_BOTH)
{
/* Hide dock and menubar if we are on the primary screen. */
if (onFirstScreen)
{
-#if defined (NS_IMPL_COCOA) && \
- MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
+#ifdef NS_IMPL_COCOA
NSApplicationPresentationOptions options
= NSApplicationPresentationAutoHideDock
| NSApplicationPresentationAutoHideMenuBar;
[fw makeFirstResponder:self];
[w orderOut:self];
r = [fw frameRectForContentRect:[screen frame]];
- [fw setFrame: r display:YES animate:YES];
+ [fw setFrame: r display:YES animate:ns_use_fullscreen_animation];
[self windowDidEnterFullScreen:nil];
[fw display];
}
if (onFirstScreen)
{
-#if defined (NS_IMPL_COCOA) && \
- MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
+#ifdef NS_IMPL_COCOA
[NSApp setPresentationOptions: NSApplicationPresentationDefault];
#else
[NSMenu setMenuBarVisible:YES];
FRAME_TOOLBAR_HEIGHT (f) = tobar_height;
[self windowWillExitFullScreen:nil];
- [fw setFrame: [w frame] display:YES animate:YES];
+ [fw setFrame: [w frame] display:YES animate:ns_use_fullscreen_animation];
[fw close];
[w makeKeyAndOrderFront:NSApp];
[self windowDidExitFullScreen:nil];
}
else
{
- error ("Invalid data type in dragging pasteboard");
+ fprintf (stderr, "Invalid data type in dragging pasteboard");
return NO;
}
}
#endif
#endif
- for (i = 0; i < nr_screens; ++i)
+ for (i = 0; i < nr_screens; ++i)
{
NSScreen *s = [screens objectAtIndex: i];
NSRect scrrect = [s frame];
if (nr_eff_screens == 1)
return [super constrainFrameRect:frameRect toScreen:screen];
-
+
/* The default implementation does two things 1) ensure that the top
of the rectangle is below the menu bar (or below the top of the
screen) and 2) resizes windows larger than the screen. As we
[self setAutoresizingMask: NSViewMinXMargin | NSViewHeightSizable];
#endif
- win = nwin;
+ window = XWINDOW (nwin);
condemned = NO;
pixel_height = NSHeight (r);
if (pixel_height == 0) pixel_height = 1;
min_portion = 20 / pixel_height;
- frame = XFRAME (XWINDOW (win)->frame);
+ frame = XFRAME (window->frame);
if (FRAME_LIVE_P (frame))
{
int i;
}
+- (void)dealloc
+{
+ NSTRACE (EmacsScroller_dealloc);
+ if (window)
+ wset_vertical_scroll_bar (window, Qnil);
+ window = 0;
+ [super dealloc];
+}
+
+
- condemn
{
NSTRACE (condemn);
view = (EmacsView *)FRAME_NS_VIEW (frame);
if (view != nil)
view->scrollbarsNeedingUpdate++;
- if (!NILP (win))
- wset_vertical_scroll_bar (XWINDOW (win), Qnil);
- win = Qnil;
[self removeFromSuperview];
[self release];
unblock_input ();
if (portion >= whole)
{
-#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
+#ifdef NS_IMPL_COCOA
[self setKnobProportion: 1.0];
[self setDoubleValue: 1.0];
#else
portion = max ((float)whole*min_portion/pixel_height, portion);
pos = (float)position / (whole - portion);
por = (CGFloat)portion/whole;
-#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
+#ifdef NS_IMPL_COCOA
[self setKnobProportion: por];
[self setDoubleValue: pos];
#else
return self;
}
-/* FIXME: unused at moment (see ns_mouse_position) at the moment because
- drag events will go directly to the EmacsScroller. Leaving in for now. */
--(void)getMouseMotionPart: (int *)part window: (Lisp_Object *)window
- x: (Lisp_Object *)x y: ( Lisp_Object *)y
-{
- *part = last_hit_part;
- *window = win;
- XSETINT (*y, pixel_height);
- if ([self floatValue] > 0.999F)
- XSETINT (*x, pixel_height);
- else
- XSETINT (*x, pixel_height * [self floatValue]);
-}
-
-
/* set up emacs_event */
- (void) sendScrollEventAtLoc: (float)loc fromEvent: (NSEvent *)e
{
+ Lisp_Object win;
if (!emacs_event)
return;
emacs_event->part = last_hit_part;
emacs_event->code = 0;
emacs_event->modifiers = EV_MODIFIERS (e) | down_modifier;
+ XSETWINDOW (win, window);
emacs_event->frame_or_window = win;
emacs_event->timestamp = EV_TIMESTAMP (e);
emacs_event->kind = SCROLL_BAR_CLICK_EVENT;
[scroll_repeat_entry release];
scroll_repeat_entry = nil;
}
- last_hit_part = 0;
+ last_hit_part = scroll_bar_above_handle;
}
FRAME_COLUMN_WIDTH (f) = font->average_width;
FRAME_LINE_HEIGHT (f) = font->height;
- compute_fringe_widths (f, 1);
-
/* Compute the scroll bar width in character columns. */
if (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) > 0)
{
FRAME_CONFIG_SCROLL_BAR_COLS (f) = (14 + wid - 1) / wid;
}
+ /* Compute the scroll bar height in character lines. */
+ if (FRAME_CONFIG_SCROLL_BAR_HEIGHT (f) > 0)
+ {
+ int height = FRAME_LINE_HEIGHT (f);
+ FRAME_CONFIG_SCROLL_BAR_LINES (f)
+ = (FRAME_CONFIG_SCROLL_BAR_HEIGHT (f) + height - 1) / height;
+ }
+ else
+ {
+ int height = FRAME_LINE_HEIGHT (f);
+ FRAME_CONFIG_SCROLL_BAR_LINES (f) = (14 + height - 1) / height;
+ }
+
/* Now make the frame display the given font. */
if (FRAME_NS_WINDOW (f) != 0 && ! [view isFullscreen])
x_set_window_size (f, 0, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f),
#endif
ns_last_use_native_fullscreen = ns_use_native_fullscreen;
+ DEFVAR_BOOL ("ns-use-fullscreen-animation", ns_use_fullscreen_animation,
+ doc: /*Non-nil means use animation on non-native fullscreen.
+For native fullscreen, this does nothing.
+Default is nil. */);
+ ns_use_fullscreen_animation = NO;
+
DEFVAR_BOOL ("ns-use-srgb-colorspace", ns_use_srgb_colorspace,
doc: /*Non-nil means to use sRGB colorspace on OSX >= 10.7.
Note that this does not apply to images.
DEFSYM (Qcocoa, "cocoa");
DEFSYM (Qgnustep, "gnustep");
- syms_of_nsfont ();
#ifdef NS_IMPL_COCOA
Fprovide (Qcocoa, Qnil);
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050
syms_of_macfont ();
-#endif
#else
Fprovide (Qgnustep, Qnil);
+ syms_of_nsfont ();
#endif
}