DirectFB作为GDK后端时,gtk_widget_show_all()的内部机制。

GTK+3.0加Glade3 编程时可能遇到的问题详解 LZ在写作业时,自己切身遇到的问题以及最终经过研究得出的解决方案。 所做实验的代码test.c如下: #include void on_mainLoginWindow_destroy(){ } int main(int argc, char *argv[]) {     GtkBuilder *builder;     GtkWidget *window;     g 阅读详情

 

 

下载一个gtk,directfb源码,

http://www.gtk.org/

http://www.directfb.org/

 

就可以分析出其复杂的饶人的重绘过程。

不少用GTK做程序的人,知道用gtk_widget_show_all来显示,内部的现实过程如果比较清楚,分析问题的能力应该会好点。

 

程序都是调用这个接口:

void

gtk_widget_show_all (GtkWidget *widget)

{

  GtkWidgetClass *class;

 

  g_return_if_fail (GTK_IS_WIDGET (widget));

 

  if ((GTK_WIDGET_FLAGS (widget) & GTK_NO_SHOW_ALL) != 0)

    return;

 

  class = GTK_WIDGET_GET_CLASS (widget);

 

  if (class->show_all)

    class->show_all (widget);

}

 

获取其class,然后调用其注册的show_all函数:

 

static void

gtk_widget_class_init (GtkWidgetClass *klass)

{

 ……

klass->show = gtk_widget_real_show;

  klass->show_all = gtk_widget_show;

  klass->hide = gtk_widget_real_hide;

  klass->hide_all = gtk_widget_hide;

  klass->map = gtk_widget_real_map;

  klass->unmap = gtk_widget_real_unmap;

  klass->realize = gtk_widget_real_realize;

  klass->unrealize = gtk_widget_real_unrealize;

 

 

把一个widget设置为可见,并且发送SHOW信号出去

void

gtk_widget_show (GtkWidget *widget)

{

  if (!GTK_WIDGET_VISIBLE (widget))

    {

      g_object_ref (widget);

      if (!GTK_WIDGET_TOPLEVEL (widget))

             gtk_widget_queue_resize (widget);

      g_signal_emit (widget, widget_signals[SHOW], 0);

      g_object_notify (G_OBJECT (widget), "visible");

      g_object_unref (widget);

    }

}

 

看这个SHOW信号的回调:

klass->show = gtk_widget_real_show;

 

static void

gtk_widget_real_show (GtkWidget *widget)

{

  if (!GTK_WIDGET_VISIBLE (widget))

    {

      GTK_WIDGET_SET_FLAGS (widget, GTK_VISIBLE);

 

      if (widget->parent &&

               GTK_WIDGET_MAPPED (widget->parent) &&

               GTK_WIDGET_CHILD_VISIBLE (widget) &&

               !GTK_WIDGET_MAPPED (widget))

             gtk_widget_map (widget);

    }

}

 

 

 

void

gtk_widget_map (GtkWidget *widget)

{

  g_return_if_fail (GTK_IS_WIDGET (widget));

  g_return_if_fail (GTK_WIDGET_VISIBLE (widget));

  g_return_if_fail (GTK_WIDGET_CHILD_VISIBLE (widget));

 

  if (!GTK_WIDGET_MAPPED (widget))

    {

      if (!GTK_WIDGET_REALIZED (widget))

             gtk_widget_realize (widget);

 

      g_signal_emit (widget, widget_signals[MAP], 0);

 

      if (GTK_WIDGET_NO_WINDOW (widget))

             gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE);

    }

}

 

 

如果一个widget没有被realize, 则先realize它。

 

 

 

所谓的realize: 就是给一个widget 创建一个

paip.解决 Gtk-CRITICAL **: IA__gtk_widget_show: assertion `GTK_IS_WIDGET (widget)' failed paip.解决 Gtk-CRITICAL **: IA__gtk_widget_show: assertion `GTK_IS_WIDGET (widget)' failed    作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.youkuaiyun.com/attilax  原因:  ///// 阅读详情

相关推荐

【Python】用GTK实现多文档窗体弹出对话框

6. 设置回调:将on_menu_new_activate和on_menu_dialog_activate两个回调函数分别关联到New菜单项和Open Dialog菜单项的"activate"信号上,当相应的菜单项被激活时,这些函数将会被调用。on_menu_new_activate:当用户点击“New”菜单项时调用,创建一个带滚动条的文本编辑器,将其添加为笔记本组件的一页,并为其生成一个“Untitled Document”的标签。方法,它负责创建一个包含标签文本和关闭按钮的水平布局(Gtk.Box)。

数字人生 1414

RAGFlow API 实战指南:从数据集管理到智能对话

本文提供了RAGFlow API的实战指南,详细介绍了如何从零开始构建基于检索增强生成(RAG)的智能应用。内容涵盖环境准备、API密钥获取、核心概念理解,以及通过API进行数据集创建与管理、文档上传解析、知识块管理、检索测试,最终创建并配置智能聊天助手,实现基于私有知识库的精准对话。

weixin_29284885的博客 380

Xilinx-复旦微-FPGA-眼图BlockDesign系统制作-针对PCIE系统

XIlinx-复旦微电子-FPGA-眼图BlockDesign系统制作-针对PCIE系统,手把手教你如何建立眼图测试

weixin_43444334的博客 2598

使用循环神经网络预测温度

简介 本文以天气时间序列数据集为例,讨论如何使用深度学习模型预测未来天气温度。 使用的是由德国耶拿马克思普朗克生物地球化学研究所的气象站记录。 数据每10分钟记录一次,共记录14种不同的量,如气温、气压、湿度、风向等,原始数据可追溯到2003年,本例只使用2009-2016年的数据。 数据 下载并解压数据略。 加载数据: data_dir = r'E:\practice\tf2\temperature' fname = os.path.join(data_dir, 'jena_climate_2009_

guotianqing的博客 5282

在LangChain中使用DashVector进行高效向量检索

DashVector为需要处理高维向量数据的开发者提供了一种便捷且高效的解决方案。通过将其集成到LangChain生态系统中,您可以轻松实现复杂的语义搜索和数据分析功能。DashVector官方文档LangChain GitHub仓库有关DashVector的详细notebook示例。

sjufgwgfhoia的博客 456

从ADS到HFSS:耦合线带通滤波器的设计与模型转换实战

本文详细介绍了耦合线带通滤波器的完整设计流程,重点阐述了从ADS电路级快速优化到HFSS三维电磁场精确验证的模型转换实战方法。通过对比ADS理想模型仿真与HFSS全波仿真结果,指导读者进行参数校准与迭代优化,并分享了关键的板材选择、加工误差及端口设置等避坑指南,确保设计性能与实物测试高度一致。

weixin_29290863的博客 345

软件工程案例教程·韩万江【课后习题】

!!!!

weixin_57858263的博客 6419

【学习系列】SAP RAP 22:Excel文件上传和读取(非扩展&扩展方式)

本文介绍了在RAP中实现Excel文件上传处理的三种方法:1) 使用@Semantics.largeObject注解实现简单上传下载,但限制在ObjectPage页面使用;2) 通过自定义action弹窗实现上传功能,但存在无法自动刷新列表等限制;3) 结合CustomUIExtension实现更灵活的完整功能,但需要UI5开发技能。文章详细说明了每种方法的实现步骤,包括数据库表设计、注解配置、前端界面开发和后端处理逻辑,并比较了各自的优缺点。最后通过一个处理不同币种数据的示例,展示了如何实现业务处理逻辑。

DeveloperMrMeng的博客 625

ShardingSphere 5.3 系列Spring 配置升级指南 | Spring Cloud 47

在 `5.3.0` 版本以前,`ShardingSphere-JDBC` 同时支持 `Java API`、`YAML`、`Spring Boot Starter` 和 `Spring Namespace` 等配置方式。 - 当新增或更新 API 时,需要调整多项配置文件,工作量大 - 社区需要维护多重配置文档和示例 - `Spring Bean` 生命周期管理容易受到项目其他依赖的影响,比如 `PostProcessor` 无法正常执行 - `Spring Boot Starter` 和 `Spring N

gmHappy 2万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: Android SDK 1.0 Chn.
下一篇: GDK事件与GTK signal的前世今生
testhw
博客等级 码龄19年 172粉丝 183原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值