X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fsystem%2Fcommon%2Ftrigger-event.cpp;h=8f769af4791c9ea57244d423ff046e9bbeea50f2;hb=d1982e769545d914813dff75631846bf2988b8fb;hp=005f5ec7bc96f57f37ab4621e4076310e3df4c22;hpb=fe8f8ee27e49309bfe4b1400ee0c279da3d8336d;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/dali/internal/system/common/trigger-event.cpp b/dali/internal/system/common/trigger-event.cpp index 005f5ec..8f769af 100644 --- a/dali/internal/system/common/trigger-event.cpp +++ b/dali/internal/system/common/trigger-event.cpp @@ -30,25 +30,22 @@ namespace Dali { - namespace Internal { - namespace Adaptor { - -TriggerEvent::TriggerEvent( CallbackBase* callback, TriggerEventInterface::Options options ) -: mFileDescriptorMonitor( NULL ), - mCallback( callback ), - mFileDescriptor( -1 ), - mOptions( options ) +TriggerEvent::TriggerEvent(CallbackBase* callback, TriggerEventInterface::Options options) +: mFileDescriptorMonitor(NULL), + mCallback(callback), + mFileDescriptor(-1), + mOptions(options) { // Create accompanying file descriptor. mFileDescriptor = eventfd(0, EFD_NONBLOCK); - if (mFileDescriptor >= 0) + if(mFileDescriptor >= 0) { // Now Monitor the created event file descriptor - mFileDescriptorMonitor = new FileDescriptorMonitor( mFileDescriptor, MakeCallback( this, &TriggerEvent::Triggered ), FileDescriptorMonitor::FD_READABLE ); + mFileDescriptorMonitor = new FileDescriptorMonitor(mFileDescriptor, MakeCallback(this, &TriggerEvent::Triggered), FileDescriptorMonitor::FD_READABLE); } else { @@ -61,7 +58,7 @@ TriggerEvent::~TriggerEvent() delete mFileDescriptorMonitor; delete mCallback; - if (mFileDescriptor >= 0) + if(mFileDescriptor >= 0) { close(mFileDescriptor); mFileDescriptor = 0; @@ -70,16 +67,16 @@ TriggerEvent::~TriggerEvent() void TriggerEvent::Trigger() { - if (mFileDescriptor >= 0) + if(mFileDescriptor >= 0) { // Increment event counter by 1. // Writing to the file descriptor triggers the Dispatch() method in the other thread // (if in multi-threaded environment). uint64_t data = 1; - int size = write(mFileDescriptor, &data, sizeof(uint64_t)); + int size = write(mFileDescriptor, &data, sizeof(uint64_t)); - if (size != sizeof(uint64_t)) + if(size != sizeof(uint64_t)) { DALI_LOG_ERROR("Unable to write to UpdateEvent File descriptor\n"); } @@ -90,28 +87,31 @@ void TriggerEvent::Trigger() } } -void TriggerEvent::Triggered( FileDescriptorMonitor::EventType eventBitMask ) +void TriggerEvent::Triggered(FileDescriptorMonitor::EventType eventBitMask, int fileDescriptor) { - if( !( eventBitMask & FileDescriptorMonitor::FD_READABLE ) ) + if(!(eventBitMask & FileDescriptorMonitor::FD_READABLE)) { - DALI_ASSERT_ALWAYS( 0 && "Trigger event file descriptor error"); + DALI_ASSERT_ALWAYS(0 && "Trigger event file descriptor error"); return; } // Reading from the file descriptor resets the event counter, we can ignore the count. uint64_t receivedData; - size_t size; + size_t size; size = read(mFileDescriptor, &receivedData, sizeof(uint64_t)); - if (size != sizeof(uint64_t)) + if(size != sizeof(uint64_t)) { DALI_LOG_WARNING("Unable to read to UpdateEvent File descriptor\n"); } + // Save value to prevent duplicate deletion + TriggerEventInterface::Options options = mOptions; + // Call the connected callback - CallbackBase::Execute( *mCallback ); + CallbackBase::Execute(*mCallback); //check if we should delete ourselves after the trigger - if( mOptions == TriggerEventInterface::DELETE_AFTER_TRIGGER ) + if(options == TriggerEventInterface::DELETE_AFTER_TRIGGER) { delete this; }