mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-28 07:45:00 +00:00
Merge from emacs-23; up to 2010-06-08T03:06:47Z!dann@ics.uci.edu.
This commit is contained in:
commit
8546720e6f
@ -684,7 +684,7 @@
|
||||
(emerge-protect-metachars): Quote correctly for ms-dos and
|
||||
windows-nt systems.
|
||||
|
||||
2011-03-19 Ralph Schleicher <rs@ralph-schleicher.de>
|
||||
2011-03-19 Ralph Schleicher <rs@ralph-schleicher.de> (tiny change)
|
||||
|
||||
* info.el (info-initialize): Replace all uses of `:' with
|
||||
path-separator for compatibility with non-Unix systems.
|
||||
|
@ -1,3 +1,13 @@
|
||||
2011-04-09 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* ftfont.c (get_adstyle_property, ftfont_pattern_entity): Use
|
||||
unsigned char, to match FcChar8 type definition.
|
||||
|
||||
* xterm.c (handle_one_xevent):
|
||||
* xmenu.c (create_and_show_popup_menu):
|
||||
* xselect.c (x_decline_selection_request)
|
||||
(x_reply_selection_request): Avoid type-punned deref of X events.
|
||||
|
||||
2011-04-09 Eli Zaretskii <eliz@emacstest.gnu.org>
|
||||
|
||||
Fix some uses of `int' instead of EMACS_INT.
|
||||
@ -39,7 +49,7 @@
|
||||
* ccl.c (Fccl_execute_on_string): Declare some variables
|
||||
EMACS_INT.
|
||||
|
||||
2011-04-08 Svante Signell <svante.signell@telia.com> (tiny change)
|
||||
2011-04-08 Samuel Thibault <sthibault@debian.org> (tiny change)
|
||||
|
||||
* term.c (init_tty): Fix incorrect ifdef placement (Bug#8450).
|
||||
|
||||
|
@ -160,7 +160,7 @@ static struct
|
||||
static Lisp_Object
|
||||
get_adstyle_property (FcPattern *p)
|
||||
{
|
||||
char *str, *end;
|
||||
unsigned char *str, *end;
|
||||
Lisp_Object adstyle;
|
||||
|
||||
if (FcPatternGetString (p, FC_STYLE, 0, (FcChar8 **) &str) != FcResultMatch)
|
||||
@ -189,7 +189,7 @@ static Lisp_Object
|
||||
ftfont_pattern_entity (FcPattern *p, Lisp_Object extra)
|
||||
{
|
||||
Lisp_Object key, cache, entity;
|
||||
char *file, *str;
|
||||
unsigned char *file, *str;
|
||||
int idx;
|
||||
int numeric;
|
||||
double dbl;
|
||||
|
34
src/xmenu.c
34
src/xmenu.c
@ -1529,7 +1529,8 @@ create_and_show_popup_menu (FRAME_PTR f, widget_value *first_wv,
|
||||
int i;
|
||||
Arg av[2];
|
||||
int ac = 0;
|
||||
XButtonPressedEvent dummy;
|
||||
XEvent dummy;
|
||||
XButtonPressedEvent *event = &(dummy.xbutton);
|
||||
LWLIB_ID menu_id;
|
||||
Widget menu;
|
||||
|
||||
@ -1547,36 +1548,35 @@ create_and_show_popup_menu (FRAME_PTR f, widget_value *first_wv,
|
||||
popup_deactivate_callback,
|
||||
menu_highlight_callback);
|
||||
|
||||
dummy.type = ButtonPress;
|
||||
dummy.serial = 0;
|
||||
dummy.send_event = 0;
|
||||
dummy.display = FRAME_X_DISPLAY (f);
|
||||
dummy.time = CurrentTime;
|
||||
dummy.root = FRAME_X_DISPLAY_INFO (f)->root_window;
|
||||
dummy.window = dummy.root;
|
||||
dummy.subwindow = dummy.root;
|
||||
dummy.x = x;
|
||||
dummy.y = y;
|
||||
event->type = ButtonPress;
|
||||
event->serial = 0;
|
||||
event->send_event = 0;
|
||||
event->display = FRAME_X_DISPLAY (f);
|
||||
event->time = CurrentTime;
|
||||
event->root = FRAME_X_DISPLAY_INFO (f)->root_window;
|
||||
event->window = event->subwindow = event->root;
|
||||
event->x = x;
|
||||
event->y = y;
|
||||
|
||||
/* Adjust coordinates to be root-window-relative. */
|
||||
x += f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f);
|
||||
y += f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f);
|
||||
|
||||
dummy.x_root = x;
|
||||
dummy.y_root = y;
|
||||
event->x_root = x;
|
||||
event->y_root = y;
|
||||
|
||||
dummy.state = 0;
|
||||
dummy.button = 0;
|
||||
event->state = 0;
|
||||
event->button = 0;
|
||||
for (i = 0; i < 5; i++)
|
||||
if (FRAME_X_DISPLAY_INFO (f)->grabbed & (1 << i))
|
||||
dummy.button = i;
|
||||
event->button = i;
|
||||
|
||||
/* Don't allow any geometry request from the user. */
|
||||
XtSetArg (av[ac], XtNgeometry, 0); ac++;
|
||||
XtSetValues (menu, av, ac);
|
||||
|
||||
/* Display the menu. */
|
||||
lw_popup_menu (menu, (XEvent *) &dummy);
|
||||
lw_popup_menu (menu, &dummy);
|
||||
popup_activated_flag = 1;
|
||||
x_activate_timeout_atimer ();
|
||||
|
||||
|
@ -499,22 +499,23 @@ x_get_local_selection (Lisp_Object selection_symbol, Lisp_Object target_type, in
|
||||
static void
|
||||
x_decline_selection_request (struct input_event *event)
|
||||
{
|
||||
XSelectionEvent reply;
|
||||
XEvent reply_base;
|
||||
XSelectionEvent *reply = &(reply_base.xselection);
|
||||
|
||||
reply.type = SelectionNotify;
|
||||
reply.display = SELECTION_EVENT_DISPLAY (event);
|
||||
reply.requestor = SELECTION_EVENT_REQUESTOR (event);
|
||||
reply.selection = SELECTION_EVENT_SELECTION (event);
|
||||
reply.time = SELECTION_EVENT_TIME (event);
|
||||
reply.target = SELECTION_EVENT_TARGET (event);
|
||||
reply.property = None;
|
||||
reply->type = SelectionNotify;
|
||||
reply->display = SELECTION_EVENT_DISPLAY (event);
|
||||
reply->requestor = SELECTION_EVENT_REQUESTOR (event);
|
||||
reply->selection = SELECTION_EVENT_SELECTION (event);
|
||||
reply->time = SELECTION_EVENT_TIME (event);
|
||||
reply->target = SELECTION_EVENT_TARGET (event);
|
||||
reply->property = None;
|
||||
|
||||
/* The reason for the error may be that the receiver has
|
||||
died in the meantime. Handle that case. */
|
||||
BLOCK_INPUT;
|
||||
x_catch_errors (reply.display);
|
||||
XSendEvent (reply.display, reply.requestor, False, 0L, (XEvent *) &reply);
|
||||
XFlush (reply.display);
|
||||
x_catch_errors (reply->display);
|
||||
XSendEvent (reply->display, reply->requestor, False, 0L, &reply_base);
|
||||
XFlush (reply->display);
|
||||
x_uncatch_errors ();
|
||||
UNBLOCK_INPUT;
|
||||
}
|
||||
@ -617,7 +618,8 @@ static int x_reply_selection_request_cnt;
|
||||
static void
|
||||
x_reply_selection_request (struct input_event *event, int format, unsigned char *data, int size, Atom type)
|
||||
{
|
||||
XSelectionEvent reply;
|
||||
XEvent reply_base;
|
||||
XSelectionEvent *reply = &(reply_base.xselection);
|
||||
Display *display = SELECTION_EVENT_DISPLAY (event);
|
||||
Window window = SELECTION_EVENT_REQUESTOR (event);
|
||||
int bytes_remaining;
|
||||
@ -629,15 +631,15 @@ x_reply_selection_request (struct input_event *event, int format, unsigned char
|
||||
if (max_bytes > MAX_SELECTION_QUANTUM)
|
||||
max_bytes = MAX_SELECTION_QUANTUM;
|
||||
|
||||
reply.type = SelectionNotify;
|
||||
reply.display = display;
|
||||
reply.requestor = window;
|
||||
reply.selection = SELECTION_EVENT_SELECTION (event);
|
||||
reply.time = SELECTION_EVENT_TIME (event);
|
||||
reply.target = SELECTION_EVENT_TARGET (event);
|
||||
reply.property = SELECTION_EVENT_PROPERTY (event);
|
||||
if (reply.property == None)
|
||||
reply.property = reply.target;
|
||||
reply->type = SelectionNotify;
|
||||
reply->display = display;
|
||||
reply->requestor = window;
|
||||
reply->selection = SELECTION_EVENT_SELECTION (event);
|
||||
reply->time = SELECTION_EVENT_TIME (event);
|
||||
reply->target = SELECTION_EVENT_TARGET (event);
|
||||
reply->property = SELECTION_EVENT_PROPERTY (event);
|
||||
if (reply->property == None)
|
||||
reply->property = reply->target;
|
||||
|
||||
BLOCK_INPUT;
|
||||
/* The protected block contains wait_for_property_change, which can
|
||||
@ -648,8 +650,8 @@ x_reply_selection_request (struct input_event *event, int format, unsigned char
|
||||
|
||||
#ifdef TRACE_SELECTION
|
||||
{
|
||||
char *sel = XGetAtomName (display, reply.selection);
|
||||
char *tgt = XGetAtomName (display, reply.target);
|
||||
char *sel = XGetAtomName (display, reply->selection);
|
||||
char *tgt = XGetAtomName (display, reply->target);
|
||||
TRACE3 ("%s, target %s (%d)", sel, tgt, ++x_reply_selection_request_cnt);
|
||||
if (sel) XFree (sel);
|
||||
if (tgt) XFree (tgt);
|
||||
@ -664,10 +666,10 @@ x_reply_selection_request (struct input_event *event, int format, unsigned char
|
||||
{
|
||||
/* Send all the data at once, with minimal handshaking. */
|
||||
TRACE1 ("Sending all %d bytes", bytes_remaining);
|
||||
XChangeProperty (display, window, reply.property, type, format,
|
||||
XChangeProperty (display, window, reply->property, type, format,
|
||||
PropModeReplace, data, size);
|
||||
/* At this point, the selection was successfully stored; ack it. */
|
||||
XSendEvent (display, window, False, 0L, (XEvent *) &reply);
|
||||
XSendEvent (display, window, False, 0L, &reply_base);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -693,19 +695,19 @@ x_reply_selection_request (struct input_event *event, int format, unsigned char
|
||||
error ("Attempt to transfer an INCR to ourself!");
|
||||
|
||||
TRACE2 ("Start sending %d bytes incrementally (%s)",
|
||||
bytes_remaining, XGetAtomName (display, reply.property));
|
||||
wait_object = expect_property_change (display, window, reply.property,
|
||||
bytes_remaining, XGetAtomName (display, reply->property));
|
||||
wait_object = expect_property_change (display, window, reply->property,
|
||||
PropertyDelete);
|
||||
|
||||
TRACE1 ("Set %s to number of bytes to send",
|
||||
XGetAtomName (display, reply.property));
|
||||
XGetAtomName (display, reply->property));
|
||||
{
|
||||
/* XChangeProperty expects an array of long even if long is more than
|
||||
32 bits. */
|
||||
long value[1];
|
||||
|
||||
value[0] = bytes_remaining;
|
||||
XChangeProperty (display, window, reply.property, dpyinfo->Xatom_INCR,
|
||||
XChangeProperty (display, window, reply->property, dpyinfo->Xatom_INCR,
|
||||
32, PropModeReplace,
|
||||
(unsigned char *) value, 1);
|
||||
}
|
||||
@ -714,7 +716,7 @@ x_reply_selection_request (struct input_event *event, int format, unsigned char
|
||||
|
||||
/* Tell 'em the INCR data is there... */
|
||||
TRACE0 ("Send SelectionNotify event");
|
||||
XSendEvent (display, window, False, 0L, (XEvent *) &reply);
|
||||
XSendEvent (display, window, False, 0L, &reply_base);
|
||||
XFlush (display);
|
||||
|
||||
had_errors = x_had_errors_p (display);
|
||||
@ -725,7 +727,7 @@ x_reply_selection_request (struct input_event *event, int format, unsigned char
|
||||
if (! had_errors)
|
||||
{
|
||||
TRACE1 ("Waiting for ACK (deletion of %s)",
|
||||
XGetAtomName (display, reply.property));
|
||||
XGetAtomName (display, reply->property));
|
||||
wait_for_property_change (wait_object);
|
||||
}
|
||||
else
|
||||
@ -741,15 +743,15 @@ x_reply_selection_request (struct input_event *event, int format, unsigned char
|
||||
BLOCK_INPUT;
|
||||
|
||||
wait_object
|
||||
= expect_property_change (display, window, reply.property,
|
||||
= expect_property_change (display, window, reply->property,
|
||||
PropertyDelete);
|
||||
|
||||
TRACE1 ("Sending increment of %d elements", i);
|
||||
TRACE1 ("Set %s to increment data",
|
||||
XGetAtomName (display, reply.property));
|
||||
XGetAtomName (display, reply->property));
|
||||
|
||||
/* Append the next chunk of data to the property. */
|
||||
XChangeProperty (display, window, reply.property, type, format,
|
||||
XChangeProperty (display, window, reply->property, type, format,
|
||||
PropModeAppend, data, i);
|
||||
bytes_remaining -= i * format_bytes;
|
||||
if (format == 32)
|
||||
@ -766,7 +768,7 @@ x_reply_selection_request (struct input_event *event, int format, unsigned char
|
||||
/* Now wait for the requester to ack this chunk by deleting the
|
||||
property. This can run random lisp code or signal. */
|
||||
TRACE1 ("Waiting for increment ACK (deletion of %s)",
|
||||
XGetAtomName (display, reply.property));
|
||||
XGetAtomName (display, reply->property));
|
||||
wait_for_property_change (wait_object);
|
||||
}
|
||||
|
||||
@ -777,8 +779,8 @@ x_reply_selection_request (struct input_event *event, int format, unsigned char
|
||||
XSelectInput (display, window, 0L);
|
||||
|
||||
TRACE1 ("Set %s to a 0-length chunk to indicate EOF",
|
||||
XGetAtomName (display, reply.property));
|
||||
XChangeProperty (display, window, reply.property, type, format,
|
||||
XGetAtomName (display, reply->property));
|
||||
XChangeProperty (display, window, reply->property, type, format,
|
||||
PropModeReplace, data, 0);
|
||||
TRACE0 ("Done sending incrementally");
|
||||
}
|
||||
|
@ -4045,7 +4045,7 @@ x_window_to_scroll_bar (Display *display, Window window_id)
|
||||
return XSCROLL_BAR (bar);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@ -6008,7 +6008,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
|
||||
goto OTHER;
|
||||
#endif /* USE_X_TOOLKIT */
|
||||
{
|
||||
XSelectionClearEvent *eventp = (XSelectionClearEvent *) &event;
|
||||
XSelectionClearEvent *eventp = &(event.xselectionclear);
|
||||
|
||||
inev.ie.kind = SELECTION_CLEAR_EVENT;
|
||||
SELECTION_EVENT_DISPLAY (&inev.sie) = eventp->display;
|
||||
@ -6025,8 +6025,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
|
||||
goto OTHER;
|
||||
#endif /* USE_X_TOOLKIT */
|
||||
{
|
||||
XSelectionRequestEvent *eventp
|
||||
= (XSelectionRequestEvent *) &event;
|
||||
XSelectionRequestEvent *eventp = &(event.xselectionrequest);
|
||||
|
||||
inev.ie.kind = SELECTION_REQUEST_EVENT;
|
||||
SELECTION_EVENT_DISPLAY (&inev.sie) = eventp->display;
|
||||
|
Loading…
Reference in New Issue
Block a user