diff options
Diffstat (limited to 'gtk/spicy.c')
-rw-r--r-- | gtk/spicy.c | 54 |
1 files changed, 52 insertions, 2 deletions
diff --git a/gtk/spicy.c b/gtk/spicy.c index 6a7c41c..4ec9b52 100644 --- a/gtk/spicy.c +++ b/gtk/spicy.c @@ -15,6 +15,7 @@ struct spice_window { /* config */ static char *host = "localhost"; static char *port = "5920"; +static bool fullscreen = false; /* state */ static SpiceSession *session; @@ -40,6 +41,18 @@ static void menu_cb_fullscreen(GtkAction *action, void *data) } } +static void menu_cb_bool_prop(GtkToggleAction *action, gpointer data) +{ + struct spice_window *win = data; + gboolean state = gtk_toggle_action_get_active(action); + + fprintf(stderr, "%s: %s = %s\n", __FUNCTION__, + gtk_action_get_name(GTK_ACTION(action)), state ? "yes" : "no"); + g_object_set(G_OBJECT(win->spice), + gtk_action_get_name(GTK_ACTION(action)), state, + NULL); +} + static void menu_cb_about(GtkAction *action, void *data) { static char *comments = "gtk client app for the\n" @@ -80,6 +93,7 @@ static gboolean window_state_cb(GtkWidget *widget, GdkEventWindowState *event, gtk_widget_hide(win->menubar); gtk_widget_hide(win->toolbar); gtk_widget_hide(win->fstatus); + gtk_widget_grab_focus(win->spice); } else { gtk_widget_show(win->menubar); gtk_widget_show(win->toolbar); @@ -99,6 +113,9 @@ static const GtkActionEntry entries[] = { .name = "ViewMenu", .label = "_View", },{ + .name = "OptionMenu", + .label = "_Options", + },{ .name = "HelpMenu", .label = "_Help", },{ @@ -127,6 +144,18 @@ static const GtkActionEntry entries[] = { } }; +static const GtkToggleActionEntry tentries[] = { + { + .name = "grab-keyboard", + .label = "Grab keyboard", + .callback = G_CALLBACK(menu_cb_bool_prop), + },{ + .name = "resize-guest", + .label = "Resize guest", + .callback = G_CALLBACK(menu_cb_bool_prop), + } +}; + static char ui_xml[] = "<ui>\n" " <menubar action='MainMenu'>\n" @@ -136,6 +165,10 @@ static char ui_xml[] = " <menu action='ViewMenu'>\n" " <menuitem action='Fullscreen'/>\n" " </menu>\n" +" <menu action='OptionMenu'>\n" +" <menuitem action='grab-keyboard'/>\n" +" <menuitem action='resize-guest'/>\n" +" </menu>\n" " <menu action='HelpMenu'>\n" " <menuitem action='About'/>\n" " </menu>\n" @@ -153,6 +186,7 @@ static spice_window *create_spice_window(SpiceSession *s, int id) struct spice_window *win; GtkWidget *vbox; GError *err = NULL; + int i; win = malloc(sizeof(*win)); if (NULL == win) @@ -164,7 +198,6 @@ static spice_window *create_spice_window(SpiceSession *s, int id) win->toplevel = gtk_window_new(GTK_WINDOW_TOPLEVEL); snprintf(title, sizeof(title), "spice display %d", id); gtk_window_set_title(GTK_WINDOW(win->toplevel), title); - gtk_window_set_default_size(GTK_WINDOW(win->toplevel), 640, 480); g_signal_connect(G_OBJECT(win->toplevel), "destroy", G_CALLBACK(destroy_cb), win); g_signal_connect(G_OBJECT(win->toplevel), "window-state-event", @@ -174,6 +207,8 @@ static spice_window *create_spice_window(SpiceSession *s, int id) win->ui = gtk_ui_manager_new(); win->ag = gtk_action_group_new("MenuActions"); gtk_action_group_add_actions(win->ag, entries, G_N_ELEMENTS(entries), win); + gtk_action_group_add_toggle_actions(win->ag, tentries, + G_N_ELEMENTS(tentries), win); gtk_ui_manager_insert_action_group(win->ui, win->ag, 0); win->accel = gtk_ui_manager_get_accel_group(win->ui); gtk_window_add_accel_group(GTK_WINDOW(win->toplevel), win->accel); @@ -206,7 +241,18 @@ static spice_window *create_spice_window(SpiceSession *s, int id) gtk_box_pack_end(GTK_BOX(vbox), win->fstatus, FALSE, TRUE, 0); gtk_container_add(GTK_CONTAINER(win->fstatus), win->status); + /* init toggle actions */ + for (i = 0; i < G_N_ELEMENTS(tentries); i++) { + GtkAction *toggle; + gboolean state; + toggle = gtk_action_group_get_action(win->ag, tentries[i].name); + g_object_get(win->spice, tentries[i].name, &state, NULL); + gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(toggle), state); + } + /* show window */ + if (fullscreen) + gtk_window_fullscreen(GTK_WINDOW(win->toplevel)); gtk_widget_show_all(win->toplevel); return win; } @@ -262,6 +308,7 @@ static void usage(FILE *fp) "options:\n" " -h host [ %s ]\n" " -p port [ %s ]\n" + " -f fullscreen\n" "\n", host, port); } @@ -273,7 +320,7 @@ int main(int argc, char *argv[]) /* parse opts */ gtk_init(&argc, &argv); for (;;) { - if (-1 == (c = getopt(argc, argv, "h:p:"))) + if (-1 == (c = getopt(argc, argv, "h:p:f"))) break; switch (c) { case 'h': @@ -282,6 +329,9 @@ int main(int argc, char *argv[]) case 'p': port = optarg; break; + case 'f': + fullscreen = true; + break; #if 0 /* --help */ case 'h': usage(stdout); |