+2008-08-01 Adrian Robert <Adrian.B.Robert@gmail.com>
+ Warning clearing and clean-up in NS port.
+ * keyboard.h (xmalloc_widget_value, digest_single_submenu): Add
+ prototypes.
+ * nsgui.h (FACE_DEFAULT): Remove, unused.
+ (XGCValues): Change colors to unsigned long.
+ * nsterm.h (EmacsApp): Add declaration of all methods implemented in
+ nsterm.m.
+ (EmacsMenu -addItemWithWidgetValue:): Change to use NSMenuItem class.
+ (ns_list_fonts): Remove, unused.
+ (ns_font_to_xlfd, ns_fontname_to_xlfd): Drop prototypes.
+ * nsfns.m (interpret_services_menu): Use NSMenuItem class.
+ * nsfont.m (nsfont_open): Fix cast error in glyphs,metrics alloc.
+ (nsfont_draw): Compare face colors to 0, not nil.
+ * nsmenu.m (struct widget_value): Drop unneeded declaration.
+ (EmacsMenu -addItemWithWidgetValue:, -fillWithWidgetValue:)
+ (-addSubmenuWithTitle:): Use NSMenuItem class.
+ (ns_popup_menu): Use NO, not NULL, for enabled setting.
+ * nsterm.m (ns_draw_glyph_string): Don't compare font to ~0.
+ (ns_clip_to_row): Make gc arg a BOOL.
+ (ns_draw_fringe_bitmap, ns_draw_window_cursor): Use YES, NO in
+ ns_clip_to_row() call.
+ (ns_draw_glyph_string): Drop face comparison to ~0 (no longer
+ used). Cast FRAME_FONT assignments.
+ (ns_read_socket): Cast call to EmacsApp-fulfillService:withArg:.
+ (ns_string_to_lispmod): Change arg to const char.
+ (ns_term_init): Use NSMenuItem class.
+ (EmacsApp -openFile:): Move to different section of file.
+ (EmacsApp -application:openFiles:): Don't return a value, call
+ -replyToOpenOrPrint:.
+ (EmacsView -keyDown:): Fix up cast.
+ (EmacsView -converstationIdentifier): Use NSInteger instead of long.
+ (EmacsView -menuDown:): Cast tag in call to
+ find_and_call_menu_selection().
+ (ns_list_fonts): Remove, unused.
+ (ns_font_to_xlfd): Make static. Cast result of UTF8String.
+ (ns_fontname_to_xlfd): Make static.
+ * w32menu.c (xmalloc_widget_value, digest_single_submenu): Remove
+ prototypes (now in keyboard.h).
+ (next_menubar_widget_id): Remove, unused.
+ * xmenu.c (xmalloc_widget_value, digest_single_submenu): Remove
+ prototypes (now in keyboard.h).
+ * xfaces.c (ns_list_fonts, w32_list_fonts): Remove, unused.
+
2008-08-01 Dan Nicolaescu <dann@ics.uci.edu>
* systty.h: Fix previous change that removed BSD_TERMIOS. Add
static void
-ns_clip_to_row (struct window *w, struct glyph_row *row, int area, GC gc)
+ns_clip_to_row (struct window *w, struct glyph_row *row, int area, BOOL gc)
/* --------------------------------------------------------------------------
23: Internal (but parallels other terms): Focus drawing on given row
-------------------------------------------------------------------------- */
int oldVH = row->visible_height;
row->visible_height = p->h;
row->y -= rowY - p->y;
- ns_clip_to_row (w, row, -1, NULL);
+ ns_clip_to_row (w, row, -1, NO);
row->y = oldY;
row->visible_height = oldVH;
}
/* TODO: only needed in rare cases with last-resort font in HELLO..
should we do this more efficiently? */
- ns_clip_to_row (w, glyph_row, -1, NULL);
+ ns_clip_to_row (w, glyph_row, -1, NO);
/* ns_focus (f, &r, 1); */
if (FRAME_LAST_INACTIVE (f))
(s->for_overlaps ? NS_DUMPGLYPH_FOREGROUND :
NS_DUMPGLYPH_NORMAL));
ns_tmp_font = (struct nsfont_info *)s->face->font;
- if (ns_tmp_font == ~0 || ns_tmp_font == NULL)
- ns_tmp_font = FRAME_FONT (s->f);
+ if (ns_tmp_font == NULL)
+ ns_tmp_font = (struct nsfont_info *)FRAME_FONT (s->f);
ns_tmp_font->font.driver->draw
(s, 0, s->nchars, s->x, s->y,
}
/* Deal with pending service requests. */
else if (ns_pending_service_names && [ns_pending_service_names count] != 0
- && [NSApp fulfillService: [ns_pending_service_names objectAtIndex: 0]
- withArg: [ns_pending_service_args objectAtIndex: 0]])
+ && [(EmacsApp *)
+ NSApp fulfillService: [ns_pending_service_names objectAtIndex: 0]
+ withArg: [ns_pending_service_args objectAtIndex: 0]])
{
[ns_pending_service_names removeObjectAtIndex: 0];
[ns_pending_service_args removeObjectAtIndex: 0];
========================================================================== */
-static Lisp_Object ns_string_to_lispmod (char *s)
+static Lisp_Object ns_string_to_lispmod (const char *s)
/* --------------------------------------------------------------------------
Convert modifier name to lisp symbol
-------------------------------------------------------------------------- */
#ifdef NS_IMPL_COCOA
{
NSMenu *appMenu;
- id<NSMenuItem> item;
+ NSMenuItem *item;
/* set up the application menu */
svcsMenu = [[EmacsMenu alloc] initWithTitle: @"Services"];
[svcsMenu setAutoenablesItems: NO];
}
+/* Open a file (used by below, after going into queue read by ns_read_socket) */
+- (BOOL) openFile: (NSString *)fileName
+{
+ struct frame *emacsframe = SELECTED_FRAME ();
+ NSEvent *theEvent = [NSApp currentEvent];
+
+ if (!emacs_event)
+ return NO;
+
+ emacs_event->kind = NON_ASCII_KEYSTROKE_EVENT;
+ emacs_event->code = KEY_NS_OPEN_FILE_LINE;
+ ns_input_file = append2 (ns_input_file, build_string ([fileName UTF8String]));
+ ns_input_line = Qnil; /* can be start or cons start,end */
+ emacs_event->modifiers =0;
+ EV_TRAILER (theEvent);
+
+ return YES;
+}
+
+
/* **************************************************************************
EmacsApp delegate implementation
}
-/* Open a file (used by below, after going into queue read by ns_read_socket) */
--(BOOL) openFile: (NSString *)fileName
-{
- struct frame *emacsframe = SELECTED_FRAME ();
- NSEvent *theEvent = [NSApp currentEvent];
-
- if (!emacs_event)
- return NO;
-
- emacs_event->kind = NON_ASCII_KEYSTROKE_EVENT;
- emacs_event->code = KEY_NS_OPEN_FILE_LINE;
- ns_input_file = append2 (ns_input_file, build_string ([fileName UTF8String]));
- ns_input_line = Qnil; /* can be start or cons start,end */
- emacs_event->modifiers =0;
- EV_TRAILER (theEvent);
-
- return YES;
-}
-
-
/* Notification from the Workspace to open a file */
- (BOOL)application: sender openFile: (NSString *)file
{
NSString *file;
while ((file = [files nextObject]) != nil)
[ns_pending_files addObject: file];
- return YES;
+ [self replyToOpenOrPrint: NSApplicationDelegateReplySuccess];
}
/* TODO: these may help w/IO switching btwn terminal and NSApp */
NSView most recently updated (I guess), which is not the correct one.
UPDATE: After multi-TTY merge this happens even w/o NO_SOCK_SIGIO */
if ([[theEvent window] isKindOfClass: [EmacsWindow class]])
- [[(EmacsView *)[theEvent window] delegate] keyDown: theEvent];
+ [(EmacsView *)[[theEvent window] delegate] keyDown: theEvent];
return;
}
return rect;
}
-- (long)conversationIdentifier
+- (NSInteger)conversationIdentifier
{
- return (long)self;
+ return (NSInteger)self;
}
/* TODO: below here not yet implemented correctly, but may not be needed */
context_menu_value = [sender tag];
else
find_and_call_menu_selection (emacsframe, emacsframe->menu_bar_items_used,
- emacsframe->menu_bar_vector, [sender tag]);
+ emacsframe->menu_bar_vector,
+ (void *)[sender tag]);
ns_send_appdefined (-1);
return self;
}
/* ==========================================================================
Font-related functions; these used to be in nsfaces.m
+ The XLFD functions (115 lines) are an abomination that should be removed.
========================================================================== */
}
-Lisp_Object
-ns_list_fonts (FRAME_PTR f, Lisp_Object pattern, int size, int maxnames)
-/* --------------------------------------------------------------------------
- This is used by the xfaces system. It is expected to speak XLFD.
- -------------------------------------------------------------------------- */
-{
- Lisp_Object list = Qnil,
- rpattern,
- key,
- tem,
- args[2];
- struct re_pattern_buffer *bufp;
- id fm = [NSFontManager sharedFontManager];
- NSEnumerator *fenum, *senum;
- NSArray *membInfo;
- NSString *fontname;
- const char *xlfdName;
- char *pattFam;
- char *patt;
- NSString *famName;
-
- NSTRACE (ns_list_fonts);
-
- CHECK_STRING (pattern);
- patt = SDATA (pattern);
-
-#if 0
-/* temporary: for font_backend, we use fontsets, and when these are defined,
- the old XLFD-based system is used; eventually this will be replaced by
- backend code, but for now we allow specs that are just family names */
- /* if pattern is not XLFD, panic now */
- if (patt[0] != '-')
- error ("ns_list_fonts: X font name (XLFD) expected.");
-
- /* if unicode encoding not requested, also die */
- if (!strstr (patt, "iso10646") && patt[strlen (patt)-3] != '*')
- return Qnil;
-#endif /* 0 */
-
- key = f ? Fcons (pattern, make_number (maxnames)) : Qnil;
- tem = f ? XCDR (FRAME_NS_DISPLAY_INFO (f)->name_list_element) : Qnil;
-
- /* See if we cached the result for this particular query.
- The cache is an alist of the form:
- ((((PATTERN . MAXNAMES) FONTNAME) ...) ...)
- */
- if (f && !NILP (list = Fassoc (key, tem)))
- {
- list = Fcdr_safe (list);
- /* We have a cached list. Don't have to get the list again. */
- if (!NILP (list))
- return list;
- }
-
- if (patt[0] != '-')
- pattFam = patt;
- else
- pattFam = ns_xlfd_to_fontname (patt);
- /* XXX: '*' at beginning matches literally.. */
- if (pattFam[0] == '*')
- pattFam[0] = '.';
-
- /* must start w/family name, but can have other stuff afterwards
- (usually bold and italic specifiers) */
- args[0] = build_string ("^");
- args[1] = build_string (pattFam);
- rpattern = Fconcat (2, args);
- bufp = compile_pattern (rpattern, 0, Vascii_canon_table, 0, 0);
-
- list = Qnil;
- fenum = [[fm availableFontFamilies] objectEnumerator];
- while ( (famName = [fenum nextObject]) )
- {
- NSMutableString *tmp = [famName mutableCopy];
- const char *fname;
- NSRange r;
-
- /* remove spaces, to look like postscript name */
- while ((r = [tmp rangeOfString: @" "]).location != NSNotFound)
- [tmp deleteCharactersInRange: r];
-
- fname = [tmp UTF8String];
- int len = strlen (fname);
- BOOL foundItal;
- const char *synthItalFont;
-
- if (re_search (bufp, fname, len, 0, len, 0) >= 0)
- {
- /* Found a family. Add all variants. If we have no italic variant,
- add a synthItal. */
- senum =[[fm availableMembersOfFontFamily: famName] objectEnumerator];
- foundItal = NO;
- synthItalFont = NULL;
- while (membInfo = [senum nextObject])
- {
- xlfdName
- = ns_fontname_to_xlfd ([[membInfo objectAtIndex: 0]
- UTF8String]);
- list = Fcons (build_string (xlfdName), list);
- if (!synthItalFont)
- {
- NSString *synthName
- = [[membInfo objectAtIndex: 0]
- stringByAppendingString: @"-synthItal"];
- synthItalFont = [synthName UTF8String];
- }
- else if ([[membInfo objectAtIndex: 3] intValue]
- & NSItalicFontMask)
- foundItal = YES;
- }
- if (foundItal == NO)
- {
- xlfdName = ns_fontname_to_xlfd (synthItalFont);
- list = Fcons (build_string (xlfdName), list);
- }
- }
- [tmp release];
- }
-
- /* fallback */
- if (XFASTINT (Flength (list)) == 0)
- list = Fcons (build_string (ns_fontname_to_xlfd ("Monaco")), list);
-
- /* store result in cache */
- if (f != NULL)
- XCDR_AS_LVALUE (FRAME_NS_DISPLAY_INFO (f)->name_list_element)
- = Fcons (Fcons (key, list),
- XCDR (FRAME_NS_DISPLAY_INFO (f)->name_list_element));
- return list;
-}
-
-
/* XLFD: -foundry-family-weight-slant-swidth-adstyle-pxlsz-ptSz-resx-resy-spc-avgWidth-rgstry-encoding */
-const char *
+static const char *
ns_font_to_xlfd (NSFont *nsfont)
/* --------------------------------------------------------------------------
Convert an NS font name to an X font name (XLFD).
{
NSFontManager *mgr = [NSFontManager sharedFontManager];
NSString *sname = [nsfont /*familyName*/fontName];
- char *famName = [sname UTF8String];
+ char *famName = (char *)[sname UTF8String];
char *weightStr = [mgr fontNamed: sname hasTraits: NSBoldFontMask] ?
"bold" : "medium";
char *slantStr = [mgr fontNamed: sname hasTraits: NSItalicFontMask] ?
int i, len;
/* change '-' to '$' to avoid messing w/XLFD separator */
- for (len =strlen (famName), i =0; i<len; i++)
+ for (len = strlen (famName), i =0; i<len; i++)
if (famName[i] == '-')
{
famName[i] = '\0';
return xlfd;
}
-const char *
+static const char *
ns_fontname_to_xlfd (const char *name)
/* --------------------------------------------------------------------------
Convert an NS font name to an X font name (XLFD).
return ret;
}
+
void
syms_of_nsterm ()
{