Ejemplo n.º 1
0
        /**
         * <summary>
         * ウィンドウ移動イベントが発生したら
         * 該当モニターがモニター移動したかどうかを判断し
         * 移動していたら以下を行う
         * * 移動前モニターの整列しなおし、移動前WindowManagerからの削除
         * * 移動後モニターの整列しなおし、移動後WindowManagerへの追加
         * </summary>
         */
        private void TraceWindow_LocationChangeEvent(object sender, TraceWindow.OriginalWinEventArg w)
        {
            try
            {
                Logger.DebugWindowInfo("Window LocationChange", w.WindowInfo);
                if (w.WindowInfo.MovedMonitor())
                {
                    Logger.DebugWindowInfo("Window MonitorChange", w.WindowInfo);
                    var beforeMovedMonitorHandle = w.WindowInfo.GetMonitorHandle();
                    var beforeMovedWindowManager = this.monitorManager.FindWindowManagerByMonitorHandle(beforeMovedMonitorHandle);

                    Logger.DebugWindowInfo("Remove From BeforeMovedWindowManager", w.WindowInfo);
                    beforeMovedWindowManager.Remove(w.WindowInfo);
                    this.ArrangeWindows();

                    w.WindowInfo.ComputeMonitorHandle();
                    Logger.DebugWindowInfo("Add To NewWindowManager", w.WindowInfo);
                    var windowManager = this.monitorManager.PushNewWindowInfo(w.WindowInfo);
                    this.monitorManager.SetCurrentWindowManagerIndexByMonitorHandle(w.WindowInfo.monitorHandle);
                    this.ArrangeWindows();

                    // TODO フォーカスが移動先のモニターに移動してしまうが、元のモニターのほうがよいような気もする

                    this.HighlightActiveMonitor();
                }
            }
            catch (Exception ex)
            {
                Logger.Exception(ex);
                throw ex;
            }
        }
Ejemplo n.º 2
0
 /**
  * <summary>
  * ウィンドウHideイベントが発生したら
  * 該当モニターのWindowManagerから削除し、現在のモードで整列しなおす
  * </summary>
  */
 private void TraceWindow_HideEvent(object sender, TraceWindow.OriginalWinEventArg w)
 {
     try
     {
         Logger.DebugWindowInfo("Window Hide", w.WindowInfo);
         var windowManager = this.monitorManager.RemoveWindowInfo(w.WindowInfo);
         this.ArrangeWindows();
         this.monitorManager.ActivateWindow();
     }
     catch (Exception ex)
     {
         Logger.Exception(ex);
         throw ex;
     }
 }
Ejemplo n.º 3
0
        /**
         * <summary>
         * ウィンドウアクティヴ化イベントが発生したら
         * カレントモニターのカレントウィンドウと等しいか確認し
         * 異なればそのウィンドウをカレントウィンドウ、カレントモニターにする
         * </summary>
         */
        private void TraceWindow_ActivateEvent(object sender, TraceWindow.OriginalWinEventArg w)
        {
            try
            {
                Logger.DebugWindowInfo("Window Activated", w.WindowInfo);

                var currentWindowInfo   = this.monitorManager.GetCurrentMonitorWindowManager().GetCurrentWindow();
                var activatedWindowInfo = w.WindowInfo;

                if ((currentWindowInfo == null) || currentWindowInfo.Equals(activatedWindowInfo))
                {
                    return;
                }

                // アクティヴ化されたウィンドウをカレントにして、そのウィンドウの所属モニターをカレントにする
                this.monitorManager.ActivateWindowInfo(activatedWindowInfo);
            }
            catch (Exception ex)
            {
                Logger.Exception(ex);
                throw ex;
            }
        }