Author Archives: csslayer
Kimpanel for Gnome Shell Update
地址在此 https://extensions.gnome.org/extension/261/kimpanel/ 不过更新应该还在审核中,可以自己去: https://github.com/csslayer/kimpanel-for-gnome-shell/ 抓代码,执行 ./install.sh 即可安装。 那么有什么更新呢?其实也都是一些基本功能的更新。那么有视频有真相。 https://github.com/csslayer/kimpanel-for-gnome-shell/
Accidental Key Theme Support
一个意外收获。当初虽然没有这么想过,不过意外的有了实现个功能的办法。苦恼Fcitx没法使用Emacs按键绑定的可以试试。 由于最初一些实现本来就不是设计来做这个功能的,因此只有部分输入法支持这个功能,支持的输入法大概包括码表,自带拼音,Libpinyin,Chewing,Google Pinyin。Sunpinyin不支持。 代码的地址在这里,使用时自担风险。安装方法和一般编译安装 Fcitx 的模块方法一样。 https://github.com/yuyichao/fcitx-keytheme 使用上就是可以用于覆盖Fcitx的一些标准按键,需要自行配置。 感谢 @yuyichao
My Gtk Tutorial 4
其实说到这里,我才发现,你可能压根还不知道如何开始一个项目。 当然最简单的办法之一,就是让半残的anjuta替你建立一个gtk项目的skeleton,然后把他扔一边,继续用你的vim,emacs去。 不过在这么多年之后,其实我已经不会写autotools的代码了,那么下面我就无聊来介绍下怎么用CMake和Gtk。 关于我曾经的CMake介绍,可以参考这里。 https://www.csslayer.info/wordpress/category/cmake/ 有些人喜欢录视频写代码?这次录个视频好了。 代码下载: gtk_test.tar.gz P. S. 也许这篇文章会勾引出一些严重的autotools粉,例如啊glib/gtk的项目都是用autotools啊,glib/gtk项目用autotools集成好啊。我用了这么多年现在早忘了autotools 怎么写了,我写不出来,就这样。 构建脚本用什么写都没本质差别。照样有人用cmake生成GObjectIntrospection(附注:第一个这么干的当然不是我)。
My Gtk Tutorial 3
所谓的具体类的实现,其实这个Widget功能不得不说是Gtk里面缺少的功能,虽然其实Qt里面也没,不过我在写代码的时候可以没什么顾虑的用 KDE 提供的 UI 库,于是我又爽了。 这次的Widget就是一个捕获快捷键用的Widget,具体里面代码的实现我是当初从ccsm(compiz那个配置工具)里面的python代码翻译过来的,啊一想起那个青涩的年代…… 相信这是个人民群众喜闻乐见的Widget。 原理很简单,本身是一个button,button按下时显示一个window,window负责捕捉按键,捕捉到的按键再存起来。 当然我的实现里面使用了一些Fcitx自己的parse和toString的函数,你当然建议使用GtkAccelerator的方式 来进行parse(如果你需要字符串的话)。 https://github.com/fcitx/fcitx-configtool/blob/master/gtk3/keygrab.h https://github.com/fcitx/fcitx-configtool/blob/master/gtk3/keygrab.c 具体的实现就是上面的代码(于是我还看到当初有些蛋疼的注释……) 首先就是我继承了一个GtkButton,定义了一个Signal,触发按键在变化时的事件。 gtk_widget_set_size_request(GTK_WIDGET(keygrabbutton), 150, -1); g_signal_connect(G_OBJECT(keygrabbutton), “clicked”, (GCallback) begin_key_grab, NULL); 按键创建时,绑了一个signal给clicked事件,用来显示一个popup。 在clicked里面的回调函数中。 KeyGrabButton* b = KEYGRAB_BUTTON(self); b->popup = popup_new(GTK_WIDGET(self), _(“Please press the new key combination”), FALSE); … Continue reading
My Gtk Tutorial 2
我写这些其实我真的自己都不看的,有用还是没用只有我唯一的那个目标读者来评价。 那么我们来无聊的介绍下Gtk的一些Widget。 1、GtkBox 和 Qt 不同的是,Gtk一般实现一个自己的Widget,都是从一个具体的Widget而不是general的GtkWidget 开始的,其中很多则又是选择了 GtkBox。 当然这里所说的实现一个具体的Widget不是指连draw事件都override的那种widget,而是一组widget的组合,例如文件对话框这种。那么具体实现的时候只要找好你要的那个顶层的Widget作为基类就行了。 曾经的 GtkHBox 和 GtkVBox 已经成为了历史,取而代之的是以一个横纵作为属性的 GtkBox。 一般而言,任何你想要的复杂的布局都可以用GtkBox来实现,一个技巧就是占位符,看起来Gtk里面并没有Qt的Spacer这种专门的占位符,一般用来占位的就是GtkLabel。 例如你希望实现一个上下顶头有Widget的东西,中间是空的,那么你可以new一个Vertical的GtkBox出来,然后使用 gtk_box_pack_start 往里面扔东西。中间用一个GtkLabel来撑开位置。 2、大小 写UI控件最头疼的事情是什么?是大小。说他们的定位难度堪比HTML也不为过。尤其是在你没注意到的时候你把你的窗口设置成为可拖拽,或者进行i18n后出现了一些惨烈的情况(单从语言来说,同一个词,一般汉语最短,英语次之,某些西语会长的要命)。 不过在Gtk3中,GtkWidget终于增加了expand,align,这些用来标明Widget本身的大小和位置属性。 这下终于要谢天谢地了?哦,其实没有,如果你的界面够复杂你可能还是想要掀桌(不过如此的话你是不是应该先考虑下你的设计?),不过也比Gtk2时代好的多就是了。 在处理大小时要考虑到你在进行i18n之后界面可能产生的变化…… 处理大小时,GtkBox的默认是参考内部的Widget的属性来确定的,而Gtk2的兼容类GtkHBox,GtkVBox还默认并非如此。 总之这两个属性也不难理解,就是给你一个较大的空间。你的Widget是保持较小状态,还是填满整个区域?是如何在这个区域内进行对齐的? 3、来实现个Widget吧 如果你了解GObject的继承,那么这一步对你来说基本是没有难度的。 如果你不了解GObject的继承,还是去看别的文章吧…… http://garfileo.is-programmer.com/categories/6934/posts C语言模拟继承是采用了一个非常简单的方式,就是struct的嵌套,在所有模拟继承关系的代码中都采用了这样的方式,这样做的好处就是你可以强制转换子类的指针为基类的指针。 struct Derived { Parent parent; }; 这样你就可以简单的去访问parent的值了。至于如何实现private,这里也简单说下。 struct Derived … Continue reading
