Tag: gdk

GDK信号,按键和按键掩码

我试图抓住用户键在GUI窗口上按Ctrl + d退出。 我的代码如下所示: static gboolean callback(GtkWidget *widget, GdkEventKey *event, gpointer data) { if(event->state == GDK_CONTROL_MASK && event->keyval == ‘d’) gtk_main_quit(); return FASLE; } 这适用于我的笔记本电脑(Ubuntu 11.04,gcc 4.5.2,libgtk 2.24.4)。 但是当我在一个较新的系统(Ubuntu 12.10,gcc 4.7.2,libgtk 2.24.13)上做同样的事情时,它不起作用。 我添加了g_print(“%u\n”, event->state); 在if语句之前,它显示当我按下Ctrl ,文档中的event->state为20而不是4或1 << 2。 如果我将GDK_CONTROL_MASK更改为20,它适用于较新的系统,但不适用于较旧的系统。 有人请告诉我为什么会发生这种情况以及如何解决这个问题。

如何在C中获取gtk窗口的gdk窗口?

我正在尝试将光标设置为手表。 问题是gdk_set_cursor()需要一个gdk_window。 如何在C中获取gtk_window的gdk_window? 我见过gtkmm和pygtk的例子,但我找不到相应的C函数。

使用Gnome库(GDK)获取键盘修饰符状态仅获取初始状态

我试图通过gnome GDK或GTK库来获取当前的键盘修饰符状态,目的是实现显示该状态的可访问性gnome shell扩展。 我知道如何使用xlib获得状态,但是gnome gjs没有完全绑定。 下面的代码只获得初始状态。 它不会更新状态。 /* * compiling: gcc `pkg-config –cflags gdk-3.0` -o gdk_mod gdk_mod.c `pkg-config –libs gdk-3.0` */ #include int main (int argc, char **argv) { gdk_init(&argc, &argv); GdkDisplay * disp; disp = gdk_display_open(NULL); if (disp!=NULL) g_printf(“display connected!\n”); GdkKeymap * kmap; kmap = gdk_keymap_get_for_display(disp); guint state; state = gdk_keymap_get_modifier_state(kmap); g_printf(“mod state: %x\n”, […]

GTK3和multithreading,取代已弃用的function

我想在我的使用线程的应用程序中替换已弃用的函数gdk_threads_enter()/leave() 。 现在的应用程序,工作完美( 虽然我不确定这是否是正确的方法 )。 我的主循环,运行gtk_main和信号处理程序。 当我收到一个开始按钮时,我启动一个在主要背景中运行的线程。 如何从该线程更新GUI。 我知道根据GTK3和GDK3的文档,他们说通过使用避免它 gdk_threads_add_idle() 要么 gdk_threads_add_timeout() 但是,如果我希望仅在单击开始时才进行更新,我该怎么做呢? 有什么例子吗? 我不是问如何使用gdk_threads_add_idle() ,我问的是如何在单击start后没有线程的情况下在main中运行worker函数。 单击按钮 – >在先前的线程中启动工作器function – >在GUI窗口中更新大量的GUI元素。