aboutsummaryrefslogtreecommitdiffstats
path: root/vconsole.c
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2014-09-23 07:40:41 +0200
committerGerd Hoffmann <kraxel@redhat.com>2014-09-23 07:40:41 +0200
commit8c7eac0fbf18273ff4a8036ad412da25a4e11382 (patch)
tree14eaebc340f48ad27f6a766d1bf6adaa7357f44f /vconsole.c
parent65df255453ce41fe15fda89787ba6b46e8b22464 (diff)
downloadvconsole-8c7eac0fbf18273ff4a8036ad412da25a4e11382.tar.gz
add virsh edit support, tab buttons, notebook tweaks
Diffstat (limited to 'vconsole.c')
-rw-r--r--vconsole.c51
1 files changed, 49 insertions, 2 deletions
diff --git a/vconsole.c b/vconsole.c
index 2201cfe..757fab1 100644
--- a/vconsole.c
+++ b/vconsole.c
@@ -324,6 +324,36 @@ static void run_virt_viewer(struct vconsole_domain *dom,
}
}
+static void run_virsh_edit(struct vconsole_domain *dom)
+{
+ char *argv[32];
+ int argc = 0;
+ char *uri;
+
+ uri = virConnectGetURI(dom->conn->ptr);
+
+ argv[argc++] = "xterm";
+ argv[argc++] = "-e";
+ argv[argc++] = "virsh";
+ argv[argc++] = "-c";
+ argv[argc++] = uri;
+ argv[argc++] = "edit";
+ argv[argc++] = dom->uuid;
+ argv[argc++] = NULL;
+ assert(argc < sizeof(argv)/sizeof(argv[0]));
+
+ if (fork() <= 0) {
+ /* parent */
+ free(uri);
+ return;
+ } else {
+ /* child */
+ execvp("xterm", argv);
+ perror("execvp");
+ exit(1);
+ }
+}
+
static void menu_cb_untabify(GtkToggleAction *action, gpointer userdata)
{
struct vconsole_window *win = userdata;
@@ -333,6 +363,15 @@ static void menu_cb_untabify(GtkToggleAction *action, gpointer userdata)
domain_untabify(dom);
}
+static void menu_cb_vm_edit(GtkAction *action, void *data)
+{
+ struct vconsole_window *win = data;
+ struct vconsole_domain *dom = find_guest(win);
+
+ if (dom)
+ run_virsh_edit(dom);
+}
+
static void menu_cb_vm_gfx(GtkAction *action, void *data)
{
struct vconsole_window *win = data;
@@ -529,6 +568,10 @@ static const GtkActionEntry entries[] = {
},{
/* --- guest menu --- */
+ .name = "GuestEdit",
+ .label = "Change guest configuration",
+ .callback = G_CALLBACK(menu_cb_vm_edit),
+ },{
.name = "GuestGfx",
.label = "Show graphic console",
.callback = G_CALLBACK(menu_cb_vm_gfx),
@@ -636,6 +679,8 @@ static char ui_xml[] =
" <menu action='GuestMenu'>\n"
" <menuitem action='GuestLogging'/>\n"
" <separator/>\n"
+" <menuitem action='GuestEdit'/>\n"
+" <separator/>\n"
" <menuitem action='GuestGfx'/>\n"
" <separator/>\n"
" <menuitem action='GuestRun'/>\n"
@@ -653,8 +698,6 @@ static char ui_xml[] =
" </menu>\n"
" </menubar>\n"
" <toolbar action='ToolBar'>"
-" <toolitem action='CloseTab'/>\n"
-" <separator/>\n"
" <toolitem action='GuestRun'/>\n"
" <toolitem action='GuestPause'/>\n"
" <toolitem action='GuestSave'/>\n"
@@ -794,6 +837,10 @@ static struct vconsole_window *vconsole_toplevel_create(void)
/* main area */
win->notebook = gtk_notebook_new();
+ gtk_notebook_set_tab_pos(GTK_NOTEBOOK(win->notebook), GTK_POS_TOP);
+ gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), TRUE);
+ gtk_notebook_set_scrollable(GTK_NOTEBOOK(win->notebook), TRUE);
+ gtk_notebook_popup_enable(GTK_NOTEBOOK(win->notebook));
/* Make a vbox and put stuff in */
vbox = gtk_vbox_new(FALSE, 1);