2002-03-17 21:27:09 +00:00
|
|
|
#include <config.h>
|
|
|
|
#include <libintl.h>
|
|
|
|
#include <gtk/gtk.h>
|
|
|
|
#include <gdk/gdkx.h>
|
|
|
|
#include <gdk/gdkkeysyms.h>
|
|
|
|
#include "eggcellrendererkeys.h"
|
2002-08-13 18:14:39 +00:00
|
|
|
#include "eggaccelerators.h"
|
2002-03-17 21:27:09 +00:00
|
|
|
|
Update to latest eggcellrendererkeys.
2002-05-06 Anders Carlsson <andersca@gnu.org>
* eggcellrendererkeys.c: (grab_key_callback), (ungrab_stuff),
(pointless_eventbox_start_editing),
(egg_cell_renderer_keys_start_editing):
* eggcellrendererkeys.h:
Update to latest eggcellrendererkeys.
* gnome-keybinding-properties.c: (get_wm_name),
(is_metacity_running), (update_wm_window),
(wm_window_event_filter), (initialize_wm_handling),
(binding_from_string), (accel_set_func), (keybinding_key_changed),
(clear_old_model), (count_rows_foreach), (should_show_key),
(append_keys_to_tree), (reload_key_entries),
(key_entry_controlling_key_changed), (disable_collapsing_cb),
(setup_dialog), (main):
* gnome-keybinding-properties.glade:
Hard-code the list of keybindings. Add Metacity keybindings
and code for handling WM changes.
2002-05-05 23:04:45 +00:00
|
|
|
#ifndef EGG_COMPILATION
|
2002-03-17 21:27:09 +00:00
|
|
|
#ifndef _
|
|
|
|
#define _(x) dgettext (GETTEXT_PACKAGE, x)
|
|
|
|
#define N_(x) x
|
|
|
|
#endif
|
Update to latest eggcellrendererkeys.
2002-05-06 Anders Carlsson <andersca@gnu.org>
* eggcellrendererkeys.c: (grab_key_callback), (ungrab_stuff),
(pointless_eventbox_start_editing),
(egg_cell_renderer_keys_start_editing):
* eggcellrendererkeys.h:
Update to latest eggcellrendererkeys.
* gnome-keybinding-properties.c: (get_wm_name),
(is_metacity_running), (update_wm_window),
(wm_window_event_filter), (initialize_wm_handling),
(binding_from_string), (accel_set_func), (keybinding_key_changed),
(clear_old_model), (count_rows_foreach), (should_show_key),
(append_keys_to_tree), (reload_key_entries),
(key_entry_controlling_key_changed), (disable_collapsing_cb),
(setup_dialog), (main):
* gnome-keybinding-properties.glade:
Hard-code the list of keybindings. Add Metacity keybindings
and code for handling WM changes.
2002-05-05 23:04:45 +00:00
|
|
|
#else
|
|
|
|
#define _(x) x
|
|
|
|
#define N_(x) x
|
|
|
|
#endif
|
2002-03-17 21:27:09 +00:00
|
|
|
|
|
|
|
#define EGG_CELL_RENDERER_TEXT_PATH "egg-cell-renderer-text"
|
|
|
|
|
2008-08-23 12:19:36 +00:00
|
|
|
#define TOOLTIP_TEXT _("New shortcut...")
|
2004-03-31 22:29:29 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
static void egg_cell_renderer_keys_finalize (GObject *object);
|
|
|
|
static void egg_cell_renderer_keys_init (EggCellRendererKeys *cell_keys);
|
|
|
|
static void egg_cell_renderer_keys_class_init (EggCellRendererKeysClass *cell_keys_class);
|
|
|
|
static GtkCellEditable *egg_cell_renderer_keys_start_editing (GtkCellRenderer *cell,
|
|
|
|
GdkEvent *event,
|
|
|
|
GtkWidget *widget,
|
|
|
|
const gchar *path,
|
2010-10-22 15:13:04 +01:00
|
|
|
const GdkRectangle *background_area,
|
|
|
|
const GdkRectangle *cell_area,
|
2002-03-17 21:27:09 +00:00
|
|
|
GtkCellRendererState flags);
|
|
|
|
|
|
|
|
|
2002-03-18 04:28:47 +00:00
|
|
|
static void egg_cell_renderer_keys_get_property (GObject *object,
|
|
|
|
guint param_id,
|
|
|
|
GValue *value,
|
|
|
|
GParamSpec *pspec);
|
|
|
|
static void egg_cell_renderer_keys_set_property (GObject *object,
|
|
|
|
guint param_id,
|
|
|
|
const GValue *value,
|
|
|
|
GParamSpec *pspec);
|
|
|
|
static void egg_cell_renderer_keys_get_size (GtkCellRenderer *cell,
|
|
|
|
GtkWidget *widget,
|
2010-10-22 15:13:04 +01:00
|
|
|
const GdkRectangle *cell_area,
|
2002-03-18 04:28:47 +00:00
|
|
|
gint *x_offset,
|
|
|
|
gint *y_offset,
|
|
|
|
gint *width,
|
|
|
|
gint *height);
|
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
|
|
|
|
enum {
|
|
|
|
PROP_0,
|
|
|
|
|
|
|
|
PROP_ACCEL_KEY,
|
2002-08-23 05:03:16 +00:00
|
|
|
PROP_ACCEL_MASK,
|
2003-11-18 17:23:06 +00:00
|
|
|
PROP_KEYCODE,
|
2002-08-23 05:03:16 +00:00
|
|
|
PROP_ACCEL_MODE
|
2002-03-17 21:27:09 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
static GtkCellRendererTextClass *parent_class = NULL;
|
|
|
|
|
|
|
|
GType
|
|
|
|
egg_cell_renderer_keys_get_type (void)
|
|
|
|
{
|
|
|
|
static GType cell_keys_type = 0;
|
|
|
|
|
|
|
|
if (!cell_keys_type)
|
|
|
|
{
|
|
|
|
static const GTypeInfo cell_keys_info =
|
|
|
|
{
|
|
|
|
sizeof (EggCellRendererKeysClass),
|
|
|
|
NULL, /* base_init */
|
|
|
|
NULL, /* base_finalize */
|
|
|
|
(GClassInitFunc)egg_cell_renderer_keys_class_init,
|
|
|
|
NULL, /* class_finalize */
|
|
|
|
NULL, /* class_data */
|
|
|
|
sizeof (EggCellRendererKeys),
|
|
|
|
0, /* n_preallocs */
|
2010-09-20 18:19:19 +01:00
|
|
|
(GInstanceInitFunc) egg_cell_renderer_keys_init,
|
|
|
|
NULL, /* value_table */
|
2002-03-17 21:27:09 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
cell_keys_type = g_type_register_static (GTK_TYPE_CELL_RENDERER_TEXT, "EggCellRendererKeys", &cell_keys_info, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
return cell_keys_type;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
egg_cell_renderer_keys_init (EggCellRendererKeys *cell_keys)
|
|
|
|
{
|
2002-08-23 05:03:16 +00:00
|
|
|
cell_keys->accel_mode = EGG_CELL_RENDERER_KEYS_MODE_GTK;
|
2002-03-17 21:27:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* FIXME setup stuff to generate this */
|
2002-05-21 23:23:47 +00:00
|
|
|
/* VOID:STRING,UINT,FLAGS,UINT */
|
2002-03-17 21:27:09 +00:00
|
|
|
static void
|
2002-05-21 23:23:47 +00:00
|
|
|
marshal_VOID__STRING_UINT_FLAGS_UINT (GClosure *closure,
|
|
|
|
GValue *return_value,
|
|
|
|
guint n_param_values,
|
|
|
|
const GValue *param_values,
|
|
|
|
gpointer invocation_hint,
|
|
|
|
gpointer marshal_data)
|
2002-03-17 21:27:09 +00:00
|
|
|
{
|
2002-05-21 23:23:47 +00:00
|
|
|
typedef void (*GMarshalFunc_VOID__STRING_UINT_FLAGS_UINT) (gpointer data1,
|
|
|
|
const char *arg_1,
|
|
|
|
guint arg_2,
|
|
|
|
int arg_3,
|
|
|
|
guint arg_4,
|
|
|
|
gpointer data2);
|
|
|
|
register GMarshalFunc_VOID__STRING_UINT_FLAGS_UINT callback;
|
2002-03-17 21:27:09 +00:00
|
|
|
register GCClosure *cc = (GCClosure*) closure;
|
|
|
|
register gpointer data1, data2;
|
|
|
|
|
2002-05-21 23:23:47 +00:00
|
|
|
g_return_if_fail (n_param_values == 5);
|
2002-03-17 21:27:09 +00:00
|
|
|
|
|
|
|
if (G_CCLOSURE_SWAP_DATA (closure))
|
|
|
|
{
|
|
|
|
data1 = closure->data;
|
|
|
|
data2 = g_value_peek_pointer (param_values + 0);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
data1 = g_value_peek_pointer (param_values + 0);
|
|
|
|
data2 = closure->data;
|
|
|
|
}
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-05-21 23:23:47 +00:00
|
|
|
callback = (GMarshalFunc_VOID__STRING_UINT_FLAGS_UINT) (marshal_data ? marshal_data : cc->callback);
|
2002-03-17 21:27:09 +00:00
|
|
|
|
|
|
|
callback (data1,
|
|
|
|
g_value_get_string (param_values + 1),
|
|
|
|
g_value_get_uint (param_values + 2),
|
|
|
|
g_value_get_flags (param_values + 3),
|
2002-05-21 23:23:47 +00:00
|
|
|
g_value_get_uint (param_values + 4),
|
2002-03-17 21:27:09 +00:00
|
|
|
data2);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
egg_cell_renderer_keys_class_init (EggCellRendererKeysClass *cell_keys_class)
|
|
|
|
{
|
|
|
|
GObjectClass *object_class;
|
2002-03-18 04:28:47 +00:00
|
|
|
GtkCellRendererClass *cell_renderer_class;
|
2002-03-17 21:27:09 +00:00
|
|
|
|
2002-03-18 04:28:47 +00:00
|
|
|
object_class = G_OBJECT_CLASS (cell_keys_class);
|
|
|
|
cell_renderer_class = GTK_CELL_RENDERER_CLASS (cell_keys_class);
|
2002-03-17 21:27:09 +00:00
|
|
|
parent_class = g_type_class_peek_parent (object_class);
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
GTK_CELL_RENDERER_CLASS (cell_keys_class)->start_editing = egg_cell_renderer_keys_start_editing;
|
|
|
|
|
|
|
|
object_class->set_property = egg_cell_renderer_keys_set_property;
|
|
|
|
object_class->get_property = egg_cell_renderer_keys_get_property;
|
2002-03-18 04:28:47 +00:00
|
|
|
cell_renderer_class->get_size = egg_cell_renderer_keys_get_size;
|
2002-03-17 21:27:09 +00:00
|
|
|
|
|
|
|
object_class->finalize = egg_cell_renderer_keys_finalize;
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
/* FIXME if this gets moved to a real library, rename the properties
|
|
|
|
* to match whatever the GTK convention is
|
|
|
|
*/
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
g_object_class_install_property (object_class,
|
|
|
|
PROP_ACCEL_KEY,
|
|
|
|
g_param_spec_uint ("accel_key",
|
|
|
|
_("Accelerator key"),
|
|
|
|
_("Accelerator key"),
|
|
|
|
0,
|
|
|
|
G_MAXINT,
|
|
|
|
0,
|
|
|
|
G_PARAM_READABLE | G_PARAM_WRITABLE));
|
|
|
|
|
2002-08-23 05:03:16 +00:00
|
|
|
g_object_class_install_property (object_class,
|
|
|
|
PROP_ACCEL_MASK,
|
|
|
|
g_param_spec_flags ("accel_mask",
|
|
|
|
_("Accelerator modifiers"),
|
|
|
|
_("Accelerator modifiers"),
|
|
|
|
GDK_TYPE_MODIFIER_TYPE,
|
|
|
|
0,
|
|
|
|
G_PARAM_READABLE | G_PARAM_WRITABLE));
|
2003-11-18 17:23:06 +00:00
|
|
|
|
|
|
|
g_object_class_install_property (object_class,
|
|
|
|
PROP_KEYCODE,
|
|
|
|
g_param_spec_uint ("keycode",
|
|
|
|
_("Accelerator keycode"),
|
|
|
|
_("Accelerator keycode"),
|
|
|
|
0,
|
|
|
|
G_MAXINT,
|
|
|
|
0,
|
|
|
|
G_PARAM_READABLE | G_PARAM_WRITABLE));
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-08-23 05:03:16 +00:00
|
|
|
/* FIXME: Register the enum when moving to GTK+ */
|
|
|
|
g_object_class_install_property (object_class,
|
|
|
|
PROP_ACCEL_MODE,
|
|
|
|
g_param_spec_int ("accel_mode",
|
|
|
|
_("Accel Mode"),
|
|
|
|
_("The type of accelerator."),
|
|
|
|
0,
|
|
|
|
2,
|
|
|
|
0,
|
|
|
|
G_PARAM_READABLE | G_PARAM_WRITABLE));
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2003-11-18 17:23:06 +00:00
|
|
|
g_signal_new ("accel_edited",
|
2002-03-17 21:27:09 +00:00
|
|
|
EGG_TYPE_CELL_RENDERER_KEYS,
|
|
|
|
G_SIGNAL_RUN_LAST,
|
2003-11-18 17:23:06 +00:00
|
|
|
G_STRUCT_OFFSET (EggCellRendererKeysClass, accel_edited),
|
2002-03-17 21:27:09 +00:00
|
|
|
NULL, NULL,
|
2002-05-21 23:23:47 +00:00
|
|
|
marshal_VOID__STRING_UINT_FLAGS_UINT,
|
|
|
|
G_TYPE_NONE, 4,
|
2002-03-17 21:27:09 +00:00
|
|
|
G_TYPE_STRING,
|
|
|
|
G_TYPE_UINT,
|
2002-05-21 23:23:47 +00:00
|
|
|
GDK_TYPE_MODIFIER_TYPE,
|
|
|
|
G_TYPE_UINT);
|
2003-11-18 17:23:06 +00:00
|
|
|
|
|
|
|
g_signal_new ("accel_cleared",
|
|
|
|
EGG_TYPE_CELL_RENDERER_KEYS,
|
|
|
|
G_SIGNAL_RUN_LAST,
|
|
|
|
G_STRUCT_OFFSET (EggCellRendererKeysClass, accel_cleared),
|
|
|
|
NULL, NULL,
|
2008-05-29 22:03:22 +00:00
|
|
|
g_cclosure_marshal_VOID__STRING,
|
2003-11-18 17:23:06 +00:00
|
|
|
G_TYPE_NONE, 1,
|
|
|
|
G_TYPE_STRING);
|
2002-03-17 21:27:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
GtkCellRenderer *
|
|
|
|
egg_cell_renderer_keys_new (void)
|
|
|
|
{
|
|
|
|
return GTK_CELL_RENDERER (g_object_new (EGG_TYPE_CELL_RENDERER_KEYS, NULL));
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
egg_cell_renderer_keys_finalize (GObject *object)
|
|
|
|
{
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
(* G_OBJECT_CLASS (parent_class)->finalize) (object);
|
|
|
|
}
|
|
|
|
|
|
|
|
static gchar *
|
2002-08-23 05:03:16 +00:00
|
|
|
convert_keysym_state_to_string (guint keysym,
|
2003-11-18 17:23:06 +00:00
|
|
|
guint keycode,
|
2002-08-23 05:03:16 +00:00
|
|
|
EggVirtualModifierType mask)
|
2002-03-17 21:27:09 +00:00
|
|
|
{
|
2003-11-18 17:23:06 +00:00
|
|
|
if (keysym == 0 && keycode == 0)
|
2002-03-17 21:27:09 +00:00
|
|
|
return g_strdup (_("Disabled"));
|
|
|
|
else
|
2007-02-04 13:46:41 +00:00
|
|
|
return egg_virtual_accelerator_label (keysym, keycode, mask);
|
2002-03-17 21:27:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
egg_cell_renderer_keys_get_property (GObject *object,
|
|
|
|
guint param_id,
|
|
|
|
GValue *value,
|
|
|
|
GParamSpec *pspec)
|
|
|
|
{
|
|
|
|
EggCellRendererKeys *keys;
|
|
|
|
|
|
|
|
g_return_if_fail (EGG_IS_CELL_RENDERER_KEYS (object));
|
|
|
|
|
|
|
|
keys = EGG_CELL_RENDERER_KEYS (object);
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
switch (param_id)
|
|
|
|
{
|
|
|
|
case PROP_ACCEL_KEY:
|
|
|
|
g_value_set_uint (value, keys->accel_key);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PROP_ACCEL_MASK:
|
|
|
|
g_value_set_flags (value, keys->accel_mask);
|
|
|
|
break;
|
|
|
|
|
2002-08-23 05:03:16 +00:00
|
|
|
case PROP_ACCEL_MODE:
|
|
|
|
g_value_set_int (value, keys->accel_mode);
|
|
|
|
break;
|
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
default:
|
|
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
egg_cell_renderer_keys_set_property (GObject *object,
|
|
|
|
guint param_id,
|
|
|
|
const GValue *value,
|
|
|
|
GParamSpec *pspec)
|
|
|
|
{
|
|
|
|
EggCellRendererKeys *keys;
|
|
|
|
|
|
|
|
g_return_if_fail (EGG_IS_CELL_RENDERER_KEYS (object));
|
|
|
|
|
|
|
|
keys = EGG_CELL_RENDERER_KEYS (object);
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
switch (param_id)
|
|
|
|
{
|
|
|
|
case PROP_ACCEL_KEY:
|
|
|
|
egg_cell_renderer_keys_set_accelerator (keys,
|
|
|
|
g_value_get_uint (value),
|
2003-11-18 17:23:06 +00:00
|
|
|
keys->keycode,
|
2002-03-17 21:27:09 +00:00
|
|
|
keys->accel_mask);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PROP_ACCEL_MASK:
|
|
|
|
egg_cell_renderer_keys_set_accelerator (keys,
|
|
|
|
keys->accel_key,
|
2003-11-18 17:23:06 +00:00
|
|
|
keys->keycode,
|
2002-03-17 21:27:09 +00:00
|
|
|
g_value_get_flags (value));
|
|
|
|
break;
|
2003-11-18 17:23:06 +00:00
|
|
|
case PROP_KEYCODE:
|
|
|
|
egg_cell_renderer_keys_set_accelerator (keys,
|
|
|
|
keys->accel_key,
|
|
|
|
g_value_get_uint (value),
|
|
|
|
keys->accel_mask);
|
|
|
|
break;
|
2002-03-17 21:27:09 +00:00
|
|
|
|
2002-08-23 05:03:16 +00:00
|
|
|
case PROP_ACCEL_MODE:
|
|
|
|
egg_cell_renderer_keys_set_accel_mode (keys, g_value_get_int (value));
|
|
|
|
break;
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
default:
|
|
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-08-23 12:19:36 +00:00
|
|
|
static gboolean
|
2002-03-17 21:27:09 +00:00
|
|
|
is_modifier (guint keycode)
|
|
|
|
{
|
|
|
|
gint i;
|
|
|
|
gint map_size;
|
|
|
|
XModifierKeymap *mod_keymap;
|
|
|
|
gboolean retval = FALSE;
|
|
|
|
|
2010-09-10 19:03:09 +03:00
|
|
|
mod_keymap = XGetModifierMapping (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
|
2002-03-17 21:27:09 +00:00
|
|
|
|
|
|
|
map_size = 8 * mod_keymap->max_keypermod;
|
|
|
|
i = 0;
|
|
|
|
while (i < map_size)
|
|
|
|
{
|
|
|
|
if (keycode == mod_keymap->modifiermap[i])
|
|
|
|
{
|
|
|
|
retval = TRUE;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
++i;
|
|
|
|
}
|
|
|
|
|
|
|
|
XFreeModifiermap (mod_keymap);
|
|
|
|
|
|
|
|
return retval;
|
|
|
|
}
|
|
|
|
|
2004-03-31 21:30:23 +00:00
|
|
|
static void
|
2002-03-18 04:28:47 +00:00
|
|
|
egg_cell_renderer_keys_get_size (GtkCellRenderer *cell,
|
|
|
|
GtkWidget *widget,
|
2010-10-22 15:13:04 +01:00
|
|
|
const GdkRectangle *cell_area,
|
2002-03-18 04:28:47 +00:00
|
|
|
gint *x_offset,
|
|
|
|
gint *y_offset,
|
|
|
|
gint *width,
|
|
|
|
gint *height)
|
2004-03-31 21:30:23 +00:00
|
|
|
|
2002-03-18 04:28:47 +00:00
|
|
|
{
|
|
|
|
EggCellRendererKeys *keys = (EggCellRendererKeys *) cell;
|
|
|
|
GtkRequisition requisition;
|
|
|
|
|
|
|
|
if (keys->sizing_label == NULL)
|
2004-03-31 22:29:29 +00:00
|
|
|
keys->sizing_label = gtk_label_new (TOOLTIP_TEXT);
|
2002-03-18 04:28:47 +00:00
|
|
|
|
|
|
|
gtk_widget_size_request (keys->sizing_label, &requisition);
|
|
|
|
(* GTK_CELL_RENDERER_CLASS (parent_class)->get_size) (cell, widget, cell_area, x_offset, y_offset, width, height);
|
|
|
|
/* FIXME: need to take the cell_area et al. into account */
|
|
|
|
if (width)
|
|
|
|
*width = MAX (*width, requisition.width);
|
|
|
|
if (height)
|
|
|
|
*height = MAX (*height, requisition.height);
|
|
|
|
}
|
|
|
|
|
2002-08-23 05:03:16 +00:00
|
|
|
/* FIXME: Currently we don't differentiate between a 'bogus' key (like tab in
|
|
|
|
* GTK mode) and a removed key.
|
|
|
|
*/
|
2008-08-23 12:19:36 +00:00
|
|
|
|
Update to latest eggcellrendererkeys.
2002-05-06 Anders Carlsson <andersca@gnu.org>
* eggcellrendererkeys.c: (grab_key_callback), (ungrab_stuff),
(pointless_eventbox_start_editing),
(egg_cell_renderer_keys_start_editing):
* eggcellrendererkeys.h:
Update to latest eggcellrendererkeys.
* gnome-keybinding-properties.c: (get_wm_name),
(is_metacity_running), (update_wm_window),
(wm_window_event_filter), (initialize_wm_handling),
(binding_from_string), (accel_set_func), (keybinding_key_changed),
(clear_old_model), (count_rows_foreach), (should_show_key),
(append_keys_to_tree), (reload_key_entries),
(key_entry_controlling_key_changed), (disable_collapsing_cb),
(setup_dialog), (main):
* gnome-keybinding-properties.glade:
Hard-code the list of keybindings. Add Metacity keybindings
and code for handling WM changes.
2002-05-05 23:04:45 +00:00
|
|
|
static gboolean
|
|
|
|
grab_key_callback (GtkWidget *widget,
|
|
|
|
GdkEventKey *event,
|
|
|
|
void *data)
|
2002-03-17 21:27:09 +00:00
|
|
|
{
|
2003-01-13 20:21:28 +00:00
|
|
|
GdkModifierType accel_mods = 0;
|
Update to latest eggcellrendererkeys.
2002-05-06 Anders Carlsson <andersca@gnu.org>
* eggcellrendererkeys.c: (grab_key_callback), (ungrab_stuff),
(pointless_eventbox_start_editing),
(egg_cell_renderer_keys_start_editing):
* eggcellrendererkeys.h:
Update to latest eggcellrendererkeys.
* gnome-keybinding-properties.c: (get_wm_name),
(is_metacity_running), (update_wm_window),
(wm_window_event_filter), (initialize_wm_handling),
(binding_from_string), (accel_set_func), (keybinding_key_changed),
(clear_old_model), (count_rows_foreach), (should_show_key),
(append_keys_to_tree), (reload_key_entries),
(key_entry_controlling_key_changed), (disable_collapsing_cb),
(setup_dialog), (main):
* gnome-keybinding-properties.glade:
Hard-code the list of keybindings. Add Metacity keybindings
and code for handling WM changes.
2002-05-05 23:04:45 +00:00
|
|
|
guint accel_keyval;
|
2002-03-17 21:27:09 +00:00
|
|
|
EggCellRendererKeys *keys;
|
|
|
|
char *path;
|
|
|
|
gboolean edited;
|
2003-11-18 17:23:06 +00:00
|
|
|
gboolean cleared;
|
2008-08-23 12:19:36 +00:00
|
|
|
GdkModifierType consumed_modifiers;
|
2002-08-13 18:14:39 +00:00
|
|
|
guint upper;
|
|
|
|
GdkModifierType ignored_modifiers;
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
keys = EGG_CELL_RENDERER_KEYS (data);
|
|
|
|
|
Update to latest eggcellrendererkeys.
2002-05-06 Anders Carlsson <andersca@gnu.org>
* eggcellrendererkeys.c: (grab_key_callback), (ungrab_stuff),
(pointless_eventbox_start_editing),
(egg_cell_renderer_keys_start_editing):
* eggcellrendererkeys.h:
Update to latest eggcellrendererkeys.
* gnome-keybinding-properties.c: (get_wm_name),
(is_metacity_running), (update_wm_window),
(wm_window_event_filter), (initialize_wm_handling),
(binding_from_string), (accel_set_func), (keybinding_key_changed),
(clear_old_model), (count_rows_foreach), (should_show_key),
(append_keys_to_tree), (reload_key_entries),
(key_entry_controlling_key_changed), (disable_collapsing_cb),
(setup_dialog), (main):
* gnome-keybinding-properties.glade:
Hard-code the list of keybindings. Add Metacity keybindings
and code for handling WM changes.
2002-05-05 23:04:45 +00:00
|
|
|
if (is_modifier (event->hardware_keycode))
|
2002-05-16 23:48:51 +00:00
|
|
|
return TRUE;
|
2002-03-17 21:27:09 +00:00
|
|
|
|
|
|
|
edited = FALSE;
|
2003-11-18 17:23:06 +00:00
|
|
|
cleared = FALSE;
|
Update to latest eggcellrendererkeys.
2002-05-06 Anders Carlsson <andersca@gnu.org>
* eggcellrendererkeys.c: (grab_key_callback), (ungrab_stuff),
(pointless_eventbox_start_editing),
(egg_cell_renderer_keys_start_editing):
* eggcellrendererkeys.h:
Update to latest eggcellrendererkeys.
* gnome-keybinding-properties.c: (get_wm_name),
(is_metacity_running), (update_wm_window),
(wm_window_event_filter), (initialize_wm_handling),
(binding_from_string), (accel_set_func), (keybinding_key_changed),
(clear_old_model), (count_rows_foreach), (should_show_key),
(append_keys_to_tree), (reload_key_entries),
(key_entry_controlling_key_changed), (disable_collapsing_cb),
(setup_dialog), (main):
* gnome-keybinding-properties.glade:
Hard-code the list of keybindings. Add Metacity keybindings
and code for handling WM changes.
2002-05-05 23:04:45 +00:00
|
|
|
|
|
|
|
consumed_modifiers = 0;
|
|
|
|
gdk_keymap_translate_keyboard_state (gdk_keymap_get_default (),
|
|
|
|
event->hardware_keycode,
|
|
|
|
event->state,
|
|
|
|
event->group,
|
|
|
|
NULL, NULL, NULL, &consumed_modifiers);
|
|
|
|
|
2002-08-13 18:14:39 +00:00
|
|
|
upper = event->keyval;
|
|
|
|
accel_keyval = gdk_keyval_to_lower (upper);
|
2010-09-10 19:09:48 +03:00
|
|
|
if (accel_keyval == GDK_KEY_ISO_Left_Tab)
|
|
|
|
accel_keyval = GDK_KEY_Tab;
|
2002-08-13 18:14:39 +00:00
|
|
|
|
2002-08-23 05:03:16 +00:00
|
|
|
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-08-13 18:14:39 +00:00
|
|
|
/* Put shift back if it changed the case of the key, not otherwise.
|
|
|
|
*/
|
|
|
|
if (upper != accel_keyval &&
|
|
|
|
(consumed_modifiers & GDK_SHIFT_MASK))
|
|
|
|
{
|
|
|
|
consumed_modifiers &= ~(GDK_SHIFT_MASK);
|
|
|
|
}
|
|
|
|
|
|
|
|
egg_keymap_resolve_virtual_modifiers (gdk_keymap_get_default (),
|
|
|
|
EGG_VIRTUAL_NUM_LOCK_MASK |
|
2008-03-31 12:29:49 +00:00
|
|
|
EGG_VIRTUAL_SCROLL_LOCK_MASK |
|
|
|
|
EGG_VIRTUAL_LOCK_MASK,
|
2002-08-13 18:14:39 +00:00
|
|
|
&ignored_modifiers);
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2004-04-15 18:32:22 +00:00
|
|
|
/* http://bugzilla.gnome.org/show_bug.cgi?id=139605
|
|
|
|
* mouse keys should effect keybindings */
|
|
|
|
ignored_modifiers |= GDK_BUTTON1_MASK |
|
|
|
|
GDK_BUTTON2_MASK |
|
|
|
|
GDK_BUTTON3_MASK |
|
|
|
|
GDK_BUTTON4_MASK |
|
|
|
|
GDK_BUTTON5_MASK;
|
|
|
|
|
2002-08-13 18:14:39 +00:00
|
|
|
/* filter consumed/ignored modifiers */
|
2002-08-23 05:03:16 +00:00
|
|
|
|
|
|
|
if (keys->accel_mode == EGG_CELL_RENDERER_KEYS_MODE_GTK)
|
2004-11-30 13:08:12 +00:00
|
|
|
accel_mods = event->state & GDK_MODIFIER_MASK & ~(consumed_modifiers | ignored_modifiers);
|
2002-08-23 05:03:16 +00:00
|
|
|
else if (keys->accel_mode == EGG_CELL_RENDERER_KEYS_MODE_X)
|
2004-11-30 13:08:12 +00:00
|
|
|
accel_mods = event->state & GDK_MODIFIER_MASK & ~(ignored_modifiers);
|
2002-08-23 05:03:16 +00:00
|
|
|
else
|
|
|
|
g_assert_not_reached ();
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2010-09-10 19:09:48 +03:00
|
|
|
if (accel_mods == 0 && accel_keyval == GDK_KEY_Escape)
|
2002-03-17 21:27:09 +00:00
|
|
|
goto out; /* cancel */
|
|
|
|
|
|
|
|
/* clear the accelerator on Backspace */
|
2010-09-10 19:09:48 +03:00
|
|
|
if (accel_mods == 0 && accel_keyval == GDK_KEY_BackSpace)
|
2003-11-18 17:23:06 +00:00
|
|
|
{
|
|
|
|
cleared = TRUE;
|
|
|
|
goto out;
|
|
|
|
}
|
2002-03-17 21:27:09 +00:00
|
|
|
|
2002-08-23 05:03:16 +00:00
|
|
|
if (keys->accel_mode == EGG_CELL_RENDERER_KEYS_MODE_GTK)
|
Update to latest eggcellrendererkeys.
2002-05-06 Anders Carlsson <andersca@gnu.org>
* eggcellrendererkeys.c: (grab_key_callback), (ungrab_stuff),
(pointless_eventbox_start_editing),
(egg_cell_renderer_keys_start_editing):
* eggcellrendererkeys.h:
Update to latest eggcellrendererkeys.
* gnome-keybinding-properties.c: (get_wm_name),
(is_metacity_running), (update_wm_window),
(wm_window_event_filter), (initialize_wm_handling),
(binding_from_string), (accel_set_func), (keybinding_key_changed),
(clear_old_model), (count_rows_foreach), (should_show_key),
(append_keys_to_tree), (reload_key_entries),
(key_entry_controlling_key_changed), (disable_collapsing_cb),
(setup_dialog), (main):
* gnome-keybinding-properties.glade:
Hard-code the list of keybindings. Add Metacity keybindings
and code for handling WM changes.
2002-05-05 23:04:45 +00:00
|
|
|
{
|
2002-08-23 05:03:16 +00:00
|
|
|
if (!gtk_accelerator_valid (accel_keyval, accel_mods))
|
|
|
|
{
|
|
|
|
accel_keyval = 0;
|
|
|
|
accel_mods = 0;
|
|
|
|
}
|
Update to latest eggcellrendererkeys.
2002-05-06 Anders Carlsson <andersca@gnu.org>
* eggcellrendererkeys.c: (grab_key_callback), (ungrab_stuff),
(pointless_eventbox_start_editing),
(egg_cell_renderer_keys_start_editing):
* eggcellrendererkeys.h:
Update to latest eggcellrendererkeys.
* gnome-keybinding-properties.c: (get_wm_name),
(is_metacity_running), (update_wm_window),
(wm_window_event_filter), (initialize_wm_handling),
(binding_from_string), (accel_set_func), (keybinding_key_changed),
(clear_old_model), (count_rows_foreach), (should_show_key),
(append_keys_to_tree), (reload_key_entries),
(key_entry_controlling_key_changed), (disable_collapsing_cb),
(setup_dialog), (main):
* gnome-keybinding-properties.glade:
Hard-code the list of keybindings. Add Metacity keybindings
and code for handling WM changes.
2002-05-05 23:04:45 +00:00
|
|
|
}
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
edited = TRUE;
|
|
|
|
out:
|
Update to latest eggcellrendererkeys.
2002-05-06 Anders Carlsson <andersca@gnu.org>
* eggcellrendererkeys.c: (grab_key_callback), (ungrab_stuff),
(pointless_eventbox_start_editing),
(egg_cell_renderer_keys_start_editing):
* eggcellrendererkeys.h:
Update to latest eggcellrendererkeys.
* gnome-keybinding-properties.c: (get_wm_name),
(is_metacity_running), (update_wm_window),
(wm_window_event_filter), (initialize_wm_handling),
(binding_from_string), (accel_set_func), (keybinding_key_changed),
(clear_old_model), (count_rows_foreach), (should_show_key),
(append_keys_to_tree), (reload_key_entries),
(key_entry_controlling_key_changed), (disable_collapsing_cb),
(setup_dialog), (main):
* gnome-keybinding-properties.glade:
Hard-code the list of keybindings. Add Metacity keybindings
and code for handling WM changes.
2002-05-05 23:04:45 +00:00
|
|
|
gdk_keyboard_ungrab (event->time);
|
|
|
|
gdk_pointer_ungrab (event->time);
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2003-11-18 17:23:06 +00:00
|
|
|
path = g_strdup (g_object_get_data (G_OBJECT (keys->edit_widget), EGG_CELL_RENDERER_TEXT_PATH));
|
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (keys->edit_widget));
|
|
|
|
gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE (keys->edit_widget));
|
|
|
|
keys->edit_widget = NULL;
|
Update to latest eggcellrendererkeys.
2002-05-06 Anders Carlsson <andersca@gnu.org>
* eggcellrendererkeys.c: (grab_key_callback), (ungrab_stuff),
(pointless_eventbox_start_editing),
(egg_cell_renderer_keys_start_editing):
* eggcellrendererkeys.h:
Update to latest eggcellrendererkeys.
* gnome-keybinding-properties.c: (get_wm_name),
(is_metacity_running), (update_wm_window),
(wm_window_event_filter), (initialize_wm_handling),
(binding_from_string), (accel_set_func), (keybinding_key_changed),
(clear_old_model), (count_rows_foreach), (should_show_key),
(append_keys_to_tree), (reload_key_entries),
(key_entry_controlling_key_changed), (disable_collapsing_cb),
(setup_dialog), (main):
* gnome-keybinding-properties.glade:
Hard-code the list of keybindings. Add Metacity keybindings
and code for handling WM changes.
2002-05-05 23:04:45 +00:00
|
|
|
keys->grab_widget = NULL;
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
if (edited)
|
2003-11-18 17:23:06 +00:00
|
|
|
{
|
|
|
|
g_signal_emit_by_name (G_OBJECT (keys), "accel_edited", path,
|
|
|
|
accel_keyval, accel_mods, event->hardware_keycode);
|
|
|
|
}
|
|
|
|
else if (cleared)
|
|
|
|
{
|
|
|
|
g_signal_emit_by_name (G_OBJECT (keys), "accel_cleared", path);
|
|
|
|
}
|
2002-03-17 21:27:09 +00:00
|
|
|
|
|
|
|
g_free (path);
|
2002-05-16 23:48:51 +00:00
|
|
|
return TRUE;
|
2002-03-17 21:27:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
ungrab_stuff (GtkWidget *widget, gpointer data)
|
|
|
|
{
|
|
|
|
EggCellRendererKeys *keys = EGG_CELL_RENDERER_KEYS (data);
|
|
|
|
|
|
|
|
gdk_keyboard_ungrab (GDK_CURRENT_TIME);
|
|
|
|
gdk_pointer_ungrab (GDK_CURRENT_TIME);
|
|
|
|
|
Update to latest eggcellrendererkeys.
2002-05-06 Anders Carlsson <andersca@gnu.org>
* eggcellrendererkeys.c: (grab_key_callback), (ungrab_stuff),
(pointless_eventbox_start_editing),
(egg_cell_renderer_keys_start_editing):
* eggcellrendererkeys.h:
Update to latest eggcellrendererkeys.
* gnome-keybinding-properties.c: (get_wm_name),
(is_metacity_running), (update_wm_window),
(wm_window_event_filter), (initialize_wm_handling),
(binding_from_string), (accel_set_func), (keybinding_key_changed),
(clear_old_model), (count_rows_foreach), (should_show_key),
(append_keys_to_tree), (reload_key_entries),
(key_entry_controlling_key_changed), (disable_collapsing_cb),
(setup_dialog), (main):
* gnome-keybinding-properties.glade:
Hard-code the list of keybindings. Add Metacity keybindings
and code for handling WM changes.
2002-05-05 23:04:45 +00:00
|
|
|
g_signal_handlers_disconnect_by_func (G_OBJECT (keys->grab_widget),
|
|
|
|
G_CALLBACK (grab_key_callback), data);
|
2002-03-17 21:27:09 +00:00
|
|
|
}
|
|
|
|
|
2011-02-24 05:35:46 +00:00
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
GtkEventBox box;
|
|
|
|
gboolean editing_canceled;
|
|
|
|
} PointlessEventBox;
|
|
|
|
|
|
|
|
typedef GtkEventBoxClass PointlessEventBoxClass;
|
|
|
|
static GType pointless_event_box_get_type (void);
|
|
|
|
static void pointless_event_box_cell_editable_init (GtkCellEditableIface *iface);
|
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
static void
|
2011-02-24 05:35:46 +00:00
|
|
|
pointless_event_box_init (PointlessEventBox *box)
|
2002-03-17 21:27:09 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2011-02-24 05:35:46 +00:00
|
|
|
G_DEFINE_TYPE_WITH_CODE (PointlessEventBox, pointless_event_box, GTK_TYPE_EVENT_BOX, { \
|
|
|
|
G_IMPLEMENT_INTERFACE (GTK_TYPE_CELL_EDITABLE, pointless_event_box_cell_editable_init) \
|
|
|
|
})
|
|
|
|
|
|
|
|
enum {
|
|
|
|
PROP_ZERO,
|
|
|
|
PROP_EDITING_CANCELED
|
|
|
|
};
|
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
static void
|
2011-02-24 05:35:46 +00:00
|
|
|
pointless_event_box_set_property (GObject *object,
|
|
|
|
guint prop_id,
|
|
|
|
const GValue *value,
|
|
|
|
GParamSpec *pspec)
|
2002-03-17 21:27:09 +00:00
|
|
|
{
|
2011-02-24 05:35:46 +00:00
|
|
|
PointlessEventBox *box = (PointlessEventBox*)object;
|
|
|
|
|
|
|
|
switch (prop_id)
|
|
|
|
{
|
|
|
|
case PROP_EDITING_CANCELED:
|
|
|
|
box->editing_canceled = g_value_get_boolean (value);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
|
|
break;
|
|
|
|
}
|
2002-03-17 21:27:09 +00:00
|
|
|
}
|
|
|
|
|
2011-02-24 05:35:46 +00:00
|
|
|
static void
|
|
|
|
pointless_event_box_get_property (GObject *object,
|
|
|
|
guint prop_id,
|
|
|
|
GValue *value,
|
|
|
|
GParamSpec *pspec)
|
2002-03-17 21:27:09 +00:00
|
|
|
{
|
2011-02-24 05:35:46 +00:00
|
|
|
PointlessEventBox *box = (PointlessEventBox*)object;
|
2002-03-17 21:27:09 +00:00
|
|
|
|
2011-02-24 05:35:46 +00:00
|
|
|
switch (prop_id)
|
2002-03-17 21:27:09 +00:00
|
|
|
{
|
2011-02-24 05:35:46 +00:00
|
|
|
case PROP_EDITING_CANCELED:
|
|
|
|
g_value_set_boolean (value, box->editing_canceled);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2002-03-17 21:27:09 +00:00
|
|
|
|
2011-02-24 05:35:46 +00:00
|
|
|
static void
|
|
|
|
pointless_event_box_class_init (PointlessEventBoxClass *class)
|
|
|
|
{
|
|
|
|
GObjectClass *gobject_class = G_OBJECT_CLASS (class);
|
2002-03-17 21:27:09 +00:00
|
|
|
|
2011-02-24 05:35:46 +00:00
|
|
|
gobject_class->set_property = pointless_event_box_set_property;
|
|
|
|
gobject_class->get_property = pointless_event_box_get_property;
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2011-02-24 05:35:46 +00:00
|
|
|
g_object_class_override_property (gobject_class,
|
|
|
|
PROP_EDITING_CANCELED,
|
|
|
|
"editing-canceled");
|
|
|
|
}
|
2002-03-17 21:27:09 +00:00
|
|
|
|
2011-02-24 05:35:46 +00:00
|
|
|
static void
|
|
|
|
pointless_event_box_start_editing (GtkCellEditable *cell_editable,
|
|
|
|
GdkEvent *event)
|
|
|
|
{
|
|
|
|
/* do nothing, because we are pointless */
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
pointless_event_box_cell_editable_init (GtkCellEditableIface *iface)
|
|
|
|
{
|
|
|
|
iface->start_editing = pointless_event_box_start_editing;
|
2002-03-17 21:27:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static GtkCellEditable *
|
|
|
|
egg_cell_renderer_keys_start_editing (GtkCellRenderer *cell,
|
|
|
|
GdkEvent *event,
|
|
|
|
GtkWidget *widget,
|
|
|
|
const gchar *path,
|
2010-10-22 15:13:04 +01:00
|
|
|
const GdkRectangle *background_area,
|
|
|
|
const GdkRectangle *cell_area,
|
2002-03-17 21:27:09 +00:00
|
|
|
GtkCellRendererState flags)
|
|
|
|
{
|
|
|
|
GtkCellRendererText *celltext;
|
|
|
|
EggCellRendererKeys *keys;
|
|
|
|
GtkWidget *label;
|
|
|
|
GtkWidget *eventbox;
|
2010-09-20 18:19:19 +01:00
|
|
|
GValue celltext_editable = {0, };
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
celltext = GTK_CELL_RENDERER_TEXT (cell);
|
|
|
|
keys = EGG_CELL_RENDERER_KEYS (cell);
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
/* If the cell isn't editable we return NULL. */
|
2010-04-20 03:14:48 +04:00
|
|
|
g_value_init (&celltext_editable, G_TYPE_BOOLEAN);
|
|
|
|
g_object_get_property (G_OBJECT (celltext), "editable", &celltext_editable);
|
|
|
|
if (g_value_get_boolean (&celltext_editable) == FALSE)
|
2002-03-17 21:27:09 +00:00
|
|
|
return NULL;
|
2010-04-20 03:14:48 +04:00
|
|
|
g_return_val_if_fail (gtk_widget_get_window (widget) != NULL, NULL);
|
2002-03-17 21:27:09 +00:00
|
|
|
|
2010-04-20 03:14:48 +04:00
|
|
|
if (gdk_keyboard_grab (gtk_widget_get_window (widget), FALSE,
|
2002-03-17 21:27:09 +00:00
|
|
|
gdk_event_get_time (event)) != GDK_GRAB_SUCCESS)
|
|
|
|
return NULL;
|
|
|
|
|
2010-04-20 03:14:48 +04:00
|
|
|
if (gdk_pointer_grab (gtk_widget_get_window (widget), FALSE,
|
2002-03-17 21:27:09 +00:00
|
|
|
GDK_BUTTON_PRESS_MASK,
|
2005-02-08 22:42:10 +00:00
|
|
|
NULL, NULL,
|
2002-03-17 21:27:09 +00:00
|
|
|
gdk_event_get_time (event)) != GDK_GRAB_SUCCESS)
|
|
|
|
{
|
|
|
|
gdk_keyboard_ungrab (gdk_event_get_time (event));
|
|
|
|
return NULL;
|
|
|
|
}
|
2008-08-23 12:19:36 +00:00
|
|
|
|
Update to latest eggcellrendererkeys.
2002-05-06 Anders Carlsson <andersca@gnu.org>
* eggcellrendererkeys.c: (grab_key_callback), (ungrab_stuff),
(pointless_eventbox_start_editing),
(egg_cell_renderer_keys_start_editing):
* eggcellrendererkeys.h:
Update to latest eggcellrendererkeys.
* gnome-keybinding-properties.c: (get_wm_name),
(is_metacity_running), (update_wm_window),
(wm_window_event_filter), (initialize_wm_handling),
(binding_from_string), (accel_set_func), (keybinding_key_changed),
(clear_old_model), (count_rows_foreach), (should_show_key),
(append_keys_to_tree), (reload_key_entries),
(key_entry_controlling_key_changed), (disable_collapsing_cb),
(setup_dialog), (main):
* gnome-keybinding-properties.glade:
Hard-code the list of keybindings. Add Metacity keybindings
and code for handling WM changes.
2002-05-05 23:04:45 +00:00
|
|
|
keys->grab_widget = widget;
|
|
|
|
|
|
|
|
g_signal_connect (G_OBJECT (widget), "key_press_event",
|
|
|
|
G_CALLBACK (grab_key_callback),
|
|
|
|
keys);
|
2002-03-17 21:27:09 +00:00
|
|
|
|
2011-02-24 05:35:46 +00:00
|
|
|
eventbox = g_object_new (pointless_event_box_get_type (),
|
2002-03-17 21:27:09 +00:00
|
|
|
NULL);
|
|
|
|
keys->edit_widget = eventbox;
|
|
|
|
g_object_add_weak_pointer (G_OBJECT (keys->edit_widget),
|
|
|
|
(void**) &keys->edit_widget);
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
label = gtk_label_new (NULL);
|
|
|
|
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
gtk_widget_modify_bg (eventbox, GTK_STATE_NORMAL,
|
2010-04-20 03:14:48 +04:00
|
|
|
>k_widget_get_style (widget)->bg[GTK_STATE_SELECTED]);
|
2002-03-17 21:27:09 +00:00
|
|
|
|
|
|
|
gtk_widget_modify_fg (label, GTK_STATE_NORMAL,
|
2010-04-20 03:14:48 +04:00
|
|
|
>k_widget_get_style (widget)->fg[GTK_STATE_SELECTED]);
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2004-03-31 22:29:29 +00:00
|
|
|
gtk_label_set_text (GTK_LABEL (label),
|
|
|
|
TOOLTIP_TEXT);
|
2002-03-17 21:27:09 +00:00
|
|
|
|
|
|
|
gtk_container_add (GTK_CONTAINER (eventbox), label);
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
g_object_set_data_full (G_OBJECT (keys->edit_widget), EGG_CELL_RENDERER_TEXT_PATH,
|
|
|
|
g_strdup (path), g_free);
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
gtk_widget_show_all (keys->edit_widget);
|
|
|
|
|
|
|
|
g_signal_connect (G_OBJECT (keys->edit_widget), "unrealize",
|
|
|
|
G_CALLBACK (ungrab_stuff), keys);
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
keys->edit_key = keys->accel_key;
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
return GTK_CELL_EDITABLE (keys->edit_widget);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
egg_cell_renderer_keys_set_accelerator (EggCellRendererKeys *keys,
|
|
|
|
guint keyval,
|
2003-11-18 17:23:06 +00:00
|
|
|
guint keycode,
|
2004-03-31 21:30:23 +00:00
|
|
|
EggVirtualModifierType mask)
|
2002-03-17 21:27:09 +00:00
|
|
|
{
|
|
|
|
char *text;
|
|
|
|
gboolean changed;
|
2002-08-23 05:03:16 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
g_return_if_fail (EGG_IS_CELL_RENDERER_KEYS (keys));
|
2002-08-23 05:03:16 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
g_object_freeze_notify (G_OBJECT (keys));
|
|
|
|
|
|
|
|
changed = FALSE;
|
2008-08-23 12:19:36 +00:00
|
|
|
|
2002-03-17 21:27:09 +00:00
|
|
|
if (keyval != keys->accel_key)
|
|
|
|
{
|
|
|
|
keys->accel_key = keyval;
|
|
|
|
g_object_notify (G_OBJECT (keys), "accel_key");
|
|
|
|
changed = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (mask != keys->accel_mask)
|
|
|
|
{
|
|
|
|
keys->accel_mask = mask;
|
|
|
|
|
|
|
|
g_object_notify (G_OBJECT (keys), "accel_mask");
|
|
|
|
changed = TRUE;
|
2008-08-23 12:19:36 +00:00
|
|
|
}
|
2003-11-18 17:23:06 +00:00
|
|
|
|
|
|
|
if (keycode != keys->keycode)
|
|
|
|
{
|
|
|
|
keys->keycode = keycode;
|
|
|
|
|
|
|
|
g_object_notify (G_OBJECT (keys), "keycode");
|
|
|
|
changed = TRUE;
|
|
|
|
}
|
2002-03-17 21:27:09 +00:00
|
|
|
g_object_thaw_notify (G_OBJECT (keys));
|
|
|
|
|
|
|
|
if (changed)
|
|
|
|
{
|
|
|
|
/* sync string to the key values */
|
2003-11-18 17:23:06 +00:00
|
|
|
text = convert_keysym_state_to_string (keys->accel_key, keys->keycode, keys->accel_mask);
|
2002-03-17 21:27:09 +00:00
|
|
|
g_object_set (keys, "text", text, NULL);
|
2003-07-03 13:34:01 +00:00
|
|
|
g_free (text);
|
2002-03-17 21:27:09 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2004-03-31 21:30:23 +00:00
|
|
|
egg_cell_renderer_keys_get_accelerator (EggCellRendererKeys *keys,
|
|
|
|
guint *keyval,
|
|
|
|
EggVirtualModifierType *mask)
|
2002-03-17 21:27:09 +00:00
|
|
|
{
|
|
|
|
g_return_if_fail (EGG_IS_CELL_RENDERER_KEYS (keys));
|
|
|
|
|
|
|
|
if (keyval)
|
|
|
|
*keyval = keys->accel_key;
|
|
|
|
|
|
|
|
if (mask)
|
|
|
|
*mask = keys->accel_mask;
|
|
|
|
}
|
2002-08-23 05:03:16 +00:00
|
|
|
|
|
|
|
void
|
|
|
|
egg_cell_renderer_keys_set_accel_mode (EggCellRendererKeys *keys,
|
|
|
|
EggCellRendererKeysMode accel_mode)
|
|
|
|
{
|
|
|
|
g_return_if_fail (EGG_IS_CELL_RENDERER_KEYS (keys));
|
|
|
|
keys->accel_mode = accel_mode;
|
|
|
|
g_object_notify (G_OBJECT (keys), "accel_mode");
|
|
|
|
}
|