我的一个新的家庭项目将是一个简单的窗口管理器,但在开始之前我需要知道一些事情:
我想创建一个简单的堆栈窗口管理器(in C)供私人使用,主要是为了学习和挑战自己.
我查看了twm源代码相对较少的铃声和口哨,但它似乎非常低,因为它不是基于小工具工具包.1使用GTK +等工具包会更好吗?我担心一些代码和库twm可能过于陈旧(编辑:不推荐),我希望窗口管理器使用相对现代的库.为了便于理解,我也对如何从头开始一个窗口管理器的建议感兴趣 - 没有很多教程可以用于此目的.
更新:对于那些考虑类似项目的人:我最终使用了Common Lisp和CLX库.tinywm-lisp作为基础,辉煌的CLFSWM和Stumpwm是一个很好的帮助.作为参考,我使用了CLX - Common LISP X接口(PDF警告)和#xlibFreenode.
我是一名学生,他做了一些网络内容和一些命令行应用程序,现在尝试使用GUI.我读了http://python-gtk-3-tutorial.readthedocs.org/en/latest/layout.html,我偶然发现了这句话:
由于GTK +现在支持客户端装饰,因此可以使用Gtk.HeaderBar代替标题栏(由窗口管理器呈现).
有人可以解释一下"客户端装饰"是什么吗?
从阅读http://blogs.gnome.org/mclasen/2014/01/13/client-side-decorations-continued/我会猜到"客户端装饰"就像主题一样.有人可以解释一下窗口管理器如何与GTK +交互?为什么称它为" 客户端装饰"?什么是服务器端装饰?(或其他类型的装饰?)
void MainWindow::on_actionAlways_on_Top_triggered(bool checked)
{
Qt::WindowFlags flags = this->windowFlags();
if (checked)
{
this->setWindowFlags(flags | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint);
this->show();
}
else
{
this->setWindowFlags(flags ^ (Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint));
this->show();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的解决方案有效,但因为setWindowFlags隐藏了窗口,所以需要重新显示它,当然看起来并不优雅.那么如何在没有"闪烁"副作用的情况下为QMainWindow切换"永远在线"?
是否有可能以编程方式获取Window上当前处于活动状态的标志?
我们可以启用标志:
Run Code Online (Sandbox Code Playgroud)getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
api是否提供了获取当前活动标志列表的方法?谢谢
是否有命令告诉compiz我们想要将焦点放在前面并将焦点设置到特定窗口?我们该如何识别该命令中的窗口?
这个问题背后的原因是以下用例:
假设我们有一个wiki来记录我们发现的任何有趣的东西.使用键盘快捷键将浏览器窗口与我们的Wiki页面放在前面并立即开始键入然后使用另一个组合键切换到我们之前工作的应用程序将非常方便
我知道ALT+ TAB在最后两个使用的窗口之间切换,但不能支持更复杂的应用程序组合.例如Browser + Eclipse + Wiki
如果有一个像上面描述的那样的命令,很容易从KDE或GNOME界面添加一个快捷方式
更新到Chrome 58后,我注意到在恢复最小化窗口或打开新窗口(Ctrl + N)时出现了新的"缩放淡入淡出"效果.这感觉非常不必要,并且 - 在我的桌面环境中 - 完全不合适.
有没有办法永久禁用所有窗口动画效果?
如何在Qt中正确实现"最小化托盘"功能?
我在里面尝试了以下代码QMainWindow::changeEvent(QEvent *e),但是窗口只是最小化到任务栏,并且客户端区域在恢复时显示为空白.
if (Preferences::instance().minimizeToTray())
{
e->ignore();
this->setVisible(false);
}
Run Code Online (Sandbox Code Playgroud)
试图忽略该事件似乎也没有做任何事情.
我正在尝试写一个窗口管理器.(实际上,我已经编写了一个操作系统和编译器,但这不是重点.)
XLib和xcb并不是完全令人讨厌的,至少不是因为win32标准,但它们肯定是非常古老的,并且不能很好地利用体面的抽象来让我的生活变得更轻松.不仅如此,但现代高级语言明显缺乏良好的绑定.
我的问题是:这几天所有这些低级别的东西真的很必要吗?是否存在能够为我封装所有令人讨厌的东西的库?我有一个模糊的记忆,启蒙人已经做过这样的事情,却找不到任何东西.或者像GDK这样的现代小部件库是否具有足够的功能,我不需要触及Xlib层?
任何带有Java绑定的库都特别有意义......
有没有办法用WindowManager使用Animation(在android的项目中)给视图充气?即使使用网站中的示例,我也无法做到!我用了很多例子,但都没有用!
public BannerLayout(Activity activity, final Context context) {
super(context);
this.context = context;
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.popupLayout = (RelativeLayout) inflater.inflate(R.layout.popup_activity, null);
this.popupLayout.setVisibility(GONE);
this.setActive(false);
wm.addView(this.popupLayout, params);
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
private void show(){
Animation in = AnimationUtils.loadAnimation(this.context, android.R.anim.fade_in);
this.popupLayout.setAnimation(in);
this.setActive(true);
this.popupLayout.setVisibility(VISIBLE);
}
Run Code Online (Sandbox Code Playgroud)