基于Wayland的客户端窗口坐标管理实现方法转让专利

申请号 : CN202211552784.X

文献号 : CN115629838B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 易梓骁张铎周磊陈霖翔王勇军

申请人 : 麒麟软件有限公司

摘要 :

本发明涉及基于Wayland的客户端窗口坐标管理实现方法;基于服务端的Wayland合成器与客户端之间的Wayland协议,以及服务端的窗口坐标管理模块来实现,Wayland协议中声明有管理客户端窗口坐标的链表结构,窗口坐标管理模块中实现有客户端窗口坐标处理逻辑。本发明充分利用Wayland合成器和Wayland协议,以及客户端与合成器的通讯过程,通过对客户端发送事件的接口来实现对客户端坐标和位置的管理,代码上仅使用Wayland的链表结构,可以很方便的拓展、移植到其它窗口管理器中,实现高效开发。

权利要求 :

1.基于Wayland的客户端窗口坐标管理实现方法,其特征在于:基于服务端的Wayland合成器与客户端之间的Wayland协议,以及服务端的窗口坐标管理模块来实现,Wayland协议中声明有管理客户端窗口坐标的链表结构,窗口坐标管理模块中实现有客户端窗口坐标处理逻辑;实现方法包括:步骤S1:Wayland合成器通过Wayland协议提供客户端数据来源以及用户的操作;

步骤S2:窗口坐标管理模块通过合成器回调函数感知客户端的关键操作;并对客户端进行位置坐标的检测,根据不同的检测分析结果,采用不同的策略对坐标进行管理;

步骤S3:Wayland合成器将管理策略下发到客户端执行。

2.根据权利要求1所述的基于Wayland的客户端窗口坐标管理实现方法,其特征在于:所述步骤S2中,客户端的关键操作包括关闭客户端、最小化客户端、新建客户端、移动客户端、还原客户端。

3.根据权利要求2所述的基于Wayland的客户端窗口坐标管理实现方法,其特征在于:所述步骤S2中,客户端的关键操作为关闭客户端或最小化客户端时,对客户端所进行的坐标管理策略包括:找出客户端的坐标在链表结构中对应的坐标管理节点,调用窗口坐标管理模块中的删除接口,将该节点删除。

4.根据权利要求2所述的基于Wayland的客户端窗口坐标管理实现方法,其特征在于:所述步骤S2中,客户端的关键操作为新建客户端时,对客户端所进行的坐标管理策略包括:步骤S21:获取客户端的长和宽,根据获得的长和宽,遍历链表结构,找到一个符合要求的客户端位置;

步骤S22:判断与该客户端位置相邻的上一个客户端位置是否被占用;

步骤S23:若未被占用,则基于当前客户端的位置直接得到需要新建的客户端的坐标;

若被占用,则获取相邻的上一个客户端的坐标,通过上一个客户端的坐标与当前符合要求的客户端位置计算得到最终需要新建的客户端的坐标;

步骤S24:为新建的客户端生成坐标管理节点,遍历链表结构将生成的坐标管理节点插入链表结构中的对应位置。

5.根据权利要求4所述的基于Wayland的客户端窗口坐标管理实现方法,其特征在于:所述步骤S2中,新建客户端操作包括常规顺序新建及补位新建,当新建客户端操作为补位新建时,对客户端所进行的坐标管理策略还包括,基于如下步骤对生成的坐标管理节点进行自检测,以判断所生成的坐标管理节点的下一个节点的坐标是否合法:步骤S25:判断所生成的坐标管理节点的下一个节点所对应的位置是否在当前插入的坐标管理节点对应的位置的同层且行和列各加一;若不是,则不处理;若是,则执行下一步;

步骤S26:对比两个节点所对应的客户端的坐标是否在预定范围内,若在预定范围内,则不处理;若不在预定范围内,则调用窗口坐标管理模块中的删除接口将下一个节点删除。

6.根据权利要求2所述的基于Wayland的客户端窗口坐标管理实现方法,其特征在于:所述步骤S2中,客户端的关键操作为移动客户端或还原客户端时,对客户端所进行的坐标管理策略包括:步骤S2a:将被移动或还原的客户端在链表结构中的坐标管理节点删除;

步骤S2b:基于客户端的坐标是否满足行列式的表达,判断客户端的坐标是否需要管理;若不需要管理,则结束当前管理策略;若需要管理,则执行下一步;

步骤S2c:根据客户端当前的坐标,计算出该客户端位置并生成坐标管理节点,将客户端所对应的坐标管理节点插入链表结构中。

7.根据权利要求6所述的基于Wayland的客户端窗口坐标管理实现方法,其特征在于:所述步骤S2中,客户端的关键操作为移动客户端或还原客户端时,对客户端所进行的坐标管理策略还包括,基于如下步骤对生成的坐标管理节点进行自检测,以判断所生成的坐标管理节点的下一个节点的坐标是否合法:步骤S2d:判断所生成的坐标管理节点的下一个节点所对应的位置是否在当前插入的坐标管理节点对应的位置的同层且行和列各加一;若不是,则不处理;若是,则执行下一步;

步骤S2e:对比两个节点所对应的客户端的坐标是否在预定范围内,若在预定范围内,则不处理;若不在预定范围内,则调用窗口坐标管理模块中的删除接口将下一个节点删除。

说明书 :

基于Wayland的客户端窗口坐标管理实现方法

技术领域

[0001] 本发明涉及窗口坐标管理技术领域,具体涉及基于Wayland的客户端窗口坐标管理实现方法。

背景技术

[0002] 在Linux平台下,Cairo、Pango的运行是基于X Window的,但X Window是一个“backend”而已,并不是少它不行。同理,跨平台的GTK+、Qt也只是视X为其中所支持的后端之一,假如哪天X真的不在了,更换一个新后端,当前的GNOME、KDE也能完整的跑起来。
[0003] 相对于X来说,基于Wayland的图形系统实现更容易掌握。在使用体验上,同一桌面环境在Wayland图形系统运行时,体验更好,动画更加流畅。目前X相关的开发已经放缓,社区花费更过的精力在Wayland图形系统上。与X相比,Wayland图形系统更值得国产操作系统深耕。
[0004] 当前在图形系统中新建客户端时,窗口管理器会将客户端移动到合适的屏幕坐标上,使整个屏幕看上去更加有序;但当客户端没有提交需要显示的高和宽时,可能会出现窗口管理器移动位置不合适的问题;以及当新增屏幕,或者改变多屏的排列顺序时,图形系统中的整个显示区域是有变化的,这时客户端的坐标也是有变化的,如何合理高效的处理客户端坐标变化,是当前面临的一个重要目标。
[0005] 中国发明专利(202110842166.8,支持客户端窗口坐标的轻量级wayland合成器的实现方法)涉及支持客户端窗口坐标的轻量级wayland合成器的实现方法,通过在wayland服务端和客户端之间建立从应用程序设置窗口坐标到服务端收到请求重新渲染的通信实现。该发明提供的支持客户端窗口坐标的轻量级wayland合成器的实现方法,通过灵活扩展wayland协议,实现客户端程序对窗口坐标的设置,满足习惯于桌面系统风格的用户使用需求。提到在Wayland合成器中使用客户端提供的坐标来渲染显示窗口,不涉及服务端的窗口坐标位置管理。
[0006] 中国发明专利(202210383907.5,一种基于Wayland协议的浏览器应用窗口层级切换方法及装置)公开了一种基于Wayland协议的浏览器应用窗口层级切换方法及装置,涉及嵌入式L i n u x设 备 技 术 领 域 。所 述 方 法 包 括 :修改Wayland用于标记窗口所属的类别的API,通过所述API将窗口设置的分类标记为若干个层级;根据设定规则为应用窗口设置层级,然后按应用窗口的优先级高低排序;所述应用窗口的优先级首先按层级的高低进行排序,若有一个以上应用窗口的层级位于同一层级,则按层级设置时间与当前时间的接近程度排序;根据排序结果显示应用窗口。该发明提供的一种基于Wayland协议的浏览器应用窗口层级切换方法及装置,实现了在嵌入Linux系统中,使用Wayland显示服务的浏览器作为前端UI展示环境的情况下,可以实现自由的切换浏览器应用的窗口层级,灵活地展示前端的界面。提到在Wayland显示服务中对应用窗口进行层级排列,不涉及窗口坐标位置的管理。

发明内容

[0007] 为解决已有技术存在的不足,本发明提供了一种基于Wayland的客户端窗口坐标管理实现方法,基于服务端的Wayland合成器与客户端之间的Wayland协议,以及服务端的窗口坐标管理模块来实现,Wayland协议中声明有管理客户端窗口坐标的链表结构,窗口坐标管理模块中实现有客户端窗口坐标处理逻辑;实现方法包括:
[0008] 步骤S1:Wayland合成器通过Wayland协议提供客户端数据来源以及用户的操作;
[0009] 步骤S2:窗口坐标管理模块通过合成器回调函数感知客户端的关键操作;并对客户端进行位置坐标的检测,根据不同的检测分析结果,采用不同的策略对坐标进行管理;
[0010] 步骤S3:Wayland合成器将管理策略下发到客户端执行。
[0011] 其中,所述步骤S2中,客户端的关键操作包括关闭客户端、最小化客户端、新建客户端、移动客户端、还原客户端。
[0012] 其中,所述步骤S2中,客户端的关键操作为关闭客户端或最小化客户端时,对客户端所进行的坐标管理策略包括:找出客户端的坐标在链表结构中对应的坐标管理节点,调用窗口坐标管理模块中的删除接口,将该节点删除。
[0013] 其中,所述步骤S2中,客户端的关键操作为新建客户端时,对客户端所进行的坐标管理策略包括:
[0014] 步骤S21:获取客户端的长和宽,根据获得的长和宽,遍历链表结构,找到一个符合要求的客户端位置;
[0015] 步骤S22:判断与该客户端位置相邻的上一个客户端位置是否被占用;
[0016] 步骤S23:若未被占用,则基于当前客户端的位置直接得到需要新建的客户端的坐标;若被占用,则获取相邻的上一个客户端的坐标,通过上一个客户端的坐标与当前符合要求的客户端位置计算得到最终需要新建的客户端的坐标;
[0017] 步骤S24:为新建的客户端生成坐标管理节点,遍历链表结构将生成的坐标管理节点插入链表结构中的对应位置。
[0018] 其中,所述步骤S2中,新建客户端操作包括常规顺序新建及补位新建,当新建客户端操作为补位新建时,对客户端所进行的坐标管理策略还包括,基于如下步骤对生成的坐标管理节点进行自检测,以判断所生成的坐标管理节点的下一个节点的坐标是否合法:
[0019] 步骤S25:判断所生成的坐标管理节点的下一个节点所对应的位置是否在当前插入的坐标管理节点对应的位置的同层且行和列各加一;若不是,则不处理;若是,则执行下一步;
[0020] 步骤S26:对比两个节点所对应的客户端的坐标是否在预定范围内,若在预定范围内,则不处理;若不在预定范围内,则调用窗口坐标管理模块中的删除接口将下一个节点删除。
[0021] 其中,所述步骤S2中,客户端的关键操作为移动客户端或还原客户端时,对客户端所进行的坐标管理策略包括:
[0022] 步骤S2a:将被移动或还原的客户端在链表结构中的坐标管理节点删除;
[0023] 步骤S2b:基于客户端的坐标是否满足行列式的表达,判断客户端的坐标是否需要管理;若不需要管理,则结束当前管理策略;若需要管理,则执行下一步;
[0024] 步骤S2c:根据客户端当前的坐标,计算出该客户端位置并生成坐标管理节点,将客户端所对应的坐标管理节点插入链表结构中。
[0025] 其中,所述步骤S2中,客户端的关键操作为移动客户端或还原客户端时,对客户端所进行的坐标管理策略还包括,基于如下步骤对生成的坐标管理节点进行自检测,以判断所生成的坐标管理节点的下一个节点的坐标是否合法:
[0026] 步骤S2d:判断所生成的坐标管理节点的下一个节点所对应的位置是否在当前插入的坐标管理节点对应的位置的同层且行和列各加一;若不是,则不处理;若是,则执行下一步;
[0027] 步骤S2e:对比两个节点所对应的客户端的坐标是否在预定范围内,若在预定范围内,则不处理;若不在预定范围内,则调用窗口坐标管理模块中的删除接口将下一个节点删除。
[0028] 本发明提供的基于Wayland的客户端窗口坐标管理实现方法,充分利用Wayland合成器和Wayland协议,以及客户端与合成器的通讯过程,通过对客户端发送事件的接口来实现对客户端坐标和位置的管理,代码上仅使用Wayland的链表结构,可以很方便的拓展、移植到其它窗口管理器中,实现高效开发。

附图说明

[0029] 图1为基于Wayland的客户端窗口坐标管理总体逻辑框架图。
[0030] 图2为基于Wayland的客户端窗口坐标管理实现方法所涉及链表结构图。
[0031] 图3为基于Wayland的客户端窗口坐标管理关闭/最小化客户端的流程图。
[0032] 图4为基于Wayland的客户端窗口坐标管理新建客户端的流程图。
[0033] 图5为基于Wayland的客户端窗口坐标管理移动/还原客户端的流程图。

具体实施方式

[0034] 为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。
[0035] 如图1所示,为了解决Wayland合成器上客户端窗口坐标及位置管理的问题,本发明公开了一种基于Wayland的客户端窗口坐标管理实现方法。该方法基于Wayland协议,并使用协议中声明的链表,通过增加客户端窗口坐标处理逻辑来实现客户端坐标和位置的管理;利用Wayland协议中客户端与合成器的交互结果,获取到客户端最终提交的数据,随后进行逻辑判断确认客户端的坐标及位置并实施管控,完成可视化的客户端管理。
[0036] Wayland协议提供客户端数据来源以及用户的操作处理(commit),窗口坐标管理模块感知(notify)到客户端的一些关键操作,比如新建、删除、移动、最大化、最小化时,将对客户端进行位置的检测,根据不同的检测分析结果,采用不同的策略(handle),Wayland合成器执行策略并下发到客户端(configure);当有多个显示设备接入或移除时(commit),窗口坐标管理模块也将通过合成器获取相关信息,随后更新管理的客户端信息。
[0037] 图2为本发明所使用用于管理客户端坐标和位置的链表结构,本发明基于Wayland合成器使用wl_list定义一套如图2所示的将在后续用于管理客户端坐标和位置的链表结构,并初始化链表。
[0038] 坐标和位置管理实现的方法,主要面向客户端请求事件、屏幕提交事件及键盘鼠标事件等外部接口,其他类似接口也应该属于该方法能管控的范围。
[0039] 图1中,多显示器可理解为对应屏幕提交事件,用户操作包括键盘鼠标事件等,客户端指的是具体的应用,而屏幕和用户操作事件为合成器获取到之后,判断是否需要修改客户端的配置信息,如坐标、位置。
[0040] 客户端窗口管理方法是基于Wayland协议,通过使用Wayland中的wl_list链表结构来实现。通常情况下,触发位置管理有三种情况:关闭或最小化窗口、新建或还原窗口以及移动窗口。当客户端有以上几种操作动作时,坐标管理会对客户端的坐标进行相应的计算处理,用于管控客户端。主要包括以下四个功能:
[0041] 1、常规新建客户端时顺序新建,包含:wayland客户端的新建、x11客户端的新建等。
[0042] 2、存在空缺位置时补位新建,包含:wayland客户端的新建及删除,x11客户端的新建及删除等。
[0043] 删除操作是在新建客户端后,需要对新建客户端的相邻下一客户端坐标进行检测,如果相邻的下一客户端坐标不符合要求,则将下一客户端对应的坐标管理节点从管理链表中删除。
[0044] 3、客户端移动后仍可以被管控参与补位,包含:移除客户端相应坐标管理节点,并基于客户端坐标是否满足管控条件,对客户端的下一个坐标管理节点进行检测,若客户端坐标不满足管控条件,则不进行下一步操作。
[0045] 4、新建客户端的坐标根据相邻的上一客户端的坐标计算,包含:新建客户端位置检测、相邻上一客户端坐标位置查询、基于相邻上一客户端坐标对当前新建客户端坐标进行优化等。
[0046] 基于Wayland的客户端窗口坐标管理实现方法具体实施例步骤如下:
[0047] 一、实现客户端的关闭或最小化
[0048] 如图3所示,该接口在合成器或客户端发出关闭、最小化等在当前屏幕中取消显示的事件后进行调用,找出客户端在坐标位置管理链表中的节点,并将其删除。
[0049] 二、实现对新建客户端坐标和位置的管理,主要对客户端在当前屏幕上的坐标进行设置来达到管控目标
[0050] 如图4所示,当有新客户端创建,需要显示在屏幕上时,通过Wayland的相关接口我们可以获取客户端的长和宽;根据获得的长和宽,开始遍历坐标管理链表,获得一个符合要求的客户端位置(客户端位置包含第几行,第几列,第几层);如果所有客户端从新建后就没有移动过,那么客户端的排列看上去就是一条整齐的斜线,由于相邻的上一个客户端可能已经被用户操作而改变了坐标,所以上一个客户端的坐标与上一位置的理论坐标可能有一些偏移,若不考虑上一客户端坐标,直接根据当前位置生成新建客户端的坐标,会导致上一客户端在视觉效果上脱离了客户端排列的斜线,为了避免此现象出现,使显示界面更加整洁,本发明基于如下步骤对新建客户端的坐标进行优化:判断该位置相邻的上一个客户端位置是否被占用,若未被占用,则基于当前客户端的位置直接得到需要新建的客户端的坐标;若被占用,则通过下述步骤对客户端的坐标进行进一步的优化:获取相邻的上一个客户端的坐标,通过上一个客户端的坐标和当前符合要求的客户端位置计算得到最终的客户端坐标,给新建的客户端使用;随后为新建客户端生成坐标管理节点,最后遍历坐标管理链表将生成的坐标管理节点插入链表中对应的位置。
[0051] 三、实现客户端坐标位置链表中节点的自检测功能
[0052] 该功能属于模块的内部函数,请继续参阅图4所示,具体功能为在每次新增节点后,对下一节点的坐标合法性进行检测;当有新节点插入时,新节点对应的客户端的坐标和位置是已经确定并且不会改变的,由于客户端的坐标需要根据相邻的上一客户端得到,所以需要判断新节点的下一节点对应客户端的坐标是否满足管控要求:当新增节点插入链表后,对插入位置所对应节点的下一节点进行判断;由于新增的链表节点指向的客户端坐标是不确定的,所以需要判断下一节点的客户端坐标是否仍满足管控要求;首先判断下一节点的位置是否是当前插入节点所对应位置的同层且行列各加1的位置,若不是,则不处理;若是,则对比两节点对应客户端的坐标是否在预定范围内,若下一节点对应的客户端坐标满足要求,则不处理,若不满足要求,则删除节点。以保证坐标管理链表被修改后,将链表中不满足管控要求的节点删除,保证链表的可控性。
[0053] 四、实现移动客户端后的检测接口,Wayland窗口管理器通过调用该接口来检测客户端坐标是否需要管理;
[0054] 如图5所示,和新建客户端不同的是,移动后的客户端是有自己的坐标的,因此,客户端被移动或通过其他动作改变坐标时,将其对应的节点从坐标管理链表中删除;客户端移动或动作结束后,坐标管理模块通过合成器获取客户端提交的数据信息,判断该客户端的坐标(x,y)是否需要管理;若客户端坐标不满足要求,则不操作;若客户端坐标满足管理要求,则根据客户端当前坐标,计算出加入客户端坐标位置管理链表合适的节点位置,并将客户端对应的节点插入进链表中,以实现更智能管控,提高对客户端的管控程序。
[0055] 随后调用步骤三中的节点的自检测功能检测下一节点是否合法。
[0056] 本发明中,基于客户端的坐标是否满足行列式的表达来决定是否需要对客户端的坐标进行管理,例如:使用预设的值对客户端的整个显示区域进行行列的划分,如长宽都以50像素划分,使用客户端本身的坐标x,y分别除以50,得到一个行列式,当其余数在预定范围内时,判断客户端的坐标满足管控要求,需要加入管控链表。
[0057] 五、实现屏幕位置变化时客户端坐标及位置管理的更新接口
[0058] 当有新屏幕接入,或者屏幕发生插拔等导致屏幕变化的事件产生时,坐标管理模块通过窗口管理器获取到这些事件,并调用更新接口对客户端坐标、位置以及链表中的数据进行更新。
[0059] 和现有技术相比,本发明的优势在于:
[0060] (1)模块耦合度低,代码上仅使用Wayland的链表结构,可以很方便的拓展、移植到其他窗口管理器中,实现高效开发。
[0061] (2)自主可控性,窗口坐标管理模块的代码完全是自主设计研发,具有完全的知识产权。
[0062] (3)实现方式具有独创性,充分利用Wayland合成器和Wayland协议,以及客户端与合成器的通讯过程,通过对客户端发送事件的接口来实现坐标及位置的管理。
[0063] (4)实现效果明显,加入坐标管理模块后客户端的新建及移动均能得到有效管理,在使用过程中能明显看到坐标管理模块对窗口的处理,对比之前未添加坐标管理模块的窗口管理器要有更好的体验。
[0064] 虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。