以下代码如何去除窗口边框?
//note the struct is declared elsewhere, is here just for clarity.
//code is from [http://tonyobryan.com/index.php?article=9][1]
typedef struct Hints
{
unsigned long flags;
unsigned long functions;
unsigned long decorations;
long inputMode;
unsigned long status;
} Hints;
//code to remove decoration
Hints hints;
Atom property;
hints.flags = 2;
hints.decorations = 0;
property = XInternAtom(display, "_MOTIF_WM_HINTS", true);
XChangeProperty(display,window,property,property,32,PropModeReplace,(unsigned char *)&hints,5);
XMapWindow(display, window);
到目前为止,我了解到 Atom 是一种类似于 Window 和 Display 的标识符,但我无法弄清楚 Hints 结构或“_MOTIF_WM_HINTS”来自何处。谁能为我解释所有这些代码?提前致谢,嗯。
最佳答案
很难找到任何一种看起来像“官方”的标准,但是 _MOTIF_WM_HINTS 属性似乎确实来自... Motif 工具包(好吧,你 猜对了:-))。 参见 the MotifZone site .
警告:以下内容不完整,但我希望能说明一些问题。
XmNmwmDecorations、XmNmwmFunctions 和 XmNmwmInputMode 的文档 工具包的功能表明该属性是各种位掩码 用于控制外观、功能(调整大小、移动...)和输入的值 窗口管理器应该提供/给窗口的模式。 参见 man vendorshell , 或 Oreilly Motif reference books, Vol6a chapter 16 .
属性是整个 X11 事物的一部分。一个窗口可以有任意数量的 其上定义的属性。属性有名称,但设置/获取 属性是通过“原子”(各种标识符)完成的,以避免发送 每次 get/set 调用的整个字符串。 参见 Properties and Atoms
当前窗口管理器(如果有的话)可以对窗口属性使用react 通过设置适当的事件过滤器并作用于 PropertyNotify 来改变 事件,或者简单地检查窗口在被映射(或移动,或其他)时所具有的属性。如果窗口管理器知道 _MOTIF_WM_HINT 属性,它会 解释那些并(希望)做你想做的事。 (注意:我不确定该特权是否已下放到窗口 经理,或者其他窗口是否可以收听那些“PropertyNotify”事件。不是 确保这实际上与您的问题相关。)
所以只要您的窗口管理器知道,您的代码就可以正常工作 关于 _MOTIF_WM_HINTS 属性。
你从获取原子开始 (标识符/快捷方式)使用 XInternAtom,并通过 XChangeProperty() 设置它的值 在窗口实际通过 MapWindow() 绘制之前(不确定是否会 如果您在 MapWindow() 之后执行此操作,则可以工作,这可能取决于您的窗口 经理)。
[编辑:将 .decorations 部分设置为零会清除所有装饰位,因此这基本上要求窗口管理器让您的边界不受干扰。]
我无法在某处“官方”提出该结构的定义。它在 openmotif-2.3.3 发行版的 lib/X11/MwmUtils.h 中定义。不确定 .flags 条目是如何使用的(找不到我一生的代码 :-/)但我怀疑它用于指示您使用的是 {decoration, function, inputMode} “子属性”中的哪一个作用于。 (不要相信我的话。)
作为旁注,使用 _MOTIF_WM_HINTS 可能不是您的最佳选择,对吧 现在。你看过Extended Window Manager hints specification了吗?以及 freedesktop 上的其他信息/标准/草案?我敢打赌大多数“现代”窗口管理器/桌面环境/厨房水槽将倾向于遵守这一点,而不是保持与 Motif 的向后兼容性。我想这一切都取决于您要编写的代码。
感谢阅读:-)
关于c++ - Xlib 这个(去掉窗饰)是怎么工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5134297/
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
所以我开始关注ruby,很多东西看起来不错,但我对隐式return语句很反感。我理解默认情况下让所有内容返回self或nil但不是语句的最后一个值。对我来说,它看起来非常脆弱(尤其是)如果你正在使用一个不打算返回某些东西的方法(尤其是一个改变状态/破坏性方法的函数!),其他人可能最终依赖于一个返回对方法的目的并不重要,并且有很大的改变机会。隐式返回有什么意义?有没有办法让事情变得更简单?总是有返回以防止隐含返回被认为是好的做法吗?我是不是太担心这个了?附言当人们想要从方法中返回特定的东西时,他们是否经常使用隐式返回,这不是让你组中的其他人更容易破坏彼此的代码吗?当然,记录一切并给出
给定以下方法:defsome_method:valueend以下语句按我的预期工作:some_method||:other#=>:valuex=some_method||:other#=>:value但是下面语句的行为让我感到困惑:some_method=some_method||:other#=>:other它按预期创建了一个名为some_method的局部变量,随后对some_method的调用返回该局部变量的值。但为什么它分配:other而不是:value呢?我知道这可能不是一件明智的事情,并且可以看出它可能有多么模棱两可,但我认为应该在考虑作业之前评估作业的右侧...我已经在R
我在我的Rails3示例应用程序上使用CarrierWave。我想验证远程位置上传,因此当用户提交无效URL(空白或非图像)时,我不会收到标准错误异常:CarrierWave::DownloadErrorinImageController#createtryingtodownloadafilewhichisnotservedoverHTTP这是我的模型:classPaintingtrue,:length=>{:minimum=>5,:maximum=>100}validates:image,:presence=>trueend这是我的Controller:classPaintingsC
使用Ruby1.9.2运行IDE提示说需要gemruby-debug-base19x并提供安装它。但是,在尝试安装它时会显示消息Failedtoinstallgems.Followinggemswerenotinstalled:C:/ProgramFiles(x86)/JetBrains/RubyMine3.2.4/rb/gems/ruby-debug-base19x-0.11.30.pre2.gem:Errorinstallingruby-debug-base19x-0.11.30.pre2.gem:The'linecache19'nativegemrequiresinstall