Skip to content

Commit 7708278

Browse files
committed
terminal-screen: avoid deprecated 'vte_terminal_spawn_sync'
1 parent 82e48ff commit 7708278

File tree

2 files changed

+59
-32
lines changed

2 files changed

+59
-32
lines changed

configure.ac

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ AM_GLIB_GNU_GETTEXT
4141
GLIB_REQUIRED=2.50.0
4242
GIO_REQUIRED=2.50.0
4343
GTK_REQUIRED=3.22.0
44-
VTE_REQUIRED=0.46
44+
VTE_REQUIRED=0.48
4545
DCONF_REQUIRED=0.13.4
4646

4747
PKG_CHECK_MODULES([TERM],

src/terminal-screen.c

Lines changed: 58 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1487,6 +1487,49 @@ info_bar_response_cb (GtkWidget *info_bar,
14871487
}
14881488
}
14891489

1490+
static void handle_error_child (TerminalScreen *screen,
1491+
GError *err)
1492+
{
1493+
GtkWidget *info_bar;
1494+
1495+
info_bar = terminal_info_bar_new (GTK_MESSAGE_ERROR,
1496+
_("_Profile Preferences"), RESPONSE_EDIT_PROFILE,
1497+
_("_Relaunch"), RESPONSE_RELAUNCH,
1498+
NULL);
1499+
terminal_info_bar_format_text (TERMINAL_INFO_BAR (info_bar),
1500+
_("There was an error creating the child process for this terminal"));
1501+
terminal_info_bar_format_text (TERMINAL_INFO_BAR (info_bar),
1502+
"%s", err->message);
1503+
g_signal_connect (info_bar, "response",
1504+
G_CALLBACK (info_bar_response_cb), screen);
1505+
1506+
gtk_box_pack_start (GTK_BOX (terminal_screen_container_get_from_screen (screen)),
1507+
info_bar, FALSE, FALSE, 0);
1508+
gtk_info_bar_set_default_response (GTK_INFO_BAR (info_bar), GTK_RESPONSE_CANCEL);
1509+
gtk_widget_show (info_bar);
1510+
1511+
g_error_free (err);
1512+
}
1513+
1514+
static void term_spawn_callback (GtkWidget *terminal,
1515+
GPid pid,
1516+
GError *error,
1517+
gpointer user_data)
1518+
{
1519+
TerminalScreen *screen = TERMINAL_SCREEN (terminal);
1520+
1521+
if (error)
1522+
{
1523+
handle_error_child (screen, error);
1524+
g_error_free (error);
1525+
}
1526+
else
1527+
{
1528+
TerminalScreenPrivate *priv = screen->priv;
1529+
priv->child_pid = pid;
1530+
}
1531+
}
1532+
14901533
static gboolean
14911534
terminal_screen_launch_child_cb (TerminalScreen *screen)
14921535
{
@@ -1499,7 +1542,6 @@ terminal_screen_launch_child_cb (TerminalScreen *screen)
14991542
const char *working_dir;
15001543
VtePtyFlags pty_flags = VTE_PTY_DEFAULT;
15011544
GSpawnFlags spawn_flags = 0;
1502-
GPid pid;
15031545

15041546
priv->launch_child_source_id = 0;
15051547

@@ -1521,36 +1563,9 @@ terminal_screen_launch_child_cb (TerminalScreen *screen)
15211563
if (!terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_UPDATE_RECORDS))
15221564
pty_flags |= VTE_PTY_NO_UTMP | VTE_PTY_NO_WTMP;
15231565

1524-
if (!get_child_command (screen, shell, &spawn_flags, &argv, &err) ||
1525-
!vte_terminal_spawn_sync (
1526-
terminal,
1527-
pty_flags,
1528-
working_dir,
1529-
argv,
1530-
env,
1531-
spawn_flags,
1532-
NULL, NULL,
1533-
&pid,
1534-
NULL,
1535-
&err))
1566+
if (!get_child_command (screen, shell, &spawn_flags, &argv, &err))
15361567
{
1537-
GtkWidget *info_bar;
1538-
1539-
info_bar = terminal_info_bar_new (GTK_MESSAGE_ERROR,
1540-
_("_Profile Preferences"), RESPONSE_EDIT_PROFILE,
1541-
_("_Relaunch"), RESPONSE_RELAUNCH,
1542-
NULL);
1543-
terminal_info_bar_format_text (TERMINAL_INFO_BAR (info_bar),
1544-
_("There was an error creating the child process for this terminal"));
1545-
terminal_info_bar_format_text (TERMINAL_INFO_BAR (info_bar),
1546-
"%s", err->message);
1547-
g_signal_connect (info_bar, "response",
1548-
G_CALLBACK (info_bar_response_cb), screen);
1549-
1550-
gtk_box_pack_start (GTK_BOX (terminal_screen_container_get_from_screen (screen)),
1551-
info_bar, FALSE, FALSE, 0);
1552-
gtk_info_bar_set_default_response (GTK_INFO_BAR (info_bar), GTK_RESPONSE_CANCEL);
1553-
gtk_widget_show (info_bar);
1568+
handle_error_child (screen, err);
15541569

15551570
g_error_free (err);
15561571
g_strfreev (env);
@@ -1559,7 +1574,19 @@ terminal_screen_launch_child_cb (TerminalScreen *screen)
15591574
return FALSE;
15601575
}
15611576

1562-
priv->child_pid = pid;
1577+
vte_terminal_spawn_async (terminal,
1578+
pty_flags,
1579+
working_dir,
1580+
argv,
1581+
env,
1582+
spawn_flags,
1583+
NULL,
1584+
NULL,
1585+
NULL,
1586+
-1,
1587+
NULL,
1588+
(VteTerminalSpawnAsyncCallback) term_spawn_callback,
1589+
NULL);
15631590

15641591
g_free (shell);
15651592
g_strfreev (argv);

0 commit comments

Comments
 (0)