标签: motif

没有实现类程序的定义

我只是想分享一下我是如何找到错误的解决方案的

没有实现类程序的定义

运行X/Motif C应用程序时.我发布这个是因为我在网上搜索时只发现了一个对此问题的引用,并且它没有包含任何解决方案.

我设法解决了这个问题,如果你再次遇到这个问题,我想分享我的发现(注意:我不是说我的解决方案总能解决这类错误).

问题

我在运行使用Motif和X Intrinsics工具包的简单C程序时发现了这个问题.

$ gcc -Wall -c push.c
$ gcc -Wall -o push push.o -lXt -lXm
$ ./push
Error: No realize class procedure defined
Run Code Online (Sandbox Code Playgroud)

C源代码如下:

#include <stdio.h>
#include <Xm/Xm.h>
#include <Xm/PushB.h>

/* Prototype Callback function */
void pushed_fn(Widget, XtPointer, XmPushButtonCallbackStruct *);

int main(int argc, char **argv)
{
  Widget top_wid, button;
  XtAppContext  app;
  Display* display;

  XtToolkitInitialize();
  app = XtCreateApplicationContext();
  display = XtOpenDisplay(app, "localhost:10.0","push","push", NULL,0, &argc,argv);
  top_wid = XtAppCreateShell(NULL, "Form", applicationShellWidgetClass, display, NULL, …
Run Code Online (Sandbox Code Playgroud)

c x11 gcc motif ld

31
推荐指数
1
解决办法
1437
查看次数

特定于语言环境的XFontSet扩展

在我的Motif应用程序中(源代码在这里,需要Motif 2.1 +(-lXm -lXt -lX11)和C99兼容的编译器;在Cygwin上应另外链接-liconv),我正在尝试XFontSet从与编码无关的XLFD转换为实例(如-monotype-arial-medium-r-normal--*-90-*-*-p-0-*-*)被正确地扩展到多个单独的XFontStruct条目(...-iso8859-1,...-iso8859-5,...-iso10646-1等)相匹配的当前区域.

我发现在某些语言环境(en_US.UTF-8,ru_RU.ISO-8859-5)中,XFontSet扩展可以完美地工作,而在其他语言环境中(ru_RU.UTF-8,ru_RU)它不会(字体集中不适当的单个字体),导致除了Latin-1平面中的字符以外的字符呈现不正确.

问题:

  1. 如何排除Motif或X11客户端库(libXt,libX11)作为主要嫌疑人?
  2. 特别是,(如何)我可以使用字体集(XFontSet)而不是常规字体(XFontStruct)显示文本标签而不依赖于Motif - 理想情况下使用Athena小部件集?
  3. 说到普通的libX11API,我的理解是否正确我应该尝试使用XmbDrawString()和XwcDrawString()系列函数?

如果您有其他评论.代码,不直接回答上述问题,但可以帮助追踪问题 - 欢迎这些.


TL; DR版本

我特别感兴趣的是,无论当前的语言环境如何,都能正确显示Cyrillic,前提是:

  • X11支持语言环境
  • 西里尔语可以在当地的字符集中表现出来.

这给我留下了以下语言环境列表:

  • ru_RU;
  • ru_RU.ISO-8859-5 (应与ru_RU相同,但不是,见下文);
  • ru_RU.KOI8-R;
  • ru_RU.CP1251;
  • ru_RU.UTF-8;
  • en_US.UTF-8以及任何xx_YY.UTF-8 …

c x11 fonts localization motif

7
推荐指数
0
解决办法
174
查看次数

将应用程序嵌入窗口

FvwmButtons(fvwm窗口管理器的一个模块)具有Swallow功能,它将应用程序的窗口嵌入到面板中.

我必须使用Motif和Xlib做这样的事情.我想在我的应用程序中嵌入一个Xclock.我想我必须更改嵌入式应用程序的Window ID.

我怎样才能做到这一点?

unix linux x11 motif xlib

6
推荐指数
1
解决办法
1913
查看次数

MOTIF编译错误/ X11 / intrinsic.h丢失

我已经安装了X11
的MOTIF,一个简单的程序另存为hello.c。
有以下消息
,我可以从哪里获取X11 / intrinsic.h文件?
需要帮助来编译
我的系统:MX-16 Linux Debian Jessie / i386

码:

hans@mx1:~/Documents
$ cc push.c -o push -lXm -lXt -lX11
In file included from push.c:2:0:
/usr/include/Xm/Xm.h:59:27: fatal error: X11/Intrinsic.h: No such file or directory
 #include <X11/Intrinsic.h>
                           ^
compilation terminated.
hans@mx1:~/Documents
Run Code Online (Sandbox Code Playgroud)

c debian motif

6
推荐指数
2
解决办法
6752
查看次数

禁用Motif拖放功能

我在X/Motif中开发了一个应用程序,它具有与工具包提供的标准拖放功能相关的性能问题.我已经通过设置XmDRAG_NONE资源在用户界面级别禁用了拖放协议:

  • dragInitiatorProtocolStyle:XmDRAG_NONE
  • dragReceiverProtocolStyle:XmDRAG_NONE

这有效地禁用了拖放HMI标准功能,但每次窗口小部件(如XmText(或其他具有拖放功能)的窗口小部件由应用程序实例化时,继续在根窗口中创建与此功能相关的属性/原子'(在_MOTIF_DRAG_WINDOW中).

  • 有没有办法强制完全禁用拖放?

  • 如果没有,有没有办法安全地删除根窗口中的拖放属性/原子?

提前致谢.

motif

5
推荐指数
0
解决办法
126
查看次数

如何将DDD和Insight中的Motif主题更改为更令人愉快的东西?

我安装了Tk版本8.5.3,自8.5以来添加了引擎支持.不过,我不知道如何使用主题,默认的Motif只是丑陋:

截图

tk-toolkit motif insight ddd-debugger

5
推荐指数
1
解决办法
2608
查看次数

需要一些关于从Motif迁移到Gtk的建议

我正在做一个关于将遗留GUI程序从Motif迁移到Gtk的项目.源代码很长(大约80k行).现在我有两个计划:

  1. 只需找到Motif函数和Gtk的相应关系.然后编写一些脚本来自动执行此转换.当然,这不能100%自动完成,需要手动工作.
  2. 从源代码返回GUI程序的体系结构.构建一个树状结构,然后根据结构使用Gtk重新构建程序.

关于这两个计划,请给我一些建议.任何想法或想法也受到热烈欢迎.

c x11 gtk motif legacy-code

5
推荐指数
1
解决办法
545
查看次数

如果忽略X11 BadWindow错误会怎样?

我有一个20世纪90年代早期编写的遗留Motif应用程序(我无法在QT中重写UI,甚至无需经过耗时的安全评估即可广泛修改应用程序).这个应用程序曾经在AIX上运行,它在密集使用下运行了几个星期并且稳定了.我们现在已将其移植到Linux.在长时间持续的Beta测试期间,应用程序每周大约崩溃一次,并显示以下消息.

请求失败的错误:BadWindow(窗口参数无效)
失败请求的主要操作码:4(X_DestroyWindow)

我已经了解到,使用自定义X11错误处理程序可以忽略这些错误(默认的X11错误处理程序只打印错误消息并退出),如下所示:

http://motifdeveloper.com/tips/tip29.html

我已经实现了一个自定义X11错误处理程序,它忽略了BadWindow错误,如该文章所述.所以我的问题是:对于X11开发和X服务器的内部工作有更多了解的人可以告诉我BadWindow错误是否真的可以被忽略吗?

PS我将尝试通过在同步模式下运行我们的应用程序来进一步调试,但这很慢,因为我无法按需重现此错误.有关调试BadWindow错误的任何提示也将不胜感激.

linux x11 error-handling aix motif

5
推荐指数
2
解决办法
4379
查看次数

OpenGL SuperSampling抗锯齿?

在办公室,我们正在使用旧的GLX/Motif软件,该软件使用OpenGL的AccumulationBuffer实现抗锯齿以保存图像.我们的问题是Apple从其所有驱动程序中删除了AccumulationBuffer(从OS X 10.7.5开始),而某些Linux驱动程序(如Intel HDxxxx)也不支持它.

然后我想更新软件的抗锯齿代码,使其与大多数实际操作系统和GPU兼容,但保持生成的图像像以前一样漂亮(因为我们需要它们用于科学出版物).

SuperSampling似乎是最古老,质量最好的抗锯齿方法,但我找不到任何不使用AccumulationBuffer的SSAA示例.是否有不同的方法来实现OpenGL/GLX的SuperSampling ???

opengl motif glx

5
推荐指数
0
解决办法
1815
查看次数

集成 XCB 和 libX11 事件循环 - 挂在 Xt 内的选择/轮询上

我试图将两个代码体集成到同一个进程中,每个进程以前都为各自的 GUI 工具包提供独立的事件循环——其中一个使用 Xt,另一个使用 Qt5。目的只是为了能够显示 Qt 子窗口,而不是像现在已经不复存在的 Qt/Motif 集成扩展那样实现完全集成。

我已经能够构建一个使用标准 Qt 事件循环运行的粗略原型,带有将 XCB 事件转换为 XEvents 的本机事件过滤器(使用 XESetWireToEvent + 其处理程序从 xEvents / X11 线格式转换)。然后它使用 XtDispatchEvent() 将这些 XEvent 直接分派到 Xt。此时,我可以运行该程序,并在同一个程序中创建 Xt/Motif 小部件和 Qt 小部件,使用菜单,绘制 2D 图形,并同时使用 Qt 和 Motif 小部件。

我遇到的问题是,在创建新的 Motif 对话框时会有很长的延迟。我已经将其追溯到 libXt 中的 _XtWaitForSomething(),最终归结为 X 服务器连接套接字上的 select() 或 poll()。对 _XtWaitForSomething() 的调用是 XtManageChild() 内部发生的窗口布局管理的结果。_XtWaitForSomething() 似乎正在检查事件队列中是否有待处理的事件。

我有几个问题:

  1. 当在同一个程序中同时使用 XCB 和 libX11 调用(使用 XCB 作为事件队列主控器)时,我是否可以期望来自经典 Xlib 的调用也能正常工作——例如通过 libX11 调用将事件发布到 XCB 事件队列,或者确定是否有通过旧的 libX11 调用在 XCB 事件队列中挂起的任何事件?

  2. 为什么 XtManageChild() 最终会阻塞 libXt 中的 _XtWaitForSomething()?看起来它可能正在等待几何更改事件。有趣的是,Qt 的平台层在单独的线程中读取 XCB …

x11 events qt motif xcb

5
推荐指数
1
解决办法
952
查看次数

如何在Motif中使用颜色

我是C和Linux中GUI编程的新手,我很难用它.这似乎是一个相当简单/直接的事情,但我找不到任何谷歌搜索的答案.我想为窗口小部件添加背景颜色.XmNbackground似乎是我想要使用的,但是我不明白我设置的是什么,就像一个简单的蓝色,我怎么得到"蓝色"来设置XmNbackground颜色呢?

c++ x11 user-interface motif

2
推荐指数
1
解决办法
1043
查看次数

标签 统计

motif ×11

x11 ×7

c ×4

linux ×2

aix ×1

c++ ×1

ddd-debugger ×1

debian ×1

error-handling ×1

events ×1

fonts ×1

gcc ×1

glx ×1

gtk ×1

insight ×1

ld ×1

legacy-code ×1

localization ×1

opengl ×1

qt ×1

tk-toolkit ×1

unix ×1

user-interface ×1

xcb ×1

xlib ×1