ZenWalker 2016-11-18 01:21:04 +01:00 committed by monsta
parent 39588e6dcb
commit 82b97e200a
1 changed files with 15 additions and 8 deletions

View File

@ -65,7 +65,6 @@ struct _TerminalScreenPrivate
char **initial_env; char **initial_env;
char **override_command; char **override_command;
int child_pid; int child_pid;
int pty_fd;
double font_scale; double font_scale;
gboolean user_title; /* title was manually set */ gboolean user_title; /* title was manually set */
GSList *match_tags; GSList *match_tags;
@ -341,7 +340,6 @@ terminal_screen_init (TerminalScreen *screen)
vte_terminal_set_mouse_autohide (VTE_TERMINAL (screen), TRUE); vte_terminal_set_mouse_autohide (VTE_TERMINAL (screen), TRUE);
priv->child_pid = -1; priv->child_pid = -1;
priv->pty_fd = -1;
priv->font_scale = PANGO_SCALE_MEDIUM; priv->font_scale = PANGO_SCALE_MEDIUM;
@ -1480,7 +1478,6 @@ terminal_screen_launch_child_cb (TerminalScreen *screen)
} }
priv->child_pid = pid; priv->child_pid = pid;
priv->pty_fd = vte_terminal_get_pty (terminal);
g_free (shell); g_free (shell);
g_strfreev (argv); g_strfreev (argv);
@ -1714,8 +1711,10 @@ terminal_screen_get_current_dir (TerminalScreen *screen)
{ {
TerminalScreenPrivate *priv = screen->priv; TerminalScreenPrivate *priv = screen->priv;
char *cwd; char *cwd;
VtePty *pty;
if (priv->pty_fd != -1) pty = vte_terminal_get_pty (VTE_TERMINAL (screen));
if (pty != NULL)
{ {
#if 0 #if 0
/* Get the foreground process ID */ /* Get the foreground process ID */
@ -1747,9 +1746,11 @@ terminal_screen_get_current_dir (TerminalScreen *screen)
char* char*
terminal_screen_get_current_dir_with_fallback (TerminalScreen *screen) terminal_screen_get_current_dir_with_fallback (TerminalScreen *screen)
{ {
VtePty *pty;
TerminalScreenPrivate *priv = screen->priv; TerminalScreenPrivate *priv = screen->priv;
if (priv->pty_fd == -1) pty = vte_terminal_get_pty (VTE_TERMINAL (screen));
if (pty == NULL)
return g_strdup (priv->initial_working_directory); return g_strdup (priv->initial_working_directory);
return terminal_screen_get_current_dir (screen); return terminal_screen_get_current_dir (screen);
@ -1817,7 +1818,6 @@ terminal_screen_child_exited (VteTerminal *terminal, int status)
screen); screen);
priv->child_pid = -1; priv->child_pid = -1;
priv->pty_fd = -1;
action = terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_EXIT_ACTION); action = terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_EXIT_ACTION);
@ -2271,12 +2271,19 @@ gboolean
terminal_screen_has_foreground_process (TerminalScreen *screen) terminal_screen_has_foreground_process (TerminalScreen *screen)
{ {
TerminalScreenPrivate *priv = screen->priv; TerminalScreenPrivate *priv = screen->priv;
VtePty *pty;
int fd;
int fgpid; int fgpid;
if (priv->pty_fd == -1) pty = vte_terminal_get_pty (VTE_TERMINAL (screen));
if (pty == NULL)
return FALSE; return FALSE;
fgpid = tcgetpgrp (priv->pty_fd); fd = vte_pty_get_fd (pty);
if (fd == -1)
return FALSE;
fgpid = tcgetpgrp (fd);
if (fgpid == -1 || fgpid == priv->child_pid) if (fgpid == -1 || fgpid == priv->child_pid)
return FALSE; return FALSE;