Remove unlisted files
This commit is contained in:
@ -1,320 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2010-2011 Daiki Ueno <ueno@unixuser.org>
|
|
||||||
* Copyright (C) 2010-2011 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif /* HAVE_CONFIG_H */
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#ifdef HAVE_ATSPI
|
|
||||||
#include <dbus/dbus.h>
|
|
||||||
#include <atspi/atspi.h>
|
|
||||||
#endif /* HAVE_ATSPI */
|
|
||||||
#ifdef HAVE_IBUS
|
|
||||||
#include <ibus.h>
|
|
||||||
#endif /* HAVE_IBUS */
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#include <glib/gi18n.h>
|
|
||||||
#include "eekboard/eekboard-client.h"
|
|
||||||
#include "client.h"
|
|
||||||
|
|
||||||
static gboolean opt_system = FALSE;
|
|
||||||
static gboolean opt_session = FALSE;
|
|
||||||
static gchar *opt_address = NULL;
|
|
||||||
|
|
||||||
static gboolean opt_focus = FALSE;
|
|
||||||
#ifdef HAVE_ATSPI
|
|
||||||
static gboolean opt_keystroke = FALSE;
|
|
||||||
#endif /* HAVE_ATSPI */
|
|
||||||
|
|
||||||
static gchar *opt_keyboards = NULL;
|
|
||||||
|
|
||||||
static gboolean opt_fullscreen = 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")},
|
|
||||||
#if ENABLE_FOCUS_LISTENER
|
|
||||||
{"listen-focus", 'f', 0, G_OPTION_ARG_NONE, &opt_focus,
|
|
||||||
N_("Listen focus change events")},
|
|
||||||
#endif /* ENABLE_FOCUS_LISTENER */
|
|
||||||
#ifdef HAVE_ATSPI
|
|
||||||
{"listen-keystroke", 's', 0, G_OPTION_ARG_NONE, &opt_keystroke,
|
|
||||||
N_("Listen keystroke events with AT-SPI")},
|
|
||||||
#endif /* HAVE_ATSPI */
|
|
||||||
{"keyboards", 'k', 0, G_OPTION_ARG_STRING, &opt_keyboards,
|
|
||||||
N_("Specify keyboards (comma separated)")},
|
|
||||||
{"fullscreen", 'F', 0, G_OPTION_ARG_NONE, &opt_fullscreen,
|
|
||||||
N_("Create window in fullscreen mode")},
|
|
||||||
{NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_context_destroyed (EekboardContext *context,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
gtk_main_quit ();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_destroyed (EekboardClient *eekboard,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
gtk_main_quit ();
|
|
||||||
}
|
|
||||||
|
|
||||||
enum FocusListenerType {
|
|
||||||
FOCUS_NONE,
|
|
||||||
FOCUS_ATSPI,
|
|
||||||
FOCUS_IBUS
|
|
||||||
};
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
set_keyboards (SeatEmitter *client,
|
|
||||||
const gchar * const *keyboards)
|
|
||||||
{
|
|
||||||
if (g_strv_length ((gchar **)keyboards) == 0) {
|
|
||||||
if (!client_enable_xkl (client)) {
|
|
||||||
g_printerr ("Can't register xklavier event listeners\n");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!client_set_keyboards (client, keyboards)) {
|
|
||||||
gchar *str = g_strjoinv (", ", (gchar **)keyboards);
|
|
||||||
g_printerr ("Can't set keyboards \"%s\"\n", str);
|
|
||||||
g_free (str);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main (int argc, char **argv)
|
|
||||||
{
|
|
||||||
SeatEmitter *client = NULL;
|
|
||||||
EekboardClient *eekboard;
|
|
||||||
EekboardContext *context;
|
|
||||||
GBusType bus_type;
|
|
||||||
GDBusConnection *connection;
|
|
||||||
GError *error;
|
|
||||||
GOptionContext *option_context;
|
|
||||||
gint focus;
|
|
||||||
GSettings *settings = NULL;
|
|
||||||
gchar **keyboards = NULL;
|
|
||||||
gint retval = 0;
|
|
||||||
|
|
||||||
if (!gtk_init_check (&argc, &argv)) {
|
|
||||||
g_printerr ("Can't init GTK\n");
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
eek_init ();
|
|
||||||
|
|
||||||
option_context = g_option_context_new ("eekboard-desktop-client");
|
|
||||||
g_option_context_add_main_entries (option_context, options, NULL);
|
|
||||||
g_option_context_parse (option_context, &argc, &argv, NULL);
|
|
||||||
g_option_context_free (option_context);
|
|
||||||
|
|
||||||
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:
|
|
||||||
error = NULL;
|
|
||||||
connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
|
|
||||||
if (connection == NULL) {
|
|
||||||
g_printerr ("Can't connect to the system bus: %s\n",
|
|
||||||
error->message);
|
|
||||||
g_error_free (error);
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
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 session bus: %s\n",
|
|
||||||
error->message);
|
|
||||||
g_error_free (error);
|
|
||||||
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);
|
|
||||||
g_error_free (error);
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
g_assert_not_reached ();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
client = client_new (connection);
|
|
||||||
g_object_unref (connection);
|
|
||||||
|
|
||||||
if (client == NULL) {
|
|
||||||
g_printerr ("Can't create a client\n");
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
settings = g_settings_new ("org.fedorahosted.eekboard");
|
|
||||||
focus = FOCUS_NONE;
|
|
||||||
if (opt_focus) {
|
|
||||||
gchar *focus_listener = g_settings_get_string (settings,
|
|
||||||
"focus-listener");
|
|
||||||
const struct {
|
|
||||||
const gchar *name;
|
|
||||||
enum FocusListenerType type;
|
|
||||||
} focus_listeners[] = {
|
|
||||||
#ifdef HAVE_ATSPI
|
|
||||||
{ "atspi", FOCUS_ATSPI },
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_IBUS
|
|
||||||
{ "ibus", FOCUS_IBUS },
|
|
||||||
#endif
|
|
||||||
{ NULL }
|
|
||||||
};
|
|
||||||
gint i;
|
|
||||||
|
|
||||||
focus = FOCUS_NONE;
|
|
||||||
for (i = 0; focus_listeners[i].name; i++) {
|
|
||||||
if (g_strcmp0 (focus_listener, focus_listeners[i].name) == 0)
|
|
||||||
focus = focus_listeners[i].type;
|
|
||||||
}
|
|
||||||
if (focus == FOCUS_NONE) {
|
|
||||||
g_printerr ("Unknown focus listener \"%s\". "
|
|
||||||
"Try \"atspi\" or \"ibus\"\n", focus_listener);
|
|
||||||
retval = 1;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_ATSPI
|
|
||||||
if (focus == FOCUS_ATSPI || opt_keystroke) {
|
|
||||||
GSettings *desktop_settings =
|
|
||||||
g_settings_new ("org.gnome.desktop.interface");
|
|
||||||
gboolean accessibility_enabled =
|
|
||||||
g_settings_get_boolean (desktop_settings, "toolkit-accessibility");
|
|
||||||
g_object_unref (desktop_settings);
|
|
||||||
|
|
||||||
if (accessibility_enabled) {
|
|
||||||
if (atspi_init () != 0) {
|
|
||||||
g_printerr ("Can't init AT-SPI 2\n");
|
|
||||||
retval = 1;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (focus == FOCUS_ATSPI &&
|
|
||||||
!client_enable_atspi_focus (client)) {
|
|
||||||
g_printerr ("Can't register AT-SPI focus change event listeners\n");
|
|
||||||
retval = 1;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opt_keystroke &&
|
|
||||||
!client_enable_atspi_keystroke (client)) {
|
|
||||||
g_printerr ("Can't register AT-SPI keystroke event listeners\n");
|
|
||||||
retval = 1;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
g_printerr ("Desktop accessibility support is disabled\n");
|
|
||||||
retval = 1;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* HAVE_ATSPI */
|
|
||||||
|
|
||||||
#ifdef HAVE_IBUS
|
|
||||||
if (focus == FOCUS_IBUS) {
|
|
||||||
ibus_init ();
|
|
||||||
|
|
||||||
if (!client_enable_ibus_focus (client)) {
|
|
||||||
g_printerr ("Can't register IBus focus change event listeners\n");
|
|
||||||
retval = 1;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* HAVE_IBUS */
|
|
||||||
|
|
||||||
//#ifdef HAVE_XTEST
|
|
||||||
if (!client_enable_xtest (client)) {
|
|
||||||
g_printerr ("Can't init xtest\n");
|
|
||||||
g_object_unref (client);
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
//#endif /* HAVE_XTEST */
|
|
||||||
|
|
||||||
if (!opt_focus) {
|
|
||||||
g_object_get (client, "context", &context, NULL);
|
|
||||||
g_signal_connect (context, "destroyed",
|
|
||||||
G_CALLBACK(on_context_destroyed), NULL);
|
|
||||||
g_object_unref (context);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opt_fullscreen ||
|
|
||||||
g_settings_get_boolean (settings, "start-fullscreen")) {
|
|
||||||
g_object_get (client, "context", &context, NULL);
|
|
||||||
eekboard_context_set_fullscreen (context, TRUE, NULL);
|
|
||||||
g_object_unref (context);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_get (client, "eekboard", &eekboard, NULL);
|
|
||||||
g_signal_connect (eekboard, "destroyed",
|
|
||||||
G_CALLBACK(on_destroyed), NULL);
|
|
||||||
g_object_unref (eekboard);
|
|
||||||
|
|
||||||
if (opt_keyboards != NULL) {
|
|
||||||
keyboards = g_strsplit (opt_keyboards, ",", -1);
|
|
||||||
|
|
||||||
if (!set_keyboards (client, (const gchar * const *)keyboards)) {
|
|
||||||
g_strfreev (keyboards);
|
|
||||||
retval = 1;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
g_strfreev (keyboards);
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_main ();
|
|
||||||
|
|
||||||
out:
|
|
||||||
if (client)
|
|
||||||
g_object_unref (client);
|
|
||||||
if (settings)
|
|
||||||
g_object_unref (settings);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
1166
src/client.c
1166
src/client.c
File diff suppressed because it is too large
Load Diff
55
src/client.h
55
src/client.h
@ -1,55 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2010-2011 Daiki Ueno <ueno@unixuser.org>
|
|
||||||
* Copyright (C) 2010-2011 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#ifndef CLIENT_H
|
|
||||||
#define CLIENT_H 1
|
|
||||||
|
|
||||||
#include <gio/gio.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
#define TYPE_CLIENT (client_get_type())
|
|
||||||
#define CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CLIENT, Client))
|
|
||||||
#define CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CLIENT, ClientClass))
|
|
||||||
#define IS_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CLIENT))
|
|
||||||
#define IS_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CLIENT))
|
|
||||||
#define CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CLIENT, ClientClass))
|
|
||||||
|
|
||||||
typedef struct _Client SeatEmitter;
|
|
||||||
|
|
||||||
SeatEmitter *client_new (GDBusConnection *connection);
|
|
||||||
|
|
||||||
gboolean client_set_keyboards (SeatEmitter *client,
|
|
||||||
const gchar * const *keyboard);
|
|
||||||
|
|
||||||
gboolean client_enable_xkl (SeatEmitter *client);
|
|
||||||
void client_disable_xkl (SeatEmitter *client);
|
|
||||||
|
|
||||||
gboolean client_enable_atspi_focus (SeatEmitter *client);
|
|
||||||
void client_disable_atspi_focus (SeatEmitter *client);
|
|
||||||
|
|
||||||
gboolean client_enable_atspi_keystroke (SeatEmitter *client);
|
|
||||||
void client_disable_atspi_keystroke (SeatEmitter *client);
|
|
||||||
|
|
||||||
gboolean client_enable_xtest (SeatEmitter *client);
|
|
||||||
void client_disable_xtest (SeatEmitter *client);
|
|
||||||
|
|
||||||
gboolean client_enable_ibus_focus (SeatEmitter *client);
|
|
||||||
void client_disable_ibus_focus (SeatEmitter *client);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
#endif /* CLIENT_H */
|
|
||||||
@ -1,415 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011 Daiki Ueno <ueno@unixuser.org>
|
|
||||||
* Copyright (C) 2011 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif /* HAVE_CONFIG_H */
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#include "preferences-dialog.h"
|
|
||||||
#include <eek/eek.h>
|
|
||||||
|
|
||||||
struct _PreferencesDialog {
|
|
||||||
GtkWidget *dialog;
|
|
||||||
GtkWidget *repeat_toggle;
|
|
||||||
GtkWidget *repeat_delay_scale;
|
|
||||||
GtkWidget *repeat_speed_scale;
|
|
||||||
GtkWidget *auto_hide_toggle;
|
|
||||||
GtkWidget *auto_hide_delay_scale;
|
|
||||||
GtkWidget *selected_keyboards_treeview;
|
|
||||||
GtkWidget *up_button;
|
|
||||||
GtkWidget *down_button;
|
|
||||||
GtkWidget *add_button;
|
|
||||||
GtkWidget *remove_button;
|
|
||||||
|
|
||||||
GtkWidget *new_keyboard_dialog;
|
|
||||||
GtkWidget *available_keyboards_treeview;
|
|
||||||
|
|
||||||
GList *available_keyboards;
|
|
||||||
GSettings *settings;
|
|
||||||
};
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
get_rate (GValue *value,
|
|
||||||
GVariant *variant,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
int rate;
|
|
||||||
gdouble fraction;
|
|
||||||
|
|
||||||
rate = g_variant_get_uint32 (variant);
|
|
||||||
fraction = 1.0 / ((gdouble) rate / 1000.0);
|
|
||||||
g_value_set_double (value, fraction);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GVariant *
|
|
||||||
set_rate (const GValue *value,
|
|
||||||
const GVariantType *expected_type,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
gdouble rate;
|
|
||||||
int msecs;
|
|
||||||
|
|
||||||
rate = g_value_get_double (value);
|
|
||||||
msecs = (1 / rate) * 1000;
|
|
||||||
return g_variant_new_uint32 (msecs);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
add_keyboard_to_treeview (GtkTreeView *treeview,
|
|
||||||
const gchar *id,
|
|
||||||
const gchar *longname)
|
|
||||||
{
|
|
||||||
GtkTreeModel *model = gtk_tree_view_get_model (treeview);
|
|
||||||
GtkTreeIter iter;
|
|
||||||
|
|
||||||
if (gtk_tree_model_get_iter_first (model, &iter)) {
|
|
||||||
do {
|
|
||||||
gchar *_id;
|
|
||||||
gtk_tree_model_get (model, &iter, 0, &_id, -1);
|
|
||||||
if (g_strcmp0 (id, _id) == 0) {
|
|
||||||
g_free (_id);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
g_free (_id);
|
|
||||||
} while (gtk_tree_model_iter_next (model, &iter));
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_list_store_append (GTK_LIST_STORE(model),
|
|
||||||
&iter);
|
|
||||||
gtk_list_store_set (GTK_LIST_STORE(model),
|
|
||||||
&iter,
|
|
||||||
0, id,
|
|
||||||
1, longname,
|
|
||||||
-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
add_keyboard (GtkWidget *button, PreferencesDialog *dialog)
|
|
||||||
{
|
|
||||||
gint retval = gtk_dialog_run (GTK_DIALOG(dialog->new_keyboard_dialog));
|
|
||||||
if (retval == GTK_RESPONSE_OK) {
|
|
||||||
GtkTreeSelection *selection;
|
|
||||||
GtkTreeModel *model;
|
|
||||||
GList *rows, *p;
|
|
||||||
|
|
||||||
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(dialog->available_keyboards_treeview));
|
|
||||||
rows = gtk_tree_selection_get_selected_rows (selection, &model);
|
|
||||||
for (p = rows; p; p = p->next) {
|
|
||||||
GtkTreeIter iter;
|
|
||||||
if (gtk_tree_model_get_iter (model, &iter, p->data)) {
|
|
||||||
gchar *id, *longname;
|
|
||||||
gtk_tree_model_get (model, &iter, 0, &id, 1, &longname, -1);
|
|
||||||
add_keyboard_to_treeview (GTK_TREE_VIEW(dialog->selected_keyboards_treeview),
|
|
||||||
id,
|
|
||||||
longname);
|
|
||||||
g_free (id);
|
|
||||||
g_free (longname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
gtk_widget_hide (dialog->new_keyboard_dialog);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
remove_keyboard (GtkWidget *button, PreferencesDialog *dialog)
|
|
||||||
{
|
|
||||||
GtkTreeSelection *selection;
|
|
||||||
GtkTreeModel *model;
|
|
||||||
GList *rows, *p;
|
|
||||||
|
|
||||||
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(dialog->selected_keyboards_treeview));
|
|
||||||
rows = gtk_tree_selection_get_selected_rows (selection, &model);
|
|
||||||
for (p = rows; p; p = p->next) {
|
|
||||||
GtkTreeIter iter;
|
|
||||||
if (gtk_tree_model_get_iter (model, &iter, p->data))
|
|
||||||
gtk_list_store_remove (GTK_LIST_STORE(model), &iter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
up_keyboard (GtkWidget *button, PreferencesDialog *dialog)
|
|
||||||
{
|
|
||||||
GtkTreeSelection *selection;
|
|
||||||
GtkTreeModel *model;
|
|
||||||
GtkTreeIter iter;
|
|
||||||
|
|
||||||
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(dialog->selected_keyboards_treeview));
|
|
||||||
if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
|
|
||||||
GtkTreeIter prev = iter;
|
|
||||||
if (gtk_tree_model_iter_previous (model, &prev))
|
|
||||||
gtk_list_store_swap (GTK_LIST_STORE(model), &iter, &prev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
down_keyboard (GtkWidget *button, PreferencesDialog *dialog)
|
|
||||||
{
|
|
||||||
GtkTreeSelection *selection;
|
|
||||||
GtkTreeModel *model;
|
|
||||||
GtkTreeIter iter;
|
|
||||||
|
|
||||||
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(dialog->selected_keyboards_treeview));
|
|
||||||
if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
|
|
||||||
GtkTreeIter next = iter;
|
|
||||||
if (gtk_tree_model_iter_next (model, &next))
|
|
||||||
gtk_list_store_swap (GTK_LIST_STORE(model), &iter, &next);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
selection_changed_cb (GtkTreeSelection *selection, PreferencesDialog *dialog)
|
|
||||||
{
|
|
||||||
gint count = gtk_tree_selection_count_selected_rows (selection);
|
|
||||||
if (count > 0) {
|
|
||||||
gtk_widget_set_sensitive (dialog->remove_button, TRUE);
|
|
||||||
gtk_widget_set_sensitive (dialog->up_button, TRUE);
|
|
||||||
gtk_widget_set_sensitive (dialog->down_button, TRUE);
|
|
||||||
} else {
|
|
||||||
gtk_widget_set_sensitive (dialog->remove_button, FALSE);
|
|
||||||
gtk_widget_set_sensitive (dialog->up_button, FALSE);
|
|
||||||
gtk_widget_set_sensitive (dialog->down_button, FALSE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static gint
|
|
||||||
compare_keyboard_id (const EekXmlKeyboardDesc *desc, const char *id)
|
|
||||||
{
|
|
||||||
return g_strcmp0 (desc->id, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
populate_selected_keyboards (PreferencesDialog *dialog)
|
|
||||||
{
|
|
||||||
gchar **strv, **p;
|
|
||||||
|
|
||||||
strv = g_settings_get_strv (dialog->settings, "keyboards");
|
|
||||||
for (p = strv; *p != NULL; p++) {
|
|
||||||
GList *head = g_list_find_custom (dialog->available_keyboards,
|
|
||||||
*p,
|
|
||||||
(GCompareFunc) compare_keyboard_id);
|
|
||||||
if (head == NULL) {
|
|
||||||
g_warning ("unknown keyboard %s", *p);
|
|
||||||
} else {
|
|
||||||
EekXmlKeyboardDesc *desc = head->data;
|
|
||||||
add_keyboard_to_treeview (GTK_TREE_VIEW(dialog->selected_keyboards_treeview),
|
|
||||||
desc->id,
|
|
||||||
desc->longname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
g_strfreev (strv);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
populate_available_keyboards (PreferencesDialog *dialog)
|
|
||||||
{
|
|
||||||
GList *p;
|
|
||||||
|
|
||||||
for (p = dialog->available_keyboards; p; p = p->next) {
|
|
||||||
EekXmlKeyboardDesc *desc = p->data;
|
|
||||||
add_keyboard_to_treeview (GTK_TREE_VIEW(dialog->available_keyboards_treeview),
|
|
||||||
desc->id,
|
|
||||||
desc->longname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
save_keyboards (PreferencesDialog *dialog)
|
|
||||||
{
|
|
||||||
GtkTreeModel *model;
|
|
||||||
GtkTreeIter iter;
|
|
||||||
GList *list = NULL, *head;
|
|
||||||
gchar **strv, **p;
|
|
||||||
|
|
||||||
model = gtk_tree_view_get_model (GTK_TREE_VIEW(dialog->selected_keyboards_treeview));
|
|
||||||
if (gtk_tree_model_get_iter_first (model, &iter)) {
|
|
||||||
do {
|
|
||||||
gchar *id;
|
|
||||||
gtk_tree_model_get (model, &iter, 0, &id, -1);
|
|
||||||
list = g_list_prepend (list, id);
|
|
||||||
} while (gtk_tree_model_iter_next (model, &iter));
|
|
||||||
}
|
|
||||||
list = g_list_reverse (list);
|
|
||||||
|
|
||||||
strv = g_new0 (gchar *, g_list_length (list) + 1);
|
|
||||||
for (head = list, p = strv; head; head = head->next, p++) {
|
|
||||||
*p = head->data;
|
|
||||||
}
|
|
||||||
g_settings_set_strv (dialog->settings,
|
|
||||||
"keyboards",
|
|
||||||
(const gchar * const *)strv);
|
|
||||||
g_strfreev (strv);
|
|
||||||
g_list_free (list);
|
|
||||||
}
|
|
||||||
|
|
||||||
PreferencesDialog *
|
|
||||||
preferences_dialog_new (void)
|
|
||||||
{
|
|
||||||
PreferencesDialog *dialog;
|
|
||||||
gchar *ui_path;
|
|
||||||
GtkBuilder *builder;
|
|
||||||
GObject *object;
|
|
||||||
GError *error;
|
|
||||||
GtkListStore *store;
|
|
||||||
GtkCellRenderer *renderer;
|
|
||||||
GtkTreeViewColumn *column;
|
|
||||||
GtkTreeSelection *selection;
|
|
||||||
|
|
||||||
dialog = g_slice_new0 (PreferencesDialog);
|
|
||||||
dialog->settings = g_settings_new ("org.fedorahosted.eekboard");
|
|
||||||
|
|
||||||
builder = gtk_builder_new ();
|
|
||||||
gtk_builder_set_translation_domain (builder, "eekboard");
|
|
||||||
ui_path = g_build_filename (PKGDATADIR,
|
|
||||||
"preferences-dialog.ui",
|
|
||||||
NULL);
|
|
||||||
error = NULL;
|
|
||||||
if (gtk_builder_add_from_file (builder, ui_path, &error) == 0) {
|
|
||||||
g_warning ("can't load %s: %s", ui_path, error->message);
|
|
||||||
g_error_free (error);
|
|
||||||
}
|
|
||||||
g_free (ui_path);
|
|
||||||
|
|
||||||
object = gtk_builder_get_object (builder, "dialog");
|
|
||||||
dialog->dialog = GTK_WIDGET(object);
|
|
||||||
|
|
||||||
object = gtk_builder_get_object (builder, "repeat_toggle");
|
|
||||||
dialog->repeat_toggle = GTK_WIDGET(object);
|
|
||||||
|
|
||||||
g_settings_bind (dialog->settings, "repeat",
|
|
||||||
dialog->repeat_toggle, "active",
|
|
||||||
G_SETTINGS_BIND_DEFAULT);
|
|
||||||
|
|
||||||
object = gtk_builder_get_object (builder, "repeat_delay_scale");
|
|
||||||
dialog->repeat_delay_scale = GTK_WIDGET(object);
|
|
||||||
|
|
||||||
g_settings_bind (dialog->settings, "repeat-delay",
|
|
||||||
gtk_range_get_adjustment (GTK_RANGE (dialog->repeat_delay_scale)), "value",
|
|
||||||
G_SETTINGS_BIND_DEFAULT);
|
|
||||||
|
|
||||||
object = gtk_builder_get_object (builder, "repeat_speed_scale");
|
|
||||||
dialog->repeat_speed_scale = GTK_WIDGET(object);
|
|
||||||
|
|
||||||
g_settings_bind_with_mapping (dialog->settings, "repeat-interval",
|
|
||||||
gtk_range_get_adjustment (GTK_RANGE (gtk_builder_get_object (builder, "repeat_speed_scale"))), "value",
|
|
||||||
G_SETTINGS_BIND_DEFAULT,
|
|
||||||
get_rate, set_rate, NULL, NULL);
|
|
||||||
|
|
||||||
object = gtk_builder_get_object (builder, "auto_hide_toggle");
|
|
||||||
dialog->auto_hide_toggle = GTK_WIDGET(object);
|
|
||||||
|
|
||||||
g_settings_bind (dialog->settings, "auto-hide",
|
|
||||||
dialog->auto_hide_toggle, "active",
|
|
||||||
G_SETTINGS_BIND_DEFAULT);
|
|
||||||
|
|
||||||
object = gtk_builder_get_object (builder, "auto_hide_delay_scale");
|
|
||||||
dialog->auto_hide_delay_scale = GTK_WIDGET(object);
|
|
||||||
|
|
||||||
g_settings_bind (dialog->settings, "auto-hide-delay",
|
|
||||||
gtk_range_get_adjustment (GTK_RANGE (dialog->auto_hide_delay_scale)), "value",
|
|
||||||
G_SETTINGS_BIND_DEFAULT);
|
|
||||||
|
|
||||||
object = gtk_builder_get_object (builder,
|
|
||||||
"selected_keyboards_treeview");
|
|
||||||
dialog->selected_keyboards_treeview = GTK_WIDGET(object);
|
|
||||||
|
|
||||||
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (object));
|
|
||||||
g_signal_connect (G_OBJECT(selection), "changed",
|
|
||||||
G_CALLBACK(selection_changed_cb), dialog);
|
|
||||||
|
|
||||||
renderer = GTK_CELL_RENDERER(gtk_cell_renderer_text_new ());
|
|
||||||
column = gtk_tree_view_column_new_with_attributes ("Keyboard",
|
|
||||||
renderer,
|
|
||||||
"text",
|
|
||||||
1,
|
|
||||||
NULL);
|
|
||||||
gtk_tree_view_append_column (GTK_TREE_VIEW (object), column);
|
|
||||||
|
|
||||||
object = gtk_builder_get_object (builder, "up_button");
|
|
||||||
dialog->up_button = GTK_WIDGET(object);
|
|
||||||
g_signal_connect (object, "clicked",
|
|
||||||
G_CALLBACK(up_keyboard), dialog);
|
|
||||||
|
|
||||||
object = gtk_builder_get_object (builder, "down_button");
|
|
||||||
dialog->down_button = GTK_WIDGET(object);
|
|
||||||
g_signal_connect (object, "clicked",
|
|
||||||
G_CALLBACK(down_keyboard), dialog);
|
|
||||||
|
|
||||||
object = gtk_builder_get_object (builder, "add_button");
|
|
||||||
dialog->add_button = GTK_WIDGET(object);
|
|
||||||
g_signal_connect (object, "clicked",
|
|
||||||
G_CALLBACK(add_keyboard), dialog);
|
|
||||||
|
|
||||||
object = gtk_builder_get_object (builder, "remove_button");
|
|
||||||
dialog->remove_button = GTK_WIDGET(object);
|
|
||||||
g_signal_connect (object, "clicked",
|
|
||||||
G_CALLBACK(remove_keyboard), dialog);
|
|
||||||
|
|
||||||
object = gtk_builder_get_object (builder, "new_keyboard_dialog");
|
|
||||||
dialog->new_keyboard_dialog = GTK_WIDGET(object);
|
|
||||||
|
|
||||||
object = gtk_builder_get_object (builder,
|
|
||||||
"available_keyboards_treeview");
|
|
||||||
dialog->available_keyboards_treeview = GTK_WIDGET(object);
|
|
||||||
|
|
||||||
renderer = GTK_CELL_RENDERER(gtk_cell_renderer_text_new ());
|
|
||||||
column = gtk_tree_view_column_new_with_attributes ("Keyboard",
|
|
||||||
renderer,
|
|
||||||
"text",
|
|
||||||
1,
|
|
||||||
NULL);
|
|
||||||
gtk_tree_view_append_column (GTK_TREE_VIEW (object), column);
|
|
||||||
|
|
||||||
object = gtk_builder_get_object (builder,
|
|
||||||
"available_keyboards_liststore");
|
|
||||||
store = GTK_LIST_STORE(object);
|
|
||||||
|
|
||||||
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(store),
|
|
||||||
1,
|
|
||||||
GTK_SORT_ASCENDING);
|
|
||||||
|
|
||||||
dialog->available_keyboards = eek_xml_list_keyboards ();
|
|
||||||
|
|
||||||
populate_selected_keyboards (dialog);
|
|
||||||
populate_available_keyboards (dialog);
|
|
||||||
|
|
||||||
g_object_unref (builder);
|
|
||||||
|
|
||||||
return dialog;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
preferences_dialog_run (PreferencesDialog *dialog)
|
|
||||||
{
|
|
||||||
gtk_window_present (GTK_WINDOW(dialog->dialog));
|
|
||||||
gtk_dialog_run (GTK_DIALOG(dialog->dialog));
|
|
||||||
save_keyboards (dialog);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
preferences_dialog_free (PreferencesDialog *dialog)
|
|
||||||
{
|
|
||||||
gtk_widget_destroy (dialog->dialog);
|
|
||||||
// gtk_widget_destroy (dialog->new_keyboard_dialog);
|
|
||||||
|
|
||||||
g_object_unref (dialog->settings);
|
|
||||||
g_list_free_full (dialog->available_keyboards,
|
|
||||||
(GDestroyNotify) eek_xml_keyboard_desc_free);
|
|
||||||
|
|
||||||
g_slice_free (PreferencesDialog, dialog);
|
|
||||||
}
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011 Daiki Ueno <ueno@unixuser.org>
|
|
||||||
* Copyright (C) 2011 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#ifndef PREFERENCES_DIALOG_H
|
|
||||||
#define PREFERENCES_DIALOG_H 1
|
|
||||||
|
|
||||||
#include <glib-object.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
typedef struct _PreferencesDialog PreferencesDialog;
|
|
||||||
|
|
||||||
PreferencesDialog *preferences_dialog_new (void);
|
|
||||||
void preferences_dialog_run (PreferencesDialog *dialog);
|
|
||||||
void preferences_dialog_free (PreferencesDialog *dialog);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
#endif /* PREFERENCES_DIALOG_H */
|
|
||||||
@ -1,729 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<interface>
|
|
||||||
<!-- interface-requires gtk+ 3.0 -->
|
|
||||||
<object class="GtkAction" id="action1">
|
|
||||||
<property name="stock_id">gtk-close</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkAction" id="action2">
|
|
||||||
<property name="stock_id">gtk-cancel</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkAction" id="action3">
|
|
||||||
<property name="label" translatable="yes">Select</property>
|
|
||||||
<property name="stock_id">gtk-ok</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkAdjustment" id="auto_hide_delay_adjustment">
|
|
||||||
<property name="lower">100</property>
|
|
||||||
<property name="upper">2000</property>
|
|
||||||
<property name="value">500</property>
|
|
||||||
<property name="step_increment">10</property>
|
|
||||||
<property name="page_increment">10</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkListStore" id="available_keyboards_liststore">
|
|
||||||
<columns>
|
|
||||||
<!-- column-name id -->
|
|
||||||
<column type="gchararray"/>
|
|
||||||
<!-- column-name gchararray1 -->
|
|
||||||
<column type="gchararray"/>
|
|
||||||
</columns>
|
|
||||||
</object>
|
|
||||||
<object class="GtkDialog" id="dialog">
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="border_width">5</property>
|
|
||||||
<property name="title" translatable="yes">Keyboard</property>
|
|
||||||
<property name="modal">True</property>
|
|
||||||
<property name="type_hint">dialog</property>
|
|
||||||
<child internal-child="vbox">
|
|
||||||
<object class="GtkBox" id="dialog-vbox4">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child internal-child="action_area">
|
|
||||||
<object class="GtkButtonBox" id="dialog-action_area5">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="layout_style">end</property>
|
|
||||||
<child>
|
|
||||||
<placeholder/>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<placeholder/>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<placeholder/>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="receives_default">True</property>
|
|
||||||
<property name="related_action">action1</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">3</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="pack_type">end</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkNotebook" id="keyboard_notebook">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="border_width">10</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkVBox" id="general_page">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="border_width">12</property>
|
|
||||||
<property name="spacing">18</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkVBox" id="vbox22">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="spacing">6</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label300">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="label" translatable="yes">Repeat Keys</property>
|
|
||||||
<attributes>
|
|
||||||
<attribute name="weight" value="bold"/>
|
|
||||||
</attributes>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox19">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label43">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="label"> </property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkVBox" id="vbox100">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="spacing">6</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkCheckButton" id="repeat_toggle">
|
|
||||||
<property name="label" translatable="yes">Key presses _repeat when key is held down</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="receives_default">False</property>
|
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="draw_indicator">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkTable" id="repeat_table">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="n_rows">2</property>
|
|
||||||
<property name="n_columns">4</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="repeat_speed_label">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="label" translatable="yes">_Speed:</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
<property name="justify">center</property>
|
|
||||||
<property name="mnemonic_widget">repeat_speed_scale</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="top_attach">1</property>
|
|
||||||
<property name="bottom_attach">2</property>
|
|
||||||
<property name="x_options">GTK_SHRINK</property>
|
|
||||||
<property name="y_options"></property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="delay_short_label">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">1</property>
|
|
||||||
<property name="xpad">10</property>
|
|
||||||
<property name="label" translatable="yes">Short</property>
|
|
||||||
<attributes>
|
|
||||||
<attribute name="style" value="italic"/>
|
|
||||||
<attribute name="scale" value="0.82999999999999996"/>
|
|
||||||
</attributes>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">1</property>
|
|
||||||
<property name="right_attach">2</property>
|
|
||||||
<property name="x_options">GTK_SHRINK</property>
|
|
||||||
<property name="y_options"></property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="repeat_slow_label">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">1</property>
|
|
||||||
<property name="xpad">10</property>
|
|
||||||
<property name="label" translatable="yes">Slow</property>
|
|
||||||
<attributes>
|
|
||||||
<attribute name="style" value="italic"/>
|
|
||||||
<attribute name="scale" value="0.82999999999999996"/>
|
|
||||||
</attributes>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">1</property>
|
|
||||||
<property name="right_attach">2</property>
|
|
||||||
<property name="top_attach">1</property>
|
|
||||||
<property name="bottom_attach">2</property>
|
|
||||||
<property name="x_options">GTK_SHRINK</property>
|
|
||||||
<property name="y_options"></property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHScale" id="repeat_delay_scale">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="adjustment">repeat_delay_adjustment</property>
|
|
||||||
<property name="draw_value">False</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">2</property>
|
|
||||||
<property name="right_attach">3</property>
|
|
||||||
<property name="y_options"></property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHScale" id="repeat_speed_scale">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="adjustment">repeat_speed_adjustment</property>
|
|
||||||
<property name="draw_value">False</property>
|
|
||||||
<child internal-child="accessible">
|
|
||||||
<object class="AtkObject" id="repeat_speed_scale-atkobject">
|
|
||||||
<property name="AtkObject::accessible-description" translatable="yes">Repeat keys speed</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">2</property>
|
|
||||||
<property name="right_attach">3</property>
|
|
||||||
<property name="top_attach">1</property>
|
|
||||||
<property name="bottom_attach">2</property>
|
|
||||||
<property name="y_options"></property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="delay_long_label">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="label" translatable="yes">Long</property>
|
|
||||||
<attributes>
|
|
||||||
<attribute name="style" value="italic"/>
|
|
||||||
<attribute name="scale" value="0.82999999999999996"/>
|
|
||||||
</attributes>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">3</property>
|
|
||||||
<property name="right_attach">4</property>
|
|
||||||
<property name="x_options">GTK_SHRINK</property>
|
|
||||||
<property name="y_options"></property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="repeat_fast_label">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="label" translatable="yes">Fast</property>
|
|
||||||
<attributes>
|
|
||||||
<attribute name="style" value="italic"/>
|
|
||||||
<attribute name="scale" value="0.82999999999999996"/>
|
|
||||||
</attributes>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">3</property>
|
|
||||||
<property name="right_attach">4</property>
|
|
||||||
<property name="top_attach">1</property>
|
|
||||||
<property name="bottom_attach">2</property>
|
|
||||||
<property name="x_options">GTK_SHRINK</property>
|
|
||||||
<property name="y_options"></property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="repeat_delay_label">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="label" translatable="yes">_Delay:</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
<property name="justify">center</property>
|
|
||||||
<property name="mnemonic_widget">repeat_delay_scale</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="x_options">GTK_SHRINK</property>
|
|
||||||
<property name="y_options"></property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">True</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkVBox" id="vbox230">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="spacing">6</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label5">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="label" translatable="yes">Focus following</property>
|
|
||||||
<attributes>
|
|
||||||
<attribute name="weight" value="bold"/>
|
|
||||||
</attributes>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox20">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label44">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="label"> </property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkVBox" id="appearances_vbox">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="spacing">6</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkCheckButton" id="auto_hide_toggle">
|
|
||||||
<property name="label" translatable="yes">Auto hide window when focus is out</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="receives_default">False</property>
|
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="draw_indicator">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkTable" id="table1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="n_columns">4</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="auto_hide_delay_label">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="label" translatable="yes">_Delay:</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
<property name="justify">center</property>
|
|
||||||
<property name="mnemonic_widget">auto_hide_delay_scale</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="x_options">GTK_SHRINK</property>
|
|
||||||
<property name="y_options"></property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="auto_hide_delay_short_label">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">1</property>
|
|
||||||
<property name="xpad">10</property>
|
|
||||||
<property name="label" translatable="yes">Short</property>
|
|
||||||
<attributes>
|
|
||||||
<attribute name="style" value="italic"/>
|
|
||||||
<attribute name="scale" value="0.82999999999999996"/>
|
|
||||||
</attributes>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">1</property>
|
|
||||||
<property name="right_attach">2</property>
|
|
||||||
<property name="x_options">GTK_SHRINK</property>
|
|
||||||
<property name="y_options"></property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHScale" id="auto_hide_delay_scale">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="adjustment">auto_hide_delay_adjustment</property>
|
|
||||||
<property name="draw_value">False</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">2</property>
|
|
||||||
<property name="right_attach">3</property>
|
|
||||||
<property name="y_options"></property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="auto_hide_delay_long_label">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="label" translatable="yes">Long</property>
|
|
||||||
<attributes>
|
|
||||||
<attribute name="style" value="italic"/>
|
|
||||||
<attribute name="scale" value="0.82999999999999996"/>
|
|
||||||
</attributes>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">3</property>
|
|
||||||
<property name="right_attach">4</property>
|
|
||||||
<property name="x_options">GTK_SHRINK</property>
|
|
||||||
<property name="y_options"></property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">True</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child type="tab">
|
|
||||||
<object class="GtkLabel" id="label1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="label" translatable="yes">Typing</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="tab_fill">False</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkVBox" id="keyboards_page">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="border_width">12</property>
|
|
||||||
<property name="spacing">18</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkTreeView" id="selected_keyboards_treeview">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="model">selected_keyboards_liststore</property>
|
|
||||||
<property name="headers_visible">False</property>
|
|
||||||
<property name="headers_clickable">False</property>
|
|
||||||
<child internal-child="selection">
|
|
||||||
<object class="GtkTreeSelection" id="treeview-selection2"/>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">True</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButtonBox" id="buttonbox1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<property name="layout_style">end</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="up_button">
|
|
||||||
<property name="label">gtk-go-up</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="sensitive">False</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="receives_default">True</property>
|
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="use_stock">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="down_button">
|
|
||||||
<property name="label">gtk-go-down</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="sensitive">False</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="receives_default">True</property>
|
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="use_stock">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="add_button">
|
|
||||||
<property name="label">gtk-add</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="receives_default">True</property>
|
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="use_stock">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">2</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="remove_button">
|
|
||||||
<property name="label">gtk-remove</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="sensitive">False</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="receives_default">True</property>
|
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="use_stock">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">3</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child type="tab">
|
|
||||||
<object class="GtkLabel" id="label2">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="label" translatable="yes">Keyboards</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
<property name="tab_fill">False</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<placeholder/>
|
|
||||||
</child>
|
|
||||||
<child type="tab">
|
|
||||||
<placeholder/>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">True</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<action-widgets>
|
|
||||||
<action-widget response="0">button1</action-widget>
|
|
||||||
</action-widgets>
|
|
||||||
</object>
|
|
||||||
<object class="GtkDialog" id="new_keyboard_dialog">
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="border_width">5</property>
|
|
||||||
<property name="default_height">430</property>
|
|
||||||
<property name="destroy_with_parent">True</property>
|
|
||||||
<property name="type_hint">dialog</property>
|
|
||||||
<property name="transient_for">dialog</property>
|
|
||||||
<child internal-child="vbox">
|
|
||||||
<object class="GtkBox" id="dialog-vbox2">
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child internal-child="action_area">
|
|
||||||
<object class="GtkButtonBox" id="dialog-action_area2">
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="layout_style">end</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button2">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="receives_default">True</property>
|
|
||||||
<property name="related_action">action2</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button3">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="receives_default">True</property>
|
|
||||||
<property name="related_action">action3</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="pack_type">end</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="shadow_type">in</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkTreeView" id="available_keyboards_treeview">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="model">available_keyboards_liststore</property>
|
|
||||||
<property name="headers_visible">False</property>
|
|
||||||
<property name="headers_clickable">False</property>
|
|
||||||
<child internal-child="selection">
|
|
||||||
<object class="GtkTreeSelection" id="treeview-selection3"/>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">True</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<action-widgets>
|
|
||||||
<action-widget response="0">button2</action-widget>
|
|
||||||
<action-widget response="-5">button3</action-widget>
|
|
||||||
</action-widgets>
|
|
||||||
</object>
|
|
||||||
<object class="GtkAdjustment" id="repeat_delay_adjustment">
|
|
||||||
<property name="lower">100</property>
|
|
||||||
<property name="upper">2000</property>
|
|
||||||
<property name="value">500</property>
|
|
||||||
<property name="step_increment">10</property>
|
|
||||||
<property name="page_increment">10</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkAdjustment" id="repeat_speed_adjustment">
|
|
||||||
<property name="lower">0.5</property>
|
|
||||||
<property name="upper">50</property>
|
|
||||||
<property name="value">33.299999999999997</property>
|
|
||||||
<property name="step_increment">1</property>
|
|
||||||
<property name="page_increment">1</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkListStore" id="selected_keyboards_liststore">
|
|
||||||
<columns>
|
|
||||||
<!-- column-name id -->
|
|
||||||
<column type="gchararray"/>
|
|
||||||
<!-- column-name gchararray1 -->
|
|
||||||
<column type="gchararray"/>
|
|
||||||
</columns>
|
|
||||||
</object>
|
|
||||||
</interface>
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2012 Daiki Ueno <ueno@unixuser.org>
|
|
||||||
* Copyright (C) 2012 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include <config.h>
|
|
||||||
#endif
|
|
||||||
#include "preferences-dialog.h"
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
int
|
|
||||||
main (int argc, char **argv)
|
|
||||||
{
|
|
||||||
PreferencesDialog *dialog;
|
|
||||||
|
|
||||||
if (!gtk_init_check (&argc, &argv)) {
|
|
||||||
g_printerr ("Can't init GTK\n");
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
dialog = preferences_dialog_new ();
|
|
||||||
preferences_dialog_run (dialog);
|
|
||||||
preferences_dialog_free (dialog);
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user