玖玖资源站亚洲av_日本乱偷中文字幕一二三区_久久这里只有精品98_亚洲特级黄片视频_男女很舒服爽视频免费_国产一二三四2021精字窝_国产高潮白浆一区_自拍日本高清三级_秘书高跟黑色丝袜国产在线_亚洲A v永久无码精品网站色欲

NEWS

新聞

了解優(yōu)麒麟最新資訊,關(guān)注社區(qū)和產(chǎn)品動態(tài)。

NEWS

Learn about the latest news.

優(yōu)麒麟 - 任務(wù)欄新版托盤協(xié)議(SNI)介紹

2021-07-29 18:00:20

優(yōu)麒麟(Ubuntu Kylin)

在 Linux 操作系統(tǒng)中,“系統(tǒng)托盤區(qū)域”是在給定的 X 屏幕上運行的應(yīng)用程序,可以顯示正在運行的應(yīng)用程序提供的小圖標(biāo)。系統(tǒng)托盤是一個 X 客戶端,在給定的屏幕上擁有一個特殊的管理器選擇并提供了容器窗口。Windows 將此功能稱為“通知區(qū)域”,舊版托盤協(xié)議就是通過 X 服務(wù)直接獲取應(yīng)用信息,在開發(fā)上難度很大。

新版托盤規(guī)范定義了可視項的管理,通常是用于向用戶報告應(yīng)用程序狀態(tài)或提供對該應(yīng)用程序執(zhí)行的常見操作的快速訪問的圖標(biāo)。它旨在作為 Freedesktop 的桌面通知規(guī)范的補充但不直接相關(guān),旨在替代 Freedesktop 系統(tǒng)托盤規(guī)范,更加面向模型視圖,為工作區(qū)提供更多自由,如何以圖形方式表示與它的視覺風(fēng)格語言,這種方式(SNI)是將 systemtray 的調(diào)用封裝進 dbus 總線中,提升了開發(fā)者的開發(fā)效率。

從用戶角度來看新版托盤協(xié)議(SNI)從表面上看不出有什么太大的變化,在開發(fā)的角度上是將最上層的應(yīng)用與下層基礎(chǔ)庫的分離。

優(yōu)麒麟(Ubuntu Kylin)

優(yōu)麒麟(Ubuntu Kylin)

新版托盤協(xié)議主要是通過三個庫來實現(xiàn)的:

dbusmenu 是實現(xiàn)應(yīng)用程序和面板(#5)之間傳輸協(xié)議的庫。dbusmenu 已經(jīng)被用于開發(fā)會話菜單,并且也是在 Lucid 中實現(xiàn)一些新系統(tǒng)菜單的構(gòu)建塊。

indicator-applet 是將托管應(yīng)用程序指示器區(qū)域的面板小程序。指示器小程序是作為消息菜單項目的一部分開發(fā)的,旨在成為面板指示器的通用容器 。libappindicator 是一個新的庫,用于幫助應(yīng)用程序端更改;它確實注冊了圖標(biāo)和菜單,并在內(nèi)部使用 dbusmenu 通過 dbus 發(fā)布上下文菜單。雖然它是 Gnome 桌面的新庫,但它基于在 KDE 項目中設(shè)計的用于更新系統(tǒng)托盤協(xié)議的協(xié)議(上面的“信令協(xié)議”部分)。libappindicator 采用并擴展了該協(xié)議,并將其與 dbusmenu 連接以提供應(yīng)用程序遷移其代碼所需的全套服務(wù) 。

優(yōu)麒麟(Ubuntu Kylin)

3.1 托盤應(yīng)用托盤封裝

通過 dbusmenu,indicator-applet,libappindicator 將托盤應(yīng)用的屬性,方法,以及信號注冊到 dbus 總線上,在任務(wù)欄上進行 dbus 監(jiān)聽解析來實現(xiàn)與托盤應(yīng)用交互。

優(yōu)麒麟(Ubuntu Kylin)

注冊 item 的方法有:

優(yōu)麒麟(Ubuntu Kylin)

屬性有:

優(yōu)麒麟(Ubuntu Kylin)

信號有:

優(yōu)麒麟(Ubuntu Kylin)

3.2 注冊 dbus 服務(wù)

當(dāng)拿到了托盤應(yīng)用的信息然后就需要對信息進行封裝通過 dbus 的方式發(fā)送給任務(wù)欄,在任務(wù)欄上會注冊一個 statusnotifierWatcher 的服務(wù)用來檢測托盤信息的,每當(dāng)托盤應(yīng)用打開的時候都會調(diào)用 statusnotifierWatcher 的 RegisterStatusNotifierItem 方法在任務(wù)欄的托盤區(qū)域進行按鈕的注冊,當(dāng)托盤應(yīng)用關(guān)閉的時候會調(diào)用任務(wù)欄 unRegisterStatusNotifierItem 方法來取消在任務(wù)欄上的注冊。

3.3 調(diào)用 dbus 的方法

當(dāng)用戶對托盤應(yīng)用進行操作的時候,會調(diào)用相應(yīng) dbus 方法,并激活相關(guān)事件。例如左鍵點擊會觸發(fā)“激活窗口”的事件,右鍵單擊會觸發(fā)“顯示右鍵菜單”的事件,懸浮會觸發(fā)“顯示提示語”的事件

優(yōu)麒麟(Ubuntu Kylin)

4.1 注冊 statusnotifierHost 的 dbus

在一個桌面上為了防止托盤應(yīng)用會在多個地方注冊成托盤,用一個 dbus 來讓托盤應(yīng)用只能注冊到一個托盤來確保不會出現(xiàn)功能上不穩(wěn)定。

4.2 注冊 statusnotifierWatch 的 dbus

用來檢測托盤應(yīng)用的打開和關(guān)閉,statusnotifierWatch 的 RegisterStatusNotifierItem 和 unRegisterStatusNotifierItem 是協(xié)議層與應(yīng)用層來進行交互的信號,通過 RegisterStatusNotifierItem 方法來獲取應(yīng)用注冊的 dbus 的服務(wù)名。

4.3 對托盤應(yīng)用的 dbus 進行調(diào)用

上文說的鼠標(biāo)事件點擊調(diào)用槽函數(shù)是一部分,還可以監(jiān)聽托盤應(yīng)用的 signal 如圖標(biāo)變換,提示信息變化等。如果需要托盤應(yīng)用的窗口以及其他屬性,還可以通過 dbus 來獲取 properties。

4.4 在優(yōu)麒麟桌面環(huán)境下使用

Qt 應(yīng)用程序可以在自己的應(yīng)用程序里創(chuàng)建一個 QSystemtrayIcon 類,并為這個類似設(shè)置圖標(biāo)和事件槽函數(shù),在任務(wù)欄上會自動生成托盤圖標(biāo)。

Gtk 程序通過

優(yōu)麒麟(Ubuntu Kylin)

來注冊應(yīng)用為托盤應(yīng)用,即可實現(xiàn)在任務(wù)欄上顯示托盤圖標(biāo)。

優(yōu)麒麟(Ubuntu Kylin)

5.1 在 dbus 調(diào)用的時候可能會出現(xiàn)延時,必要的話可以考慮多線程處理,避免界面阻塞。

5.2 由于 dbus 調(diào)用是異步調(diào)用出現(xiàn)響應(yīng)慢問題,在讀取托盤應(yīng)用信息是可能會需要添加延時讀取,不然會出現(xiàn)信息讀取不到的地方。

優(yōu)麒麟

現(xiàn)在優(yōu)麒麟誠邀大家 參與體驗【有獎體驗征集】80份禮品,邀你秀出最潮KMRE玩法,中獎率超高不要錯過!活動--,歡迎優(yōu)客們 點擊http://m.eply168.cn/downloads/ 下載優(yōu)麒麟?yún)⑴c哦~