set WINDOWID in the child's environment
This commit is contained in:
parent
1f49d01439
commit
7a3e1991c5
38
termite.c
38
termite.c
|
@ -3,6 +3,7 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <gdk/gdkx.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <vte/vte.h>
|
#include <vte/vte.h>
|
||||||
|
|
||||||
|
@ -543,18 +544,6 @@ int main(int argc, char **argv) {
|
||||||
vte_terminal_set_pty_object(VTE_TERMINAL(vte), pty);
|
vte_terminal_set_pty_object(VTE_TERMINAL(vte), pty);
|
||||||
vte_pty_set_term(pty, term);
|
vte_pty_set_term(pty, term);
|
||||||
|
|
||||||
GPid ppid;
|
|
||||||
|
|
||||||
if (g_spawn_async(NULL, command_argv, NULL,
|
|
||||||
(GSpawnFlags)(G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH),
|
|
||||||
(GSpawnChildSetupFunc)vte_pty_child_setup, pty,
|
|
||||||
&ppid, &error)) {
|
|
||||||
vte_terminal_watch_child(VTE_TERMINAL(vte), ppid);
|
|
||||||
} else {
|
|
||||||
g_printerr("The new terminal's command failed to run: %s\n", error->message);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *alignment = gtk_alignment_new(0, 0, 1, 1);
|
GtkWidget *alignment = gtk_alignment_new(0, 0, 1, 1);
|
||||||
gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 5, 5, 5, 5);
|
gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 5, 5, 5, 5);
|
||||||
gtk_overlay_add_overlay(GTK_OVERLAY(overlay), alignment);
|
gtk_overlay_add_overlay(GTK_OVERLAY(overlay), alignment);
|
||||||
|
@ -609,6 +598,31 @@ int main(int argc, char **argv) {
|
||||||
gtk_widget_grab_focus(vte);
|
gtk_widget_grab_focus(vte);
|
||||||
gtk_widget_show_all(window);
|
gtk_widget_show_all(window);
|
||||||
gtk_widget_hide(alignment);
|
gtk_widget_hide(alignment);
|
||||||
|
|
||||||
|
GdkWindow *gdk_window = gtk_widget_get_window(window);
|
||||||
|
if (!gdk_window) {
|
||||||
|
g_printerr("no window");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
char *xid_s = g_strdup_printf("%lu", GDK_WINDOW_XID(gdk_window));
|
||||||
|
char **env = g_get_environ();
|
||||||
|
env = g_environ_setenv(env, "WINDOWID", xid_s, TRUE);
|
||||||
|
env = g_environ_setenv(env, "TERM", term, TRUE);
|
||||||
|
g_free(xid_s);
|
||||||
|
|
||||||
|
GPid ppid;
|
||||||
|
if (g_spawn_async(NULL, command_argv, env,
|
||||||
|
(GSpawnFlags)(G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH),
|
||||||
|
(GSpawnChildSetupFunc)vte_pty_child_setup, pty,
|
||||||
|
&ppid, &error)) {
|
||||||
|
vte_terminal_watch_child(VTE_TERMINAL(vte), ppid);
|
||||||
|
} else {
|
||||||
|
g_printerr("The new terminal's command failed to run: %s\n", error->message);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_strfreev(env);
|
||||||
|
|
||||||
gtk_main();
|
gtk_main();
|
||||||
return vte_terminal_get_child_exit_status(VTE_TERMINAL(vte));
|
return vte_terminal_get_child_exit_status(VTE_TERMINAL(vte));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue