Add new Makefiles ditto Add keybindings dialog
2002-03-17 Jonathan Blandford <jrb@redhat.com> * Makefile.am: Add new Makefiles * configure.in: ditto * capplets/Makefile.am: Add keybindings dialog * capplets/keybindings/.cvsignore: shut up CVS * capplets/keybindings/Makefile.am: * capplets/keybindings/eggcellrendererkeys.c: * capplets/keybindings/eggcellrendererkeys.h: * capplets/keybindings/gnome-keybinding-properties.c: * capplets/keybindings/gnome-keybinding-properties.glade: * capplets/keybindings/keybinding.desktop.in: New properties dialog. Seems to work * schemas/.cvsignore: shut up CVS * schemas/Makefile.am: * schemas/apps_gnome_keybinding_properties.schemas: New schemas file for configuring the keybinding schemas. * schemas/background.schemas: Remove unneeded schemas files * schemas/peripherals.schemas: * schemas/screensaver.schemas:
This commit is contained in:
parent
ee92876cb3
commit
ac9331cf2b
28 changed files with 1703 additions and 382 deletions
25
ChangeLog
25
ChangeLog
|
@ -1,3 +1,28 @@
|
|||
2002-03-17 Jonathan Blandford <jrb@redhat.com>
|
||||
|
||||
* Makefile.am: Add new Makefiles
|
||||
* configure.in: ditto
|
||||
* capplets/Makefile.am: Add keybindings dialog
|
||||
|
||||
* capplets/keybindings/.cvsignore: shut up CVS
|
||||
|
||||
* capplets/keybindings/Makefile.am:
|
||||
* capplets/keybindings/eggcellrendererkeys.c:
|
||||
* capplets/keybindings/eggcellrendererkeys.h:
|
||||
* capplets/keybindings/gnome-keybinding-properties.c:
|
||||
* capplets/keybindings/gnome-keybinding-properties.glade:
|
||||
* capplets/keybindings/keybinding.desktop.in:
|
||||
New properties dialog. Seems to work
|
||||
|
||||
* schemas/.cvsignore: shut up CVS
|
||||
|
||||
* schemas/Makefile.am:
|
||||
* schemas/apps_gnome_keybinding_properties.schemas: New schemas
|
||||
file for configuring the keybinding schemas.
|
||||
* schemas/background.schemas: Remove unneeded schemas files
|
||||
* schemas/peripherals.schemas:
|
||||
* schemas/screensaver.schemas:
|
||||
|
||||
2002-03-11 Richard Hestilow <hestilow@ximian.com>
|
||||
|
||||
* Committed patches by Lauris Kaplinski for bugs 73571, 73587,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
SUBDIRS = po libsounds libbackground gnome-settings-daemon capplets control-center idl
|
||||
SUBDIRS = po libsounds libbackground gnome-settings-daemon capplets control-center idl schemas
|
||||
|
||||
#I removed the root-manager for now
|
||||
#
|
||||
|
|
|
@ -2,6 +2,6 @@ always_built_SUBDIRS = \
|
|||
common default-applications desktop-links \
|
||||
background keyboard mouse sound \
|
||||
file-types theme-switcher ui-properties \
|
||||
screensaver font
|
||||
|
||||
screensaver font keybindings
|
||||
|
||||
SUBDIRS = $(always_built_SUBDIRS)
|
||||
|
|
|
@ -5,5 +5,8 @@ Makefile.in
|
|||
*.o
|
||||
*.lo
|
||||
*.la
|
||||
gnome2-background-properties
|
||||
background.desktop
|
||||
background.desktop.in
|
||||
gnome2-background-properties
|
||||
gnome-background-properties
|
||||
*.oaf
|
|
@ -1,3 +1,9 @@
|
|||
2002-03-17 Jonathan Blandford <set EMAIL_ADDRESS environment variable>
|
||||
|
||||
reviewed by: <delete if not using a buddy>
|
||||
|
||||
* .cvsignore:
|
||||
|
||||
2002-03-14 Richard Hestilow <hestilow@ximian.com>
|
||||
|
||||
* background-properties-capplet.c (setup_dialog): Use new enum
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
2002-03-17 Jonathan Blandford <set EMAIL_ADDRESS environment variable>
|
||||
|
||||
reviewed by: <delete if not using a buddy>
|
||||
|
||||
* Makefile.am:
|
||||
* theme-common.c: (themes_common_list_add_dir),
|
||||
(theme_common_get_list), (theme_common_list_free):
|
||||
* theme-common.h:
|
||||
|
||||
2002-03-14 Richard Hestilow <hestilow@ximian.com>
|
||||
|
||||
* gconf-property-editor.c:
|
||||
|
|
|
@ -13,4 +13,5 @@ libcommon_a_SOURCES = \
|
|||
activate-settings-daemon.c activate-settings-daemon.h \
|
||||
capplet-util.c capplet-util.h \
|
||||
gconf-property-editor.c gconf-property-editor.h \
|
||||
gconf-property-editor-marshal.c gconf-property-editor-marshal.h
|
||||
gconf-property-editor-marshal.c gconf-property-editor-marshal.h \
|
||||
theme-common.c theme-common.h
|
||||
|
|
91
capplets/common/theme-common.c
Normal file
91
capplets/common/theme-common.c
Normal file
|
@ -0,0 +1,91 @@
|
|||
#include <config.h>
|
||||
|
||||
#include <gnome.h>
|
||||
#include <glade/glade.h>
|
||||
#include <gconf/gconf-client.h>
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h>
|
||||
#include "theme-common.h"
|
||||
|
||||
static GList *
|
||||
themes_common_list_add_dir (GList *list,
|
||||
const char *dirname)
|
||||
{
|
||||
DIR *dir;
|
||||
struct dirent *de;
|
||||
const gchar *suffix = "gtk-2.0";
|
||||
const gchar *key_suffix = "gtk-2.0-key";
|
||||
|
||||
g_return_val_if_fail (dirname != NULL, list);
|
||||
|
||||
dir = opendir (dirname);
|
||||
if (!dir)
|
||||
return list;
|
||||
|
||||
while ((de = readdir (dir)))
|
||||
{
|
||||
char *tmp;
|
||||
ThemeInfo *info = NULL;
|
||||
|
||||
if (de->d_name[0] == '.')
|
||||
continue;
|
||||
|
||||
tmp = g_build_filename (dirname, de->d_name, suffix, NULL);
|
||||
if (g_file_test (tmp, G_FILE_TEST_IS_DIR))
|
||||
{
|
||||
info = g_new0 (ThemeInfo, 1);
|
||||
info->path = g_build_filename (dirname, de->d_name, NULL);
|
||||
info->name = g_strdup (de->d_name);
|
||||
|
||||
info->has_gtk = TRUE;
|
||||
}
|
||||
g_free (tmp);
|
||||
|
||||
tmp = g_build_filename (dirname, de->d_name, key_suffix, NULL);
|
||||
if (g_file_test (tmp, G_FILE_TEST_IS_DIR))
|
||||
{
|
||||
if (info == NULL)
|
||||
{
|
||||
info = g_new0 (ThemeInfo, 1);
|
||||
info->path = g_build_filename (dirname, de->d_name, NULL);
|
||||
info->name = g_strdup (de->d_name);
|
||||
}
|
||||
info->has_keybinding = TRUE;
|
||||
}
|
||||
g_free (tmp);
|
||||
if (info)
|
||||
list = g_list_prepend (list, info);
|
||||
}
|
||||
closedir (dir);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
GList *
|
||||
theme_common_get_list (void)
|
||||
{
|
||||
gchar *dir;
|
||||
GList *theme_list = NULL;
|
||||
|
||||
dir = g_build_filename (g_get_home_dir (), ".themes", NULL);
|
||||
theme_list = themes_common_list_add_dir (theme_list, dir);
|
||||
g_free (dir);
|
||||
|
||||
dir = gtk_rc_get_theme_dir ();
|
||||
theme_list = themes_common_list_add_dir (theme_list, dir);
|
||||
g_free (dir);
|
||||
|
||||
return theme_list;
|
||||
}
|
||||
|
||||
void
|
||||
theme_common_list_free (GList *list)
|
||||
{
|
||||
if (list == NULL)
|
||||
return;
|
||||
|
||||
g_list_foreach (list, g_free, NULL);
|
||||
g_list_free (list);
|
||||
}
|
20
capplets/common/theme-common.h
Normal file
20
capplets/common/theme-common.h
Normal file
|
@ -0,0 +1,20 @@
|
|||
|
||||
#ifndef THEME_COMMON_H
|
||||
#define THEME_COMMON_H
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
typedef struct _ThemeInfo ThemeInfo;
|
||||
struct _ThemeInfo
|
||||
{
|
||||
gchar *path;
|
||||
gchar *name;
|
||||
gboolean has_gtk;
|
||||
gboolean has_keybinding;
|
||||
};
|
||||
|
||||
GList *theme_common_get_list (void);
|
||||
void theme_common_list_free (GList *list);
|
||||
|
||||
|
||||
#endif /* THEME_COMMON_H */
|
|
@ -1,3 +1,10 @@
|
|||
2002-03-17 Jonathan Blandford <set EMAIL_ADDRESS environment variable>
|
||||
|
||||
reviewed by: <delete if not using a buddy>
|
||||
|
||||
* font-properties.glade:
|
||||
* main.c: (setup_dialog):
|
||||
|
||||
2002-02-27 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* main.c: s/PACKAGE/GETTEXT_PACKAGE/g
|
||||
|
|
|
@ -1,62 +1,177 @@
|
|||
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
|
||||
<!DOCTYPE glade-interface SYSTEM "../glade-2.0.dtd" >
|
||||
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd" >
|
||||
|
||||
<glade-interface>
|
||||
<requires lib="gnome"/>
|
||||
|
||||
<requires lib="gnome" />
|
||||
|
||||
<widget class="GtkDialog" id="window1">
|
||||
<property name="title" translatable="yes">Font properties</property>
|
||||
<property name="title" translatable="yes">Font Preferences</property>
|
||||
<property name="type">GTK_WINDOW_TOPLEVEL</property>
|
||||
<property name="modal">no</property>
|
||||
<property name="allow_shrink">no</property>
|
||||
<property name="allow_grow">no</property>
|
||||
<property name="visible">yes</property>
|
||||
<property name="window-position">GTK_WIN_POS_NONE</property>
|
||||
|
||||
<signal name="destroy" handler="gtk_main_quit" />
|
||||
<signal name="response" handler="response_cb" />
|
||||
|
||||
<child internal-child="vbox">
|
||||
<widget class="GtkVBox" id="vbox1">
|
||||
<property name="spacing">4</property>
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="custom_check">
|
||||
<property name="label" translatable="yes">Use a custom font.</property>
|
||||
<property name="visible">yes</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">no</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GnomeFontPicker" id="font_picker">
|
||||
<property name="mode">font-info</property>
|
||||
<property name="use-font-in-label">yes</property>
|
||||
<property name="visible">yes</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">no</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
<widget class="GtkVBox" id="dialog-vbox1">
|
||||
<property name="homogeneous">no</property>
|
||||
<property name="spacing">0</property>
|
||||
<property name="visible">yes</property>
|
||||
|
||||
<child internal-child="action_area">
|
||||
<widget class="GtkHButtonBox" id="buttonbox1">
|
||||
<child>
|
||||
<widget class="GtkButton" id="button1">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="use_stock">yes</property>
|
||||
<property name="use_underline">yes</property>
|
||||
<property name="response_id">1</property>
|
||||
<child internal-child="action_area">
|
||||
<widget class="GtkHButtonBox" id="dialog-action_area1">
|
||||
<property name="layout_style">GTK_BUTTONBOX_END</property>
|
||||
<property name="spacing">8</property>
|
||||
<property name="visible">yes</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="button2">
|
||||
<property name="can_default">yes</property>
|
||||
<property name="can_focus">yes</property>
|
||||
<property name="visible">yes</property>
|
||||
<property name="label">gtk-close</property>
|
||||
<property name="use_stock">yes</property>
|
||||
<property name="use_underline">yes</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">no</property>
|
||||
<property name="fill">yes</property>
|
||||
<property name="pack_type">GTK_PACK_END</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkButton" id="button2">
|
||||
<property name="label">gtk-close</property>
|
||||
<property name="use_stock">yes</property>
|
||||
<property name="use_underline">yes</property>
|
||||
<property name="response_id">2</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox5">
|
||||
<property name="border_width">10</property>
|
||||
<property name="homogeneous">no</property>
|
||||
<property name="spacing">10</property>
|
||||
<property name="visible">yes</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkFrame" id="frame1">
|
||||
<property name="label" translatable="yes">Desktop Font</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="width-request">250</property>
|
||||
<property name="shadow">GTK_SHADOW_NONE</property>
|
||||
<property name="visible">yes</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkHBox" id="hbox1">
|
||||
<property name="homogeneous">no</property>
|
||||
<property name="spacing">10</property>
|
||||
<property name="visible">yes</property>
|
||||
|
||||
<child>
|
||||
<widget class="GnomeFontPicker" id="font_picker">
|
||||
<property name="can_focus">yes</property>
|
||||
<property name="title" translatable="yes">Select the desktop font</property>
|
||||
<property name="preview_text" translatable="yes">AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz</property>
|
||||
<property name="mode">GNOME_FONT_PICKER_MODE_FONT_INFO</property>
|
||||
<property name="show_size">yes</property>
|
||||
<property name="label-font-size">14</property>
|
||||
<property name="use-font-in-label">yes</property>
|
||||
<property name="visible">yes</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">yes</property>
|
||||
<property name="fill">yes</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="button3">
|
||||
<property name="can_focus">yes</property>
|
||||
<property name="label" translatable="yes">Set to Default</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="visible">yes</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">no</property>
|
||||
<property name="fill">no</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">yes</property>
|
||||
<property name="fill">yes</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkFrame" id="frame2">
|
||||
<property name="label" translatable="yes">File Manager Font</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="shadow">GTK_SHADOW_NONE</property>
|
||||
<property name="visible">yes</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkHBox" id="hbox2">
|
||||
<property name="homogeneous">no</property>
|
||||
<property name="spacing">10</property>
|
||||
<property name="visible">yes</property>
|
||||
|
||||
<child>
|
||||
<widget class="GnomeFontPicker" id="fontpicker2">
|
||||
<property name="can_focus">yes</property>
|
||||
<property name="title" translatable="yes">Pick a Font</property>
|
||||
<property name="preview_text" translatable="yes">AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz</property>
|
||||
<property name="mode">GNOME_FONT_PICKER_MODE_FONT_INFO</property>
|
||||
<property name="show_size">yes</property>
|
||||
<property name="label-font-size">14</property>
|
||||
<property name="use-font-in-label">yes</property>
|
||||
<property name="visible">yes</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">yes</property>
|
||||
<property name="fill">yes</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="button4">
|
||||
<property name="can_focus">yes</property>
|
||||
<property name="label" translatable="yes">Set to Default</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="visible">yes</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">no</property>
|
||||
<property name="fill">no</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">yes</property>
|
||||
<property name="fill">yes</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">yes</property>
|
||||
<property name="fill">yes</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
<packing>
|
||||
<property name="padding">4</property>
|
||||
<property name="expand">yes</property>
|
||||
<property name="fill">yes</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</glade-interface>
|
||||
|
|
|
@ -43,9 +43,9 @@ setup_dialog (void)
|
|||
{
|
||||
GObject *peditor;
|
||||
|
||||
peditor = gconf_peditor_new_boolean (changeset, "/desktop/gnome/interface/use_custom_font", WID ("custom_check"), NULL);
|
||||
peditor = gconf_peditor_new_boolean (NULL, /*changeset,*/ "/desktop/gnome/interface/use_custom_font", WID ("custom_check"), NULL);
|
||||
gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor), WID ("font_picker"));
|
||||
peditor = gconf_peditor_new_font (changeset, "/desktop/gnome/interface/font_name", WID ("font_picker"), NULL);
|
||||
peditor = gconf_peditor_new_font (NULL, /*changeset,*/ "/desktop/gnome/interface/font_name", WID ("font_picker"), NULL);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
4
capplets/keybindings/.cvsignore
Normal file
4
capplets/keybindings/.cvsignore
Normal file
|
@ -0,0 +1,4 @@
|
|||
Makefile
|
||||
Makefile.in
|
||||
gnome-keybinding-properties
|
||||
keybinding.desktop
|
21
capplets/keybindings/Makefile.am
Normal file
21
capplets/keybindings/Makefile.am
Normal file
|
@ -0,0 +1,21 @@
|
|||
bin_PROGRAMS = gnome-keybinding-properties
|
||||
|
||||
gnome_keybinding_properties_LDADD = $(GNOMECC_CAPPLETS_LIBS)
|
||||
gnome_keybinding_properties_SOURCES = \
|
||||
gnome-keybinding-properties.c \
|
||||
eggcellrendererkeys.c
|
||||
|
||||
@INTLTOOL_DESKTOP_RULE@
|
||||
|
||||
|
||||
Gladedir = $(GNOMECC_GLADE_DIR)
|
||||
Glade_DATA = gnome-keybinding-properties.glade
|
||||
|
||||
desktopdir = $(GNOMECC_DESKTOP_DIR)
|
||||
Desktop_in_files = keybinding.desktop.in
|
||||
desktop_DATA = $(Desktop_in_files:.desktop.in=.desktop)
|
||||
|
||||
INCLUDES = $(GNOMECC_CAPPLETS_CFLAGS)
|
||||
CLEANFILES = $(GNOMECC_CAPPLETS_CLEANFILES)
|
||||
EXTRA_DIST = $(Glade_DATA) $(Desktop_in_files)
|
||||
|
529
capplets/keybindings/eggcellrendererkeys.c
Normal file
529
capplets/keybindings/eggcellrendererkeys.c
Normal file
|
@ -0,0 +1,529 @@
|
|||
#include <config.h>
|
||||
#include <libintl.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdkx.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
#include "eggcellrendererkeys.h"
|
||||
|
||||
#ifndef _
|
||||
#define _(x) dgettext (GETTEXT_PACKAGE, x)
|
||||
#define N_(x) x
|
||||
#endif
|
||||
|
||||
#define EGG_CELL_RENDERER_TEXT_PATH "egg-cell-renderer-text"
|
||||
#define USED_MODS (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)
|
||||
|
||||
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,
|
||||
GdkRectangle *background_area,
|
||||
GdkRectangle *cell_area,
|
||||
GtkCellRendererState flags);
|
||||
|
||||
|
||||
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);
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
|
||||
/* FIXME make names consistent with something else */
|
||||
PROP_ACCEL_KEY,
|
||||
PROP_ACCEL_MASK
|
||||
};
|
||||
|
||||
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 */
|
||||
(GInstanceInitFunc) egg_cell_renderer_keys_init
|
||||
};
|
||||
|
||||
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)
|
||||
{
|
||||
}
|
||||
|
||||
/* FIXME setup stuff to generate this */
|
||||
/* VOID:STRING,UINT,FLAGS */
|
||||
static void
|
||||
marshal_VOID__STRING_UINT_FLAGS (GClosure *closure,
|
||||
GValue *return_value,
|
||||
guint n_param_values,
|
||||
const GValue *param_values,
|
||||
gpointer invocation_hint,
|
||||
gpointer marshal_data)
|
||||
{
|
||||
typedef void (*GMarshalFunc_VOID__STRING_UINT_FLAGS) (gpointer data1,
|
||||
const char *arg_1,
|
||||
guint arg_2,
|
||||
int arg_3,
|
||||
gpointer data2);
|
||||
register GMarshalFunc_VOID__STRING_UINT_FLAGS callback;
|
||||
register GCClosure *cc = (GCClosure*) closure;
|
||||
register gpointer data1, data2;
|
||||
|
||||
g_return_if_fail (n_param_values == 4);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
callback = (GMarshalFunc_VOID__STRING_UINT_FLAGS) (marshal_data ? marshal_data : cc->callback);
|
||||
|
||||
callback (data1,
|
||||
g_value_get_string (param_values + 1),
|
||||
g_value_get_uint (param_values + 2),
|
||||
g_value_get_flags (param_values + 3),
|
||||
data2);
|
||||
}
|
||||
|
||||
static void
|
||||
egg_cell_renderer_keys_class_init (EggCellRendererKeysClass *cell_keys_class)
|
||||
{
|
||||
GObjectClass *object_class;
|
||||
|
||||
object_class = G_OBJECT_CLASS (cell_keys_class);
|
||||
|
||||
parent_class = g_type_class_peek_parent (object_class);
|
||||
|
||||
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;
|
||||
|
||||
object_class->finalize = egg_cell_renderer_keys_finalize;
|
||||
|
||||
/* FIXME if this gets moved to a real library, rename the properties
|
||||
* 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",
|
||||
_("Accelerator key"),
|
||||
_("Accelerator key"),
|
||||
0,
|
||||
G_MAXINT,
|
||||
0,
|
||||
G_PARAM_READABLE | G_PARAM_WRITABLE));
|
||||
|
||||
g_signal_new ("keys_edited",
|
||||
EGG_TYPE_CELL_RENDERER_KEYS,
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (EggCellRendererKeysClass, keys_edited),
|
||||
NULL, NULL,
|
||||
marshal_VOID__STRING_UINT_FLAGS,
|
||||
G_TYPE_NONE, 3,
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_UINT,
|
||||
GDK_TYPE_MODIFIER_TYPE);
|
||||
}
|
||||
|
||||
|
||||
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)
|
||||
{
|
||||
|
||||
(* G_OBJECT_CLASS (parent_class)->finalize) (object);
|
||||
}
|
||||
|
||||
static gchar *
|
||||
convert_keysym_state_to_string (guint keysym,
|
||||
GdkModifierType state)
|
||||
{
|
||||
if (keysym == 0)
|
||||
return g_strdup (_("Disabled"));
|
||||
else
|
||||
return gtk_accelerator_name (keysym, state);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
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;
|
||||
|
||||
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);
|
||||
|
||||
switch (param_id)
|
||||
{
|
||||
case PROP_ACCEL_KEY:
|
||||
egg_cell_renderer_keys_set_accelerator (keys,
|
||||
g_value_get_uint (value),
|
||||
keys->accel_mask);
|
||||
break;
|
||||
|
||||
case PROP_ACCEL_MASK:
|
||||
egg_cell_renderer_keys_set_accelerator (keys,
|
||||
keys->accel_key,
|
||||
g_value_get_flags (value));
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_modifier (guint keycode)
|
||||
{
|
||||
gint i;
|
||||
gint map_size;
|
||||
XModifierKeymap *mod_keymap;
|
||||
gboolean retval = FALSE;
|
||||
|
||||
mod_keymap = XGetModifierMapping (gdk_display);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
static GdkFilterReturn
|
||||
grab_key_filter (GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data)
|
||||
{
|
||||
XEvent *xevent = (XEvent *)gdk_xevent;
|
||||
guint keycode, state;
|
||||
char buf[10];
|
||||
KeySym keysym;
|
||||
EggCellRendererKeys *keys;
|
||||
char *path;
|
||||
gboolean edited;
|
||||
|
||||
if (xevent->type != KeyPress)
|
||||
return GDK_FILTER_CONTINUE;
|
||||
|
||||
keys = EGG_CELL_RENDERER_KEYS (data);
|
||||
|
||||
keycode = xevent->xkey.keycode;
|
||||
|
||||
if (is_modifier (keycode))
|
||||
return GDK_FILTER_CONTINUE;
|
||||
|
||||
edited = FALSE;
|
||||
|
||||
state = xevent->xkey.state & USED_MODS;
|
||||
|
||||
XLookupString ((XKeyEvent*)xevent, buf, sizeof (buf), &keysym, NULL);
|
||||
|
||||
if (state == 0 && keysym == GDK_Escape)
|
||||
goto out; /* cancel */
|
||||
|
||||
/* clear the accelerator on Backspace */
|
||||
if (keys->edit_key != 0 &&
|
||||
state == 0 &&
|
||||
keysym == GDK_BackSpace)
|
||||
keysym = 0;
|
||||
|
||||
edited = TRUE;
|
||||
|
||||
out:
|
||||
path = g_strdup (g_object_get_data (G_OBJECT (keys->edit_widget),
|
||||
EGG_CELL_RENDERER_TEXT_PATH));
|
||||
|
||||
gdk_keyboard_ungrab (xevent->xkey.time);
|
||||
gdk_pointer_ungrab (xevent->xkey.time);
|
||||
|
||||
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;
|
||||
keys->filter_window = NULL;
|
||||
|
||||
if (edited)
|
||||
g_signal_emit_by_name (G_OBJECT (keys), "keys_edited", path,
|
||||
keysym, state);
|
||||
|
||||
g_free (path);
|
||||
|
||||
return GDK_FILTER_REMOVE;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
gdk_window_remove_filter (keys->filter_window,
|
||||
grab_key_filter, data);
|
||||
}
|
||||
|
||||
static void
|
||||
pointless_eventbox_start_editing (GtkCellEditable *cell_editable,
|
||||
GdkEvent *event)
|
||||
{
|
||||
/* do nothing, because we are pointless */
|
||||
}
|
||||
|
||||
static void
|
||||
pointless_eventbox_cell_editable_init (GtkCellEditableIface *iface)
|
||||
{
|
||||
iface->start_editing = pointless_eventbox_start_editing;
|
||||
}
|
||||
|
||||
static GType
|
||||
pointless_eventbox_subclass_get_type (void)
|
||||
{
|
||||
static GType eventbox_type = 0;
|
||||
|
||||
if (!eventbox_type)
|
||||
{
|
||||
static const GTypeInfo eventbox_info =
|
||||
{
|
||||
sizeof (GtkEventBoxClass),
|
||||
NULL, /* base_init */
|
||||
NULL, /* base_finalize */
|
||||
NULL,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GtkEventBox),
|
||||
0, /* n_preallocs */
|
||||
(GInstanceInitFunc) NULL,
|
||||
};
|
||||
|
||||
static const GInterfaceInfo cell_editable_info = {
|
||||
(GInterfaceInitFunc) pointless_eventbox_cell_editable_init,
|
||||
NULL, NULL };
|
||||
|
||||
eventbox_type = g_type_register_static (GTK_TYPE_EVENT_BOX, "EggCellEditableEventBox", &eventbox_info, 0);
|
||||
|
||||
g_type_add_interface_static (eventbox_type,
|
||||
GTK_TYPE_CELL_EDITABLE,
|
||||
&cell_editable_info);
|
||||
}
|
||||
|
||||
return eventbox_type;
|
||||
}
|
||||
|
||||
static GtkCellEditable *
|
||||
egg_cell_renderer_keys_start_editing (GtkCellRenderer *cell,
|
||||
GdkEvent *event,
|
||||
GtkWidget *widget,
|
||||
const gchar *path,
|
||||
GdkRectangle *background_area,
|
||||
GdkRectangle *cell_area,
|
||||
GtkCellRendererState flags)
|
||||
{
|
||||
GtkCellRendererText *celltext;
|
||||
EggCellRendererKeys *keys;
|
||||
GtkWidget *label;
|
||||
GtkWidget *eventbox;
|
||||
|
||||
celltext = GTK_CELL_RENDERER_TEXT (cell);
|
||||
keys = EGG_CELL_RENDERER_KEYS (cell);
|
||||
|
||||
/* If the cell isn't editable we return NULL. */
|
||||
if (celltext->editable == FALSE)
|
||||
return NULL;
|
||||
|
||||
g_return_val_if_fail (widget->window != NULL, NULL);
|
||||
|
||||
if (gdk_keyboard_grab (widget->window, FALSE,
|
||||
gdk_event_get_time (event)) != GDK_GRAB_SUCCESS)
|
||||
return NULL;
|
||||
|
||||
if (gdk_pointer_grab (widget->window, FALSE,
|
||||
GDK_BUTTON_PRESS_MASK,
|
||||
FALSE, NULL,
|
||||
gdk_event_get_time (event)) != GDK_GRAB_SUCCESS)
|
||||
{
|
||||
gdk_keyboard_ungrab (gdk_event_get_time (event));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
keys->filter_window = widget->window;
|
||||
|
||||
gdk_window_add_filter (keys->filter_window, grab_key_filter, keys);
|
||||
|
||||
eventbox = g_object_new (pointless_eventbox_subclass_get_type (),
|
||||
NULL);
|
||||
keys->edit_widget = eventbox;
|
||||
g_object_add_weak_pointer (G_OBJECT (keys->edit_widget),
|
||||
(void**) &keys->edit_widget);
|
||||
|
||||
label = gtk_label_new (NULL);
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
|
||||
|
||||
gtk_widget_modify_bg (eventbox, GTK_STATE_NORMAL,
|
||||
&widget->style->bg[GTK_STATE_SELECTED]);
|
||||
|
||||
gtk_widget_modify_fg (label, GTK_STATE_NORMAL,
|
||||
&widget->style->fg[GTK_STATE_SELECTED]);
|
||||
|
||||
if (keys->accel_key != 0)
|
||||
gtk_label_set_markup (GTK_LABEL (label),
|
||||
_("Type a new accelerator, or press Backspace to clear"));
|
||||
else
|
||||
gtk_label_set_text (GTK_LABEL (label),
|
||||
_("Type a new accelerator"));
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (eventbox), label);
|
||||
|
||||
g_object_set_data_full (G_OBJECT (keys->edit_widget), EGG_CELL_RENDERER_TEXT_PATH,
|
||||
g_strdup (path), g_free);
|
||||
|
||||
gtk_widget_show_all (keys->edit_widget);
|
||||
|
||||
g_signal_connect (G_OBJECT (keys->edit_widget), "unrealize",
|
||||
G_CALLBACK (ungrab_stuff), keys);
|
||||
|
||||
keys->edit_key = keys->accel_key;
|
||||
keys->edit_mask = keys->accel_mask;
|
||||
|
||||
return GTK_CELL_EDITABLE (keys->edit_widget);
|
||||
}
|
||||
|
||||
void
|
||||
egg_cell_renderer_keys_set_accelerator (EggCellRendererKeys *keys,
|
||||
guint keyval,
|
||||
GdkModifierType mask)
|
||||
{
|
||||
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;
|
||||
|
||||
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;
|
||||
}
|
||||
g_object_thaw_notify (G_OBJECT (keys));
|
||||
|
||||
if (changed)
|
||||
{
|
||||
/* sync string to the key values */
|
||||
celltext = GTK_CELL_RENDERER_TEXT (keys);
|
||||
text = convert_keysym_state_to_string (keys->accel_key, keys->accel_mask);
|
||||
g_object_set (keys, "text", text, NULL);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
egg_cell_renderer_keys_get_accelerator (EggCellRendererKeys *keys,
|
||||
guint *keyval,
|
||||
GdkModifierType *mask)
|
||||
{
|
||||
g_return_if_fail (EGG_IS_CELL_RENDERER_KEYS (keys));
|
||||
|
||||
if (keyval)
|
||||
*keyval = keys->accel_key;
|
||||
|
||||
if (mask)
|
||||
*mask = keys->accel_mask;
|
||||
}
|
73
capplets/keybindings/eggcellrendererkeys.h
Normal file
73
capplets/keybindings/eggcellrendererkeys.h
Normal file
|
@ -0,0 +1,73 @@
|
|||
/* gtkcellrendererkeybinding.h
|
||||
* Copyright (C) 2000 Red Hat, Inc., Jonathan Blandford <jrb@redhat.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __EGG_CELL_RENDERER_KEYS_H__
|
||||
#define __EGG_CELL_RENDERER_KEYS_H__
|
||||
|
||||
#include <gtk/gtkcellrenderertext.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define EGG_TYPE_CELL_RENDERER_KEYS (egg_cell_renderer_keys_get_type ())
|
||||
#define EGG_CELL_RENDERER_KEYS(obj) (GTK_CHECK_CAST ((obj), EGG_TYPE_CELL_RENDERER_KEYS, EggCellRendererKeys))
|
||||
#define EGG_CELL_RENDERER_KEYS_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EGG_TYPE_CELL_RENDERER_KEYS, EggCellRendererKeysClass))
|
||||
#define EGG_IS_CELL_RENDERER_KEYS(obj) (GTK_CHECK_TYPE ((obj), EGG_TYPE_CELL_RENDERER_KEYS))
|
||||
#define EGG_IS_CELL_RENDERER_KEYS_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), EGG_TYPE_CELL_RENDERER_KEYS))
|
||||
#define EGG_CELL_RENDERER_KEYS_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), EGG_TYPE_CELL_RENDERER_KEYS, EggCellRendererKeysClass))
|
||||
|
||||
typedef struct _EggCellRendererKeys EggCellRendererKeys;
|
||||
typedef struct _EggCellRendererKeysClass EggCellRendererKeysClass;
|
||||
|
||||
struct _EggCellRendererKeys
|
||||
{
|
||||
GtkCellRendererText parent;
|
||||
guint accel_key;
|
||||
GdkModifierType accel_mask;
|
||||
GtkWidget *edit_widget;
|
||||
GdkWindow *filter_window;
|
||||
guint edit_key;
|
||||
GdkModifierType edit_mask;
|
||||
};
|
||||
|
||||
struct _EggCellRendererKeysClass
|
||||
{
|
||||
GtkCellRendererTextClass parent_class;
|
||||
|
||||
void (* keys_edited) (EggCellRendererKeys *keys,
|
||||
guint keyval,
|
||||
GdkModifierType mask);
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
||||
#endif /* __GTK_CELL_RENDERER_KEYS_H__ */
|
522
capplets/keybindings/gnome-keybinding-properties.c
Normal file
522
capplets/keybindings/gnome-keybinding-properties.c
Normal file
|
@ -0,0 +1,522 @@
|
|||
#include <config.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <gconf/gconf-client.h>
|
||||
#include <glade/glade.h>
|
||||
|
||||
#include "theme-common.h"
|
||||
#include "capplet-util.h"
|
||||
#include "eggcellrendererkeys.h"
|
||||
#include "activate-settings-daemon.h"
|
||||
|
||||
#define LABEL_DATA "gnome-keybinding-properties-label"
|
||||
|
||||
/* FIXME: We currnetly leak the KeyEntry structures in the Model every time it
|
||||
* changes
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
DESCRIPTION_COLUMN,
|
||||
KEYENTRY_COLUMN,
|
||||
N_COLUMNS
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *gconf_key;
|
||||
guint keyval;
|
||||
GdkModifierType mask;
|
||||
gboolean editable;
|
||||
GtkTreeModel *model;
|
||||
guint gconf_cnxn;
|
||||
} KeyEntry;
|
||||
|
||||
GList *signals = NULL;
|
||||
|
||||
static GladeXML *
|
||||
create_dialog (void)
|
||||
{
|
||||
GladeXML *dialog;
|
||||
|
||||
dialog = glade_xml_new ("gnome-keybinding-properties.glade", "gnome-keybinding-dialog", NULL);
|
||||
if (dialog == NULL)
|
||||
dialog = glade_xml_new (GNOMECC_DATA_DIR "/interfaces/gnome-mouse-properties.glade", "gnome-keybinding-dialog", NULL);
|
||||
|
||||
return dialog;
|
||||
}
|
||||
|
||||
static char*
|
||||
binding_name (guint keyval,
|
||||
GdkModifierType mask,
|
||||
gboolean translate)
|
||||
{
|
||||
if (keyval != 0)
|
||||
return gtk_accelerator_name (keyval, mask);
|
||||
else
|
||||
return translate ? g_strdup (_("Disabled")) : g_strdup ("disabled");
|
||||
}
|
||||
|
||||
static void
|
||||
accel_set_func (GtkTreeViewColumn *tree_column,
|
||||
GtkCellRenderer *cell,
|
||||
GtkTreeModel *model,
|
||||
GtkTreeIter *iter,
|
||||
gpointer data)
|
||||
{
|
||||
KeyEntry *key_entry;
|
||||
|
||||
gtk_tree_model_get (model, iter,
|
||||
KEYENTRY_COLUMN, &key_entry,
|
||||
-1);
|
||||
|
||||
if (key_entry == NULL)
|
||||
g_object_set (G_OBJECT (cell),
|
||||
"visible", FALSE,
|
||||
NULL);
|
||||
else if (! key_entry->editable)
|
||||
g_object_set (G_OBJECT (cell),
|
||||
"visible", TRUE,
|
||||
"editable", FALSE,
|
||||
"accel_key", key_entry->keyval,
|
||||
"accel_mask", key_entry->mask,
|
||||
"style", PANGO_STYLE_ITALIC,
|
||||
NULL);
|
||||
else
|
||||
g_object_set (G_OBJECT (cell),
|
||||
"visible", TRUE,
|
||||
"editable", TRUE,
|
||||
"accel_key", key_entry->keyval,
|
||||
"accel_mask", key_entry->mask,
|
||||
"style", PANGO_STYLE_NORMAL,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
keybinding_key_changed (GConfClient *client,
|
||||
guint cnxn_id,
|
||||
GConfEntry *entry,
|
||||
gpointer user_data)
|
||||
{
|
||||
KeyEntry *key_entry;
|
||||
const gchar *key_value;
|
||||
GtkTreePath *path;
|
||||
GtkTreeIter iter;
|
||||
gboolean valid;
|
||||
|
||||
key_entry = (KeyEntry *)user_data;
|
||||
key_value = gconf_value_get_string (entry->value);
|
||||
|
||||
if (key_value != NULL)
|
||||
{
|
||||
gtk_accelerator_parse (key_value, &key_entry->keyval, &key_entry->mask);
|
||||
}
|
||||
else
|
||||
{
|
||||
key_entry->keyval = 0;
|
||||
key_entry->mask = 0;
|
||||
}
|
||||
|
||||
path = gtk_tree_path_new_first ();
|
||||
for (valid = gtk_tree_model_get_iter_first (key_entry->model, &iter);
|
||||
valid;
|
||||
valid = gtk_tree_model_iter_next (key_entry->model, &iter))
|
||||
{
|
||||
KeyEntry *tmp_key_entry;
|
||||
|
||||
gtk_tree_model_get (key_entry->model, &iter,
|
||||
KEYENTRY_COLUMN, &tmp_key_entry,
|
||||
-1);
|
||||
if (tmp_key_entry == key_entry)
|
||||
{
|
||||
gtk_tree_model_row_changed (key_entry->model, path, &iter);
|
||||
}
|
||||
gtk_tree_path_next (path);
|
||||
}
|
||||
gtk_tree_path_free (path);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
clear_old_model (GtkWidget *tree_view)
|
||||
{
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter;
|
||||
KeyEntry *key_entry;
|
||||
gboolean valid;
|
||||
GConfClient *client;
|
||||
|
||||
client = gconf_client_get_default ();
|
||||
model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
|
||||
if (model == NULL)
|
||||
return;
|
||||
|
||||
g_object_ref (model);
|
||||
gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), NULL);
|
||||
|
||||
for (valid = gtk_tree_model_get_iter_first (model, &iter);
|
||||
valid;
|
||||
valid = gtk_tree_model_iter_next (model, &iter))
|
||||
{
|
||||
gtk_tree_model_get (model, &iter,
|
||||
KEYENTRY_COLUMN, &key_entry,
|
||||
-1);
|
||||
gconf_client_notify_remove (client, key_entry->gconf_cnxn);
|
||||
g_free (key_entry->gconf_key);
|
||||
g_free (key_entry);
|
||||
}
|
||||
|
||||
g_object_unref (model);
|
||||
}
|
||||
|
||||
static void
|
||||
setup_tree (GladeXML *dialog,
|
||||
GSList *keys_list)
|
||||
{
|
||||
GConfClient *client;
|
||||
GtkTreeModel *model;
|
||||
GSList *list;
|
||||
gint i = 0;
|
||||
|
||||
clear_old_model (WID ("shortcut_treeview"));
|
||||
client = gconf_client_get_default ();
|
||||
model = (GtkTreeModel *) gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER);
|
||||
|
||||
for (list = keys_list; list; list = list->next)
|
||||
{
|
||||
GConfEntry *entry;
|
||||
GConfSchema *schema = NULL;
|
||||
KeyEntry *key_entry;
|
||||
GError *error = NULL;
|
||||
GtkTreeIter iter;
|
||||
gchar *key_string;
|
||||
gchar *key_value;
|
||||
|
||||
key_string = g_strdup ((gchar *) list->data);
|
||||
entry = gconf_client_get_entry (client,
|
||||
key_string,
|
||||
NULL,
|
||||
TRUE,
|
||||
&error);
|
||||
if (error || entry == NULL)
|
||||
{
|
||||
/* We don't actually want to popup a dialog */
|
||||
g_free (key_string);
|
||||
if (error)
|
||||
g_error_free (error);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (entry->schema_name)
|
||||
schema = gconf_client_get_schema (client, entry->schema_name, &error);
|
||||
|
||||
if (error || schema == NULL)
|
||||
{
|
||||
/* We don't actually want to popup a dialog */
|
||||
g_free (key_string);
|
||||
if (error)
|
||||
g_error_free (error);
|
||||
continue;
|
||||
}
|
||||
|
||||
key_value = gconf_client_get_string (client, key_string, &error);
|
||||
|
||||
key_entry = g_new0 (KeyEntry, 1);
|
||||
key_entry->gconf_key = key_string;
|
||||
key_entry->editable = TRUE;
|
||||
key_entry->model = model;
|
||||
gconf_client_add_dir (client, key_string, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
|
||||
key_entry->gconf_cnxn = gconf_client_notify_add (client,
|
||||
key_string,
|
||||
(GConfClientNotifyFunc) &keybinding_key_changed,
|
||||
key_entry, NULL, NULL);
|
||||
if (key_value)
|
||||
{
|
||||
gtk_accelerator_parse (key_value, &key_entry->keyval, &key_entry->mask);
|
||||
}
|
||||
else
|
||||
{
|
||||
key_entry->keyval = 0;
|
||||
key_entry->mask = 0;
|
||||
}
|
||||
g_free (key_value);
|
||||
|
||||
i++;
|
||||
gtk_list_store_append (GTK_LIST_STORE (model), &iter);
|
||||
if (schema->short_desc)
|
||||
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
|
||||
DESCRIPTION_COLUMN, schema->short_desc,
|
||||
KEYENTRY_COLUMN, key_entry,
|
||||
-1);
|
||||
else
|
||||
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
|
||||
DESCRIPTION_COLUMN, _("<Unknown Action>"),
|
||||
KEYENTRY_COLUMN, key_entry,
|
||||
-1);
|
||||
gconf_entry_free (entry);
|
||||
gconf_schema_free (schema);
|
||||
}
|
||||
|
||||
if (i > 8)
|
||||
{
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (WID ("actions_swindow")),
|
||||
GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
|
||||
}
|
||||
|
||||
if (i == 0)
|
||||
{
|
||||
gtk_widget_hide (WID ("shortcuts_frame"));
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_widget_show (WID ("shortcuts_frame"));
|
||||
}
|
||||
gtk_tree_view_set_model (GTK_TREE_VIEW (WID ("shortcut_treeview")), model);
|
||||
}
|
||||
|
||||
static void
|
||||
keybinding_key_list_changed (GConfClient *client,
|
||||
guint cnxn_id,
|
||||
GConfEntry *entry,
|
||||
gpointer user_data)
|
||||
{
|
||||
GladeXML *dialog;
|
||||
GSList *value_list, *list;
|
||||
GSList *string_list = NULL;
|
||||
|
||||
dialog = user_data;
|
||||
|
||||
if (strcmp (entry->key, "/apps/gnome_keybinding_properties/keybinding_key_list"))
|
||||
return;
|
||||
|
||||
value_list = gconf_value_get_list (entry->value);
|
||||
for (list = value_list; list; list = list->next)
|
||||
{
|
||||
GConfValue *value = list->data;
|
||||
string_list = g_slist_append (string_list, (char *)gconf_value_get_string (value));
|
||||
}
|
||||
setup_tree (dialog, string_list);
|
||||
g_slist_free (string_list);
|
||||
}
|
||||
|
||||
static void
|
||||
key_theme_changed (GConfClient *client,
|
||||
guint cnxn_id,
|
||||
GConfEntry *entry,
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkWidget *omenu = (GtkWidget *) user_data;
|
||||
GtkWidget *menu;
|
||||
GtkWidget *menu_item;
|
||||
GConfValue *value;
|
||||
const gchar *new_key_theme;
|
||||
GList *list;
|
||||
gint i = 0;
|
||||
|
||||
menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (omenu));
|
||||
value = gconf_entry_get_value (entry);
|
||||
new_key_theme = gconf_value_get_string (value);
|
||||
|
||||
for (list = GTK_MENU_SHELL (menu)->children; list; list = list->next, i++)
|
||||
{
|
||||
gchar *text;
|
||||
|
||||
menu_item = GTK_WIDGET (list->data);
|
||||
text = g_object_get_data (G_OBJECT (menu_item), LABEL_DATA);
|
||||
if (! strcmp (text, new_key_theme))
|
||||
{
|
||||
if (gtk_option_menu_get_history (GTK_OPTION_MENU (omenu)) != i)
|
||||
gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* We didn't find our theme. Add it to our list. */
|
||||
menu_item = gtk_menu_item_new_with_label (new_key_theme);
|
||||
g_object_set_data_full (G_OBJECT (menu_item), LABEL_DATA, g_strdup (new_key_theme), g_free);
|
||||
gtk_widget_show (menu_item);
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
|
||||
gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), i);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
accel_edited_callback (GtkCellRendererText *cell,
|
||||
const char *path_string,
|
||||
guint keyval,
|
||||
GdkModifierType mask,
|
||||
gpointer data)
|
||||
{
|
||||
GtkTreeView *view = (GtkTreeView *)data;
|
||||
GtkTreeModel *model;
|
||||
GtkTreePath *path = gtk_tree_path_new_from_string (path_string);
|
||||
GtkTreeIter iter;
|
||||
KeyEntry *key_entry;
|
||||
GError *err = NULL;
|
||||
char *str;
|
||||
|
||||
model = gtk_tree_view_get_model (view);
|
||||
gtk_tree_model_get_iter (model, &iter, path);
|
||||
gtk_tree_model_get (model, &iter,
|
||||
KEYENTRY_COLUMN, &key_entry,
|
||||
-1);
|
||||
|
||||
/* sanity check */
|
||||
if (key_entry == NULL)
|
||||
return;
|
||||
|
||||
str = binding_name (keyval, mask, FALSE);
|
||||
|
||||
gconf_client_set_string (gconf_client_get_default(),
|
||||
key_entry->gconf_key,
|
||||
str,
|
||||
&err);
|
||||
g_free (str);
|
||||
|
||||
if (err != NULL)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view))),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
|
||||
GTK_MESSAGE_WARNING,
|
||||
GTK_BUTTONS_OK,
|
||||
"Error setting new accelerator in configuration database: %s\n",
|
||||
err->message);
|
||||
gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
|
||||
gtk_widget_destroy (dialog);
|
||||
g_error_free (err);
|
||||
key_entry->editable = FALSE;
|
||||
}
|
||||
|
||||
gtk_tree_path_free (path);
|
||||
}
|
||||
|
||||
static void
|
||||
setup_dialog (GladeXML *dialog)
|
||||
{
|
||||
GConfClient *client;
|
||||
GList *key_theme_list;
|
||||
GtkCellRenderer *renderer;
|
||||
GSList *keys_list;
|
||||
GtkWidget *widget;
|
||||
|
||||
client = gconf_client_get_default ();
|
||||
|
||||
key_theme_list = theme_common_get_list ();
|
||||
|
||||
if (key_theme_list == NULL)
|
||||
{
|
||||
GtkWidget *msg_dialog = gtk_message_dialog_new (NULL, 0,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_OK,
|
||||
_("Unable to find any keyboard themes. This means your GTK+ "
|
||||
"installation has been incompletely installed."));
|
||||
gtk_dialog_run (GTK_DIALOG (msg_dialog));
|
||||
gtk_widget_destroy (msg_dialog);
|
||||
|
||||
gtk_widget_hide (WID ("shortcut_hbox"));
|
||||
}
|
||||
else
|
||||
{
|
||||
GtkWidget *omenu;
|
||||
GtkWidget *menu;
|
||||
GtkWidget *menu_item;
|
||||
GList *list;
|
||||
|
||||
omenu = WID ("key_theme_omenu");
|
||||
menu = gtk_menu_new ();
|
||||
for (list = key_theme_list; list; list = list->next)
|
||||
{
|
||||
ThemeInfo *info = list->data;
|
||||
|
||||
/* Make sure we have a default */
|
||||
if (!strcasecmp (info->name, "default"))
|
||||
{
|
||||
menu_item = gtk_menu_item_new_with_label (info->name);
|
||||
g_object_set_data_full (G_OBJECT (menu_item), LABEL_DATA, g_strdup (info->name), g_free);
|
||||
gtk_widget_show (menu_item);
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
|
||||
}
|
||||
}
|
||||
for (list = key_theme_list; list; list = list->next)
|
||||
{
|
||||
ThemeInfo *info = list->data;
|
||||
|
||||
if (strcasecmp (info->name, "default"))
|
||||
{
|
||||
menu_item = gtk_menu_item_new_with_label (info->name);
|
||||
g_object_set_data_full (G_OBJECT (menu_item), LABEL_DATA, g_strdup (info->name), g_free);
|
||||
gtk_widget_show (menu_item);
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
|
||||
}
|
||||
}
|
||||
gtk_widget_show (menu);
|
||||
gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
|
||||
|
||||
gconf_client_add_dir (client, "/desktop/gnome/interface", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
|
||||
gconf_client_notify_add (client,
|
||||
"/desktop/gnome/interface/gtk_key_theme",
|
||||
(GConfClientNotifyFunc) &key_theme_changed,
|
||||
omenu, NULL, NULL);
|
||||
}
|
||||
|
||||
|
||||
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (WID ("shortcut_treeview")),
|
||||
-1,
|
||||
_("_Action"),
|
||||
gtk_cell_renderer_text_new (),
|
||||
"text", DESCRIPTION_COLUMN,
|
||||
NULL);
|
||||
renderer = (GtkCellRenderer *) g_object_new (EGG_TYPE_CELL_RENDERER_KEYS,
|
||||
"editable", TRUE,
|
||||
NULL);
|
||||
g_signal_connect (G_OBJECT (renderer),
|
||||
"keys_edited",
|
||||
G_CALLBACK (accel_edited_callback),
|
||||
WID ("shortcut_treeview"));
|
||||
gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (WID ("shortcut_treeview")),
|
||||
-1, _("_Shortcut"),
|
||||
renderer,
|
||||
accel_set_func, NULL, NULL);
|
||||
gconf_client_add_dir (client, "/apps/gnome_keybinding_properties", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
|
||||
gconf_client_notify_add (client,
|
||||
"/apps/gnome_keybinding_properties/keybinding_key_list",
|
||||
(GConfClientNotifyFunc) &keybinding_key_list_changed,
|
||||
dialog, NULL, NULL);
|
||||
keys_list = gconf_client_get_list (client, "/apps/gnome_keybinding_properties/keybinding_key_list", GCONF_VALUE_STRING, NULL);
|
||||
setup_tree (dialog, keys_list);
|
||||
|
||||
widget = WID ("gnome-keybinding-dialog");
|
||||
gtk_widget_show (widget);
|
||||
|
||||
g_signal_connect (G_OBJECT (widget), "response", gtk_main_quit, NULL);
|
||||
g_signal_connect (G_OBJECT (widget), "close", gtk_main_quit, NULL);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
GladeXML *dialog;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
|
||||
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
||||
textdomain (GETTEXT_PACKAGE);
|
||||
|
||||
gnome_program_init (argv[0], VERSION, LIBGNOMEUI_MODULE, argc, argv,
|
||||
GNOME_PARAM_APP_DATADIR, GNOMECC_DATA_DIR,
|
||||
NULL);
|
||||
|
||||
activate_settings_daemon ();
|
||||
|
||||
dialog = create_dialog ();
|
||||
setup_dialog (dialog);
|
||||
|
||||
gtk_main ();
|
||||
|
||||
return 0;
|
||||
}
|
186
capplets/keybindings/gnome-keybinding-properties.glade
Normal file
186
capplets/keybindings/gnome-keybinding-properties.glade
Normal file
|
@ -0,0 +1,186 @@
|
|||
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
|
||||
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
|
||||
|
||||
<glade-interface>
|
||||
|
||||
<widget class="GtkDialog" id="gnome-keybinding-dialog">
|
||||
<property name="visible">False</property>
|
||||
<property name="title" translatable="yes">Keyboard Shortcuts</property>
|
||||
<property name="type">GTK_WINDOW_TOPLEVEL</property>
|
||||
<property name="window_position">GTK_WIN_POS_NONE</property>
|
||||
<property name="modal">False</property>
|
||||
<property name="resizable">True</property>
|
||||
<property name="destroy_with_parent">False</property>
|
||||
<property name="has_separator">False</property>
|
||||
|
||||
<child internal-child="vbox">
|
||||
<widget class="GtkVBox" id="shortcut_dialog">
|
||||
<property name="border_width">2</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child internal-child="action_area">
|
||||
<widget class="GtkHButtonBox" id="dialog-action_area1">
|
||||
<property name="border_width">5</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="layout_style">GTK_BUTTONBOX_END</property>
|
||||
<property name="spacing">10</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="closebutton1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label">gtk-close</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="response_id">-7</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">GTK_PACK_END</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox3">
|
||||
<property name="border_width">8</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">8</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkHBox" id="shortcut_hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">4</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label8">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Keyboard _Navigation scheme for use in applications:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="mnemonic_widget">key_theme_omenu</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkOptionMenu" id="key_theme_omenu">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="history">-1</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkFrame" id="shortcuts_frame">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Desktop Shortcuts:</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="shadow_type">GTK_SHADOW_NONE</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox4">
|
||||
<property name="border_width">4</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">4</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkScrolledWindow" id="actions_swindow">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
|
||||
<property name="vscrollbar_policy">GTK_POLICY_NEVER</property>
|
||||
<property name="shadow_type">GTK_SHADOW_NONE</property>
|
||||
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkTreeView" id="shortcut_treeview">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="headers_visible">True</property>
|
||||
<property name="rules_hint">True</property>
|
||||
<property name="reorderable">False</property>
|
||||
<property name="enable_search">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label9">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">To assign a shortcut to an action, click in the shortcut column and press the key combination you want to associate with it.</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
</glade-interface>
|
7
capplets/keybindings/keybinding.desktop.in
Normal file
7
capplets/keybindings/keybinding.desktop.in
Normal file
|
@ -0,0 +1,7 @@
|
|||
[Desktop Entry]
|
||||
_Name=Keybinding
|
||||
_Comment=Keybinding Properties
|
||||
Exec=gnome-keybinding-properties
|
||||
Terminal=0
|
||||
Type=Application
|
||||
Categories=Application;Settings;
|
|
@ -197,6 +197,7 @@ capplets/desktop-links/Sawfish/Makefile
|
|||
capplets/file-types/Makefile
|
||||
capplets/file-types/libuuid/Makefile
|
||||
capplets/font/Makefile
|
||||
capplets/keybindings/Makefile
|
||||
capplets/keyboard/Makefile
|
||||
capplets/mouse/Makefile
|
||||
capplets/screensaver/Makefile
|
||||
|
@ -204,4 +205,5 @@ capplets/sound/Makefile
|
|||
capplets/theme-switcher/Makefile
|
||||
capplets/theme-switcher/control/Makefile
|
||||
capplets/ui-properties/Makefile
|
||||
schemas/Makefile
|
||||
libsounds/Makefile])
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2002-03-17 Jonathan Blandford <jrb@redhat.com>
|
||||
|
||||
* gnome-settings-xsettings.c: Add keybindingtheme
|
||||
|
||||
2002-03-17 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* factory.c: Move include <config.h> to the top.
|
||||
|
@ -36,7 +40,6 @@
|
|||
register it with bonobo-activation. Still has a main loop that can
|
||||
be run normally to launch the settings daemon.
|
||||
|
||||
>>>>>>> 1.26
|
||||
2002-03-06 Miles Lane <miles@megapathdsl.net>
|
||||
|
||||
* gnome-settings-daemon.c -- Correct the gnome_program_init()
|
||||
|
|
|
@ -59,6 +59,8 @@ static TranslationEntry translations [] = {
|
|||
translate_string_string },
|
||||
{ "/desktop/gnome/interface/gtk_theme", "Net/ThemeName", GCONF_VALUE_STRING,
|
||||
translate_string_string },
|
||||
{ "/desktop/gnome/interface/gtk_key_theme", "Gtk/KeyThemeName", GCONF_VALUE_STRING,
|
||||
translate_string_string },
|
||||
{ "/desktop/gnome/interface/font_name", "Gtk/FontName", GCONF_VALUE_STRING,
|
||||
translate_string_string }
|
||||
};
|
||||
|
|
2
schemas/.cvsignore
Normal file
2
schemas/.cvsignore
Normal file
|
@ -0,0 +1,2 @@
|
|||
Makefile
|
||||
Makefile.in
|
|
@ -1,9 +1,10 @@
|
|||
schemadir = @GCONF_SCHEMA_FILE_DIR@
|
||||
schema_DATA = peripherals.schemas background.schemas screensaver.schemas
|
||||
schema_DATA = \
|
||||
apps_gnome_keybinding_properties.schemas
|
||||
|
||||
schema_source_data = $(foreach file, $(schema_DATA), $(srcdir)/$(file))
|
||||
|
||||
install-data-local: $(schema_installed_data)
|
||||
GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(schema_source_data)
|
||||
|
||||
EXTRA_DIST=$(schema_DATA)
|
||||
EXTRA_DIST=$(schema_DATA)
|
||||
|
|
19
schemas/apps_gnome_keybinding_properties.schemas
Normal file
19
schemas/apps_gnome_keybinding_properties.schemas
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0"?>
|
||||
<gconfschemafile>
|
||||
<schemalist>
|
||||
<schema>
|
||||
<applyto>/apps/gnome_keybinding_properties/keybinding_key_list</applyto>
|
||||
<key>/schemas/apps/gnome_keybinding_properties/keybinding_key_list</key>
|
||||
<owner>gnome-control-center</owner>
|
||||
<type>list</type>
|
||||
<list_type>string</list_type>
|
||||
<default>[/apps/panel/global/run-key,/apps/panel/global/menu-key,/apps/panel/global/screenshot-key,/apps/panel/global/window-screenshot-key]</default>
|
||||
<locale name="C">
|
||||
<short>List of GConf keys that the keybinding dialog can configure</short>
|
||||
<long>List of GConf keys that the keybinding dialog can
|
||||
configure. The keys pointed must be keys that use the standard
|
||||
keybinding storage scheme.</long>
|
||||
</locale>
|
||||
</schema>
|
||||
</schemalist>
|
||||
</gconfschemafile>
|
|
@ -1,105 +0,0 @@
|
|||
<gconfschemafile>
|
||||
<schemalist>
|
||||
<schema>
|
||||
<key>/schemas/desktop/gnome/background/background_properties_test</key>
|
||||
<applyto>/desktop/gnome/background/background_properties_test</applyto>
|
||||
<owner>background-properties</owner>
|
||||
<type>string</type>
|
||||
<default>test</default>
|
||||
<locale name="C">
|
||||
<short>Test value to make sure gconf is set up properly</short>
|
||||
<long>Test value to make sure gconf is set up properly. Can be
|
||||
safely ignored.</long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<key>/schemas/desktop/gnome/background/enabled</key>
|
||||
<applyto>/desktop/gnome/background/enabled</applyto>
|
||||
<owner>background-properties</owner>
|
||||
<type>bool</type>
|
||||
<default>true</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<key>/schemas/desktop/gnome/background/wallpaper-enabled</key>
|
||||
<applyto>/desktop/gnome/background/wallpaper-enabled</applyto>
|
||||
<owner>background-properties</owner>
|
||||
<type>bool</type>
|
||||
<default>true</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<key>/schemas/desktop/gnome/background/wallpaper-type</key>
|
||||
<applyto>/desktop/gnome/background/wallpaper-type</applyto>
|
||||
<owner>background-properties</owner>
|
||||
<type>int</type>
|
||||
<default>1</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<key>/schemas/desktop/gnome/background/wallpaper-filename</key>
|
||||
<applyto>/desktop/gnome/background/wallpaper-filename</applyto>
|
||||
<owner>background-properties</owner>
|
||||
<type>string</type>
|
||||
<default>/home/hovinen/archive/XIMIAN-TranslucentWaves_1600x1200.png</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<key>/schemas/desktop/gnome/background/color1</key>
|
||||
<applyto>/desktop/gnome/background/color1</applyto>
|
||||
<owner>background-properties</owner>
|
||||
<type>string</type>
|
||||
<default>#39374b</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<key>/schemas/desktop/gnome/background/color2</key>
|
||||
<applyto>/desktop/gnome/background/color2</applyto>
|
||||
<owner>background-properties</owner>
|
||||
<type>string</type>
|
||||
<default>#42528f</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<key>/schemas/desktop/gnome/background/opacity</key>
|
||||
<applyto>/desktop/gnome/background/opacity</applyto>
|
||||
<owner>background-properties</owner>
|
||||
<type>int</type>
|
||||
<default>100</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<key>/schemas/desktop/gnome/background/orientation</key>
|
||||
<applyto>/desktop/gnome/background/orientation</applyto>
|
||||
<owner>background-properties</owner>
|
||||
<type>int</type>
|
||||
<default>0</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
</schemalist>
|
||||
</gconfschemafile>
|
||||
|
|
@ -1,163 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<gconfschemafile>
|
||||
<schemalist>
|
||||
<schema>
|
||||
<applyto>/desktop/gnome/peripherals/mouse/left_handed</applyto>
|
||||
<key>/schemas/desktop/gnome/peripherals/mouse/left_handed</key>
|
||||
<owner>gnome</owner>
|
||||
<type>bool</type>
|
||||
<default>true</default>
|
||||
<locale name="C">
|
||||
<short>Mouse button orientation</short>
|
||||
<long>Swap left and right mouse buttons for left-handed mice</long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<applyto>/desktop/gnome/peripherals/mouse/single_click</applyto>
|
||||
<key>/schemas/desktop/gnome/peripherals/mouse/single_click</key>
|
||||
<owner>gnome</owner>
|
||||
<type>bool</type>
|
||||
<default>true</default>
|
||||
<locale name="C">
|
||||
<short>Single Click</short>
|
||||
<long>Single click to open icons</long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<applyto>/desktop/gnome/peripherals/mouse/motion_acceleration</applyto>
|
||||
<key>/schemas/desktop/gnome/peripherals/mouse/motion_acceleration</key>
|
||||
<owner>gnome</owner>
|
||||
<type>float</type>
|
||||
<default>-1</default>
|
||||
<locale name="C">
|
||||
<short>Single Click</short>
|
||||
<long>Acceleration multiplier for mouse motion. A value of -1
|
||||
is the system default.</long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<applyto>/desktop/gnome/peripherals/mouse/motion_threshold</applyto>
|
||||
<key>/schemas/desktop/gnome/peripherals/mouse/motion_threshold</key>
|
||||
<owner>gnome</owner>
|
||||
<type>int</type>
|
||||
<default>-1</default>
|
||||
<locale name="C">
|
||||
<short>Motion Threshold</short>
|
||||
<long>Distance in pixels the pointer must move before
|
||||
accelerated mouse motion is activated. A value of -1 is the
|
||||
system default.</long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<applyto>/desktop/gnome/peripherals/mouse/drag_threshold</applyto>
|
||||
<key>/schemas/desktop/gnome/peripherals/mouse/drag_threshold</key>
|
||||
<owner>gnome</owner>
|
||||
<type>int</type>
|
||||
<default>8</default>
|
||||
<locale name="C">
|
||||
<short>Drag Threshold</short>
|
||||
<long>Distance before a drag is started</long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<applyto>/desktop/gnome/peripherals/mouse/double_click</applyto>
|
||||
<key>/schemas/desktop/gnome/peripherals/mouse/double_click</key>
|
||||
<owner>gnome</owner>
|
||||
<type>int</type>
|
||||
<default>400</default>
|
||||
<locale name="C">
|
||||
<short>Double Click Time</short>
|
||||
<long>Length of a double click</long>
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
<schema>
|
||||
<applyto>/desktop/gnome/peripherals/keyboard/repeat</applyto>
|
||||
<key>/schemas/desktop/gnome/peripherals/keyboard/repeat</key>
|
||||
<owner>gnome</owner>
|
||||
<type>bool</type>
|
||||
<default>true</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<applyto>/desktop/gnome/peripherals/keyboard/click</applyto>
|
||||
<key>/schemas/desktop/gnome/peripherals/keyboard/click</key>
|
||||
<owner>gnome</owner>
|
||||
<type>bool</type>
|
||||
<default>true</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<applyto>/desktop/gnome/peripherals/keyboard/rate</applyto>
|
||||
<key>/schemas/desktop/gnome/peripherals/keyboard/rate</key>
|
||||
<owner>gnome</owner>
|
||||
<type>int</type>
|
||||
<default>30</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<applyto>/desktop/gnome/peripherals/keyboard/delay</applyto>
|
||||
<key>/schemas/desktop/gnome/peripherals/keyboard/delay</key>
|
||||
<owner>gnome</owner>
|
||||
<type>int</type>
|
||||
<default>500</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<applyto>/desktop/gnome/peripherals/keyboard/clickvolume</applyto>
|
||||
<key>/schemas/desktop/gnome/peripherals/keyboard/clickvolume</key>
|
||||
<owner>gnome</owner>
|
||||
<type>int</type>
|
||||
<default>0</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<applyto>/desktop/gnome/peripherals/keyboard/bell_percent</applyto>
|
||||
<key>/schemas/desktop/gnome/peripherals/keyboard/bell_percent</key>
|
||||
<owner>gnome</owner>
|
||||
<type>int</type>
|
||||
<default>50</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<applyto>/desktop/gnome/peripherals/keyboard/bell_pitch</applyto>
|
||||
<key>/schemas/desktop/gnome/peripherals/keyboard/bell_pitch</key>
|
||||
<owner>gnome</owner>
|
||||
<type>int</type>
|
||||
<default>50</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<applyto>/desktop/gnome/peripherals/keyboard/bell_duration</applyto>
|
||||
<key>/schemas/desktop/gnome/peripherals/keyboard/bell_duration</key>
|
||||
<owner>gnome</owner>
|
||||
<type>int</type>
|
||||
<default>100</default>
|
||||
<locale name="C">
|
||||
<short></short>
|
||||
<long></long>
|
||||
</locale>
|
||||
</schema>
|
||||
</schemalist>
|
||||
</gconfschemafile>
|
|
@ -1,59 +0,0 @@
|
|||
<gconfschemafile>
|
||||
<schemalist>
|
||||
<schema>
|
||||
<key>/schemas/apps/screensaver/selection_mode</key>
|
||||
<applyto>/apps/screensaver/selection_mode</applyto>
|
||||
<owner>screensaver</owner>
|
||||
<type>int</type>
|
||||
<default>2</default>
|
||||
<locale name="C">
|
||||
<short>Current selection mode</short>
|
||||
<long>Selection mode to use in capplet [0-4]</long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<key>/schemas/apps/screensaver/use_dpms</key>
|
||||
<applyto>/apps/screensaver/use_dpms</applyto>
|
||||
<owner>screensaver</owner>
|
||||
<type>bool</type>
|
||||
<default>false</default>
|
||||
<locale name="C">
|
||||
<short>Enable DPMS</short>
|
||||
<long>Enable DPMS when starting screensaver</long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<key>/schemas/apps/screensaver/standby_time</key>
|
||||
<applyto>/apps/screensaver/standby_time</applyto>
|
||||
<owner>screensaver</owner>
|
||||
<type>int</type>
|
||||
<default>0</default>
|
||||
<locale name="C">
|
||||
<short>Time before standby</short>
|
||||
<long>Time to wait before setting computer to "standby"</long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<key>/schemas/apps/screensaver/suspend_time</key>
|
||||
<applyto>/apps/screensaver/suspend_time</applyto>
|
||||
<owner>screensaver</owner>
|
||||
<type>int</type>
|
||||
<default>0</default>
|
||||
<locale name="C">
|
||||
<short>Time before suspend</short>
|
||||
<long>Time to wait before setting computer to "suspend"</long>
|
||||
</locale>
|
||||
</schema>
|
||||
<schema>
|
||||
<key>/schemas/apps/screensaver/shutdown_time</key>
|
||||
<applyto>/apps/screensaver/shutdown_time</applyto>
|
||||
<owner>screensaver</owner>
|
||||
<type>int</type>
|
||||
<default>0</default>
|
||||
<locale name="C">
|
||||
<short>Time before shutdown</short>
|
||||
<long>Time to wait before shutting down computer</long>
|
||||
</locale>
|
||||
</schema>
|
||||
</schemalist>
|
||||
</gconfschemafile>
|
Loading…
Add table
Reference in a new issue