Based on a patch by: Denis Washington <denisw@svn.gnome.org>
2008-07-26 Jens Granseuer <jensgr@gmx.net> Based on a patch by: Denis Washington <denisw@svn.gnome.org> * gnome-keybinding-properties.c: (binding_name), (show_error), (accel_edited_callback): when trying to assign a shortcut that is already in use, ask the user whether to reassign it instead of refusing to do anything (bug #133318) svn path=/trunk/; revision=8796
This commit is contained in:
parent
bb97264fdd
commit
4a8637592a
2 changed files with 102 additions and 25 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2008-07-26 Jens Granseuer <jensgr@gmx.net>
|
||||||
|
|
||||||
|
Based on a patch by: Denis Washington <denisw@svn.gnome.org>
|
||||||
|
|
||||||
|
* gnome-keybinding-properties.c: (binding_name), (show_error),
|
||||||
|
(accel_edited_callback): when trying to assign a shortcut that is
|
||||||
|
already in use, ask the user whether to reassign it instead of
|
||||||
|
refusing to do anything (bug #133318)
|
||||||
|
|
||||||
2008-06-21 Jens Granseuer <jensgr@gmx.net>
|
2008-06-21 Jens Granseuer <jensgr@gmx.net>
|
||||||
|
|
||||||
Patch by: Matthias Clasen <mclasen@redhat.com>
|
Patch by: Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
|
@ -87,7 +87,7 @@ binding_name (guint keyval,
|
||||||
egg_virtual_accelerator_label (keyval, keycode, mask) :
|
egg_virtual_accelerator_label (keyval, keycode, mask) :
|
||||||
egg_virtual_accelerator_name (keyval, keycode, mask);
|
egg_virtual_accelerator_name (keyval, keycode, mask);
|
||||||
else
|
else
|
||||||
return translate ? g_strdup (_("Disabled")) : g_strdup ("disabled");
|
return g_strdup (translate ? _("Disabled") : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -925,6 +925,23 @@ keyval_is_forbidden (guint keyval)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
show_error (GtkWindow *parent,
|
||||||
|
GError *err)
|
||||||
|
{
|
||||||
|
GtkWidget *dialog;
|
||||||
|
|
||||||
|
dialog = gtk_message_dialog_new (parent,
|
||||||
|
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
|
||||||
|
GTK_MESSAGE_WARNING,
|
||||||
|
GTK_BUTTONS_OK,
|
||||||
|
_("Error saving the new shortcut: %s"),
|
||||||
|
err->message);
|
||||||
|
|
||||||
|
gtk_dialog_run (GTK_DIALOG (dialog));
|
||||||
|
gtk_widget_destroy (dialog);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
accel_edited_callback (GtkCellRendererText *cell,
|
accel_edited_callback (GtkCellRendererText *cell,
|
||||||
const char *path_string,
|
const char *path_string,
|
||||||
|
@ -1017,6 +1034,7 @@ accel_edited_callback (GtkCellRendererText *cell,
|
||||||
{
|
{
|
||||||
GtkWidget *dialog;
|
GtkWidget *dialog;
|
||||||
char *name;
|
char *name;
|
||||||
|
int response;
|
||||||
|
|
||||||
name = binding_name (keyval, keycode, mask, TRUE);
|
name = binding_name (keyval, keycode, mask, TRUE);
|
||||||
|
|
||||||
|
@ -1025,17 +1043,77 @@ accel_edited_callback (GtkCellRendererText *cell,
|
||||||
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
|
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
|
||||||
GTK_MESSAGE_WARNING,
|
GTK_MESSAGE_WARNING,
|
||||||
GTK_BUTTONS_CANCEL,
|
GTK_BUTTONS_CANCEL,
|
||||||
_("The shortcut \"%s\" is already used for:\n \"%s\""),
|
_("The shortcut \"%s\" is already used for\n\"%s\""),
|
||||||
name,
|
name, tmp_key.description ?
|
||||||
tmp_key.description ?
|
|
||||||
tmp_key.description : tmp_key.gconf_key);
|
tmp_key.description : tmp_key.gconf_key);
|
||||||
g_free (name);
|
g_free (name);
|
||||||
gtk_dialog_run (GTK_DIALOG (dialog));
|
|
||||||
|
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
|
||||||
|
_("If you reassign the shortcut to \"%s\", the \"%s\" shortcut "
|
||||||
|
"will be disabled."),
|
||||||
|
key_entry->description ?
|
||||||
|
key_entry->description : key_entry->gconf_key,
|
||||||
|
tmp_key.description ?
|
||||||
|
tmp_key.description : tmp_key.gconf_key);
|
||||||
|
|
||||||
|
gtk_dialog_add_button (GTK_DIALOG (dialog),
|
||||||
|
_("_Reassign"),
|
||||||
|
GTK_RESPONSE_ACCEPT);
|
||||||
|
|
||||||
|
gtk_dialog_set_default_response (GTK_DIALOG (dialog),
|
||||||
|
GTK_RESPONSE_ACCEPT);
|
||||||
|
|
||||||
|
response = gtk_dialog_run (GTK_DIALOG (dialog));
|
||||||
gtk_widget_destroy (dialog);
|
gtk_widget_destroy (dialog);
|
||||||
|
|
||||||
|
if (response == GTK_RESPONSE_ACCEPT)
|
||||||
|
{
|
||||||
|
GConfClient *client;
|
||||||
|
|
||||||
|
client = gconf_client_get_default ();
|
||||||
|
|
||||||
|
gconf_client_set_string (client,
|
||||||
|
tmp_key.gconf_key,
|
||||||
|
"", &err);
|
||||||
|
|
||||||
|
if (err != NULL)
|
||||||
|
{
|
||||||
|
show_error (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view))),
|
||||||
|
err);
|
||||||
|
g_error_free (err);
|
||||||
|
g_object_unref (client);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
str = binding_name (keyval, keycode, mask, FALSE);
|
||||||
|
gconf_client_set_string (client,
|
||||||
|
key_entry->gconf_key,
|
||||||
|
str, &err);
|
||||||
|
|
||||||
|
if (err != NULL)
|
||||||
|
{
|
||||||
|
show_error (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view))),
|
||||||
|
err);
|
||||||
|
g_error_free (err);
|
||||||
|
|
||||||
|
/* reset the previous shortcut */
|
||||||
|
gconf_client_set_string (client,
|
||||||
|
tmp_key.gconf_key,
|
||||||
|
str, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (str);
|
||||||
|
g_object_unref (client);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* set it back to its previous value. */
|
/* set it back to its previous value. */
|
||||||
egg_cell_renderer_keys_set_accelerator (EGG_CELL_RENDERER_KEYS (cell),
|
egg_cell_renderer_keys_set_accelerator (EGG_CELL_RENDERER_KEYS (cell),
|
||||||
key_entry->keyval, key_entry->keycode, key_entry->mask);
|
key_entry->keyval,
|
||||||
|
key_entry->keycode,
|
||||||
|
key_entry->mask);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1051,17 +1129,7 @@ accel_edited_callback (GtkCellRendererText *cell,
|
||||||
|
|
||||||
if (err != NULL)
|
if (err != NULL)
|
||||||
{
|
{
|
||||||
GtkWidget *dialog;
|
show_error (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view))), err);
|
||||||
|
|
||||||
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view))),
|
|
||||||
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
|
|
||||||
GTK_MESSAGE_WARNING,
|
|
||||||
GTK_BUTTONS_OK,
|
|
||||||
_("Error setting new accelerator in configuration database: %s"),
|
|
||||||
err->message);
|
|
||||||
gtk_dialog_run (GTK_DIALOG (dialog));
|
|
||||||
|
|
||||||
gtk_widget_destroy (dialog);
|
|
||||||
g_error_free (err);
|
g_error_free (err);
|
||||||
key_entry->editable = FALSE;
|
key_entry->editable = FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1097,7 +1165,7 @@ accel_cleared_callback (GtkCellRendererText *cell,
|
||||||
client = gconf_client_get_default();
|
client = gconf_client_get_default();
|
||||||
gconf_client_set_string (client,
|
gconf_client_set_string (client,
|
||||||
key_entry->gconf_key,
|
key_entry->gconf_key,
|
||||||
"disabled",
|
"",
|
||||||
&err);
|
&err);
|
||||||
g_object_unref (client);
|
g_object_unref (client);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue