unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: mouse cursor on MS-Windows. (revisited)
@ 2002-12-03 13:43 David PONCE
  0 siblings, 0 replies; 5+ messages in thread
From: David PONCE @ 2002-12-03 13:43 UTC (permalink / raw)


[-- Attachment #1: Type: text/plain, Size: 2238 bytes --]

Hi All,

I submit you the attached patch to NT Emacs (HEAD) to display
different cursors, depending on mouse position.

This is a revisited patch from the original version posted by
"KOBAYASHI Yasuhiro" <kobayays@otsukakj.co.jp>.  See message:
<http://mail.gnu.org/pipermail/emacs-devel/2002-September/012390.html>

The main differences are:

- Cursors are loaded only at frame creation in Fx_create_frame instead
  of each time the cursor change.  The Cursor type is actually a
  cursor handle instead of a resource identifier.  I think it is more
  consistent.

- Cursors are loaded via the new function `w32_load_cursor' that try
  first to load from application resources (defined in emacs.rc), then
  from global shared predefined one.  Thus it is possible to use
  cursors specifically built for Emacs ;-) More important that allows
  to provide a "hand" cursor for Windows 95 and NT for which a
  predefined one does not exists.  I added a sample hand.cur file in
  the nt/icons directory (maybe using a nt/cursor directory would be
  better?).  Notice that I got this hand.cur from winhelp.exe.
  Probably, for license reason, a specific version will be needed?

The patch includes some minor fixes too.  You will find a change log
at end.

Hope it helps.

Sincerely,
David

------- Change log
	
	* src/w32term.c (w32_encode_char): For DIM=1 charset, set
	ccl->reg[2] to -1 before calling ccl_driver. (Sync. with xterm.c
	x_encode_char change by Kenichi Handa <handa@m17n.org> on
	2002-09-30.
	(w32_draw_relief_rect): Declare all args.
	(w32_define_cursor): New.
	(note_mode_line_highlight)
	(note_mouse_highlight)
	(show_mouse_face)
	(w32_initialize_display_info): Handle mouse cursor change.

	* src/w32term.h (w32_output): Added `hand_cursor' member.
	(WM_EMACS_SETCURSOR): New message.

	* src/w32fns.c (Vx_hand_shape): New.
	(w32_load_cursor): New.
	(w32_init_class): Use it.
	(w32_wnd_proc): Handle mouse cursor change message.
	(Fx_create_frame): Initialize frame cursors.
	(x_put_x_image): Declare all args.

	* src/w32menu.c (digest_single_submenu): Declare all args.

	* nt/emacs.rc (32649): Declare hand cursor resource.

	* nt/icons/hand.cur: Hand cursor.

[-- Attachment #2: hand.cur --]
[-- Type: image/x-icon, Size: 376 bytes --]

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: w32cursor.patch --]
[-- Type: text/x-patch; name="w32cursor.patch", Size: 14769 bytes --]

*** src/w32term.c.orig	Sat Nov 16 14:11:32 2002
--- src/w32term.c	Sat Nov 16 15:26:23 2002
***************
*** 189,194 ****
--- 189,195 ----
  extern void free_frame_menubar ();
  
  extern int w32_codepage_for_font (char *fontname);
+ extern Cursor w32_load_cursor (LPCTSTR name);
  
  extern glyph_metric *w32_BDF_TextMetric(bdffont *fontp,
  					unsigned char *text, int dim);
***************
*** 367,372 ****
--- 368,374 ----
  				 enum draw_glyphs_face));
  static int cursor_in_mouse_face_p P_ ((struct window *));
  static int clear_mouse_face P_ ((struct w32_display_info *));
+ void w32_define_cursor P_ ((Window, Cursor));
  
  void x_lower_frame P_ ((struct frame *));
  void x_scroll_bar_clear P_ ((struct frame *));
***************
*** 1426,1431 ****
--- 1428,1434 ----
  	{
  	  ccl->reg[0] = charset;
  	  ccl->reg[1] = BYTE2 (*char2b);
+ 	  ccl->reg[2] = -1;
  	}
        else
  	{
***************
*** 3724,3730 ****
  w32_draw_relief_rect (f, left_x, top_y, right_x, bottom_y, width,
                        raised_p, left_p, right_p, clip_rect)
       struct frame *f;
!      int left_x, top_y, right_x, bottom_y, left_p, right_p, raised_p;
       RECT *clip_rect;
  {
    int i;
--- 3727,3733 ----
  w32_draw_relief_rect (f, left_x, top_y, right_x, bottom_y, width,
                        raised_p, left_p, right_p, clip_rect)
       struct frame *f;
!      int left_x, top_y, right_x, bottom_y, width, left_p, right_p, raised_p;
       RECT *clip_rect;
  {
    int i;
***************
*** 6565,6573 ****
  	    }
  	}
      }
! #if 0 /* TODO: mouse cursor */
!   XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), cursor);
! #endif
  }
  
  
--- 6568,6574 ----
  	    }
  	}
      }
!   w32_define_cursor (FRAME_W32_WINDOW (f), cursor);
  }
  
  
***************
*** 6585,6590 ****
--- 6586,6592 ----
    int portion;
    Lisp_Object window;
    struct window *w;
+   Cursor cursor = 0;
    struct buffer *b;
  
    /* When a menu is active, don't highlight because this looks odd. */
***************
*** 6640,6651 ****
        note_mode_line_highlight (w, x, portion == 1);
        return;
      }
! #if 0 /* TODO: mouse cursor */
    if (portion == 2)
!     cursor = f->output_data.x->horizontal_drag_cursor;
    else
!     cursor = f->output_data.x->text_cursor;
! #endif
    /* Are we in a window whose display is up to date?
       And verify the buffer's text has not changed.  */
    b = XBUFFER (w->buffer);
--- 6642,6653 ----
        note_mode_line_highlight (w, x, portion == 1);
        return;
      }
! 
    if (portion == 2)
!     cursor = f->output_data.w32->horizontal_drag_cursor;
    else
!     cursor = f->output_data.w32->text_cursor;
! 
    /* Are we in a window whose display is up to date?
       And verify the buffer's text has not changed.  */
    b = XBUFFER (w->buffer);
***************
*** 6673,6679 ****
  	  || !MATRIX_ROW (w->current_matrix, vpos)->displays_text_p)
  	{
  	  clear_mouse_face (dpyinfo);
! 	  /* TODO: mouse cursor */
  	  goto set_cursor;
  	}
  
--- 6675,6681 ----
  	  || !MATRIX_ROW (w->current_matrix, vpos)->displays_text_p)
  	{
  	  clear_mouse_face (dpyinfo);
! 	  cursor = f->output_data.w32->nontext_cursor;
  	  goto set_cursor;
  	}
  
***************
*** 6728,6735 ****
  			 || hpos < dpyinfo->mouse_face_end_col
  			 || dpyinfo->mouse_face_past_end));
  
!       /* TODO: if (same_region)
! 	 mouse cursor */
  
        /* Check mouse-face highlighting.  */
        if (! same_region
--- 6730,6737 ----
  			 || hpos < dpyinfo->mouse_face_end_col
  			 || dpyinfo->mouse_face_past_end));
  
!       if (same_region)
! 	cursor = 0;
  
        /* Check mouse-face highlighting.  */
        if (! same_region
***************
*** 6759,6766 ****
  	  dpyinfo->mouse_face_overlay = overlay;
  
  	  /* Clear the display of the old active region, if any.  */
! 	  clear_mouse_face (dpyinfo);
! 	  /* TODO: mouse cursor changes.  */
  
  	  /* If no overlay applies, get a text property.  */
  	  if (NILP (overlay))
--- 6761,6768 ----
  	  dpyinfo->mouse_face_overlay = overlay;
  
  	  /* Clear the display of the old active region, if any.  */
! 	  if (clear_mouse_face (dpyinfo))
! 	    cursor = 0;
  
  	  /* If no overlay applies, get a text property.  */
  	  if (NILP (overlay))
***************
*** 6798,6804 ****
  
  	      /* Display it as active.  */
  	      show_mouse_face (dpyinfo, DRAW_MOUSE_FACE);
! 	      /* TODO: mouse cursor changes.  */
  	    }
  	  /* Handle the text property case.  */
  	  else if (! NILP (mouse_face) && BUFFERP (object))
--- 6800,6806 ----
  
  	      /* Display it as active.  */
  	      show_mouse_face (dpyinfo, DRAW_MOUSE_FACE);
! 	      cursor = 0;
  	    }
  	  /* Handle the text property case.  */
  	  else if (! NILP (mouse_face) && BUFFERP (object))
***************
*** 6841,6847 ****
  
  	      /* Display it as active.  */
  	      show_mouse_face (dpyinfo, DRAW_MOUSE_FACE);
! 	      /* TODO: mouse cursor changes.  */
  	    }
  	  else if (!NILP (mouse_face) && STRINGP (object))
  	    {
--- 6843,6849 ----
  
  	      /* Display it as active.  */
  	      show_mouse_face (dpyinfo, DRAW_MOUSE_FACE);
! 	      cursor = 0;
  	    }
  	  else if (!NILP (mouse_face) && STRINGP (object))
  	    {
***************
*** 6873,6879 ****
  		= face_at_string_position (w, object, pos, 0, 0, 0, &ignore,
  					   glyph->face_id, 1);
  	      show_mouse_face (dpyinfo, DRAW_MOUSE_FACE);
! 	      /* TODO: mouse cursor changes.  */
  	    }
  	  else if (STRINGP (object) && NILP (mouse_face))
  	    {
--- 6875,6881 ----
  		= face_at_string_position (w, object, pos, 0, 0, 0, &ignore,
  					   glyph->face_id, 1);
  	      show_mouse_face (dpyinfo, DRAW_MOUSE_FACE);
! 	      cursor = 0;
  	    }
  	  else if (STRINGP (object) && NILP (mouse_face))
  	    {
***************
*** 6921,6927 ****
  
  		  /* Display it as active.  */
  		  show_mouse_face (dpyinfo, DRAW_MOUSE_FACE);
! 		  /* TODO: mouse cursor changes.  */
  		}
  	    }
  	}
--- 6923,6929 ----
  
  		  /* Display it as active.  */
  		  show_mouse_face (dpyinfo, DRAW_MOUSE_FACE);
! 		  cursor = 0;
  		}
  	    }
  	}
***************
*** 7001,7008 ****
      }
  
   set_cursor:
!   /* TODO: mouse cursor changes. */
!   ;
  }
  
  static void
--- 7003,7010 ----
      }
  
   set_cursor:
!   if (cursor)
!     w32_define_cursor (FRAME_W32_WINDOW (f), cursor);
  }
  
  static void
***************
*** 7015,7020 ****
--- 7017,7029 ----
  			  HIWORD (last_mouse_motion_event.lParam));
  }
  
+ void
+ w32_define_cursor (window, cursor)
+      Window window;
+      Cursor cursor;
+ {
+   PostMessage (window, WM_EMACS_SETCURSOR, (WPARAM) cursor, 0);
+ }
  
  \f
  /***********************************************************************
***************
*** 7555,7572 ****
  			  w->phys_cursor.x, w->phys_cursor.y);
      }
  
- #if 0 /* TODO: mouse cursor */
    /* Change the mouse cursor.  */
    if (draw == DRAW_NORMAL_TEXT)
!     XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
! 		   f->output_data.x->text_cursor);
    else if (draw == DRAW_MOUSE_FACE)
!     XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
! 		   f->output_data.x->cross_cursor);
    else
!     XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
! 		   f->output_data.x->nontext_cursor);
! #endif
  }
  
  /* Clear out the mouse-highlighted active region.
--- 7564,7580 ----
  			  w->phys_cursor.x, w->phys_cursor.y);
      }
  
    /* Change the mouse cursor.  */
    if (draw == DRAW_NORMAL_TEXT)
!     w32_define_cursor (FRAME_W32_WINDOW (f),
! 		       f->output_data.w32->text_cursor);
    else if (draw == DRAW_MOUSE_FACE)
!     w32_define_cursor (FRAME_W32_WINDOW (f),
! 		       f->output_data.w32->hand_cursor);
    else
!     w32_define_cursor (FRAME_W32_WINDOW (f),
! 		       f->output_data.w32->nontext_cursor);
! 
  }
  
  /* Clear out the mouse-highlighted active region.
***************
*** 11044,11049 ****
--- 11052,11059 ----
    dpyinfo->mouse_face_window = Qnil;
    dpyinfo->mouse_face_overlay = Qnil;
    dpyinfo->mouse_face_hidden = 0;
+ 
+   dpyinfo->vertical_scroll_bar_cursor = w32_load_cursor (IDC_ARROW);
    /* TODO: dpyinfo->gray */
  
  }
*** src/w32term.h.orig	Fri Aug 30 15:20:36 2002
--- src/w32term.h	Tue Dec  3 13:38:19 2002
***************
*** 350,355 ****
--- 350,356 ----
    Cursor cross_cursor;
    Cursor hourglass_cursor;
    Cursor horizontal_drag_cursor;
+   Cursor hand_cursor;
  
    /* Window whose cursor is hourglass_cursor.  This window is
       temporarily mapped to display an hourglass cursor.  */
***************
*** 735,741 ****
  #define WM_EMACS_DESTROY_CARET         (WM_EMACS_START + 16)
  #define WM_EMACS_SHOW_CARET            (WM_EMACS_START + 17)
  #define WM_EMACS_HIDE_CARET            (WM_EMACS_START + 18)
! #define WM_EMACS_END                   (WM_EMACS_START + 19)
  
  #define WND_FONTWIDTH_INDEX    (0) 
  #define WND_LINEHEIGHT_INDEX   (4) 
--- 736,743 ----
  #define WM_EMACS_DESTROY_CARET         (WM_EMACS_START + 16)
  #define WM_EMACS_SHOW_CARET            (WM_EMACS_START + 17)
  #define WM_EMACS_HIDE_CARET            (WM_EMACS_START + 18)
! #define WM_EMACS_SETCURSOR             (WM_EMACS_START + 19)
! #define WM_EMACS_END                   (WM_EMACS_START + 20)
  
  #define WND_FONTWIDTH_INDEX    (0) 
  #define WND_LINEHEIGHT_INDEX   (4) 
*** src/w32fns.c.orig	Thu Nov 21 09:01:42 2002
--- src/w32fns.c	Thu Nov 21 09:47:41 2002
***************
*** 152,158 ****
     over text or in the modeline.  */
  
  Lisp_Object Vx_pointer_shape, Vx_nontext_pointer_shape, Vx_mode_pointer_shape;
! Lisp_Object Vx_hourglass_pointer_shape, Vx_window_horizontal_drag_shape;
  
  /* The shape when over mouse-sensitive text.  */
  
--- 152,158 ----
     over text or in the modeline.  */
  
  Lisp_Object Vx_pointer_shape, Vx_nontext_pointer_shape, Vx_mode_pointer_shape;
! Lisp_Object Vx_hourglass_pointer_shape, Vx_window_horizontal_drag_shape, Vx_hand_shape;
  
  /* The shape when over mouse-sensitive text.  */
  
***************
*** 2193,2198 ****
--- 2193,2199 ----
    else
      horizontal_drag_cursor
        = XCreateFontCursor (FRAME_X_DISPLAY (f), XC_sb_h_double_arrow);
+   /* TODO: hand_cursor */
  
    /* Check and report errors with the above calls.  */
    x_check_errors (FRAME_W32_DISPLAY (f), "can't set cursor shape: %s");
***************
*** 2221,2226 ****
--- 2222,2228 ----
                      &fore_color, &back_color);
      XRecolorCursor (FRAME_W32_DISPLAY (f), hourglass_cursor,
                      &fore_color, &back_color);
+     /* TODO: hand_cursor */
    }
  
    if (FRAME_W32_WINDOW (f) != 0)
***************
*** 2249,2254 ****
--- 2251,2257 ----
        && f->output_data.w32->cross_cursor != 0)
      XFreeCursor (FRAME_W32_DISPLAY (f), f->output_data.w32->cross_cursor);
    f->output_data.w32->cross_cursor = cross_cursor;
+     /* TODO: hand_cursor */
  
    XFlush (FRAME_W32_DISPLAY (f));
    UNBLOCK_INPUT;
***************
*** 3417,3422 ****
--- 3420,3440 ----
  }
  
  \f
+ Cursor
+ w32_load_cursor (LPCTSTR name)
+ {
+   /* Try first to load cursor from application resource.  */
+   Cursor cursor = LoadImage ((HINSTANCE) GetModuleHandle(NULL),
+ 			     name, IMAGE_CURSOR, 0, 0,
+ 			     LR_DEFAULTCOLOR | LR_DEFAULTSIZE | LR_SHARED);
+   if (!cursor)
+     {
+       /* Then try to load a shared predefined cursor.  */
+       cursor = LoadImage (NULL, name, IMAGE_CURSOR, 0, 0,
+ 			  LR_DEFAULTCOLOR | LR_DEFAULTSIZE | LR_SHARED);
+     }
+   return cursor;
+ }
  
  extern LRESULT CALLBACK w32_wnd_proc ();
  
***************
*** 3432,3438 ****
    wc.cbWndExtra = WND_EXTRA_BYTES;
    wc.hInstance = hinst;
    wc.hIcon = LoadIcon (hinst, EMACS_CLASS);
!   wc.hCursor = LoadCursor (NULL, IDC_ARROW);
    wc.hbrBackground = NULL; /* GetStockObject (WHITE_BRUSH);  */
    wc.lpszMenuName = NULL;
    wc.lpszClassName = EMACS_CLASS;
--- 3450,3456 ----
    wc.cbWndExtra = WND_EXTRA_BYTES;
    wc.hInstance = hinst;
    wc.hIcon = LoadIcon (hinst, EMACS_CLASS);
!   wc.hCursor = w32_load_cursor (IDC_ARROW);
    wc.hbrBackground = NULL; /* GetStockObject (WHITE_BRUSH);  */
    wc.lpszMenuName = NULL;
    wc.lpszClassName = EMACS_CLASS;
***************
*** 5084,5089 ****
--- 5102,5121 ----
        ((LPMINMAXINFO) lParam)->ptMaxTrackSize.y = 32767;
        return 0;
  
+     case WM_SETCURSOR:
+       if (LOWORD (lParam) == HTCLIENT)
+ 	return 0;
+ 
+       goto dflt;
+       
+     case WM_EMACS_SETCURSOR:
+       {
+ 	Cursor cursor = (Cursor) wParam;
+ 	if (cursor)
+ 	  SetCursor (cursor);
+ 	return 0;
+       }
+       
      case WM_EMACS_CREATESCROLLBAR:
        return (LRESULT) w32_createscrollbar ((struct frame *) wParam,
  					    (struct scroll_bar *) lParam);
***************
*** 5674,5679 ****
--- 5706,5719 ----
    f->output_data.w32->dwStyle = WS_OVERLAPPEDWINDOW;
    f->output_data.w32->parent_desc = FRAME_W32_DISPLAY_INFO (f)->root_window;
  
+   f->output_data.w32->text_cursor = w32_load_cursor (IDC_IBEAM);
+   f->output_data.w32->nontext_cursor = w32_load_cursor (IDC_ARROW);
+   f->output_data.w32->modeline_cursor = w32_load_cursor (IDC_ARROW);
+   f->output_data.w32->cross_cursor = w32_load_cursor (IDC_CROSS);
+   f->output_data.w32->hourglass_cursor = w32_load_cursor (IDC_WAIT);
+   f->output_data.w32->horizontal_drag_cursor = w32_load_cursor (IDC_SIZEWE);
+   f->output_data.w32->hand_cursor = w32_load_cursor (IDC_HAND);
+ 
    /* Add the tool-bar height to the initial frame height so that the
       user gets a text display area of the size he specified with -g or
       via .Xdefaults.  Later changes of the tool-bar height don't
***************
*** 9441,9446 ****
--- 9481,9487 ----
       struct frame *f;
       XImage *ximg;
       Pixmap pixmap;
+      int width, height;
  {
  #if 0  /* I don't think this is necessary looking at where it is used.  */
    HDC hdc = get_frame_dc (f);
*** src/w32menu.c.orig	Mon Nov 18 09:23:57 2002
--- src/w32menu.c	Mon Nov 18 09:55:53 2002
***************
*** 1175,1181 ****
  
  static widget_value *
  digest_single_submenu (start, end, top_level_items)
!      int start, end;
  {
    widget_value *wv, *prev_wv, *save_wv, *first_wv;
    int i;
--- 1175,1181 ----
  
  static widget_value *
  digest_single_submenu (start, end, top_level_items)
!      int start, end, top_level_items;
  {
    widget_value *wv, *prev_wv, *save_wv, *first_wv;
    int i;
*** nt/emacs.rc.orig	Tue Sep  3 09:50:51 2002
--- nt/emacs.rc	Thu Sep 12 16:50:28 2002
***************
*** 1,4 ****
! Emacs ICON    icons\gnu2a32t.ico
  
  #ifndef VS_VERSION_INFO
  #define VS_VERSION_INFO 1
--- 1,5 ----
! Emacs ICON   icons\gnu2a32t.ico
! 32649 CURSOR icons\hand.cur
  
  #ifndef VS_VERSION_INFO
  #define VS_VERSION_INFO 1

-----------------------------41184676334--

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: mouse cursor on MS-Windows. (revisited)
       [not found] <3DEB71B90009B5B2@mel-rta6.wanadoo.fr>
@ 2002-12-04 11:07 ` Richard Stallman
  0 siblings, 0 replies; 5+ messages in thread
From: Richard Stallman @ 2002-12-04 11:07 UTC (permalink / raw)
  Cc: emacs-devel

The patch is big enough to need legal papers.  How many lines did you
write, and how many are left from kobayays@otsukakj.co.jp?

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: mouse cursor on MS-Windows. (revisited)
@ 2002-12-04 12:06 David PONCE
  0 siblings, 0 replies; 5+ messages in thread
From: David PONCE @ 2002-12-04 12:06 UTC (permalink / raw)
  Cc: emacs-devel

Hi Richard,

> The patch is big enough to need legal papers.  How many lines did you
> write, and how many are left from kobayays@otsukakj.co.jp?

KOBAYASHI gave the original implementation idea (thanks!).  I had to
change most of his code to improve it (I hope it is ;-)

Probably the main part of his original patch I left untouched
correspond to the following diff from w32term.c:

6587a6589
>   Cursor cursor = 0;
6643c6645
< #if 0 /* TODO: mouse cursor */
---
>
6645c6647
<     cursor = f->output_data.x->horizontal_drag_cursor;
---
>     cursor = f->output_data.w32->horizontal_drag_cursor;
6647,6648c6649,6650
<     cursor = f->output_data.x->text_cursor;
< #endif
---
>     cursor = f->output_data.w32->text_cursor;
>
6676c6678
< 	  /* TODO: mouse cursor */
---
> 	  cursor = f->output_data.w32->nontext_cursor;
6731,6732c6733,6734
<       /* TODO: if (same_region)
< 	 mouse cursor */
---
>       if (same_region)
> 	cursor = 0;
6762,6763c6764,6765
< 	  clear_mouse_face (dpyinfo);
< 	  /* TODO: mouse cursor changes.  */
---
> 	  if (clear_mouse_face (dpyinfo))
> 	    cursor = 0;
6801c6803
< 	      /* TODO: mouse cursor changes.  */
---
> 	      cursor = 0;
6844c6846
< 	      /* TODO: mouse cursor changes.  */
---
> 	      cursor = 0;
6876c6878
< 	      /* TODO: mouse cursor changes.  */
---
> 	      cursor = 0;
6924c6926
< 		  /* TODO: mouse cursor changes.  */
---
> 		  cursor = 0;
7004,7005c7006,7007
<   /* TODO: mouse cursor changes. */
<   ;
---

^ permalink raw reply	[flat|nested] 5+ messages in thread

* mouse cursor on MS-Windows. (revisited)
@ 2002-12-05  3:39 KOBAYASHI Yasuhiro
  0 siblings, 0 replies; 5+ messages in thread
From: KOBAYASHI Yasuhiro @ 2002-12-05  3:39 UTC (permalink / raw)



> The patch is big enough to need legal papers.  How many lines did you
> write, and how many are left from kobayays@otsukakj.co.jp

If you need the papers I could send them.
-- 
KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: mouse cursor on MS-Windows. (revisited)
       [not found] <3DD3EB7600A9C1CF@mel-rta9.wanadoo.fr>
@ 2002-12-06 13:30 ` Richard Stallman
  0 siblings, 0 replies; 5+ messages in thread
From: Richard Stallman @ 2002-12-06 13:30 UTC (permalink / raw)
  Cc: emacs-devel

    Probably the main part of his original patch I left untouched
    correspond to the following diff from w32term.c:

Actually, the question is not what part you left untouched,
but what part was not totally replaced.   We may as well
get papers from both of you.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2002-12-06 13:30 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <3DD3EB7600A9C1CF@mel-rta9.wanadoo.fr>
2002-12-06 13:30 ` mouse cursor on MS-Windows. (revisited) Richard Stallman
2002-12-05  3:39 KOBAYASHI Yasuhiro
  -- strict thread matches above, loose matches on Subject: below --
2002-12-04 12:06 David PONCE
     [not found] <3DEB71B90009B5B2@mel-rta6.wanadoo.fr>
2002-12-04 11:07 ` Richard Stallman
2002-12-03 13:43 David PONCE

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).