guint term_paste_idle_id;
GdkAtom compound_text_atom;
int alt_keycode;
+ int alt_digits;
char wintitle[sizeof(((Config *)0)->wintitle)];
char icontitle[sizeof(((Config *)0)->wintitle)];
int master_fd, master_func_id, exited;
/*
* If Alt is being released after typing an Alt+numberpad
* sequence, we should generate the code that was typed.
+ *
+ * Note that we only do this if more than one key was actually
+ * pressed - I don't think Alt+NumPad4 should be ^D or that
+ * Alt+NumPad3 should be ^C, for example. There's no serious
+ * inconvenience in having to type a zero before a single-digit
+ * character code.
*/
if (event->type == GDK_KEY_RELEASE &&
(event->keyval == GDK_Meta_L || event->keyval == GDK_Alt_L ||
event->keyval == GDK_Meta_R || event->keyval == GDK_Alt_R) &&
- inst->alt_keycode >= 0) {
+ inst->alt_keycode >= 0 && inst->alt_digits > 1) {
#ifdef KEY_DEBUGGING
printf("Alt key up, keycode = %d\n", inst->alt_keycode);
#endif
if ((event->keyval == GDK_Meta_L || event->keyval == GDK_Alt_L ||
event->keyval == GDK_Meta_R || event->keyval == GDK_Alt_R)) {
inst->alt_keycode = -1;
+ inst->alt_digits = 0;
goto done; /* this generates nothing else */
}
inst->alt_keycode = digit; /* one-digit code */
else
inst->alt_keycode = inst->alt_keycode * 10 + digit;
+ inst->alt_digits++;
#ifdef KEY_DEBUGGING
printf(" gives new code %d\n", inst->alt_keycode);
#endif
*/
}
+/*
+ * This is still called when mode==BELL_VISUAL, even though the
+ * visual bell is handled entirely within terminal.c, because we
+ * may want to perform additional actions on any kind of bell (for
+ * example, taskbar flashing in Windows).
+ */
void beep(void *frontend, int mode)
{
- gdk_beep();
+ if (mode != BELL_VISUAL)
+ gdk_beep();
}
int CharWidth(Context ctx, int uc)
*/
inst = smalloc(sizeof(*inst));
memset(inst, 0, sizeof(*inst));
+ inst->alt_keycode = -1; /* this one needs _not_ to be zero */
inst->fonts[0] = gdk_font_load(cfg.font);
if (!inst->fonts[0]) {