public WindowMenuItem (Wnck.Window window, string icon) : base(window.Name, icon)
		{
			Bold = window.NeedsAttention ();
			this.window = window;
			Clicked += HandleClicked;
			Mnemonic = null;
		}
Beispiel #2
0
		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;
			}
		}
Beispiel #3
0
		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);
		}
Beispiel #7
0
 public WindowState(Gdk.Rectangle area, Wnck.WindowState state)
 {
     Area = area;
     State = state;
 }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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;
		}
Beispiel #14
0
		public Desk GetWrapNeighbor (Wnck.MotionDirection direction)
		{
			Desk desk;
			wrapneighbors.TryGetValue (direction, out desk);
			return desk;
		}
Beispiel #15
0
		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);
			}
		}
Beispiel #16
0
		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);
		}