func finalizeDBusIFC() { if dspObj != nil { libdsp.DestroyDisplay(dspObj) dspObj = nil } if areaObj != nil { libarea.DestroyXMouseArea(areaObj) areaObj = nil } if launchObj != nil { launcher.DestroyLauncher(launchObj) launchObj = nil } }
func (m *ClientManager) listenRootWindow() { var update = func() { list, err := ewmh.ClientListGet(XU) if err != nil { logger.Warning("Can't Get _NET_CLIENT_LIST", err) } isLauncherShown = false for _, xid := range list { if !isDeepinLauncher(xid) { continue } winProps, err := xproto.GetWindowAttributes(XU.Conn(), xid).Reply() if err != nil { break } if winProps.MapState == xproto.MapStateViewable { isLauncherShown = true } break } ENTRY_MANAGER.runtimeAppChanged(list) } xwindow.New(XU, XU.RootWin()).Listen(xproto.EventMaskPropertyChange) xevent.PropertyNotifyFun(func(XU *xgbutil.XUtil, ev xevent.PropertyNotifyEvent) { switch ev.Atom { case _NET_CLIENT_LIST: update() case _NET_ACTIVE_WINDOW: var err error isLauncherShown = false if activeWindow, err = ewmh.ActiveWindowGet(XU); err == nil { appId := find_app_id_by_xid(activeWindow, DisplayModeType(setting.GetDisplayMode())) logger.Debug("current active window:", appId) if rApp, ok := ENTRY_MANAGER.runtimeApps[appId]; ok { logger.Debug("find runtime app") rApp.setLeader(activeWindow) rApp.updateState(activeWindow) } logger.Debug("active window is", appId) if appId != DDELauncher { LAUNCHER, err := launcher.NewLauncher( "com.deepin.dde.launcher", "/com/deepin/dde/launcher", ) if err != nil { logger.Debug(err) } else { LAUNCHER.Hide() launcher.DestroyLauncher(LAUNCHER) } } else { isLauncherShown = true } lastActive = appId dbus.Emit(m, "ActiveWindowChanged", uint32(activeWindow)) } hideMode := HideModeType(setting.GetHideMode()) if hideMode == HideModeSmartHide || hideMode == HideModeKeepHidden { hideModemanager.UpdateState() } case _NET_SHOWING_DESKTOP: dbus.Emit(m, "ShowingDesktopChanged") case DEEPIN_SCREEN_VIEWPORT: updateCurrentViewport() } }).Connect(XU, XU.RootWin()) update() xevent.Main(XU) }