diff options
Diffstat (limited to 'tqtinterface/qt4/src/kernel/tqapplication.cpp')
| -rw-r--r-- | tqtinterface/qt4/src/kernel/tqapplication.cpp | 68 | 
1 files changed, 61 insertions, 7 deletions
| diff --git a/tqtinterface/qt4/src/kernel/tqapplication.cpp b/tqtinterface/qt4/src/kernel/tqapplication.cpp index af193c9..74d2f08 100644 --- a/tqtinterface/qt4/src/kernel/tqapplication.cpp +++ b/tqtinterface/qt4/src/kernel/tqapplication.cpp @@ -4113,6 +4113,35 @@ void TQApplication::postEvent( TQObject *receiver, TQEvent *event )  	};      } +#if !defined(TQT_NO_IM) +    // if this is one of the compressible IM events, do compression +    else if ( event->type() == TQEvent::IMCompose ) { +	l->last(); +	TQPostEvent * cur = 0; +	for ( ;; ) { +	    while ( (cur=l->current()) != 0 && +		    ( cur->receiver != receiver || +		      cur->event == 0 || +		      cur->event->type() != event->type() ||  +		      cur->event->type() != TQEvent::IMStart ) ) +		l->prev(); +	    if ( l->current() != 0 ) { +		// IMCompose must not be compressed with another one +		// beyond its IMStart boundary +		if ( cur->event->type() == TQEvent::IMStart ) { +		    break; +		} else if ( cur->event->type() == TQEvent::IMCompose ) { +		    TQIMComposeEvent * e = (TQIMComposeEvent *)(cur->event); +		    *e = *(TQIMComposeEvent *)event; +		    delete event; +		    return; +		} +	    } +	    break; +	}; +    } +#endif +      // if no compression could be done, just append something      event->posted = TRUE;      TQPostEvent * pe = new TQPostEvent( receiver, event ); @@ -4259,6 +4288,23 @@ void TQApplication::sendPostedEvents( TQObject *receiver, int event_type )  void TQApplication::removePostedEvents( TQObject *receiver )  { +    removePostedEvents( receiver, 0 ); +} + +/*! +  Removes all events that have the event type \a event_type posted +  using postEvent() for \a receiver. + +  The events are \e not dispatched, instead they are removed from the +  queue. + +  If \a event_type is 0, all the events are removed from the queue. + +  \threadsafe +*/ + +void TQApplication::removePostedEvents( TQObject *receiver, int event_type ) +{      if ( !receiver )  	return; @@ -4277,18 +4323,24 @@ void TQApplication::removePostedEvents( TQObject *receiver )      // leave the TQPostEvent objects; they'll be deleted by      // sendPostedEvents().      TQPostEventList * l = receiver->postedEvents; -    receiver->postedEvents = 0;      l->first();      TQPostEvent * pe;      while( (pe=l->current()) != 0 ) { -	if ( pe->event ) { -	    pe->event->posted = FALSE; -	    delete pe->event; -	    pe->event = 0; +	if ( !event_type || pe->event->type() == event_type ) { +	    if ( pe->event ) { +		pe->event->posted = FALSE; +		delete pe->event; +		pe->event = 0; +	    } +	    l->remove(); +	} else { +	    l->next();  	} -	l->remove();      } -    delete l; +    if ( !event_type || !l->count() ) { +	receiver->postedEvents = 0; +	delete l; +    }  } @@ -4473,6 +4525,8 @@ void TQApplication::setActiveWindow( TQWidget* act )  	focus_widget = 0;  #ifdef TQ_WS_WIN  	TQInputContext::accept( tmp ); +#elif defined(TQ_WS_X11) +	tmp->unfocusInputContext();  #endif  	TQApplication::sendSpontaneousEvent( tmp, &out );      } else if ( active_window ) { | 
