Update the GNUStep port so it works OK. Redraw and sizing bugs remain.
* nextstep/templates/Info-gnustep.plist.in: Add NSDocumentClass EmacsDocument. * src/nsfns.m (x_set_foreground_color, x_set_background_color): Use EmacsCGFloat. (ns_implicitly_set_icon_type, Fx_create_frame): Make static, remove unused variables. (Fns_read_file_name): Keep track if panel is for save. Use ns_filename_from_panel/ns_directory_from_panel. (Fns_list_services): delegate only used for COCOA. (Fns_convert_utf8_nfd_to_nfc): Remove warning for GNUStep. Just return the input if GNUStep. (x_screen_planes): Remove. (Fxw_color_values): Use EmacsCGFloat (Fns_display_monitor_attributes_list): Only get screen number for Cocoa. (getDirectory, getFilename): Removed from EmacsOpenPanel and EmacsSavePanel. (EmacsOpenPanel🆗): Use ns_filename_from_panel and ns_directory_from_panel. * src/nsfont.m (ns_attribute_fvalue, ns_spec_to_descriptor) (ns_charset_covers, ns_get_covering_families, nsfont_open): Use F suffix on floats. (ns_char_width): Returns CGFloat. (ns_ascii_average_width): w is CGFloat instead of float. (nsfont_draw): cbuf and c are unsigned. Cast to char* in call to DPSxshow. (ns_glyph_metrics): CGFloat instead of float. * src/nsimage.m (setXBMColor:, getPixelAtX:Y:): Use EmacsCGFloat. * src/nsmenu.m (ns_update_menubar): Make static. (x_activate_menubar): Surround with ifdef NS_IMPL_COCOA (fillWithWidgetValue:): Add cast to SEL for setAction. (addSubmenuWithTitle:forFrame:): Add cast to SEL for action. (update_frame_tool_bar): Update code for GNUStep. (clearAll): New method. (addDisplayItemWithImage:idx:tag:helpText:enabled:): Handle new tag argument. Call insertItemWithItemIdentifier when NS_IMPL_GNUSTEP. Move identifierToItem setObject and activeIdentifiers addObject before call to insertItemWithItemIdentifier. (validateVisibleItems): Fix indentation. (toolbarAllowedItemIdentifiers:): Return activeIdentifiers. (initWithContentRect:styleMask:backing:defer:): Add ClosableWindow and UtilityWindow to aStyle, remove call to setStyleMask. * src/nsselect.m (ns_get_local_selection): Remove unused variable type. * src/nsterm.h (EmacsCGFloat): Typedef for OSX and GNUStep when the size of CGFloat differs. (EmacsApp): New variable nextappdefined. Declare sendFromMainThread when NS_IMPL_GNUSTEP. (EmacsDocument): Declare when NS_IMPL_GNUSTEP. (EmacsView): Remove unlockFocusNeedsFlush, add windowDidMove. (EmacsToolbar): Add clearAll. Add tag argument to addDisplayItemWithImage. (EmacsSavePanel, EmacsOpenPanel): Remove getFilename and getDirectory. * src/nsterm.m: Include src/process.h if NS_IMPL_GNUSTEP. (ns_menu_bar_is_hidden, menu_will_open_state): Define only if NS_IMPL_COCOA. (x_set_cursor_type): Remove declaration. (ns_update_begin): Only use r and bp if NS_IMPL_COCOA. (ns_update_end, ns_focus, ns_unfocus): Remove GNUStep specific code. (x_set_window_size): Remove 3 pixels from toolbar if NS_IMPL_GNUSTEP. (ns_get_color): Use F suffix on float. (ns_color_to_lisp, ns_query_color): Use EmacsCGFloat. (ns_get_rgb_color): Remove. (x_set_frame_alpha): Move view inside NS_IMPL_COCOA. (note_mouse_movement): x and y are CGFloat. (ns_draw_fringe_bitmap): Remove unused rowY. Change #if to COCOA && >= 10_6. (ns_draw_window_cursor): Remove unused overspill. (ns_draw_underwave): width and x are EamcsCGFloat. (ns_draw_box): thickness is CGFloat. (ns_dumpglyphs_image): Change #if to COCOA && >= 10_6. (ns_send_appdefined): When NS_IMPL_GNUSTEP, redirect to main thread if not in main thread. (ns_get_pending_menu_title, ns_check_menu_open) (ns_check_pending_open_menu): Put inside #if COCOA && >= 10_5. (ns_term_init): Call catch_child_signal if NS_IMPL_GNUSTEP && SIGCHLD. (sendFromMainThread:): New method. (changeFont:): size is CGFloat. (keyDown:): Check for Delete when NS_IMPL_GNUSTEP. Disable warning about permanent text. (characterIndexForPoint:): Adjust return type depending on GNUStep version. (mouseDown:): delta is CGFloat. (updateFrameSize): Remove unised variable f. (initFrameFromEmacs): Move toggleButton inside NS_IMPL_COCOA. Cast float to EmacsCGFloat. (windowWillUseStandardFrame:defaultFrame:): Set maximized_height also to -1 when restoring. (windowDidExitFullScreen:): Put call to updateCollectionBehaviour inside NS_IMPL_COCOA. (toggleFullScreen:): Put call to toggleFullScreen inside NS_IMPL_COCOA. Cast float to EmacsCGFloat. (setPosition:portion:whole:): por is CGFloat. (getMouseMotionPart🪟x:y:): Add F suffix to float. (mouseDown:): Use CGFloat. (mouseDragged:): Remove unised variable edge. (EmacsDocument): Implement for NS_IMPL_GNUSTEP. * src/process.c (catch_child_signal): New function. (init_process_emacs): Call it. * src/process.h (catch_child_signal): Declare.
This commit is contained in:
parent
a2d9894673
commit
c0342369ac
12 changed files with 371 additions and 210 deletions
|
@ -1,3 +1,7 @@
|
|||
2013-06-02 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* templates/Info-gnustep.plist.in: Add NSDocumentClass EmacsDocument.
|
||||
|
||||
2013-03-16 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* Makefile.in (${ns_appdir}): Add touch.
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
NSRole = Application;
|
||||
NSTypes = (
|
||||
{
|
||||
NSDocumentClass = "";
|
||||
NSDocumentClass = "EmacsDocument";
|
||||
NSHumanReadableName = "";
|
||||
NSIcon = "";
|
||||
NSName = "";
|
||||
|
@ -30,7 +30,7 @@
|
|||
);
|
||||
},
|
||||
{
|
||||
NSDocumentClass = "";
|
||||
NSDocumentClass = "EmacsDocument";
|
||||
NSHumanReadableName = "";
|
||||
NSIcon = "";
|
||||
NSName = "";
|
||||
|
@ -41,7 +41,7 @@
|
|||
);
|
||||
},
|
||||
{
|
||||
NSDocumentClass = "";
|
||||
NSDocumentClass = "EmacsDocument";
|
||||
NSHumanReadableName = "";
|
||||
NSIcon = "";
|
||||
NSName = "";
|
||||
|
@ -51,7 +51,7 @@
|
|||
);
|
||||
},
|
||||
{
|
||||
NSDocumentClass = "";
|
||||
NSDocumentClass = "EmacsDocument";
|
||||
NSHumanReadableName = "";
|
||||
NSIcon = "";
|
||||
NSName = "";
|
||||
|
@ -64,7 +64,7 @@
|
|||
);
|
||||
},
|
||||
{
|
||||
NSDocumentClass = "";
|
||||
NSDocumentClass = "EmacsDocument";
|
||||
NSHumanReadableName = "";
|
||||
NSIcon = "";
|
||||
NSName = "";
|
||||
|
@ -74,7 +74,7 @@
|
|||
);
|
||||
},
|
||||
{
|
||||
NSDocumentClass = "";
|
||||
NSDocumentClass = "EmacsDocument";
|
||||
NSHumanReadableName = "";
|
||||
NSIcon = "";
|
||||
NSName = "";
|
||||
|
@ -84,7 +84,7 @@
|
|||
);
|
||||
},
|
||||
{
|
||||
NSDocumentClass = "";
|
||||
NSDocumentClass = "EmacsDocument";
|
||||
NSHumanReadableName = "";
|
||||
NSIcon = "";
|
||||
NSName = "";
|
||||
|
|
108
src/ChangeLog
108
src/ChangeLog
|
@ -1,3 +1,111 @@
|
|||
2013-06-02 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* process.h (catch_child_signal): Declare.
|
||||
|
||||
* process.c (catch_child_signal): New function.
|
||||
(init_process_emacs): Call it.
|
||||
|
||||
* nsterm.m: Include process.h if NS_IMPL_GNUSTEP.
|
||||
(ns_menu_bar_is_hidden, menu_will_open_state): Define only if
|
||||
NS_IMPL_COCOA.
|
||||
(x_set_cursor_type): Remove declaration.
|
||||
(ns_update_begin): Only use r and bp if NS_IMPL_COCOA.
|
||||
(ns_update_end, ns_focus, ns_unfocus): Remove GNUStep specific code.
|
||||
(x_set_window_size): Remove 3 pixels from toolbar if NS_IMPL_GNUSTEP.
|
||||
(ns_get_color): Use F suffix on float.
|
||||
(ns_color_to_lisp, ns_query_color): Use EmacsCGFloat.
|
||||
(ns_get_rgb_color): Remove.
|
||||
(x_set_frame_alpha): Move view inside NS_IMPL_COCOA.
|
||||
(note_mouse_movement): x and y are CGFloat.
|
||||
(ns_draw_fringe_bitmap): Remove unused rowY.
|
||||
Change #if to COCOA && >= 10_6.
|
||||
(ns_draw_window_cursor): Remove unused overspill.
|
||||
(ns_draw_underwave): width and x are EamcsCGFloat.
|
||||
(ns_draw_box): thickness is CGFloat.
|
||||
(ns_dumpglyphs_image): Change #if to COCOA && >= 10_6.
|
||||
(ns_send_appdefined): When NS_IMPL_GNUSTEP, redirect to main thread
|
||||
if not in main thread.
|
||||
(ns_get_pending_menu_title, ns_check_menu_open)
|
||||
(ns_check_pending_open_menu): Put inside #if COCOA && >= 10_5.
|
||||
(ns_term_init): Call catch_child_signal if NS_IMPL_GNUSTEP && SIGCHLD.
|
||||
(sendFromMainThread:): New method.
|
||||
(changeFont:): size is CGFloat.
|
||||
(keyDown:): Check for Delete when NS_IMPL_GNUSTEP.
|
||||
Disable warning about permanent text.
|
||||
(characterIndexForPoint:): Adjust return type depending on GNUStep
|
||||
version.
|
||||
(mouseDown:): delta is CGFloat.
|
||||
(updateFrameSize): Remove unised variable f.
|
||||
(initFrameFromEmacs): Move toggleButton inside NS_IMPL_COCOA.
|
||||
Cast float to EmacsCGFloat.
|
||||
(windowWillUseStandardFrame:defaultFrame:): Set maximized_height
|
||||
also to -1 when restoring.
|
||||
(windowDidExitFullScreen:): Put call to updateCollectionBehaviour
|
||||
inside NS_IMPL_COCOA.
|
||||
(toggleFullScreen:): Put call to toggleFullScreen inside
|
||||
NS_IMPL_COCOA. Cast float to EmacsCGFloat.
|
||||
(setPosition:portion:whole:): por is CGFloat.
|
||||
(getMouseMotionPart:window:x:y:): Add F suffix to float.
|
||||
(mouseDown:): Use CGFloat.
|
||||
(mouseDragged:): Remove unised variable edge.
|
||||
(EmacsDocument): Implement for NS_IMPL_GNUSTEP.
|
||||
|
||||
* nsterm.h (EmacsCGFloat): Typedef for OSX and GNUStep when the size
|
||||
of CGFloat differs.
|
||||
(EmacsApp): New variable nextappdefined. Declare sendFromMainThread
|
||||
when NS_IMPL_GNUSTEP.
|
||||
(EmacsDocument): Declare when NS_IMPL_GNUSTEP.
|
||||
(EmacsView): Remove unlockFocusNeedsFlush, add windowDidMove.
|
||||
(EmacsToolbar): Add clearAll. Add tag argument to
|
||||
addDisplayItemWithImage.
|
||||
(EmacsSavePanel, EmacsOpenPanel): Remove getFilename and getDirectory.
|
||||
|
||||
* nsselect.m (ns_get_local_selection): Remove unused variable type.
|
||||
|
||||
* nsmenu.m (ns_update_menubar): Make static.
|
||||
(x_activate_menubar): Surround with ifdef NS_IMPL_COCOA
|
||||
(fillWithWidgetValue:): Add cast to SEL for setAction.
|
||||
(addSubmenuWithTitle:forFrame:): Add cast to SEL for action.
|
||||
(update_frame_tool_bar): Update code for GNUStep.
|
||||
(clearAll): New method.
|
||||
(addDisplayItemWithImage:idx:tag:helpText:enabled:): Handle new tag
|
||||
argument. Call insertItemWithItemIdentifier when NS_IMPL_GNUSTEP. Move
|
||||
identifierToItem setObject and activeIdentifiers addObject before
|
||||
call to insertItemWithItemIdentifier.
|
||||
(validateVisibleItems): Fix indentation.
|
||||
(toolbarAllowedItemIdentifiers:): Return activeIdentifiers.
|
||||
(initWithContentRect:styleMask:backing:defer:): Add ClosableWindow and
|
||||
UtilityWindow to aStyle, remove call to setStyleMask.
|
||||
|
||||
* nsimage.m (setXBMColor:, getPixelAtX:Y:): Use EmacsCGFloat.
|
||||
|
||||
* nsfont.m (ns_attribute_fvalue, ns_spec_to_descriptor)
|
||||
(ns_charset_covers, ns_get_covering_families, nsfont_open):
|
||||
Use F suffix on floats.
|
||||
(ns_char_width): Returns CGFloat.
|
||||
(ns_ascii_average_width): w is CGFloat instead of float.
|
||||
(nsfont_draw): cbuf and c are unsigned. Cast to char* in call to
|
||||
DPSxshow.
|
||||
(ns_glyph_metrics): CGFloat instead of float.
|
||||
|
||||
* nsfns.m (x_set_foreground_color, x_set_background_color): Use
|
||||
EmacsCGFloat.
|
||||
(ns_implicitly_set_icon_type, Fx_create_frame): Make static, remove
|
||||
unused variables.
|
||||
(Fns_read_file_name): Keep track if panel is for save. Use
|
||||
ns_filename_from_panel/ns_directory_from_panel.
|
||||
(Fns_list_services): delegate only used for COCOA.
|
||||
(Fns_convert_utf8_nfd_to_nfc): Remove warning for GNUStep. Just
|
||||
return the input if GNUStep.
|
||||
(x_screen_planes): Remove.
|
||||
(Fxw_color_values): Use EmacsCGFloat
|
||||
(Fns_display_monitor_attributes_list): Only get screen number for
|
||||
Cocoa.
|
||||
(getDirectory, getFilename): Removed from EmacsOpenPanel and
|
||||
EmacsSavePanel.
|
||||
(EmacsOpenPanel:ok:): Use ns_filename_from_panel and
|
||||
ns_directory_from_panel.
|
||||
|
||||
2013-06-01 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* process.c (handle_child_signal): Also use WCONTINUED.
|
||||
|
|
71
src/nsfns.m
71
src/nsfns.m
|
@ -287,7 +287,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side
|
|||
x_set_foreground_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
|
||||
{
|
||||
NSColor *col;
|
||||
CGFloat r, g, b, alpha;
|
||||
EmacsCGFloat r, g, b, alpha;
|
||||
|
||||
if (ns_lisp_to_color (arg, &col))
|
||||
{
|
||||
|
@ -319,7 +319,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side
|
|||
struct face *face;
|
||||
NSColor *col;
|
||||
NSView *view = FRAME_NS_VIEW (f);
|
||||
CGFloat r, g, b, alpha;
|
||||
EmacsCGFloat r, g, b, alpha;
|
||||
|
||||
if (ns_lisp_to_color (arg, &col))
|
||||
{
|
||||
|
@ -344,7 +344,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side
|
|||
{
|
||||
[[view window] setBackgroundColor: col];
|
||||
|
||||
if (alpha != 1.0)
|
||||
if (alpha != (EmacsCGFloat) 1.0)
|
||||
[[view window] setOpaque: NO];
|
||||
else
|
||||
[[view window] setOpaque: YES];
|
||||
|
@ -714,7 +714,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side
|
|||
}
|
||||
|
||||
|
||||
void
|
||||
static void
|
||||
ns_implicitly_set_icon_type (struct frame *f)
|
||||
{
|
||||
Lisp_Object tem;
|
||||
|
@ -859,7 +859,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side
|
|||
}
|
||||
|
||||
/* This is the same as the xfns.c definition. */
|
||||
void
|
||||
static void
|
||||
x_set_cursor_type (FRAME_PTR f, Lisp_Object arg, Lisp_Object oldval)
|
||||
{
|
||||
set_frame_cursor_types (f, arg);
|
||||
|
@ -1082,7 +1082,6 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side
|
|||
struct ns_display_info *dpyinfo = NULL;
|
||||
Lisp_Object parent;
|
||||
struct kboard *kb;
|
||||
Lisp_Object tfont, tfontsize;
|
||||
static int desc_ctr = 1;
|
||||
|
||||
/* x_get_arg modifies parms. */
|
||||
|
@ -1189,10 +1188,10 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side
|
|||
{
|
||||
/* use for default font name */
|
||||
id font = [NSFont userFixedPitchFontOfSize: -1.0]; /* default */
|
||||
tfontsize = x_default_parameter (f, parms, Qfontsize,
|
||||
x_default_parameter (f, parms, Qfontsize,
|
||||
make_number (0 /*(int)[font pointSize]*/),
|
||||
"fontSize", "FontSize", RES_TYPE_NUMBER);
|
||||
tfont = x_default_parameter (f, parms, Qfont,
|
||||
x_default_parameter (f, parms, Qfont,
|
||||
build_string ([[font fontName] UTF8String]),
|
||||
"font", "Font", RES_TYPE_STRING);
|
||||
}
|
||||
|
@ -1410,6 +1409,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side
|
|||
{
|
||||
static id fileDelegate = nil;
|
||||
BOOL ret;
|
||||
BOOL isSave = NILP (mustmatch) && NILP (dir_only_p);
|
||||
id panel;
|
||||
Lisp_Object fname;
|
||||
|
||||
|
@ -1431,7 +1431,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side
|
|||
if ([dirS characterAtIndex: 0] == '~')
|
||||
dirS = [dirS stringByExpandingTildeInPath];
|
||||
|
||||
panel = NILP (mustmatch) && NILP (dir_only_p) ?
|
||||
panel = isSave ?
|
||||
(id)[EmacsSavePanel savePanel] : (id)[EmacsOpenPanel openPanel];
|
||||
|
||||
[panel setTitle: promptS];
|
||||
|
@ -1446,7 +1446,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side
|
|||
[panel setCanChooseDirectories: YES];
|
||||
[panel setCanChooseFiles: NO];
|
||||
}
|
||||
else
|
||||
else if (! isSave)
|
||||
{
|
||||
/* This is not quite what the documentation says, but it is compatible
|
||||
with the Gtk+ code. Also, the menu entry says "Open File...". */
|
||||
|
@ -1481,8 +1481,8 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side
|
|||
|
||||
if (ret)
|
||||
{
|
||||
NSString *str = [panel getFilename];
|
||||
if (! str) str = [panel getDirectory];
|
||||
NSString *str = ns_filename_from_panel (panel);
|
||||
if (! str) str = ns_directory_from_panel (panel);
|
||||
if (! str) ret = NO;
|
||||
else fname = build_string ([str UTF8String]);
|
||||
}
|
||||
|
@ -1909,7 +1909,9 @@ and GNUstep implementations ("distributor-specific release
|
|||
#else
|
||||
Lisp_Object ret = Qnil;
|
||||
NSMenu *svcs;
|
||||
#ifdef NS_IMPL_COCOA
|
||||
id delegate;
|
||||
#endif
|
||||
|
||||
check_window_system (NULL);
|
||||
svcs = [[NSMenu alloc] initWithTitle: @"Services"];
|
||||
|
@ -1992,15 +1994,9 @@ and GNUstep implementations ("distributor-specific release
|
|||
|
||||
CHECK_STRING (str);
|
||||
utfStr = [NSString stringWithUTF8String: SSDATA (str)];
|
||||
if (![utfStr respondsToSelector:
|
||||
@selector (precomposedStringWithCanonicalMapping)])
|
||||
{
|
||||
message1
|
||||
("Warning: ns-convert-utf8-nfd-to-nfc unsupported under GNUstep.\n");
|
||||
return Qnil;
|
||||
}
|
||||
else
|
||||
#ifdef NS_IMPL_COCOA
|
||||
utfStr = [utfStr precomposedStringWithCanonicalMapping];
|
||||
#endif
|
||||
return build_string ([utfStr UTF8String]);
|
||||
}
|
||||
|
||||
|
@ -2155,6 +2151,9 @@ and GNUstep implementations ("distributor-specific release
|
|||
}
|
||||
|
||||
|
||||
extern const char *x_get_string_resource (XrmDatabase, char *, char *);
|
||||
|
||||
|
||||
/* terms impl this instead of x-get-resource directly */
|
||||
const char *
|
||||
x_get_string_resource (XrmDatabase rdb, char *name, char *class)
|
||||
|
@ -2203,13 +2202,6 @@ and GNUstep implementations ("distributor-specific release
|
|||
}
|
||||
|
||||
|
||||
int
|
||||
x_screen_planes (struct frame *f)
|
||||
{
|
||||
return FRAME_NS_DISPLAY_INFO (f)->n_planes;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
x_sync (struct frame *f)
|
||||
{
|
||||
|
@ -2242,7 +2234,7 @@ and GNUstep implementations ("distributor-specific release
|
|||
(Lisp_Object color, Lisp_Object frame)
|
||||
{
|
||||
NSColor * col;
|
||||
CGFloat red, green, blue, alpha;
|
||||
EmacsCGFloat red, green, blue, alpha;
|
||||
|
||||
check_window_system (NULL);
|
||||
CHECK_STRING (color);
|
||||
|
@ -2434,11 +2426,10 @@ and GNUstep implementations ("distributor-specific release
|
|||
struct MonitorInfo *m = &monitors[i];
|
||||
NSRect fr = [s frame];
|
||||
NSRect vfr = [s visibleFrame];
|
||||
NSDictionary *dict = [s deviceDescription];
|
||||
NSValue *resval = [dict valueForKey:NSDeviceResolution];
|
||||
short y, vy;
|
||||
|
||||
#ifdef NS_IMPL_COCOA
|
||||
NSDictionary *dict = [s deviceDescription];
|
||||
NSNumber *nid = [dict objectForKey:@"NSScreenNumber"];
|
||||
CGDirectDisplayID did = [nid unsignedIntValue];
|
||||
#endif
|
||||
|
@ -2776,14 +2767,6 @@ - (void) cancel: (id)sender
|
|||
[NSApp stop: self];
|
||||
}
|
||||
#endif
|
||||
- (NSString *) getFilename
|
||||
{
|
||||
return ns_filename_from_panel (self);
|
||||
}
|
||||
- (NSString *) getDirectory
|
||||
{
|
||||
return ns_directory_from_panel (self);
|
||||
}
|
||||
|
||||
- (BOOL)performKeyEquivalent:(NSEvent *)theEvent
|
||||
{
|
||||
|
@ -2807,8 +2790,8 @@ - (void) ok: (id)sender
|
|||
[super ok: sender];
|
||||
|
||||
// If not choosing directories, and Open is pressed on a directory, return.
|
||||
if (! [self canChooseDirectories] && [self getDirectory] &&
|
||||
! [self getFilename])
|
||||
if (! [self canChooseDirectories] && ns_directory_from_panel (self) &&
|
||||
! ns_filename_from_panel (self))
|
||||
return;
|
||||
|
||||
panelOK = 1;
|
||||
|
@ -2821,14 +2804,6 @@ - (void) cancel: (id)sender
|
|||
}
|
||||
|
||||
#endif
|
||||
- (NSString *) getFilename
|
||||
{
|
||||
return ns_filename_from_panel (self);
|
||||
}
|
||||
- (NSString *) getDirectory
|
||||
{
|
||||
return ns_directory_from_panel (self);
|
||||
}
|
||||
- (BOOL)performKeyEquivalent:(NSEvent *)theEvent
|
||||
{
|
||||
// NSOpenPanel inherits NSSavePanel, so passing self is OK.
|
||||
|
|
42
src/nsfont.m
42
src/nsfont.m
|
@ -119,7 +119,7 @@ static void ns_glyph_metrics (struct nsfont_info *font_info,
|
|||
{
|
||||
NSDictionary *tdict = [fdesc objectForKey: NSFontTraitsAttribute];
|
||||
NSNumber *val = [tdict objectForKey: trait];
|
||||
return val == nil ? 0.0 : [val floatValue];
|
||||
return val == nil ? 0.0F : [val floatValue];
|
||||
}
|
||||
|
||||
|
||||
|
@ -138,15 +138,15 @@ static void ns_glyph_metrics (struct nsfont_info *font_info,
|
|||
/* add each attr in font_spec to fdAttrs.. */
|
||||
n = min (FONT_WEIGHT_NUMERIC (font_spec), 200);
|
||||
if (n != -1 && n != STYLE_REF)
|
||||
[tdict setObject: [NSNumber numberWithFloat: (n - 100.0) / 100.0]
|
||||
[tdict setObject: [NSNumber numberWithFloat: (n - 100.0F) / 100.0F]
|
||||
forKey: NSFontWeightTrait];
|
||||
n = min (FONT_SLANT_NUMERIC (font_spec), 200);
|
||||
if (n != -1 && n != STYLE_REF)
|
||||
[tdict setObject: [NSNumber numberWithFloat: (n - 100.0) / 100.0]
|
||||
[tdict setObject: [NSNumber numberWithFloat: (n - 100.0F) / 100.0F]
|
||||
forKey: NSFontSlantTrait];
|
||||
n = min (FONT_WIDTH_NUMERIC (font_spec), 200);
|
||||
if (n > -1 && (n > STYLE_REF + 10 || n < STYLE_REF - 10))
|
||||
[tdict setObject: [NSNumber numberWithFloat: (n - 100.0) / 100.0]
|
||||
[tdict setObject: [NSNumber numberWithFloat: (n - 100.0F) / 100.0F]
|
||||
forKey: NSFontWidthTrait];
|
||||
if ([tdict count] > 0)
|
||||
[fdAttrs setObject: tdict forKey: NSFontTraitsAttribute];
|
||||
|
@ -240,10 +240,10 @@ static void ns_glyph_metrics (struct nsfont_info *font_info,
|
|||
|
||||
|
||||
/* Utility: get width of a char c in screen font SFONT */
|
||||
static float
|
||||
static CGFloat
|
||||
ns_char_width (NSFont *sfont, int c)
|
||||
{
|
||||
float w = -1.0;
|
||||
CGFloat w = -1.0;
|
||||
NSString *cstr = [NSString stringWithFormat: @"%c", c];
|
||||
|
||||
#ifdef NS_IMPL_COCOA
|
||||
|
@ -269,7 +269,7 @@ static void ns_glyph_metrics (struct nsfont_info *font_info,
|
|||
static int
|
||||
ns_ascii_average_width (NSFont *sfont)
|
||||
{
|
||||
float w = -1.0;
|
||||
CGFloat w = -1.0;
|
||||
|
||||
if (!ascii_printable)
|
||||
{
|
||||
|
@ -288,14 +288,14 @@ static void ns_glyph_metrics (struct nsfont_info *font_info,
|
|||
w = [sfont advancementForGlyph: glyph].width;
|
||||
#endif
|
||||
|
||||
if (w < 0.0)
|
||||
if (w < (CGFloat) 0.0)
|
||||
{
|
||||
NSDictionary *attrsDictionary =
|
||||
[NSDictionary dictionaryWithObject: sfont forKey: NSFontAttributeName];
|
||||
w = [ascii_printable sizeWithAttributes: attrsDictionary].width;
|
||||
}
|
||||
|
||||
return lrint (w / 95.0);
|
||||
return lrint (w / (CGFloat) 95.0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -323,7 +323,7 @@ static void ns_glyph_metrics (struct nsfont_info *font_info,
|
|||
off++;
|
||||
}
|
||||
//fprintf(stderr, "off = %d\ttot = %d\n", off,tot);
|
||||
return (float)off / tot < 1.0 - pct;
|
||||
return (float)off / tot < 1.0F - pct;
|
||||
}
|
||||
|
||||
|
||||
|
@ -514,8 +514,8 @@ but also for ascii (which causes unnecessary font substitution). */
|
|||
if (ns_charset_covers(fset, charset, pct))
|
||||
[families addObject: family];
|
||||
}
|
||||
pct -= 0.2;
|
||||
if ([families count] > 0 || pct < 0.05)
|
||||
pct -= 0.2F;
|
||||
if ([families count] > 0 || pct < 0.05F)
|
||||
break;
|
||||
}
|
||||
[charset release];
|
||||
|
@ -763,9 +763,9 @@ Properties to be considered are same as for list(). */
|
|||
family = [[NSFont userFixedPitchFontOfSize: 0] familyName];
|
||||
/* Should be > 0.23 as some font descriptors (e.g. Terminus) set to that
|
||||
when setting family in ns_spec_to_descriptor(). */
|
||||
if (ns_attribute_fvalue (fontDesc, NSFontWeightTrait) > 0.50)
|
||||
if (ns_attribute_fvalue (fontDesc, NSFontWeightTrait) > 0.50F)
|
||||
traits |= NSBoldFontMask;
|
||||
if (fabs (ns_attribute_fvalue (fontDesc, NSFontSlantTrait) > 0.05))
|
||||
if (fabs (ns_attribute_fvalue (fontDesc, NSFontSlantTrait) > 0.05F))
|
||||
traits |= NSItalicFontMask;
|
||||
|
||||
/* see http://cocoadev.com/forums/comments.php?DiscussionID=74 */
|
||||
|
@ -880,7 +880,7 @@ when setting family in ns_spec_to_descriptor(). */
|
|||
font_info->max_bounds.width = lrint (font_info->width);
|
||||
font_info->max_bounds.lbearing = lrint (brect.origin.x);
|
||||
font_info->max_bounds.rbearing =
|
||||
lrint (brect.size.width - font_info->width);
|
||||
lrint (brect.size.width - (CGFloat) font_info->width);
|
||||
|
||||
#ifdef NS_IMPL_COCOA
|
||||
/* set up synthItal and the CG font */
|
||||
|
@ -1041,8 +1041,8 @@ is false when (FROM > 0 || TO < S->nchars). */
|
|||
/* NOTE: focus and clip must be set
|
||||
also, currently assumed (true in nsterm.m call) from ==0, to ==nchars */
|
||||
{
|
||||
static char cbuf[1024];
|
||||
char *c = cbuf;
|
||||
static unsigned char cbuf[1024];
|
||||
unsigned char *c = cbuf;
|
||||
#ifdef NS_IMPL_GNUSTEP
|
||||
static float advances[1024];
|
||||
float *adv = advances;
|
||||
|
@ -1209,7 +1209,7 @@ is false when (FROM > 0 || TO < S->nchars). */
|
|||
[bgCol set];
|
||||
DPSmoveto (context, r.origin.x, r.origin.y);
|
||||
/*[context GSSetTextDrawingMode: GSTextFillStroke]; /// not implemented yet */
|
||||
DPSxshow (context, cbuf, advances, len);
|
||||
DPSxshow (context, (const char *) cbuf, advances, len);
|
||||
DPSstroke (context);
|
||||
[col set];
|
||||
/*[context GSSetTextDrawingMode: GSTextFill]; /// not implemented yet */
|
||||
|
@ -1219,7 +1219,7 @@ is false when (FROM > 0 || TO < S->nchars). */
|
|||
|
||||
/* draw with DPSxshow () */
|
||||
DPSmoveto (context, r.origin.x, r.origin.y);
|
||||
DPSxshow (context, cbuf, advances, len);
|
||||
DPSxshow (context, (const char *) cbuf, advances, len);
|
||||
DPSstroke (context);
|
||||
|
||||
DPSgrestore (context);
|
||||
|
@ -1407,7 +1407,7 @@ is false when (FROM > 0 || TO < S->nchars). */
|
|||
metrics = font_info->metrics[block];
|
||||
for (g = block<<8, i =0; i<0x100 && g < numGlyphs; g++, i++, metrics++)
|
||||
{
|
||||
float w, lb, rb;
|
||||
CGFloat w, lb, rb;
|
||||
NSRect r = [sfont boundingRectForGlyph: g];
|
||||
|
||||
w = max ([sfont advancementForGlyph: g].width, 2.0);
|
||||
|
@ -1419,7 +1419,7 @@ is false when (FROM > 0 || TO < S->nchars). */
|
|||
if (lb < 0)
|
||||
metrics->lbearing = round (lb - LCD_SMOOTHING_MARGIN);
|
||||
if (font_info->ital)
|
||||
rb += 0.22 * font_info->height;
|
||||
rb += (CGFloat) (0.22F * font_info->height);
|
||||
metrics->rbearing = lrint (w + rb + LCD_SMOOTHING_MARGIN);
|
||||
|
||||
metrics->descent = r.origin.y < 0 ? -r.origin.y : 0;
|
||||
|
|
|
@ -334,7 +334,7 @@ - (void)dealloc
|
|||
{
|
||||
NSSize s = [self size];
|
||||
unsigned char *planes[5];
|
||||
CGFloat r, g, b, a;
|
||||
EmacsCGFloat r, g, b, a;
|
||||
NSColor *rgbColor;
|
||||
|
||||
if (bmRep == nil || color == nil)
|
||||
|
@ -437,7 +437,7 @@ - (unsigned long) getPixelAtX: (int)x Y: (int)y
|
|||
else
|
||||
{
|
||||
NSColor *color = [bmRep colorAtX: x y: y];
|
||||
CGFloat r, g, b, a;
|
||||
EmacsCGFloat r, g, b, a;
|
||||
[color getRed: &r green: &g blue: &b alpha: &a];
|
||||
return ((int)(a * 255.0) << 24)
|
||||
| ((int)(r * 255.0) << 16) | ((int)(g * 255.0) << 8)
|
||||
|
|
70
src/nsmenu.m
70
src/nsmenu.m
|
@ -45,8 +45,6 @@
|
|||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#define MenuStagger 10.0
|
||||
|
||||
#if 0
|
||||
int menu_trace_num = 0;
|
||||
#define NSTRACE(x) fprintf (stderr, "%s:%d: [%d] " #x "\n", \
|
||||
|
@ -112,7 +110,7 @@
|
|||
2) deep_p, submenu = nil: Recompute all submenus.
|
||||
3) deep_p, submenu = non-nil: Update contents of a single submenu.
|
||||
-------------------------------------------------------------------------- */
|
||||
void
|
||||
static void
|
||||
ns_update_menubar (struct frame *f, bool deep_p, EmacsMenu *submenu)
|
||||
{
|
||||
NSAutoreleasePool *pool;
|
||||
|
@ -505,6 +503,7 @@
|
|||
void
|
||||
x_activate_menubar (struct frame *f)
|
||||
{
|
||||
#ifdef NS_IMPL_COCOA
|
||||
NSArray *a = [[NSApp mainMenu] itemArray];
|
||||
/* Update each submenu separately so ns_update_menubar doesn't reset
|
||||
the delegate. */
|
||||
|
@ -521,6 +520,7 @@
|
|||
++i;
|
||||
}
|
||||
ns_check_pending_open_menu ();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -740,7 +740,7 @@ - (void)fillWithWidgetValue: (void *)wvptr
|
|||
[self setSubmenu: submenu forItem: item];
|
||||
[submenu fillWithWidgetValue: wv->contents];
|
||||
[submenu release];
|
||||
[item setAction: nil];
|
||||
[item setAction: (SEL)nil];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -757,7 +757,7 @@ - (EmacsMenu *)addSubmenuWithTitle: (const char *)title forFrame: (struct frame
|
|||
{
|
||||
NSString *titleStr = [NSString stringWithUTF8String: title];
|
||||
NSMenuItem *item = [self addItemWithTitle: titleStr
|
||||
action: nil /*@selector (menuDown:) */
|
||||
action: (SEL)nil /*@selector (menuDown:) */
|
||||
keyEquivalent: @""];
|
||||
EmacsMenu *submenu = [[EmacsMenu alloc] initWithTitle: titleStr frame: f];
|
||||
[self setSubmenu: submenu forItem: item];
|
||||
|
@ -1045,13 +1045,18 @@ - (Lisp_Object)runMenuAt: (NSPoint)p forFrame: (struct frame *)f
|
|||
Update toolbar contents
|
||||
-------------------------------------------------------------------------- */
|
||||
{
|
||||
int i;
|
||||
int i, k = 0;
|
||||
EmacsView *view = FRAME_NS_VIEW (f);
|
||||
NSWindow *window = [view window];
|
||||
EmacsToolbar *toolbar = [view toolbar];
|
||||
|
||||
block_input ();
|
||||
|
||||
#ifdef NS_IMPL_COCOA
|
||||
[toolbar clearActive];
|
||||
#else
|
||||
[toolbar clearAll];
|
||||
#endif
|
||||
|
||||
/* update EmacsToolbar as in GtkUtils, build items list */
|
||||
for (i = 0; i < f->n_tool_bar_items; ++i)
|
||||
|
@ -1067,6 +1072,15 @@ - (Lisp_Object)runMenuAt: (NSPoint)p forFrame: (struct frame *)f
|
|||
Lisp_Object helpObj;
|
||||
const char *helpText;
|
||||
|
||||
/* Check if this is a separator. */
|
||||
if (EQ (TOOLPROP (TOOL_BAR_ITEM_TYPE), Qt))
|
||||
{
|
||||
/* Skip separators. Newer OSX don't show them, and on GNUStep they
|
||||
are wide as a button, thus overflowing the toolbar most of
|
||||
the time. */
|
||||
continue;
|
||||
}
|
||||
|
||||
/* If image is a vector, choose the image according to the
|
||||
button state. */
|
||||
image = TOOLPROP (TOOL_BAR_ITEM_IMAGES);
|
||||
|
@ -1103,7 +1117,10 @@ - (Lisp_Object)runMenuAt: (NSPoint)p forFrame: (struct frame *)f
|
|||
continue;
|
||||
}
|
||||
|
||||
[toolbar addDisplayItemWithImage: img->pixmap idx: i helpText: helpText
|
||||
[toolbar addDisplayItemWithImage: img->pixmap
|
||||
idx: k++
|
||||
tag: i
|
||||
helpText: helpText
|
||||
enabled: enabled_p];
|
||||
#undef TOOLPROP
|
||||
}
|
||||
|
@ -1111,6 +1128,7 @@ - (Lisp_Object)runMenuAt: (NSPoint)p forFrame: (struct frame *)f
|
|||
if (![toolbar isVisible])
|
||||
[toolbar setVisible: YES];
|
||||
|
||||
#ifdef NS_IMPL_COCOA
|
||||
if ([toolbar changed])
|
||||
{
|
||||
/* inform app that toolbar has changed */
|
||||
|
@ -1132,6 +1150,7 @@ - (Lisp_Object)runMenuAt: (NSPoint)p forFrame: (struct frame *)f
|
|||
[toolbar setConfigurationFromDictionary: newDict];
|
||||
[newDict release];
|
||||
}
|
||||
#endif
|
||||
|
||||
FRAME_TOOLBAR_HEIGHT (f) =
|
||||
NSHeight ([window frameRectForContentRect: NSMakeRect (0, 0, 0, 0)])
|
||||
|
@ -1159,6 +1178,7 @@ @implementation EmacsToolbar
|
|||
[self setDelegate: self];
|
||||
identifierToItem = [[NSMutableDictionary alloc] initWithCapacity: 10];
|
||||
activeIdentifiers = [[NSMutableArray alloc] initWithCapacity: 8];
|
||||
prevIdentifiers = nil;
|
||||
prevEnablement = enablement = 0L;
|
||||
return self;
|
||||
}
|
||||
|
@ -1180,18 +1200,29 @@ - (void) clearActive
|
|||
enablement = 0L;
|
||||
}
|
||||
|
||||
- (void) clearAll
|
||||
{
|
||||
[self clearActive];
|
||||
while ([[self items] count] > 0)
|
||||
[self removeItemAtIndex: 0];
|
||||
}
|
||||
|
||||
- (BOOL) changed
|
||||
{
|
||||
return [activeIdentifiers isEqualToArray: prevIdentifiers] &&
|
||||
enablement == prevEnablement ? NO : YES;
|
||||
}
|
||||
|
||||
- (void) addDisplayItemWithImage: (EmacsImage *)img idx: (int)idx
|
||||
helpText: (const char *)help enabled: (BOOL)enabled
|
||||
- (void) addDisplayItemWithImage: (EmacsImage *)img
|
||||
idx: (int)idx
|
||||
tag: (int)tag
|
||||
helpText: (const char *)help
|
||||
enabled: (BOOL)enabled
|
||||
{
|
||||
/* 1) come up w/identifier */
|
||||
NSString *identifier
|
||||
= [NSString stringWithFormat: @"%u", [img hash]];
|
||||
[activeIdentifiers addObject: identifier];
|
||||
|
||||
/* 2) create / reuse item */
|
||||
NSToolbarItem *item = [identifierToItem objectForKey: identifier];
|
||||
|
@ -1203,20 +1234,25 @@ - (void) addDisplayItemWithImage: (EmacsImage *)img idx: (int)idx
|
|||
[item setToolTip: [NSString stringWithUTF8String: help]];
|
||||
[item setTarget: emacsView];
|
||||
[item setAction: @selector (toolbarClicked:)];
|
||||
[identifierToItem setObject: item forKey: identifier];
|
||||
}
|
||||
|
||||
[item setTag: idx];
|
||||
#ifdef NS_IMPL_GNUSTEP
|
||||
[self insertItemWithItemIdentifier: identifier atIndex: idx];
|
||||
#endif
|
||||
|
||||
[item setTag: tag];
|
||||
[item setEnabled: enabled];
|
||||
|
||||
/* 3) update state */
|
||||
[identifierToItem setObject: item forKey: identifier];
|
||||
[activeIdentifiers addObject: identifier];
|
||||
enablement = (enablement << 1) | (enabled == YES);
|
||||
}
|
||||
|
||||
/* This overrides super's implementation, which automatically sets
|
||||
all items to enabled state (for some reason). */
|
||||
- (void)validateVisibleItems { }
|
||||
- (void)validateVisibleItems
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/* delegate methods */
|
||||
|
@ -1239,7 +1275,8 @@ - (NSArray *)toolbarDefaultItemIdentifiers: (NSToolbar *)toolbar
|
|||
- (NSArray *)toolbarAllowedItemIdentifiers: (NSToolbar *)toolbar
|
||||
{
|
||||
/* return entire set... */
|
||||
return [identifierToItem allKeys];
|
||||
return activeIdentifiers;
|
||||
//return [identifierToItem allKeys];
|
||||
}
|
||||
|
||||
/* optional and unneeded */
|
||||
|
@ -1531,7 +1568,7 @@ @implementation EmacsDialogPanel
|
|||
[img autorelease];
|
||||
[imgView autorelease];
|
||||
|
||||
aStyle = NSTitledWindowMask;
|
||||
aStyle = NSTitledWindowMask|NSClosableWindowMask|NSUtilityWindowMask;
|
||||
flag = YES;
|
||||
rows = 0;
|
||||
cols = 1;
|
||||
|
@ -1599,9 +1636,6 @@ @implementation EmacsDialogPanel
|
|||
[self setOneShot: YES];
|
||||
[self setReleasedWhenClosed: YES];
|
||||
[self setHidesOnDeactivate: YES];
|
||||
[self setStyleMask:
|
||||
NSTitledWindowMask|NSClosableWindowMask|NSUtilityWindowMask];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
|
|
|
@ -182,7 +182,7 @@ Updated by Christian Limpach (chris@nice.ch)
|
|||
Lisp_Object target_type)
|
||||
{
|
||||
Lisp_Object local_value;
|
||||
Lisp_Object handler_fn, value, type, check;
|
||||
Lisp_Object handler_fn, value, check;
|
||||
ptrdiff_t count;
|
||||
|
||||
local_value = assq_no_quit (selection_name, Vselection_alist);
|
||||
|
@ -203,7 +203,6 @@ Updated by Christian Limpach (chris@nice.ch)
|
|||
check = value;
|
||||
if (CONSP (value) && SYMBOLP (XCAR (value)))
|
||||
{
|
||||
type = XCAR (value);
|
||||
check = XCDR (value);
|
||||
}
|
||||
|
||||
|
|
44
src/nsterm.h
44
src/nsterm.h
|
@ -51,6 +51,16 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
|
||||
#ifdef __OBJC__
|
||||
|
||||
/* CGFloat on GNUStep may be 4 or 8 byte, but functions expect float* for some
|
||||
versions.
|
||||
On Cocoa, functions expect CGFloat*. Make compatible type. */
|
||||
#if defined (NS_IMPL_COCOA) || GNUSTEP_GUI_MAJOR_VERSION > 0 || \
|
||||
GNUSTEP_GUI_MINOR_VERSION >= 22
|
||||
typedef CGFloat EmacsCGFloat;
|
||||
#else
|
||||
typedef float EmacsCGFloat;
|
||||
#endif
|
||||
|
||||
/* ==========================================================================
|
||||
|
||||
The Emacs application
|
||||
|
@ -60,6 +70,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
/* We override sendEvent: as a means to stop/start the event loop */
|
||||
@interface EmacsApp : NSApplication
|
||||
{
|
||||
#ifdef NS_IMPL_GNUSTEP
|
||||
@public
|
||||
int nextappdefined;
|
||||
#endif
|
||||
}
|
||||
- (void)logNotification: (NSNotification *)notification;
|
||||
- (void)sendEvent: (NSEvent *)theEvent;
|
||||
|
@ -68,8 +82,18 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
- (void)fd_handler: (id)unused;
|
||||
- (void)timeout_handler: (NSTimer *)timedEntry;
|
||||
- (BOOL)fulfillService: (NSString *)name withArg: (NSString *)arg;
|
||||
#ifdef NS_IMPL_GNUSTEP
|
||||
- (void)sendFromMainThread:(id)unused;
|
||||
#endif
|
||||
@end
|
||||
|
||||
#ifdef NS_IMPL_GNUSTEP
|
||||
/* Dummy class to get rid of startup warnings. */
|
||||
@interface EmacsDocument : NSDocument
|
||||
{
|
||||
}
|
||||
@end
|
||||
#endif
|
||||
|
||||
/* ==========================================================================
|
||||
|
||||
|
@ -128,8 +152,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
#endif
|
||||
|
||||
#ifdef NS_IMPL_GNUSTEP
|
||||
/* Not declared, but useful. */
|
||||
- (void) unlockFocusNeedsFlush: (BOOL)needs;
|
||||
- (void)windowDidMove: (id)sender;
|
||||
#endif
|
||||
@end
|
||||
|
||||
|
@ -199,10 +222,14 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
}
|
||||
- initForView: (EmacsView *)view withIdentifier: (NSString *)identifier;
|
||||
- (void) clearActive;
|
||||
- (void) clearAll;
|
||||
- (BOOL) changed;
|
||||
- (void) addDisplayItemWithImage: (EmacsImage *)img idx: (int)idx
|
||||
- (void) addDisplayItemWithImage: (EmacsImage *)img
|
||||
idx: (int)idx
|
||||
tag: (int)tag
|
||||
helpText: (const char *)help
|
||||
enabled: (BOOL)enabled;
|
||||
|
||||
/* delegate methods */
|
||||
- (NSToolbarItem *)toolbar: (NSToolbar *)toolbar
|
||||
itemForItemIdentifier: (NSString *)itemIdentifier
|
||||
|
@ -267,14 +294,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
@interface EmacsSavePanel : NSSavePanel
|
||||
{
|
||||
}
|
||||
- (NSString *) getFilename;
|
||||
- (NSString *) getDirectory;
|
||||
@end
|
||||
@interface EmacsOpenPanel : NSOpenPanel
|
||||
{
|
||||
}
|
||||
- (NSString *) getFilename;
|
||||
- (NSString *) getDirectory;
|
||||
@end
|
||||
|
||||
@interface EmacsFileDelegate : NSObject
|
||||
|
@ -335,7 +358,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
NSResponder *prevResponder;
|
||||
|
||||
/* offset to the bottom of knob of last mouse down */
|
||||
float last_mouse_offset;
|
||||
CGFloat last_mouse_offset;
|
||||
float min_portion;
|
||||
int pixel_height;
|
||||
int last_hit_part;
|
||||
|
@ -789,9 +812,9 @@ extern int ns_lisp_to_color (Lisp_Object color, NSColor **col);
|
|||
extern NSColor *ns_lookup_indexed_color (unsigned long idx, struct frame *f);
|
||||
extern unsigned long ns_index_color (NSColor *color, struct frame *f);
|
||||
extern void ns_free_indexed_color (unsigned long idx, struct frame *f);
|
||||
extern const char *ns_get_pending_menu_title ();
|
||||
extern const char *ns_get_pending_menu_title (void);
|
||||
extern void ns_check_menu_open (NSMenu *menu);
|
||||
extern void ns_check_pending_open_menu ();
|
||||
extern void ns_check_pending_open_menu (void);
|
||||
#endif
|
||||
|
||||
/* C access to ObjC functionality */
|
||||
|
@ -840,6 +863,7 @@ extern int x_display_pixel_height (struct ns_display_info *);
|
|||
extern int x_display_pixel_width (struct ns_display_info *);
|
||||
|
||||
/* This in nsterm.m */
|
||||
extern void x_destroy_window (struct frame *f);
|
||||
extern int ns_select (int nfds, fd_set *readfds, fd_set *writefds,
|
||||
fd_set *exceptfds, EMACS_TIME *timeout,
|
||||
sigset_t *sigmask);
|
||||
|
|
206
src/nsterm.m
206
src/nsterm.m
|
@ -60,6 +60,10 @@ Updated by Christian Limpach (chris@nice.ch)
|
|||
#include "buffer.h"
|
||||
#include "font.h"
|
||||
|
||||
#ifdef NS_IMPL_GNUSTEP
|
||||
#include "process.h"
|
||||
#endif
|
||||
|
||||
/* call tracing */
|
||||
#if 0
|
||||
int term_trace_num = 0;
|
||||
|
@ -196,7 +200,9 @@ Updated by Christian Limpach (chris@nice.ch)
|
|||
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 */
|
||||
|
@ -228,6 +234,7 @@ Updated by Christian Limpach (chris@nice.ch)
|
|||
NULL, 0, 0
|
||||
};
|
||||
|
||||
#ifdef NS_IMPL_COCOA
|
||||
/*
|
||||
* State for pending menu activation:
|
||||
* MENU_NONE Normal state
|
||||
|
@ -246,6 +253,7 @@ Updated by Christian Limpach (chris@nice.ch)
|
|||
|
||||
/* 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
|
||||
|
@ -317,8 +325,6 @@ Updated by Christian Limpach (chris@nice.ch)
|
|||
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);
|
||||
|
@ -670,8 +676,6 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
-------------------------------------------------------------------------- */
|
||||
{
|
||||
NSView *view = FRAME_NS_VIEW (f);
|
||||
NSRect r = [view frame];
|
||||
NSBezierPath *bp;
|
||||
NSTRACE (ns_update_begin);
|
||||
|
||||
ns_update_auto_hide_menu_bar ();
|
||||
|
@ -683,9 +687,15 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
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);
|
||||
|
@ -772,20 +782,13 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
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];
|
||||
|
||||
|
@ -818,13 +821,6 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
-------------------------------------------------------------------------- */
|
||||
{
|
||||
// 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);
|
||||
|
@ -843,33 +839,11 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
}
|
||||
|
||||
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)
|
||||
|
@ -1317,12 +1291,17 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
|
||||
/* 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;
|
||||
|
||||
|
@ -1548,7 +1527,7 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
}
|
||||
}
|
||||
|
||||
if (r >= 0.0)
|
||||
if (r >= 0.0F)
|
||||
{
|
||||
*col = [NSColor colorWithCalibratedRed: r green: g blue: b alpha: 1.0];
|
||||
unblock_input ();
|
||||
|
@ -1609,7 +1588,7 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
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);
|
||||
|
@ -1651,7 +1630,7 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
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;
|
||||
|
@ -1696,26 +1675,6 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
}
|
||||
|
||||
|
||||
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)
|
||||
/* --------------------------------------------------------------------------
|
||||
|
@ -1723,7 +1682,6 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
-------------------------------------------------------------------------- */
|
||||
{
|
||||
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;
|
||||
|
||||
|
@ -1745,7 +1703,10 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
alpha = alpha_min;
|
||||
|
||||
#ifdef NS_IMPL_COCOA
|
||||
{
|
||||
EmacsView *view = FRAME_NS_VIEW (f);
|
||||
[[view window] setAlphaValue: alpha];
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1798,7 +1759,7 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
|
||||
|
||||
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
|
||||
|
@ -2257,7 +2218,6 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
{
|
||||
struct frame *f = XFRAME (WINDOW_FRAME (w));
|
||||
struct face *face = p->face;
|
||||
int rowY;
|
||||
static EmacsImage **bimgs = NULL;
|
||||
static int nBimgs = 0;
|
||||
|
||||
|
@ -2271,7 +2231,6 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
}
|
||||
|
||||
/* 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)
|
||||
|
@ -2359,7 +2318,7 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
[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
|
||||
|
@ -2391,7 +2350,6 @@ Note that CURSOR_WIDTH is meaningful only for (h)bar cursors.
|
|||
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);
|
||||
|
@ -2598,7 +2556,7 @@ Note that CURSOR_WIDTH is meaningful only for (h)bar cursors.
|
|||
--------------------------------------------------------------------- */
|
||||
|
||||
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;
|
||||
|
@ -2616,7 +2574,7 @@ Note that CURSOR_WIDTH is meaningful only for (h)bar cursors.
|
|||
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;
|
||||
|
@ -2756,7 +2714,8 @@ Note that CURSOR_WIDTH is meaningful only for (h)bar cursors.
|
|||
}
|
||||
|
||||
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
|
||||
|
@ -3033,7 +2992,7 @@ Function modeled after x_draw_glyph_string_box ().
|
|||
/* 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);
|
||||
|
@ -3358,6 +3317,19 @@ overwriting cursor (usually when cursor on a tab) */
|
|||
{
|
||||
/*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. */
|
||||
|
@ -3417,6 +3389,9 @@ overwriting cursor (usually when cursor on a tab) */
|
|||
}
|
||||
#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 ()
|
||||
{
|
||||
|
@ -3427,10 +3402,6 @@ overwriting cursor (usually when cursor on a tab) */
|
|||
void
|
||||
ns_check_menu_open (NSMenu *menu)
|
||||
{
|
||||
/* 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
|
||||
|
||||
/* Click in menu bar? */
|
||||
NSArray *a = [[NSApp mainMenu] itemArray];
|
||||
int i;
|
||||
|
@ -3460,14 +3431,12 @@ overwriting cursor (usually when cursor on a tab) */
|
|||
menu_will_open_state = MENU_NONE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Redo saved menu click if state is MENU_PENDING. */
|
||||
void
|
||||
ns_check_pending_open_menu ()
|
||||
{
|
||||
#ifdef NS_IMPL_COCOA
|
||||
if (menu_will_open_state == MENU_PENDING)
|
||||
{
|
||||
CGEventSourceRef source
|
||||
|
@ -3484,9 +3453,8 @@ overwriting cursor (usually when cursor on a tab) */
|
|||
|
||||
menu_will_open_state = MENU_OPENING;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* NS_IMPL_COCOA) && >= MAC_OS_X_VERSION_10_5 */
|
||||
|
||||
static int
|
||||
ns_read_socket (struct terminal *terminal, struct input_event *hold_quit)
|
||||
|
@ -4392,6 +4360,12 @@ Needs to be here because ns_initialize_display_info () uses AppKit classes.
|
|||
|
||||
[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;
|
||||
}
|
||||
|
||||
|
@ -4699,6 +4673,13 @@ - (void)timeout_handler: (NSTimer *)timedEntry
|
|||
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
|
||||
|
@ -4863,7 +4844,7 @@ - (void)changeFont: (id)sender
|
|||
NSEvent *e =[[self window] currentEvent];
|
||||
struct face *face =FRAME_DEFAULT_FACE (emacsframe);
|
||||
id newFont;
|
||||
float size;
|
||||
CGFloat size;
|
||||
|
||||
NSTRACE (changeFont);
|
||||
if (!emacs_event)
|
||||
|
@ -4982,7 +4963,16 @@ most recently updated (I guess), which is not the correct one. */
|
|||
{
|
||||
/* 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;
|
||||
|
@ -5135,10 +5125,14 @@ most recently updated (I guess), which is not the correct one. */
|
|||
|
||||
#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)
|
||||
|
@ -5346,7 +5340,12 @@ - (NSRange)selectedRange
|
|||
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");
|
||||
|
@ -5385,7 +5384,7 @@ - (void)mouseDown: (NSEvent *)theEvent
|
|||
|
||||
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;
|
||||
|
@ -5569,7 +5568,6 @@ - (void) updateFrameSize: (BOOL) delay;
|
|||
|
||||
if (oldr != rows || oldc != cols || neww != oldw || newh != oldh)
|
||||
{
|
||||
struct frame *f = emacsframe;
|
||||
NSView *view = FRAME_NS_VIEW (emacsframe);
|
||||
NSWindow *win = [view window];
|
||||
NSSize sz = [win resizeIncrements];
|
||||
|
@ -5778,7 +5776,6 @@ - (BOOL)isOpaque
|
|||
NSRect r, wr;
|
||||
Lisp_Object tem;
|
||||
NSWindow *win;
|
||||
NSButton *toggleButton;
|
||||
NSSize sz;
|
||||
NSColor *col;
|
||||
NSString *name;
|
||||
|
@ -5854,9 +5851,12 @@ - (BOOL)isOpaque
|
|||
[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;
|
||||
|
||||
|
@ -5880,7 +5880,7 @@ - (BOOL)isOpaque
|
|||
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];
|
||||
|
@ -5973,7 +5973,7 @@ - (NSRect)windowWillUseStandardFrame:(NSWindow *)sender
|
|||
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;
|
||||
|
@ -6066,7 +6066,9 @@ - (void)windowDidExitFullScreen:(NSNotification *)notification
|
|||
{
|
||||
[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];
|
||||
|
@ -6125,7 +6127,9 @@ - (void)toggleFullScreen: (id)sender
|
|||
|
||||
if (fs_is_native)
|
||||
{
|
||||
#ifdef NS_IMPL_COCOA
|
||||
[[self window] toggleFullScreen:sender];
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -6171,7 +6175,7 @@ - (void)toggleFullScreen: (id)sender
|
|||
[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;
|
||||
|
@ -6209,7 +6213,7 @@ - (void)toggleFullScreen: (id)sender
|
|||
[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;
|
||||
|
@ -6903,10 +6907,11 @@ - (int) checkSamePosition: (int) position portion: (int) portion
|
|||
}
|
||||
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];
|
||||
|
@ -6931,7 +6936,7 @@ -(void)getMouseMotionPart: (int *)part window: (Lisp_Object *)window
|
|||
*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]);
|
||||
|
@ -7005,7 +7010,7 @@ - (void)mouseDown: (NSEvent *)e
|
|||
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);
|
||||
|
@ -7104,7 +7109,6 @@ - (void)mouseDragged: (NSEvent *)e
|
|||
{
|
||||
NSRect sr;
|
||||
double loc, pos;
|
||||
int edge = 0;
|
||||
|
||||
NSTRACE (EmacsScroller_mouseDragged);
|
||||
|
||||
|
@ -7115,15 +7119,13 @@ - (void)mouseDragged: (NSEvent *)e
|
|||
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];
|
||||
}
|
||||
|
||||
|
@ -7150,6 +7152,12 @@ - (void) scrollWheel: (NSEvent *)theEvent
|
|||
@end /* EmacsScroller */
|
||||
|
||||
|
||||
#ifdef NS_IMPL_GNUSTEP
|
||||
/* Dummy class to get rid of startup warnings. */
|
||||
@implementation EmacsDocument
|
||||
|
||||
@end
|
||||
#endif
|
||||
|
||||
|
||||
/* ==========================================================================
|
||||
|
|
|
@ -7029,6 +7029,16 @@ integer or floating point values.
|
|||
return system_process_attributes (pid);
|
||||
}
|
||||
|
||||
void
|
||||
catch_child_signal (void)
|
||||
{
|
||||
#ifdef SIGCHLD
|
||||
struct sigaction action;
|
||||
emacs_sigaction_init (&action, deliver_child_signal);
|
||||
sigaction (SIGCHLD, &action, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/* This is not called "init_process" because that is the name of a
|
||||
Mach system call, so it would cause problems on Darwin systems. */
|
||||
|
@ -7044,9 +7054,7 @@ init_process_emacs (void)
|
|||
if (! noninteractive || initialized)
|
||||
#endif
|
||||
{
|
||||
struct sigaction action;
|
||||
emacs_sigaction_init (&action, deliver_child_signal);
|
||||
sigaction (SIGCHLD, &action, 0);
|
||||
catch_child_signal ();
|
||||
}
|
||||
|
||||
FD_ZERO (&input_wait_mask);
|
||||
|
|
|
@ -217,5 +217,6 @@ extern void add_read_fd (int fd, fd_callback func, void *data);
|
|||
extern void delete_read_fd (int fd);
|
||||
extern void add_write_fd (int fd, fd_callback func, void *data);
|
||||
extern void delete_write_fd (int fd);
|
||||
extern void catch_child_signal (void);
|
||||
|
||||
INLINE_HEADER_END
|
||||
|
|
Loading…
Add table
Reference in a new issue