Add command-line option to specify D-Bus type and address.
This commit is contained in:
@ -19,10 +19,15 @@
|
||||
#include "config.h"
|
||||
#endif /* HAVE_CONFIG_H */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <glib/gi18n.h>
|
||||
|
||||
#include "eekboard/eekboard.h"
|
||||
|
||||
static gboolean opt_system = FALSE;
|
||||
static gboolean opt_session = FALSE;
|
||||
static gchar *opt_address = NULL;
|
||||
|
||||
static gchar *opt_set_keyboard = NULL;
|
||||
static gint opt_set_group = -1;
|
||||
static gboolean opt_show_keyboard = FALSE;
|
||||
@ -32,6 +37,12 @@ static gint opt_release_key = -1;
|
||||
static gboolean opt_listen = FALSE;
|
||||
|
||||
static const GOptionEntry options[] = {
|
||||
{"system", 'y', 0, G_OPTION_ARG_NONE, &opt_system,
|
||||
N_("Connect to the system bus")},
|
||||
{"session", 'e', 0, G_OPTION_ARG_NONE, &opt_session,
|
||||
N_("Connect to the session bus")},
|
||||
{"address", 'a', 0, G_OPTION_ARG_STRING, &opt_address,
|
||||
N_("Connect to the given D-Bus address")},
|
||||
{"set-keyboard", '\0', 0, G_OPTION_ARG_STRING, &opt_set_keyboard,
|
||||
N_("Upload keyboard description from an XML file")},
|
||||
{"set-group", '\0', 0, G_OPTION_ARG_INT, &opt_set_group,
|
||||
@ -66,6 +77,7 @@ main (int argc, char **argv)
|
||||
{
|
||||
EekboardEekboard *eekboard = NULL;
|
||||
EekboardContext *context = NULL;
|
||||
GBusType bus_type;
|
||||
GDBusConnection *connection = NULL;
|
||||
GError *error;
|
||||
GOptionContext *option_context;
|
||||
@ -80,26 +92,54 @@ main (int argc, char **argv)
|
||||
g_option_context_parse (option_context, &argc, &argv, NULL);
|
||||
g_option_context_free (option_context);
|
||||
|
||||
error = NULL;
|
||||
connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
|
||||
if (error) {
|
||||
g_printerr ("%s\n", error->message);
|
||||
retval = 1;
|
||||
goto out;
|
||||
if (opt_system)
|
||||
bus_type = G_BUS_TYPE_SYSTEM;
|
||||
else if (opt_address)
|
||||
bus_type = G_BUS_TYPE_NONE;
|
||||
else
|
||||
bus_type = G_BUS_TYPE_SESSION;
|
||||
|
||||
switch (bus_type) {
|
||||
case G_BUS_TYPE_SYSTEM:
|
||||
case G_BUS_TYPE_SESSION:
|
||||
error = NULL;
|
||||
connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
|
||||
if (connection == NULL) {
|
||||
g_printerr (_("Can't connect to the bus: %s\n"), error->message);
|
||||
exit (1);
|
||||
}
|
||||
break;
|
||||
case G_BUS_TYPE_NONE:
|
||||
error = NULL;
|
||||
connection = g_dbus_connection_new_for_address_sync (opt_address,
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
&error);
|
||||
if (connection == NULL) {
|
||||
g_printerr (_("Can't connect to the bus at %s: %s\n"),
|
||||
opt_address,
|
||||
error->message);
|
||||
exit (1);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
}
|
||||
|
||||
eekboard = eekboard_eekboard_new (connection, NULL);
|
||||
if (!eekboard) {
|
||||
g_printerr ("Can't create eekboard\n");
|
||||
if (eekboard == NULL) {
|
||||
g_printerr (_("Can't create eekboard proxy\n"));
|
||||
retval = 1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
context = eekboard_eekboard_create_context (eekboard,
|
||||
"eekboard-client",
|
||||
NULL);
|
||||
if (!context) {
|
||||
g_printerr ("Can't create context\n");
|
||||
"eekboard-client",
|
||||
NULL);
|
||||
if (context == NULL) {
|
||||
g_printerr (_("Can't create context\n"));
|
||||
retval = 1;
|
||||
goto out;
|
||||
}
|
||||
@ -117,7 +157,7 @@ main (int argc, char **argv)
|
||||
error = NULL;
|
||||
input = g_file_read (file, NULL, &error);
|
||||
if (error) {
|
||||
g_printerr ("Can't read file %s: %s\n",
|
||||
g_printerr (_("Can't read file %s: %s\n"),
|
||||
opt_set_keyboard, error->message);
|
||||
retval = 1;
|
||||
goto out;
|
||||
|
||||
Reference in New Issue
Block a user