Change gnome2-* to gnome-* ditto ditto ditto ditto ditto ditto ditto ditto
Tue Apr 9 11:43:08 2002 Jonathan Blandford <jrb@gnome.org> * capplets/accessibility/keyboard/Makefile.am: Change gnome2-* to gnome-* * capplets/default-applications/Makefile.am: ditto * capplets/file-types/Makefile.am: ditto * capplets/font/Makefile.am: ditto * capplets/keyboard/Makefile.am: ditto * capplets/mouse/Makefile.am: ditto * capplets/sound/Makefile.am: ditto * capplets/theme-switcher/Makefile.am: ditto * capplets/ui-properties/Makefile.am: ditto * control-center/Makefile.am: ditto * gnome-settings-daemon/Makefile.am: ditto * gnome-keybinding-properties.c (setup_dialog): man, was this code silly. Also, themes are case sensitive. (is_metacity_running): Add support for metacity keybindings. This is off by default until I write code to actually detect metacity. Tue Apr 9 11:58:10 2002 Jonathan Blandford <jrb@gnome.org> * Makefile.am: Add commented out disk support until I finish the code.
This commit is contained in:
parent
5a1e076eed
commit
6f1fa592ec
26 changed files with 697 additions and 130 deletions
|
@ -1,3 +1,7 @@
|
|||
/* This program was written with lots of love under the GPL by Jonathan
|
||||
* Blandford <jrb@gnome.org>
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <string.h>
|
||||
|
@ -11,6 +15,10 @@
|
|||
#include "activate-settings-daemon.h"
|
||||
|
||||
#define LABEL_DATA "gnome-keybinding-properties-label"
|
||||
#define KEY_THEME_KEY "/desktop/gnome/interface/gtk_key_theme"
|
||||
#define KEY_LIST_KEY "/apps/gnome_keybinding_properties/keybinding_key_list"
|
||||
#define METACITY_KEY_LIST_KEY "/apps/metacity/general/configurable_keybinding_key_list"
|
||||
#define MAX_ELEMENTS_BEFORE_SCROLLING 8
|
||||
|
||||
enum
|
||||
{
|
||||
|
@ -31,6 +39,13 @@ typedef struct
|
|||
|
||||
GList *signals = NULL;
|
||||
|
||||
|
||||
static gboolean
|
||||
is_metacity_running (void)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
menu_item_activate (GtkWidget *menu_item,
|
||||
gpointer unused)
|
||||
|
@ -45,10 +60,10 @@ menu_item_activate (GtkWidget *menu_item,
|
|||
key_theme = g_object_get_data (G_OBJECT (menu_item), LABEL_DATA);
|
||||
g_return_if_fail (key_theme != NULL);
|
||||
|
||||
current_key_theme = gconf_client_get_string (client, "/desktop/gnome/interface/gtk_key_theme", &error);
|
||||
current_key_theme = gconf_client_get_string (client, KEY_THEME_KEY, &error);
|
||||
if (current_key_theme && strcmp (current_key_theme, key_theme))
|
||||
{
|
||||
gconf_client_set_string (client, "/desktop/gnome/interface/gtk_key_theme", key_theme, NULL);
|
||||
gconf_client_set_string (client, KEY_THEME_KEY, key_theme, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -145,6 +160,7 @@ keybinding_key_changed (GConfClient *client,
|
|||
key_entry->keyval = 0;
|
||||
key_entry->mask = 0;
|
||||
}
|
||||
key_entry->editable = gconf_entry_get_is_writable (entry);
|
||||
|
||||
path = gtk_tree_path_new_first ();
|
||||
for (valid = gtk_tree_model_get_iter_first (key_entry->model, &iter);
|
||||
|
@ -167,7 +183,8 @@ keybinding_key_changed (GConfClient *client,
|
|||
|
||||
|
||||
static void
|
||||
clear_old_model (GtkWidget *tree_view)
|
||||
clear_old_model (GladeXML *dialog,
|
||||
GtkWidget *tree_view)
|
||||
{
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter;
|
||||
|
@ -177,39 +194,46 @@ clear_old_model (GtkWidget *tree_view)
|
|||
|
||||
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))
|
||||
if (model != NULL)
|
||||
{
|
||||
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_ref (model);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
g_object_unref (model);
|
||||
model = (GtkTreeModel *) gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER);
|
||||
gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), model);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (WID ("actions_swindow")),
|
||||
GTK_POLICY_NEVER, GTK_POLICY_NEVER);
|
||||
gtk_widget_set_usize (WID ("actions_swindow"), -1, -1);
|
||||
}
|
||||
|
||||
static void
|
||||
setup_tree (GladeXML *dialog,
|
||||
GSList *keys_list)
|
||||
append_keys_to_tree (GladeXML *dialog,
|
||||
GSList *keys_list)
|
||||
{
|
||||
GConfClient *client;
|
||||
GtkTreeModel *model;
|
||||
GSList *list;
|
||||
gint i = 0;
|
||||
gint i;
|
||||
|
||||
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);
|
||||
model = gtk_tree_view_get_model (GTK_TREE_VIEW (WID ("shortcut_treeview")));
|
||||
|
||||
i = gtk_tree_model_iter_n_children (model, NULL);
|
||||
|
||||
|
||||
for (list = keys_list; list; list = list->next)
|
||||
{
|
||||
|
@ -229,7 +253,7 @@ setup_tree (GladeXML *dialog,
|
|||
&error);
|
||||
if (error || entry == NULL)
|
||||
{
|
||||
/* We don't actually want to popup a dialog */
|
||||
/* We don't actually want to popup a dialog - just skip this one */
|
||||
g_free (key_string);
|
||||
if (error)
|
||||
g_error_free (error);
|
||||
|
@ -241,7 +265,7 @@ setup_tree (GladeXML *dialog,
|
|||
|
||||
if (error || schema == NULL)
|
||||
{
|
||||
/* We don't actually want to popup a dialog */
|
||||
/* We don't actually want to popup a dialog - just skip this one */
|
||||
g_free (key_string);
|
||||
if (error)
|
||||
g_error_free (error);
|
||||
|
@ -252,7 +276,7 @@ setup_tree (GladeXML *dialog,
|
|||
|
||||
key_entry = g_new0 (KeyEntry, 1);
|
||||
key_entry->gconf_key = key_string;
|
||||
key_entry->editable = TRUE;
|
||||
key_entry->editable = gconf_entry_get_is_writable (entry);
|
||||
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,
|
||||
|
@ -270,6 +294,14 @@ setup_tree (GladeXML *dialog,
|
|||
}
|
||||
g_free (key_value);
|
||||
|
||||
if (i == MAX_ELEMENTS_BEFORE_SCROLLING)
|
||||
{
|
||||
GtkRequisition rectangle;
|
||||
gtk_widget_size_request (WID ("shortcut_treeview"), &rectangle);
|
||||
gtk_widget_set_usize (WID ("actions_swindow"), -1, rectangle.height);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (WID ("actions_swindow")),
|
||||
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
||||
}
|
||||
i++;
|
||||
gtk_list_store_append (GTK_LIST_STORE (model), &iter);
|
||||
if (schema->short_desc)
|
||||
|
@ -286,12 +318,6 @@ setup_tree (GladeXML *dialog,
|
|||
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"));
|
||||
|
@ -300,7 +326,6 @@ setup_tree (GladeXML *dialog,
|
|||
{
|
||||
gtk_widget_show (WID ("shortcuts_frame"));
|
||||
}
|
||||
gtk_tree_view_set_model (GTK_TREE_VIEW (WID ("shortcut_treeview")), model);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -311,21 +336,68 @@ keybinding_key_list_changed (GConfClient *client,
|
|||
{
|
||||
GladeXML *dialog;
|
||||
GSList *value_list, *list;
|
||||
GSList *string_list = NULL;
|
||||
GSList *keys_list = NULL;
|
||||
|
||||
dialog = user_data;
|
||||
|
||||
if (strcmp (entry->key, "/apps/gnome_keybinding_properties/keybinding_key_list"))
|
||||
if (strcmp (entry->key, KEY_LIST_KEY))
|
||||
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));
|
||||
keys_list = g_slist_append (keys_list, (char *) gconf_value_get_string (value));
|
||||
}
|
||||
setup_tree (dialog, string_list);
|
||||
g_slist_free (string_list);
|
||||
|
||||
clear_old_model (dialog, WID ("shortcut_treeview"));
|
||||
append_keys_to_tree (dialog, keys_list);
|
||||
g_slist_free (keys_list);
|
||||
if (is_metacity_running ())
|
||||
{
|
||||
GSList *keys_list;
|
||||
|
||||
keys_list = gconf_client_get_list (client, METACITY_KEY_LIST_KEY, GCONF_VALUE_STRING, NULL);
|
||||
append_keys_to_tree (dialog, keys_list);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
metacity_key_list_changed (GConfClient *client,
|
||||
guint cnxn_id,
|
||||
GConfEntry *entry,
|
||||
gpointer user_data)
|
||||
{
|
||||
GladeXML *dialog;
|
||||
GSList *value_list, *list;
|
||||
GSList *keys_list;
|
||||
|
||||
if (strcmp (entry->key, METACITY_KEY_LIST_KEY))
|
||||
return;
|
||||
if (! is_metacity_running ())
|
||||
return;
|
||||
|
||||
dialog = user_data;
|
||||
clear_old_model (dialog, WID ("shortcut_treeview"));
|
||||
|
||||
keys_list = gconf_client_get_list (client, KEY_LIST_KEY, GCONF_VALUE_STRING, NULL);
|
||||
append_keys_to_tree (dialog, keys_list);
|
||||
g_slist_foreach (keys_list, (GFunc) g_free, NULL);
|
||||
g_slist_free (keys_list);
|
||||
keys_list = NULL;
|
||||
|
||||
value_list = gconf_value_get_list (entry->value);
|
||||
for (list = value_list; list; list = list->next)
|
||||
{
|
||||
GConfValue *value;
|
||||
|
||||
value = list->data;
|
||||
keys_list = g_slist_append (keys_list, (char *)gconf_value_get_string (value));
|
||||
}
|
||||
|
||||
append_keys_to_tree (dialog, keys_list);
|
||||
g_slist_free (keys_list);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -431,12 +503,24 @@ setup_dialog (GladeXML *dialog)
|
|||
GtkCellRenderer *renderer;
|
||||
GSList *keys_list;
|
||||
GtkWidget *widget;
|
||||
gboolean found_keys = FALSE;
|
||||
GList *list;
|
||||
|
||||
client = gconf_client_get_default ();
|
||||
|
||||
key_theme_list = theme_common_get_list ();
|
||||
|
||||
if (key_theme_list == NULL)
|
||||
for (list = key_theme_list; list; list = list->next)
|
||||
{
|
||||
ThemeInfo *info = list->data;
|
||||
if (info->has_keybinding)
|
||||
{
|
||||
found_keys = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
if (! found_keys)
|
||||
{
|
||||
GtkWidget *msg_dialog = gtk_message_dialog_new (NULL, 0,
|
||||
GTK_MESSAGE_ERROR,
|
||||
|
@ -454,7 +538,6 @@ setup_dialog (GladeXML *dialog)
|
|||
GtkWidget *menu;
|
||||
GtkWidget *menu_item;
|
||||
GConfEntry *entry;
|
||||
GList *list;
|
||||
|
||||
omenu = WID ("key_theme_omenu");
|
||||
menu = gtk_menu_new ();
|
||||
|
@ -465,37 +548,25 @@ setup_dialog (GladeXML *dialog)
|
|||
if (! info->has_keybinding)
|
||||
continue;
|
||||
|
||||
/* Make sure we have a default */
|
||||
if (!strcasecmp (info->name, "default"))
|
||||
{
|
||||
menu_item = make_key_theme_menu_item (info->name);
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
|
||||
}
|
||||
menu_item = make_key_theme_menu_item (info->name);
|
||||
if (!strcmp (info->name, "Default"))
|
||||
/* Put default first, always */
|
||||
gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
|
||||
else
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
|
||||
}
|
||||
for (list = key_theme_list; list; list = list->next)
|
||||
{
|
||||
ThemeInfo *info = list->data;
|
||||
|
||||
if (! info->has_keybinding)
|
||||
continue;
|
||||
|
||||
if (strcasecmp (info->name, "default"))
|
||||
{
|
||||
menu_item = make_key_theme_menu_item (info->name);
|
||||
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",
|
||||
KEY_THEME_KEY,
|
||||
(GConfClientNotifyFunc) &key_theme_changed,
|
||||
omenu, NULL, NULL);
|
||||
/* Initialize the option menu */
|
||||
entry = gconf_client_get_entry (client,
|
||||
"/desktop/gnome/interface/gtk_key_theme",
|
||||
KEY_THEME_KEY,
|
||||
NULL, TRUE, NULL);
|
||||
|
||||
key_theme_changed (client, 0, entry, omenu);
|
||||
|
@ -521,11 +592,29 @@ setup_dialog (GladeXML *dialog)
|
|||
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",
|
||||
KEY_LIST_KEY,
|
||||
(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);
|
||||
gconf_client_add_dir (client, "/apps/metacity/general", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
|
||||
gconf_client_notify_add (client,
|
||||
METACITY_KEY_LIST_KEY,
|
||||
(GConfClientNotifyFunc) &metacity_key_list_changed,
|
||||
dialog, NULL, NULL);
|
||||
|
||||
/* set up the dialog */
|
||||
clear_old_model (dialog, WID ("shortcut_treeview"));
|
||||
keys_list = gconf_client_get_list (client, KEY_LIST_KEY, GCONF_VALUE_STRING, NULL);
|
||||
append_keys_to_tree (dialog, keys_list);
|
||||
g_slist_foreach (keys_list, (GFunc) g_free, NULL);
|
||||
g_slist_free (keys_list);
|
||||
|
||||
if (is_metacity_running ())
|
||||
{
|
||||
keys_list = gconf_client_get_list (client, METACITY_KEY_LIST_KEY, GCONF_VALUE_STRING, NULL);
|
||||
append_keys_to_tree (dialog, keys_list);
|
||||
g_slist_foreach (keys_list, (GFunc) g_free, NULL);
|
||||
g_slist_free (keys_list);
|
||||
}
|
||||
|
||||
widget = WID ("gnome-keybinding-dialog");
|
||||
gtk_widget_show (widget);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue