[gnome-shell] runDialog: catch exceptions from Gio.app_info_launch_default_for_uri()



commit d12dd1491f8a31c40de50b958c500208b4c2980d
Author: Rui Matos <tiagomatos gmail com>
Date:   Wed Jul 6 20:43:49 2011 +0100

    runDialog: catch exceptions from Gio.app_info_launch_default_for_uri()
    
    An uncaught exception here would mean that the dialog wouldn't close.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=653700

 js/ui/runDialog.js |   55 ++++++++++++++++++++++++++++++++-------------------
 1 files changed, 34 insertions(+), 21 deletions(-)
---
diff --git a/js/ui/runDialog.js b/js/ui/runDialog.js
index 5152ecb..bd6fc25 100644
--- a/js/ui/runDialog.js
+++ b/js/ui/runDialog.js
@@ -333,33 +333,46 @@ __proto__: ModalDialog.ModalDialog.prototype,
 
                 if (GLib.file_test(path, GLib.FileTest.EXISTS)) {
                     let file = Gio.file_new_for_path(path);
-                    Gio.app_info_launch_default_for_uri(file.get_uri(),
-                                                        global.create_app_launch_context());
-                } else {
-                    this._commandError = true;
-
-                    this._errorMessage.set_text(e.message);
-
-                    if (!this._errorBox.visible) {
-                        let [errorBoxMinHeight, errorBoxNaturalHeight] = this._errorBox.get_preferred_height(-1);
-
-                        let parentActor = this._errorBox.get_parent();
-                        Tweener.addTween(parentActor,
-                                         { height: parentActor.height + errorBoxNaturalHeight,
-                                           time: DIALOG_GROW_TIME,
-                                           transition: 'easeOutQuad',
-                                           onComplete: Lang.bind(this,
-                                               function() {
-                                                    parentActor.set_height(-1);
-                                                    this._errorBox.show();
-                                               })
-                                         });
+                    try {
+                        Gio.app_info_launch_default_for_uri(file.get_uri(),
+                                                            global.create_app_launch_context());
+                    } catch (e) {
+                        // The exception from gjs contains an error string like:
+                        //     Error invoking Gio.app_info_launch_default_for_uri: No application
+                        //     is registered as handling this file
+                        // We are only interested in the part after the first colon.
+                        let message = e.message.replace(/[^:]*: *(.+)/, '$1');
+                        this._showError(message);
                     }
+                } else {
+                    this._showError(e.message);
                 }
             }
         }
     },
 
+    _showError : function(message) {
+        this._commandError = true;
+
+        this._errorMessage.set_text(message);
+
+        if (!this._errorBox.visible) {
+            let [errorBoxMinHeight, errorBoxNaturalHeight] = this._errorBox.get_preferred_height(-1);
+
+            let parentActor = this._errorBox.get_parent();
+            Tweener.addTween(parentActor,
+                             { height: parentActor.height + errorBoxNaturalHeight,
+                               time: DIALOG_GROW_TIME,
+                               transition: 'easeOutQuad',
+                               onComplete: Lang.bind(this,
+                                                     function() {
+                                                         parentActor.set_height(-1);
+                                                         this._errorBox.show();
+                                                     })
+                             });
+        }
+    },
+
     open: function() {
         this._history.lastItem();
         this._errorBox.hide();



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]