use new X mode of the eggcellrendererkeys.

Fri Aug 23 00:15:47 2002  Jonathan Blandford  <jrb@gnome.org>

	* gnome-keybinding-properties.c (setup_dialog): use new X mode of
	the eggcellrendererkeys.

	* eggcellrendererkeys.[ch]: update from libegg.
This commit is contained in:
Jonathan Blandford 2002-08-23 05:03:16 +00:00 committed by Jonathan Blandford
parent 4be36ac469
commit dbfc16764d
4 changed files with 104 additions and 51 deletions

View file

@ -1,3 +1,10 @@
Fri Aug 23 00:15:47 2002 Jonathan Blandford <jrb@gnome.org>
* gnome-keybinding-properties.c (setup_dialog): use new X mode of
the eggcellrendererkeys.
* eggcellrendererkeys.[ch]: update from libegg.
2002-08-21 Glynn Foster <glynn.foster@sun.com>
* configure.in: Don't put dnl's in AC_OUTPUT.

View file

@ -50,9 +50,9 @@ static void egg_cell_renderer_keys_get_size (GtkCellRenderer *cell,
enum {
PROP_0,
/* FIXME make names consistent with something else */
PROP_ACCEL_KEY,
PROP_ACCEL_MASK
PROP_ACCEL_MASK,
PROP_ACCEL_MODE
};
static GtkCellRendererTextClass *parent_class = NULL;
@ -86,6 +86,7 @@ egg_cell_renderer_keys_get_type (void)
static void
egg_cell_renderer_keys_init (EggCellRendererKeys *cell_keys)
{
cell_keys->accel_mode = EGG_CELL_RENDERER_KEYS_MODE_GTK;
}
/* FIXME setup stuff to generate this */
@ -153,15 +154,6 @@ egg_cell_renderer_keys_class_init (EggCellRendererKeysClass *cell_keys_class)
* to match whatever the GTK convention is
*/
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));
g_object_class_install_property (object_class,
PROP_ACCEL_KEY,
g_param_spec_uint ("accel_key",
@ -172,6 +164,26 @@ egg_cell_renderer_keys_class_init (EggCellRendererKeysClass *cell_keys_class)
0,
G_PARAM_READABLE | G_PARAM_WRITABLE));
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));
/* 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));
g_signal_new ("keys_edited",
EGG_TYPE_CELL_RENDERER_KEYS,
G_SIGNAL_RUN_LAST,
@ -200,21 +212,13 @@ egg_cell_renderer_keys_finalize (GObject *object)
}
static gchar *
convert_keysym_state_to_string (guint keysym,
GdkModifierType state)
convert_keysym_state_to_string (guint keysym,
EggVirtualModifierType mask)
{
if (keysym == 0)
return g_strdup (_("Disabled"));
else
{
EggVirtualModifierType virtual;
/* FIXME multihead */
egg_keymap_virtualize_modifiers (gdk_keymap_get_default (),
state, &virtual);
return egg_virtual_accelerator_name (keysym, virtual);
}
return egg_virtual_accelerator_name (keysym, mask);
}
static void
@ -239,6 +243,10 @@ egg_cell_renderer_keys_get_property (GObject *object,
g_value_set_flags (value, keys->accel_mask);
break;
case PROP_ACCEL_MODE:
g_value_set_int (value, keys->accel_mode);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
}
@ -270,6 +278,10 @@ egg_cell_renderer_keys_set_property (GObject *object,
g_value_get_flags (value));
break;
case PROP_ACCEL_MODE:
egg_cell_renderer_keys_set_accel_mode (keys, g_value_get_int (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
}
@ -326,7 +338,10 @@ egg_cell_renderer_keys_get_size (GtkCellRenderer *cell,
*height = MAX (*height, requisition.height);
}
/* FIXME: Currently we don't differentiate between a 'bogus' key (like tab in
* GTK mode) and a removed key.
*/
static gboolean
grab_key_callback (GtkWidget *widget,
GdkEventKey *event,
@ -357,13 +372,16 @@ grab_key_callback (GtkWidget *widget,
upper = event->keyval;
accel_keyval = gdk_keyval_to_lower (upper);
if (accel_keyval == GDK_ISO_Left_Tab)
accel_keyval = GDK_Tab;
/* Put shift back if it changed the case of the key, not otherwise.
*/
if (upper != accel_keyval &&
(consumed_modifiers & GDK_SHIFT_MASK))
{
accel_mods |= GDK_SHIFT_MASK;
consumed_modifiers &= ~(GDK_SHIFT_MASK);
}
@ -373,8 +391,14 @@ grab_key_callback (GtkWidget *widget,
&ignored_modifiers);
/* filter consumed/ignored modifiers */
accel_mods = event->state & ~(consumed_modifiers | ignored_modifiers);
if (keys->accel_mode == EGG_CELL_RENDERER_KEYS_MODE_GTK)
accel_mods = event->state & ~(consumed_modifiers | ignored_modifiers);
else if (keys->accel_mode == EGG_CELL_RENDERER_KEYS_MODE_X)
accel_mods = event->state & ~(ignored_modifiers);
else
g_assert_not_reached ();
if (accel_mods == 0 && accel_keyval == GDK_Escape)
goto out; /* cancel */
@ -384,14 +408,19 @@ grab_key_callback (GtkWidget *widget,
accel_keyval == GDK_BackSpace)
accel_keyval = 0;
if (!gtk_accelerator_valid (accel_keyval, accel_mods))
if (keys->accel_mode == EGG_CELL_RENDERER_KEYS_MODE_GTK)
{
accel_keyval = 0;
accel_mods = 0;
if (!gtk_accelerator_valid (accel_keyval, accel_mods))
{
accel_keyval = 0;
accel_mods = 0;
}
/* Remove modifiers like super and hyper, as GTK+ ignores them. */
accel_mods = accel_mods & GDK_MODIFIER_MASK;
}
edited = TRUE;
out:
path = g_strdup (g_object_get_data (G_OBJECT (keys->edit_widget),
EGG_CELL_RENDERER_TEXT_PATH));
@ -547,7 +576,6 @@ egg_cell_renderer_keys_start_editing (GtkCellRenderer *cell,
G_CALLBACK (ungrab_stuff), keys);
keys->edit_key = keys->accel_key;
keys->edit_mask = keys->accel_mask;
return GTK_CELL_EDITABLE (keys->edit_widget);
}
@ -560,9 +588,9 @@ egg_cell_renderer_keys_set_accelerator (EggCellRendererKeys *keys,
char *text;
gboolean changed;
GtkCellRendererText *celltext;
g_return_if_fail (EGG_IS_CELL_RENDERER_KEYS (keys));
g_object_freeze_notify (G_OBJECT (keys));
changed = FALSE;
@ -593,7 +621,6 @@ egg_cell_renderer_keys_set_accelerator (EggCellRendererKeys *keys,
}
void
egg_cell_renderer_keys_get_accelerator (EggCellRendererKeys *keys,
guint *keyval,
@ -607,3 +634,12 @@ egg_cell_renderer_keys_get_accelerator (EggCellRendererKeys *keys,
if (mask)
*mask = keys->accel_mask;
}
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");
}

View file

@ -21,6 +21,7 @@
#define __EGG_CELL_RENDERER_KEYS_H__
#include <gtk/gtkcellrenderertext.h>
#include "eggaccelerators.h"
G_BEGIN_DECLS
@ -34,40 +35,47 @@ G_BEGIN_DECLS
typedef struct _EggCellRendererKeys EggCellRendererKeys;
typedef struct _EggCellRendererKeysClass EggCellRendererKeysClass;
typedef enum
{
EGG_CELL_RENDERER_KEYS_MODE_GTK,
EGG_CELL_RENDERER_KEYS_MODE_X,
} EggCellRendererKeysMode;
struct _EggCellRendererKeys
{
GtkCellRendererText parent;
guint accel_key;
GdkModifierType accel_mask;
EggVirtualModifierType accel_mask;
GtkWidget *edit_widget;
GtkWidget *grab_widget;
guint edit_key;
GdkModifierType edit_mask;
GtkWidget *sizing_label;
EggCellRendererKeysMode accel_mode;
};
struct _EggCellRendererKeysClass
{
GtkCellRendererTextClass parent_class;
void (* keys_edited) (EggCellRendererKeys *keys,
const char *path_string,
guint keyval,
GdkModifierType mask,
guint hardware_keycode);
void (* keys_edited) (EggCellRendererKeys *keys,
const char *path_string,
guint keyval,
EggVirtualModifierType mask,
guint hardware_keycode);
};
GType egg_cell_renderer_keys_get_type (void);
GtkCellRenderer *egg_cell_renderer_keys_new (void);
GType egg_cell_renderer_keys_get_type (void);
GtkCellRenderer *egg_cell_renderer_keys_new (void);
void egg_cell_renderer_keys_set_accelerator (EggCellRendererKeys *keys,
guint keyval,
GdkModifierType mask);
void egg_cell_renderer_keys_get_accelerator (EggCellRendererKeys *keys,
guint *keyval,
GdkModifierType *mask);
void egg_cell_renderer_keys_set_accelerator (EggCellRendererKeys *keys,
guint keyval,
EggVirtualModifierType mask);
void egg_cell_renderer_keys_get_accelerator (EggCellRendererKeys *keys,
guint *keyval,
EggVirtualModifierType *mask);
void egg_cell_renderer_keys_set_accel_mode (EggCellRendererKeys *keys,
EggCellRendererKeysMode accel_mode);
G_END_DECLS

View file

@ -748,7 +748,9 @@ setup_dialog (GladeXML *dialog)
renderer = (GtkCellRenderer *) g_object_new (EGG_TYPE_CELL_RENDERER_KEYS,
"editable", TRUE,
"accel_mode", EGG_CELL_RENDERER_KEYS_MODE_X,
NULL);
g_signal_connect (G_OBJECT (renderer),
"keys_edited",
G_CALLBACK (accel_edited_callback),