X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/d7aff0d6929c16d15992304dd44c5f528df8f895..33813370fcaa4ad70449cc4068154e1e073cb7a9:/src/nsfns.m diff --git a/src/nsfns.m b/src/nsfns.m index ee6020f2b4..a0fbcfd58b 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -1,6 +1,6 @@ /* Functions for the NeXT/Open/GNUstep and MacOSX window system. -Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2013 Free Software +Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2014 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -183,13 +183,13 @@ ns_display_info_for_name (Lisp_Object name) if (!NILP (Fstring_equal (XCAR (dpyinfo->name_list_element), name))) return dpyinfo; - error ("Emacs for OpenStep does not yet support multi-display."); + error ("Emacs for Nextstep does not yet support multi-display"); Fx_open_connection (name, Qnil, Qnil); dpyinfo = x_display_list; if (dpyinfo == 0) - error ("OpenStep on %s not responding.\n", SDATA (name)); + error ("Display on %s not responding.\n", SDATA (name)); return dpyinfo; } @@ -703,7 +703,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) } } - x_set_window_size (f, 0, f->text_cols, f->text_lines); + x_set_window_size (f, 0, f->text_cols, f->text_lines, 0); } @@ -823,9 +823,9 @@ int ns_lisp_to_cursor_type (Lisp_Object arg) { char *str; - if (XTYPE (arg) == Lisp_String) + if (STRINGP (arg)) str = SSDATA (arg); - else if (XTYPE (arg) == Lisp_Symbol) + else if (SYMBOLP (arg)) str = SSDATA (SYMBOL_NAME (arg)); else return -1; if (!strcmp (str, "box")) return FILLED_BOX_CURSOR; @@ -873,12 +873,16 @@ x_set_mouse_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval) static Lisp_Object ns_appkit_version_str (void) { - char tmp[80]; + char tmp[256]; #ifdef NS_IMPL_GNUSTEP sprintf(tmp, "gnustep-gui-%s", Xstr(GNUSTEP_GUI_VERSION)); #elif defined (NS_IMPL_COCOA) - sprintf(tmp, "apple-appkit-%.2f", NSAppKitVersionNumber); + NSString *osversion + = [[NSProcessInfo processInfo] operatingSystemVersionString]; + sprintf(tmp, "appkit-%.2f %s", + NSAppKitVersionNumber, + [osversion UTF8String]); #else tmp = "ns-unknown"; #endif @@ -946,6 +950,8 @@ frame_parm_handler ns_frame_parm_handlers[] = x_set_icon_name, x_set_icon_type, x_set_internal_border_width, /* generic OK */ + 0, /* x_set_right_divider_width */ + 0, /* x_set_bottom_divider_width */ x_set_menu_bar_lines, x_set_mouse_color, x_explicitly_set_name, @@ -1022,7 +1028,7 @@ get_geometry_from_preferences (struct ns_display_info *dpyinfo, }; int i; - for (i = 0; i < sizeof (r)/sizeof (r[0]); ++i) + for (i = 0; i < ARRAYELTS (r); ++i) { if (NILP (Fassq (r[i].tem, parms))) { @@ -1062,7 +1068,6 @@ This function is an internal primitive--use `make-frame' instead. */) int minibuffer_only = 0; long window_prompting = 0; int width, height; - ptrdiff_t count = specpdl_ptr - specpdl; struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; Lisp_Object display; struct ns_display_info *dpyinfo = NULL; @@ -1137,6 +1142,8 @@ This function is an internal primitive--use `make-frame' instead. */) FRAME_DISPLAY_INFO (f) = dpyinfo; + dynwind_begin (); + /* With FRAME_DISPLAY_INFO set up, this unwind-protect is safe. */ record_unwind_protect (unwind_create_frame, frame); @@ -1235,6 +1242,13 @@ This function is an internal primitive--use `make-frame' instead. */) init_frame_faces (f); + /* Read comment about this code in corresponding place in xfns.c. */ + width = FRAME_TEXT_WIDTH (f); + height = FRAME_TEXT_HEIGHT (f); + FRAME_TEXT_HEIGHT (f) = 0; + SET_FRAME_WIDTH (f, 0); + change_frame_size (f, width, height, 1, 0, 0, 1); + /* The resources controlling the menu-bar and tool-bar are processed specially at startup, and reflected in the mode variables; ignore them here. */ @@ -1266,6 +1280,7 @@ This function is an internal primitive--use `make-frame' instead. */) f->output_data.ns->hand_cursor = [NSCursor pointingHandCursor]; f->output_data.ns->hourglass_cursor = [NSCursor disappearingItemCursor]; f->output_data.ns->horizontal_drag_cursor = [NSCursor resizeLeftRightCursor]; + f->output_data.ns->vertical_drag_cursor = [NSCursor resizeUpDownCursor]; FRAME_DISPLAY_INFO (f)->vertical_scroll_bar_cursor = [NSCursor arrowCursor]; f->output_data.ns->current_pointer = f->output_data.ns->text_cursor; @@ -1298,12 +1313,11 @@ This function is an internal primitive--use `make-frame' instead. */) x_default_parameter (f, parms, Qfullscreen, Qnil, "fullscreen", "Fullscreen", RES_TYPE_SYMBOL); - width = FRAME_COLS (f); - height = FRAME_LINES (f); - - SET_FRAME_COLS (f, 0); - FRAME_LINES (f) = 0; - change_frame_size (f, height, width, 1, 0, 0); + width = FRAME_TEXT_WIDTH (f); + height = FRAME_TEXT_HEIGHT (f); + FRAME_TEXT_HEIGHT (f) = 0; + SET_FRAME_WIDTH (f, 0); + change_frame_size (f, width, height, 1, 0, 0, 1); if (! f->output_data.ns->explicit_parent) { @@ -1347,7 +1361,8 @@ This function is an internal primitive--use `make-frame' instead. */) and similar functions. */ Vwindow_list = Qnil; - return unbind_to (count, frame); + dynwind_end (); + return frame; } void @@ -1808,10 +1823,10 @@ terminate Emacs if we can't open the connection. if (dpyinfo == 0) { if (!NILP (must_succeed)) - fatal ("OpenStep on %s not responding.\n", + fatal ("Display on %s not responding.\n", SSDATA (display)); else - error ("OpenStep on %s not responding.\n", + error ("Display on %s not responding.\n", SSDATA (display)); } @@ -2087,7 +2102,6 @@ ns_do_applescript (Lisp_Object script, Lisp_Object *result) returnDescriptor = [scriptObject executeAndReturnError: &errorDict]; [scriptObject release]; - *result = Qnil; if (returnDescriptor != NULL) @@ -2148,6 +2162,7 @@ In case the execution fails, an error is signaled. */) Lisp_Object result; int status; NSEvent *nxev; + struct input_event ev; CHECK_STRING (script); check_window_system (NULL); @@ -2175,8 +2190,10 @@ In case the execution fails, an error is signaled. */) // If there are other events, the event loop may exit. Keep running // until the script has been handled. */ + ns_init_events (&ev); while (! NILP (as_script)) [NSApp run]; + ns_finish_events (); status = as_status; as_status = 0; @@ -2280,7 +2297,7 @@ DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0, if (ns_lisp_to_color (color, &col)) return Qnil; - [[col colorUsingColorSpaceName: NSCalibratedRGBColorSpace] + [[col colorUsingDefaultColorSpace] getRed: &red green: &green blue: &blue alpha: &alpha]; return list3i (lrint (red * 65280), lrint (green * 65280), lrint (blue * 65280)); @@ -2709,11 +2726,11 @@ Text larger than the specified size is clipped. */) { int root_x, root_y; struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; - ptrdiff_t count = SPECPDL_INDEX (); struct frame *f; char *str; NSSize size; + dynwind_begin (); specbind (Qinhibit_redisplay, Qt); GCPRO4 (string, parms, frame, timeout); @@ -2754,7 +2771,8 @@ Text larger than the specified size is clipped. */) unblock_input (); UNGCPRO; - return unbind_to (count, Qnil); + dynwind_end (); + return Qnil; } @@ -2907,6 +2925,8 @@ handlePanelKeys (NSSavePanel *panel, NSEvent *theEvent) void syms_of_nsfns (void) { +#include "nsfns.x" + Qfontsize = intern_c_string ("fontsize"); staticpro (&Qfontsize); @@ -2935,49 +2955,6 @@ be used as the image of the icon representing the frame. */); doc: /* Toolkit version for NS Windowing. */); Vns_version_string = ns_appkit_version_str (); - defsubr (&Sns_read_file_name); - defsubr (&Sns_get_resource); - defsubr (&Sns_set_resource); - defsubr (&Sxw_display_color_p); /* this and next called directly by C code */ - defsubr (&Sx_display_grayscale_p); - defsubr (&Sns_font_name); - defsubr (&Sns_list_colors); -#ifdef NS_IMPL_COCOA - defsubr (&Sns_do_applescript); -#endif - defsubr (&Sxw_color_defined_p); - defsubr (&Sxw_color_values); - defsubr (&Sx_server_max_request_size); - defsubr (&Sx_server_vendor); - defsubr (&Sx_server_version); - defsubr (&Sx_display_pixel_width); - defsubr (&Sx_display_pixel_height); - defsubr (&Sns_display_monitor_attributes_list); - defsubr (&Sx_display_mm_width); - defsubr (&Sx_display_mm_height); - defsubr (&Sx_display_screens); - defsubr (&Sx_display_planes); - defsubr (&Sx_display_color_cells); - defsubr (&Sx_display_visual_class); - defsubr (&Sx_display_backing_store); - defsubr (&Sx_display_save_under); - defsubr (&Sx_create_frame); - defsubr (&Sx_open_connection); - defsubr (&Sx_close_connection); - defsubr (&Sx_display_list); - - defsubr (&Sns_hide_others); - defsubr (&Sns_hide_emacs); - defsubr (&Sns_emacs_info_panel); - defsubr (&Sns_list_services); - defsubr (&Sns_perform_service); - defsubr (&Sns_convert_utf8_nfd_to_nfc); - defsubr (&Sns_popup_font_panel); - defsubr (&Sns_popup_color_panel); - - defsubr (&Sx_show_tip); - defsubr (&Sx_hide_tip); - as_status = 0; as_script = Qnil; as_result = 0;