void FcitxNotificationItemIMChanged(void* arg) { FcitxNotificationItem* notificationitem = (FcitxNotificationItem*) arg; #define SEND_SIGNAL(NAME) do { \ DBusMessage* msg = dbus_message_new_signal(NOTIFICATION_ITEM_DEFAULT_OBJ, \ NOTIFICATION_ITEM_DBUS_IFACE, \ NAME); \ if (msg) { \ dbus_connection_send(notificationitem->conn, msg, NULL); \ dbus_message_unref(msg); \ } \ } while(0) SEND_SIGNAL("NewIcon"); SEND_SIGNAL("NewToolTip"); if (notificationitem->isUnity) { DBusMessage* msg = dbus_message_new_signal(NOTIFICATION_ITEM_DEFAULT_OBJ, NOTIFICATION_ITEM_DBUS_IFACE, "XAyatanaNewLabel"); if (msg) { const char* label = FcitxNotificationItemGetLabel(notificationitem); dbus_message_append_args(msg, DBUS_TYPE_STRING, &label, DBUS_TYPE_STRING, &label, DBUS_TYPE_INVALID); dbus_connection_send(notificationitem->conn, msg, NULL); dbus_message_unref(msg); } } }
void *POSIX_Init( void *argument ) { int sc; pthread_t id; struct sigaction act; bool trueArg = true; bool falseArg = false; struct timespec delay_request; puts( "\n\n*** POSIX TEST SIGNAL " TEST_NAME " ***" ); puts( "Init - Variation is: " TEST_STRING ); Signal_occurred = false; act.sa_handler = NULL; act.sa_sigaction = Signal_handler; act.sa_flags = SA_SIGINFO; sigaction( SIGNAL_ONE, &act, NULL ); sigaction( SIGNAL_TWO, &act, NULL ); /* create threads */ sc = pthread_create( &id, NULL, Test_Thread, &falseArg ); rtems_test_assert( !sc ); sc = pthread_create( &id, NULL, Test_Thread, &trueArg ); rtems_test_assert( !sc ); puts( "Init - sleep - let threads settle - OK" ); delay_request.tv_sec = 0; delay_request.tv_nsec = 5 * 100000000; sc = nanosleep( &delay_request, NULL ); rtems_test_assert( !sc ); puts( "Init - sleep - SignalBlocked thread settle - OK" ); sc = nanosleep( &delay_request, NULL ); rtems_test_assert( !sc ); printf( "Init - sending %s - deliver to one thread\n", signal_name(SIGNAL_TWO)); sc = SEND_SIGNAL( SIGNAL_TWO ); rtems_test_assert( !sc ); printf( "Init - sending %s - deliver to other thread\n", signal_name(SIGNAL_TWO)); sc = SEND_SIGNAL( SIGNAL_TWO ); rtems_test_assert( !sc ); #if defined(TO_PROCESS) printf( "Init - sending %s - expect EAGAIN\n", signal_name(SIGNAL_TWO) ); sc = SEND_SIGNAL( SIGNAL_TWO ); rtems_test_assert( sc == -1 ); rtems_test_assert( errno == EAGAIN ); #endif puts( "Init - sleep - let thread report if it unblocked - OK" ); usleep(500000); /* we are just sigwait'ing the signal, not delivering it */ rtems_test_assert( Signal_occurred == true ); puts( "*** END OF POSIX TEST SIGNAL " TEST_NAME " ***" ); rtems_test_exit(0); return NULL; /* just so the compiler thinks we returned something */ }