public override void MouseButton(uint time, uint button, uint state) { // Case where mouse button 1 is released and there is a currently moving surface... if (state == 0 && button == 0x110 && WindowManager.MovingSurface != null) { // ...the surface should stop moving WindowManager.MovingSurface = null; } // Find the topmost surface under the pointer ISurface surface = SurfaceUnderPointer(WindowManager.Compositor.Mouse.X, WindowManager.Compositor.Mouse.Y); if (surface != null && surface != virtualDesktop.ActiveSurface && state == 1) { //Console.WriteLine("Deactivating active surface " + virtualDesktop.ActiveSurface); virtualDesktop.ActiveSurface?.Deactivate(); virtualDesktop.ActiveSurface?.SendKeyboardLeave(); this.virtualDesktop.Surfaces.Remove(surface); this.virtualDesktop.Surfaces.Add(surface); surface.Activate(); surface.SendKeyboardEnter(); virtualDesktop.ActiveSurface = surface; } else if (surface == null && state == 1) { //Console.WriteLine("Deactivating active surface " + virtualDesktop.ActiveSurface); virtualDesktop.ActiveSurface?.Deactivate(); virtualDesktop.ActiveSurface?.SendKeyboardLeave(); virtualDesktop.ActiveSurface = null; } else { } surface?.SendMouseButton(time, button, state); }