public WindowMenuItem (Wnck.Window window, string icon) : base(window.Name, icon) { Bold = window.NeedsAttention (); this.window = window; Clicked += HandleClicked; Mnemonic = null; }
public static Wnck.MotionDirection OppositeDirection (Wnck.MotionDirection direction) { switch (direction) { case MotionDirection.Down: return MotionDirection.Up; case MotionDirection.Up: return MotionDirection.Down; case MotionDirection.Left: return MotionDirection.Right; case MotionDirection.Right: default: return MotionDirection.Left; } }
public static Wnck.MotionDirection AlternateMovingDirection (Wnck.MotionDirection direction) { switch (direction) { case MotionDirection.Down: return MotionDirection.Right; case MotionDirection.Up: return MotionDirection.Left; case MotionDirection.Left: return MotionDirection.Up; case MotionDirection.Right: default: return MotionDirection.Down; } }
public WindowDockItem (Wnck.Window baseWindow) { base_window = baseWindow; id = baseWindow.Name + baseWindow.Pid; UpdateWindows (baseWindow); SetNameAndIcon (); Wnck.Screen.Default.WindowOpened += WnckScreenDefaultWindowOpened; Wnck.Screen.Default.WindowClosed += WnckScreenDefaultWindowClosed; }
public static void UnmaximizeWindows (Wnck.Window window) { if (window.IsMaximized) window.Unmaximize (); }
static bool WindowsShareViewport (Wnck.Window first, Wnck.Window second) { if (first == null || second == null) return false; Wnck.Workspace wksp = first.Workspace ?? second.Workspace; if (wksp == null) return false; Gdk.Rectangle firstGeo, secondGeo; first.GetGeometry (out firstGeo.X, out firstGeo.Y, out firstGeo.Width, out firstGeo.Height); second.GetGeometry (out secondGeo.X, out secondGeo.Y, out secondGeo.Width, out secondGeo.Height); firstGeo.X += wksp.ViewportX; firstGeo.Y += wksp.ViewportY; secondGeo.X += wksp.ViewportX; secondGeo.Y += wksp.ViewportY; int viewportWidth, viewportHeight; viewportWidth = first.Screen.Width; viewportHeight = first.Screen.Height; int firstViewportX = ((firstGeo.X + firstGeo.Width / 2) / viewportWidth) * viewportWidth; int firstViewportY = ((firstGeo.Y + firstGeo.Height / 2) / viewportHeight) * viewportHeight; Gdk.Rectangle viewpRect = new Gdk.Rectangle (firstViewportX, firstViewportY, viewportWidth, viewportHeight); return viewpRect.IntersectsWith (secondGeo); }
public WindowState(Gdk.Rectangle area, Wnck.WindowState state) { Area = area; State = state; }
bool WindowCenterInViewport(Wnck.Window window) { if (!window.IsOnWorkspace (parent)) return false; Rectangle geo = window.EasyGeometry (); geo.X += parent.ViewportX; geo.Y += parent.ViewportY; Point center = new Point (geo.X + geo.Width / 2, geo.Y + geo.Height / 2); return Contains (center); }
void SetTemporaryWindowGeometry(Wnck.Window window, Gdk.Rectangle area) { Gdk.Rectangle oldGeo = window.EasyGeometry (); oldGeo.X += parent.ViewportX; oldGeo.Y += parent.ViewportY; if (!window_states.ContainsKey (window)) window_states [window] = new WindowState (oldGeo, window.State); if (window.IsMaximized) window.Unmaximize (); window.SetWorkaroundGeometry (WindowGravity.Current, MoveResizeMask, area.X, area.Y, area.Width, area.Height); }
void RestoreTemporaryWindowGeometry(Wnck.Window window) { if (!window_states.ContainsKey (window)) return; WindowState state = window_states [window]; window.SetWorkaroundGeometry (WindowGravity.Current, MoveResizeMask, state.Area.X - parent.ViewportX, state.Area.Y - parent.ViewportY, state.Area.Width, state.Area.Height); window_states.Remove (window); }
public void MoveWindowInto(Wnck.Window window) { if (parent.IsVirtual) { Rectangle geo = window.EasyGeometry (); geo.X += window.Workspace.ViewportX; geo.Y += window.Workspace.ViewportY; int x = area.X + (geo.X % area.Width); int y = area.Y + (geo.Y % area.Height); x -= window.Workspace.ViewportX; y -= window.Workspace.ViewportY; window.SetWorkaroundGeometry (WindowGravity.Current, MoveMask, x, y, 0, 0); } else { window.MoveToWorkspace (parent); } }
bool SwitchDesk (Wnck.MotionDirection direction) { Desk activedesk = Desks.Find (desk => desk.IsActive); Desk nextdesk = activedesk.GetNeighbor (direction); if (WrappedScrolling) { // Walk through the columns/rows and jump between [1,1] and [n,m] Desk tmp = activedesk.GetWrapNeighbor (direction); if (tmp != null && (nextdesk = tmp.GetNeighbor (Desk.AlternateMovingDirection (direction))) == null) if ((nextdesk = tmp.GetWrapNeighbor (Desk.AlternateMovingDirection (direction))) == null) nextdesk = tmp; } if (nextdesk != null) { nextdesk.Activate (); return true; } return false; }
public WindowMenuItem (Wnck.Window window, Pixbuf icon) : this (window, "") { ForcePixbuf = icon; }
public Desk GetWrapNeighbor (Wnck.MotionDirection direction) { Desk desk; wrapneighbors.TryGetValue (direction, out desk); return desk; }
public void SetWrapNeighbor (Wnck.MotionDirection direction, Desk newwrapneighbor) { Desk oldwrapneighbor = GetWrapNeighbor (direction); if (oldwrapneighbor != null && oldwrapneighbor != newwrapneighbor) { wrapneighbors.Remove (direction); if (oldwrapneighbor.GetWrapNeighbor (OppositeDirection (direction)) == this) oldwrapneighbor.SetWrapNeighbor (OppositeDirection (direction), null); } if (oldwrapneighbor != newwrapneighbor && newwrapneighbor != null) { wrapneighbors.Add (direction, newwrapneighbor); newwrapneighbor.SetWrapNeighbor (OppositeDirection (direction), this); } }
void RestoreTemporaryWindowGeometry (Wnck.Window window, Dictionary<Wnck.Window, WindowState> state) { if (!state.ContainsKey (window)) return; WindowState currentState = state [window]; window.SetWorkaroundGeometry (WindowGravity.Current, MoveResizeMask, currentState.Area.X - parent.ViewportX, currentState.Area.Y - parent.ViewportY, currentState.Area.Width, currentState.Area.Height); }
void UpdateWindows (Wnck.Window baseWindow) { if (baseWindow != null) Windows = DockServices.WindowMatcher.SimilarWindows (baseWindow) .Where (w => !FileApplicationProvider.ManagedWindows.Contains (w)); else Windows = Enumerable.Empty<Wnck.Window> (); }
bool IsIntersectableWindow (Wnck.Window window) { return window != null && !window.IsMinimized && window.Pid != pid && window.WindowType != Wnck.WindowType.Desktop && window.WindowType != Wnck.WindowType.Dock && window.WindowType != Wnck.WindowType.Splashscreen && window.WindowType != Wnck.WindowType.Menu && Wnck.Screen.Default.ActiveWorkspace != null && window.IsVisibleOnWorkspace (Wnck.Screen.Default.ActiveWorkspace); }