aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Müller <ulm@gentoo.org>2009-11-08 22:42:11 +0000
committerUlrich Müller <ulm@gentoo.org>2009-11-08 22:42:11 +0000
commitc60752a5d9238011be7b702054d628929de369f6 (patch)
treed52bf28e72cc941e7a147f825eb4fc7f9655943c
parentPatchsets for app-doc/elisp-manual. (diff)
downloademacs-patches-c60752a5d9238011be7b702054d628929de369f6.tar.gz
emacs-patches-c60752a5d9238011be7b702054d628929de369f6.tar.bz2
emacs-patches-c60752a5d9238011be7b702054d628929de369f6.zip
-rw-r--r--emacs/22.3/05_all_gtk-menu.patch159
-rw-r--r--emacs/23.1/01_all_handle-xz-suffix.patch16
-rw-r--r--emacs/23.1/02_all_backspace.patch54
-rw-r--r--emacs/23.1/03_all_gtk-menu.patch159
4 files changed, 388 insertions, 0 deletions
diff --git a/emacs/22.3/05_all_gtk-menu.patch b/emacs/22.3/05_all_gtk-menu.patch
new file mode 100644
index 0000000..efe69df
--- /dev/null
+++ b/emacs/22.3/05_all_gtk-menu.patch
@@ -0,0 +1,159 @@
+http://bugs.gentoo.org/292007
+http://emacsbugs.donarmstrong.com/4122
+Fix updating of menus with GTK+ 2.18
+Patch by Jan Djärv <jan.h.d@swipnet.se>, backported from upstream CVS
+
+--- emacs-22.3-orig/src/xfns.c
++++ emacs-22.3/src/xfns.c
+@@ -374,10 +374,7 @@
+ #ifdef USE_GTK
+ GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc);
+ if (gwdesc != 0
+- && (gwdesc == x->widget
+- || gwdesc == x->edit_widget
+- || gwdesc == x->vbox_widget
+- || gwdesc == x->menubar_widget))
++ && gtk_widget_get_toplevel (gwdesc) == x->widget)
+ found = f;
+ #else
+ if (wdesc == XtWindow (x->widget)
+@@ -398,54 +395,6 @@
+ return found;
+ }
+
+-/* Likewise, but exclude the menu bar widget. */
+-
+-struct frame *
+-x_non_menubar_window_to_frame (dpyinfo, wdesc)
+- struct x_display_info *dpyinfo;
+- int wdesc;
+-{
+- Lisp_Object tail, frame;
+- struct frame *f;
+- struct x_output *x;
+-
+- if (wdesc == None) return 0;
+-
+- for (tail = Vframe_list; GC_CONSP (tail); tail = XCDR (tail))
+- {
+- frame = XCAR (tail);
+- if (!GC_FRAMEP (frame))
+- continue;
+- f = XFRAME (frame);
+- if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo)
+- continue;
+- x = f->output_data.x;
+- /* This frame matches if the window is any of its widgets. */
+- if (x->hourglass_window == wdesc)
+- return f;
+- else if (x->widget)
+- {
+-#ifdef USE_GTK
+- GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc);
+- if (gwdesc != 0
+- && (gwdesc == x->widget
+- || gwdesc == x->edit_widget
+- || gwdesc == x->vbox_widget))
+- return f;
+-#else
+- if (wdesc == XtWindow (x->widget)
+- || wdesc == XtWindow (x->column_widget)
+- || wdesc == XtWindow (x->edit_widget))
+- return f;
+-#endif
+- }
+- else if (FRAME_X_WINDOW (f) == wdesc)
+- /* A tooltip frame. */
+- return f;
+- }
+- return 0;
+-}
+-
+ /* Likewise, but consider only the menu bar widget. */
+
+ struct frame *
+@@ -473,15 +422,14 @@
+ if (x->menubar_widget)
+ {
+ GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc);
+- int found = 0;
+
+- BLOCK_INPUT;
++ /* This gives false positives, but the rectangle check in xterm.c
++ where this is called takes care of that. */
+ if (gwdesc != 0
+ && (gwdesc == x->menubar_widget
+- || gtk_widget_get_parent (gwdesc) == x->menubar_widget))
+- found = 1;
+- UNBLOCK_INPUT;
+- if (found) return f;
++ || gtk_widget_is_ancestor (x->menubar_widget, gwdesc)
++ || gtk_widget_is_ancestor (gwdesc, x->menubar_widget)))
++ return f;
+ }
+ #else
+ if (x->menubar_widget
+--- emacs-22.3-orig/src/xterm.c
++++ emacs-22.3/src/xterm.c
+@@ -110,8 +110,6 @@
+ #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
+
+ extern void free_frame_menubar P_ ((struct frame *));
+-extern struct frame *x_menubar_window_to_frame P_ ((struct x_display_info *,
+- int));
+ #endif
+
+ #ifdef USE_X_TOOLKIT
+@@ -144,11 +142,6 @@
+
+ #endif /* USE_X_TOOLKIT */
+
+-#if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK)
+-#define x_any_window_to_frame x_window_to_frame
+-#define x_top_window_to_frame x_window_to_frame
+-#endif
+-
+ #ifdef USE_X_TOOLKIT
+ #include "widget.h"
+ #ifndef XtNinitialState
+@@ -3789,6 +3782,14 @@
+ if (child == None || child == win)
+ break;
+
++#ifdef USE_GTK
++ /* We don't wan't to know the innermost window. We
++ want the edit window. For non-Gtk+ the innermost
++ window is the edit window. For Gtk+ it might not
++ be. It might be the tool bar for example. */
++ if (x_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win))
++ break;
++#endif
+ win = child;
+ parent_x = win_x;
+ parent_y = win_y;
+@@ -3805,8 +3806,14 @@
+ parent_{x,y} are invalid, but that's okay, because we'll
+ never use them in that case.) */
+
++#ifdef USE_GTK
++ /* We don't wan't to know the innermost window. We
++ want the edit window. */
++ f1 = x_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win);
++#else
+ /* Is win one of our frames? */
+ f1 = x_any_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win);
++#endif
+
+ #ifdef USE_X_TOOLKIT
+ /* If we end up with the menu bar window, say it's not
+--- emacs-22.3-orig/src/xterm.h
++++ emacs-22.3/src/xterm.h
+@@ -414,7 +414,7 @@
+
+ #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
+ extern struct frame *x_any_window_to_frame P_ ((struct x_display_info *, int));
+-extern struct frame *x_non_menubar_window_to_frame P_ ((struct x_display_info *, int));
++extern struct frame *x_menubar_window_to_frame P_ ((struct x_display_info *, int));
+ extern struct frame *x_top_window_to_frame P_ ((struct x_display_info *, int));
+ #endif
+
diff --git a/emacs/23.1/01_all_handle-xz-suffix.patch b/emacs/23.1/01_all_handle-xz-suffix.patch
new file mode 100644
index 0000000..9345cea
--- /dev/null
+++ b/emacs/23.1/01_all_handle-xz-suffix.patch
@@ -0,0 +1,16 @@
+Automatically handle .xz suffix (XZ-compressed files)
+From Jim Meyering <meyering@redhat.com> on emacs-devel
+
+--- a/lisp/jka-cmpr-hook.el
++++ b/lisp/jka-cmpr-hook.el
+@@ -219,6 +219,10 @@ options through Custom does this automatically."
+ "compressing" "gzip" ("-c" "-q")
+ "uncompressing" "gzip" ("-c" "-q" "-d")
+ t t "\037\213"]
++ ["\\.xz\\(~\\|\\.~[0-9]+~\\)?\\'"
++ "XZ compressing" "xz" ("-c" "-q")
++ "XZ uncompressing" "xz" ("-c" "-q" "-d")
++ t t "\3757zXZ\0"]
+ ;; dzip is gzip with random access. Its compression program can't
+ ;; read/write stdin/out, so .dz files can only be viewed without
+ ;; saving, having their contents decompressed with gzip.
diff --git a/emacs/23.1/02_all_backspace.patch b/emacs/23.1/02_all_backspace.patch
new file mode 100644
index 0000000..bc547af
--- /dev/null
+++ b/emacs/23.1/02_all_backspace.patch
@@ -0,0 +1,54 @@
+2009-10-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (normal-erase-is-backspace-mode): Use input-decode-map
+ rather than fiddling with global-map bindings, since it should only
+ affect per-terminal settings.
+ See http://bugs.gentoo.org/show_bug.cgi?id=289709.
+
+--- emacs-23.1-orig/lisp/simple.el
++++ emacs-23.1/lisp/simple.el
+@@ -6269,31 +6269,27 @@
+ (let* ((bindings
+ `(([M-delete] [M-backspace])
+ ([C-M-delete] [C-M-backspace])
+- (,esc-map
+- [C-delete] [C-backspace])))
++ ([?\e C-delete] [?\e C-backspace])))
+ (old-state (lookup-key local-function-key-map [delete])))
+
+ (if enabled
+ (progn
+ (define-key local-function-key-map [delete] [?\C-d])
+ (define-key local-function-key-map [kp-delete] [?\C-d])
+- (define-key local-function-key-map [backspace] [?\C-?]))
++ (define-key local-function-key-map [backspace] [?\C-?])
++ (dolist (b bindings)
++ ;; Not sure if input-decode-map is really right, but
++ ;; keyboard-translate-table (used below) only works
++ ;; for integer events, and key-translation-table is
++ ;; global (like the global-map, used earlier).
++ (define-key input-decode-map (car b) nil)
++ (define-key input-decode-map (cadr b) nil)))
+ (define-key local-function-key-map [delete] [?\C-?])
+ (define-key local-function-key-map [kp-delete] [?\C-?])
+- (define-key local-function-key-map [backspace] [?\C-?]))
+-
+- ;; Maybe swap bindings of C-delete and C-backspace, etc.
+- (unless (equal old-state (lookup-key local-function-key-map [delete]))
+- (dolist (binding bindings)
+- (let ((map global-map))
+- (when (keymapp (car binding))
+- (setq map (car binding) binding (cdr binding)))
+- (let* ((key1 (nth 0 binding))
+- (key2 (nth 1 binding))
+- (binding1 (lookup-key map key1))
+- (binding2 (lookup-key map key2)))
+- (define-key map key1 binding2)
+- (define-key map key2 binding1)))))))
++ (define-key local-function-key-map [backspace] [?\C-?])
++ (dolist (b bindings)
++ (define-key input-decode-map (car b) (cadr b))
++ (define-key input-decode-map (cadr b) (car b))))))
+ (t
+ (if enabled
+ (progn
diff --git a/emacs/23.1/03_all_gtk-menu.patch b/emacs/23.1/03_all_gtk-menu.patch
new file mode 100644
index 0000000..3598bbd
--- /dev/null
+++ b/emacs/23.1/03_all_gtk-menu.patch
@@ -0,0 +1,159 @@
+http://bugs.gentoo.org/292007
+http://emacsbugs.donarmstrong.com/4122
+Fix updating of menus with GTK+ 2.18
+Patch by Jan Djärv <jan.h.d@swipnet.se>, backported from upstream CVS
+
+--- emacs-23.1-orig/src/xfns.c
++++ emacs-23.1/src/xfns.c
+@@ -374,10 +374,7 @@
+ #ifdef USE_GTK
+ GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc);
+ if (gwdesc != 0
+- && (gwdesc == x->widget
+- || gwdesc == x->edit_widget
+- || gwdesc == x->vbox_widget
+- || gwdesc == x->menubar_widget))
++ && gtk_widget_get_toplevel (gwdesc) == x->widget)
+ found = f;
+ #else
+ if (wdesc == XtWindow (x->widget)
+@@ -398,54 +395,6 @@
+ return found;
+ }
+
+-/* Likewise, but exclude the menu bar widget. */
+-
+-struct frame *
+-x_non_menubar_window_to_frame (dpyinfo, wdesc)
+- struct x_display_info *dpyinfo;
+- int wdesc;
+-{
+- Lisp_Object tail, frame;
+- struct frame *f;
+- struct x_output *x;
+-
+- if (wdesc == None) return 0;
+-
+- for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
+- {
+- frame = XCAR (tail);
+- if (!FRAMEP (frame))
+- continue;
+- f = XFRAME (frame);
+- if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo)
+- continue;
+- x = f->output_data.x;
+- /* This frame matches if the window is any of its widgets. */
+- if (x->hourglass_window == wdesc)
+- return f;
+- else if (x->widget)
+- {
+-#ifdef USE_GTK
+- GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc);
+- if (gwdesc != 0
+- && (gwdesc == x->widget
+- || gwdesc == x->edit_widget
+- || gwdesc == x->vbox_widget))
+- return f;
+-#else
+- if (wdesc == XtWindow (x->widget)
+- || wdesc == XtWindow (x->column_widget)
+- || wdesc == XtWindow (x->edit_widget))
+- return f;
+-#endif
+- }
+- else if (FRAME_X_WINDOW (f) == wdesc)
+- /* A tooltip frame. */
+- return f;
+- }
+- return 0;
+-}
+-
+ /* Likewise, but consider only the menu bar widget. */
+
+ struct frame *
+@@ -473,15 +422,14 @@
+ if (x->menubar_widget)
+ {
+ GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc);
+- int found = 0;
+
+- BLOCK_INPUT;
++ /* This gives false positives, but the rectangle check in xterm.c
++ where this is called takes care of that. */
+ if (gwdesc != 0
+ && (gwdesc == x->menubar_widget
+- || gtk_widget_get_parent (gwdesc) == x->menubar_widget))
+- found = 1;
+- UNBLOCK_INPUT;
+- if (found) return f;
++ || gtk_widget_is_ancestor (x->menubar_widget, gwdesc)
++ || gtk_widget_is_ancestor (gwdesc, x->menubar_widget)))
++ return f;
+ }
+ #else
+ if (x->menubar_widget
+--- emacs-23.1-orig/src/xterm.c
++++ emacs-23.1/src/xterm.c
+@@ -109,8 +109,6 @@
+ #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
+
+ extern void free_frame_menubar P_ ((struct frame *));
+-extern struct frame *x_menubar_window_to_frame P_ ((struct x_display_info *,
+- int));
+ #endif
+
+ #ifdef USE_X_TOOLKIT
+@@ -143,11 +141,6 @@
+
+ #endif /* USE_X_TOOLKIT */
+
+-#if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK)
+-#define x_any_window_to_frame x_window_to_frame
+-#define x_top_window_to_frame x_window_to_frame
+-#endif
+-
+ #ifdef USE_X_TOOLKIT
+ #include "widget.h"
+ #ifndef XtNinitialState
+@@ -3916,6 +3909,14 @@
+ if (child == None || child == win)
+ break;
+
++#ifdef USE_GTK
++ /* We don't wan't to know the innermost window. We
++ want the edit window. For non-Gtk+ the innermost
++ window is the edit window. For Gtk+ it might not
++ be. It might be the tool bar for example. */
++ if (x_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win))
++ break;
++#endif
+ win = child;
+ parent_x = win_x;
+ parent_y = win_y;
+@@ -3932,8 +3933,14 @@
+ parent_{x,y} are invalid, but that's okay, because we'll
+ never use them in that case.) */
+
++#ifdef USE_GTK
++ /* We don't wan't to know the innermost window. We
++ want the edit window. */
++ f1 = x_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win);
++#else
+ /* Is win one of our frames? */
+ f1 = x_any_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win);
++#endif
+
+ #ifdef USE_X_TOOLKIT
+ /* If we end up with the menu bar window, say it's not
+--- emacs-23.1-orig/src/xterm.h
++++ emacs-23.1/src/xterm.h
+@@ -374,7 +374,7 @@
+
+ #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
+ extern struct frame *x_any_window_to_frame P_ ((struct x_display_info *, int));
+-extern struct frame *x_non_menubar_window_to_frame P_ ((struct x_display_info *, int));
++extern struct frame *x_menubar_window_to_frame P_ ((struct x_display_info *, int));
+ extern struct frame *x_top_window_to_frame P_ ((struct x_display_info *, int));
+ #endif
+