Hi Daniel, I was finally able to reproduce the problem by plugging in my external monitor, which causes the tablet to become mis-calibrated, so that in Xournal the wacom pen draws some distance away from the location of the cursor.
* ANALYSIS: This is caused partly by my hack to the gdk-win32 library to avoid the problem of the interface becoming unresponsive after a stylus stroke until one clicks outside of the canvas (because core events get filtered out). With my hack to gdk-win32, when you click with the stylus, we receive first a ButtonPress event from the stylus device, then a Motion event from the core pointer (why??? it's strange), then a ButtonPress event from the core pointer. The first button-press event starts a text edition. However the second button-press event then arrives and gets processed to see what to do with it. The standard logic in this situation, with the default settings of various relevant options (eg. ui.discard_core_pointer == FALSE), is that we want to look into this Core Pointer button-press event carefully, since it might be the start of some other action by the user. One of the first things we do after sanitizing the event data and checking that we do care about this event is: if (ui.cur_item_type == ITEM_TEXT) { if (!is_event_within_textview(event)) end_text(); else return FALSE; } i.e. if we're currently editing text, we check whether the click is inside the text box -- if so, we abort processing the event and let it be sent to the text box instead; if not, we abort the text edition and start whatever action the user is initiating by clicking outside the text box. (Text is different from other drawing tools in that, normally, the user action -- drawing a stroke, using the eraser, moving a selection, etc. -- is terminated when we receive a ButtonRelease event. Not so with text edition obviously: you don't want to have to hold the pen pressed against the screen during the whole text edition). On my machine, when the external monitor is unplugged, the two button press events are within a fraction of pixel from each other, and in about 90% of the cases, the core event does fall within the text edition widget area, so the Core Pointer button press event gets ignored and all is well. In other cases or when the external monitor is plugged, the core event falls outside of the text widget area, so we first abort the text edition and then process the new button event. With more "normal" settings, the new button event would just start text edition again and you wouldn't notice much. With touch_as_hand and "Core Pointer" as touch device, the "Core Pointer" button press event instead starts the hand tool as requested... and we lost the opportunity to edit a text box. * SOME BAD SOLUTIONS: The first dirty hack that came to my mind was to add a flag to test for Core Pointer events that "echo" a just-received Button Press event from the stylus and discard them; this fails because somehow a MotionNotify event arrives in between the two ButtonPress events and I'd rather not start second-guessing what the whole sequence of events means. The second dirty hack that came to mind is to modify the code of is_event_within_textview() in xo-misc.c to add a margin of say 5 or 10 pixels around the GtkTextView widget in which nothing happens when we click -- this would filter out the second ButtonPress event even when the positions don't quite match. It's quite dirty and arbitrary though. * A BETTER SOLUTION: While writing this message and back in Linux (so I can't test right now), a better idea came to me: in xo-callbacks.c, in on_canvas_button_press_event(), first move the two lines is_touch = (strstr(event->device->name, ui.device_for_touch) != NULL); if (is_touch && ui.pen_disables_touch && ui.in_proximity) return FALSE; further up (e.g. just above the code mentioned above testing what to do with the event if we're currently in ITEM_TEXT) so that when the pen_disables_touch option is enabled and would discard the event, it does so BEFORE aborting the text box. (Then turning on pen_disables_touch should fix your problem since proximity detection should work fine). A false good idea: perhaps better for you, but probably undesirable in general: in addition to this, also modify the test on ITEM_TEXT from if (ui.cur_item_type == ITEM_TEXT) { to if (ui.cur_item_type == ITEM_TEXT && !(is_touch && ui.touch_as_handtool)) { so that touch-as-handtool events don't interrupt text edition. I don't think this latter change is a great idea however -- I imagine that "most" users expect the touchscreen to continue working while they are editing text, i.e. a touchscreen action should end the text edition and start scrolling, without having to first manually end the text edition by pressing the Esc key. Thinking of all these ideas -- the one I view as safe for everyone is moving the test on ui.pen_disables_touch up by a few lines as explained in "1." above, and you'd just need to enable "Pen disables touch" in addition to "Touch as hand". Can you confirm that this fixes the issue for you? One could then even add a second test to handle this specific bug: if (is_touch && is_core && ui.touch_as_handtool && ui.cur_item_type == ITEM_TEXT && ui.in_proximity) return FALSE; (i.e., when we're in the process of editing text, and the touch device is the core pointer, then "Touch as handtool" also implies the same filtering as "Pen disables touch"). The other possibilities (disabling touchscreen altogether while text is being edited, or adding 5- or 10-pixel margin, or undoing the bugfix in the gdk-win32 dll) I think of as less desirable. I'll try it out tomorrow if you haven't had the chance to do so yet -- right now it's getting close to the end of my work day and I have to go pick up my child at daycare... Denis On 07/01/2014 07:06 AM, D M German wrote: > Denis Auroux twisted the bytes to say: > > > Denis> On 06/29/2014 10:21 PM, D M German wrote: > >> > >> I think I understand. But... what about simply being able to start > >> editing the text? Once in the box I don't need the stylus (i can use > >> arrows and shift) but the problem is that one cannot get into the > >> text-edit mode > >> > >> --dmg > > Denis> Hi Daniel, > > Denis> Actually I can't reproduce your problem on my Yoga. In the Windows > Denis> version, with touch device set to "Core Pointer" and both > Denis> pen-disables-touch and touch-as-hand enabled, I'm able to use the pen > Denis> just fine to create text boxes and edit them... > > Denis> (My messages yesterday about understanding how such a bug might > happen > Denis> were hypothetical as I was too lazy to actually reboot into Windows > to > Denis> try it out. Looking at the code, I also don't see why the bug should > Denis> happen.) > > I ran some tests in my windows tablet (both my old hack and your code). > > Overall, the handling of the core pointer/touch is better now than > before. The only annoyance is that in text mode (and only in text mode) > the stylus reacts as a core-pointer: > > - Select core-pointer as the touch device > - Select touch as hand tool > > now: > > - Select text mode > - Clicking with the stylus anywhere changes the tool to hand tool mode > momentarily. > > but this does not happen with any of the other drawing tools: when > clicking with the stylus, the action is what is expected. Only when > using touch (core-pointer) the hand tool is activated momentarily. > > I'll look at the code and find the reason. It is a minor annoyance > though, since I never used text (but now that text works I was hoping to > use it :) > > --dmg > > > Denis> Denis > > Denis> -- > Denis> Denis Auroux aur...@math.berkeley.edu > Denis> University of California, Berkeley Tel: 510-642-4367 > Denis> Department of Mathematics Fax: 510-642-8204 > Denis> 817 Evans Hall # 3840 > Denis> Berkeley, CA 94720-3840 > > > -- > Daniel M. German "In other studies you go as far as > others have gone before you, > -> and" > http://turingmachine.org/ > http://silvernegative.com/ > dmg (at) uvic (dot) ca > replace (at) with @ and (dot) with . > > > -- Denis Auroux aur...@math.berkeley.edu University of California, Berkeley Tel: 510-642-4367 Department of Mathematics Fax: 510-642-8204 817 Evans Hall # 3840 Berkeley, CA 94720-3840 ------------------------------------------------------------------------------ Open source business process management suite built on Java and Eclipse Turn processes into business applications with Bonita BPM Community Edition Quickly connect people, data, and systems into organized workflows Winner of BOSSIE, CODIE, OW2 and Gartner awards http://p.sf.net/sfu/Bonitasoft _______________________________________________ Xournal-devel mailing list Xournal-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/xournal-devel