[geany/geany] 079fe5: VTE: add support for vte_terminal_spawn_sync()

Colomban Wendling git-noreply at geany.org
Sat Oct 29 14:09:04 UTC 2016


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Sat, 29 Oct 2016 14:09:04 UTC
Commit:      079fe58ce9e75be3be2dbf8bae5be01024d937be
             https://github.com/geany/geany/commit/079fe58ce9e75be3be2dbf8bae5be01024d937be

Log Message:
-----------
VTE: add support for vte_terminal_spawn_sync()

VTE 0.38 removed vte_terminal_fork_command() in favor of the new
vte_terminal_spawn_sync(), so add support for this.


Modified Paths:
--------------
    src/vte.c

Modified: src/vte.c
32 lines changed, 28 insertions(+), 4 deletions(-)
===================================================================
@@ -59,7 +59,7 @@
 VteInfo vte_info = { FALSE, FALSE, FALSE, NULL, NULL };
 VteConfig *vc;
 
-static pid_t pid = 0;
+static GPid pid = 0;
 static gboolean clean = TRUE;
 static GModule *module = NULL;
 static struct VteFunctions *vf;
@@ -88,6 +88,11 @@ typedef enum {
 	VTE_CURSOR_BLINK_OFF
 } VteTerminalCursorBlinkMode;
 
+typedef enum {
+	/* we don't care for the other possible values */
+	VTE_PTY_DEFAULT = 0
+} VtePtyFlags;
+
 
 /* Holds function pointers we need to access the VTE API. */
 struct VteFunctions
@@ -96,6 +101,11 @@ struct VteFunctions
 	pid_t (*vte_terminal_fork_command) (VteTerminal *terminal, const char *command, char **argv,
 										char **envv, const char *directory, gboolean lastlog,
 										gboolean utmp, gboolean wtmp);
+	gboolean (*vte_terminal_spawn_sync) (VteTerminal *terminal, VtePtyFlags pty_flags,
+										 const char *working_directory, char **argv, char **envv,
+										 GSpawnFlags spawn_flags, GSpawnChildSetupFunc child_setup,
+										 gpointer child_setup_data, GPid *child_pid,
+										 GCancellable *cancellable, GError **error);
 	void (*vte_terminal_set_size) (VteTerminal *terminal, glong columns, glong rows);
 	void (*vte_terminal_set_word_chars) (VteTerminal *terminal, const char *spec);
 	void (*vte_terminal_set_mouse_autohide) (VteTerminal *terminal, gboolean setting);
@@ -435,8 +445,20 @@ static void vte_start(GtkWidget *widget)
 	{
 		gchar **env = vte_get_child_environment();
 
-		pid = vf->vte_terminal_fork_command(VTE_TERMINAL(widget), argv[0], argv, env,
-											vte_info.dir, TRUE, TRUE, TRUE);
+		if (vf->vte_terminal_spawn_sync)
+		{
+			if (! vf->vte_terminal_spawn_sync(VTE_TERMINAL(widget), VTE_PTY_DEFAULT,
+											  vte_info.dir, argv, env, 0, NULL, NULL,
+											  &pid, NULL, NULL))
+			{
+				pid = -1;
+			}
+		}
+		else
+		{
+			pid = vf->vte_terminal_fork_command(VTE_TERMINAL(widget), argv[0], argv, env,
+												vte_info.dir, TRUE, TRUE, TRUE);
+		}
 		g_strfreev(env);
 		g_strfreev(argv);
 	}
@@ -503,7 +525,9 @@ static gboolean vte_register_symbols(GModule *mod)
 
 	BIND_REQUIRED_SYMBOL(vte_terminal_new);
 	BIND_REQUIRED_SYMBOL(vte_terminal_set_size);
-	BIND_REQUIRED_SYMBOL(vte_terminal_fork_command);
+	if (! BIND_SYMBOL(vte_terminal_spawn_sync))
+		/* vte_terminal_spawn_sync() is available only in 0.38 */
+		BIND_REQUIRED_SYMBOL(vte_terminal_fork_command);
 	BIND_REQUIRED_SYMBOL(vte_terminal_set_word_chars);
 	BIND_REQUIRED_SYMBOL(vte_terminal_set_mouse_autohide);
 	BIND_REQUIRED_SYMBOL(vte_terminal_reset);



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list