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>
|
2002-08-21 Glynn Foster <glynn.foster@sun.com>
|
||||||
|
|
||||||
* configure.in: Don't put dnl's in AC_OUTPUT.
|
* 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 {
|
enum {
|
||||||
PROP_0,
|
PROP_0,
|
||||||
|
|
||||||
/* FIXME make names consistent with something else */
|
|
||||||
PROP_ACCEL_KEY,
|
PROP_ACCEL_KEY,
|
||||||
PROP_ACCEL_MASK
|
PROP_ACCEL_MASK,
|
||||||
|
PROP_ACCEL_MODE
|
||||||
};
|
};
|
||||||
|
|
||||||
static GtkCellRendererTextClass *parent_class = NULL;
|
static GtkCellRendererTextClass *parent_class = NULL;
|
||||||
|
@ -86,6 +86,7 @@ egg_cell_renderer_keys_get_type (void)
|
||||||
static void
|
static void
|
||||||
egg_cell_renderer_keys_init (EggCellRendererKeys *cell_keys)
|
egg_cell_renderer_keys_init (EggCellRendererKeys *cell_keys)
|
||||||
{
|
{
|
||||||
|
cell_keys->accel_mode = EGG_CELL_RENDERER_KEYS_MODE_GTK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME setup stuff to generate this */
|
/* FIXME setup stuff to generate this */
|
||||||
|
@ -153,6 +154,16 @@ egg_cell_renderer_keys_class_init (EggCellRendererKeysClass *cell_keys_class)
|
||||||
* to match whatever the GTK convention is
|
* to match whatever the GTK convention is
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
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));
|
||||||
|
|
||||||
g_object_class_install_property (object_class,
|
g_object_class_install_property (object_class,
|
||||||
PROP_ACCEL_MASK,
|
PROP_ACCEL_MASK,
|
||||||
g_param_spec_flags ("accel_mask",
|
g_param_spec_flags ("accel_mask",
|
||||||
|
@ -162,13 +173,14 @@ egg_cell_renderer_keys_class_init (EggCellRendererKeysClass *cell_keys_class)
|
||||||
0,
|
0,
|
||||||
G_PARAM_READABLE | G_PARAM_WRITABLE));
|
G_PARAM_READABLE | G_PARAM_WRITABLE));
|
||||||
|
|
||||||
|
/* FIXME: Register the enum when moving to GTK+ */
|
||||||
g_object_class_install_property (object_class,
|
g_object_class_install_property (object_class,
|
||||||
PROP_ACCEL_KEY,
|
PROP_ACCEL_MODE,
|
||||||
g_param_spec_uint ("accel_key",
|
g_param_spec_int ("accel_mode",
|
||||||
_("Accelerator key"),
|
_("Accel Mode"),
|
||||||
_("Accelerator key"),
|
_("The type of accelerator."),
|
||||||
0,
|
0,
|
||||||
G_MAXINT,
|
2,
|
||||||
0,
|
0,
|
||||||
G_PARAM_READABLE | G_PARAM_WRITABLE));
|
G_PARAM_READABLE | G_PARAM_WRITABLE));
|
||||||
|
|
||||||
|
@ -201,20 +213,12 @@ egg_cell_renderer_keys_finalize (GObject *object)
|
||||||
|
|
||||||
static gchar *
|
static gchar *
|
||||||
convert_keysym_state_to_string (guint keysym,
|
convert_keysym_state_to_string (guint keysym,
|
||||||
GdkModifierType state)
|
EggVirtualModifierType mask)
|
||||||
{
|
{
|
||||||
if (keysym == 0)
|
if (keysym == 0)
|
||||||
return g_strdup (_("Disabled"));
|
return g_strdup (_("Disabled"));
|
||||||
else
|
else
|
||||||
{
|
return egg_virtual_accelerator_name (keysym, mask);
|
||||||
EggVirtualModifierType virtual;
|
|
||||||
|
|
||||||
/* FIXME multihead */
|
|
||||||
egg_keymap_virtualize_modifiers (gdk_keymap_get_default (),
|
|
||||||
state, &virtual);
|
|
||||||
|
|
||||||
return egg_virtual_accelerator_name (keysym, virtual);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -239,6 +243,10 @@ egg_cell_renderer_keys_get_property (GObject *object,
|
||||||
g_value_set_flags (value, keys->accel_mask);
|
g_value_set_flags (value, keys->accel_mask);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_ACCEL_MODE:
|
||||||
|
g_value_set_int (value, keys->accel_mode);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
|
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));
|
g_value_get_flags (value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_ACCEL_MODE:
|
||||||
|
egg_cell_renderer_keys_set_accel_mode (keys, g_value_get_int (value));
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -326,6 +338,9 @@ egg_cell_renderer_keys_get_size (GtkCellRenderer *cell,
|
||||||
*height = MAX (*height, requisition.height);
|
*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
|
static gboolean
|
||||||
grab_key_callback (GtkWidget *widget,
|
grab_key_callback (GtkWidget *widget,
|
||||||
|
@ -357,13 +372,16 @@ grab_key_callback (GtkWidget *widget,
|
||||||
|
|
||||||
upper = event->keyval;
|
upper = event->keyval;
|
||||||
accel_keyval = gdk_keyval_to_lower (upper);
|
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.
|
/* Put shift back if it changed the case of the key, not otherwise.
|
||||||
*/
|
*/
|
||||||
if (upper != accel_keyval &&
|
if (upper != accel_keyval &&
|
||||||
(consumed_modifiers & GDK_SHIFT_MASK))
|
(consumed_modifiers & GDK_SHIFT_MASK))
|
||||||
{
|
{
|
||||||
accel_mods |= GDK_SHIFT_MASK;
|
|
||||||
consumed_modifiers &= ~(GDK_SHIFT_MASK);
|
consumed_modifiers &= ~(GDK_SHIFT_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -373,7 +391,13 @@ grab_key_callback (GtkWidget *widget,
|
||||||
&ignored_modifiers);
|
&ignored_modifiers);
|
||||||
|
|
||||||
/* filter consumed/ignored modifiers */
|
/* filter consumed/ignored modifiers */
|
||||||
|
|
||||||
|
if (keys->accel_mode == EGG_CELL_RENDERER_KEYS_MODE_GTK)
|
||||||
accel_mods = event->state & ~(consumed_modifiers | ignored_modifiers);
|
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)
|
if (accel_mods == 0 && accel_keyval == GDK_Escape)
|
||||||
goto out; /* cancel */
|
goto out; /* cancel */
|
||||||
|
@ -384,14 +408,19 @@ grab_key_callback (GtkWidget *widget,
|
||||||
accel_keyval == GDK_BackSpace)
|
accel_keyval == GDK_BackSpace)
|
||||||
accel_keyval = 0;
|
accel_keyval = 0;
|
||||||
|
|
||||||
|
if (keys->accel_mode == EGG_CELL_RENDERER_KEYS_MODE_GTK)
|
||||||
|
{
|
||||||
if (!gtk_accelerator_valid (accel_keyval, accel_mods))
|
if (!gtk_accelerator_valid (accel_keyval, accel_mods))
|
||||||
{
|
{
|
||||||
accel_keyval = 0;
|
accel_keyval = 0;
|
||||||
accel_mods = 0;
|
accel_mods = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
edited = TRUE;
|
/* Remove modifiers like super and hyper, as GTK+ ignores them. */
|
||||||
|
accel_mods = accel_mods & GDK_MODIFIER_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
edited = TRUE;
|
||||||
out:
|
out:
|
||||||
path = g_strdup (g_object_get_data (G_OBJECT (keys->edit_widget),
|
path = g_strdup (g_object_get_data (G_OBJECT (keys->edit_widget),
|
||||||
EGG_CELL_RENDERER_TEXT_PATH));
|
EGG_CELL_RENDERER_TEXT_PATH));
|
||||||
|
@ -547,7 +576,6 @@ egg_cell_renderer_keys_start_editing (GtkCellRenderer *cell,
|
||||||
G_CALLBACK (ungrab_stuff), keys);
|
G_CALLBACK (ungrab_stuff), keys);
|
||||||
|
|
||||||
keys->edit_key = keys->accel_key;
|
keys->edit_key = keys->accel_key;
|
||||||
keys->edit_mask = keys->accel_mask;
|
|
||||||
|
|
||||||
return GTK_CELL_EDITABLE (keys->edit_widget);
|
return GTK_CELL_EDITABLE (keys->edit_widget);
|
||||||
}
|
}
|
||||||
|
@ -593,7 +621,6 @@ egg_cell_renderer_keys_set_accelerator (EggCellRendererKeys *keys,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
egg_cell_renderer_keys_get_accelerator (EggCellRendererKeys *keys,
|
egg_cell_renderer_keys_get_accelerator (EggCellRendererKeys *keys,
|
||||||
guint *keyval,
|
guint *keyval,
|
||||||
|
@ -607,3 +634,12 @@ egg_cell_renderer_keys_get_accelerator (EggCellRendererKeys *keys,
|
||||||
if (mask)
|
if (mask)
|
||||||
*mask = keys->accel_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__
|
#define __EGG_CELL_RENDERER_KEYS_H__
|
||||||
|
|
||||||
#include <gtk/gtkcellrenderertext.h>
|
#include <gtk/gtkcellrenderertext.h>
|
||||||
|
#include "eggaccelerators.h"
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
@ -34,16 +35,23 @@ G_BEGIN_DECLS
|
||||||
typedef struct _EggCellRendererKeys EggCellRendererKeys;
|
typedef struct _EggCellRendererKeys EggCellRendererKeys;
|
||||||
typedef struct _EggCellRendererKeysClass EggCellRendererKeysClass;
|
typedef struct _EggCellRendererKeysClass EggCellRendererKeysClass;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
EGG_CELL_RENDERER_KEYS_MODE_GTK,
|
||||||
|
EGG_CELL_RENDERER_KEYS_MODE_X,
|
||||||
|
} EggCellRendererKeysMode;
|
||||||
|
|
||||||
struct _EggCellRendererKeys
|
struct _EggCellRendererKeys
|
||||||
{
|
{
|
||||||
GtkCellRendererText parent;
|
GtkCellRendererText parent;
|
||||||
guint accel_key;
|
guint accel_key;
|
||||||
GdkModifierType accel_mask;
|
EggVirtualModifierType accel_mask;
|
||||||
GtkWidget *edit_widget;
|
GtkWidget *edit_widget;
|
||||||
GtkWidget *grab_widget;
|
GtkWidget *grab_widget;
|
||||||
guint edit_key;
|
guint edit_key;
|
||||||
GdkModifierType edit_mask;
|
|
||||||
GtkWidget *sizing_label;
|
GtkWidget *sizing_label;
|
||||||
|
EggCellRendererKeysMode accel_mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _EggCellRendererKeysClass
|
struct _EggCellRendererKeysClass
|
||||||
|
@ -53,7 +61,7 @@ struct _EggCellRendererKeysClass
|
||||||
void (* keys_edited) (EggCellRendererKeys *keys,
|
void (* keys_edited) (EggCellRendererKeys *keys,
|
||||||
const char *path_string,
|
const char *path_string,
|
||||||
guint keyval,
|
guint keyval,
|
||||||
GdkModifierType mask,
|
EggVirtualModifierType mask,
|
||||||
guint hardware_keycode);
|
guint hardware_keycode);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -62,12 +70,12 @@ GtkCellRenderer *egg_cell_renderer_keys_new (void);
|
||||||
|
|
||||||
void egg_cell_renderer_keys_set_accelerator (EggCellRendererKeys *keys,
|
void egg_cell_renderer_keys_set_accelerator (EggCellRendererKeys *keys,
|
||||||
guint keyval,
|
guint keyval,
|
||||||
GdkModifierType mask);
|
EggVirtualModifierType mask);
|
||||||
|
|
||||||
|
|
||||||
void egg_cell_renderer_keys_get_accelerator (EggCellRendererKeys *keys,
|
void egg_cell_renderer_keys_get_accelerator (EggCellRendererKeys *keys,
|
||||||
guint *keyval,
|
guint *keyval,
|
||||||
GdkModifierType *mask);
|
EggVirtualModifierType *mask);
|
||||||
|
void egg_cell_renderer_keys_set_accel_mode (EggCellRendererKeys *keys,
|
||||||
|
EggCellRendererKeysMode accel_mode);
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
|
@ -748,7 +748,9 @@ setup_dialog (GladeXML *dialog)
|
||||||
|
|
||||||
renderer = (GtkCellRenderer *) g_object_new (EGG_TYPE_CELL_RENDERER_KEYS,
|
renderer = (GtkCellRenderer *) g_object_new (EGG_TYPE_CELL_RENDERER_KEYS,
|
||||||
"editable", TRUE,
|
"editable", TRUE,
|
||||||
|
"accel_mode", EGG_CELL_RENDERER_KEYS_MODE_X,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
g_signal_connect (G_OBJECT (renderer),
|
g_signal_connect (G_OBJECT (renderer),
|
||||||
"keys_edited",
|
"keys_edited",
|
||||||
G_CALLBACK (accel_edited_callback),
|
G_CALLBACK (accel_edited_callback),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue