[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/macterm.c
From: |
YAMAMOTO Mitsuharu |
Subject: |
[Emacs-diffs] Changes to emacs/src/macterm.c |
Date: |
Fri, 09 Dec 2005 20:49:53 -0500 |
Index: emacs/src/macterm.c
diff -c emacs/src/macterm.c:1.145 emacs/src/macterm.c:1.146
*** emacs/src/macterm.c:1.145 Thu Nov 24 08:20:16 2005
--- emacs/src/macterm.c Sat Dec 10 01:49:53 2005
***************
*** 622,628 ****
ByteCount sizes[] = {sizeof (ATSLineLayoutOptions)};
static ATSLineLayoutOptions line_layout =
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
! kATSLineDisableAllLayoutOperations | kATSLineUseDeviceMetrics
#else
kATSLineIsDisplayOnly | kATSLineFractDisable
#endif
--- 622,628 ----
ByteCount sizes[] = {sizeof (ATSLineLayoutOptions)};
static ATSLineLayoutOptions line_layout =
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
! kATSLineDisableAllLayoutOperations | kATSLineUseDeviceMetrics
#else
kATSLineIsDisplayOnly | kATSLineFractDisable
#endif
***************
*** 8127,8146 ****
Carbon/Apple event handlers. */
static struct input_event *read_socket_inev = NULL;
- /* Set in term/mac-win.el to indicate that event loop can now generate
- drag and drop events. */
- Lisp_Object Qmac_ready_for_drag_n_drop;
-
Point saved_menu_event_location;
/* Apple Events */
! static void init_required_apple_events (void);
! static pascal OSErr
! do_ae_open_application (const AppleEvent *, AppleEvent *, long);
! static pascal OSErr
! do_ae_print_documents (const AppleEvent *, AppleEvent *, long);
! static pascal OSErr do_ae_open_documents (AppleEvent *, AppleEvent *, long);
! static pascal OSErr do_ae_quit_application (AppleEvent *, AppleEvent *, long);
#if TARGET_API_MAC_CARBON
/* Drag and Drop */
--- 8127,8144 ----
Carbon/Apple event handlers. */
static struct input_event *read_socket_inev = NULL;
Point saved_menu_event_location;
/* Apple Events */
! #if USE_CARBON_EVENTS
! static Lisp_Object Qhicommand;
! #endif
! extern int mac_ready_for_apple_events;
! extern Lisp_Object Qundefined;
! extern void init_apple_event_handler P_ ((void));
! extern void mac_find_apple_event_spec P_ ((AEEventClass, AEEventID,
! Lisp_Object *, Lisp_Object *,
! Lisp_Object *));
#if TARGET_API_MAC_CARBON
/* Drag and Drop */
***************
*** 8150,8160 ****
static DragReceiveHandlerUPP mac_do_receive_dragUPP = NULL;
#endif
- static Lisp_Object Qapplication, Qabout;
#if USE_CARBON_EVENTS
#ifdef MAC_OSX
extern void init_service_handler ();
! static Lisp_Object Qpreferences, Qservices, Qpaste, Qperform;
#endif
/* Window Event Handler */
static pascal OSStatus mac_handle_window_event (EventHandlerCallRef,
--- 8148,8157 ----
static DragReceiveHandlerUPP mac_do_receive_dragUPP = NULL;
#endif
#if USE_CARBON_EVENTS
#ifdef MAC_OSX
extern void init_service_handler ();
! static Lisp_Object Qservices, Qpaste, Qperform;
#endif
/* Window Event Handler */
static pascal OSStatus mac_handle_window_event (EventHandlerCallRef,
***************
*** 8699,8877 ****
x_real_positions (f, &f->left_pos, &f->top_pos);
}
! /* Intialize AppleEvent dispatcher table for the required events. */
! void
! init_required_apple_events ()
! {
! OSErr err;
! long result;
!
! /* Make sure we have apple events before starting. */
! err = Gestalt (gestaltAppleEventsAttr, &result);
! if (err != noErr)
! abort ();
!
! if (!(result & (1 << gestaltAppleEventsPresent)))
! abort ();
!
! #if TARGET_API_MAC_CARBON
! err = AEInstallEventHandler(kCoreEventClass, kAEOpenApplication,
! NewAEEventHandlerUPP
! ((AEEventHandlerProcPtr) do_ae_open_application),
! 0L, false);
! #else
! err = AEInstallEventHandler(kCoreEventClass, kAEOpenApplication,
! NewAEEventHandlerProc
! ((AEEventHandlerProcPtr) do_ae_open_application),
! 0L, false);
! #endif
! if (err != noErr)
! abort ();
!
! #if TARGET_API_MAC_CARBON
! err = AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments,
! NewAEEventHandlerUPP
! ((AEEventHandlerProcPtr) do_ae_open_documents),
! 0L, false);
! #else
! err = AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments,
! NewAEEventHandlerProc
! ((AEEventHandlerProcPtr) do_ae_open_documents),
! 0L, false);
! #endif
! if (err != noErr)
! abort ();
!
! #if TARGET_API_MAC_CARBON
! err = AEInstallEventHandler(kCoreEventClass, kAEPrintDocuments,
! NewAEEventHandlerUPP
! ((AEEventHandlerProcPtr) do_ae_print_documents),
! 0L, false);
! #else
! err = AEInstallEventHandler(kCoreEventClass, kAEPrintDocuments,
! NewAEEventHandlerProc
! ((AEEventHandlerProcPtr) do_ae_print_documents),
! 0L, false);
! #endif
! if (err != noErr)
! abort ();
!
! #if TARGET_API_MAC_CARBON
! err = AEInstallEventHandler(kCoreEventClass, kAEQuitApplication,
! NewAEEventHandlerUPP
! ((AEEventHandlerProcPtr) do_ae_quit_application),
! 0L, false);
! #else
! err = AEInstallEventHandler(kCoreEventClass, kAEQuitApplication,
! NewAEEventHandlerProc
! ((AEEventHandlerProcPtr) do_ae_quit_application),
! 0L, false);
! #endif
! if (err != noErr)
! abort ();
! }
!
! void
! mac_store_application_menu_event (event)
! #if USE_CARBON_EVENTS
! EventRef event;
! #else
! UInt32 event;
! #endif
{
struct input_event buf;
! Lisp_Object frame, entry;
!
! EVENT_INIT (buf);
! XSETFRAME (frame, mac_focus_frame (&one_mac_display_info));
! buf.kind = MENU_BAR_EVENT;
! buf.frame_or_window = frame;
! buf.arg = frame;
! kbd_buffer_store_event (&buf);
!
! buf.arg = Qapplication;
! kbd_buffer_store_event (&buf);
!
! #if USE_CARBON_EVENTS
! switch (GetEventClass (event))
{
! #ifdef MAC_OSX
! case kEventClassService:
! buf.arg = Qservices;
! kbd_buffer_store_event (&buf);
! switch (GetEventKind (event))
! {
! case kEventServicePaste:
! entry = Qpaste;
! break;
! case kEventServicePerform:
! {
! OSErr err;
! CFStringRef message;
!
! err = GetEventParameter (event, kEventParamServiceMessageName,
! typeCFStringRef, NULL,
! sizeof (CFStringRef), NULL, &message);
! buf.arg = Qperform;
! kbd_buffer_store_event (&buf);
! if (err == noErr && message)
! entry = intern (SDATA (cfstring_to_lisp (message)));
! else
! entry = Qnil;
! }
! break;
! default:
! abort ();
! }
! break;
! #endif /* MAC_OSX */
! case kEventClassCommand:
! {
! HICommand command;
! GetEventParameter(event, kEventParamDirectObject, typeHICommand,
! NULL, sizeof (HICommand), NULL, &command);
! switch (command.commandID)
! {
! case kHICommandAbout:
! entry = Qabout;
! break;
! #ifdef MAC_OSX
! case kHICommandPreferences:
! entry = Qpreferences;
! break;
! #endif /* MAC_OSX */
! case kHICommandQuit:
! entry = Qquit;
! break;
! default:
! abort ();
! }
! }
! break;
! default:
! abort ();
! }
! #else /* USE_CARBON_EVENTS */
! switch (event)
! {
! case kHICommandAbout:
! entry = Qabout;
! break;
! case kHICommandQuit:
! entry = Qquit;
! break;
! default:
! abort ();
! }
! #endif
! buf.arg = entry;
! kbd_buffer_store_event (&buf);
}
#if USE_CARBON_EVENTS
--- 8696,8744 ----
x_real_positions (f, &f->left_pos, &f->top_pos);
}
! OSErr
! mac_store_apple_event (class, id, desc)
! Lisp_Object class, id;
! const AEDesc *desc;
{
+ OSErr err = noErr;
struct input_event buf;
! AEDesc *desc_copy;
! desc_copy = xmalloc (sizeof (AEDesc));
! if (desc_copy == NULL)
! err = memFullErr;
! else
! err = AEDuplicateDesc (desc, desc_copy);
! if (err == noErr)
{
! EVENT_INIT (buf);
! buf.kind = MAC_APPLE_EVENT;
! buf.x = class;
! buf.y = id;
! buf.code = (int)desc_copy;
! XSETFRAME (buf.frame_or_window,
! mac_focus_frame (&one_mac_display_info));
! buf.arg = Qnil;
! kbd_buffer_store_event (&buf);
! }
! return err;
! }
! Lisp_Object
! mac_make_lispy_event_code (code)
! int code;
! {
! AEDesc *desc = (AEDesc *)code;
! Lisp_Object obj;
! obj = mac_aedesc_to_lisp (desc);
! AEDisposeDesc (desc);
! xfree (desc);
! return obj;
}
#if USE_CARBON_EVENTS
***************
*** 8881,8908 ****
EventRef event;
void *data;
{
HICommand command;
! OSErr result;
! GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL,
! sizeof (HICommand), NULL, &command);
! switch (command.commandID)
! {
! case kHICommandAbout:
! #ifdef MAC_OSX
! case kHICommandPreferences:
! #endif /* MAC_OSX */
! result = CallNextEventHandler (next_handler, event);
! if (result != eventNotHandledErr)
! return result;
! mac_store_application_menu_event (event);
! return noErr;
! default:
! break;
! }
return eventNotHandledErr;
}
--- 8748,8796 ----
EventRef event;
void *data;
{
+ OSStatus result;
+ OSErr err;
HICommand command;
! Lisp_Object class_key, id_key, binding;
! result = CallNextEventHandler (next_handler, event);
! if (result != eventNotHandledErr)
! return result;
! GetEventParameter (event, kEventParamDirectObject, typeHICommand, NULL,
! sizeof (HICommand), NULL, &command);
! if (command.commandID == 0)
! return eventNotHandledErr;
! /* A HICommand event is mapped to an Apple event whose event class
! symbol is `hicommand' and event ID is its command ID. */
! class_key = Qhicommand;
! mac_find_apple_event_spec (0, command.commandID,
! &class_key, &id_key, &binding);
! if (!NILP (binding) && !EQ (binding, Qundefined))
! if (INTEGERP (binding))
! return XINT (binding);
! else
! {
! AppleEvent apple_event;
! UInt32 modifiers;
! static EventParamName names[] = {kEventParamDirectObject,
! kEventParamKeyModifiers};
! static EventParamType types[] = {typeHICommand,
! typeUInt32};
! static UInt32 sizes[] = {sizeof (HICommand),
! sizeof (UInt32)};
! err = create_apple_event_from_event_ref (event, 2, names, types,
! sizes, &apple_event);
! if (err == noErr)
! {
! err = mac_store_apple_event (class_key, id_key, &apple_event);
! AEDisposeDesc (&apple_event);
! }
! if (err == noErr)
! return noErr;
! }
return eventNotHandledErr;
}
***************
*** 9064,9069 ****
--- 8952,9003 ----
return eventNotHandledErr;
}
+
+ #ifdef MAC_OSX
+ OSErr
+ mac_store_services_event (event)
+ EventRef event;
+ {
+ OSErr err;
+ AppleEvent apple_event;
+ Lisp_Object id_key;
+
+ switch (GetEventKind (event))
+ {
+ case kEventServicePaste:
+ id_key = Qpaste;
+ err = create_apple_event_from_event_ref (event, 0, NULL,
+ NULL, NULL, &apple_event);
+ break;
+
+ case kEventServicePerform:
+ {
+ static EventParamName names[] = {kEventParamServiceMessageName,
+ kEventParamServiceUserData};
+ static EventParamType types[] = {typeCFStringRef,
+ typeCFStringRef};
+ static UInt32 sizes[] = {sizeof (CFStringRef),
+ sizeof (CFStringRef)};
+
+ id_key = Qperform;
+ err = create_apple_event_from_event_ref (event, 2, names, types,
+ sizes, &apple_event);
+ }
+ break;
+
+ default:
+ abort ();
+ }
+
+ if (err == noErr)
+ {
+ err = mac_store_apple_event (Qservices, id_key, &apple_event);
+ AEDisposeDesc (&apple_event);
+ }
+
+ return err;
+ }
+ #endif /* MAC_OSX */
#endif /* USE_CARBON_EVENTS */
***************
*** 9122,9280 ****
#endif
}
- /* Open Application Apple Event */
- static pascal OSErr
- do_ae_open_application(const AppleEvent *pae, AppleEvent *preply, long
prefcon)
- {
- return noErr;
- }
-
-
- /* Called when we receive an AppleEvent with an ID of
- "kAEOpenDocuments". This routine gets the direct parameter,
- extracts the FSSpecs in it, and puts their names on a list. */
- #pragma options align=mac68k
- typedef struct SelectionRange {
- short unused1; // 0 (not used)
- short lineNum; // line to select (<0 to specify range)
- long startRange; // start of selection range (if line < 0)
- long endRange; // end of selection range (if line < 0)
- long unused2; // 0 (not used)
- long theDate; // modification date/time
- } SelectionRange;
- #pragma options align=reset
-
- static pascal OSErr
- do_ae_open_documents(AppleEvent *message, AppleEvent *reply, long refcon)
- {
- OSErr err, err2;
- AEDesc the_desc;
- AEKeyword keyword;
- DescType actual_type;
- Size actual_size;
- SelectionRange position;
- Lisp_Object file_list = Qnil;
-
- xassert (read_socket_inev);
-
- err = AEGetParamDesc (message, keyDirectObject, typeAEList, &the_desc);
- if (err != noErr)
- goto descriptor_error_exit;
-
- err = AEGetParamPtr (message, keyAEPosition, typeChar, &actual_type,
&position, sizeof(SelectionRange), &actual_size);
- if (err == noErr)
- file_list = Fcons (list3 (make_number (position.lineNum + 1),
- make_number (position.startRange + 1),
- make_number (position.endRange + 1)),
- file_list);
-
- /* Check to see that we got all of the required parameters from the
- event descriptor. For an 'odoc' event this should just be the
- file list. */
- err = AEGetAttributePtr(message, keyMissedKeywordAttr, typeWildCard,
- &actual_type, (Ptr) &keyword,
- sizeof (keyword), &actual_size);
- /* No error means that we found some unused parameters.
- errAEDescNotFound means that there are no more parameters. If we
- get an error code other than that, flag it. */
- if ((err == noErr) || (err != errAEDescNotFound))
- {
- err = errAEEventNotHandled;
- goto error_exit;
- }
- err = noErr;
-
- /* Got all the parameters we need. Now, go through the direct
- object list and parse it up. */
- {
- long num_files_to_open;
-
- err = AECountItems (&the_desc, &num_files_to_open);
- if (err == noErr)
- {
- int i;
-
- /* AE file list is one based so just use that for indexing here. */
- for (i = 1; i <= num_files_to_open; i++)
- {
- char unix_path_name[MAXPATHLEN];
- #ifdef MAC_OSX
- FSRef fref;
-
- err = AEGetNthPtr (&the_desc, i, typeFSRef, &keyword,
- &actual_type, &fref, sizeof (FSRef),
- &actual_size);
- if (err != noErr || actual_type != typeFSRef)
- continue;
-
- if (FSRefMakePath (&fref, unix_path_name, sizeof (unix_path_name))
- == noErr)
- #else
- FSSpec fs;
-
- err = AEGetNthPtr(&the_desc, i, typeFSS, &keyword, &actual_type,
- (Ptr) &fs, sizeof (fs), &actual_size);
- if (err != noErr) continue;
-
- if (fsspec_to_posix_pathname (&fs, unix_path_name,
- sizeof (unix_path_name) - 1) == noErr)
- #endif
- /* x-dnd functions expect undecoded filenames. */
- file_list = Fcons (make_unibyte_string (unix_path_name,
- strlen (unix_path_name)),
- file_list);
- }
- }
-
- /* Build a DRAG_N_DROP_EVENT type event as is done in
- constuct_drag_n_drop in w32term.c. */
- if (!NILP (file_list))
- {
- struct frame *f = mac_focus_frame (&one_mac_display_info);
- WindowPtr wp;
- Lisp_Object frame;
-
- read_socket_inev->kind = DRAG_N_DROP_EVENT;
- read_socket_inev->code = 0;
- read_socket_inev->modifiers = 0;
-
- XSETINT (read_socket_inev->x, 0);
- XSETINT (read_socket_inev->y, 0);
-
- XSETFRAME (frame, f);
- read_socket_inev->frame_or_window = Fcons (frame, file_list);
-
- #if 0
- /* Regardless of whether Emacs was suspended or in the
- foreground, ask it to redraw its entire screen. Otherwise
- parts of the screen can be left in an inconsistent
- state. */
- wp = FRAME_MAC_WINDOW (f);
- if (wp)
- #if TARGET_API_MAC_CARBON
- {
- Rect r;
-
- GetWindowPortBounds (wp, &r);
- InvalWindowRect (wp, &r);
- }
- #else /* not TARGET_API_MAC_CARBON */
- InvalRect (&(wp->portRect));
- #endif /* not TARGET_API_MAC_CARBON */
- #endif
- }
- }
-
- error_exit:
- /* Nuke the coerced file list in any case */
- err2 = AEDisposeDesc(&the_desc);
-
- descriptor_error_exit:
- /* InvalRect(&(gFrontMacWindowP->mWP->portRect)); */
- return err;
- }
-
-
#if TARGET_API_MAC_CARBON
static pascal OSErr
mac_do_track_drag (DragTrackingMessage message, WindowPtr window,
--- 9056,9061 ----
***************
*** 9429,9472 ****
#endif
- /* Print Document Apple Event */
- static pascal OSErr
- do_ae_print_documents (const AppleEvent *pAE, AppleEvent *reply, long refcon)
- {
- return errAEEventNotHandled;
- }
-
-
- static pascal OSErr
- do_ae_quit_application (AppleEvent* message, AppleEvent *reply, long refcon)
- {
- #if USE_CARBON_EVENTS
- OSErr err;
- EventRef event = NULL;
- static const HICommand quit_command = {kEventAttributeNone, kHICommandQuit};
-
- err = CreateEvent (NULL, kEventClassCommand, kEventCommandProcess, 0,
- kEventAttributeUserEvent, &event);
- if (err == noErr)
- err = SetEventParameter (event, kEventParamDirectObject, typeHICommand,
- sizeof (HICommand), &quit_command);
- if (err == noErr)
- mac_store_application_menu_event (event);
- if (event)
- ReleaseEvent (event);
-
- if (err == noErr)
- return noErr;
- else
- return errAEEventNotHandled;
- #else
- mac_store_application_menu_event (kHICommandQuit);
-
- return noErr;
- #endif
- }
-
-
#if __profile__
void
profiler_exit_proc ()
--- 9210,9215 ----
***************
*** 9520,9526 ****
initialize_applescript ();
! init_required_apple_events ();
{
char **argv;
--- 9263,9269 ----
initialize_applescript ();
! init_apple_event_handler ();
{
char **argv;
***************
*** 9724,9730 ****
mouse_region = NewRgn ();
event_mask = everyEvent;
! if (NILP (Fboundp (Qmac_ready_for_drag_n_drop)))
event_mask -= highLevelEventMask;
current_tick = TickCount ();
--- 9467,9473 ----
mouse_region = NewRgn ();
event_mask = everyEvent;
! if (!mac_ready_for_apple_events)
event_mask -= highLevelEventMask;
current_tick = TickCount ();
***************
*** 10891,10897 ****
BLOCK_INPUT;
#if TARGET_API_MAC_CARBON
- init_required_apple_events ();
#if USE_CARBON_EVENTS
#ifdef MAC_OSX
--- 10634,10639 ----
***************
*** 10906,10911 ****
--- 10648,10655 ----
#endif /* USE_CARBON_EVENTS */
#ifdef MAC_OSX
+ init_apple_event_handler ();
+
if (!inhibit_window_system)
MakeMeTheFrontProcess ();
#endif
***************
*** 10936,10950 ****
Fput (Qhyper, Qmodifier_value, make_number (hyper_modifier));
Fput (Qsuper, Qmodifier_value, make_number (super_modifier));
! Qapplication = intern ("application"); staticpro (&Qapplication);
! Qabout = intern ("about"); staticpro (&Qabout);
!
! #if USE_CARBON_EVENTS && defined (MAC_OSX)
! Qpreferences = intern ("preferences"); staticpro (&Qpreferences);
Qservices = intern ("services"); staticpro (&Qservices);
Qpaste = intern ("paste"); staticpro (&Qpaste);
Qperform = intern ("perform"); staticpro (&Qperform);
#endif
#ifdef MAC_OSX
Fprovide (intern ("mac-carbon"), Qnil);
--- 10680,10693 ----
Fput (Qhyper, Qmodifier_value, make_number (hyper_modifier));
Fput (Qsuper, Qmodifier_value, make_number (super_modifier));
! #if USE_CARBON_EVENTS
! Qhicommand = intern ("hicommand"); staticpro (&Qhicommand);
! #ifdef MAC_OSX
Qservices = intern ("services"); staticpro (&Qservices);
Qpaste = intern ("paste"); staticpro (&Qpaste);
Qperform = intern ("perform"); staticpro (&Qperform);
#endif
+ #endif
#ifdef MAC_OSX
Fprovide (intern ("mac-carbon"), Qnil);
***************
*** 10952,10960 ****
staticpro (&Qreverse);
Qreverse = intern ("reverse");
-
- staticpro (&Qmac_ready_for_drag_n_drop);
- Qmac_ready_for_drag_n_drop = intern ("mac-ready-for-drag-n-drop");
staticpro (&x_display_name_list);
x_display_name_list = Qnil;
--- 10695,10700 ----
- [Emacs-diffs] Changes to emacs/src/macterm.c,
YAMAMOTO Mitsuharu <=