forked from AuroraMiddleware/gtk
add new boolean settings gtk-enable-accels and gtk-enable-mnemonics which
2007-02-05 Michael Natterer <mitch@imendio.com> * gtk/gtksettings.c: add new boolean settings gtk-enable-accels and gtk-enable-mnemonics which enable/disable accelerators and mnemonics (bug #72375, based on a patch from Tommi Komulainen). * gtk/gtkwindow.c (gtk_window_activate_key) * gtk/gtkmenushell.c (gtk_menu_shell_key_press): don't invoke them if the resp. setting is FALSE. * gtk/gtkaccellabel.c (gtk_accel_label_refetch) * gtk/gtklabel.c (gtk_label_set_pattern_internal): don't display them if the setting is FALSE. * gtk/gtklabel.c: added signal connection to the screen's settings object and traverse all widgets on the screen when the setting changes. It's slightly ugly to also update GtkAccelLabels here, but less ugly than connecting and traversing all widgets twice. svn path=/trunk/; revision=17262
This commit is contained in:
parent
aca7e2316a
commit
17fed85c24
19
ChangeLog
19
ChangeLog
@ -1,3 +1,22 @@
|
||||
2007-02-05 Michael Natterer <mitch@imendio.com>
|
||||
|
||||
* gtk/gtksettings.c: add new boolean settings gtk-enable-accels
|
||||
and gtk-enable-mnemonics which enable/disable accelerators and
|
||||
mnemonics (bug #72375, based on a patch from Tommi Komulainen).
|
||||
|
||||
* gtk/gtkwindow.c (gtk_window_activate_key)
|
||||
* gtk/gtkmenushell.c (gtk_menu_shell_key_press): don't invoke them
|
||||
if the resp. setting is FALSE.
|
||||
|
||||
* gtk/gtkaccellabel.c (gtk_accel_label_refetch)
|
||||
* gtk/gtklabel.c (gtk_label_set_pattern_internal): don't display
|
||||
them if the setting is FALSE.
|
||||
|
||||
* gtk/gtklabel.c: added signal connection to the screen's settings
|
||||
object and traverse all widgets on the screen when the setting
|
||||
changes. It's slightly ugly to also update GtkAccelLabels here,
|
||||
but less ugly than connecting and traversing all widgets twice.
|
||||
|
||||
2007-02-05 Michael Natterer <mitch@imendio.com>
|
||||
|
||||
* gtk/gtktextbuffer.h (enum GtkTextBufferTargetInfo): changed
|
||||
|
@ -664,6 +664,8 @@ _gtk_accel_label_class_get_accelerator_label (GtkAccelLabelClass *klass,
|
||||
gboolean
|
||||
gtk_accel_label_refetch (GtkAccelLabel *accel_label)
|
||||
{
|
||||
gboolean enable_accels;
|
||||
|
||||
g_return_val_if_fail (GTK_IS_ACCEL_LABEL (accel_label), FALSE);
|
||||
|
||||
if (accel_label->accel_string)
|
||||
@ -672,7 +674,11 @@ gtk_accel_label_refetch (GtkAccelLabel *accel_label)
|
||||
accel_label->accel_string = NULL;
|
||||
}
|
||||
|
||||
if (accel_label->accel_closure)
|
||||
g_object_get (gtk_widget_get_settings (GTK_WIDGET (accel_label)),
|
||||
"gtk-enable-accels", &enable_accels,
|
||||
NULL);
|
||||
|
||||
if (enable_accels && accel_label->accel_closure)
|
||||
{
|
||||
GtkAccelKey *key = gtk_accel_group_find (accel_label->accel_group, find_accel, accel_label->accel_closure);
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
#include "gtklabel.h"
|
||||
#include "gtkaccellabel.h"
|
||||
#include "gtkdnd.h"
|
||||
#include "gtkmain.h"
|
||||
#include "gtkmarshalers.h"
|
||||
@ -968,13 +969,77 @@ gtk_label_hierarchy_changed (GtkWidget *widget,
|
||||
gtk_label_setup_mnemonic (label, label->mnemonic_keyval);
|
||||
}
|
||||
|
||||
static void
|
||||
label_shortcut_setting_apply (GtkLabel *label)
|
||||
{
|
||||
gtk_label_recalculate (label);
|
||||
if (GTK_IS_ACCEL_LABEL (label))
|
||||
gtk_accel_label_refetch (GTK_ACCEL_LABEL (label));
|
||||
}
|
||||
|
||||
static void
|
||||
label_shortcut_setting_traverse_container (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
if (GTK_IS_LABEL (widget))
|
||||
label_shortcut_setting_apply (GTK_LABEL (widget));
|
||||
else if (GTK_IS_CONTAINER (widget))
|
||||
gtk_container_forall (GTK_CONTAINER (widget),
|
||||
label_shortcut_setting_traverse_container, data);
|
||||
}
|
||||
|
||||
static void
|
||||
label_shortcut_setting_changed (GtkSettings *settings)
|
||||
{
|
||||
GList *list, *l;
|
||||
|
||||
list = gtk_window_list_toplevels ();
|
||||
|
||||
for (l = list; l ; l = l->next)
|
||||
{
|
||||
GtkWidget *widget = l->data;
|
||||
|
||||
if (gtk_widget_get_settings (widget) == settings)
|
||||
gtk_container_forall (GTK_CONTAINER (widget),
|
||||
label_shortcut_setting_traverse_container, NULL);
|
||||
}
|
||||
|
||||
g_list_free (list);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_label_screen_changed (GtkWidget *widget,
|
||||
GdkScreen *old_screen)
|
||||
{
|
||||
gtk_label_clear_layout (GTK_LABEL (widget));
|
||||
GtkSettings *settings;
|
||||
gboolean shortcuts_connected;
|
||||
|
||||
if (!gtk_widget_has_screen (widget))
|
||||
return;
|
||||
|
||||
settings = gtk_widget_get_settings (widget);
|
||||
|
||||
shortcuts_connected =
|
||||
GPOINTER_TO_INT (g_object_get_data (G_OBJECT (settings),
|
||||
"gtk-label-shortcuts-connected"));
|
||||
|
||||
if (! shortcuts_connected)
|
||||
{
|
||||
g_signal_connect (settings, "notify::gtk-enable-mnemonics",
|
||||
G_CALLBACK (label_shortcut_setting_changed),
|
||||
NULL);
|
||||
g_signal_connect (settings, "notify::gtk-enable-accels",
|
||||
G_CALLBACK (label_shortcut_setting_changed),
|
||||
NULL);
|
||||
|
||||
g_object_set_data (G_OBJECT (settings), "gtk-label-shortcuts-connected",
|
||||
GINT_TO_POINTER (TRUE));
|
||||
}
|
||||
|
||||
label_shortcut_setting_apply (GTK_LABEL (widget));
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
label_mnemonic_widget_weak_notify (gpointer data,
|
||||
GObject *where_the_object_was)
|
||||
@ -1461,9 +1526,15 @@ gtk_label_set_pattern_internal (GtkLabel *label,
|
||||
const gchar *pattern)
|
||||
{
|
||||
PangoAttrList *attrs;
|
||||
gboolean enable_mnemonics;
|
||||
|
||||
g_return_if_fail (GTK_IS_LABEL (label));
|
||||
|
||||
if (pattern)
|
||||
g_object_get (gtk_widget_get_settings (GTK_WIDGET (label)),
|
||||
"gtk-enable-mnemonics", &enable_mnemonics,
|
||||
NULL);
|
||||
|
||||
if (enable_mnemonics && pattern)
|
||||
attrs = gtk_label_pattern_to_attrs (label, pattern);
|
||||
else
|
||||
attrs = NULL;
|
||||
|
@ -685,6 +685,7 @@ gtk_menu_shell_key_press (GtkWidget *widget,
|
||||
GdkEventKey *event)
|
||||
{
|
||||
GtkMenuShell *menu_shell;
|
||||
gboolean enable_mnemonics;
|
||||
|
||||
g_return_val_if_fail (GTK_IS_MENU_SHELL (widget), FALSE);
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
@ -697,7 +698,14 @@ gtk_menu_shell_key_press (GtkWidget *widget,
|
||||
if (gtk_bindings_activate_event (GTK_OBJECT (widget), event))
|
||||
return TRUE;
|
||||
|
||||
g_object_get (gtk_widget_get_settings (widget),
|
||||
"gtk-enable-mnemonics", &enable_mnemonics,
|
||||
NULL);
|
||||
|
||||
if (enable_mnemonics)
|
||||
return gtk_menu_shell_activate_mnemonic (menu_shell, event);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -100,7 +100,9 @@ enum {
|
||||
PROP_COLOR_HASH,
|
||||
PROP_FILE_CHOOSER_BACKEND,
|
||||
PROP_PRINT_BACKENDS,
|
||||
PROP_PRINT_PREVIEW_COMMAND
|
||||
PROP_PRINT_PREVIEW_COMMAND,
|
||||
PROP_ENABLE_MNEMONICS,
|
||||
PROP_ENABLE_ACCELS
|
||||
};
|
||||
|
||||
|
||||
@ -676,6 +678,40 @@ gtk_settings_class_init (GtkSettingsClass *class)
|
||||
GTK_PARAM_READWRITE),
|
||||
NULL);
|
||||
g_assert (result == PROP_PRINT_PREVIEW_COMMAND);
|
||||
|
||||
/**
|
||||
* GtkSettings:gtk-enable-mnemonics:
|
||||
*
|
||||
* Whether labels and menu items should have visible mnemonics which
|
||||
* can be activated.
|
||||
*
|
||||
* Since: 2.12
|
||||
*/
|
||||
result = settings_install_property_parser (class,
|
||||
g_param_spec_boolean ("gtk-enable-mnemonics",
|
||||
P_("Enable Mnemonics"),
|
||||
P_("Whether labels should have mnemonics"),
|
||||
TRUE,
|
||||
GTK_PARAM_READWRITE),
|
||||
NULL);
|
||||
g_assert (result == PROP_ENABLE_MNEMONICS);
|
||||
|
||||
/**
|
||||
* GtkSettings:gtk-enable-accels:
|
||||
*
|
||||
* Whether menu items should have visible accelerators which can be
|
||||
* activated.
|
||||
*
|
||||
* Since: 2.12
|
||||
*/
|
||||
result = settings_install_property_parser (class,
|
||||
g_param_spec_boolean ("gtk-enable-accels",
|
||||
P_("Enable Accelerators"),
|
||||
P_("Whether menu items should have accelerators"),
|
||||
TRUE,
|
||||
GTK_PARAM_READWRITE),
|
||||
NULL);
|
||||
g_assert (result == PROP_ENABLE_ACCELS);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -7698,12 +7698,28 @@ gtk_window_activate_key (GtkWindow *window,
|
||||
|
||||
if (found_entry)
|
||||
{
|
||||
gboolean enable_mnemonics;
|
||||
gboolean enable_accels;
|
||||
|
||||
g_object_get (gtk_widget_get_settings (GTK_WIDGET (window)),
|
||||
"gtk-enable-mnemonics", &enable_mnemonics,
|
||||
"gtk-enable-accels", &enable_accels,
|
||||
NULL);
|
||||
|
||||
if (found_entry->is_mnemonic)
|
||||
return gtk_window_mnemonic_activate (window, found_entry->keyval, found_entry->modifiers);
|
||||
else
|
||||
return gtk_accel_groups_activate (G_OBJECT (window), found_entry->keyval, found_entry->modifiers);
|
||||
{
|
||||
if (enable_mnemonics)
|
||||
return gtk_window_mnemonic_activate (window, found_entry->keyval,
|
||||
found_entry->modifiers);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (enable_accels)
|
||||
return gtk_accel_groups_activate (G_OBJECT (window), found_entry->keyval,
|
||||
found_entry->modifiers);
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user