gboolean textbox_append_char ( textbox *tb, const char *pad, const int pad_len ) { if ( !( tb->flags & TB_EDITABLE ) ) { return FALSE; } // Filter When alt/ctrl is pressed do not accept the character. if ( !g_unichar_iscntrl ( g_utf8_get_char ( pad ) ) ) { textbox_insert ( tb, tb->cursor, pad, pad_len ); textbox_cursor ( tb, tb->cursor + 1 ); return TRUE; } return FALSE; }
static char* cleanup_filename (char *fname) { GString *gstr; gchar *cur; gunichar uc; gstr = g_string_sized_new (strlen (fname)); /* replace control characters, slashes, and colons by '-' */ for (cur = fname; cur && *cur; cur = g_utf8_next_char (cur)) { uc = g_utf8_get_char (cur); if (g_unichar_iscntrl (uc) || uc == '/' || uc == ':') g_string_append_unichar (gstr, '-'); else g_string_append_unichar (gstr, uc); } g_free (fname); return g_string_free (gstr, FALSE); }
static Accessibility_DeviceEvent spi_keystroke_from_x_key_event (XKeyEvent *x_key_event) { Accessibility_DeviceEvent key_event; KeySym keysym; const int cbuf_bytes = 20; char cbuf [21]; int nbytes; nbytes = XLookupString (x_key_event, cbuf, cbuf_bytes, &keysym, NULL); key_event.id = (dbus_int32_t)(keysym); key_event.hw_code = (dbus_int16_t) x_key_event->keycode; if (((XEvent *) x_key_event)->type == KeyPress) { key_event.type = Accessibility_KEY_PRESSED_EVENT; } else { key_event.type = Accessibility_KEY_RELEASED_EVENT; } key_event.modifiers = (dbus_uint16_t)(x_key_event->state); key_event.is_text = FALSE; switch (keysym) { case ' ': key_event.event_string = g_strdup ("space"); break; case XK_Tab: key_event.event_string = g_strdup ("Tab"); break; case XK_BackSpace: key_event.event_string = g_strdup ("Backspace"); break; case XK_Return: key_event.event_string = g_strdup ("Return"); break; case XK_Home: key_event.event_string = g_strdup ("Home"); break; case XK_Page_Down: key_event.event_string = g_strdup ("Page_Down"); break; case XK_Page_Up: key_event.event_string = g_strdup ("Page_Up"); break; case XK_F1: key_event.event_string = g_strdup ("F1"); break; case XK_F2: key_event.event_string = g_strdup ("F2"); break; case XK_F3: key_event.event_string = g_strdup ("F3"); break; case XK_F4: key_event.event_string = g_strdup ("F4"); break; case XK_F5: key_event.event_string = g_strdup ("F5"); break; case XK_F6: key_event.event_string = g_strdup ("F6"); break; case XK_F7: key_event.event_string = g_strdup ("F7"); break; case XK_F8: key_event.event_string = g_strdup ("F8"); break; case XK_F9: key_event.event_string = g_strdup ("F9"); break; case XK_F10: key_event.event_string = g_strdup ("F10"); break; case XK_F11: key_event.event_string = g_strdup ("F11"); break; case XK_F12: key_event.event_string = g_strdup ("F12"); break; case XK_End: key_event.event_string = g_strdup ("End"); break; case XK_Escape: key_event.event_string = g_strdup ("Escape"); break; case XK_Up: key_event.event_string = g_strdup ("Up"); break; case XK_Down: key_event.event_string = g_strdup ("Down"); break; case XK_Left: key_event.event_string = g_strdup ("Left"); break; case XK_Right: key_event.event_string = g_strdup ("Right"); break; default: if (nbytes > 0) { gunichar c; cbuf[nbytes] = '\0'; /* OK since length is cbuf_bytes+1 */ key_event.event_string = g_strdup (cbuf); c = keysym2ucs (keysym); if (c > 0 && !g_unichar_iscntrl (c)) { key_event.is_text = TRUE; /* incorrect for some composed chars? */ } } else { key_event.event_string = g_strdup (""); } } key_event.timestamp = (dbus_uint32_t) x_key_event->time; #ifdef SPI_KEYEVENT_DEBUG { char *pressed_str = "pressed"; char *released_str = "released"; char *state_ptr; if (key_event.type == Accessibility_KEY_PRESSED_EVENT) state_ptr = pressed_str; else state_ptr = released_str; fprintf (stderr, "Key %lu %s (%c), modifiers %d; string=%s [%x] %s\n", (unsigned long) keysym, state_ptr, keysym ? (int) keysym : '*', (int) x_key_event->state, key_event.event_string, key_event.event_string[0], (key_event.is_text == TRUE) ? "(text)" : "(not text)"); } #endif #ifdef SPI_DEBUG fprintf (stderr, "%s%c\n", (x_key_event->state & Mod1Mask)?"Alt-":"", ((x_key_event->state & ShiftMask)^(x_key_event->state & LockMask))? g_ascii_toupper (keysym) : g_ascii_tolower (keysym)); fprintf (stderr, "serial: %x Time: %x\n", x_key_event->serial, x_key_event->time); #endif /* SPI_DEBUG */ return key_event; }