From d4c5bf69c64ed9b7c137561b291607c181a9ad60 Mon Sep 17 00:00:00 2001 From: lecoanet Date: Fri, 23 Mar 2001 15:24:30 +0000 Subject: Retour arri�re sur le comportement du bind lors d'un button press : le grab est r�tabli. Le bug de l'enter non g�n�r� lors d'un retour dans l'objet de grab est corrig�. --- generic/tkZinc.c | 68 +++++++++++++++++++++++++------------------------------- 1 file changed, 30 insertions(+), 38 deletions(-) (limited to 'generic/tkZinc.c') diff --git a/generic/tkZinc.c b/generic/tkZinc.c index 3baa747..bf2a5ad 100644 --- a/generic/tkZinc.c +++ b/generic/tkZinc.c @@ -4782,15 +4782,16 @@ DoEvent(WidgetInfo *wi, * any binding related to the item only those pertaining * to the fields. */ - bind_item = (((event->type != EnterNotify) && - (event->type != LeaveNotify)) || + bind_item = (((event->type != EnterNotify) && (event->type != LeaveNotify)) || (wi->current_item != wi->new_item)); - /*printf("type=%s, current=%d, new=%d --> %s\n", - event->type==EnterNotify?"Enter": - event->type==LeaveNotify?"Leave":"other", + /*printf("type=%s, current=%d, new=%d --> %s, currentp %d, newp %d\n", + event->type==EnterNotify?"": + event->type==LeaveNotify?"": + event->type==MotionNotify?"":"other", wi->current_item?wi->current_item->id:0, wi->new_item?wi->new_item->id:0, - bind_item?"bind":"nobind");*/ + bind_item?"bind":"nobind", + wi->current_part, wi->new_part);*/ if (bind_item) { num += 2; } @@ -4884,10 +4885,7 @@ PickCurrentItem(WidgetInfo *wi, XEvent *event) { int button_down; -#ifdef LEFT_GRAB - int prev_left_grabbed_item; -#endif - + /* * Check whether or not a button is down. If so, we'll log entry * and exit into and out of the current item, but not entry into @@ -4896,12 +4894,9 @@ PickCurrentItem(WidgetInfo *wi, */ button_down = wi->state & (Button1Mask|Button2Mask|Button3Mask|Button4Mask|Button5Mask); -#ifdef LEFT_GRAB - prev_left_grabbed_item = wi->events_flags & LEFT_GRABBED_ITEM; if (!button_down) { wi->events_flags &= ~LEFT_GRABBED_ITEM; } -#endif /* * Save information about this event in the widget. The saved event @@ -4969,13 +4964,15 @@ PickCurrentItem(WidgetInfo *wi, } else { wi->new_item = ZN_NO_ITEM; + wi->new_part = ZN_NO_PART; } - if ((wi->new_item == wi->current_item) && (wi->new_part == wi->current_part) -#ifdef LEFT_GRAB - && !(wi->events_flags & LEFT_GRABBED_ITEM) -#endif - ) { + /*printf("------ PickCurrentItem current: %d %d, new %d %d\n", + wi->current_item==ZN_NO_ITEM?0:wi->current_item->id, wi->current_part, + wi->new_item==ZN_NO_ITEM?0:wi->new_item->id, wi->new_part);*/ + + if ((wi->new_item == wi->current_item) && (wi->new_part == wi->current_part) && + !(wi->events_flags & LEFT_GRABBED_ITEM)) { /* * Nothing to do: the current item/part hasn't changed. */ @@ -4991,12 +4988,7 @@ PickCurrentItem(WidgetInfo *wi, * calling leave when the grab is released. */ if (((wi->new_item != wi->current_item) || (wi->new_part != wi->current_part)) && - (wi->current_item != ZN_NO_ITEM) -#ifdef LEFT_GRAB - && !(wi->events_flags & LEFT_GRABBED_ITEM) - && !prev_left_grabbed_item -#endif - ) { + (wi->current_item != ZN_NO_ITEM) && !(wi->events_flags & LEFT_GRABBED_ITEM)) { XEvent event; Item item = wi->current_item; @@ -5019,7 +5011,7 @@ PickCurrentItem(WidgetInfo *wi, * event handler for that deletes the current item. */ if ((item == wi->current_item) && !button_down) { - /*printf("Removing 'current' to %d\n", wi->current_item->id);*/ + /*printf("^^^ Removing 'current' from %d\n", wi->current_item->id);*/ ITEM.RemoveTag(item, current_uid); } /* @@ -5028,40 +5020,40 @@ PickCurrentItem(WidgetInfo *wi, * item was deleted. */ } -#ifdef LEFT_GRAB if (((wi->new_item != wi->current_item) || (wi->new_part != wi->current_part)) && button_down) { wi->events_flags |= LEFT_GRABBED_ITEM; return; } -#endif -#ifdef LEFT_GRAB /* * Special note: it's possible that wi->new_item == wi->current_item * here. This can happen, for example, if LEFT_GRABBED_ITEM was set or * if there is only a change in the part number. */ wi->events_flags &= ~LEFT_GRABBED_ITEM; -#endif + /* - * Added to enable DoEvent to make a special case for enter/leaves - * between fields in the same item. It may interact with - * LEFT_GRABBED_ITEM. - */ + * Tentative pour éviter d'enlever puis de remettre + * le tag current sur le même item en ces de changement + * de partie. Ca marche pas pour l'instant. if (wi->current_item != wi->new_item) { if (wi->current_item != ZN_NO_ITEM) { - /*printf("***Removing 'current' to %d\n", wi->current_item->id);*/ + printf("vvv Removing 'current' from %d\n", wi->current_item->id); ITEM.RemoveTag(wi->current_item, current_uid); } - wi->current_item = wi->new_item; - wi->new_item = ZN_NO_ITEM; - } + }*/ + wi->current_item = wi->new_item; wi->current_part = wi->new_part; + /* + * Added to enable DoEvent to make a special case for enter/leaves + * between fields in the same item. It may interact with + * LEFT_GRABBED_ITEM. + */ + wi->new_item = ZN_NO_ITEM; if (wi->current_item != ZN_NO_ITEM) { XEvent event; - /* * Add the tag 'current' to the current item under the pointer. */ -- cgit v1.1