stop widget accelerators from activating while the user is entering a new
2008-03-15 Jens Granseuer <jensgr@gmx.net> * gnome-keybinding-properties.c: (accel_edited_callback), (accel_cleared_callback), (start_editing_cb), (maybe_block_accels), (setup_dialog): stop widget accelerators from activating while the user is entering a new shortcut. This allows binding shortcuts that are used as accels in the capplet dialog, e.g. for the Help and Close buttons (bug #313228) svn path=/trunk/; revision=8581
This commit is contained in:
parent
c751e9191c
commit
3d19d6f56d
2 changed files with 35 additions and 11 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2008-03-15 Jens Granseuer <jensgr@gmx.net>
|
||||||
|
|
||||||
|
* gnome-keybinding-properties.c: (accel_edited_callback),
|
||||||
|
(accel_cleared_callback), (start_editing_cb),
|
||||||
|
(maybe_block_accels), (setup_dialog): stop widget accelerators
|
||||||
|
from activating while the user is entering a new shortcut. This
|
||||||
|
allows binding shortcuts that are used as accels in the capplet
|
||||||
|
dialog, e.g. for the Help and Close buttons (bug #313228)
|
||||||
|
|
||||||
2008-03-14 Jens Granseuer <jensgr@gmx.net>
|
2008-03-14 Jens Granseuer <jensgr@gmx.net>
|
||||||
|
|
||||||
* gnome-keybinding-properties.c: (append_keys_to_tree_from_file):
|
* gnome-keybinding-properties.c: (append_keys_to_tree_from_file):
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
#include "eggcellrendererkeys.h"
|
#include "eggcellrendererkeys.h"
|
||||||
#include "activate-settings-daemon.h"
|
#include "activate-settings-daemon.h"
|
||||||
|
|
||||||
#define LABEL_DATA "gnome-keybinding-properties-label"
|
|
||||||
#define MAX_ELEMENTS_BEFORE_SCROLLING 10
|
#define MAX_ELEMENTS_BEFORE_SCROLLING 10
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -63,12 +62,7 @@ typedef struct
|
||||||
char *description;
|
char *description;
|
||||||
} KeyEntry;
|
} KeyEntry;
|
||||||
|
|
||||||
static void reload_key_entries (gpointer wm_name,
|
static gboolean block_accels = FALSE;
|
||||||
GladeXML *dialog);
|
|
||||||
static char* binding_name (guint keyval,
|
|
||||||
guint keycode,
|
|
||||||
EggVirtualModifierType mask,
|
|
||||||
gboolean translate);
|
|
||||||
|
|
||||||
static GtkTreeModel*
|
static GtkTreeModel*
|
||||||
get_real_model (GtkTreeView *tree_view)
|
get_real_model (GtkTreeView *tree_view)
|
||||||
|
@ -120,7 +114,7 @@ binding_from_string (const char *str,
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (accelerator_key != NULL, FALSE);
|
g_return_val_if_fail (accelerator_key != NULL, FALSE);
|
||||||
|
|
||||||
if (str == NULL || (str && strcmp (str, "disabled") == 0))
|
if (str == NULL || strcmp (str, "disabled") == 0)
|
||||||
{
|
{
|
||||||
*accelerator_key = 0;
|
*accelerator_key = 0;
|
||||||
*keycode = 0;
|
*keycode = 0;
|
||||||
|
@ -857,6 +851,8 @@ accel_edited_callback (GtkCellRendererText *cell,
|
||||||
GError *err = NULL;
|
GError *err = NULL;
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
|
block_accels = FALSE;
|
||||||
|
|
||||||
model = gtk_tree_view_get_model (view);
|
model = gtk_tree_view_get_model (view);
|
||||||
gtk_tree_model_get_iter (model, &iter, path);
|
gtk_tree_model_get_iter (model, &iter, path);
|
||||||
gtk_tree_path_free (path);
|
gtk_tree_path_free (path);
|
||||||
|
@ -994,6 +990,8 @@ accel_cleared_callback (GtkCellRendererText *cell,
|
||||||
GError *err = NULL;
|
GError *err = NULL;
|
||||||
GtkTreeModel *model;
|
GtkTreeModel *model;
|
||||||
|
|
||||||
|
block_accels = FALSE;
|
||||||
|
|
||||||
model = gtk_tree_view_get_model (view);
|
model = gtk_tree_view_get_model (view);
|
||||||
gtk_tree_model_get_iter (model, &iter, path);
|
gtk_tree_model_get_iter (model, &iter, path);
|
||||||
gtk_tree_path_free (path);
|
gtk_tree_path_free (path);
|
||||||
|
@ -1070,7 +1068,7 @@ start_editing_kb_cb (GtkTreeView *treeview,
|
||||||
static gboolean
|
static gboolean
|
||||||
start_editing_cb (GtkTreeView *tree_view,
|
start_editing_cb (GtkTreeView *tree_view,
|
||||||
GdkEventButton *event,
|
GdkEventButton *event,
|
||||||
GladeXML *dialog)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkTreePath *path;
|
GtkTreePath *path;
|
||||||
|
|
||||||
|
@ -1096,10 +1094,26 @@ start_editing_cb (GtkTreeView *tree_view,
|
||||||
idle_data->path = path;
|
idle_data->path = path;
|
||||||
g_signal_stop_emission_by_name (G_OBJECT (tree_view), "button_press_event");
|
g_signal_stop_emission_by_name (G_OBJECT (tree_view), "button_press_event");
|
||||||
g_idle_add ((GSourceFunc) real_start_editing_cb, idle_data);
|
g_idle_add ((GSourceFunc) real_start_editing_cb, idle_data);
|
||||||
|
block_accels = TRUE;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* this handler is used to keep accels from activating while the user
|
||||||
|
* is assigning a new shortcut so that he won't accidentally trigger one
|
||||||
|
* of the widgets */
|
||||||
|
static gboolean
|
||||||
|
maybe_block_accels (GtkWidget *widget,
|
||||||
|
GdkEventKey *event,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
if (block_accels)
|
||||||
|
{
|
||||||
|
return gtk_window_propagate_key_event (GTK_WINDOW (widget), event);
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cb_dialog_response (GtkWidget *widget, gint response_id, gpointer data)
|
cb_dialog_response (GtkWidget *widget, gint response_id, gpointer data)
|
||||||
{
|
{
|
||||||
|
@ -1131,10 +1145,10 @@ setup_dialog (GladeXML *dialog)
|
||||||
|
|
||||||
g_signal_connect (GTK_TREE_VIEW (WID ("shortcut_treeview")),
|
g_signal_connect (GTK_TREE_VIEW (WID ("shortcut_treeview")),
|
||||||
"button_press_event",
|
"button_press_event",
|
||||||
G_CALLBACK (start_editing_cb), dialog);
|
G_CALLBACK (start_editing_cb), NULL);
|
||||||
g_signal_connect (GTK_TREE_VIEW (WID ("shortcut_treeview")),
|
g_signal_connect (GTK_TREE_VIEW (WID ("shortcut_treeview")),
|
||||||
"row-activated",
|
"row-activated",
|
||||||
G_CALLBACK (start_editing_kb_cb), dialog);
|
G_CALLBACK (start_editing_kb_cb), NULL);
|
||||||
|
|
||||||
column = gtk_tree_view_column_new_with_attributes (_("Action"),
|
column = gtk_tree_view_column_new_with_attributes (_("Action"),
|
||||||
gtk_cell_renderer_text_new (),
|
gtk_cell_renderer_text_new (),
|
||||||
|
@ -1184,6 +1198,7 @@ setup_dialog (GladeXML *dialog)
|
||||||
capplet_set_icon (widget, "gnome-settings-keybindings");
|
capplet_set_icon (widget, "gnome-settings-keybindings");
|
||||||
gtk_widget_show (widget);
|
gtk_widget_show (widget);
|
||||||
|
|
||||||
|
g_signal_connect (G_OBJECT (widget), "key_press_event", G_CALLBACK (maybe_block_accels), NULL);
|
||||||
g_signal_connect (G_OBJECT (widget), "response", G_CALLBACK (cb_dialog_response), dialog);
|
g_signal_connect (G_OBJECT (widget), "response", G_CALLBACK (cb_dialog_response), dialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue