This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository enlightenment.

View the commit online.

commit 5980468f7fe6fdf28a6e5411ba1151918c574a75
Author: Carsten Haitzler <[email protected]>
AuthorDate: Tue Jul 5 12:34:58 2022 +0100

    enlightenment_open - handle Terminal=true properly not just scheme
    
    This makes termina-ltrue launch properly from enlightemnent_open as
    you might expect as it works from core e already when it launches/
    
    @fix
---
 src/bin/tools/open/e_open.c | 217 +++++++++++++++++++++++++-------------------
 1 file changed, 122 insertions(+), 95 deletions(-)

diff --git a/src/bin/tools/open/e_open.c b/src/bin/tools/open/e_open.c
index 28e1333fc..a7fb35e7d 100644
--- a/src/bin/tools/open/e_open.c
+++ b/src/bin/tools/open/e_open.c
@@ -154,6 +154,98 @@ get_command(void *data, Efreet_Desktop *desktop EINA_UNUSED, char *command, int
    return NULL;
 }
 
+static Efreet_Desktop *
+_terminal_get(const char *defaults_list)
+{
+   Efreet_Desktop *tdesktop = NULL;
+   Efreet_Ini *ini;
+   const char *s;
+
+   ini = efreet_ini_new(defaults_list);
+   if ((ini) && (ini->data) &&
+       (efreet_ini_section_set(ini, "Default Applications")) &&
+       (ini->section))
+     {
+        s = efreet_ini_string_get(ini, "x-scheme-handler/terminal");
+        if (s) tdesktop = efreet_util_desktop_file_id_find(s);
+     }
+   if (ini) efreet_ini_free(ini);
+   return tdesktop;
+}
+
+static char **
+terminal_open(void)
+{
+   const char *terms[] =
+   {
+      "terminology.desktop",
+      "xterm.desktop",
+      "rxvt.desktop",
+      "gnome-terimnal.desktop",
+      "konsole.desktop",
+      NULL
+   };
+   const char *s;
+   char buf[PATH_MAX], **ret;
+   Efreet_Desktop *tdesktop = NULL, *td;
+   Eina_List *l;
+   int i;
+
+   s = efreet_data_home_get();
+   if (s)
+     {
+        snprintf(buf, sizeof(buf), "%s/mimeapps.list",
+                 efreet_config_home_get());
+        tdesktop = _terminal_get(buf);
+     }
+   if (tdesktop) goto have_desktop;
+   EINA_LIST_FOREACH(efreet_data_dirs_get(), l, s)
+     {
+        snprintf(buf, sizeof(buf), "%s/applications/defaults.list", s);
+        tdesktop = _terminal_get(buf);
+        if (tdesktop) goto have_desktop;
+     }
+
+   for (i = 0; terms[i]; i++)
+     {
+        tdesktop = efreet_util_desktop_file_id_find(terms[i]);
+        if (tdesktop) goto have_desktop;
+     }
+   if (!tdesktop)
+     {
+        l = efreet_util_desktop_category_list("TerminalEmulator");
+        if (l)
+          {
+             // just take first one since above list doesn't work.
+             tdesktop = l->data;
+             EINA_LIST_FREE(l, td)
+               {
+                  // free/unref the desktosp we are not going to use
+                  if (td != tdesktop) efreet_desktop_free(td);
+               }
+          }
+     }
+   if (!tdesktop) return NULL;
+have_desktop:
+   if (!tdesktop->exec)
+     {
+        efreet_desktop_free(tdesktop);
+        return NULL;
+     }
+   ret = malloc(sizeof(char *) * 2);
+   if (!ret) return NULL;
+   ret[0] = strdup(tdesktop->exec);
+   ret[1] = NULL;
+   if (!ret[0])
+     {
+        free(ret);
+        efreet_desktop_free(tdesktop);
+        return NULL;
+     }
+   efreet_desktop_free(tdesktop);
+   return ret;
+}
+
 static char **
 mime_open(const char *mime, const char *const *argv, int argc)
 {
@@ -178,10 +270,38 @@ mime_open(const char *mime, const char *const *argv, int argc)
         ret = calloc(eina_list_count(cmds) + 1, sizeof(char *));
         if (ret)
           {
-             unsigned int i = 0;
+             unsigned int i = 0, j;
+
              EINA_LIST_FREE(cmds, c)
                {
-                  ret[i] = c; /* was strdup by efreet_desktop_command_get() */
+                  if (desktop->terminal)
+                    {
+                       Eina_Strbuf *buf = eina_strbuf_new();
+                       char **tcmds = terminal_open();
+
+                       if ((tcmds) && (buf))
+                         {
+                            for (j = 0; tcmds[j]; j++)
+                              {
+                                 eina_strbuf_append(buf, tcmds[j]);
+                                 eina_strbuf_append(buf, " ");
+                              }
+                            eina_strbuf_append(buf, "-e ");
+                            eina_strbuf_append(buf, c);
+                            ret[i] = eina_strbuf_string_steal(buf);
+                         }
+                       if (tcmds)
+                         {
+                            for (j = 0; tcmds[j]; j++) free(tcmds[j]);
+                            free(tcmds);
+                         }
+                       if (buf) eina_strbuf_free(buf);
+                       free(c);
+                    }
+                  else
+                    {
+                       ret[i] = c; /* was strdup by efreet_desktop_command_get() */
+                    }
                   i++;
                }
              ret[i] = NULL;
@@ -192,7 +312,6 @@ mime_open(const char *mime, const char *const *argv, int argc)
                free(c);
           }
      }
-
    eina_list_free(files);
 
    return ret;
@@ -294,98 +413,6 @@ single_command_open(const char *command, const char *const *argv, int argc)
    return ret;
 }
 
-static Efreet_Desktop *
-_terminal_get(const char *defaults_list)
-{
-   Efreet_Desktop *tdesktop = NULL;
-   Efreet_Ini *ini;
-   const char *s;
-
-   ini = efreet_ini_new(defaults_list);
-   if ((ini) && (ini->data) &&
-       (efreet_ini_section_set(ini, "Default Applications")) &&
-       (ini->section))
-     {
-        s = efreet_ini_string_get(ini, "x-scheme-handler/terminal");
-        if (s) tdesktop = efreet_util_desktop_file_id_find(s);
-     }
-   if (ini) efreet_ini_free(ini);
-   return tdesktop;
-}
-
-static char **
-terminal_open(void)
-{
-   const char *terms[] =
-   {
-      "terminology.desktop",
-      "xterm.desktop",
-      "rxvt.desktop",
-      "gnome-terimnal.desktop",
-      "konsole.desktop",
-      NULL
-   };
-   const char *s;
-   char buf[PATH_MAX], **ret;
-   Efreet_Desktop *tdesktop = NULL, *td;
-   Eina_List *l;
-   int i;
-
-   s = efreet_data_home_get();
-   if (s)
-     {
-        snprintf(buf, sizeof(buf), "%s/mimeapps.list",
-                 efreet_config_home_get());
-        tdesktop = _terminal_get(buf);
-     }
-   if (tdesktop) goto have_desktop;
-   EINA_LIST_FOREACH(efreet_data_dirs_get(), l, s)
-     {
-        snprintf(buf, sizeof(buf), "%s/applications/defaults.list", s);
-        tdesktop = _terminal_get(buf);
-        if (tdesktop) goto have_desktop;
-     }
-
-   for (i = 0; terms[i]; i++)
-     {
-        tdesktop = efreet_util_desktop_file_id_find(terms[i]);
-        if (tdesktop) goto have_desktop;
-     }
-   if (!tdesktop)
-     {
-        l = efreet_util_desktop_category_list("TerminalEmulator");
-        if (l)
-          {
-             // just take first one since above list doesn't work.
-             tdesktop = l->data;
-             EINA_LIST_FREE(l, td)
-               {
-                  // free/unref the desktosp we are not going to use
-                  if (td != tdesktop) efreet_desktop_free(td);
-               }
-          }
-     }
-   if (!tdesktop) return NULL;
-have_desktop:
-   if (!tdesktop->exec)
-     {
-        efreet_desktop_free(tdesktop);
-        return NULL;
-     }
-   ret = malloc(sizeof(char *) * 2);
-   if (!ret) return NULL;
-   ret[0] = strdup(tdesktop->exec);
-   ret[1] = NULL;
-   if (!ret[0])
-     {
-        free(ret);
-        efreet_desktop_free(tdesktop);
-        return NULL;
-     }
-   efreet_desktop_free(tdesktop);
-   return ret;
-}
-
 static char **
 browser_open(const char *const *argv, int argc)
 {

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to