* nsfns.m (x_icon): icon_top/left is int.

* nsterm.h (EmacsScroller): Replace Lisp_Object win with
struct window*.
Remove getMouseMotionPart.
(ns_output): Make icon_top/left int.

* nsterm.m (ns_mouse_position): Remove unused code.
(initFrame🪟, dealloc): Use window instead of win.
(getMouseMotionPart🪟x:y:): Remove, unused.
(sendScrollEventAtLoc:fromEvent:): Make Lisp_Object win from window.

Fixes: debbugs:18889
This commit is contained in:
Jan Djärv 2014-10-30 18:23:52 +01:00
parent fda2bc46a8
commit b7bf631c80
4 changed files with 53 additions and 67 deletions

View file

@ -1,3 +1,17 @@
2014-10-30 Jan Djärv <jan.h.d@swipnet.se>
* nsterm.h (EmacsScroller): Replace Lisp_Object win with
struct window* (Bug#18889).
Remove getMouseMotionPart.
(ns_output): Make icon_top/left int.
* nsfns.m (x_icon): icon_top/left is int.
* nsterm.m (ns_mouse_position): Remove unused code.
(initFrame:window:, dealloc): Use window instead of win.
(getMouseMotionPart:window:x:y:): Remove, unused.
(sendScrollEventAtLoc:fromEvent:): Make Lisp_Object win from window.
2014-10-30 Samuel Bronson <naesten@gmail.com>
* unexmacosx.c (copy_data_segment): Port to GCC 4.6+ (Bug#9927).

View file

@ -913,8 +913,8 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side
Lisp_Object icon_x, icon_y;
struct ns_display_info *dpyinfo = check_ns_display_info (Qnil);
f->output_data.ns->icon_top = Qnil;
f->output_data.ns->icon_left = Qnil;
f->output_data.ns->icon_top = -1;
f->output_data.ns->icon_left = -1;
/* Set the position of the icon. */
icon_x = x_get_arg (dpyinfo, parms, Qicon_left, 0, 0, RES_TYPE_NUMBER);
@ -923,8 +923,8 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side
{
CHECK_NUMBER (icon_x);
CHECK_NUMBER (icon_y);
f->output_data.ns->icon_top = icon_y;
f->output_data.ns->icon_left = icon_x;
f->output_data.ns->icon_top = XINT (icon_y);
f->output_data.ns->icon_left = XINT (icon_x);
}
else if (!EQ (icon_x, Qunbound) || !EQ (icon_y, Qunbound))
error ("Both left and top icon corners of icon must be specified");

View file

@ -393,7 +393,7 @@ typedef float EmacsCGFloat;
@interface EmacsScroller : NSScroller
{
Lisp_Object win;
struct window *window;
struct frame *frame;
NSResponder *prevResponder;
@ -418,8 +418,6 @@ typedef float EmacsCGFloat;
- setPosition: (int) position portion: (int) portion whole: (int) whole;
- (int) checkSamePosition: (int)position portion: (int)portion
whole: (int)whole;
- (void) getMouseMotionPart: (int *)part window: (Lisp_Object *)window
x: (Lisp_Object *)x y: ( Lisp_Object *)y;
- (void) sendScrollEventAtLoc: (float)loc fromEvent: (NSEvent *)e;
- repeatScroll: (NSTimer *)sender;
- condemn;
@ -685,8 +683,8 @@ struct ns_output
value contains an ID of the fontset, else -1. */
int fontset; /* only used with font_backend */
Lisp_Object icon_top;
Lisp_Object icon_left;
int icon_top;
int icon_left;
/* The size of the extra width currently allotted for vertical
scroll bars, in pixels. */

View file

@ -1902,51 +1902,37 @@ Free a pool and temporary objects it refers to (callable from C)
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
f = dpyinfo->x_focus_frame ? dpyinfo->x_focus_frame : SELECTED_FRAME ();
if (f && FRAME_NS_P (f))
{
/* 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;
view = FRAME_NS_VIEW (*fp);
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);
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 = 0; /*scroll_bar_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 ();
@ -7121,13 +7107,13 @@ + (CGFloat) scrollerWidth
[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;
@ -7165,8 +7151,9 @@ - (void)setFrame: (NSRect)newRect
- (void)dealloc
{
NSTRACE (EmacsScroller_dealloc);
if (!NILP (win))
wset_vertical_scroll_bar (XWINDOW (win), Qnil);
if (window)
wset_vertical_scroll_bar (window, Qnil);
window = 0;
[super dealloc];
}
@ -7265,30 +7252,17 @@ - (int) checkSamePosition: (int) position portion: (int) portion
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;