@@ -10,6 +10,7 @@ import {
1010 disconnect_signals ,
1111 replaceBufferText ,
1212 unstack ,
13+ listenProperty ,
1314} from "./util.js" ;
1415
1516import {
@@ -60,12 +61,7 @@ export default function PanelUI({
6061
6162 const xml = await compile ( ) ;
6263 replaceBufferText ( buffer_xml , xml ) ;
63- settings . set_int ( "ui-language" , 0 ) ;
6464 }
65- const button_ui_export_xml = builder . get_object ( "button_ui_export_xml" ) ;
66- button_ui_export_xml . connect ( "clicked" , ( ) => {
67- convertToXML ( ) . catch ( logError ) ;
68- } ) ;
6965
7066 async function convertToBlueprint ( ) {
7167 term_console . clear ( ) ;
@@ -84,21 +80,7 @@ export default function PanelUI({
8480 }
8581
8682 replaceBufferText ( buffer_blueprint , blp ) ;
87- settings . set_int ( "ui-language" , 1 ) ;
8883 }
89- const button_ui_export_blueprint = builder . get_object (
90- "button_ui_export_blueprint" ,
91- ) ;
92- button_ui_export_blueprint . connect ( "clicked" , ( ) => {
93- convertToBlueprint ( ) . catch ( logError ) ;
94- } ) ;
95-
96- settings . bind (
97- "ui-language" ,
98- dropdown_ui_lang ,
99- "selected" ,
100- Gio . SettingsBindFlags . DEFAULT ,
101- ) ;
10284
10385 const button_ui_experimental_blueprint = builder . get_object (
10486 "button_ui_experimental_blueprint" ,
@@ -119,21 +101,13 @@ export default function PanelUI({
119101 ) ;
120102 } ) ;
121103
122- dropdown_ui_lang . connect ( "notify::selected-item" , switchLanguage ) ;
123- function switchLanguage ( ) {
124- const language = getLanguage ( dropdown_ui_lang . selected_item . string ) ;
125- stack_ui . set_visible_child_name ( language . id ) ;
126- button_ui_experimental_blueprint . visible = language . id === "blueprint" ;
127- }
128- switchLanguage ( ) ;
129-
130104 let handler_ids = null ;
131105
132106 const scheduleUpdate = unstack ( update ) ;
133107 async function update ( ) {
134108 let xml ;
135109 if ( lang . id === "xml" ) {
136- xml = lang . document . buffer . text ;
110+ xml = buffer_xml . text ;
137111 } else {
138112 xml = await compile ( ) ;
139113 }
@@ -159,12 +133,44 @@ export default function PanelUI({
159133 }
160134 }
161135
162- settings . connect_after ( "changed::ui-language" , ( ) => {
163- start ( ) ;
164- scheduleUpdate ( ) ;
136+ async function onChangeLang ( value ) {
137+ if ( value === 0 ) {
138+ try {
139+ await convertToXML ( ) ;
140+ } catch ( err ) {
141+ logError ( err ) ;
142+ dropdown_ui_lang . block ( ) ;
143+ dropdown_ui_lang . set_selected ( 1 ) ;
144+ dropdown_ui_lang . unblock ( ) ;
145+ return ;
146+ }
147+ } else if ( value === 1 ) {
148+ try {
149+ await convertToBlueprint ( ) ;
150+ } catch ( err ) {
151+ logError ( err ) ;
152+ dropdown_ui_lang . block ( ) ;
153+ dropdown_ui_lang . set_selected ( 0 ) ;
154+ dropdown_ui_lang . unblock ( ) ;
155+ return ;
156+ }
157+ }
158+
159+ settings . set_int ( "ui-language" , dropdown_ui_lang . selected ) ;
160+ setupLanguage ( ) ;
161+ }
162+
163+ dropdown_ui_lang . set_selected ( settings . get_int ( "ui-language" ) ) ;
164+ listenProperty ( dropdown_ui_lang , "selected" , ( value ) => {
165+ onChangeLang ( value ) . catch ( logError ) ;
165166 } ) ;
166167
167- start ( ) ;
168+ function setupLanguage ( ) {
169+ start ( ) ;
170+ stack_ui . set_visible_child_name ( lang . id ) ;
171+ button_ui_experimental_blueprint . visible = lang . id === "blueprint" ;
172+ }
173+ setupLanguage ( ) ;
168174
169175 panel . start = start ;
170176 panel . stop = stop ;
0 commit comments