(minput_get_command \
(current_lang, current_name, current_command))))))
+#define CURRENT_DESCRIPTION \
+ (mtext_data \
+ (mplist_value \
+ (mplist_next \
+ (mplist_value \
+ (minput_get_command \
+ (current_lang, current_name, current_command)))), \
+ NULL, NULL, NULL, NULL))
+
#define CONFIG_COMMAND(plist) \
minput_config_command (current_lang, current_name, current_command, \
(plist))
+static void
+mtext__cat_str (MText *mt, char *str)
+{
+ while (*str)
+ {
+ mtext_cat_char (mt, (int) *str);
+ str++;
+ }
+}
+
static unsigned modifier_state = 0;
static MPlist *entry_keyseq;
static MSymbol current_lang, current_name, current_command;
struct BindingWidgets
{
+ GtkWidget *view;
+ GtkWidget *default_;
+ GtkWidget *revert;
+ GtkWidget *delete;
GtkWidget *entry;
GtkWidget *clear;
GtkWidget *add;
- GtkWidget *view;
- GtkWidget *delete;
+ GtkWidget *status;
};
enum KeyMaskBit {
}
}
-gboolean
+static gboolean
key_pressed_cb (GtkEntry *entry, GdkEventKey *event, gpointer data)
{
guint c;
return TRUE;
}
-gboolean
+static gboolean
key_released_cb (GtkEntry *entry, GdkEventKey *event, gpointer data)
{
guint c;
}
static void
+update_widgets (struct BindingWidgets *bw)
+{
+ MSymbol status = CURRENT_STATUS;
+
+ if (status == Mconfigured)
+ {
+ gtk_widget_set_sensitive (bw->default_, TRUE);
+ gtk_widget_set_sensitive (bw->revert, TRUE);
+ }
+ else if (status == Mcustomized)
+ {
+ gtk_widget_set_sensitive (bw->default_, TRUE);
+ gtk_widget_set_sensitive (bw->revert, FALSE);
+ }
+ else
+ {
+ gtk_widget_set_sensitive (bw->default_, FALSE);
+ gtk_widget_set_sensitive (bw->revert, FALSE);
+ }
+}
+
+static void
clear_cb (GtkButton *button, gpointer data)
{
struct BindingWidgets *bw = data;
gtk_list_store_set (store, &iter, 0, mplist_value (last), -1);
update_binding_store (bw->view);
clear_cb (NULL, bw);
- gtk_widget_set_sensitive (bw->clear, FALSE);
- gtk_widget_set_sensitive (bw->add, FALSE);
+ gtk_widget_set_sensitive (bw->default_, TRUE);
+ gtk_widget_set_sensitive (bw->revert, TRUE);
+ gtk_label_set_text (GTK_LABEL (bw->status), _("modified"));
}
static GtkWidget *
g_signal_connect (G_OBJECT (bw->add), "clicked",
G_CALLBACK (add_cb), bw);
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
+ vbox = gtk_vbox_new (FALSE, 12);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
hbox = gtk_hbox_new (FALSE, 6);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 6);
{
MPlist *keyseq, *pl;
gint n;
- gchar buf[1024];
+ MText *mt = mtext ();
gtk_tree_model_get (model, iter, 0, &keyseq, -1);
- for (pl = keyseq, n = 0;
+ for (pl = keyseq;
pl && mplist_key (pl) == Msymbol;
pl = mplist_next (pl))
- n += strlen (msymbol_name ((MSymbol) mplist_value (pl))) + 1;
- if (n < sizeof (buf))
- {
- buf[0] = '\0';
- for (pl = keyseq;
- pl && mplist_key (pl) == Msymbol;
- pl = mplist_next (pl))
- {
- strcat (buf, msymbol_name ((MSymbol) mplist_value (pl)));
- strcat (buf, " ");
- }
- g_object_set (renderer, "foreground-set", FALSE, NULL);
- }
- else
{
- g_snprintf (buf, sizeof (buf), _("Too long to display"));
- g_object_set (renderer, "foreground", "Red", "foreground-set", TRUE,
- NULL);
+ mtext__cat_str (mt, msymbol_name ((MSymbol) mplist_value (pl)));
+ mtext_cat_char (mt, ' ');
}
- g_object_set (renderer, "text", buf, NULL);
+ g_object_set (renderer, "text", mtext_data (mt, NULL, NULL, NULL, NULL),
+ NULL);
+ m17n_object_unref (mt);
}
static void *
CONFIG_COMMAND (empty);
m17n_object_unref (empty);
update_binding_store (bw->view);
+ gtk_widget_set_sensitive (bw->default_, FALSE);
+ if (CURRENT_STATUS == Mconfigured)
+ {
+ gtk_widget_set_sensitive (bw->revert, TRUE);
+ gtk_label_set_text (GTK_LABEL (bw->status), _("modified"));
+ }
+ else
+ {
+ gtk_widget_set_sensitive (bw->revert, FALSE);
+ gtk_label_set_text (GTK_LABEL (bw->status), _("default"));
+ }
}
static void *
CONFIG_COMMAND (NULL);
update_binding_store (bw->view);
+ gtk_widget_set_sensitive (bw->revert, FALSE);
+ if (CURRENT_STATUS == Mnil)
+ {
+ gtk_widget_set_sensitive (bw->default_, FALSE);
+ gtk_label_set_text (GTK_LABEL (bw->status), _("default"));
+ }
+ else
+ {
+ gtk_widget_set_sensitive (bw->default_, TRUE);
+ gtk_label_set_text (GTK_LABEL (bw->status), _("customized"));
+ }
}
static void
m17n_object_unref (new);
gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
update_binding_store (bw->view);
- gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE);
+ update_widgets (bw);
+ gtk_widget_set_sensitive (bw->default_, TRUE);
+ gtk_widget_set_sensitive (bw->revert, TRUE);
+ gtk_label_set_text (GTK_LABEL (bw->status), _("modified"));
}
static GtkWidget *
create_deleting_section (struct BindingWidgets *bw)
{
GtkListStore *store;
- GtkWidget *scrolled, *default_, *revert, *delete, *hbox, *vbox;
+ GtkWidget *label, *scrolled, *hbox, *vbox;
GtkTreeViewColumn *column;
GtkCellRenderer *renderer;
GtkTreeIter iter;
GtkTreeSelection *selection;
MPlist *pl;
+ label = gtk_label_new (_("Current key bindings:"));
+
store = gtk_list_store_new (1, G_TYPE_POINTER);
bw->view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
g_object_unref (G_OBJECT (store));
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (bw->view), FALSE);
update_binding_store (bw->view);
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(bw->view));
gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
bw->view);
column = gtk_tree_view_column_new ();
- gtk_tree_view_column_set_title (column, _("Current Key Bindings"));
gtk_tree_view_append_column (GTK_TREE_VIEW (bw->view), column);
renderer = gtk_cell_renderer_text_new ();
gtk_tree_view_column_set_cell_data_func
(column, renderer, keyseq_render_function, NULL, NULL);
- default_ = gtk_button_new_from_stock (_("_Default"));
- g_signal_connect (G_OBJECT (default_), "clicked",
+ bw->default_ = gtk_button_new_from_stock (_("_Default"));
+ g_signal_connect (G_OBJECT (bw->default_), "clicked",
G_CALLBACK (default_cb), bw);
- revert = gtk_button_new_from_stock (GTK_STOCK_REVERT_TO_SAVED);
- g_signal_connect (G_OBJECT (revert), "clicked",
+ bw->revert = gtk_button_new_from_stock (GTK_STOCK_REVERT_TO_SAVED);
+ g_signal_connect (G_OBJECT (bw->revert), "clicked",
G_CALLBACK (revert_cb), bw);
bw->delete = gtk_button_new_from_stock (GTK_STOCK_DELETE);
g_signal_connect (G_OBJECT (bw->delete), "clicked",
G_CALLBACK (delete_cb), bw);
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
+ vbox = gtk_vbox_new (FALSE, 12);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
+
+ hbox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 6);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
gtk_container_add (GTK_CONTAINER (vbox), scrolled);
hbox = gtk_hbutton_box_new ();
gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_END);
gtk_box_set_spacing (GTK_BOX (hbox), 6);
- gtk_container_add (GTK_CONTAINER (hbox), default_);
- gtk_container_add (GTK_CONTAINER (hbox), revert);
+ gtk_container_add (GTK_CONTAINER (hbox), bw->default_);
+ gtk_container_add (GTK_CONTAINER (hbox), bw->revert);
gtk_container_add (GTK_CONTAINER (hbox), bw->delete);
gtk_container_add (GTK_CONTAINER (vbox), hbox);
return vbox;
}
+static void *
+help_cb (GtkButton *button, gpointer data)
+{
+ struct BindingWidgets *bw = data;
+ GtkWidget *msg;
+
+ msg = gtk_message_dialog_new (GTK_WINDOW
+ (gtk_widget_get_toplevel (bw->view)),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_CLOSE,
+ CURRENT_DESCRIPTION);
+ gtk_dialog_run (GTK_DIALOG (msg));
+ gtk_widget_destroy (msg);
+}
+
static void
set_status (GtkListStore *store, GtkTreeIter *iter)
{
gchar *status_str;
status = CURRENT_STATUS;
- if (status == Mnil || status == Minherited)
- status_str = _("default");
+ if (status == Mconfigured)
+ status_str = _("modified");
else if (status == Mcustomized)
status_str = _("customized");
else
- status_str = _("modified");
+ status_str = _("default");
gtk_list_store_set (store, iter, 1, status_str, -1);
}
{
GtkTreeModel *model;
GtkTreeIter iter;
- GtkWidget *dialog;
+ GtkWidget *dialog, *label, *help, *vbox, *hbox;
+ MSymbol status;
struct BindingWidgets bw;
gchar *command;
gtk_tree_model_get (model, &iter, 0, &command, -1);
current_command = msymbol (command);
+ /*
dialog = (gtk_dialog_new_with_buttons
(command,
GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (parent))),
GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
+ GTK_STOCK_OK, GTK_RESPONSE_OK,
NULL));
- gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox),
- create_adding_section (&bw));
+ */
+ dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (dialog), command);
+ gtk_window_set_transient_for
+ (GTK_WINDOW (dialog),
+ GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (parent))));
+ gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
+ gtk_button_box_set_layout (GTK_BUTTON_BOX (GTK_DIALOG (dialog)->action_area),
+ GTK_BUTTONBOX_EDGE);
+
+ help = gtk_button_new_from_stock (GTK_STOCK_HELP);
+ g_signal_connect (G_OBJECT (help), "clicked",
+ G_CALLBACK (help_cb), &bw);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ help, FALSE, FALSE, 0);
+
+ gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_OK, GTK_RESPONSE_OK);
+
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox),
create_deleting_section (&bw));
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox),
+ create_adding_section (&bw));
+
+ vbox = gtk_vbox_new (FALSE, 12);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox);
+
+ hbox = gtk_hbox_new (FALSE, 6);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+
+ label = gtk_label_new (_("Status : "));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+
+ bw.status = gtk_label_new (NULL);
+ gtk_box_pack_start (GTK_BOX (hbox), bw.status, FALSE, FALSE, 0);
+
+ status = CURRENT_STATUS;
+ if (status == Mconfigured)
+ {
+ gtk_widget_set_sensitive (bw.default_, TRUE);
+ gtk_widget_set_sensitive (bw.revert, TRUE);
+ gtk_label_set_text (GTK_LABEL (bw.status), _("modified"));
+ }
+ else if (status == Mcustomized)
+ {
+ gtk_widget_set_sensitive (bw.default_, TRUE);
+ gtk_widget_set_sensitive (bw.revert, FALSE);
+ gtk_label_set_text (GTK_LABEL (bw.status), _("customized"));
+ }
+ else
+ {
+ gtk_widget_set_sensitive (bw.default_, FALSE);
+ gtk_widget_set_sensitive (bw.revert, FALSE);
+ gtk_label_set_text (GTK_LABEL (bw.status), _("default"));
+ }
+
gtk_widget_show_all (dialog);
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_tree_model_get_iter (model, &iter, path);
}
GtkWidget *
-create_command_entries (GtkTooltips *tip, MSymbol lang, MSymbol name)
+create_command_list (MSymbol lang, MSymbol name)
{
GtkListStore *store;
GtkWidget *view;