【转】gtk_object_sink的妙处

Ubuntu 26.04 Wayland下应用全屏失效的深度解析与实战解决方案 如果你在 Ubuntu 26.04 上运行某个应用,明明点了“全屏”,却发现顶部的标题栏、任务栏或系统状态栏依然顽固地显示着,这绝对不是一个孤立的体验。无论是播放视频、演示幻灯片,还是沉浸式游戏,这种“伪全屏”状态不仅破坏了视觉完整性,更打断了工作流和专注度。问题的根源,往往不在于你的操作,而在于 Ubuntu 桌面环境底层显示协议的一次重大变迁——从 X11 到 Wayland。 Ubuntu 从 24.04 LTS 开始,默认启用了 Wayland 显示服务器。这个决定旨在带来更好的安全性、性能和现代图 阅读详情

原文:http://blog.youkuaiyun.com/absurd/archive/2007/01/15/1483995.aspx

 

gtk_object_sink的妙处

 

转载时请注明出处和作者联系方式:http://blog.youkuaiyun.com/absurd

作者联系方式:Li XianJing <xianjimli at hotmail dot com>

更新时间:2006-1-15

 

在很长一段时间内,我一直不太明白gtk_object_sink这个函数的意义,它的实现也很简单:

 

 

void

gtk_object_sink (GtkObject *object)

{

  g_return_if_fail (GTK_IS_OBJECT (object));

 

  if (GTK_OBJECT_FLOATING (object))

    {

      GTK_OBJECT_UNSET_FLAGS (object, GTK_FLOATING);

      g_object_unref (object);

    }

}

 

 

从代码的表面意义来看,也就是如果一个对象没有放入容器,就把它把反引用。功能很简单,但它的具体有什么用处呢。直到后来去阅读GTK+的代码,才明白它的妙处。

 

试想这样一种情况:把一个widget放入container中,调用者要不要反引用这个widget?

 

如果要,那也是合情合理的,container要保存widget的指针,当然要引用它(增加引用计数),在container销毁时反引用它。但是对调用者来说,就比较麻烦了,特别是widget比较多的情况,一个一个的去反引用它们,很容易遗漏,从而引起内存泄露。

 

如果不要,调用者是方便了,但container怎么办?保存widget的指针,但不增加的它的引用计数?而在container销毁时,却要反引用widget?虽然不是很合理,但在通常情况下也能工作。但如果把widget同时放入多个container中时,麻烦来了:这些container都没有引用widget,却在销毁时反引用它,程序一定会崩掉的。

 

怎么办呢?这时gtk_object_sink函数的妙处就显露出来了:对象在创建时,引用计数为1。在放入容器时,先增加对象的引用计数,然后调用gtk_object_sink。如果是第一次放入容器,OBJECT_FLOATING (object)为真,引用计数就减下来了,后面再加入容器时,OBJECT_FLOATING (object)为假,gtk_object_sink就没有任何效果。等效结果是:第一次放入容器不增加引用计数,以后放入容器都要增加引用计数。

 

这就是妙处?呵,其实只是sink这个术语有点生僻罢了。

 

~~end~~

 

网易云音乐Linux客户端复活记:在Ubuntu22.04上完美运行的终极方案 本文详细介绍了如何在Ubuntu22.04上成功运行网易云音乐Linux客户端,包括环境准备、库文件冲突解决、GTK问题处理、音频输出优化等关键步骤。通过这套终极方案,用户可以在现代Linux系统上完美体验这款经典音乐应用,享受完整的音乐功能。 阅读详情

相关推荐

GXDE OS Wayland桌面环境解析:从deepin-mutter到兼容性实践

最近在尝试 GXDE OS 时,发现其桌面环境与 Wayland 显示协议的集成是一个值得深入探讨的话题。随着 Ubuntu 24.04 等主流发行版开始默认采用 Wayland,许多用户和开发者都遇到了从 X11 迁移到 Wayland 过程中的兼容性问题,例如腾讯会议等应用无法运行、VMware Tools 启动失败等。本文将围绕 GXDE OS 的 Wayland 实现,特别是其核心组件 deepin-mutter,进行系统性解析。我们将从 Wayland 的基础概念讲起,逐步深入到 GXDE OS

weixin_30596023的博客 425

gtk_object_sink的妙处

gtk_object_sink的妙处 转载时请注明出处和作者联系方式:http://blog.youkuaiyun.com/absurd作者联系方式:Li XianJing 更新时间:2006-1-15 在很长一段时间内,我一直不太明白gtk_object_sink这个函数的意义,它的实现也很简单: 

国产开源 GUI 引擎 AWTK 3691

Ubuntu 20.04 远程桌面最佳实践:X2Go + XFCE + LightDM 深度配置

远程桌面是 Linux 服务器图形化运维的基础能力,其核心在于协议效率、会话隔离与桌面环境兼容性。X2Go 基于优化的 NX 协议,相比传统 VNC(帧传输、无会话管理)和 RDP(Linux 兼容性差),具备低带宽适应、挂起/恢复、多用户并发等关键优势;而 Ubuntu 20.04 默认 GNOME(尤其 Wayland)与 X2Go 冲突严重,XFCE 因轻量、模块化、X11 原生支持,成为最稳定搭配;LightDM 则提供简洁可靠的会话调度接口,与 X2Go 的 D-Bus 集成远优于 GDM3。本文

weixin_34115824的博客 468

解决办法:GTK_OBJECT、GTK_SIGNAL_FUNC未声明

  这是GTK2.0的接口,而GTK 3.0已经取消了,用GTK3.0编译自然会出错。   解决办法:   分别改成G_OBJECT、G_CALLBACK

柳鲲鹏 1097

Ubuntu零基础入门到精通【4.4讲】:网络、蓝牙、显示器、声音与输入法设置!

🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。

**My Coding Family** 1485

开关电源的纹波和噪声电压-抑制方法

开关电源(包括AC/DC转换器、DC/DC转换器、AC/DC模块和DC/DC模块)与线性电源相比较,最突出的优点是转换效率高,一般可达80%~85%,高的可达90%~97%;其次,开关电源采用高频变压器替代了笨重的工频变压器,不仅重量减轻,体积也减小了,因此应用范围越来越广。 但开关电源的缺点是由于其开关管工作于高频开关状态,输出的纹波和噪声电压较大,一般为输出电压的1%左右(低的为输出电压的0.5%左右),最好产品的纹波和噪声电压也有几十mV;而线性电源的调整管工作于线性状态,无纹波电压,输出的噪声电压也

ltqdxl的博客 1万+

黑猴子的家: Eclipse 启动报 org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]...

1、log !SESSION 2014-10-24 10:24:10.240 eclipse.buildId=4.3.2.M20140221-1700 java.version=1.8.0_144 java.vendor=Oracle Corporation BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=zh_CN Framework...

黑猴子的博客 3324

STM32F4与LAN8720硬件连接避坑指南:从原理图到RMII信号完整性的实战解析

本文深入解析了STM32F4与LAN8720以太网连接的硬件设计要点与常见陷阱。重点剖析了电源上电时序、复位电路设计、RMII接口配置等关键环节,并提供了从原理图设计到PCB布局、信号完整性调试的完整实战指南,帮助硬件工程师规避设计风险,确保以太网通信的长期稳定运行。

weixin_29189003的博客 211

使用QT实现播放gstreamer的命令(二)

使用QT实现播放gstreamer的命令画面(二),更全更完整!!!

Alon1787的博客 5622

STM32F103C8T6心电采集实战:从PCB设计到上位机开发的完整指南(附TI杯开源资料)

本文详细介绍了基于STM32F103C8T6的心电采集系统开发全流程,从PCB设计到上位机开发,特别适合大学生电子设计大赛参赛者参考。内容涵盖硬件设计精要、软件算法优化及上位机开发技巧,并附TI杯开源资料,帮助开发者低成本实现医疗级心电信号采集。

kafka6courier的博客 193

一文带你看懂SAP-HANA的基本架构与原理

创作不易,希望大家一键三连支持!!!♥♥♥创作不易,希望大家一键三连支持!!!♥♥♥创作不易,希望大家一键三连支持!!!♥♥♥。

丷江南南的博客 5072

GTK常用控件之进度条( GtkProgressBar )

我们到处都能看到进度条的应用,我们下载拷贝个文件,下载个电影等总能看到进度条的影子,如图: 进度条的常用操作无非设置其比例或者获取其比例。 进度条的创建: GtkWidget *gtk_progress_bar_new(void); 返回值:进度条指针 设置进度条显示的进度比例: void gtk_progress_bar

每天积累一点点 5071

Vue2 - 实现H5人脸识别认证与活体检测功能(纯前端免费方案+微信人脸识别接口)完整源码,vue微信公众号网页h5端人脸识别功能人脸核身(微信方案提供后端spring boot+thinkphp)

vue人脸识别插件,vue, h5人脸识别, 微信公众号, 活体检测, 人脸核身,人脸登录、人脸识别,VUE项目-H5端人脸识别功能实现,免费h5人脸识别插件方案,微信公众号H5网页实现人脸识别,vue人脸核身,Vue H5活体检测认证,人脸认证张嘴摇摇头指引动作,人脸核身 微信原生 H5(微信公众号)vue2调用手机摄像头并实现人脸识别的实现,微信h5人脸识别vue项目,PHP人脸识别,java人脸识别,h5页面,有免费的人脸识别接口吗,用于微信公众号及嵌套在微信浏览器,vue3如何实现人脸识别,微信人脸

🏆 前端领域优质创作者 3760

GSE Sound Output Device Chooser源码解析:JavaScript与GNOME Shell扩展开发实战

GSE Sound Output Device Chooser是一款基于GNOME Shell的音频设备选择扩展,通过直观的界面帮助用户快速切换输入输出设备。本文将深入剖析其JavaScript实现架构,揭示GNOME Shell扩展开发的核心技术与最佳实践。 ## 项目架构概览:模块化设计思想 该扩展采用清晰的模块化结构,主要功能模块分布在以下核心文件中: - **extension.js

gitblog_00949的博客 416

SAP Gateway 故障排查全景图:从 Error Log 到 E2E 追踪,一套面向实战的工具与方法论

本文针对SAP Gateway Foundation(SAP_GWFND)的故障排查需求,梳理了从现象到根因的系统化排查路径。文章首先强调建立标准化排障流程的重要性,随后提供工具矩阵及使用顺序指引:对于请求中断优先查看Error Log(/IWFND/ERROR_LOG和/IWBEP/ERROR_LOG),性能问题使用Performance Trace(/IWFND/TRACES),通知异常则检查Notification Monitor。重点工具包括: Error Log作为中断类错误首要定位器; Appl

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 245

openwrt 固件定制详解:各类默认参数修改及应用添加

本文以friendlywrt22-rk3568发行版为例, 介绍如**何定制**一款**openwrt固件**,定制特性包括网络参数、登陆密码、开机界面(banner)、代理arp、opkg源、hostname、应用默认配置参数修改、增加任意文件(不限于应用程序及其库)等, 最后给出了一个完整的实操实例。

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 1541

Sherlock高级功能解析:天气小部件、音乐播放器与Teams会议集成指南

Sherlock是一款基于Rust和GTK4构建的轻量级应用启动器,专为Wayland环境设计。这款强大的启动器不仅能够快速启动应用程序,还提供了丰富的插件式功能,让您的Linux桌面体验更加高效和个性化。本文将深入解析Sherlock的三个核心高级功能:实时天气小部件、音乐播放器控制和Microsoft Teams会议集成,帮助您充分利用这个强大的工具。 ## 🎯 Sherlock启动器简介

gitblog_00442的博客 969

基于PointNet++网络的点云数据分类仿真分析

局部特征学习模块用于学习点云中每个点的局部特征表示,而全局特征学习模块用于学习整个点云的全局特征表示。点云数据分类是指将点云数据分为不同的类别或标签。PointNet++是一种用于点云数据处理的深度学习网络,它能够有效地学习点云数据的特征表示并实现高精度的分类。在本文中,我们将使用MATLAB实现基于PointNet++网络的点云数据分类仿真分析,并提供相应的源代码。然后,我们使用splitEachLabel函数将数据划分为训练集和测试集,其中80%的数据用于训练,20%的数据用于测试。

HackDashX的博客 210

Tauri框架离线语音转文字应用架构实践:Handy生产环境部署与性能调优深度解析

Handy是一款基于Tauri框架构建的跨平台离线语音转文字应用,采用React前端与Rust后端技术栈,为开发者提供完全离线的实时语音转录解决方案。在Linux、macOS和Windows生产环境部署过程中,开发者常面临系统依赖缺失、音频权限配置、模型下载网络故障等10大技术挑战。本文将深入剖析Handy的核心架构设计,提供生产级部署配置方案,并详细解析常见问题的技术原理与解决方案。 ## 问

gitblog_00675的博客 775

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IMSL CNL 7.0.0 (x86-64)Crack

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

GSE Sound Output Device Chooser开发者指南:扩展架构与代码实现原理

GSE Sound Output Device Chooser是一款专为Gnome Shell设计的扩展工具,它提供了一个简洁的设备选择器,帮助用户快速切换音频输入和输出设备。本指南将深入解析该扩展的架构设计与代码实现原理,为开发者提供全面的技术参考。 ## 核心架构设计 ### 扩展入口点解析 Gnome Shell扩展的核心入口点是`extension.js`文件,该文件定义了扩展的生命

gitblog_00728的博客 873

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Linux-surface没声音:RT5645的解决方法

Surface 3(同样适用于Cherry Trail / Bay Trail平台依赖SSF或SOF驱动和RT5645系列Codec的迷你主机、平板、开发板),安装Linux后无声,可能是因为缺少sof-firmware。如果你遇到这个问题,可以先执行, 重启后测试。

liulichiwen的博客 305

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Ubuntu 20.04 VNC全功能配置:音频/中文输入/多用户并发实战指南

VNC远程桌面不仅是画面传输,更是完整桌面会话的延伸。在Linux系统中,VNC能否支持音频播放、中文输入法、多用户隔离等能力,取决于其与X11会话管理、PulseAudio音频子系统及IBus/Fcitx输入法框架的深度集成。Ubuntu 20.04因默认启用GNOME 3.36+与Wayland兼容模式,导致传统tightvncserver等工具无法继承本地会话环境,引发‘有画面无声音’‘鼠标异常’‘搜狗输入法失效’等典型问题。TigerVNC凭借对Xtigervnc服务、systemd用户会话、Pul

weixin_34326558的博客 403

Ubuntu 22.04安装原生Linux版微信全攻略

Linux桌面环境下运行微信通常依赖Wine兼容层,但存在资源占用高、功能残缺等问题。原生Linux应用通过Electron框架实现更好的系统集成,显著降低内存占用并提升启动速度。以微信Linux版为例,其采用x86_64架构并依赖GTK、QT等图形库,需要特别处理输入法框架(fcitx)和音频服务(pulseaudio)的兼容性配置。这类方案特别适合需要长期稳定运行的办公场景,通过优化依赖库安装、输入法词库和QT主题配置,可以达到接近Windows版的用户体验。对于开发者而言,理解Linux原生应用的打包

weixin_30698527的博客 570

别只当开发板用!树莓派4B变身高效轻量桌面:VNC优化、脚本自动化与美化技巧

本文详细介绍了如何将树莓派4B从开发板改造为高效轻量桌面系统,涵盖VNC优化、脚本自动化与美化技巧。通过GPU内存分配、显示输出优化和硬件加速配置,显著提升图形性能。同时提供一键脚本、智能工作区管理和主题美化方案,助力用户打造高效办公环境。

weixin_30788239的博客 451

Fasd 扩展开发:如何编写自定义后端和功能模块

Fasd 是一款强大的命令行生产力工具,能够快速访问文件和目录。通过扩展开发,你可以为 Fasd 添加自定义后端和功能模块,从而大幅提升工作效率。本文将详细介绍 Fasd 扩展开发的核心技巧和方法。😊 ## 什么是 Fasd 后端系统? Fasd 的后端系统允许开发者集成不同的数据源来增强文件访问功能。在 Fasd 的架构中,后端负责提供文件访问记录和推荐结果。 ### 内置后端类型 F

gitblog_00213的博客 1004
上一篇: 【转】g_object_weak_ref的意义和用途
下一篇: 【转】GTK+ 布局管理
code09
博客等级 码龄18年 31粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值