summaryrefslogtreecommitdiff
path: root/src/terminal-accels.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/terminal-accels.c')
-rw-r--r--src/terminal-accels.c1352
1 files changed, 712 insertions, 640 deletions
diff --git a/src/terminal-accels.c b/src/terminal-accels.c
index 73ed7ca..7f93ac4 100644
--- a/src/terminal-accels.c
+++ b/src/terminal-accels.c
@@ -111,144 +111,211 @@
typedef struct
{
- const char *user_visible_name;
- const char *mateconf_key;
- const char *accel_path;
- /* last values received from mateconf */
- GdkModifierType mateconf_mask;
- guint mateconf_keyval;
- GClosure *closure;
- /* have gotten a notification from gtk */
- gboolean needs_mateconf_sync;
- gboolean accel_path_unlocked;
+ const char *user_visible_name;
+ const char *mateconf_key;
+ const char *accel_path;
+ /* last values received from mateconf */
+ GdkModifierType mateconf_mask;
+ guint mateconf_keyval;
+ GClosure *closure;
+ /* have gotten a notification from gtk */
+ gboolean needs_mateconf_sync;
+ gboolean accel_path_unlocked;
} KeyEntry;
typedef struct
{
- KeyEntry *key_entry;
- guint n_elements;
- const char *user_visible_name;
+ KeyEntry *key_entry;
+ guint n_elements;
+ const char *user_visible_name;
} KeyEntryList;
static KeyEntry file_entries[] =
{
- { N_("New Tab"),
- KEY_NEW_TAB, ACCEL_PATH_NEW_TAB, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_t, NULL, FALSE, TRUE },
- { N_("New Window"),
- KEY_NEW_WINDOW, ACCEL_PATH_NEW_WINDOW, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_n, NULL, FALSE, TRUE },
- { N_("New Profile"),
- KEY_NEW_PROFILE, ACCEL_PATH_NEW_PROFILE, 0, 0, NULL, FALSE, TRUE },
+ {
+ N_("New Tab"),
+ KEY_NEW_TAB, ACCEL_PATH_NEW_TAB, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_t, NULL, FALSE, TRUE
+ },
+ {
+ N_("New Window"),
+ KEY_NEW_WINDOW, ACCEL_PATH_NEW_WINDOW, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_n, NULL, FALSE, TRUE
+ },
+ {
+ N_("New Profile"),
+ KEY_NEW_PROFILE, ACCEL_PATH_NEW_PROFILE, 0, 0, NULL, FALSE, TRUE
+ },
#ifdef ENABLE_SAVE
- { N_("Save Contents"),
- KEY_SAVE_CONTENTS, ACCEL_PATH_SAVE_CONTENTS, 0, 0, NULL, FALSE, TRUE },
+ {
+ N_("Save Contents"),
+ KEY_SAVE_CONTENTS, ACCEL_PATH_SAVE_CONTENTS, 0, 0, NULL, FALSE, TRUE
+ },
#endif
- { N_("Close Tab"),
- KEY_CLOSE_TAB, ACCEL_PATH_CLOSE_TAB, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_w, NULL, FALSE, TRUE },
- { N_("Close Window"),
- KEY_CLOSE_WINDOW, ACCEL_PATH_CLOSE_WINDOW, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_q, NULL, FALSE, TRUE },
+ {
+ N_("Close Tab"),
+ KEY_CLOSE_TAB, ACCEL_PATH_CLOSE_TAB, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_w, NULL, FALSE, TRUE
+ },
+ {
+ N_("Close Window"),
+ KEY_CLOSE_WINDOW, ACCEL_PATH_CLOSE_WINDOW, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_q, NULL, FALSE, TRUE
+ },
};
static KeyEntry edit_entries[] =
{
- { N_("Copy"),
- KEY_COPY, ACCEL_PATH_COPY, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_c, NULL, FALSE, TRUE },
- { N_("Paste"),
- KEY_PASTE, ACCEL_PATH_PASTE, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_v, NULL, FALSE, TRUE },
+ {
+ N_("Copy"),
+ KEY_COPY, ACCEL_PATH_COPY, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_c, NULL, FALSE, TRUE
+ },
+ {
+ N_("Paste"),
+ KEY_PASTE, ACCEL_PATH_PASTE, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_v, NULL, FALSE, TRUE
+ },
};
static KeyEntry view_entries[] =
{
- { N_("Hide and Show menubar"),
- KEY_TOGGLE_MENUBAR, ACCEL_PATH_TOGGLE_MENUBAR, 0, 0, NULL, FALSE, TRUE },
- { N_("Full Screen"),
- KEY_FULL_SCREEN, ACCEL_PATH_FULL_SCREEN, 0, GDK_F11, NULL, FALSE, TRUE },
- { N_("Zoom In"),
- KEY_ZOOM_IN, ACCEL_PATH_ZOOM_IN, GDK_CONTROL_MASK, GDK_plus, NULL, FALSE, TRUE },
- { N_("Zoom Out"),
- KEY_ZOOM_OUT, ACCEL_PATH_ZOOM_OUT, GDK_CONTROL_MASK, GDK_minus, NULL, FALSE, TRUE },
- { N_("Normal Size"),
- KEY_ZOOM_NORMAL, ACCEL_PATH_ZOOM_NORMAL, GDK_CONTROL_MASK, GDK_0, NULL, FALSE, TRUE }
+ {
+ N_("Hide and Show menubar"),
+ KEY_TOGGLE_MENUBAR, ACCEL_PATH_TOGGLE_MENUBAR, 0, 0, NULL, FALSE, TRUE
+ },
+ {
+ N_("Full Screen"),
+ KEY_FULL_SCREEN, ACCEL_PATH_FULL_SCREEN, 0, GDK_F11, NULL, FALSE, TRUE
+ },
+ {
+ N_("Zoom In"),
+ KEY_ZOOM_IN, ACCEL_PATH_ZOOM_IN, GDK_CONTROL_MASK, GDK_plus, NULL, FALSE, TRUE
+ },
+ {
+ N_("Zoom Out"),
+ KEY_ZOOM_OUT, ACCEL_PATH_ZOOM_OUT, GDK_CONTROL_MASK, GDK_minus, NULL, FALSE, TRUE
+ },
+ {
+ N_("Normal Size"),
+ KEY_ZOOM_NORMAL, ACCEL_PATH_ZOOM_NORMAL, GDK_CONTROL_MASK, GDK_0, NULL, FALSE, TRUE
+ }
};
static KeyEntry terminal_entries[] =
{
- { N_("Set Title"),
- KEY_SET_TERMINAL_TITLE, ACCEL_PATH_SET_TERMINAL_TITLE, 0, 0, NULL, FALSE, TRUE },
- { N_("Reset"),
- KEY_RESET, ACCEL_PATH_RESET, 0, 0, NULL, FALSE, TRUE },
- { N_("Reset and Clear"),
- KEY_RESET_AND_CLEAR, ACCEL_PATH_RESET_AND_CLEAR, 0, 0, NULL, FALSE, TRUE },
+ {
+ N_("Set Title"),
+ KEY_SET_TERMINAL_TITLE, ACCEL_PATH_SET_TERMINAL_TITLE, 0, 0, NULL, FALSE, TRUE
+ },
+ {
+ N_("Reset"),
+ KEY_RESET, ACCEL_PATH_RESET, 0, 0, NULL, FALSE, TRUE
+ },
+ {
+ N_("Reset and Clear"),
+ KEY_RESET_AND_CLEAR, ACCEL_PATH_RESET_AND_CLEAR, 0, 0, NULL, FALSE, TRUE
+ },
};
static KeyEntry tabs_entries[] =
{
- { N_("Switch to Previous Tab"),
- KEY_PREV_TAB, ACCEL_PATH_PREV_TAB, GDK_CONTROL_MASK, GDK_Page_Up, NULL, FALSE, TRUE },
- { N_("Switch to Next Tab"),
- KEY_NEXT_TAB, ACCEL_PATH_NEXT_TAB, GDK_CONTROL_MASK, GDK_Page_Down, NULL, FALSE, TRUE },
- { N_("Move Tab to the Left"),
- KEY_MOVE_TAB_LEFT, ACCEL_PATH_MOVE_TAB_LEFT, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_Page_Up, NULL, FALSE, TRUE },
- { N_("Move Tab to the Right"),
- KEY_MOVE_TAB_RIGHT, ACCEL_PATH_MOVE_TAB_RIGHT, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_Page_Down, NULL, FALSE, TRUE },
- { N_("Detach Tab"),
- KEY_DETACH_TAB, ACCEL_PATH_DETACH_TAB, 0, 0, NULL, FALSE, TRUE },
- { N_("Switch to Tab 1"),
- KEY_SWITCH_TAB_PREFIX "1",
- ACCEL_PATH_SWITCH_TAB_PREFIX "1", GDK_MOD1_MASK, GDK_1, NULL, FALSE, TRUE },
- { N_("Switch to Tab 2"),
- KEY_SWITCH_TAB_PREFIX "2",
- ACCEL_PATH_SWITCH_TAB_PREFIX "2", GDK_MOD1_MASK, GDK_2, NULL, FALSE, TRUE },
- { N_("Switch to Tab 3"),
- KEY_SWITCH_TAB_PREFIX "3",
- ACCEL_PATH_SWITCH_TAB_PREFIX "3", GDK_MOD1_MASK, GDK_3, NULL, FALSE, TRUE },
- { N_("Switch to Tab 4"),
- KEY_SWITCH_TAB_PREFIX "4",
- ACCEL_PATH_SWITCH_TAB_PREFIX "4", GDK_MOD1_MASK, GDK_4, NULL, FALSE, TRUE },
- { N_("Switch to Tab 5"),
- KEY_SWITCH_TAB_PREFIX "5",
- ACCEL_PATH_SWITCH_TAB_PREFIX "5", GDK_MOD1_MASK, GDK_5, NULL, FALSE, TRUE },
- { N_("Switch to Tab 6"),
- KEY_SWITCH_TAB_PREFIX "6",
- ACCEL_PATH_SWITCH_TAB_PREFIX "6", GDK_MOD1_MASK, GDK_6, NULL, FALSE, TRUE },
- { N_("Switch to Tab 7"),
- KEY_SWITCH_TAB_PREFIX "7",
- ACCEL_PATH_SWITCH_TAB_PREFIX "7", GDK_MOD1_MASK, GDK_7, NULL, FALSE, TRUE },
- { N_("Switch to Tab 8"),
- KEY_SWITCH_TAB_PREFIX "8",
- ACCEL_PATH_SWITCH_TAB_PREFIX "8", GDK_MOD1_MASK, GDK_8, NULL, FALSE, TRUE },
- { N_("Switch to Tab 9"),
- KEY_SWITCH_TAB_PREFIX "9",
- ACCEL_PATH_SWITCH_TAB_PREFIX "9", GDK_MOD1_MASK, GDK_9, NULL, FALSE, TRUE },
- { N_("Switch to Tab 10"),
- KEY_SWITCH_TAB_PREFIX "10",
- ACCEL_PATH_SWITCH_TAB_PREFIX "10", GDK_MOD1_MASK, GDK_0, NULL, FALSE, TRUE },
- { N_("Switch to Tab 11"),
- KEY_SWITCH_TAB_PREFIX "11",
- ACCEL_PATH_SWITCH_TAB_PREFIX "11", 0, 0, NULL, FALSE, TRUE },
- { N_("Switch to Tab 12"),
- KEY_SWITCH_TAB_PREFIX "12",
- ACCEL_PATH_SWITCH_TAB_PREFIX "12", 0, 0, NULL, FALSE, TRUE }
+ {
+ N_("Switch to Previous Tab"),
+ KEY_PREV_TAB, ACCEL_PATH_PREV_TAB, GDK_CONTROL_MASK, GDK_Page_Up, NULL, FALSE, TRUE
+ },
+ {
+ N_("Switch to Next Tab"),
+ KEY_NEXT_TAB, ACCEL_PATH_NEXT_TAB, GDK_CONTROL_MASK, GDK_Page_Down, NULL, FALSE, TRUE
+ },
+ {
+ N_("Move Tab to the Left"),
+ KEY_MOVE_TAB_LEFT, ACCEL_PATH_MOVE_TAB_LEFT, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_Page_Up, NULL, FALSE, TRUE
+ },
+ {
+ N_("Move Tab to the Right"),
+ KEY_MOVE_TAB_RIGHT, ACCEL_PATH_MOVE_TAB_RIGHT, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GDK_Page_Down, NULL, FALSE, TRUE
+ },
+ {
+ N_("Detach Tab"),
+ KEY_DETACH_TAB, ACCEL_PATH_DETACH_TAB, 0, 0, NULL, FALSE, TRUE
+ },
+ {
+ N_("Switch to Tab 1"),
+ KEY_SWITCH_TAB_PREFIX "1",
+ ACCEL_PATH_SWITCH_TAB_PREFIX "1", GDK_MOD1_MASK, GDK_1, NULL, FALSE, TRUE
+ },
+ {
+ N_("Switch to Tab 2"),
+ KEY_SWITCH_TAB_PREFIX "2",
+ ACCEL_PATH_SWITCH_TAB_PREFIX "2", GDK_MOD1_MASK, GDK_2, NULL, FALSE, TRUE
+ },
+ {
+ N_("Switch to Tab 3"),
+ KEY_SWITCH_TAB_PREFIX "3",
+ ACCEL_PATH_SWITCH_TAB_PREFIX "3", GDK_MOD1_MASK, GDK_3, NULL, FALSE, TRUE
+ },
+ {
+ N_("Switch to Tab 4"),
+ KEY_SWITCH_TAB_PREFIX "4",
+ ACCEL_PATH_SWITCH_TAB_PREFIX "4", GDK_MOD1_MASK, GDK_4, NULL, FALSE, TRUE
+ },
+ {
+ N_("Switch to Tab 5"),
+ KEY_SWITCH_TAB_PREFIX "5",
+ ACCEL_PATH_SWITCH_TAB_PREFIX "5", GDK_MOD1_MASK, GDK_5, NULL, FALSE, TRUE
+ },
+ {
+ N_("Switch to Tab 6"),
+ KEY_SWITCH_TAB_PREFIX "6",
+ ACCEL_PATH_SWITCH_TAB_PREFIX "6", GDK_MOD1_MASK, GDK_6, NULL, FALSE, TRUE
+ },
+ {
+ N_("Switch to Tab 7"),
+ KEY_SWITCH_TAB_PREFIX "7",
+ ACCEL_PATH_SWITCH_TAB_PREFIX "7", GDK_MOD1_MASK, GDK_7, NULL, FALSE, TRUE
+ },
+ {
+ N_("Switch to Tab 8"),
+ KEY_SWITCH_TAB_PREFIX "8",
+ ACCEL_PATH_SWITCH_TAB_PREFIX "8", GDK_MOD1_MASK, GDK_8, NULL, FALSE, TRUE
+ },
+ {
+ N_("Switch to Tab 9"),
+ KEY_SWITCH_TAB_PREFIX "9",
+ ACCEL_PATH_SWITCH_TAB_PREFIX "9", GDK_MOD1_MASK, GDK_9, NULL, FALSE, TRUE
+ },
+ {
+ N_("Switch to Tab 10"),
+ KEY_SWITCH_TAB_PREFIX "10",
+ ACCEL_PATH_SWITCH_TAB_PREFIX "10", GDK_MOD1_MASK, GDK_0, NULL, FALSE, TRUE
+ },
+ {
+ N_("Switch to Tab 11"),
+ KEY_SWITCH_TAB_PREFIX "11",
+ ACCEL_PATH_SWITCH_TAB_PREFIX "11", 0, 0, NULL, FALSE, TRUE
+ },
+ {
+ N_("Switch to Tab 12"),
+ KEY_SWITCH_TAB_PREFIX "12",
+ ACCEL_PATH_SWITCH_TAB_PREFIX "12", 0, 0, NULL, FALSE, TRUE
+ }
};
-static KeyEntry help_entries[] = {
- { N_("Contents"), KEY_HELP, ACCEL_PATH_HELP, 0, GDK_F1, NULL, FALSE, TRUE }
+static KeyEntry help_entries[] =
+{
+ { N_("Contents"), KEY_HELP, ACCEL_PATH_HELP, 0, GDK_F1, NULL, FALSE, TRUE }
};
static KeyEntryList all_entries[] =
{
- { file_entries, G_N_ELEMENTS (file_entries), N_("File") },
- { edit_entries, G_N_ELEMENTS (edit_entries), N_("Edit") },
- { view_entries, G_N_ELEMENTS (view_entries), N_("View") },
- { terminal_entries, G_N_ELEMENTS (terminal_entries), N_("Terminal") },
- { tabs_entries, G_N_ELEMENTS (tabs_entries), N_("Tabs") },
- { help_entries, G_N_ELEMENTS (help_entries), N_("Help") }
+ { file_entries, G_N_ELEMENTS (file_entries), N_("File") },
+ { edit_entries, G_N_ELEMENTS (edit_entries), N_("Edit") },
+ { view_entries, G_N_ELEMENTS (view_entries), N_("View") },
+ { terminal_entries, G_N_ELEMENTS (terminal_entries), N_("Terminal") },
+ { tabs_entries, G_N_ELEMENTS (tabs_entries), N_("Tabs") },
+ { help_entries, G_N_ELEMENTS (help_entries), N_("Help") }
};
enum
{
- ACTION_COLUMN,
- KEYVAL_COLUMN,
- N_COLUMNS
+ ACTION_COLUMN,
+ KEYVAL_COLUMN,
+ N_COLUMNS
};
static void keys_change_notify (MateConfClient *client,
@@ -285,126 +352,126 @@ static char*
binding_name (guint keyval,
GdkModifierType mask)
{
- if (keyval != 0)
- return gtk_accelerator_name (keyval, mask);
+ if (keyval != 0)
+ return gtk_accelerator_name (keyval, mask);
- return g_strdup ("disabled");
+ return g_strdup ("disabled");
}
static char*
binding_display_name (guint keyval,
GdkModifierType mask)
{
- if (keyval != 0)
- return gtk_accelerator_get_label (keyval, mask);
-
- return g_strdup (_("Disabled"));
+ if (keyval != 0)
+ return gtk_accelerator_get_label (keyval, mask);
+
+ return g_strdup (_("Disabled"));
}
static const char *
key_from_mateconf_key (const char *mateconf_key)
{
- const char *last_slash = strrchr (mateconf_key, '/');
- if (last_slash)
- return ++last_slash;
- return NULL;
+ const char *last_slash = strrchr (mateconf_key, '/');
+ if (last_slash)
+ return ++last_slash;
+ return NULL;
}
void
terminal_accels_init (void)
{
- MateConfClient *conf;
- guint i, j;
+ MateConfClient *conf;
+ guint i, j;
+
+ conf = mateconf_client_get_default ();
- conf = mateconf_client_get_default ();
-
- mateconf_client_add_dir (conf, CONF_KEYS_PREFIX,
- MATECONF_CLIENT_PRELOAD_ONELEVEL,
- NULL);
- mateconf_notify_id =
- mateconf_client_notify_add (conf,
- CONF_KEYS_PREFIX,
- keys_change_notify,
- NULL, NULL, NULL);
+ mateconf_client_add_dir (conf, CONF_KEYS_PREFIX,
+ MATECONF_CLIENT_PRELOAD_ONELEVEL,
+ NULL);
+ mateconf_notify_id =
+ mateconf_client_notify_add (conf,
+ CONF_KEYS_PREFIX,
+ keys_change_notify,
+ NULL, NULL, NULL);
- mateconf_key_to_entry = g_hash_table_new (g_str_hash, g_str_equal);
+ mateconf_key_to_entry = g_hash_table_new (g_str_hash, g_str_equal);
- notification_group = gtk_accel_group_new ();
+ notification_group = gtk_accel_group_new ();
- for (i = 0; i < G_N_ELEMENTS (all_entries); ++i)
- {
- for (j = 0; j < all_entries[i].n_elements; ++j)
+ for (i = 0; i < G_N_ELEMENTS (all_entries); ++i)
{
- KeyEntry *key_entry;
+ for (j = 0; j < all_entries[i].n_elements; ++j)
+ {
+ KeyEntry *key_entry;
- key_entry = &(all_entries[i].key_entry[j]);
+ key_entry = &(all_entries[i].key_entry[j]);
- g_hash_table_insert (mateconf_key_to_entry,
- (gpointer) key_from_mateconf_key (key_entry->mateconf_key),
- key_entry);
+ g_hash_table_insert (mateconf_key_to_entry,
+ (gpointer) key_from_mateconf_key (key_entry->mateconf_key),
+ key_entry);
- key_entry->closure = g_closure_new_simple (sizeof (GClosure), key_entry);
+ key_entry->closure = g_closure_new_simple (sizeof (GClosure), key_entry);
- g_closure_ref (key_entry->closure);
- g_closure_sink (key_entry->closure);
-
- gtk_accel_group_connect_by_path (notification_group,
- I_(key_entry->accel_path),
- key_entry->closure);
+ g_closure_ref (key_entry->closure);
+ g_closure_sink (key_entry->closure);
- mateconf_client_notify (conf, key_entry->mateconf_key);
+ gtk_accel_group_connect_by_path (notification_group,
+ I_(key_entry->accel_path),
+ key_entry->closure);
+
+ mateconf_client_notify (conf, key_entry->mateconf_key);
+ }
}
- }
- g_object_unref (conf);
-
- g_signal_connect (notification_group, "accel-changed",
- G_CALLBACK (accel_changed_callback), NULL);
+ g_object_unref (conf);
+
+ g_signal_connect (notification_group, "accel-changed",
+ G_CALLBACK (accel_changed_callback), NULL);
}
void
terminal_accels_shutdown (void)
{
- MateConfClient *conf;
+ MateConfClient *conf;
- conf = mateconf_client_get_default ();
- mateconf_client_notify_remove (conf, mateconf_notify_id);
- mateconf_client_remove_dir (conf, CONF_KEYS_PREFIX, NULL);
- g_object_unref (conf);
+ conf = mateconf_client_get_default ();
+ mateconf_client_notify_remove (conf, mateconf_notify_id);
+ mateconf_client_remove_dir (conf, CONF_KEYS_PREFIX, NULL);
+ g_object_unref (conf);
- if (sync_idle_id != 0)
- {
- g_source_remove (sync_idle_id);
- sync_idle_id = 0;
+ if (sync_idle_id != 0)
+ {
+ g_source_remove (sync_idle_id);
+ sync_idle_id = 0;
- sync_idle_cb (NULL);
- }
+ sync_idle_cb (NULL);
+ }
- g_hash_table_destroy (mateconf_key_to_entry);
- mateconf_key_to_entry = NULL;
+ g_hash_table_destroy (mateconf_key_to_entry);
+ mateconf_key_to_entry = NULL;
- g_object_unref (notification_group);
- notification_group = NULL;
+ g_object_unref (notification_group);
+ notification_group = NULL;
}
static gboolean
update_model_foreach (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer data)
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer data)
{
- KeyEntry *key_entry = NULL;
-
- gtk_tree_model_get (model, iter,
- KEYVAL_COLUMN, &key_entry,
- -1);
-
- if (key_entry == (KeyEntry *) data)
- {
- gtk_tree_model_row_changed (model, path, iter);
- return TRUE;
- }
- return FALSE;
+ KeyEntry *key_entry = NULL;
+
+ gtk_tree_model_get (model, iter,
+ KEYVAL_COLUMN, &key_entry,
+ -1);
+
+ if (key_entry == (KeyEntry *) data)
+ {
+ gtk_tree_model_row_changed (model, path, iter);
+ return TRUE;
+ }
+ return FALSE;
}
static void
@@ -413,82 +480,82 @@ keys_change_notify (MateConfClient *client,
MateConfEntry *entry,
gpointer user_data)
{
- MateConfValue *val;
- KeyEntry *key_entry;
- GdkModifierType mask;
- guint keyval;
+ MateConfValue *val;
+ KeyEntry *key_entry;
+ GdkModifierType mask;
+ guint keyval;
+
+ _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
+ "key %s changed\n",
+ mateconf_entry_get_key (entry));
- _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
- "key %s changed\n",
- mateconf_entry_get_key (entry));
-
- val = mateconf_entry_get_value (entry);
+ val = mateconf_entry_get_value (entry);
#ifdef MATE_ENABLE_DEBUG
- _TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ACCELS)
- {
- if (val == NULL)
- _terminal_debug_print (TERMINAL_DEBUG_ACCELS, " changed to be unset\n");
- else if (val->type != MATECONF_VALUE_STRING)
- _terminal_debug_print (TERMINAL_DEBUG_ACCELS, " changed to non-string value\n");
- else
- _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
- " changed to \"%s\"\n",
- mateconf_value_get_string (val));
- }
+ _TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ACCELS)
+ {
+ if (val == NULL)
+ _terminal_debug_print (TERMINAL_DEBUG_ACCELS, " changed to be unset\n");
+ else if (val->type != MATECONF_VALUE_STRING)
+ _terminal_debug_print (TERMINAL_DEBUG_ACCELS, " changed to non-string value\n");
+ else
+ _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
+ " changed to \"%s\"\n",
+ mateconf_value_get_string (val));
+ }
#endif
- key_entry = g_hash_table_lookup (mateconf_key_to_entry, key_from_mateconf_key (mateconf_entry_get_key (entry)));
- if (!key_entry)
- {
- /* shouldn't really happen, but let's be safe */
- _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
- " WARNING: KeyEntry for changed key not found, bailing out\n");
- return;
- }
-
- if (!binding_from_value (val, &keyval, &mask))
- {
- const char *str = val->type == MATECONF_VALUE_STRING ? mateconf_value_get_string (val) : NULL;
- g_printerr ("The value \"%s\" of configuration key %s is not a valid accelerator\n",
- str ? str : "(null)",
- key_entry->mateconf_key);
- return;
- }
-
- key_entry->mateconf_keyval = keyval;
- key_entry->mateconf_mask = mask;
-
- /* Unlock the path, so we can change its accel */
- if (!key_entry->accel_path_unlocked)
- gtk_accel_map_unlock_path (key_entry->accel_path);
-
- /* sync over to GTK */
- _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
- "changing path %s to %s\n",
- key_entry->accel_path,
- binding_name (keyval, mask)); /* memleak */
- inside_mateconf_notify += 1;
- /* Note that this may return FALSE, e.g. when the entry was already set correctly. */
- gtk_accel_map_change_entry (key_entry->accel_path,
- keyval, mask,
- TRUE);
- inside_mateconf_notify -= 1;
-
- /* Lock the path if the mateconf key isn't writable */
- key_entry->accel_path_unlocked = mateconf_entry_get_is_writable (entry);
- if (!key_entry->accel_path_unlocked)
- gtk_accel_map_lock_path (key_entry->accel_path);
-
- /* This seems necessary to update the tree model, since sometimes the
- * notification on the notification_group seems not to be emitted correctly.
- * Without this change, when trying to set an accel to e.g. Alt-T (while the main
- * menu in the terminal windows is _Terminal with Alt-T mnemonic) only displays
- * the accel change after a re-expose of the row.
- * FIXME: Find out *why* the accel-changed signal is wrong here!
- */
- if (edit_keys_store)
- gtk_tree_model_foreach (GTK_TREE_MODEL (edit_keys_store), update_model_foreach, key_entry);
+ key_entry = g_hash_table_lookup (mateconf_key_to_entry, key_from_mateconf_key (mateconf_entry_get_key (entry)));
+ if (!key_entry)
+ {
+ /* shouldn't really happen, but let's be safe */
+ _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
+ " WARNING: KeyEntry for changed key not found, bailing out\n");
+ return;
+ }
+
+ if (!binding_from_value (val, &keyval, &mask))
+ {
+ const char *str = val->type == MATECONF_VALUE_STRING ? mateconf_value_get_string (val) : NULL;
+ g_printerr ("The value \"%s\" of configuration key %s is not a valid accelerator\n",
+ str ? str : "(null)",
+ key_entry->mateconf_key);
+ return;
+ }
+
+ key_entry->mateconf_keyval = keyval;
+ key_entry->mateconf_mask = mask;
+
+ /* Unlock the path, so we can change its accel */
+ if (!key_entry->accel_path_unlocked)
+ gtk_accel_map_unlock_path (key_entry->accel_path);
+
+ /* sync over to GTK */
+ _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
+ "changing path %s to %s\n",
+ key_entry->accel_path,
+ binding_name (keyval, mask)); /* memleak */
+ inside_mateconf_notify += 1;
+ /* Note that this may return FALSE, e.g. when the entry was already set correctly. */
+ gtk_accel_map_change_entry (key_entry->accel_path,
+ keyval, mask,
+ TRUE);
+ inside_mateconf_notify -= 1;
+
+ /* Lock the path if the mateconf key isn't writable */
+ key_entry->accel_path_unlocked = mateconf_entry_get_is_writable (entry);
+ if (!key_entry->accel_path_unlocked)
+ gtk_accel_map_lock_path (key_entry->accel_path);
+
+ /* This seems necessary to update the tree model, since sometimes the
+ * notification on the notification_group seems not to be emitted correctly.
+ * Without this change, when trying to set an accel to e.g. Alt-T (while the main
+ * menu in the terminal windows is _Terminal with Alt-T mnemonic) only displays
+ * the accel change after a re-expose of the row.
+ * FIXME: Find out *why* the accel-changed signal is wrong here!
+ */
+ if (edit_keys_store)
+ gtk_tree_model_foreach (GTK_TREE_MODEL (edit_keys_store), update_model_foreach, key_entry);
}
static void
@@ -498,35 +565,35 @@ accel_changed_callback (GtkAccelGroup *accel_group,
GClosure *accel_closure,
gpointer data)
{
- /* FIXME because GTK accel API is so nonsensical, we get
- * a notify for each closure, on both the added and the removed
- * accelerator. We just use the accel closure to find our
- * accel entry, then update the value of that entry.
- * We use an idle function to avoid setting the entry
- * in mateconf when the accelerator gets removed and then
- * setting it again when it gets added.
- */
- KeyEntry *key_entry;
-
- _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
- "Changed accel %s closure %p\n",
- binding_name (keyval, modifier), /* memleak */
- accel_closure);
-
- if (inside_mateconf_notify)
- {
- _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
- "Ignoring change from gtk because we're inside a mateconf notify\n");
- return;
- }
-
- key_entry = accel_closure->data;
- g_assert (key_entry);
-
- key_entry->needs_mateconf_sync = TRUE;
-
- if (sync_idle_id == 0)
- sync_idle_id = g_idle_add (sync_idle_cb, NULL);
+ /* FIXME because GTK accel API is so nonsensical, we get
+ * a notify for each closure, on both the added and the removed
+ * accelerator. We just use the accel closure to find our
+ * accel entry, then update the value of that entry.
+ * We use an idle function to avoid setting the entry
+ * in mateconf when the accelerator gets removed and then
+ * setting it again when it gets added.
+ */
+ KeyEntry *key_entry;
+
+ _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
+ "Changed accel %s closure %p\n",
+ binding_name (keyval, modifier), /* memleak */
+ accel_closure);
+
+ if (inside_mateconf_notify)
+ {
+ _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
+ "Ignoring change from gtk because we're inside a mateconf notify\n");
+ return;
+ }
+
+ key_entry = accel_closure->data;
+ g_assert (key_entry);
+
+ key_entry->needs_mateconf_sync = TRUE;
+
+ if (sync_idle_id == 0)
+ sync_idle_id = g_idle_add (sync_idle_cb, NULL);
}
static gboolean
@@ -534,20 +601,20 @@ binding_from_string (const char *str,
guint *accelerator_key,
GdkModifierType *accelerator_mods)
{
- if (str == NULL ||
- strcmp (str, "disabled") == 0)
- {
- *accelerator_key = 0;
- *accelerator_mods = 0;
- return TRUE;
- }
-
- gtk_accelerator_parse (str, accelerator_key, accelerator_mods);
- if (*accelerator_key == 0 &&
- *accelerator_mods == 0)
- return FALSE;
-
- return TRUE;
+ if (str == NULL ||
+ strcmp (str, "disabled") == 0)
+ {
+ *accelerator_key = 0;
+ *accelerator_mods = 0;
+ return TRUE;
+ }
+
+ gtk_accelerator_parse (str, accelerator_key, accelerator_mods);
+ if (*accelerator_key == 0 &&
+ *accelerator_mods == 0)
+ return FALSE;
+
+ return TRUE;
}
static gboolean
@@ -555,20 +622,20 @@ binding_from_value (MateConfValue *value,
guint *accelerator_key,
GdkModifierType *accelerator_mods)
{
- if (value == NULL)
- {
- /* unset */
- *accelerator_key = 0;
- *accelerator_mods = 0;
- return TRUE;
- }
-
- if (value->type != MATECONF_VALUE_STRING)
- return FALSE;
-
- return binding_from_string (mateconf_value_get_string (value),
- accelerator_key,
- accelerator_mods);
+ if (value == NULL)
+ {
+ /* unset */
+ *accelerator_key = 0;
+ *accelerator_mods = 0;
+ return TRUE;
+ }
+
+ if (value->type != MATECONF_VALUE_STRING)
+ return FALSE;
+
+ return binding_from_string (mateconf_value_get_string (value),
+ accelerator_key,
+ accelerator_mods);
}
static void
@@ -576,51 +643,51 @@ add_key_entry_to_changeset (gpointer key,
KeyEntry *key_entry,
MateConfChangeSet *changeset)
{
- GtkAccelKey gtk_key;
+ GtkAccelKey gtk_key;
- if (!key_entry->needs_mateconf_sync)
- return;
+ if (!key_entry->needs_mateconf_sync)
+ return;
- key_entry->needs_mateconf_sync = FALSE;
+ key_entry->needs_mateconf_sync = FALSE;
- if (gtk_accel_map_lookup_entry (key_entry->accel_path, &gtk_key) &&
- (gtk_key.accel_key != key_entry->mateconf_keyval ||
- gtk_key.accel_mods != key_entry->mateconf_mask))
- {
- char *accel_name;
+ if (gtk_accel_map_lookup_entry (key_entry->accel_path, &gtk_key) &&
+ (gtk_key.accel_key != key_entry->mateconf_keyval ||
+ gtk_key.accel_mods != key_entry->mateconf_mask))
+ {
+ char *accel_name;
- accel_name = binding_name (gtk_key.accel_key, gtk_key.accel_mods);
- mateconf_change_set_set_string (changeset, key_entry->mateconf_key, accel_name);
- g_free (accel_name);
- }
+ accel_name = binding_name (gtk_key.accel_key, gtk_key.accel_mods);
+ mateconf_change_set_set_string (changeset, key_entry->mateconf_key, accel_name);
+ g_free (accel_name);
+ }
}
-
+
static gboolean
sync_idle_cb (gpointer data)
{
- MateConfClient *conf;
- MateConfChangeSet *changeset;
- GError *error = NULL;
-
- _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
- "mateconf sync handler\n");
-
- sync_idle_id = 0;
-
- conf = mateconf_client_get_default ();
-
- changeset = mateconf_change_set_new ();
- g_hash_table_foreach (mateconf_key_to_entry, (GHFunc) add_key_entry_to_changeset, changeset);
- if (!mateconf_client_commit_change_set (conf, changeset, TRUE, &error))
- {
- g_printerr ("Error committing the accelerator changeset: %s\n", error->message);
- g_error_free (error);
- }
-
- mateconf_change_set_unref (changeset);
- g_object_unref (conf);
-
- return FALSE;
+ MateConfClient *conf;
+ MateConfChangeSet *changeset;
+ GError *error = NULL;
+
+ _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
+ "mateconf sync handler\n");
+
+ sync_idle_id = 0;
+
+ conf = mateconf_client_get_default ();
+
+ changeset = mateconf_change_set_new ();
+ g_hash_table_foreach (mateconf_key_to_entry, (GHFunc) add_key_entry_to_changeset, changeset);
+ if (!mateconf_client_commit_change_set (conf, changeset, TRUE, &error))
+ {
+ g_printerr ("Error committing the accelerator changeset: %s\n", error->message);
+ g_error_free (error);
+ }
+
+ mateconf_change_set_unref (changeset);
+ g_object_unref (conf);
+
+ return FALSE;
}
/* We have the same KeyEntry* in both columns;
@@ -635,25 +702,25 @@ accel_set_func (GtkTreeViewColumn *tree_column,
GtkTreeIter *iter,
gpointer data)
{
- KeyEntry *ke;
-
- gtk_tree_model_get (model, iter,
- KEYVAL_COLUMN, &ke,
- -1);
-
- if (ke == NULL)
- /* This is a title row */
- g_object_set (cell,
- "visible", FALSE,
- NULL);
- else
- g_object_set (cell,
- "visible", TRUE,
- "sensitive", ke->accel_path_unlocked,
- "editable", ke->accel_path_unlocked,
- "accel-key", ke->mateconf_keyval,
- "accel-mods", ke->mateconf_mask,
- NULL);
+ KeyEntry *ke;
+
+ gtk_tree_model_get (model, iter,
+ KEYVAL_COLUMN, &ke,
+ -1);
+
+ if (ke == NULL)
+ /* This is a title row */
+ g_object_set (cell,
+ "visible", FALSE,
+ NULL);
+ else
+ g_object_set (cell,
+ "visible", TRUE,
+ "sensitive", ke->accel_path_unlocked,
+ "editable", ke->accel_path_unlocked,
+ "accel-key", ke->mateconf_keyval,
+ "accel-mods", ke->mateconf_mask,
+ NULL);
}
static int
@@ -662,48 +729,48 @@ accel_compare_func (GtkTreeModel *model,
GtkTreeIter *b,
gpointer user_data)
{
- KeyEntry *ke_a;
- KeyEntry *ke_b;
- char *name_a;
- char *name_b;
- int result;
-
- gtk_tree_model_get (model, a,
- KEYVAL_COLUMN, &ke_a,
- -1);
- if (ke_a == NULL)
- {
- gtk_tree_model_get (model, a,
- ACTION_COLUMN, &name_a,
- -1);
- }
- else
- {
- name_a = binding_display_name (ke_a->mateconf_keyval,
- ke_a->mateconf_mask);
- }
-
- gtk_tree_model_get (model, b,
- KEYVAL_COLUMN, &ke_b,
- -1);
- if (ke_b == NULL)
- {
- gtk_tree_model_get (model, b,
- ACTION_COLUMN, &name_b,
- -1);
- }
- else
- {
- name_b = binding_display_name (ke_b->mateconf_keyval,
- ke_b->mateconf_mask);
- }
-
- result = g_utf8_collate (name_a, name_b);
-
- g_free (name_a);
- g_free (name_b);
-
- return result;
+ KeyEntry *ke_a;
+ KeyEntry *ke_b;
+ char *name_a;
+ char *name_b;
+ int result;
+
+ gtk_tree_model_get (model, a,
+ KEYVAL_COLUMN, &ke_a,
+ -1);
+ if (ke_a == NULL)
+ {
+ gtk_tree_model_get (model, a,
+ ACTION_COLUMN, &name_a,
+ -1);
+ }
+ else
+ {
+ name_a = binding_display_name (ke_a->mateconf_keyval,
+ ke_a->mateconf_mask);
+ }
+
+ gtk_tree_model_get (model, b,
+ KEYVAL_COLUMN, &ke_b,
+ -1);
+ if (ke_b == NULL)
+ {
+ gtk_tree_model_get (model, b,
+ ACTION_COLUMN, &name_b,
+ -1);
+ }
+ else
+ {
+ name_b = binding_display_name (ke_b->mateconf_keyval,
+ ke_b->mateconf_mask);
+ }
+
+ result = g_utf8_collate (name_a, name_b);
+
+ g_free (name_a);
+ g_free (name_b);
+
+ return result;
}
static void
@@ -713,7 +780,7 @@ treeview_accel_changed_cb (GtkAccelGroup *accel_group,
GClosure *accel_closure,
GtkTreeModel *model)
{
- gtk_tree_model_foreach (model, update_model_foreach, accel_closure->data);
+ gtk_tree_model_foreach (model, update_model_foreach, accel_closure->data);
}
static void
@@ -724,95 +791,99 @@ accel_edited_callback (GtkCellRendererAccel *cell,
guint hardware_keycode,
GtkTreeView *view)
{
- GtkTreeModel *model;
- GtkTreePath *path;
- GtkTreeIter iter;
- KeyEntry *ke;
- GtkAccelGroupEntry *entries;
- guint n_entries;
- char *str;
- MateConfClient *conf;
-
- model = gtk_tree_view_get_model (view);
-
- path = gtk_tree_path_new_from_string (path_string);
- if (!path)
- return;
-
- if (!gtk_tree_model_get_iter (model, &iter, path)) {
- gtk_tree_path_free (path);
- return;
- }
- gtk_tree_path_free (path);
-
- gtk_tree_model_get (model, &iter, KEYVAL_COLUMN, &ke, -1);
-
- /* sanity check */
- if (ke == NULL)
- return;
-
- /* Check if we already have an entry using this accel */
- entries = gtk_accel_group_query (notification_group, keyval, mask, &n_entries);
- if (n_entries > 0)
- {
- if (entries[0].accel_path_quark != g_quark_from_string (ke->accel_path))
- {
- GtkWidget *dialog;
- char *name;
- KeyEntry *other_key;
-
- name = gtk_accelerator_get_label (keyval, mask);
- other_key = entries[0].closure->data;
- g_assert (other_key);
-
- 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,
- _("The shortcut key “%s” is already bound to the “%s” action"),
- name,
- other_key->user_visible_name ? _(other_key->user_visible_name) : other_key->mateconf_key);
- g_free (name);
-
- g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL);
- gtk_window_present (GTK_WINDOW (dialog));
- }
-
- return;
- }
-
- str = binding_name (keyval, mask);
-
- _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
- "Edited path %s keyval %s, setting mateconf to %s\n",
- ke->accel_path,
- gdk_keyval_name (keyval) ? gdk_keyval_name (keyval) : "null",
- str);
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ KeyEntry *ke;
+ GtkAccelGroupEntry *entries;
+ guint n_entries;
+ char *str;
+ MateConfClient *conf;
+
+ model = gtk_tree_view_get_model (view);
+
+ path = gtk_tree_path_new_from_string (path_string);
+ if (!path)
+ return;
+
+ if (!gtk_tree_model_get_iter (model, &iter, path))
+ {
+ gtk_tree_path_free (path);
+ return;
+ }
+ gtk_tree_path_free (path);
+
+ gtk_tree_model_get (model, &iter, KEYVAL_COLUMN, &ke, -1);
+
+ /* sanity check */
+ if (ke == NULL)
+ return;
+
+ /* Check if we already have an entry using this accel */
+ entries = gtk_accel_group_query (notification_group, keyval, mask, &n_entries);
+ if (n_entries > 0)
+ {
+ if (entries[0].accel_path_quark != g_quark_from_string (ke->accel_path))
+ {
+ GtkWidget *dialog;
+ char *name;
+ KeyEntry *other_key;
+
+ name = gtk_accelerator_get_label (keyval, mask);
+ other_key = entries[0].closure->data;
+ g_assert (other_key);
+
+ 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,
+ _("The shortcut key “%s” is already bound to the “%s” action"),
+ name,
+ other_key->user_visible_name ? _(other_key->user_visible_name) : other_key->mateconf_key);
+ g_free (name);
+
+ g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL);
+ gtk_window_present (GTK_WINDOW (dialog));
+ }
+
+ return;
+ }
+
+ str = binding_name (keyval, mask);
+
+ _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
+ "Edited path %s keyval %s, setting mateconf to %s\n",
+ ke->accel_path,
+ gdk_keyval_name (keyval) ? gdk_keyval_name (keyval) : "null",
+ str);
#ifdef MATE_ENABLE_DEBUG
- _TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ACCELS)
- {
- GtkAccelKey old_key;
-
- if (gtk_accel_map_lookup_entry (ke->accel_path, &old_key)) {
- _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
- " Old entry of path %s is keyval %s mask %x\n",
- ke->accel_path, gdk_keyval_name (old_key.accel_key), old_key.accel_mods);
- } else {
- _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
- " Failed to look up the old entry of path %s\n",
- ke->accel_path);
- }
- }
+ _TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ACCELS)
+ {
+ GtkAccelKey old_key;
+
+ if (gtk_accel_map_lookup_entry (ke->accel_path, &old_key))
+ {
+ _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
+ " Old entry of path %s is keyval %s mask %x\n",
+ ke->accel_path, gdk_keyval_name (old_key.accel_key), old_key.accel_mods);
+ }
+ else
+ {
+ _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
+ " Failed to look up the old entry of path %s\n",
+ ke->accel_path);
+ }
+ }
#endif
- conf = mateconf_client_get_default ();
- mateconf_client_set_string (conf,
- ke->mateconf_key,
- str,
- NULL);
- g_object_unref (conf);
- g_free (str);
+ conf = mateconf_client_get_default ();
+ mateconf_client_set_string (conf,
+ ke->mateconf_key,
+ str,
+ NULL);
+ g_object_unref (conf);
+ g_free (str);
}
static void
@@ -820,71 +891,72 @@ accel_cleared_callback (GtkCellRendererAccel *cell,
gchar *path_string,
GtkTreeView *view)
{
- GtkTreeModel *model;
- GtkTreePath *path;
- GtkTreeIter iter;
- KeyEntry *ke;
- char *str;
- MateConfClient *conf;
-
- model = gtk_tree_view_get_model (view);
-
- path = gtk_tree_path_new_from_string (path_string);
- if (!path)
- return;
-
- if (!gtk_tree_model_get_iter (model, &iter, path)) {
- gtk_tree_path_free (path);
- return;
- }
- gtk_tree_path_free (path);
-
- gtk_tree_model_get (model, &iter, KEYVAL_COLUMN, &ke, -1);
-
- /* sanity check */
- if (ke == NULL)
- return;
-
- ke->mateconf_keyval = 0;
- ke->mateconf_mask = 0;
- ke->needs_mateconf_sync = TRUE;
-
- str = binding_name (0, 0);
-
- _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
- "Cleared keybinding for mateconf %s",
- ke->mateconf_key);
-
- conf = mateconf_client_get_default ();
- mateconf_client_set_string (conf,
- ke->mateconf_key,
- str,
- NULL);
- g_object_unref (conf);
- g_free (str);
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ KeyEntry *ke;
+ char *str;
+ MateConfClient *conf;
+
+ model = gtk_tree_view_get_model (view);
+
+ path = gtk_tree_path_new_from_string (path_string);
+ if (!path)
+ return;
+
+ if (!gtk_tree_model_get_iter (model, &iter, path))
+ {
+ gtk_tree_path_free (path);
+ return;
+ }
+ gtk_tree_path_free (path);
+
+ gtk_tree_model_get (model, &iter, KEYVAL_COLUMN, &ke, -1);
+
+ /* sanity check */
+ if (ke == NULL)
+ return;
+
+ ke->mateconf_keyval = 0;
+ ke->mateconf_mask = 0;
+ ke->needs_mateconf_sync = TRUE;
+
+ str = binding_name (0, 0);
+
+ _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
+ "Cleared keybinding for mateconf %s",
+ ke->mateconf_key);
+
+ conf = mateconf_client_get_default ();
+ mateconf_client_set_string (conf,
+ ke->mateconf_key,
+ str,
+ NULL);
+ g_object_unref (conf);
+ g_free (str);
}
static void
edit_keys_dialog_destroy_cb (GtkWidget *widget,
gpointer user_data)
{
- g_signal_handlers_disconnect_by_func (notification_group, G_CALLBACK (treeview_accel_changed_cb), user_data);
- edit_keys_dialog = NULL;
- edit_keys_store = NULL;
+ g_signal_handlers_disconnect_by_func (notification_group, G_CALLBACK (treeview_accel_changed_cb), user_data);
+ edit_keys_dialog = NULL;
+ edit_keys_store = NULL;
}
static void
edit_keys_dialog_response_cb (GtkWidget *editor,
int response,
gpointer use_data)
-{
- if (response == GTK_RESPONSE_HELP)
- {
- terminal_util_show_help ("mate-terminal-shortcuts", GTK_WINDOW (editor));
- return;
- }
-
- gtk_widget_destroy (editor);
+{
+ if (response == GTK_RESPONSE_HELP)
+ {
+ terminal_util_show_help ("mate-terminal-shortcuts", GTK_WINDOW (editor));
+ return;
+ }
+
+ gtk_widget_destroy (editor);
}
#ifdef MATE_ENABLE_DEBUG
@@ -894,119 +966,119 @@ row_changed (GtkTreeModel *tree_model,
GtkTreeIter *iter,
gpointer user_data)
{
- _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
- "ROW-CHANGED [%s]\n", gtk_tree_path_to_string (path) /* leak */);
+ _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
+ "ROW-CHANGED [%s]\n", gtk_tree_path_to_string (path) /* leak */);
}
#endif
void
terminal_edit_keys_dialog_show (GtkWindow *transient_parent)
{
- TerminalApp *app;
- GtkWidget *dialog, *tree_view, *disable_mnemonics_button, *disable_menu_accel_button;
- GtkTreeViewColumn *column;
- GtkCellRenderer *cell_renderer;
- GtkTreeStore *tree;
- guint i;
-
- if (edit_keys_dialog != NULL)
- goto done;
-
- if (!terminal_util_load_builder_file ("keybinding-editor.ui",
- "keybindings-dialog", &dialog,
- "disable-mnemonics-checkbutton", &disable_mnemonics_button,
- "disable-menu-accel-checkbutton", &disable_menu_accel_button,
- "accelerators-treeview", &tree_view,
- NULL))
- return;
-
- app = terminal_app_get ();
- terminal_util_bind_object_property_to_widget (G_OBJECT (app), TERMINAL_APP_ENABLE_MNEMONICS,
- disable_mnemonics_button, 0);
- terminal_util_bind_object_property_to_widget (G_OBJECT (app), TERMINAL_APP_ENABLE_MENU_BAR_ACCEL,
- disable_menu_accel_button, 0);
-
- /* Column 1 */
- cell_renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("_Action"),
- cell_renderer,
- "text", ACTION_COLUMN,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
- gtk_tree_view_column_set_sort_column_id (column, ACTION_COLUMN);
-
- /* Column 2 */
- cell_renderer = gtk_cell_renderer_accel_new ();
- g_object_set (cell_renderer,
- "editable", TRUE,
- "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK,
- NULL);
- g_signal_connect (cell_renderer, "accel-edited",
- G_CALLBACK (accel_edited_callback), tree_view);
- g_signal_connect (cell_renderer, "accel-cleared",
- G_CALLBACK (accel_cleared_callback), tree_view);
-
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_set_title (column, _("Shortcut _Key"));
- gtk_tree_view_column_pack_start (column, cell_renderer, TRUE);
- gtk_tree_view_column_set_cell_data_func (column, cell_renderer, accel_set_func, NULL, NULL);
- gtk_tree_view_column_set_sort_column_id (column, KEYVAL_COLUMN);
- gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
-
- /* Add the data */
-
- tree = edit_keys_store = gtk_tree_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER);
+ TerminalApp *app;
+ GtkWidget *dialog, *tree_view, *disable_mnemonics_button, *disable_menu_accel_button;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *cell_renderer;
+ GtkTreeStore *tree;
+ guint i;
+
+ if (edit_keys_dialog != NULL)
+ goto done;
+
+ if (!terminal_util_load_builder_file ("keybinding-editor.ui",
+ "keybindings-dialog", &dialog,
+ "disable-mnemonics-checkbutton", &disable_mnemonics_button,
+ "disable-menu-accel-checkbutton", &disable_menu_accel_button,
+ "accelerators-treeview", &tree_view,
+ NULL))
+ return;
+
+ app = terminal_app_get ();
+ terminal_util_bind_object_property_to_widget (G_OBJECT (app), TERMINAL_APP_ENABLE_MNEMONICS,
+ disable_mnemonics_button, 0);
+ terminal_util_bind_object_property_to_widget (G_OBJECT (app), TERMINAL_APP_ENABLE_MENU_BAR_ACCEL,
+ disable_menu_accel_button, 0);
+
+ /* Column 1 */
+ cell_renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes (_("_Action"),
+ cell_renderer,
+ "text", ACTION_COLUMN,
+ NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
+ gtk_tree_view_column_set_sort_column_id (column, ACTION_COLUMN);
+
+ /* Column 2 */
+ cell_renderer = gtk_cell_renderer_accel_new ();
+ g_object_set (cell_renderer,
+ "editable", TRUE,
+ "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK,
+ NULL);
+ g_signal_connect (cell_renderer, "accel-edited",
+ G_CALLBACK (accel_edited_callback), tree_view);
+ g_signal_connect (cell_renderer, "accel-cleared",
+ G_CALLBACK (accel_cleared_callback), tree_view);
+
+ column = gtk_tree_view_column_new ();
+ gtk_tree_view_column_set_title (column, _("Shortcut _Key"));
+ gtk_tree_view_column_pack_start (column, cell_renderer, TRUE);
+ gtk_tree_view_column_set_cell_data_func (column, cell_renderer, accel_set_func, NULL, NULL);
+ gtk_tree_view_column_set_sort_column_id (column, KEYVAL_COLUMN);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
+
+ /* Add the data */
+
+ tree = edit_keys_store = gtk_tree_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER);
#ifdef MATE_ENABLE_DEBUG
- _TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ACCELS)
- g_signal_connect (tree, "row-changed", G_CALLBACK (row_changed), NULL);
+ _TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ACCELS)
+ g_signal_connect (tree, "row-changed", G_CALLBACK (row_changed), NULL);
#endif
- for (i = 0; i < G_N_ELEMENTS (all_entries); ++i)
- {
- GtkTreeIter parent_iter;
- guint j;
-
- gtk_tree_store_append (tree, &parent_iter, NULL);
- gtk_tree_store_set (tree, &parent_iter,
- ACTION_COLUMN, _(all_entries[i].user_visible_name),
- -1);
-
- for (j = 0; j < all_entries[i].n_elements; ++j)
+ for (i = 0; i < G_N_ELEMENTS (all_entries); ++i)
{
- KeyEntry *key_entry = &(all_entries[i].key_entry[j]);
- GtkTreeIter iter;
-
- gtk_tree_store_insert_with_values (tree, &iter, &parent_iter, -1,
- ACTION_COLUMN, _(key_entry->user_visible_name),
- KEYVAL_COLUMN, key_entry,
- -1);
+ GtkTreeIter parent_iter;
+ guint j;
+
+ gtk_tree_store_append (tree, &parent_iter, NULL);
+ gtk_tree_store_set (tree, &parent_iter,
+ ACTION_COLUMN, _(all_entries[i].user_visible_name),
+ -1);
+
+ for (j = 0; j < all_entries[i].n_elements; ++j)
+ {
+ KeyEntry *key_entry = &(all_entries[i].key_entry[j]);
+ GtkTreeIter iter;
+
+ gtk_tree_store_insert_with_values (tree, &iter, &parent_iter, -1,
+ ACTION_COLUMN, _(key_entry->user_visible_name),
+ KEYVAL_COLUMN, key_entry,
+ -1);
+ }
}
- }
- gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (tree),
- KEYVAL_COLUMN, accel_compare_func,
- NULL, NULL);
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (tree), ACTION_COLUMN,
- GTK_SORT_ASCENDING);
+ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (tree),
+ KEYVAL_COLUMN, accel_compare_func,
+ NULL, NULL);
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (tree), ACTION_COLUMN,
+ GTK_SORT_ASCENDING);
- gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (tree));
- g_object_unref (tree);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (tree));
+ g_object_unref (tree);
- gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
+ gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
- g_signal_connect (notification_group, "accel-changed",
- G_CALLBACK (treeview_accel_changed_cb), tree);
+ g_signal_connect (notification_group, "accel-changed",
+ G_CALLBACK (treeview_accel_changed_cb), tree);
- edit_keys_dialog = dialog;
- g_signal_connect (dialog, "destroy",
- G_CALLBACK (edit_keys_dialog_destroy_cb), tree);
- g_signal_connect (dialog, "response",
- G_CALLBACK (edit_keys_dialog_response_cb),
- NULL);
- gtk_window_set_default_size (GTK_WINDOW (dialog), -1, 350);
+ edit_keys_dialog = dialog;
+ g_signal_connect (dialog, "destroy",
+ G_CALLBACK (edit_keys_dialog_destroy_cb), tree);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (edit_keys_dialog_response_cb),
+ NULL);
+ gtk_window_set_default_size (GTK_WINDOW (dialog), -1, 350);
done:
- gtk_window_set_transient_for (GTK_WINDOW (edit_keys_dialog), transient_parent);
- gtk_window_present (GTK_WINDOW (edit_keys_dialog));
+ gtk_window_set_transient_for (GTK_WINDOW (edit_keys_dialog), transient_parent);
+ gtk_window_present (GTK_WINDOW (edit_keys_dialog));
}