firefox-shellservice.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Wed, 12 Jan 2011 22:45:15 +0100
changeset 210 f4f4388b26a8
child 223 4555a5d0d661
permissions -rw-r--r--
update to 2.0b9/4.0b9 removed firefox-appname.patch merge wip patches for GIO support from bmo
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
210
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     1
# HG changeset patch
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     2
# Parent 7530e890ad6ed214783244371ec1ef816d24083e
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     3
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     4
diff --git a/browser/components/shell/src/nsGNOMEShellService.cpp b/browser/components/shell/src/nsGNOMEShellService.cpp
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     5
--- a/browser/components/shell/src/nsGNOMEShellService.cpp
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     6
+++ b/browser/components/shell/src/nsGNOMEShellService.cpp
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     7
@@ -101,30 +101,33 @@ static const char kDesktopOptionsKey[] =
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     8
 static const char kDesktopDrawBGKey[] = DG_BACKGROUND "/draw_background";
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     9
 static const char kDesktopColorKey[] = DG_BACKGROUND "/primary_color";
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    10
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    11
 nsresult
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    12
 nsGNOMEShellService::Init()
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    13
 {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    14
   nsresult rv;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    15
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    16
-  // GConf _must_ be available, or we do not allow
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    17
+  // GConf or GIO _must_ be available, or we do not allow
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    18
   // CreateInstance to succeed.
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    19
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    20
   nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    21
   nsCOMPtr<nsIGIOService> giovfs =
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    22
     do_GetService(NS_GIOSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    23
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    24
-  if (!gconf)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    25
+  if (!gconf && !giovfs)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    26
     return NS_ERROR_NOT_AVAILABLE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    27
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    28
   // Check G_BROKEN_FILENAMES.  If it's set, then filenames in glib use
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    29
   // the locale encoding.  If it's not set, they use UTF-8.
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    30
   mUseLocaleFilenames = PR_GetEnv("G_BROKEN_FILENAMES") != nsnull;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    31
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    32
+  if (GetAppPathFromLauncher())
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    33
+    return NS_OK;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    34
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    35
   nsCOMPtr<nsIProperties> dirSvc
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    36
     (do_GetService("@mozilla.org/file/directory_service;1"));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    37
   NS_ENSURE_TRUE(dirSvc, NS_ERROR_NOT_AVAILABLE);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    38
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    39
   nsCOMPtr<nsILocalFile> appPath;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    40
   rv = dirSvc->Get(NS_XPCOM_CURRENT_PROCESS_DIR, NS_GET_IID(nsILocalFile),
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    41
                    getter_AddRefs(appPath));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    42
   NS_ENSURE_SUCCESS(rv, rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    43
@@ -133,16 +136,44 @@ nsGNOMEShellService::Init()
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    44
   NS_ENSURE_SUCCESS(rv, rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    45
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    46
   return appPath->GetNativePath(mAppPath);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    47
 }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    48
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    49
 NS_IMPL_ISUPPORTS1(nsGNOMEShellService, nsIShellService)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    50
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    51
 PRBool
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    52
+nsGNOMEShellService::GetAppPathFromLauncher()
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    53
+{
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    54
+  gchar *tmp;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    55
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    56
+  const char *launcher = PR_GetEnv("MOZ_APP_LAUNCHER");
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    57
+  if (!launcher)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    58
+    return PR_FALSE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    59
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    60
+  if (g_path_is_absolute(launcher)) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    61
+    mAppPath = launcher;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    62
+    tmp = g_path_get_basename(launcher);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    63
+    gchar *fullpath = g_find_program_in_path(tmp);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    64
+    if (fullpath && mAppPath.Equals(fullpath))
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    65
+      mAppIsInPath = PR_TRUE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    66
+    g_free(fullpath);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    67
+  } else {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    68
+    tmp = g_find_program_in_path(launcher);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    69
+    if (!tmp)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    70
+      return PR_FALSE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    71
+    mAppPath = tmp;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    72
+    mAppIsInPath = PR_TRUE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    73
+  }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    74
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    75
+  g_free(tmp);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    76
+  return PR_TRUE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    77
+}
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    78
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    79
+PRBool
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    80
 nsGNOMEShellService::KeyMatchesAppName(const char *aKeyValue) const
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    81
 {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    82
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    83
   gchar *commandPath;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    84
   if (mUseLocaleFilenames) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    85
     gchar *nativePath = g_filename_from_utf8(aKeyValue, -1, NULL, NULL, NULL);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    86
     if (!nativePath) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    87
       NS_ERROR("Error converting path to filesystem encoding");
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    88
@@ -158,84 +189,119 @@ nsGNOMEShellService::KeyMatchesAppName(c
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    89
   if (!commandPath)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    90
     return PR_FALSE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    91
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    92
   PRBool matches = mAppPath.Equals(commandPath);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    93
   g_free(commandPath);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    94
   return matches;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    95
 }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    96
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    97
+PRBool
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    98
+nsGNOMEShellService::CheckHandlerMatchesAppName(const nsACString &handler) const
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    99
+{
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   100
+  gint argc;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   101
+  gchar **argv;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   102
+  nsCAutoString command(handler);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   103
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   104
+  // The string will be something of the form: [/path/to/]browser "%s"
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   105
+  // We want to remove all of the parameters and get just the binary name.
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   106
+  if (g_shell_parse_argv(command.get(), &argc, &argv, NULL) && argc > 0) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   107
+    command.Assign(argv[0]);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   108
+    g_strfreev(argv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   109
+  }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   110
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   111
+  if (!KeyMatchesAppName(command.get()))
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   112
+    return PR_FALSE; // the handler is disabled or set to another app
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   113
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   114
+  return PR_TRUE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   115
+}
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   116
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   117
 NS_IMETHODIMP
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   118
 nsGNOMEShellService::IsDefaultBrowser(PRBool aStartupCheck,
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   119
                                       PRBool* aIsDefaultBrowser)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   120
 {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   121
   *aIsDefaultBrowser = PR_FALSE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   122
   if (aStartupCheck)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   123
     mCheckedThisSession = PR_TRUE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   124
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   125
   nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   126
+  nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   127
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   128
   PRBool enabled;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   129
   nsCAutoString handler;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   130
+  nsCOMPtr<nsIGIOMimeApp> gioApp;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   131
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   132
   for (unsigned int i = 0; i < NS_ARRAY_LENGTH(appProtocols); ++i) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   133
     if (!appProtocols[i].essential)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   134
       continue;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   135
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   136
-    handler.Truncate();
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   137
-    gconf->GetAppForProtocol(nsDependentCString(appProtocols[i].name),
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   138
-                             &enabled, handler);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   139
+    if (gconf) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   140
+      handler.Truncate();
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   141
+      gconf->GetAppForProtocol(nsDependentCString(appProtocols[i].name),
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   142
+                               &enabled, handler);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   143
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   144
-    // The string will be something of the form: [/path/to/]browser "%s"
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   145
-    // We want to remove all of the parameters and get just the binary name.
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   146
-
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   147
-    gint argc;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   148
-    gchar **argv;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   149
-
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   150
-    if (g_shell_parse_argv(handler.get(), &argc, &argv, NULL) && argc > 0) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   151
-      handler.Assign(argv[0]);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   152
-      g_strfreev(argv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   153
+      if (!CheckHandlerMatchesAppName(handler) || !enabled)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   154
+        return NS_OK; // the handler is disabled or set to another app
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   155
     }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   156
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   157
-    if (!KeyMatchesAppName(handler.get()) || !enabled)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   158
-      return NS_OK; // the handler is disabled or set to another app
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   159
+    if (giovfs) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   160
+      handler.Truncate();
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   161
+      giovfs->GetAppForURIScheme(nsDependentCString(appProtocols[i].name),
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   162
+                                 getter_AddRefs(gioApp));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   163
+      if (!gioApp)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   164
+        return NS_OK;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   165
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   166
+      gioApp->GetCommand(handler);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   167
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   168
+      if (!CheckHandlerMatchesAppName(handler))
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   169
+        return NS_OK; // the handler is set to another app
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   170
+    }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   171
   }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   172
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   173
   *aIsDefaultBrowser = PR_TRUE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   174
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   175
   return NS_OK;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   176
 }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   177
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   178
 NS_IMETHODIMP
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   179
 nsGNOMEShellService::SetDefaultBrowser(PRBool aClaimAllTypes,
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   180
                                        PRBool aForAllUsers)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   181
 {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   182
 #ifdef DEBUG
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   183
   if (aForAllUsers)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   184
     NS_WARNING("Setting the default browser for all users is not yet supported");
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   185
 #endif
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   186
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   187
+  nsCAutoString appKeyValue;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   188
   nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   189
+  nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   190
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   191
+  if (mAppIsInPath) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   192
+    // mAppPath is in the users path, so use only the basename as the
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   193
+    // launcher
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   194
+    gchar *tmp = g_path_get_basename(mAppPath.get());
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   195
+    appKeyValue = tmp;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   196
+    g_free(tmp);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   197
+  } else {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   198
+    appKeyValue = mAppPath;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   199
+  }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   200
+  appKeyValue.AppendLiteral(" %s");
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   201
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   202
   if (gconf) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   203
-    nsCAutoString appKeyValue(mAppPath);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   204
-    appKeyValue.Append(" \"%s\"");
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   205
     for (unsigned int i = 0; i < NS_ARRAY_LENGTH(appProtocols); ++i) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   206
       if (appProtocols[i].essential || aClaimAllTypes) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   207
         gconf->SetAppForProtocol(nsDependentCString(appProtocols[i].name),
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   208
                                  appKeyValue);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   209
       }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   210
     }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   211
   }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   212
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   213
-  // set handler for .html and xhtml files and MIME types:
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   214
-  if (aClaimAllTypes) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   215
+  if (giovfs) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   216
     nsresult rv;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   217
-    nsCOMPtr<nsIGIOService> giovfs =
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   218
-      do_GetService(NS_GIOSERVICE_CONTRACTID, &rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   219
-    NS_ENSURE_SUCCESS(rv, rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   220
+    unsigned int i;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   221
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   222
     nsCOMPtr<nsIStringBundleService> bundleService =
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   223
       do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   224
     NS_ENSURE_SUCCESS(rv, rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   225
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   226
     nsCOMPtr<nsIStringBundle> brandBundle;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   227
     rv = bundleService->CreateBundle(BRAND_PROPERTIES, getter_AddRefs(brandBundle));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   228
     NS_ENSURE_SUCCESS(rv, rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   229
@@ -249,20 +315,30 @@ nsGNOMEShellService::SetDefaultBrowser(P
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   230
     // use brandShortName as the application id.
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   231
     NS_ConvertUTF16toUTF8 id(brandShortName);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   232
     nsCOMPtr<nsIGIOMimeApp> appInfo;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   233
     rv = giovfs->CreateAppFromCommand(mAppPath,
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   234
                                       id,
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   235
                                       getter_AddRefs(appInfo));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   236
     NS_ENSURE_SUCCESS(rv, rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   237
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   238
-    // Add mime types for html, xhtml extension and set app to just created appinfo.
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   239
-    for (unsigned int i = 0; i < NS_ARRAY_LENGTH(appTypes); ++i) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   240
-      appInfo->SetAsDefaultForMimeType(nsDependentCString(appTypes[i].mimeType));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   241
-      appInfo->SetAsDefaultForFileExtensions(nsDependentCString(appTypes[i].extensions));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   242
+    // set handler for the protocols
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   243
+    for (i = 0; i < NS_ARRAY_LENGTH(appProtocols); ++i) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   244
+      if (appProtocols[i].essential || aClaimAllTypes) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   245
+        appInfo->SetAsDefaultForURIScheme(nsDependentCString(appProtocols[i].name));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   246
+      }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   247
+    }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   248
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   249
+    // set handler for .html and xhtml files and MIME types:
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   250
+    if (aClaimAllTypes) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   251
+      // Add mime types for html, xhtml extension and set app to just created appinfo.
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   252
+      for (i = 0; i < NS_ARRAY_LENGTH(appTypes); ++i) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   253
+        appInfo->SetAsDefaultForMimeType(nsDependentCString(appTypes[i].mimeType));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   254
+        appInfo->SetAsDefaultForFileExtensions(nsDependentCString(appTypes[i].extensions));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   255
+      }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   256
     }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   257
   }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   258
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   259
   return NS_OK;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   260
 }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   261
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   262
 NS_IMETHODIMP
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   263
 nsGNOMEShellService::GetShouldCheckDefaultBrowser(PRBool* aResult)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   264
@@ -451,17 +527,27 @@ nsGNOMEShellService::OpenApplication(PRI
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   265
   nsCAutoString scheme;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   266
   if (aApplication == APPLICATION_MAIL)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   267
     scheme.Assign("mailto");
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   268
   else if (aApplication == APPLICATION_NEWS)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   269
     scheme.Assign("news");
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   270
   else
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   271
     return NS_ERROR_NOT_AVAILABLE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   272
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   273
+  nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   274
+  if (giovfs) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   275
+    nsCOMPtr<nsIGIOMimeApp> gioApp;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   276
+    giovfs->GetAppForURIScheme(scheme, getter_AddRefs(gioApp));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   277
+    if (gioApp)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   278
+      return gioApp->Launch(EmptyCString());
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   279
+  }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   280
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   281
   nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   282
+  if (!gconf)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   283
+    return NS_ERROR_FAILURE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   284
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   285
   PRBool enabled;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   286
   nsCAutoString appCommand;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   287
   gconf->GetAppForProtocol(scheme, &enabled, appCommand);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   288
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   289
   if (!enabled)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   290
     return NS_ERROR_FAILURE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   291
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   292
diff --git a/browser/components/shell/src/nsGNOMEShellService.h b/browser/components/shell/src/nsGNOMEShellService.h
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   293
--- a/browser/components/shell/src/nsGNOMEShellService.h
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   294
+++ b/browser/components/shell/src/nsGNOMEShellService.h
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   295
@@ -38,26 +38,29 @@
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   296
 #define nsgnomeshellservice_h____
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   297
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   298
 #include "nsIShellService.h"
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   299
 #include "nsStringAPI.h"
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   300
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   301
 class nsGNOMEShellService : public nsIShellService
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   302
 {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   303
 public:
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   304
-  nsGNOMEShellService() : mCheckedThisSession(PR_FALSE) { }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   305
+  nsGNOMEShellService() : mCheckedThisSession(PR_FALSE), mAppIsInPath(PR_FALSE) { }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   306
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   307
   NS_DECL_ISUPPORTS
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   308
   NS_DECL_NSISHELLSERVICE
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   309
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   310
   nsresult Init() NS_HIDDEN;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   311
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   312
 private:
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   313
   ~nsGNOMEShellService() {}
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   314
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   315
   NS_HIDDEN_(PRBool) KeyMatchesAppName(const char *aKeyValue) const;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   316
+  NS_HIDDEN_(PRBool) CheckHandlerMatchesAppName(const nsACString& handler) const;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   317
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   318
+  NS_HIDDEN_(PRBool) GetAppPathFromLauncher();
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   319
   PRPackedBool mCheckedThisSession;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   320
   PRPackedBool mUseLocaleFilenames;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   321
   nsCString    mAppPath;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   322
+  PRPackedBool mAppIsInPath;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   323
 };
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   324
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   325
 #endif // nsgnomeshellservice_h____