Unverified Commit a23da070 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Only use XSetIC* and Xutf8LookupString if we have an input context

Closes #837
parent 8a743ab1
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ magic_t magic = NULL;
Display *disp = NULL;
Visual *vis = NULL;
Screen *scr = NULL;
XIC input_context;
XIC input_context = NULL;
Colormap cm;
int depth;
Atom wmDeleteWindow;
@@ -148,7 +148,9 @@ void init_x_and_imlib(void)
	xid_context = XUniqueContext();

	XIM im = XOpenIM(disp, NULL, NULL, NULL);
	if (im != NULL) {
		input_context = XCreateIC(im, XNInputStyle, XIMPreeditNothing | XIMStatusNothing, NULL);
	}

#ifdef HAVE_LIBXINERAMA
	init_xinerama();
+7 −2
Original line number Diff line number Diff line
@@ -369,6 +369,7 @@ void feh_event_handle_keypress(XEvent * ev)
{
	int state;
	char kbuf[20];
	unsigned long int kbuf_used = 0;
	KeySym keysym;
	XKeyEvent *kev;
	winwidget winwid = NULL;
@@ -383,13 +384,17 @@ void feh_event_handle_keypress(XEvent * ev)
	}

	kev = (XKeyEvent *) ev;
	unsigned long int kbuf_used = Xutf8LookupString(input_context, kev, (char *) kbuf, sizeof(kbuf), &keysym, NULL);
	if (input_context != NULL) {
		kbuf_used = Xutf8LookupString(input_context, kev, (char *) kbuf, sizeof(kbuf), &keysym, NULL);
	} else {
		kbuf_used = XLookupString(&ev->xkey, (char *) kbuf, sizeof(kbuf), &keysym, NULL);
	}
	if (kbuf_used < sizeof(kbuf)) {
		kbuf[kbuf_used] = 0;
	} else {
		kbuf[19] = 0;
	}
	D(("Xutf8LookupString set kbuf = %s, keysym = %08x\n", kbuf, keysym));
	D(("X(utf8)LookupString set kbuf = %s, keysym = %08x\n", kbuf, keysym));
	state = kev->state & (ControlMask | ShiftMask | Mod1Mask | Mod4Mask);

	if (ignore_space(keysym))
+2 −0
Original line number Diff line number Diff line
@@ -860,9 +860,11 @@ void winwidget_show(winwidget winwid)
		if (opt.full_screen)
			XMoveWindow(disp, winwid->win, 0, 0);

		if (input_context != NULL) {
			XSetICValues(input_context, XNClientWindow, winwid->win, NULL);
			//XSelectInput(disp, winwid->win, ButtonPressMask|StructureNotifyMask|KeyPressMask|KeyReleaseMask);
			XSetICFocus(input_context);
		}

		/* wait for the window to map */
		D(("Waiting for window to map\n"));