unity indicator下菜单自定义的解决方法

       因为unity目前对于indicator采用的是极简的处理方法,无论是qt还是gtk,所能使用的调用只有单一的Trigger点击,想要用到复杂的比如右键点击,左键双击等等的操作响应暂时还没想到办法。事实上,默认的音量控制(indicator-sound)是有各种响应的,比如鼠标中键的滚轮滚动可以调节音量。首先,我们要找到它的实现方法。

         indicator使用dbus作为通信机制。所以当打开dbus-monitor后,在滚动滚轮调节音量时,有如下输出(ps:真难截。。)

method call sender=:1.17 -> dest=:1.43 serial=8609 path=/com/canonical/Unity/Panel/Service; interface=com.canonical.Unity.Panel.Service; member=ScrollEntry
   string "0x8863a84"
   int32 -120
method call sender=:1.43 -> dest=:1.29 serial=18226 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=Notify
   string "indicator-sound"
   uint32 0
   string "notification-audio-volume-low"
   string "indicator-sound"
   string ""
   array [
   ]
   array [
      dict entry(
         string "x-canonical-private-synchronous"
         variant             string "indicator-sound"
      )
      dict entry(
         string "value"
         variant             int32 15
      )
   ]
   int32 -1
method return sender=:1.29 -> dest=:1.43 reply_serial=18226
   uint32 0
method return sender=:1.43 -> dest=:1.17 reply_serial=8609
method call sender=:1.43 -> dest=:1.51 serial=18228 path=/com/canonical/indicator/sound/menu; interface=com.canonical.dbusmenu; member=EventGroup
   array [
      struct {
         int32 3
         string "scroll updates"
         variant             double 15.9631
         uint32 0
      }
   ]
method return sender=:1.51 -> dest=:1.43 reply_serial=18228
   array [
   ]
signal sender=:1.51 -> dest=(null destination) serial=262 path=/com/canonical/indicator/sound/menu; interface=com.canonical.dbusmenu; member=ItemsPropertiesUpdated
   array [
      struct {
         int32 3
         array [
            dict entry(
               string "x-canonical-ido-volume-level"
               variant                   double 15.9622
            )
         ]
      }
   ]
   array [
   ]
sign

        根据之前的研究,"1.43"应该是整个indicator的server,他通过dbus消息控制各个软件。由于研究起来比较复杂,所以手工写一个最基本的indicator来测试




你可能感兴趣的:(linux,开源夏令营)