forked from AuroraMiddleware/gtk
9800f731e0
Tue Nov 20 21:25:08 2001 Tim Janik <timj@gtk.org> * applied patch from owen to get rid of accel map notifiers. changed things to fix reentrancy and API as discussed on gtk-devel. * gtk/gtkaccelgroup.[hc]: (gtk_accel_group_finalize): unregister this accel group from all accel map paths. (accel_closure_invalidate): handle invalidation of closures by disconnecting their accelerators. (quick_accel_add): move closure connection and changed notification into this function to reduce code duplication. don't emit change notification on closurers without accelerators. (quick_accel_remove): rewrite, do the exact opposite of quick_accel_add for a GtkAccelGroupEntry. (gtk_accel_group_connect): get rid of the accel_path_quark argument. (gtk_accel_group_connect_by_path): new function to add accelerators with an accel path. (gtk_accel_group_disconnect_closure): new function, disconnect a closure from of an accel group. (gtk_accel_group_disconnect): loop over all closure for a accel_ley, accel_mods pair and remove them. (_gtk_accel_group_reconnect): new function that basically does gtk_accel_group_disconnect_closure() and gtk_accel_group_connect_by_path() once an accel path changed. (gtk_accel_groups_disconnect_closure): remove this, there's gtk_accel_group_disconnect_closure(). * gtk/gtkaccelmap.[hc]: keep list of accel groups per entry now, nuke notifiers. (_gtk_accel_path_is_valid): make this non-static for gtkwidget.c and gtkaccelgroup.c assertions. (gtk_accel_map_add_notifer): removed this function. (gtk_accel_map_remove_notifer): same. (_gtk_accel_map_add_group): (_gtk_accel_map_remove_group): (un-)register accel groups, with accel paths for correct propagation. (gtk_accel_map_add_entry): return void. (gtk_accel_map_lookup): return gboolean instead of GQuark. * gtk/gtkitemfactory.c (gtk_item_factory_add_foreign): always set accel_path on widgets. * gtk/gtkwidget.[hc]: (accel_path_changed): got rid of this, changes are handled by accel maps internally now. (_gtk_widget_set_accel_path): get things to work without notifiers. (gtk_widget_list_accel_closures): list accel closures of a widget. * gtk/gtkwindow.[hc]: rename ::accels_changed, to ::keys_changed.
156 lines
4.5 KiB
Plaintext
156 lines
4.5 KiB
Plaintext
<!-- ##### SECTION Title ##### -->
|
|
GtkAccelLabel
|
|
|
|
<!-- ##### SECTION Short_Description ##### -->
|
|
a label which displays an accelerator key on the right of the text.
|
|
|
|
<!-- ##### SECTION Long_Description ##### -->
|
|
<para>
|
|
The #GtkAccelLabel widget is a subclass of #GtkLabel that also displays an
|
|
accelerator key on the right of the label text, e.g. 'Ctl+S'.
|
|
It is commonly used in menus to show the keyboard short-cuts for commands.
|
|
</para>
|
|
<para>
|
|
The accelerator key to display is not set explicitly.
|
|
Instead, the #GtkAccelLabel displays the accelerators which have been added to
|
|
a particular widget. This widget is set by calling
|
|
gtk_accel_label_set_accel_widget().
|
|
</para>
|
|
<para>
|
|
For example, a #GtkMenuItem widget may have an accelerator added to emit the
|
|
"activate" signal when the 'Ctl+S' key combination is pressed.
|
|
A #GtkAccelLabel is created and added to the #GtkMenuItem, and
|
|
gtk_accel_label_set_accel_widget() is called with the #GtkMenuItem as the
|
|
second argument. The #GtkAccelLabel will now display 'Ctl+S' after its label.
|
|
</para>
|
|
<para>
|
|
Note that creating a #GtkMenuItem with gtk_menu_item_new_with_label() (or
|
|
one of the similar functions for #GtkCheckMenuItem and #GtkRadioMenuItem)
|
|
automatically adds a #GtkAccelLabel to the #GtkMenuItem and calls
|
|
gtk_accel_label_set_accel_widget() to set it up for you.
|
|
</para>
|
|
<para>
|
|
A #GtkAccelLabel will only display accelerators which have %GTK_ACCEL_VISIBLE
|
|
set (see #GtkAccelFlags).
|
|
A #GtkAccelLabel can display multiple accelerators and even signal names,
|
|
though it is almost always used to display just one accelerator key.
|
|
</para>
|
|
|
|
<example>
|
|
<title>Creating a simple menu item with an accelerator key.</title>
|
|
<programlisting>
|
|
GtkWidget *save_item;
|
|
GtkAccelGroup *accel_group;
|
|
|
|
/* Create a #GtkAccelGroup and add it to the window. */
|
|
accel_group = gtk_accel_group_new ();
|
|
gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
|
|
|
|
/* Create the menu item using the convenience function. */
|
|
save_item = gtk_menu_item_new_with_label ("Save");
|
|
gtk_widget_show (save_item);
|
|
gtk_container_add (GTK_CONTAINER (menu), save_item);
|
|
|
|
/* Now add the accelerator to the #GtkMenuItem. Note that since we called
|
|
gtk_menu_item_new_with_label() to create the #GtkMenuItem the
|
|
#GtkAccelLabel is automatically set up to display the #GtkMenuItem
|
|
accelerators. We just need to make sure we use GTK_ACCEL_VISIBLE here. */
|
|
gtk_widget_add_accelerator (save_item, "activate", accel_group,
|
|
GDK_s, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
|
|
</programlisting>
|
|
</example>
|
|
|
|
<!-- ##### SECTION See_Also ##### -->
|
|
<para>
|
|
<variablelist>
|
|
|
|
<varlistentry>
|
|
<term><link linkend="gtk-keyboard-accelerators">Keyboard Accelerators</link>
|
|
</term>
|
|
<listitem><para>installing and using keyboard short-cuts.</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term>#GtkItemFactory</term>
|
|
<listitem><para>an easier way to create menus.</para></listitem>
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
</para>
|
|
|
|
<!-- ##### STRUCT GtkAccelLabel ##### -->
|
|
<para>
|
|
The #GtkAccelLabel-struct struct contains private data only, and
|
|
should be accessed using the functions below.
|
|
</para>
|
|
|
|
|
|
<!-- ##### FUNCTION gtk_accel_label_new ##### -->
|
|
<para>
|
|
Creates a new #GtkAccelLabel.
|
|
</para>
|
|
|
|
@string: the label string. Must be non-%NULL.
|
|
@Returns: a new #GtkAccelLabel.
|
|
|
|
|
|
<!-- ##### FUNCTION gtk_accel_label_set_accel_closure ##### -->
|
|
<para>
|
|
|
|
</para>
|
|
|
|
@accel_label:
|
|
@closure:
|
|
|
|
|
|
<!-- ##### FUNCTION gtk_accel_label_get_accel_widget ##### -->
|
|
<para>
|
|
|
|
</para>
|
|
|
|
@accel_label:
|
|
@Returns:
|
|
|
|
|
|
<!-- ##### FUNCTION gtk_accel_label_set_accel_widget ##### -->
|
|
<para>
|
|
Sets the widget whose accelerators are to be shown.
|
|
</para>
|
|
|
|
@accel_label: a #GtkAccelLabel.
|
|
@accel_widget: the widget whose accelerators are to be displayed.
|
|
|
|
|
|
<!-- ##### FUNCTION gtk_accel_label_get_accel_width ##### -->
|
|
<para>
|
|
Returns the width needed to display the accelerator key(s).
|
|
This is used by menus to align all of the #GtkMenuItem widgets, and shouldn't
|
|
be needed by applications.
|
|
</para>
|
|
|
|
@accel_label: a #GtkAccelLabel.
|
|
@Returns: the width needed to display the accelerator key(s).
|
|
|
|
|
|
<!-- ##### FUNCTION gtk_accel_label_refetch ##### -->
|
|
<para>
|
|
Recreates the string representing the accelerator keys.
|
|
This should not be needed since the string is automatically updated whenever
|
|
accelerators are added or removed from the associated widget.
|
|
</para>
|
|
|
|
@accel_label: a #GtkAccelLabel.
|
|
@Returns: always returns %FALSE.
|
|
|
|
|
|
<!-- ##### ARG GtkAccelLabel:accel-closure ##### -->
|
|
<para>
|
|
|
|
</para>
|
|
|
|
<!-- ##### ARG GtkAccelLabel:accel-widget ##### -->
|
|
<para>
|
|
The widget whose accelerators are to be shown by the #GtkAccelLabel.
|
|
</para>
|
|
|