| 581 | extern "C" |
| 582 | { |
| 583 | void sendKeys(WINDOW_HANDLE windowHandle, const wchar_t* value, int requestedTimePerKey) |
| 584 | { |
| 585 | init_logging(); |
| 586 | int timePerKey = getTimePerKey(requestedTimePerKey); |
| 587 | |
| 588 | LOG(DEBUG) << "---------- starting sendKeys: " << windowHandle << " tpk: " << |
| 589 | timePerKey << "---------"; |
| 590 | GdkDrawable* hwnd = (GdkDrawable*) windowHandle; |
| 591 | |
| 592 | // The keyp_handler will remember the state of modifier keys and |
| 593 | // will be used to generate the events themselves. |
| 594 | KeypressEventsHandler keyp_handler(hwnd, gModifiersState); |
| 595 | |
| 596 | struct timespec sleep_time; |
| 597 | sleep_time.tv_sec = timePerKey / 1000; |
| 598 | sleep_time.tv_nsec = (timePerKey % 1000) * 1000000; |
| 599 | LOG(DEBUG) << "Sleep time is " << sleep_time.tv_sec << " seconds and " << |
| 600 | sleep_time.tv_nsec << " nanoseconds."; |
| 601 | |
| 602 | int i = 0; |
| 603 | while (value[i] != '\0') { |
| 604 | list<GdkEvent*> events_for_key = |
| 605 | keyp_handler.CreateEventsForKey(value[i]); |
| 606 | |
| 607 | submit_and_free_events_list(events_for_key, timePerKey); |
| 608 | |
| 609 | i++; |
| 610 | } |
| 611 | |
| 612 | updateLastEventTime(keyp_handler.get_last_event_time()); |
| 613 | gModifiersState = keyp_handler.getModifierKeysState(); |
| 614 | |
| 615 | LOG(DEBUG) << "---------- Ending sendKeys. Total keys: " << i |
| 616 | << " ----------"; |
| 617 | } |
| 618 | |
| 619 | void releaseModifierKeys(WINDOW_HANDLE windowHandle, int requestedTimePerKey) |
| 620 | { |
nothing calls this directly
no test coverage detected