eekboard: add --toolkit and --standalone.

This commit is contained in:
Daiki Ueno
2010-08-11 11:49:52 +09:00
parent 1c5a271177
commit 6d80e4cacb

View File

@ -226,6 +226,10 @@ static gboolean opt_list_models = FALSE;
static gboolean opt_list_layouts = FALSE; static gboolean opt_list_layouts = FALSE;
static gboolean opt_list_options = FALSE; static gboolean opt_list_options = FALSE;
static gboolean opt_version = FALSE; static gboolean opt_version = FALSE;
#if HAVE_CLUTTER_GTK
static gchar *opt_toolkit = NULL;
#endif
static gboolean opt_standalone = FALSE;
static const GOptionEntry options[] = { static const GOptionEntry options[] = {
{"model", 'M', 0, G_OPTION_ARG_STRING, &opt_model, {"model", 'M', 0, G_OPTION_ARG_STRING, &opt_model,
@ -240,6 +244,12 @@ static const GOptionEntry options[] = {
N_("List all available keyboard layouts and variants")}, N_("List all available keyboard layouts and variants")},
{"list-options", 'O', 0, G_OPTION_ARG_NONE, &opt_list_options, {"list-options", 'O', 0, G_OPTION_ARG_NONE, &opt_list_options,
N_("List all available keyboard layout options")}, N_("List all available keyboard layout options")},
#if HAVE_CLUTTER_GTK
{"toolkit", 't', 0, G_OPTION_ARG_STRING, &opt_toolkit,
N_("Toolkit (\"clutter\" or \"gtk\")")},
#endif
{"standalone", 's', 0, G_OPTION_ARG_NONE, &opt_standalone,
N_("Start as a standalone application")},
{"version", 'v', 0, G_OPTION_ARG_NONE, &opt_version, {"version", 'v', 0, G_OPTION_ARG_NONE, &opt_version,
N_("Display version")}, N_("Display version")},
{NULL} {NULL}
@ -344,7 +354,8 @@ a11y_keystroke_listener (const AccessibleKeystroke *stroke,
//g_return_val_if_fail (stroke->modifiers == SPI_KEYMASK_UNMODIFIED, FALSE); //g_return_val_if_fail (stroke->modifiers == SPI_KEYMASK_UNMODIFIED, FALSE);
key = eek_keyboard_find_key_by_keycode (eekboard->keyboard, key = eek_keyboard_find_key_by_keycode (eekboard->keyboard,
stroke->keycode); stroke->keycode);
g_return_val_if_fail (key, FALSE); if (!key)
return FALSE;
if (stroke->type == SPI_KEY_PRESSED) if (stroke->type == SPI_KEY_PRESSED)
g_signal_emit_by_name (key, "pressed"); g_signal_emit_by_name (key, "pressed");
else else
@ -1265,6 +1276,17 @@ main (int argc, char *argv[])
use_clutter = FALSE; use_clutter = FALSE;
#if HAVE_CLUTTER_GTK #if HAVE_CLUTTER_GTK
if (opt_toolkit) {
if (g_strcmp0 (opt_toolkit, "clutter") == 0)
use_clutter = TRUE;
else if (g_strcmp0 (opt_toolkit, "gtk") == 0)
use_clutter = FALSE;
else {
g_print ("Invalid toolkit \"%s\"\n", opt_toolkit);
exit (0);
}
}
if (use_clutter && if (use_clutter &&
gtk_clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) { gtk_clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) {
g_warning ("Can't init Clutter-Gtk...fallback to GTK"); g_warning ("Can't init Clutter-Gtk...fallback to GTK");
@ -1309,7 +1331,9 @@ main (int argc, char *argv[])
exit (0); exit (0);
} }
window = gtk_window_new (GTK_WINDOW_TOPLEVEL); window = gtk_window_new (opt_standalone ?
GTK_WINDOW_TOPLEVEL :
GTK_WINDOW_POPUP);
gtk_widget_set_can_focus (window, FALSE); gtk_widget_set_can_focus (window, FALSE);
g_object_set (G_OBJECT(window), "accept_focus", FALSE, NULL); g_object_set (G_OBJECT(window), "accept_focus", FALSE, NULL);
gtk_window_set_title (GTK_WINDOW(window), "Keyboard"); gtk_window_set_title (GTK_WINDOW(window), "Keyboard");
@ -1320,10 +1344,12 @@ main (int argc, char *argv[])
g_object_set_data (G_OBJECT(window), "eekboard", eekboard); g_object_set_data (G_OBJECT(window), "eekboard", eekboard);
widget = create_widget (eekboard, CSW, CSH); widget = create_widget (eekboard, CSW, CSH);
create_menus (eekboard, window); if (opt_standalone) {
menubar = gtk_ui_manager_get_widget (eekboard->ui_manager, "/MainMenu"); create_menus (eekboard, window);
gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0); menubar = gtk_ui_manager_get_widget (eekboard->ui_manager, "/MainMenu");
gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0);
}
gtk_container_add (GTK_CONTAINER(vbox), widget); gtk_container_add (GTK_CONTAINER(vbox), widget);
gtk_container_add (GTK_CONTAINER(window), vbox); gtk_container_add (GTK_CONTAINER(window), vbox);
@ -1335,7 +1361,7 @@ main (int argc, char *argv[])
notify_init ("eekboard"); notify_init ("eekboard");
eekboard->window = window; eekboard->window = window;
eekboard->gconfc = gconfc; eekboard->gconfc = gconfc;
if (eekboard->accessibility_enabled) { if (!opt_standalone && eekboard->accessibility_enabled) {
NotifyNotification *notification; NotifyNotification *notification;
error = NULL; error = NULL;