LINUX.ORG.RU

FVWM, MuPDF - NoClass, NoResource

 ,


0

1

Добрый день. Установил mupdf. Там два бинарника mupdf-x11, mupdf-gl. Открываю pdf-ку с помощью mupdf-x11. В свойствах окна Class: mupdf, Resource: MuPDF. Используя это, установил иконку

 Style  mupdf         EWMHMiniIconOverride, MiniIcon $[fvwm_icon]/mupdf.png 
Если открываю с помощью mupdf-gl то в свойствах окна вижу Class: NoClass, Resource: NoResource. В панели открытый файл не имеет иконки и установить ее как нить так
 Style  mupdf-gl      EWMHMiniIconOverride, MiniIcon $[fvwm_icon]/mupdf.png
игнорируется. В гугле нашел, что такое бывает если не определен параметр WM_CLASS. Оба бинарника компилятся одновременно, но почему то один идентифицируется, другой нет. Как это можно победить?

Нашел в чем проблема, отпишусь, может кому поможет. Переменные wm_class и wm_resource назначаются при компилляции. Почему-то разработчики включили их в компилляцию mupdf-x11, но не включили в mupdf-gl. Вот здесь обсуждалась возможность изменения кода до компилляции, но сколько я не пробовал, не работает. Выдает ошибку, что переменные не определены. FVWM использует wm_class и wm_resource для идентификации окна. Поэтому проблему нельзя решить, без включения этих параметров в компилляцию. Ну собственно обойдусь и без иконки в трее. mupdf-gl хорош тем, что может вносить коментарии в pdf, а mupdf-x11 нет.

rustamych ★★★
() автор топика

Нашли решение проблемы (товарищь программист помог). Надо изменить код в файле thirdparty/freeglut/src/x11/fg_menu_x11.c пакета mupdf до компилляциии. А именно

1) После определения функции fgPlatformOpenWindow надо включить XClassHint *classhint; . Весь блок такой

void fgPlatformOpenWindow( SFG_Window* window, const char* title,
                           GLboolean positionUse, int x, int y,
                           GLboolean sizeUse, int w, int h,
                           GLboolean gameMode, GLboolean isSubWindow )
{
    XClassHint *classhint;

2) После XSetWMProtocols добавить:

classhint = XAllocClassHint(); 
	if (classhint)
	{
		classhint->res_name = "mupdf";
		classhint->res_class = "MuPDF";
		XSetClassHint(fgDisplay.pDisplay.Display, window->Window.Handle, classhint);
		XFree(classhint);
	}
Таким путем можно присвоить свой class для mupdf-gl просто исправив код выше.

rustamych ★★★
() автор топика