summaryrefslogtreecommitdiffstats
path: root/experimental/tqtinterface/qt4/src/kernel/tqapplication.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'experimental/tqtinterface/qt4/src/kernel/tqapplication.cpp')
-rw-r--r--experimental/tqtinterface/qt4/src/kernel/tqapplication.cpp68
1 files changed, 61 insertions, 7 deletions
diff --git a/experimental/tqtinterface/qt4/src/kernel/tqapplication.cpp b/experimental/tqtinterface/qt4/src/kernel/tqapplication.cpp
index af193c986..74d2f085f 100644
--- a/experimental/tqtinterface/qt4/src/kernel/tqapplication.cpp
+++ b/experimental/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 ) {