Commit 80ca7302 authored by Dan Nicolaescu's avatar Dan Nicolaescu

* s/darwin.h (SYSTEM_PURESIZE_EXTRA): Define here.

* termhooks.h (union display_info): Add mac_display_info.

* term.c (init_tty): Only use terminal->kboard when MULTI_KBOARD
is defined.

* macterm.h (struct mac_display_info): Add terminal.

* w32term.c (w32_initialize): Make static.

* macterm.c (XTset_terminal_modes): Add a terminal parameter.
(XTreset_terminal_modes): Likewise.
(x_clear_frame): Add a frame parameter.
(note_mouse_movement): Get rif from the frame.
(mac_term_init): Initialize the terminal.
(mac_initialize): Make static and move terminal initialization ...
(mac_create_terminal): ... in this new function.

* macmenu.c: Reorder includes.
(Fx_popup_menu): Use terminal specific mouse_position_hook.

* macfns.c (x_set_mouse_color): Get rif from the frame.
(x_set_tool_bar_lines): Don't use updating_frame.
(mac_window): Add 2 new parameters for consistency with other
systems.
(Fx_create_frame): Fix doc string. Rename the parameter.
(Fx_create_frame): Set the frame parameters following what is done
in X11 and w32.
(Fx_open_connection): Remove window-system check.
(start_hourglass): Likewise.
(x_create_tip_frame): Get the keyboard from the terminal.

* w32fns.c (Fx_create_frame): Use kboard from the terminal.

* term/mac-win.el: Provide mac-win.
(mac-initialized): New variable.
(mac-initialize-window-system): New function. Move global setup
here.
(handle-args-function-alist, frame-creation-function-alist):
(window-system-initialization-alist): Add mac entries.

* loadup.el: Load mac-win on a Mac.
parent 69675870
2007-05-19 Dan Nicolaescu <dann@ics.uci.edu>
* term/mac-win.el: Provide mac-win.
(mac-initialized): New variable.
(mac-initialize-window-system): New function. Move global setup
here.
(handle-args-function-alist, frame-creation-function-alist):
(window-system-initialization-alist): Add mac entries.
* loadup.el: Load mac-win on a Mac.
2007-05-17 Jason Rumney <jasonr@gnu.org>
* term/w32-win.el (internal-face-interactive): Remove obsolete function.
......
......@@ -212,6 +212,9 @@
(if (eq system-type 'macos)
(progn
(load "ls-lisp")))
(if (eq system-type 'darwin)
(progn
(load "term/mac-win")))
(if (fboundp 'atan) ; preload some constants and
(progn ; floating pt. functions if we have float support.
(load "emacs-lisp/float-sup")))
......
......@@ -65,8 +65,8 @@
;; An alist of X options and the function which handles them. See
;; ../startup.el.
(if (not (eq window-system 'mac))
(error "%s: Loading mac-win.el but not compiled for Mac" (invocation-name)))
;; (if (not (eq window-system 'mac))
;; (error "%s: Loading mac-win.el but not compiled for Mac" (invocation-name)))
(require 'frame)
(require 'mouse)
......@@ -2594,13 +2594,23 @@ ascii:-*-Monaco-*-*-*-*-12-*-*-*-*-*-mac-roman")
(defun x-win-suspend-error ()
(error "Suspending an Emacs running under Mac makes no sense"))
(defalias 'x-cut-buffer-or-selection-value 'x-get-selection-value)
(defvar mac-initialized nil
"Non-nil if the w32 window system has been initialized.")
(defun mac-initialize-window-system ()
"Initialize Emacs for Mac GUI frames."
(add-hook 'suspend-hook 'x-win-suspend-error)
;;; Arrange for the kill and yank functions to set and check the clipboard.
(setq interprogram-cut-function 'x-select-text)
(setq interprogram-paste-function 'x-get-selection-value)
(defalias 'x-cut-buffer-or-selection-value 'x-get-selection-value)
;;; Turn off window-splitting optimization; Mac is usually fast enough
;;; that this is only annoying.
......@@ -2616,6 +2626,7 @@ ascii:-*-Monaco-*-*-*-*-12-*-*-*-*-*-mac-roman")
;; Enable CLIPBOARD copy/paste through menu bar commands.
(menu-bar-enable-clipboard)
;; Initiate drag and drop
(define-key special-event-map [drag-n-drop] 'mac-dnd-handle-drag-n-drop-event)
......@@ -2637,6 +2648,8 @@ ascii:-*-Monaco-*-*-*-*-12-*-*-*-*-*-mac-roman")
(global-unset-key [vertical-scroll-bar drag-mouse-1])
(global-unset-key [vertical-scroll-bar mouse-1])
(setq mac-initialized t)))
(defun mac-handle-scroll-bar-event (event)
"Handle scroll bar EVENT to emulate Mac Toolbox style scrolling."
(interactive "e")
......@@ -2683,7 +2696,6 @@ ascii:-*-Monaco-*-*-*-*-12-*-*-*-*-*-mac-roman")
(mac-scroll-ignore-events)
(scroll-up 1)))
)
;;;; Others
......@@ -2721,5 +2733,11 @@ ascii:-*-Monaco-*-*-*-*-12-*-*-*-*-*-mac-roman")
;; or bold bitmap versions will not display these variants correctly.
(setq scalable-fonts-allowed t)
(add-to-list 'handle-args-function-alist '(mac . x-handle-args))
(add-to-list 'frame-creation-function-alist '(mac . x-create-frame-with-faces))
(add-to-list 'window-system-initialization-alist '(mac . mac-initialize-window-system))
(provide 'mac-win)
;; arch-tag: 71dfcd14-cde8-4d66-b05c-85ec94fb23a6
;;; mac-win.el ends here
2007-05-19 Dan Nicolaescu <dann@ics.uci.edu>
* s/darwin.h (SYSTEM_PURESIZE_EXTRA): Define here.
* termhooks.h (union display_info): Add mac_display_info.
* term.c (init_tty): Only use terminal->kboard when MULTI_KBOARD
is defined.
* macterm.h (struct mac_display_info): Add terminal.
* w32term.c (w32_initialize): Make static.
* macterm.c (XTset_terminal_modes): Add a terminal parameter.
(XTreset_terminal_modes): Likewise.
(x_clear_frame): Add a frame parameter.
(note_mouse_movement): Get rif from the frame.
(mac_term_init): Initialize the terminal.
(mac_initialize): Make static and move terminal initialization ...
(mac_create_terminal): ... in this new function.
* macmenu.c: Reorder includes.
(Fx_popup_menu): Use terminal specific mouse_position_hook.
* macfns.c (x_set_mouse_color): Get rif from the frame.
(x_set_tool_bar_lines): Don't use updating_frame.
(mac_window): Add 2 new parameters for consistency with other
systems.
(Fx_create_frame): Fix doc string. Rename the parameter.
(Fx_create_frame): Set the frame parameters following what is done
in X11 and w32.
(Fx_open_connection): Remove window-system check.
(start_hourglass): Likewise.
(x_create_tip_frame): Get the keyboard from the terminal.
* w32fns.c (Fx_create_frame): Use kboard from the terminal.
2007-05-17 Jason Rumney <jasonr@gnu.org>
* w32fns.c (x_create_tip_frame): Set window_system.
......
This diff is collapsed.
......@@ -26,10 +26,10 @@ Boston, MA 02110-1301, USA. */
#include <stdio.h>
#include "lisp.h"
#include "frame.h"
#include "termhooks.h"
#include "keyboard.h"
#include "keymap.h"
#include "frame.h"
#include "window.h"
#include "blockinput.h"
#include "buffer.h"
......@@ -720,8 +720,8 @@ no quit occurs and `x-popup-menu' returns nil. */)
enum scroll_bar_part part;
unsigned long time;
if (mouse_position_hook)
(*mouse_position_hook) (&new_f, 1, &bar_window,
if (FRAME_TERMINAL (new_f)->mouse_position_hook)
(*FRAME_TERMINAL (new_f)->mouse_position_hook) (&new_f, 1, &bar_window,
&part, &x, &y, &time);
if (new_f != 0)
XSETFRAME (window, new_f);
......
......@@ -231,14 +231,14 @@ void x_raise_frame P_ ((struct frame *));
void x_set_window_size P_ ((struct frame *, int, int, int));
void x_wm_set_window_state P_ ((struct frame *, int));
void x_wm_set_icon_pixmap P_ ((struct frame *, int));
void mac_initialize P_ ((void));
static void mac_initialize P_ ((void));
static void x_font_min_bounds P_ ((XFontStruct *, int *, int *));
static int x_compute_min_glyph_bounds P_ ((struct frame *));
static void x_update_end P_ ((struct frame *));
static void XTframe_up_to_date P_ ((struct frame *));
static void XTset_terminal_modes P_ ((void));
static void XTreset_terminal_modes P_ ((void));
static void x_clear_frame P_ ((void));
static void XTset_terminal_modes P_ ((struct terminal *));
static void XTreset_terminal_modes P_ ((struct terminal *));
static void x_clear_frame P_ ((struct frame *));
static void frame_highlight P_ ((struct frame *));
static void frame_unhighlight P_ ((struct frame *));
static void x_new_focus_frame P_ ((struct x_display_info *, struct frame *));
......@@ -266,6 +266,8 @@ static void x_scroll_bar_report_motion P_ ((struct frame **, Lisp_Object *,
static int is_emacs_window P_ ((WindowPtr));
static XCharStruct *mac_per_char_metric P_ ((XFontStruct *, XChar2b *, int));
static void XSetFont P_ ((Display *, GC, XFontStruct *));
static struct terminal *mac_create_terminal P_ ((struct mac_display_info *dpyinfo));
#define GC_FORE_COLOR(gc) (&(gc)->fore_color)
#define GC_BACK_COLOR(gc) (&(gc)->back_color)
......@@ -2306,7 +2308,7 @@ mac_destroy_fringe_bitmap (which)
rarely happens). */
static void
XTset_terminal_modes ()
XTset_terminal_modes (struct terminal *t)
{
}
......@@ -2314,7 +2316,7 @@ XTset_terminal_modes ()
the windows go away, and suspending requires no action. */
static void
XTreset_terminal_modes ()
XTreset_terminal_modes (struct terminal *t)
{
}
......@@ -3957,15 +3959,8 @@ x_delete_glyphs (n)
frame. Otherwise clear the selected frame. */
static void
x_clear_frame ()
x_clear_frame (struct frame *f)
{
struct frame *f;
if (updating_frame)
f = updating_frame;
else
f = SELECTED_FRAME ();
/* Clearing the frame will erase any cursor, so mark them all as no
longer visible. */
mark_window_cursors_off (XWINDOW (FRAME_ROOT_WINDOW (f)));
......@@ -4499,7 +4494,7 @@ note_mouse_movement (frame, pos)
clear_mouse_face (dpyinfo);
dpyinfo->mouse_face_mouse_frame = 0;
if (!dpyinfo->grabbed)
rif->define_frame_cursor (frame,
FRAME_RIF (frame)->define_frame_cursor (frame,
frame->output_data.mac->nontext_cursor);
}
......@@ -11626,6 +11621,7 @@ mac_term_init (display_name, xrm_option, resource_name)
char *resource_name;
{
struct mac_display_info *dpyinfo;
struct terminal *terminal;
BLOCK_INPUT;
......@@ -11641,6 +11637,13 @@ mac_term_init (display_name, xrm_option, resource_name)
dpyinfo = &one_mac_display_info;
bzero (dpyinfo, sizeof (*dpyinfo));
terminal = mac_create_terminal (dpyinfo);
/* Set the name of the terminal. */
terminal->name = (char *) xmalloc (SBYTES (display_name) + 1);
strncpy (terminal->name, SDATA (display_name), SBYTES (display_name));
terminal->name[SBYTES (display_name)] = 0;
#ifdef MAC_OSX
dpyinfo->mac_id_name
= (char *) xmalloc (SCHARS (Vinvocation_name)
......@@ -11844,31 +11847,39 @@ static struct redisplay_interface x_redisplay_interface =
mac_shift_glyphs_for_insert
};
void
mac_initialize ()
{
rif = &x_redisplay_interface;
clear_frame_hook = x_clear_frame;
ins_del_lines_hook = x_ins_del_lines;
delete_glyphs_hook = x_delete_glyphs;
ring_bell_hook = XTring_bell;
reset_terminal_modes_hook = XTreset_terminal_modes;
set_terminal_modes_hook = XTset_terminal_modes;
update_begin_hook = x_update_begin;
update_end_hook = x_update_end;
set_terminal_window_hook = XTset_terminal_window;
read_socket_hook = XTread_socket;
frame_up_to_date_hook = XTframe_up_to_date;
mouse_position_hook = XTmouse_position;
frame_rehighlight_hook = XTframe_rehighlight;
frame_raise_lower_hook = XTframe_raise_lower;
set_vertical_scroll_bar_hook = XTset_vertical_scroll_bar;
condemn_scroll_bars_hook = XTcondemn_scroll_bars;
redeem_scroll_bar_hook = XTredeem_scroll_bar;
judge_scroll_bars_hook = XTjudge_scroll_bars;
static struct terminal *
mac_create_terminal (struct mac_display_info *dpyinfo)
{
struct terminal *terminal;
terminal = create_terminal ();
terminal->type = output_mac;
terminal->display_info.mac = dpyinfo;
dpyinfo->terminal = terminal;
terminal->rif = &x_redisplay_interface;
terminal->clear_frame_hook = x_clear_frame;
terminal->ins_del_lines_hook = x_ins_del_lines;
terminal->delete_glyphs_hook = x_delete_glyphs;
terminal->ring_bell_hook = XTring_bell;
terminal->reset_terminal_modes_hook = XTreset_terminal_modes;
terminal->set_terminal_modes_hook = XTset_terminal_modes;
terminal->update_begin_hook = x_update_begin;
terminal->update_end_hook = x_update_end;
terminal->set_terminal_window_hook = XTset_terminal_window;
terminal->read_socket_hook = XTread_socket;
terminal->frame_up_to_date_hook = XTframe_up_to_date;
terminal->mouse_position_hook = XTmouse_position;
terminal->frame_rehighlight_hook = XTframe_rehighlight;
terminal->frame_raise_lower_hook = XTframe_raise_lower;
terminal->set_vertical_scroll_bar_hook = XTset_vertical_scroll_bar;
terminal->condemn_scroll_bars_hook = XTcondemn_scroll_bars;
terminal->redeem_scroll_bar_hook = XTredeem_scroll_bar;
terminal->judge_scroll_bars_hook = XTjudge_scroll_bars;
#if 0
TTY_SCROLL_REGION_OK (CURTTY ()) = 1; /* we'll scroll partial frames */
TTY_CHAR_INS_DEL_OK (CURTTY ()) = 1;
TTY_LINE_INS_DEL_OK (CURTTY ()) = 1; /* we'll just blt 'em */
......@@ -11876,6 +11887,22 @@ mac_initialize ()
TTY_MEMORY_BELOW_FRAME (CURTTY ()) = 0; /* we don't remember what
scrolls off the
bottom */
#else
terminal->scroll_region_ok = 1; /* We'll scroll partial frames. */
terminal->char_ins_del_ok = 1;
terminal->line_ins_del_ok = 1; /* We'll just blt 'em. */
terminal->fast_clear_end_of_line = 1; /* X does this well. */
terminal->memory_below_frame = 0; /* We don't remember what scrolls
off the bottom. */
#endif
return terminal;
}
static void
mac_initialize ()
{
baud_rate = 19200;
last_tool_bar_item = -1;
......@@ -11925,6 +11952,7 @@ mac_initialize ()
#endif
UNBLOCK_INPUT;
}
......
......@@ -64,6 +64,9 @@ struct mac_display_info
/* Chain of all mac_display_info structures. */
struct mac_display_info *next;
/* The generic display parameters corresponding to this X display. */
struct terminal *terminal;
/* This is a cons cell of the form (NAME . FONT-LIST-CACHE).
The same cons cell also appears in x_display_name_list. */
Lisp_Object name_list_element;
......@@ -611,7 +614,6 @@ extern void x_free_frame_resources P_ ((struct frame *));
extern void x_destroy_window P_ ((struct frame *));
extern void x_wm_set_size_hint P_ ((struct frame *, long, int));
extern void x_delete_display P_ ((struct x_display_info *));
extern void mac_initialize P_ ((void));
extern Pixmap XCreatePixmap P_ ((Display *, WindowPtr, unsigned int,
unsigned int, unsigned int));
extern Pixmap XCreatePixmapFromBitmapData P_ ((Display *, WindowPtr, char *,
......
......@@ -53,6 +53,10 @@ Boston, MA 02110-1301, USA. */
#endif
#endif
/* We need a little extra space, see ../../lisp/loadup.el. */
#define SYSTEM_PURESIZE_EXTRA 30000
/* SYSTEM_TYPE should indicate the kind of system you are using.
It sets the Lisp variable system-type. */
......
......@@ -2732,9 +2732,8 @@ to do `unset TERMCAP' (C-shell: `unsetenv TERMCAP') as well.",
prompt in the mini-buffer. */
if (current_kboard == initial_kboard)
current_kboard = terminal->kboard;
#endif
term_get_fkeys (address, terminal->kboard);
#endif
/* Get frame size from system, or else from termcap. */
{
......
......@@ -293,6 +293,9 @@ enum {
#endif /* CONSP */
struct mac_display_info;
struct w32_display_info;
/* Terminal-local parameters. */
struct terminal
{
......@@ -327,9 +330,8 @@ struct terminal
{
struct tty_display_info *tty; /* termchar.h */
struct x_display_info *x; /* xterm.h */
#ifdef WINDOWSNT
struct w32_display_info *w32; /* w32term.h */
#endif
struct mac_display_info *mac; /* macterm.h */
} display_info;
......
......@@ -4165,7 +4165,7 @@ This function is an internal primitive--use `make-frame' instead. */)
display = Qnil;
dpyinfo = check_x_display_info (display);
#ifdef MULTI_KBOARD
kb = dpyinfo->kboard;
kb = dpyinfo->terminal->kboard;
#else
kb = &the_only_kboard;
#endif
......
......@@ -230,7 +230,7 @@ void x_raise_frame P_ ((struct frame *));
void x_set_window_size P_ ((struct frame *, int, int, int));
void x_wm_set_window_state P_ ((struct frame *, int));
void x_wm_set_icon_pixmap P_ ((struct frame *, int));
void w32_initialize P_ ((void));
static void w32_initialize P_ ((void));
static void x_font_min_bounds P_ ((XFontStruct *, int *, int *));
int x_compute_min_glyph_bounds P_ ((struct frame *));
static void x_update_end P_ ((struct frame *));
......@@ -6403,7 +6403,7 @@ x_delete_display (dpyinfo)
DWORD WINAPI w32_msg_worker (void * arg);
void
static void
w32_initialize ()
{
baud_rate = 19200;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment