/* 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. */
{
if (hold_event_q.cap == 0) hold_event_q.cap = 10;
else hold_event_q.cap *= 2;
- hold_event_q.q = (struct input_event *)
- xrealloc (hold_event_q.q, hold_event_q.cap * sizeof (*hold_event_q.q));
+ hold_event_q.q =
+ xrealloc (hold_event_q.q, hold_event_q.cap * sizeof *hold_event_q.q);
}
hold_event_q.q[hold_event_q.nr++] = *event;
{
NSBezierPath *bp;
NSRect r = [view frame];
- bp = [[NSBezierPath bezierPathWithRect: r] retain];
- [bp setClip];
- [bp release];
+ NSRect cr = [[view window] frame];
+ /* If a large frame size is set, r may be larger than the window frame
+ before constrained. In that case don't change the clip path, as we
+ will clear in to the tool bar and title bar. */
+ if (r.size.height
+ + FRAME_NS_TITLEBAR_HEIGHT (f)
+ + FRAME_TOOLBAR_HEIGHT (f) <= cr.size.height)
+ {
+ bp = [[NSBezierPath bezierPathWithRect: r] retain];
+ [bp setClip];
+ [bp release];
+ }
}
#endif
-------------------------------------------------------------------------- */
{
struct frame *f = XFRAME (WINDOW_FRAME (w));
- Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
+ Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
+
NSTRACE (ns_update_window_begin);
- updated_window = w;
set_output_cursor (&w->cursor);
block_input ();
static void
-ns_update_window_end (struct window *w, int cursor_on_p,
- int mouse_face_overwritten_p)
+ns_update_window_end (struct window *w, bool cursor_on_p,
+ bool mouse_face_overwritten_p)
/* --------------------------------------------------------------------------
Finished a grouped sequence of drawing calls
external (RIF) call; for one window called before update_end
-------------------------------------------------------------------------- */
{
- Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (XFRAME (w->frame));
-
/* note: this fn is nearly identical in all terms */
if (!w->pseudo_window_p)
{
/* If a row with mouse-face was overwritten, arrange for
frame_up_to_date to redisplay the mouse highlight. */
if (mouse_face_overwritten_p)
- {
- hlinfo->mouse_face_beg_row = hlinfo->mouse_face_beg_col = -1;
- hlinfo->mouse_face_end_row = hlinfo->mouse_face_end_col = -1;
- hlinfo->mouse_face_window = Qnil;
- }
+ reset_mouse_highlight (MOUSE_HL_INFO (XFRAME (w->frame)));
- updated_window = NULL;
NSTRACE (update_window_end);
}
EmacsView *view = FRAME_NS_VIEW (f);
/* if (f == MOUSE_HL_INFO (f)->mouse_face_mouse_frame) */
- MOUSE_HL_INFO (f)->mouse_face_defer = 0;
+ MOUSE_HL_INFO (f)->mouse_face_defer = 0;
- block_input ();
+ block_input ();
[view unlockFocus];
[[view window] flushWindow];
if (f == dpyinfo->x_highlight_frame)
dpyinfo->x_highlight_frame = 0;
if (f == hlinfo->mouse_face_mouse_frame)
- {
- hlinfo->mouse_face_beg_row = hlinfo->mouse_face_beg_col = -1;
- hlinfo->mouse_face_end_row = hlinfo->mouse_face_end_col = -1;
- hlinfo->mouse_face_window = Qnil;
- hlinfo->mouse_face_mouse_frame = 0;
- }
+ reset_mouse_highlight (hlinfo);
if (f->output_data.ns->miniimage != nil)
[f->output_data.ns->miniimage release];
block_input ();
- updated_window = w;
x_clear_cursor (w);
{
static void
-ns_after_update_window_line (struct glyph_row *desired_row)
+ns_after_update_window_line (struct window *w, struct glyph_row *desired_row)
/* --------------------------------------------------------------------------
External (RIF): preparatory to fringe update after text was updated
-------------------------------------------------------------------------- */
{
- struct window *w = updated_window;
struct frame *f;
int width, height;
static void
ns_draw_window_cursor (struct window *w, struct glyph_row *glyph_row,
- int x, int y, int cursor_type, int cursor_width,
- int on_p, int active_p)
+ int x, int y, enum text_cursor_kinds cursor_type,
+ int cursor_width, bool on_p, bool active_p)
/* --------------------------------------------------------------------------
External call (RIF): draw cursor.
Note that CURSOR_WIDTH is meaningful only for (h)bar cursors.
/* 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)
NSArray *a = [[NSApp mainMenu] itemArray];
int i;
BOOL found = NO;
+
+ if (menu == nil) // Menu tracking ended.
+ {
+ if (menu_will_open_state == MENU_OPENING)
+ menu_will_open_state = MENU_NONE;
+ return;
+ }
+
for (i = 0; ! found && i < [a count]; i++)
found = menu == [[a objectAtIndex:i] submenu];
if (found)
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)
{
int
ns_select (int nfds, fd_set *readfds, fd_set *writefds,
- fd_set *exceptfds, EMACS_TIME *timeout, sigset_t *sigmask)
+ fd_set *exceptfds, EMACS_TIME const *timeout,
+ sigset_t const *sigmask)
/* --------------------------------------------------------------------------
Replacement for select, checking for events
-------------------------------------------------------------------------- */
pthread_mutex_lock (&select_mutex);
if (readfds) *readfds = select_readfds;
if (writefds) *writefds = select_writefds;
- if (timeout) *timeout = select_timeout;
pthread_mutex_unlock (&select_mutex);
result = t;
}
v = [view frame];
r.origin.y = (v.size.height - r.size.height - r.origin.y);
- if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (window))
- fringe_extended_p = (WINDOW_LEFTMOST_P (window)
- && WINDOW_LEFT_FRINGE_WIDTH (window)
- && (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (window)
- || WINDOW_LEFT_MARGIN_COLS (window) == 0));
- else
- fringe_extended_p = (WINDOW_RIGHTMOST_P (window)
- && WINDOW_RIGHT_FRINGE_WIDTH (window)
- && (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (window)
- || WINDOW_RIGHT_MARGIN_COLS (window) == 0));
+ fringe_extended_p = WINDOW_FRINGE_EXTENDED_P (window);
XSETWINDOW (win, window);
block_input ();
{
NSScreen *screen = [NSScreen mainScreen];
NSWindowDepth depth = [screen depth];
- Mouse_HLInfo *hlinfo = &dpyinfo->mouse_highlight;
dpyinfo->resx = 72.27; /* used 75.0, but this makes pt == pixel, expected */
dpyinfo->resy = 72.27;
dpyinfo->color_table = xmalloc (sizeof *dpyinfo->color_table);
dpyinfo->color_table->colors = NULL;
dpyinfo->root_window = 42; /* a placeholder.. */
-
- hlinfo->mouse_face_mouse_frame = NULL;
- hlinfo->mouse_face_beg_row = hlinfo->mouse_face_beg_col = -1;
- hlinfo->mouse_face_end_row = hlinfo->mouse_face_end_col = -1;
- hlinfo->mouse_face_face_id = DEFAULT_FACE_ID;
- hlinfo->mouse_face_window = hlinfo->mouse_face_overlay = Qnil;
- hlinfo->mouse_face_hidden = 0;
-
- hlinfo->mouse_face_mouse_x = hlinfo->mouse_face_mouse_y = 0;
- hlinfo->mouse_face_defer = 0;
-
dpyinfo->x_highlight_frame = dpyinfo->x_focus_frame = NULL;
-
dpyinfo->n_fonts = 0;
dpyinfo->smallest_font_height = 1;
dpyinfo->smallest_char_width = 1;
+
+ reset_mouse_highlight (&dpyinfo->mouse_highlight);
}