[Xfce4-commits] r30116 - terminal/trunk/terminal
Nick Schermer
nick at xfce.org
Sun Jun 28 20:04:18 CEST 2009
Author: nick
Date: 2009-06-28 18:04:18 +0000 (Sun, 28 Jun 2009)
New Revision: 30116
Modified:
terminal/trunk/terminal/terminal-accel-map.c
terminal/trunk/terminal/terminal-accel-map.h
terminal/trunk/terminal/terminal-app.c
terminal/trunk/terminal/terminal-preferences.c
terminal/trunk/terminal/terminal-private.h
terminal/trunk/terminal/terminal-screen.c
terminal/trunk/terminal/terminal-shortcut-editor.c
terminal/trunk/terminal/terminal-widget.c
terminal/trunk/terminal/terminal-window.c
Log:
Change handling of accelerators (bug #4246).
You can now also edit accelerators in the in menu, so
editable menu accelerators are not lost anymore. Also
make the code a bit more efficient on startup and during
shortcut editing.
Modified: terminal/trunk/terminal/terminal-accel-map.c
===================================================================
--- terminal/trunk/terminal/terminal-accel-map.c 2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-accel-map.c 2009-06-28 18:04:18 UTC (rev 30116)
@@ -65,8 +65,7 @@
GParamSpec **specs;
GParamSpec *spec;
gchar *signal_name;
- guint nspecs;
- guint n;
+ guint nspecs, n;
map->preferences = terminal_preferences_get ();
@@ -114,28 +113,68 @@
_terminal_return_if_fail (g_str_has_prefix (pspec->name, "accel-"));
+ g_object_get (G_OBJECT (preferences), pspec->name, &accelerator, NULL);
+
accelerator_path = g_strconcat ("<Actions>/terminal-window/", pspec->name + 6, NULL);
-
- g_object_get (G_OBJECT (preferences), pspec->name, &accelerator, NULL);
- if (G_LIKELY (accelerator != NULL))
+ if (G_UNLIKELY (IS_STRING (accelerator)))
{
gtk_accelerator_parse (accelerator, &accelerator_key, &accelerator_mods);
gtk_accel_map_change_entry (accelerator_path,
accelerator_key,
accelerator_mods,
TRUE);
- g_free (accelerator);
}
else
{
gtk_accel_map_change_entry (accelerator_path, 0, 0, TRUE);
}
-
g_free (accelerator_path);
+ g_free (accelerator);
}
+static void
+terminal_accel_map_changed (GtkAccelMap *object,
+ gchar *accel_path,
+ guint accel_key,
+ GdkModifierType accel_mods,
+ TerminalAccelMap *map)
+{
+ gchar *property, *name;
+ GParamSpec **specs;
+ guint nspecs, n;
+
+ _terminal_return_if_fail (TERMINAL_IS_ACCEL_MAP (map));
+ _terminal_return_if_fail (GTK_IS_ACCEL_MAP (object));
+
+ /* only accept window property names */
+ if (!g_str_has_prefix (accel_path, "<Actions>/terminal-window/"))
+ return;
+
+ /* create the property name */
+ property = g_strconcat ("accel-", accel_path + 26, NULL);
+
+ /* check if the property exists in the preferences object */
+ specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (map->preferences), &nspecs);
+ for (n = 0; n < nspecs; ++n)
+ {
+ if (exo_str_is_equal (specs[n]->name, property))
+ {
+ /* store the new accelerator */
+ name = gtk_accelerator_name (accel_key, accel_mods);
+ g_object_set (G_OBJECT (map->preferences), property, name, NULL);
+ g_free (name);
+
+ break;
+ }
+ }
+ g_free (property);
+ g_free (specs);
+}
+
+
+
/**
* terminal_accel_map_new:
*
@@ -146,3 +185,17 @@
{
return g_object_new (TERMINAL_TYPE_ACCEL_MAP, NULL);
}
+
+
+
+void
+terminal_accel_map_start_monitor (TerminalAccelMap *map)
+{
+ GtkAccelMap *gtkmap;
+
+ _terminal_return_if_fail (TERMINAL_IS_ACCEL_MAP (map));
+
+ /* monitor the accel map for changes */
+ gtkmap = gtk_accel_map_get ();
+ g_signal_connect (G_OBJECT (gtkmap), "changed", G_CALLBACK (terminal_accel_map_changed), map);
+}
Modified: terminal/trunk/terminal/terminal-accel-map.h
===================================================================
--- terminal/trunk/terminal/terminal-accel-map.h 2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-accel-map.h 2009-06-28 18:04:18 UTC (rev 30116)
@@ -41,10 +41,12 @@
GObjectClass __parent__;
};
-GType terminal_accel_map_get_type (void) G_GNUC_CONST;
+GType terminal_accel_map_get_type (void) G_GNUC_CONST;
-TerminalAccelMap *terminal_accel_map_new (void);
+TerminalAccelMap *terminal_accel_map_new (void);
+void terminal_accel_map_start_monitor (TerminalAccelMap *map);
+
G_END_DECLS
#endif /* !__TERMINAL_ACCEL_MAP_H__ */
Modified: terminal/trunk/terminal/terminal-app.c
===================================================================
--- terminal/trunk/terminal/terminal-app.c 2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-app.c 2009-06-28 18:04:18 UTC (rev 30116)
@@ -48,7 +48,7 @@
static void terminal_app_finalize (GObject *object);
static void terminal_app_update_accels (TerminalApp *app);
-static GtkWidget *terminal_app_create_window (TerminalApp *app,
+static GtkWidget *terminal_app_create_window (TerminalApp *app,
gboolean fullscreen,
TerminalVisibility menubar,
TerminalVisibility borders,
@@ -483,6 +483,8 @@
g_list_foreach (attrs, (GFunc) terminal_window_attr_free, NULL);
g_list_free (attrs);
+ terminal_accel_map_start_monitor (app->accel_map);
+
return TRUE;
}
Modified: terminal/trunk/terminal/terminal-preferences.c
===================================================================
--- terminal/trunk/terminal/terminal-preferences.c 2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-preferences.c 2009-06-28 18:04:18 UTC (rev 30116)
@@ -395,7 +395,7 @@
g_param_spec_string ("accel-preferences",
_("Preferences"),
"AccelPreferences",
- _("Disabled"),
+ NULL,
EXO_PARAM_READWRITE));
/**
@@ -406,7 +406,7 @@
g_param_spec_string ("accel-show-menubar",
_("Show menubar"),
"AccelShowMenubar",
- _("Disabled"),
+ NULL,
EXO_PARAM_READWRITE));
/**
@@ -417,7 +417,7 @@
g_param_spec_string ("accel-show-toolbars",
_("Show toolbars"),
"AccelShowToolbars",
- _("Disabled"),
+ NULL,
EXO_PARAM_READWRITE));
/**
@@ -428,7 +428,7 @@
g_param_spec_string ("accel-show-borders",
_("Show borders"),
"AccelShowBorders",
- _("Disabled"),
+ NULL,
EXO_PARAM_READWRITE));
/**
@@ -450,7 +450,7 @@
g_param_spec_string ("accel-set-title",
_("Set Title"),
"AccelSetTitle",
- _("Disabled"),
+ NULL,
EXO_PARAM_READWRITE));
/**
@@ -461,7 +461,7 @@
g_param_spec_string ("accel-reset",
_("Reset"),
"AccelReset",
- _("Disabled"),
+ NULL,
EXO_PARAM_READWRITE));
/**
@@ -472,7 +472,7 @@
g_param_spec_string ("accel-reset-and-clear",
_("Reset and Clear"),
"AccelResetAndClear",
- _("Disabled"),
+ NULL,
EXO_PARAM_READWRITE));
/**
Modified: terminal/trunk/terminal/terminal-private.h
===================================================================
--- terminal/trunk/terminal/terminal-private.h 2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-private.h 2009-06-28 18:04:18 UTC (rev 30116)
@@ -33,6 +33,8 @@
#define TERMINAL_HAS_ANTI_ALIAS_SETTING (TRUE)
#endif
+#define IS_STRING(string) (string != NULL && *string != '\0')
+
/* support macros for debugging */
#ifndef NDEBUG
#define _terminal_assert(expr) g_assert (expr)
Modified: terminal/trunk/terminal/terminal-screen.c
===================================================================
--- terminal/trunk/terminal/terminal-screen.c 2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-screen.c 2009-06-28 18:04:18 UTC (rev 30116)
@@ -1239,7 +1239,7 @@
_terminal_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL);
- if (G_UNLIKELY (*screen->custom_title != '\0'))
+ if (IS_STRING (screen->custom_title))
return g_strdup (screen->custom_title);
g_object_get (G_OBJECT (screen->preferences),
Modified: terminal/trunk/terminal/terminal-shortcut-editor.c
===================================================================
--- terminal/trunk/terminal/terminal-shortcut-editor.c 2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-shortcut-editor.c 2009-06-28 18:04:18 UTC (rev 30116)
@@ -30,6 +30,7 @@
#include <terminal/terminal-preferences.h>
#include <terminal/terminal-shortcut-editor.h>
#include <terminal/terminal-stock.h>
+#include <terminal/terminal-private.h>
#if defined(GDK_WINDOWING_WIN32)
#include <gdk/gdkwin32.h>
@@ -203,18 +204,13 @@
g_object_get (G_OBJECT (editor->preferences), pspec->name, &accel, NULL);
- if (accel == NULL)
- accel = g_strdup (_("Disabled"));
-
gtk_tree_store_append (store, &child, &parent);
gtk_tree_store_set (store, &child,
COLUMN_TITLE, g_param_spec_get_nick (pspec),
- COLUMN_ACCEL, accel,
+ COLUMN_ACCEL, IS_STRING (accel) ? accel : _("Disabled"),
COLUMN_PROPERTY, pspec->name,
-1);
-
- if (accel != NULL)
- g_free (accel);
+ g_free (accel);
}
}
@@ -393,7 +389,7 @@
response = gtk_dialog_run (GTK_DIALOG (dialog));
if (response == TERMINAL_RESPONSE_CLEAR)
- g_object_set (G_OBJECT (editor->preferences), property, _("Disabled"), NULL);
+ g_object_set (G_OBJECT (editor->preferences), property, "", NULL);
gdk_keyboard_ungrab (GDK_CURRENT_TIME);
@@ -483,6 +479,7 @@
GtkTreeIter child;
gchar *property;
gchar *accel;
+ gboolean found = FALSE;
g_object_get (G_OBJECT (preferences), pspec->name, &accel, NULL);
@@ -499,13 +496,17 @@
COLUMN_PROPERTY, &property,
-1);
if (exo_str_is_equal (property, pspec->name))
- gtk_tree_store_set (GTK_TREE_STORE (model), &child, COLUMN_ACCEL, accel, -1);
+ {
+ gtk_tree_store_set (GTK_TREE_STORE (model), &child,
+ COLUMN_ACCEL, IS_STRING (accel) ? accel : _("Disabled"), -1);
+ found = TRUE;
+ }
g_free (property);
}
- while (gtk_tree_model_iter_next (model, &child));
+ while (!found && gtk_tree_model_iter_next (model, &child));
}
}
- while (gtk_tree_model_iter_next (model, &parent));
+ while (!found && gtk_tree_model_iter_next (model, &parent));
}
g_free (accel);
Modified: terminal/trunk/terminal/terminal-widget.c
===================================================================
--- terminal/trunk/terminal/terminal-widget.c 2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-widget.c 2009-06-28 18:04:18 UTC (rev 30116)
@@ -483,7 +483,7 @@
text = (gchar *) gtk_selection_data_get_text (selection_data);
if (G_LIKELY (text != NULL))
{
- if (G_LIKELY (*text != '\0'))
+ if (G_LIKELY (IS_STRING (text)))
vte_terminal_feed_child (VTE_TERMINAL (widget), text, strlen (text));
g_free (text);
}
Modified: terminal/trunk/terminal/terminal-window.c
===================================================================
--- terminal/trunk/terminal/terminal-window.c 2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-window.c 2009-06-28 18:04:18 UTC (rev 30116)
@@ -365,7 +365,6 @@
}
}
-
/* setup mnemonics */
g_object_get (G_OBJECT (window->preferences), "shortcuts-no-mnemonics", &bval, NULL);
if (G_UNLIKELY (bval))
More information about the Xfce4-commits
mailing list