[maemo-commits] [maemo-commits] r9247 - in projects/haf/branches/gtk+/maemo-gtk-2-10: . gdk/x11

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Tue Jan 23 13:16:48 EET 2007
Author: mitch
Date: 2007-01-23 13:16:47 +0200 (Tue, 23 Jan 2007)
New Revision: 9247

Modified:
   projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog
   projects/haf/branches/gtk+/maemo-gtk-2-10/gdk/x11/gdkinput-x11.c
   projects/haf/branches/gtk+/maemo-gtk-2-10/gdk/x11/gdkinput.c
Log:
2007-01-23  Michael Natterer  <mitch at imendio.com>

	Merge remaining gdkinput changes:

    2006-11-28  Tommi Komulainen  <tommi.komulainen at nokia.com>

	* gdk/x11/gdkinput-x11.c (_gdk_input_common_other_event): Call
	_gdk_event_button_generate to get GDK_2BUTTON_PRESS events properly
	synthesized. NB#48648

    2006-11-27  Tommi Komulainen  <tommi.komulainen at nokia.com>

	* gdk/x11/gdkinput.c (gdk_input_set_extension_events): Stop leaking
	memory when called multiple times to enable extension events. Get the
	root relative geometry in case we're called after ConfigureNotify.

    2006-11-07  Tommi Komulainen  <tommi.komulainen at nokia.com>

	* gdk/x11/gdkinput-x11.c (gdk_input_translate_coordinates): When
	maximum value for x/y axis is -1 or 0 use the screen size. NB#46445,
	#371930

    2006-09-18  Tommi Komulainen  <tommi.komulainen at nokia.com>

        * gdk/x11/gdkinput-x11.c (gdk_input_device_new): Always enable
        extension events for 'pen' devices to get touchscreen pressure. 



Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog
===================================================================
--- projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog	2007-01-23 10:31:29 UTC (rev 9246)
+++ projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog	2007-01-23 11:16:47 UTC (rev 9247)
@@ -1,5 +1,32 @@
 2007-01-23  Michael Natterer  <mitch at imendio.com>
 
+	Merge remaining gdkinput changes:
+
+    2006-11-28  Tommi Komulainen  <tommi.komulainen at nokia.com>
+
+	* gdk/x11/gdkinput-x11.c (_gdk_input_common_other_event): Call
+	_gdk_event_button_generate to get GDK_2BUTTON_PRESS events properly
+	synthesized. NB#48648
+
+    2006-11-27  Tommi Komulainen  <tommi.komulainen at nokia.com>
+
+	* gdk/x11/gdkinput.c (gdk_input_set_extension_events): Stop leaking
+	memory when called multiple times to enable extension events. Get the
+	root relative geometry in case we're called after ConfigureNotify.
+
+    2006-11-07  Tommi Komulainen  <tommi.komulainen at nokia.com>
+
+	* gdk/x11/gdkinput-x11.c (gdk_input_translate_coordinates): When
+	maximum value for x/y axis is -1 or 0 use the screen size. NB#46445,
+	#371930
+
+    2006-09-18  Tommi Komulainen  <tommi.komulainen at nokia.com>
+
+        * gdk/x11/gdkinput-x11.c (gdk_input_device_new): Always enable
+        extension events for 'pen' devices to get touchscreen pressure. 
+
+2007-01-23  Michael Natterer  <mitch at imendio.com>
+
 	* gdk/x11/gdkinput-xfree.c: g_return_if_fail on the right objects.
 
 2007-01-19  Michael Natterer  <mitch at imendio.com>

Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gdk/x11/gdkinput-x11.c
===================================================================
--- projects/haf/branches/gtk+/maemo-gtk-2-10/gdk/x11/gdkinput-x11.c	2007-01-23 10:31:29 UTC (rev 9246)
+++ projects/haf/branches/gtk+/maemo-gtk-2-10/gdk/x11/gdkinput-x11.c	2007-01-23 11:16:47 UTC (rev 9247)
@@ -242,6 +242,15 @@
   gdkdev->proximityout_type = 0;
   gdkdev->changenotify_type = 0;
 
+  /* MAEMO START */
+  /* always enable extension events to get touchscreen pressure */
+  if (gdkdev->info.source == GDK_SOURCE_PEN)
+    {
+      if (!gdk_device_set_mode (&gdkdev->info, GDK_MODE_SCREEN))
+        g_warning ("Failed to enable pressure on `%s'", gdkdev->info.name);
+    }
+  /* MAEMO END */
+
   return gdkdev;
 
  error:
@@ -447,12 +456,22 @@
 	  break;
 	}
     }
-  
-  device_width = gdkdev->axes[x_axis].max_value - 
-		   gdkdev->axes[x_axis].min_value;
-  device_height = gdkdev->axes[y_axis].max_value - 
-                    gdkdev->axes[y_axis].min_value;
 
+  /* Xi spec allows max_value be unset (0 or -1 usually) meaning
+   * bounded to screen size
+   */
+  if (gdkdev->axes[x_axis].max_value <= 0)
+    device_width = gdk_screen_get_width (gdk_drawable_get_screen (input_window->window));
+  else
+    device_width = (gdkdev->axes[x_axis].max_value -
+                    gdkdev->axes[x_axis].min_value);
+
+  if (gdkdev->axes[y_axis].max_value <= 0)
+    device_height = gdk_screen_get_height (gdk_drawable_get_screen (input_window->window));
+  else
+    device_height = (gdkdev->axes[y_axis].max_value -
+                     gdkdev->axes[y_axis].min_value);
+
   if (gdkdev->info.mode == GDK_MODE_SCREEN) 
     {
       x_scale = gdk_screen_get_width (gdk_drawable_get_screen (input_window->window)) / device_width;
@@ -579,6 +598,10 @@
       event->button.state = gdk_input_translate_state(xdbe->state,xdbe->device_state);
       event->button.button = xdbe->button;
 
+      if (event->button.type == GDK_BUTTON_PRESS)
+        _gdk_event_button_generate (gdk_drawable_get_display (event->button.window),
+                                    event);
+
       GDK_NOTE (EVENTS,
 	g_print ("button %s:\t\twindow: %ld  device: %ld  x,y: %f %f  button: %d\n",
 		 (event->button.type == GDK_BUTTON_PRESS) ? "press" : "release",

Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gdk/x11/gdkinput.c
===================================================================
--- projects/haf/branches/gtk+/maemo-gtk-2-10/gdk/x11/gdkinput.c	2007-01-23 10:31:29 UTC (rev 9246)
+++ projects/haf/branches/gtk+/maemo-gtk-2-10/gdk/x11/gdkinput.c	2007-01-23 11:16:47 UTC (rev 9247)
@@ -313,29 +313,42 @@
   if (mode == GDK_EXTENSION_EVENTS_NONE)
     mask = 0;
 
+  iw = _gdk_input_window_find (window);
+
   if (mask != 0)
     {
-      iw = g_new(GdkInputWindow,1);
+      if (!iw)
+        {
+          iw = g_new(GdkInputWindow,1);
 
-      iw->window = window;
-      iw->mode = mode;
+          iw->window = window;
+          iw->mode = mode;
 
-      iw->obscuring = NULL;
-      iw->num_obscuring = 0;
-      iw->grabbed = FALSE;
+          iw->obscuring = NULL;
+          iw->num_obscuring = 0;
+          iw->grabbed = FALSE;
 
-      display_x11->input_windows = g_list_append(display_x11->input_windows,iw);
+          display_x11->input_windows = g_list_append(display_x11->input_windows,iw);
+        }
+
       window_private->extension_events = mask;
 
+#ifndef XINPUT_NONE
       /* Add enter window events to the event mask */
-      /* FIXME, this is not needed for XINPUT_NONE */
+      /* this is not needed for XINPUT_NONE */
       gdk_window_set_events (window,
 			     gdk_window_get_events (window) | 
 			     GDK_ENTER_NOTIFY_MASK);
+
+      /* we might not receive ConfigureNotify so get the root_relative_geometry
+       * now, just in case */
+      _gdk_input_get_root_relative_geometry (GDK_WINDOW_XDISPLAY (window),
+                                             GDK_WINDOW_XWINDOW (window),
+                                             &iw->root_x, &iw->root_y, NULL, NULL);
+#endif /* !XINPUT_NONE */
     }
   else
     {
-      iw = _gdk_input_window_find (window);
       if (iw)
 	{
 	  display_x11->input_windows = g_list_remove(display_x11->input_windows,iw);


More information about the maemo-commits mailing list