#include "buffer.h"
#include "font.h"
+#ifdef NS_IMPL_GNUSTEP
+#include "process.h"
+#endif
+
/* call tracing */
#if 0
int term_trace_num = 0;
static BOOL ns_fake_keydown = NO;
int ns_tmp_flags; /* FIXME */
struct nsfont_info *ns_tmp_font; /* FIXME */
+#ifdef NS_IMPL_COCOA
static BOOL ns_menu_bar_is_hidden = NO;
+#endif
/*static int debug_lock = 0; */
/* event loop */
NULL, 0, 0
};
+#ifdef NS_IMPL_COCOA
+/*
+ * State for pending menu activation:
+ * MENU_NONE Normal state
+ * MENU_PENDING A menu has been clicked on, but has been canceled so we can
+ * run lisp to update the menu.
+ * MENU_OPENING Menu is up to date, and the click event is redone so the menu
+ * will open.
+ */
+#define MENU_NONE 0
+#define MENU_PENDING 1
+#define MENU_OPENING 2
+static int menu_will_open_state = MENU_NONE;
+
+/* Saved position for menu click. */
+static CGPoint menu_mouse_point;
+
+/* Title for the menu to open. */
+static char *menu_pending_title = 0;
+#endif
+
/* Convert modifiers in a NeXTstep event to emacs style modifiers. */
#define NS_FUNCTION_KEY_MASK 0x800000
#define NSLeftControlKeyMask (0x000001 | NSControlKeyMask)
ns_send_appdefined (-1); \
}
-void x_set_cursor_type (struct frame *, Lisp_Object, Lisp_Object);
-
/* TODO: get rid of need for these forward declarations */
static void ns_condemn_scroll_bars (struct frame *f);
static void ns_judge_scroll_bars (struct frame *f);
-------------------------------------------------------------------------- */
{
NSView *view = FRAME_NS_VIEW (f);
- NSRect r = [view frame];
- NSBezierPath *bp;
NSTRACE (ns_update_begin);
ns_update_auto_hide_menu_bar ();
is for the minibuffer. But the display engine may draw more because
we have set the frame as garbaged. So reset clip path to the whole
view. */
+#ifdef NS_IMPL_COCOA
+ {
+ NSBezierPath *bp;
+ NSRect r = [view frame];
bp = [[NSBezierPath bezierPathWithRect: r] retain];
[bp setClip];
[bp release];
+ }
+#endif
#ifdef NS_IMPL_GNUSTEP
uRect = NSMakeRect (0, 0, 0, 0);
external (RIF) call; for whole frame, called after update_window_end
-------------------------------------------------------------------------- */
{
- NSView *view = FRAME_NS_VIEW (f);
+ EmacsView *view = FRAME_NS_VIEW (f);
/* if (f == MOUSE_HL_INFO (f)->mouse_face_mouse_frame) */
MOUSE_HL_INFO (f)->mouse_face_defer = 0;
block_input ();
-#ifdef NS_IMPL_GNUSTEP
- /* trigger flush only in the rectangle we tracked as being drawn */
- [view unlockFocusNeedsFlush: NO];
-/*fprintf (stderr, " (%.0f, %.0f : %.0f x %.0f)", uRect.origin.x, uRect.origin.y, uRect.size.width, uRect.size.height); */
- [view lockFocusInRect: uRect];
-#endif
-
[view unlockFocus];
[[view window] flushWindow];
-------------------------------------------------------------------------- */
{
// NSTRACE (ns_focus);
-#ifdef NS_IMPL_GNUSTEP
- NSRect u;
- if (n == 2)
- u = NSUnionRect (r[0], r[1]);
- else if (r)
- u = *r;
-#endif
/* static int c =0;
fprintf (stderr, "focus: %d", c++);
if (r) fprintf (stderr, " (%.0f, %.0f : %.0f x %.0f)", r->origin.x, r->origin.y, r->size.width, r->size.height);
}
if (view)
-#ifdef NS_IMPL_GNUSTEP
- r ? [view lockFocusInRect: u] : [view lockFocus];
-#else
[view lockFocus];
-#endif
focus_view = view;
/*if (view) debug_lock++; */
}
-#ifdef NS_IMPL_GNUSTEP
- else
- {
- /* more than one rect being drawn into */
- if (view && r)
- {
- [view unlockFocus]; /* add prev rect to redraw list */
- [view lockFocusInRect: u]; /* focus for draw in new rect */
- }
- }
-#endif
- }
-#ifdef NS_IMPL_GNUSTEP
- else
- {
- /* in batch mode, but in GNUstep must still track rectangles explicitly */
- uRect = (r ? NSUnionRect (uRect, u) : [FRAME_NS_VIEW (f) visibleRect]);
}
-#endif
/* clipping */
if (r)
Bring window to foreground and make it active
-------------------------------------------------------------------------- */
{
- NSView *view = FRAME_NS_VIEW (f);
- check_ns ();
+ NSView *view;
+ check_window_system (f);
+ view = FRAME_NS_VIEW (f);
block_input ();
if (FRAME_VISIBLE_P (f))
[[view window] makeKeyAndOrderFront: NSApp];
Send window to back
-------------------------------------------------------------------------- */
{
- NSView *view = FRAME_NS_VIEW (f);
- check_ns ();
+ NSView *view;
+ check_window_system (f);
+ view = FRAME_NS_VIEW (f);
block_input ();
[[view window] orderBack: NSApp];
unblock_input ();
External: Hide the window (X11 semantics)
-------------------------------------------------------------------------- */
{
- NSView * view = FRAME_NS_VIEW (f);
+ NSView *view;
NSTRACE (x_make_frame_invisible);
- check_ns ();
+ check_window_system (f);
+ view = FRAME_NS_VIEW (f);
[[view window] orderOut: NSApp];
SET_FRAME_VISIBLE (f, 0);
SET_FRAME_ICONIFIED (f, 0);
External: Iconify window
-------------------------------------------------------------------------- */
{
- NSView * view = FRAME_NS_VIEW (f);
- struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (f);
+ NSView *view;
+ struct ns_display_info *dpyinfo;
+
NSTRACE (x_iconify_frame);
- check_ns ();
+ check_window_system (f);
+ view = FRAME_NS_VIEW (f);
+ dpyinfo = FRAME_NS_DISPLAY_INFO (f);
if (dpyinfo->x_highlight_frame == f)
dpyinfo->x_highlight_frame = 0;
void
x_free_frame_resources (struct frame *f)
{
- NSView *view = FRAME_NS_VIEW (f);
- struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (f);
- Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
+ NSView *view;
+ struct ns_display_info *dpyinfo;
+ Mouse_HLInfo *hlinfo;
+
NSTRACE (x_free_frame_resources);
- check_ns ();
+ check_window_system (f);
+ view = FRAME_NS_VIEW (f);
+ dpyinfo = FRAME_NS_DISPLAY_INFO (f);
+ hlinfo = MOUSE_HL_INFO (f);
[(EmacsView *)view setWindowClosing: YES]; /* may not have been informed */
-------------------------------------------------------------------------- */
{
NSTRACE (x_destroy_window);
- check_ns ();
+ check_window_system (f);
x_free_frame_resources (f);
ns_window_num--;
}
/* If we have a toolbar, take its height into account. */
if (tb && ! [view isFullscreen])
+ {
/* NOTE: previously this would generate wrong result if toolbar not
yet displayed and fixing toolbar_height=32 helped, but
now (200903) seems no longer needed */
FRAME_TOOLBAR_HEIGHT (f) =
NSHeight ([window frameRectForContentRect: NSMakeRect (0, 0, 0, 0)])
- FRAME_NS_TITLEBAR_HEIGHT (f);
+#ifdef NS_IMPL_GNUSTEP
+ FRAME_TOOLBAR_HEIGHT (f) -= 3;
+#endif
+ }
else
FRAME_TOOLBAR_HEIGHT (f) = 0;
}
}
- if (r >= 0.0)
+ if (r >= 0.0F)
{
*col = [NSColor colorWithCalibratedRed: r green: g blue: b alpha: 1.0];
unblock_input ();
Convert a color to a lisp string with the RGB equivalent
-------------------------------------------------------------------------- */
{
- CGFloat red, green, blue, alpha, gray;
+ EmacsCGFloat red, green, blue, alpha, gray;
char buf[1024];
const char *str;
NSTRACE (ns_color_to_lisp);
and set color_def pixel to the resulting index.
-------------------------------------------------------------------------- */
{
- CGFloat r, g, b, a;
+ EmacsCGFloat r, g, b, a;
[((NSColor *)col) getRed: &r green: &g blue: &b alpha: &a];
color_def->red = r * 65535;
}
-unsigned long
-ns_get_rgb_color (struct frame *f, float r, float g, float b, float a)
-/* --------------------------------------------------------------------------
- return an autoreleased RGB color
- -------------------------------------------------------------------------- */
-{
-/*static int c = 1; fprintf (stderr, "color request %d\n", c++); */
- if (r < 0.0) r = 0.0;
- else if (r > 1.0) r = 1.0;
- if (g < 0.0) g = 0.0;
- else if (g > 1.0) g = 1.0;
- if (b < 0.0) b = 0.0;
- else if (b > 1.0) b = 1.0;
- if (a < 0.0) a = 0.0;
- else if (a > 1.0) a = 1.0;
- return (unsigned long) ns_index_color(
- [NSColor colorWithCalibratedRed: r green: g blue: b alpha: a], f);
-}
-
-
void
x_set_frame_alpha (struct frame *f)
/* --------------------------------------------------------------------------
-------------------------------------------------------------------------- */
{
struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (f);
- EmacsView *view = FRAME_NS_VIEW (f);
double alpha = 1.0;
double alpha_min = 1.0;
alpha = alpha_min;
#ifdef NS_IMPL_COCOA
+ {
+ EmacsView *view = FRAME_NS_VIEW (f);
[[view window] setAlphaValue: alpha];
+ }
#endif
}
static int
-note_mouse_movement (struct frame *frame, float x, float y)
+note_mouse_movement (struct frame *frame, CGFloat x, CGFloat y)
/* ------------------------------------------------------------------------
Called by EmacsView on mouseMovement events. Passes on
to emacs mainstream code if we moved off of a rect of interest
f = dpyinfo->x_focus_frame ? dpyinfo->x_focus_frame
: SELECTED_FRAME ();
- if (f && f->output_data.ns) /* TODO: 2nd check no longer needed? */
+ if (f && FRAME_NS_P (f))
{
view = FRAME_NS_VIEW (*fp);
{
struct frame *f = XFRAME (WINDOW_FRAME (w));
struct face *face = p->face;
- int rowY;
static EmacsImage **bimgs = NULL;
static int nBimgs = 0;
}
/* Must clip because of partially visible lines. */
- rowY = WINDOW_TO_FRAME_PIXEL_Y (w, row->y);
ns_clip_to_row (w, row, -1, YES);
if (!p->overlay_p)
[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
+#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
[img drawInRect: r
fromRect: NSZeroRect
operation: NSCompositeSourceOver
int fx, fy, h, cursor_height;
struct frame *f = WINDOW_XFRAME (w);
struct glyph *phys_cursor_glyph;
- int overspill;
struct glyph *cursor_glyph;
struct face *face;
NSColor *hollow_color = FRAME_BACKGROUND_COLOR (f);
--------------------------------------------------------------------- */
static void
-ns_draw_underwave (struct glyph_string *s, CGFloat width, CGFloat x)
+ns_draw_underwave (struct glyph_string *s, EmacsCGFloat width, EmacsCGFloat x)
{
int wave_height = 3, wave_length = 2;
int y, dx, dy, odd, xmax;
NSRectClip (waveClip);
/* Draw the waves */
- a.x = x - ((int)(x) % dx) + 0.5;
+ a.x = x - ((int)(x) % dx) + (EmacsCGFloat) 0.5;
b.x = a.x + dx;
odd = (int)(a.x/dx) % 2;
a.y = b.y = y + 0.5;
}
static void
-ns_draw_box (NSRect r, float thickness, NSColor *col, char left_p, char right_p)
+ns_draw_box (NSRect r, CGFloat thickness, NSColor *col,
+ char left_p, char right_p)
/* --------------------------------------------------------------------------
Draw an unfilled rect inside r, optionally leaving left and/or right open.
Note we can't just use an NSDrawRect command, because of the possibility
/* 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
+#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
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);
{
/*NSTRACE (ns_send_appdefined); */
+#ifdef NS_IMPL_GNUSTEP
+ // GNUStep needs postEvent to happen on the main thread.
+ if (! [[NSThread currentThread] isMainThread])
+ {
+ EmacsApp *app = (EmacsApp *)NSApp;
+ app->nextappdefined = value;
+ [app performSelectorOnMainThread:@selector (sendFromMainThread:)
+ withObject:nil
+ waitUntilDone:YES];
+ return;
+ }
+#endif
+
/* Only post this event if we haven't already posted one. This will end
the [NXApp run] main loop after having processed all events queued at
this moment. */
}
#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
+const char *
+ns_get_pending_menu_title ()
+{
+ return menu_pending_title;
+}
+
+/* Check if menu open should be cancelled or continued as normal. */
+void
+ns_check_menu_open (NSMenu *menu)
+{
+ /* Click in menu bar? */
+ NSArray *a = [[NSApp mainMenu] itemArray];
+ int i;
+ BOOL found = NO;
+ for (i = 0; ! found && i < [a count]; i++)
+ found = menu == [[a objectAtIndex:i] submenu];
+ if (found)
+ {
+ if (menu_will_open_state == MENU_NONE && emacs_event)
+ {
+ NSEvent *theEvent = [NSApp currentEvent];
+ struct frame *emacsframe = SELECTED_FRAME ();
+
+ [menu cancelTracking];
+ menu_will_open_state = MENU_PENDING;
+ emacs_event->kind = MENU_BAR_ACTIVATE_EVENT;
+ EV_TRAILER (theEvent);
+
+ CGEventRef ourEvent = CGEventCreate (NULL);
+ menu_mouse_point = CGEventGetLocation (ourEvent);
+ CFRelease (ourEvent);
+ xfree (menu_pending_title);
+ menu_pending_title = xstrdup ([[menu title] UTF8String]);
+ }
+ else if (menu_will_open_state == MENU_OPENING)
+ {
+ menu_will_open_state = MENU_NONE;
+ }
+ }
+}
+
+/* Redo saved menu click if state is MENU_PENDING. */
+void
+ns_check_pending_open_menu ()
+{
+ if (menu_will_open_state == MENU_PENDING)
+ {
+ CGEventSourceRef source
+ = CGEventSourceCreate (kCGEventSourceStateHIDSystemState);
+
+ CGEventRef event = CGEventCreateMouseEvent (source,
+ kCGEventLeftMouseDown,
+ menu_mouse_point,
+ kCGMouseButtonLeft);
+ CGEventSetType (event, kCGEventLeftMouseDown);
+ CGEventPost (kCGHIDEventTap, event);
+ CFRelease (event);
+ CFRelease (source);
+
+ menu_will_open_state = MENU_OPENING;
+ }
+}
+#endif /* NS_IMPL_COCOA) && >= MAC_OS_X_VERSION_10_5 */
+
static int
ns_read_socket (struct terminal *terminal, struct input_event *hold_quit)
/* --------------------------------------------------------------------------
result = t;
}
}
+ else
+ {
+ errno = EINTR;
+ result = -1;
+ }
return result;
}
int
x_display_pixel_height (struct ns_display_info *dpyinfo)
{
- NSScreen *screen = [NSScreen mainScreen];
- return [screen frame].size.height;
+ NSArray *screens = [NSScreen screens];
+ NSEnumerator *enumerator = [screens objectEnumerator];
+ NSScreen *screen;
+ NSRect frame;
+
+ frame = NSZeroRect;
+ while ((screen = [enumerator nextObject]) != nil)
+ frame = NSUnionRect (frame, [screen frame]);
+
+ return NSHeight (frame);
}
int
x_display_pixel_width (struct ns_display_info *dpyinfo)
{
- NSScreen *screen = [NSScreen mainScreen];
- return [screen frame].size.width;
+ NSArray *screens = [NSScreen screens];
+ NSEnumerator *enumerator = [screens objectEnumerator];
+ NSScreen *screen;
+ NSRect frame;
+
+ frame = NSZeroRect;
+ while ((screen = [enumerator nextObject]) != nil)
+ frame = NSUnionRect (frame, [screen frame]);
+
+ return NSWidth (frame);
}
[NSApp run];
ns_do_open_file = YES;
+
+#if defined (NS_IMPL_GNUSTEP) && defined (SIGCHLD)
+ /* GNUstep steals SIGCHLD for use in NSTask, but we don't use NSTask.
+ We must re-catch it so subprocess works. */
+ catch_child_signal ();
+#endif
return dpyinfo;
}
ns_send_appdefined (-2);
}
+#ifdef NS_IMPL_GNUSTEP
+- (void)sendFromMainThread:(id)unused
+{
+ ns_send_appdefined (nextappdefined);
+}
+#endif
+
- (void)fd_handler:(id)unused
/* --------------------------------------------------------------------------
Check data waiting on file descriptors and terminate if so
NSEvent *e =[[self window] currentEvent];
struct face *face =FRAME_DEFAULT_FACE (emacsframe);
id newFont;
- float size;
+ CGFloat size;
NSTRACE (changeFont);
if (!emacs_event)
{
/* COUNTERHACK: map 'Delete' on upper-right main KB to 'Backspace',
because Emacs treats Delete and KP-Delete same (in simple.el). */
- if (fnKeysym == 0xFFFF && [theEvent keyCode] == 0x33)
+ if ((fnKeysym == 0xFFFF && [theEvent keyCode] == 0x33)
+#ifdef NS_IMPL_GNUSTEP
+ /* GNUstep uses incompatible keycodes, even for those that are
+ supposed to be hardware independent. Just check for delete.
+ Keypad delete does not have keysym 0xFFFF.
+ See http://savannah.gnu.org/bugs/?25395
+ */
+ || (fnKeysym == 0xFFFF && code == 127)
+#endif
+ )
code = 0xFF08; /* backspace */
else
code = fnKeysym;
#if !defined (NS_IMPL_COCOA) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6
/* 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. */
+#if 0
if (firstTime && [[NSInputManager currentInputManager]
wantsToDelayTextChangeNotifications] == NO)
fprintf (stderr,
"Emacs: WARNING: TextInput mgr wants marked text to be permanent!\n");
+#endif
firstTime = NO;
#endif
if (NS_KEYLOG && !processingCompose)
return NSMakeRange (NSNotFound, 0);
}
+#if defined (NS_IMPL_COCOA) || GNUSTEP_GUI_MAJOR_VERSION > 0 || \
+ GNUSTEP_GUI_MINOR_VERSION > 22
- (NSUInteger)characterIndexForPoint: (NSPoint)thePoint
+#else
+- (unsigned int)characterIndexForPoint: (NSPoint)thePoint
+#endif
{
if (NS_KEYLOG)
NSLog (@"characterIndexForPoint request");
if ([theEvent type] == NSScrollWheel)
{
- float delta = [theEvent deltaY];
+ CGFloat delta = [theEvent deltaY];
/* Mac notebooks send wheel events w/delta =0 when trackpad scrolling */
if (delta == 0)
return;
if (oldr != rows || oldc != cols || neww != oldw || newh != oldh)
{
NSView *view = FRAME_NS_VIEW (emacsframe);
+ NSWindow *win = [view window];
+ NSSize sz = [win resizeIncrements];
+
FRAME_PIXEL_WIDTH (emacsframe) = neww;
FRAME_PIXEL_HEIGHT (emacsframe) = newh;
change_frame_size (emacsframe, rows, cols, 0, delay, 0);
SET_FRAME_GARBAGED (emacsframe);
cancel_mouse_face (emacsframe);
+
+ // Did resize increments change because of a font change?
+ if (sz.width != FRAME_COLUMN_WIDTH (emacsframe) ||
+ sz.height != FRAME_LINE_HEIGHT (emacsframe))
+ {
+ sz.width = FRAME_COLUMN_WIDTH (emacsframe);
+ sz.height = FRAME_LINE_HEIGHT (emacsframe);
+ [win setResizeIncrements: sz];
+ }
+
[view setFrame: NSMakeRect (0, 0, neww, newh)];
[self windowDidMove:nil]; // Update top/left.
}
NSRect r, wr;
Lisp_Object tem;
NSWindow *win;
- NSButton *toggleButton;
NSSize sz;
NSColor *col;
NSString *name;
[win setToolbar: toolbar];
[toolbar setVisible: NO];
#ifdef NS_IMPL_COCOA
+ {
+ NSButton *toggleButton;
toggleButton = [win standardWindowButton: NSWindowToolbarButton];
[toggleButton setTarget: self];
[toggleButton setAction: @selector (toggleToolbar: )];
+ }
#endif
FRAME_TOOLBAR_HEIGHT (f) = 0;
col = ns_lookup_indexed_color (NS_FACE_BACKGROUND
(FRAME_DEFAULT_FACE (emacsframe)), emacsframe);
[win setBackgroundColor: col];
- if ([col alphaComponent] != 1.0)
+ if ([col alphaComponent] != (EmacsCGFloat) 1.0)
[win setOpaque: NO];
[self allocateGState];
result = ns_userRect.size.height ? ns_userRect : result;
ns_userRect = NSMakeRect (0, 0, 0, 0);
[self setFSValue: FULLSCREEN_NONE];
- maximized_width = maximized_width = -1;
+ maximized_width = maximized_height = -1;
}
if (fs_before_fs == -1) next_maximized = -1;
{
[self setFSValue: fs_before_fs];
fs_before_fs = -1;
+#ifdef NS_IMPL_COCOA
[self updateCollectionBehaviour];
+#endif
if (FRAME_EXTERNAL_TOOL_BAR (emacsframe))
{
[toolbar setVisible:YES];
if (fs_is_native)
{
+#ifdef NS_IMPL_COCOA
[[self window] toggleFullScreen:sender];
+#endif
return;
}
[fw useOptimizedDrawing: YES];
[fw setResizeIncrements: sz];
[fw setBackgroundColor: col];
- if ([col alphaComponent] != 1.0)
+ if ([col alphaComponent] != (EmacsCGFloat) 1.0)
[fw setOpaque: NO];
f->border_width = 0;
[w setContentView:[fw contentView]];
[w setResizeIncrements: sz];
[w setBackgroundColor: col];
- if ([col alphaComponent] != 1.0)
+ if ([col alphaComponent] != (EmacsCGFloat) 1.0)
[w setOpaque: NO];
f->border_width = bwidth;
{
Lisp_Object str = Qnil;
struct frame *f = SELECTED_FRAME ();
- struct buffer *curbuf = XBUFFER (XWINDOW (f->selected_window)->buffer);
+ struct buffer *curbuf = XBUFFER (XWINDOW (f->selected_window)->contents);
if ([attribute isEqualToString:NSAccessibilityRoleAttribute])
return NSAccessibilityTextFieldRole;
}
else
{
- float pos, por;
+ float pos;
+ CGFloat por;
portion = max ((float)whole*min_portion/pixel_height, portion);
pos = (float)position / (whole - portion);
- por = (float)portion/whole;
+ por = (CGFloat)portion/whole;
#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
[self setKnobProportion: por];
[self setDoubleValue: pos];
*part = last_hit_part;
*window = win;
XSETINT (*y, pixel_height);
- if ([self floatValue] > 0.999)
+ if ([self floatValue] > 0.999F)
XSETINT (*x, pixel_height);
else
XSETINT (*x, pixel_height * [self floatValue]);
NSRect sr, kr;
/* hitPart is only updated AFTER event is passed on */
NSScrollerPart part = [self testPart: [e locationInWindow]];
- double inc = 0.0, loc, kloc, pos;
+ CGFloat inc = 0.0, loc, kloc, pos;
int edge = 0;
NSTRACE (EmacsScroller_mouseDown);
{
NSRect sr;
double loc, pos;
- int edge = 0;
NSTRACE (EmacsScroller_mouseDragged);
if (loc <= 0.0)
{
loc = 0.0;
- edge = -1;
}
else if (loc >= NSHeight (sr) + last_mouse_offset)
{
loc = NSHeight (sr) + last_mouse_offset;
- edge = 1;
}
- pos = /*(edge ? loc :*/ (loc - last_mouse_offset) / NSHeight (sr);
+ pos = (loc - last_mouse_offset) / NSHeight (sr);
[self sendScrollEventAtLoc: pos fromEvent: e];
}
@end /* EmacsScroller */
+#ifdef NS_IMPL_GNUSTEP
+/* Dummy class to get rid of startup warnings. */
+@implementation EmacsDocument
+
+@end
+#endif
/* ==========================================================================