firefox-shellservice.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Thu, 03 Feb 2011 10:42:10 +0100
changeset 226 6bf3bb4c115e
parent 223 4555a5d0d661
child 229 298263f797be
permissions -rw-r--r--
update for 2.0b11/4.0b11 - added mozilla-cairo-return.patch - rebased patches
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
223
4555a5d0d661 patch reorganization
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 210
diff changeset
     2
# Parent e46704258210bc68bc65773f60a0d32cb2ce767d
4555a5d0d661 patch reorganization
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 210
diff changeset
     3
Bug 611953 - GNOME 3.0 readiness (based on patch 3)
210
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     4
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     5
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
     6
--- a/browser/components/shell/src/nsGNOMEShellService.cpp
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     7
+++ b/browser/components/shell/src/nsGNOMEShellService.cpp
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     8
@@ -101,30 +101,33 @@ static const char kDesktopOptionsKey[] =
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     9
 static const char kDesktopDrawBGKey[] = DG_BACKGROUND "/draw_background";
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    10
 static const char kDesktopColorKey[] = DG_BACKGROUND "/primary_color";
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    11
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    12
 nsresult
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    13
 nsGNOMEShellService::Init()
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    14
 {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    15
   nsresult rv;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    16
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    17
-  // GConf _must_ be available, or we do not allow
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    18
+  // 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
    19
   // CreateInstance to succeed.
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    20
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    21
   nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    22
   nsCOMPtr<nsIGIOService> giovfs =
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    23
     do_GetService(NS_GIOSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    24
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    25
-  if (!gconf)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    26
+  if (!gconf && !giovfs)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    27
     return NS_ERROR_NOT_AVAILABLE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    28
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    29
   // 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
    30
   // 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
    31
   mUseLocaleFilenames = PR_GetEnv("G_BROKEN_FILENAMES") != nsnull;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    32
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    33
+  if (GetAppPathFromLauncher())
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    34
+    return NS_OK;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    35
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    36
   nsCOMPtr<nsIProperties> dirSvc
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    37
     (do_GetService("@mozilla.org/file/directory_service;1"));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    38
   NS_ENSURE_TRUE(dirSvc, NS_ERROR_NOT_AVAILABLE);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    39
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    40
   nsCOMPtr<nsILocalFile> appPath;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    41
   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
    42
                    getter_AddRefs(appPath));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    43
   NS_ENSURE_SUCCESS(rv, rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    44
@@ -133,16 +136,44 @@ nsGNOMEShellService::Init()
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    45
   NS_ENSURE_SUCCESS(rv, rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    46
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    47
   return appPath->GetNativePath(mAppPath);
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
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    50
 NS_IMPL_ISUPPORTS1(nsGNOMEShellService, nsIShellService)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    51
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    52
 PRBool
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    53
+nsGNOMEShellService::GetAppPathFromLauncher()
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    54
+{
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    55
+  gchar *tmp;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    56
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    57
+  const char *launcher = PR_GetEnv("MOZ_APP_LAUNCHER");
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    58
+  if (!launcher)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    59
+    return PR_FALSE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    60
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    61
+  if (g_path_is_absolute(launcher)) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    62
+    mAppPath = launcher;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    63
+    tmp = g_path_get_basename(launcher);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    64
+    gchar *fullpath = g_find_program_in_path(tmp);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    65
+    if (fullpath && mAppPath.Equals(fullpath))
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    66
+      mAppIsInPath = PR_TRUE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    67
+    g_free(fullpath);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    68
+  } else {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    69
+    tmp = g_find_program_in_path(launcher);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    70
+    if (!tmp)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    71
+      return PR_FALSE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    72
+    mAppPath = tmp;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    73
+    mAppIsInPath = PR_TRUE;
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
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    76
+  g_free(tmp);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    77
+  return PR_TRUE;
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
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    80
+PRBool
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    81
 nsGNOMEShellService::KeyMatchesAppName(const char *aKeyValue) const
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
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    84
   gchar *commandPath;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    85
   if (mUseLocaleFilenames) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    86
     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
    87
     if (!nativePath) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    88
       NS_ERROR("Error converting path to filesystem encoding");
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    89
@@ -158,84 +189,119 @@ nsGNOMEShellService::KeyMatchesAppName(c
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    90
   if (!commandPath)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    91
     return PR_FALSE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    92
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    93
   PRBool matches = mAppPath.Equals(commandPath);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    94
   g_free(commandPath);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    95
   return matches;
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
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    98
+PRBool
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    99
+nsGNOMEShellService::CheckHandlerMatchesAppName(const nsACString &handler) const
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   100
+{
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   101
+  gint argc;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   102
+  gchar **argv;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   103
+  nsCAutoString command(handler);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   104
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   105
+  // 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
   106
+  // 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
   107
+  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
   108
+    command.Assign(argv[0]);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   109
+    g_strfreev(argv);
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
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   112
+  if (!KeyMatchesAppName(command.get()))
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   113
+    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
   114
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   115
+  return PR_TRUE;
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
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   118
 NS_IMETHODIMP
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   119
 nsGNOMEShellService::IsDefaultBrowser(PRBool aStartupCheck,
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   120
                                       PRBool* aIsDefaultBrowser)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   121
 {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   122
   *aIsDefaultBrowser = PR_FALSE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   123
   if (aStartupCheck)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   124
     mCheckedThisSession = PR_TRUE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   125
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   126
   nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   127
+  nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   128
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   129
   PRBool enabled;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   130
   nsCAutoString handler;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   131
+  nsCOMPtr<nsIGIOMimeApp> gioApp;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   132
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   133
   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
   134
     if (!appProtocols[i].essential)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   135
       continue;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   136
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   137
-    handler.Truncate();
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   138
-    gconf->GetAppForProtocol(nsDependentCString(appProtocols[i].name),
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   139
-                             &enabled, handler);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   140
+    if (gconf) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   141
+      handler.Truncate();
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   142
+      gconf->GetAppForProtocol(nsDependentCString(appProtocols[i].name),
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   143
+                               &enabled, handler);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   144
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   145
-    // 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
   146
-    // 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
   147
-
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   148
-    gint argc;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   149
-    gchar **argv;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   150
-
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   151
-    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
   152
-      handler.Assign(argv[0]);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   153
-      g_strfreev(argv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   154
+      if (!CheckHandlerMatchesAppName(handler) || !enabled)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   155
+        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
   156
     }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   157
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   158
-    if (!KeyMatchesAppName(handler.get()) || !enabled)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   159
-      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
   160
+    if (giovfs) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   161
+      handler.Truncate();
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   162
+      giovfs->GetAppForURIScheme(nsDependentCString(appProtocols[i].name),
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   163
+                                 getter_AddRefs(gioApp));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   164
+      if (!gioApp)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   165
+        return NS_OK;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   166
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   167
+      gioApp->GetCommand(handler);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   168
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   169
+      if (!CheckHandlerMatchesAppName(handler))
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   170
+        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
   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
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   174
   *aIsDefaultBrowser = PR_TRUE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   175
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   176
   return NS_OK;
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
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   179
 NS_IMETHODIMP
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   180
 nsGNOMEShellService::SetDefaultBrowser(PRBool aClaimAllTypes,
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   181
                                        PRBool aForAllUsers)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   182
 {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   183
 #ifdef DEBUG
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   184
   if (aForAllUsers)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   185
     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
   186
 #endif
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   187
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   188
+  nsCAutoString appKeyValue;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   189
   nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   190
+  nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   191
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   192
+  if (mAppIsInPath) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   193
+    // 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
   194
+    // launcher
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   195
+    gchar *tmp = g_path_get_basename(mAppPath.get());
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   196
+    appKeyValue = tmp;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   197
+    g_free(tmp);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   198
+  } else {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   199
+    appKeyValue = mAppPath;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   200
+  }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   201
+  appKeyValue.AppendLiteral(" %s");
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   202
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   203
   if (gconf) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   204
-    nsCAutoString appKeyValue(mAppPath);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   205
-    appKeyValue.Append(" \"%s\"");
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   206
     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
   207
       if (appProtocols[i].essential || aClaimAllTypes) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   208
         gconf->SetAppForProtocol(nsDependentCString(appProtocols[i].name),
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   209
                                  appKeyValue);
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
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   214
-  // 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
   215
-  if (aClaimAllTypes) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   216
+  if (giovfs) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   217
     nsresult rv;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   218
-    nsCOMPtr<nsIGIOService> giovfs =
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   219
-      do_GetService(NS_GIOSERVICE_CONTRACTID, &rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   220
-    NS_ENSURE_SUCCESS(rv, rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   221
+    unsigned int i;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   222
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   223
     nsCOMPtr<nsIStringBundleService> bundleService =
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   224
       do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   225
     NS_ENSURE_SUCCESS(rv, rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   226
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   227
     nsCOMPtr<nsIStringBundle> brandBundle;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   228
     rv = bundleService->CreateBundle(BRAND_PROPERTIES, getter_AddRefs(brandBundle));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   229
     NS_ENSURE_SUCCESS(rv, rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   230
@@ -249,20 +315,30 @@ nsGNOMEShellService::SetDefaultBrowser(P
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   231
     // use brandShortName as the application id.
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   232
     NS_ConvertUTF16toUTF8 id(brandShortName);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   233
     nsCOMPtr<nsIGIOMimeApp> appInfo;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   234
     rv = giovfs->CreateAppFromCommand(mAppPath,
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   235
                                       id,
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   236
                                       getter_AddRefs(appInfo));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   237
     NS_ENSURE_SUCCESS(rv, rv);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   238
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   239
-    // 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
   240
-    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
   241
-      appInfo->SetAsDefaultForMimeType(nsDependentCString(appTypes[i].mimeType));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   242
-      appInfo->SetAsDefaultForFileExtensions(nsDependentCString(appTypes[i].extensions));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   243
+    // set handler for the protocols
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   244
+    for (i = 0; i < NS_ARRAY_LENGTH(appProtocols); ++i) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   245
+      if (appProtocols[i].essential || aClaimAllTypes) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   246
+        appInfo->SetAsDefaultForURIScheme(nsDependentCString(appProtocols[i].name));
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
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   250
+    // 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
   251
+    if (aClaimAllTypes) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   252
+      // 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
   253
+      for (i = 0; i < NS_ARRAY_LENGTH(appTypes); ++i) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   254
+        appInfo->SetAsDefaultForMimeType(nsDependentCString(appTypes[i].mimeType));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   255
+        appInfo->SetAsDefaultForFileExtensions(nsDependentCString(appTypes[i].extensions));
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
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   260
   return NS_OK;
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
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   263
 NS_IMETHODIMP
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   264
 nsGNOMEShellService::GetShouldCheckDefaultBrowser(PRBool* aResult)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   265
@@ -451,17 +527,27 @@ nsGNOMEShellService::OpenApplication(PRI
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   266
   nsCAutoString scheme;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   267
   if (aApplication == APPLICATION_MAIL)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   268
     scheme.Assign("mailto");
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   269
   else if (aApplication == APPLICATION_NEWS)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   270
     scheme.Assign("news");
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   271
   else
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   272
     return NS_ERROR_NOT_AVAILABLE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   273
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   274
+  nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   275
+  if (giovfs) {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   276
+    nsCOMPtr<nsIGIOMimeApp> gioApp;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   277
+    giovfs->GetAppForURIScheme(scheme, getter_AddRefs(gioApp));
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   278
+    if (gioApp)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   279
+      return gioApp->Launch(EmptyCString());
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
+
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   282
   nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   283
+  if (!gconf)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   284
+    return NS_ERROR_FAILURE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   285
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   286
   PRBool enabled;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   287
   nsCAutoString appCommand;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   288
   gconf->GetAppForProtocol(scheme, &enabled, appCommand);
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   289
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   290
   if (!enabled)
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   291
     return NS_ERROR_FAILURE;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   292
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   293
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
   294
--- a/browser/components/shell/src/nsGNOMEShellService.h
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   295
+++ b/browser/components/shell/src/nsGNOMEShellService.h
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   296
@@ -38,26 +38,29 @@
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   297
 #define nsgnomeshellservice_h____
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   298
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   299
 #include "nsIShellService.h"
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   300
 #include "nsStringAPI.h"
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   301
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   302
 class nsGNOMEShellService : public nsIShellService
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   303
 {
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   304
 public:
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   305
-  nsGNOMEShellService() : mCheckedThisSession(PR_FALSE) { }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   306
+  nsGNOMEShellService() : mCheckedThisSession(PR_FALSE), mAppIsInPath(PR_FALSE) { }
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   307
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   308
   NS_DECL_ISUPPORTS
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   309
   NS_DECL_NSISHELLSERVICE
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   310
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   311
   nsresult Init() NS_HIDDEN;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   312
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   313
 private:
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   314
   ~nsGNOMEShellService() {}
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   315
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   316
   NS_HIDDEN_(PRBool) KeyMatchesAppName(const char *aKeyValue) const;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   317
+  NS_HIDDEN_(PRBool) CheckHandlerMatchesAppName(const nsACString& handler) const;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   318
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   319
+  NS_HIDDEN_(PRBool) GetAppPathFromLauncher();
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   320
   PRPackedBool mCheckedThisSession;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   321
   PRPackedBool mUseLocaleFilenames;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   322
   nsCString    mAppPath;
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   323
+  PRPackedBool mAppIsInPath;
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
 
f4f4388b26a8 update to 2.0b9/4.0b9
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   326
 #endif // nsgnomeshellservice_h____