// ĠCopyright Ġ 2 0 0 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġcom . intellij . openapi . wm . impl Ċ Ċ import Ġcom . intellij . openapi . diagnostic . logger Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . util . System Info Ċ import Ġcom . intellij . openapi . wm . impl . Frame Info Helper . Companion . is FullScreen Supported In Current OS Ċ import Ġcom . intellij . openapi . wm . impl . WindowManager Impl . Frame Bounds Converter . convertTo Device Space Ċ import Ġcom . intellij . ui . Frame State Ċ import Ġcom . intellij . ui . Screen Util Ċ import Ġsun . awt . AW T Accessor Ċ import Ġjava . awt . Point Ċ import Ġjava . awt . peer . Frame Peer Ċ Ċ class ĠFrame Info Helper Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġis FullScreen Supported In Current OS (): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġreturn ĠSystem Info . is MacOS L ion Ġ|| ĠSystem Info . is Windows Ġ|| Ġ( System Info . is X Window Ġ&& ĠX 1 1 Ui Util . is FullScreen Supported ()) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// Ġin Ġdevice Ġspace ĊĠ Ġvar Ġinfo : ĠFrame Info ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġset ĊĊĠ Ġ@ Volatile ĊĠ Ġvar Ġis Dirty Ġ= Ġfalse ĊĊĠ Ġfun Ġset Info In Device Space ( info : ĠFrame Info ) Ġ{ ĊĠĠĠ Ġthis . info Ġ= Ġinfo ĊĠ Ġ} ĊĊĠ Ġfun Ġupdate Frame Info ( frame : ĠIde Frame Impl ) Ġ{ ĊĠĠĠ Ġinfo Ġ= Ġupdate Frame Info ( frame , Ġinfo ) ĊĠ Ġ} ĊĊĠ Ġfun Ġget Modification Count (): ĠLong Ġ{ ĊĠĠĠ Ġreturn Ġinfo ?. modification Count Ġ?: Ġ 0 ĊĠ Ġ} ĊĊĠ Ġfun Ġupdate AndGet Modification Count ( project : ĠProject , Ġwindow Manager : ĠWindow ManagerImpl ): ĠLong Ġ{ ĊĠĠĠ Ġreturn Ġupdate AndGet Modification Count ( window Manager . get Frame ( project ) Ġ?: Ġreturn Ġget Modification Count (), Ġwindow Manager ) ĊĠ Ġ} ĊĊĠ Ġfun Ġupdate AndGet Modification Count ( frame : ĠIde Frame Impl , Ġwindow Manager : ĠWindow ManagerImpl ): ĠLong Ġ{ ĊĠĠĠ Ġval Ġnew Info Ġ= Ġupdate Frame Info ( frame , Ġinfo ) ĊĠĠĠ Ġupdate Default Frame Info In Device Space ( window Manager , Ġnew Info ) ĊĠĠĠ Ġinfo Ġ= Ġnew Info ĊĊĠĠĠ Ġis Dirty Ġ= Ġfalse ĊĠĠĠ Ġreturn Ġget Modification Count () ĊĠ Ġ} ĊĊĠ Ġfun Ġcopy From ( new Info : ĠFrame Info ) Ġ{ ĊĠĠĠ Ġif Ġ( info Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġinfo Ġ= ĠFrame Info () ĊĠĠĠ Ġ} ĊĠĠĠ Ġinfo !!. copyFrom ( new Info ) ĊĠĠĠ Ġis Dirty Ġ= Ġfalse ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġupdate Frame Info ( frame : ĠIde Frame Impl , Ġold Frame Info : ĠFrame Info ?): ĠFrame Info Ġ{ ĊĠ Ġvar Ġextended State Ġ= Ġframe . extended State ĊĠ Ġif Ġ( System Info . is MacOS L ion ) Ġ{ ĊĠĠĠ Ġval Ġpeer Ġ= ĠA WT Accessor . getComponent Accessor (). get Peer ( frame ) ĊĠĠĠ Ġif Ġ( peer Ġis ĠFrame Peer ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġframe . state Ġis Ġnot Ġupdated Ġby Ġj dk Ġso Ġget Ġit Ġdirectly Ġfrom Ġpeer ĊĠĠĠĠĠ Ġextended State Ġ= Ġpeer . state ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġval ĠisIn FullScreen Ġ= Ġis FullScreen Supported In Current OS () Ġ&& Ġframe . isIn FullScreen ĊĠ Ġval Ġis Max im ized Ġ= ĠFrame State . is Max im ized ( extended State ) Ġ|| ĠisIn FullScreen ĊĊĠ Ġval Ġold Bounds Ġ= Ġold Frame Info ?. bounds ĊĠ Ġval Ġnew Bounds Ġ= ĠconvertTo Device Space ( frame . graphics Configuration , Ġframe . bounds ) ĊĊĠ Ġval Ġuse Previous Bounds Ġ= Ġis Max im ized Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Bounds Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Bounds . contains ( Point ( old Bounds . center X . toInt (), Ġold Bounds . center Y . toInt ())) ĊĊĠ Ġ// Ġdon 't Ġreport Ġif Ġwas Ġalready Ġreported ĊĠ Ġif Ġ(! use Previous Bounds Ġ&& Ġold Bounds Ġ!= Ġnew Bounds Ġ&& Ġ! Screen Util . intersect s Visible Screen ( frame )) Ġ{ ĊĠĠĠ Ġlogger < Window Info Impl >(). error (" Frame Ġbounds Ġare Ġinvalid : Ġ$ new Bounds ") ĊĠ Ġ} ĊĊĠ Ġval Ġframe Info Ġ= Ġold Frame Info Ġ?: ĠFrame Info () ĊĠ Ġif Ġ(! use Previous Bounds ) Ġ{ ĊĠĠĠ Ġframe Info . bounds Ġ= Ġnew Bounds ĊĠ Ġ} ĊĠ Ġframe Info . extended State Ġ= Ġextended State ĊĠ Ġif Ġ( is FullScreen Supported In Current OS ()) Ġ{ ĊĠĠĠ Ġframe Info . full Screen Ġ= ĠisIn FullScreen ĊĠ Ġ} ĊĠ Ġframe Info . bounds Ġ= Ġnew Bounds ĊĠ Ġreturn Ġframe Info Ċ } Ċ Ċ internal Ġfun Ġupdate Default Frame Info In Device Space ( window Manager : ĠWindow ManagerImpl , Ġnew Info : ĠFrame Info ) Ġ{ ĊĠ Ġ// Ġsee Ġcomment Ġin Ġthe Ġmy Frame State Listener Ġabout Ġch icken Ġand Ġegg Ġproblem ĊĠ Ġwindow Manager . default Frame Info Helper . copyFrom ( new Info ) Ċ }