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:
parent
4be36ac469
commit
dbfc16764d
4 changed files with 104 additions and 51 deletions
|
@ -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.
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue