@@ -29,8 +29,7 @@ Ext.define('EdiromOnline.controller.window.SingleWindowController', {
2929 'EdiromOnline.view.window.source.VerovioView' ,
3030 'EdiromOnline.view.window.source.SourceView' ,
3131 'EdiromOnline.view.window.text.FacsimileView' ,
32- 'EdiromOnline.view.window.text.TextFacsimileSplitView' ,
33- 'EdiromOnline.view.window.text.TextView'
32+ 'EdiromOnline.view.window.text.TextFacsimileSplitView'
3433 ] ,
3534
3635 views : [
@@ -40,10 +39,9 @@ Ext.define('EdiromOnline.controller.window.SingleWindowController', {
4039 init : function ( ) {
4140 } ,
4241
43- // Called by WindowController right after the window is created, while it is
44- // STILL HIDDEN. The window is only ever shown once we know its content (see
45- // onMetaDataLoaded) — audio-only resources are never shown at all, so no empty
46- // ExtJS window flashes on screen before the audio popup appears.
42+ // Called by WindowController before the ExtJS window is registered with the
43+ // desktop. Metadata decides whether the resource uses WinBox or ExtJS, so
44+ // audio and text resources never create an ExtJS view or taskbar entry.
4745 loadWindowContent : function ( win ) {
4846 var me = this ;
4947 var lang = getPreference ( 'application_language' ) ;
@@ -68,48 +66,55 @@ Ext.define('EdiromOnline.controller.window.SingleWindowController', {
6866 onMetaDataLoaded : function ( config , win ) {
6967
7068 var me = this ;
69+ var desktopController = this . application . getController ( 'desktop.Desktop' ) ;
70+ var handledByWebComponent = false ;
71+
72+ // Decide whether the resource belongs in a web-component window before
73+ // creating any ExtJS views. This prevents hidden MEI/text views from
74+ // being initialized for resources handled by WinBox.
75+ Ext . Array . each ( config . views , function ( view ) {
76+ if ( view . type == 'audioView' ) {
77+ handledByWebComponent = true ;
78+ desktopController . openAudioView ( view . uri , view . label || config . title ) ;
79+ } else if ( view . type == 'textView' ) {
80+ handledByWebComponent = true ;
81+ desktopController . openTextView ( view . uri , config . title || view . label , {
82+ term : config . term ,
83+ path : config . path ,
84+ internalId : config . internalId
85+ } ) ;
86+ }
87+ } ) ;
88+
89+ if ( handledByWebComponent ) {
90+ win . destroy ( ) ;
91+ return ;
92+ }
93+
7194 var views = [ ] ;
72- var hasAudioView = false ;
73-
7495 Ext . Array . each ( config . views , function ( view ) {
75- var uri = view . uri ;
76-
77- if ( view . type == "iFrameView" && config [ "term" ] != "" && config [ "path" ] != "" ) {
78- uri = uri + "?term=" + config [ "term" ] + "&path=" + config [ "path" ] + "#searchTarget" ;
79- }
80-
81- if ( view . type == "iFrameView" && config [ "internalId" ] != "" ) {
82- uri = uri + "#" + config [ "internalId" ] ;
83- }
84-
85- // Audio content opens in its own WinBox popup instead of an ExtJS tab.
86- if ( view . type == "audioView" ) {
87- hasAudioView = true ;
88- this . application . getController ( 'desktop.Desktop' ) . openAudioView ( uri , view . label ) ;
89- return ;
96+ var uri = view . uri ;
97+
98+ if ( view . type == 'iFrameView' && config . term != '' && config . path != '' ) {
99+ uri = uri + '?term=' + config . term + '&path=' + config . path + '#searchTarget' ;
100+ }
101+
102+ if ( view . type == 'iFrameView' && config . internalId != '' ) {
103+ uri = uri + '#' + config . internalId ;
90104 }
91105
92106 views . push ( this . createView ( view . type , {
93- window :win ,
94- type :config . type ,
107+ window : win ,
108+ type : config . type ,
95109 viewType : view . type ,
96110 viewLabel : view . label ,
97111 defaultView : view . defaultView ,
98- uri :uri
112+ uri : uri
99113 } ) ) ;
100-
101114 } , me ) ;
102115
103- // Audio resources open exclusively in the audio-player popup. The window
104- // was never shown (see loadWindowContent), so just discard it — nothing
105- // was ever painted, unlike the old win.close() which closed an already-
106- // visible window.
107- if ( hasAudioView ) {
108- win . destroy ( ) ;
109- return ;
110- }
111-
112116 config . views = views ;
117+ desktopController . addWindowToActiveDesktop ( win ) ;
113118 win . setWindowConfig ( config ) ;
114119 win . show ( ) ;
115120 } ,
@@ -138,7 +143,6 @@ Ext.define('EdiromOnline.controller.window.SingleWindowController', {
138143 case 'verovioView' : return getLangString ( 'controller.window.Window_verovioView' ) ;
139144 case 'headerView' : return getLangString ( 'controller.window.Window_headerView' ) ;
140145 case 'facsimileView' : return 'Facsimile' ;
141- case 'textView' : return getLangString ( 'controller.window.Window_textView' ) ;
142146 case 'annotationView' : return getLangString ( 'controller.window.Window_annotationView' ) ;
143147 case 'textFacsimileSplitView' : return getLangString ( 'controller.window.Window_textFacsimileSplitView' ) ;
144148 //TODO:case 'searchView': return 'Suche';
@@ -153,7 +157,6 @@ Ext.define('EdiromOnline.controller.window.SingleWindowController', {
153157 case 'sourceView' : return 'EdiromOnline.view.window.source.SourceView' ;
154158 case 'verovioView' : return 'EdiromOnline.view.window.source.VerovioView' ;
155159 case 'headerView' : return 'EdiromOnline.view.window.HeaderView' ;
156- case 'textView' : return 'EdiromOnline.view.window.text.TextView' ;
157160 case 'facsimileView' : return 'EdiromOnline.view.window.text.FacsimileView' ;
158161 case 'annotationView' : return 'EdiromOnline.view.window.AnnotationView' ;
159162 case 'textFacsimileSplitView' : return 'EdiromOnline.view.window.text.TextFacsimileSplitView' ;
0 commit comments