void PanelView::OnEntryActivated(std::string const& panel, std::string const& entry_id, nux::Rect const&) { if (!panel.empty() && panel != GetPanelName()) return; bool active = !entry_id.empty(); if (active && !track_menu_pointer_timeout_) { // // Track menus being scrubbed at 60Hz (about every 16 millisec) // It might sound ugly, but it's far nicer (and more responsive) than the // code it replaces which used to capture motion events in another process // (unity-panel-service) and send them to us over dbus. // NOTE: The reason why we have to use a timer instead of tracking motion // events is because the motion events will never be delivered to this // process. All the motion events will go to unity-panel-service while // scrubbing because the active panel menu has (needs) the pointer grab. // track_menu_pointer_timeout_.reset(new glib::Timeout(16)); track_menu_pointer_timeout_->Run(sigc::mem_fun(this, &PanelView::TrackMenuPointer)); } else if (!active) { track_menu_pointer_timeout_.reset(); menu_view_->NotifyAllMenusClosed(); tracked_pointer_pos_ = {-1, -1}; } if (overlay_is_open_) ubus_manager_.SendMessage(UBUS_OVERLAY_CLOSE_REQUEST); }
void PanelView::SyncGeometries() { indicator::EntryLocationMap locations; if (menu_view_->HasMenus()) menu_view_->GetGeometryForSync(locations); indicators_->GetGeometryForSync(locations); remote_->SyncGeometries(GetPanelName(), locations); }
const TCHAR* InfoBoxManager::GetCurrentPanelName() { return GetPanelName(GetCurrentPanel()); }