diff --git a/ChangeLog b/ChangeLog index 365fe00786..04dde07904 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Wed Sep 25 08:50:40 2002 Owen Taylor + + Patch from Eric Warmenhoven, #94123 + + * gdk/gdkmouse-fb.c: Add scrolling support for + imps2 mice. + + * gdk/linux-fb/gdkimage-fb.c: Fix compilation error + in last gdkimage-fb.c commit. + Wed Sep 25 00:16:53 2002 Manish Singh * gdk/Makefile.am gdk/x11/Makefile.am: add -DG_DISABLE_DEPRECATED diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 365fe00786..04dde07904 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,13 @@ +Wed Sep 25 08:50:40 2002 Owen Taylor + + Patch from Eric Warmenhoven, #94123 + + * gdk/gdkmouse-fb.c: Add scrolling support for + imps2 mice. + + * gdk/linux-fb/gdkimage-fb.c: Fix compilation error + in last gdkimage-fb.c commit. + Wed Sep 25 00:16:53 2002 Manish Singh * gdk/Makefile.am gdk/x11/Makefile.am: add -DG_DISABLE_DEPRECATED diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 365fe00786..04dde07904 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,13 @@ +Wed Sep 25 08:50:40 2002 Owen Taylor + + Patch from Eric Warmenhoven, #94123 + + * gdk/gdkmouse-fb.c: Add scrolling support for + imps2 mice. + + * gdk/linux-fb/gdkimage-fb.c: Fix compilation error + in last gdkimage-fb.c commit. + Wed Sep 25 00:16:53 2002 Manish Singh * gdk/Makefile.am gdk/x11/Makefile.am: add -DG_DISABLE_DEPRECATED diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 365fe00786..04dde07904 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,13 @@ +Wed Sep 25 08:50:40 2002 Owen Taylor + + Patch from Eric Warmenhoven, #94123 + + * gdk/gdkmouse-fb.c: Add scrolling support for + imps2 mice. + + * gdk/linux-fb/gdkimage-fb.c: Fix compilation error + in last gdkimage-fb.c commit. + Wed Sep 25 00:16:53 2002 Manish Singh * gdk/Makefile.am gdk/x11/Makefile.am: add -DG_DISABLE_DEPRECATED diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 365fe00786..04dde07904 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,13 @@ +Wed Sep 25 08:50:40 2002 Owen Taylor + + Patch from Eric Warmenhoven, #94123 + + * gdk/gdkmouse-fb.c: Add scrolling support for + imps2 mice. + + * gdk/linux-fb/gdkimage-fb.c: Fix compilation error + in last gdkimage-fb.c commit. + Wed Sep 25 00:16:53 2002 Manish Singh * gdk/Makefile.am gdk/x11/Makefile.am: add -DG_DISABLE_DEPRECATED diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 365fe00786..04dde07904 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,13 @@ +Wed Sep 25 08:50:40 2002 Owen Taylor + + Patch from Eric Warmenhoven, #94123 + + * gdk/gdkmouse-fb.c: Add scrolling support for + imps2 mice. + + * gdk/linux-fb/gdkimage-fb.c: Fix compilation error + in last gdkimage-fb.c commit. + Wed Sep 25 00:16:53 2002 Manish Singh * gdk/Makefile.am gdk/x11/Makefile.am: add -DG_DISABLE_DEPRECATED diff --git a/gdk/linux-fb/gdkimage-fb.c b/gdk/linux-fb/gdkimage-fb.c index 117a6b3282..a624b9df48 100644 --- a/gdk/linux-fb/gdkimage-fb.c +++ b/gdk/linux-fb/gdkimage-fb.c @@ -263,7 +263,7 @@ gdk_image_get_pixel (GdkImage *image, { GdkImagePrivateFB *private; - g_return_val_if_fail (image != NULL); + g_return_val_if_fail (image != NULL, 0); g_return_val_if_fail (x < 0 || x >= image->width, 0); g_return_val_if_fail (y < 0 || y >= image->height, 0); diff --git a/gdk/linux-fb/gdkmouse-fb.c b/gdk/linux-fb/gdkmouse-fb.c index ee6126abcb..7f3c5b35c3 100644 --- a/gdk/linux-fb/gdkmouse-fb.c +++ b/gdk/linux-fb/gdkmouse-fb.c @@ -212,6 +212,36 @@ send_button_event (GdkFBMouse *mouse, } } +static void +handle_mouse_scroll (GdkFBMouse *mouse, + gboolean up) +{ + GdkEvent *event; + gint x, y; + GdkWindow *mouse_win; + + mouse_win = gdk_window_at_pointer(NULL, NULL); + + event = gdk_event_make (mouse_win, GDK_SCROLL, FALSE); + + gdk_window_get_origin (mouse_win, &x, &y); + x = mouse->x - x; + y = mouse->y - y; + + event->button.window = mouse_win; + event->scroll.direction = up ? GDK_SCROLL_UP : GDK_SCROLL_DOWN; + event->scroll.window = mouse_win; + event->scroll.time = GDK_CURRENT_TIME; + event->scroll.x = x; + event->scroll.y = y; + event->scroll.x_root = mouse->x; + event->scroll.y_root = mouse->y; + event->scroll.state = gdk_fb_keyboard_modifiers (); + event->scroll.device = _gdk_core_pointer; + + _gdk_event_queue_append (gdk_display_get_default (), event); +} + /****************************************************** ************ Device specific mouse code ************** ******************************************************/ @@ -234,6 +264,7 @@ static gboolean handle_mouse_io (GIOChannel *gioc, GIOCondition cond, gpointer data); static gboolean gdk_fb_mouse_ps2_open (GdkFBMouse *mouse); +static gboolean gdk_fb_mouse_imps2_open (GdkFBMouse *mouse); static void gdk_fb_mouse_ps2_close (GdkFBMouse *mouse); static gboolean gdk_fb_mouse_ps2_packet (GdkFBMouse *mouse, gboolean *got_motion); @@ -257,7 +288,7 @@ static GdkFBMouseDevice mouse_devs[] = }, { "imps2", 4, - gdk_fb_mouse_ps2_open, + gdk_fb_mouse_imps2_open, gdk_fb_mouse_ps2_close, gdk_fb_mouse_ps2_packet, { 0xc0, 0x00 } @@ -473,6 +504,56 @@ gdk_fb_mouse_ps2_open (GdkFBMouse *mouse) return TRUE; } +static gboolean +gdk_fb_mouse_imps2_open (GdkFBMouse *mouse) +{ + gint fd; + guchar buf[7]; + int i = 0; + + fd = gdk_fb_mouse_dev_open ("/dev/psaux", O_RDWR); + if (fd < 0) + return FALSE; + + i = 0; + buf[i++] = 243; /* Sample rate */ + buf[i++] = 200; + buf[i++] = 243; /* Sample rate */ + buf[i++] = 100; + buf[i++] = 243; /* Sample rate */ + buf[i++] = 80; + buf[i++] = 242; + + if (!write_all (fd, buf, i)) + { + close (fd); + return FALSE; + } + + if (read (fd, buf, 1) != 1) + { + close (fd); + return FALSE; + } + + i = 0; + buf[i++] = 230; /* 1:1 scaling */ + buf[i++] = 244; /* enable mouse */ + buf[i++] = 243; /* Sample rate */ + buf[i++] = 100; + buf[i++] = 232; /* device resolution */ + buf[i++] = 3; + + if (!write_all (fd, buf, i)) + { + close (fd); + return FALSE; + } + + mouse->fd = fd; + return TRUE; +} + static void gdk_fb_mouse_ps2_close (GdkFBMouse *mouse) { @@ -492,7 +573,8 @@ gdk_fb_mouse_ps2_packet (GdkFBMouse *mouse, gboolean *got_motion) new_button1 = (buf[0] & 1) && 1; new_button3 = (buf[0] & 2) && 1; new_button2 = (buf[0] & 4) && 1; - + if (mouse->dev->packet_size == 4 && buf[3] != 0) + handle_mouse_scroll (mouse, buf[3] & 0x80); if (*got_motion && (new_button1 != mouse->button_pressed[0] ||