diff options
Diffstat (limited to 'plugins/unityshell/src')
| -rw-r--r-- | plugins/unityshell/src/unityshell.cpp | 40 | ||||
| -rw-r--r-- | plugins/unityshell/src/unityshell.h | 2 |
2 files changed, 34 insertions, 8 deletions
diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp index 67b7bd163..20b43267d 100644 --- a/plugins/unityshell/src/unityshell.cpp +++ b/plugins/unityshell/src/unityshell.cpp @@ -898,6 +898,33 @@ void UnityScreen::leaveShowDesktopMode (CompWindow *w) } } +bool UnityScreen::DoesPointIntersectUnityGeos(nux::Point const& pt) +{ + auto launchers = launcher_controller_->launchers(); + for (auto launcher : launchers) + { + nux::Geometry hud_geo = launcher->GetAbsoluteGeometry(); + + if (launcher->Hidden()) + continue; + + if (hud_geo.IsInside(pt)) + { + return true; + } + } + + for (nux::Geometry &panel_geo : panel_controller_->GetGeometries ()) + { + if (panel_geo.IsInside(pt)) + { + return true; + } + } + + return false; +} + void UnityWindow::enterShowDesktop () { if (!mShowdesktopHandler) @@ -1424,12 +1451,10 @@ void UnityScreen::handleEvent(XEvent* event) if (dash_controller_->IsVisible()) { - int monitor_with_mouse = UScreen::GetDefault()->GetMonitorWithMouse(); nux::Point pt(event->xbutton.x_root, event->xbutton.y_root); - nux::Geometry geo_dash = dash_controller_->GetInputWindowGeometry(); + nux::Geometry dash_geo = dash_controller_->GetInputWindowGeometry(); - if (overlay_monitor_ != monitor_with_mouse || - !geo_dash.IsInside(pt)) + if (!dash_geo.IsInside(pt) && !DoesPointIntersectUnityGeos(pt)) { dash_controller_->HideDash(false); } @@ -1437,12 +1462,10 @@ void UnityScreen::handleEvent(XEvent* event) if (hud_controller_->IsVisible()) { - int monitor_with_mouse = UScreen::GetDefault()->GetMonitorWithMouse(); nux::Point pt(event->xbutton.x_root, event->xbutton.y_root); - nux::Geometry geo_hud = hud_controller_->GetInputWindowGeometry(); + nux::Geometry hud_geo = hud_controller_->GetInputWindowGeometry(); - if (overlay_monitor_ != monitor_with_mouse || - !geo_hud.IsInside(pt)) + if (!hud_geo.IsInside(pt) && !DoesPointIntersectUnityGeos(pt)) { hud_controller_->HideHud(false); } @@ -2685,6 +2708,7 @@ CompPoint UnityWindow::tryNotIntersectUI(CompPoint& pos) return pos; } + bool UnityWindow::place(CompPoint& pos) { bool was_maximized = PluginAdapter::Default ()->MaximizeIfBigEnough(window); diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h index b970a7567..052abe7f7 100644 --- a/plugins/unityshell/src/unityshell.h +++ b/plugins/unityshell/src/unityshell.h @@ -190,6 +190,8 @@ public: switcher::Controller::Ptr switcher_controller(); launcher::Controller::Ptr launcher_controller(); + bool DoesPointIntersectUnityGeos(nux::Point const& pt); + protected: std::string GetName() const; void AddProperties(GVariantBuilder* builder); |
