+Thu Mar 22 13:01:44 2001 Tim Janik <timj@gtk.org>
+
+ * gtk/gtklabel.[hc]: some cleanups, fixed mnemonic_widget handling,
+ added PROP_MNEMONIC_WIDGET.
+
+ * gtk/gtkwindow.c (gtk_window_activate_mnemonic):
+ (gtk_window_remove_mnemonic):
+ (gtk_window_add_mnemonic): fixed assertions.
+ (gtk_window_activate_mnemonic): constrain modifier checks to those
+ permitted by gtk_accelerator_get_default_mod_mask().
+ got rid of gtk_window_get_default_accel_group().
+
+ * gtk/gtkwidget.c (gtk_widget_real_activate_mnemonic): handle non
+ activatable widgets either by focussing or a warning.
+ added a signal accumulator to ::activate_mnemonic which stops the
+ emission once a handler returned TRUE.
+
2001-03-22 Havoc Pennington <hp@pobox.com>
* gtk/gtktoolbar.c (gtk_toolbar_insert_stock): handle mnemonics in
+Thu Mar 22 13:01:44 2001 Tim Janik <timj@gtk.org>
+
+ * gtk/gtklabel.[hc]: some cleanups, fixed mnemonic_widget handling,
+ added PROP_MNEMONIC_WIDGET.
+
+ * gtk/gtkwindow.c (gtk_window_activate_mnemonic):
+ (gtk_window_remove_mnemonic):
+ (gtk_window_add_mnemonic): fixed assertions.
+ (gtk_window_activate_mnemonic): constrain modifier checks to those
+ permitted by gtk_accelerator_get_default_mod_mask().
+ got rid of gtk_window_get_default_accel_group().
+
+ * gtk/gtkwidget.c (gtk_widget_real_activate_mnemonic): handle non
+ activatable widgets either by focussing or a warning.
+ added a signal accumulator to ::activate_mnemonic which stops the
+ emission once a handler returned TRUE.
+
2001-03-22 Havoc Pennington <hp@pobox.com>
* gtk/gtktoolbar.c (gtk_toolbar_insert_stock): handle mnemonics in
+Thu Mar 22 13:01:44 2001 Tim Janik <timj@gtk.org>
+
+ * gtk/gtklabel.[hc]: some cleanups, fixed mnemonic_widget handling,
+ added PROP_MNEMONIC_WIDGET.
+
+ * gtk/gtkwindow.c (gtk_window_activate_mnemonic):
+ (gtk_window_remove_mnemonic):
+ (gtk_window_add_mnemonic): fixed assertions.
+ (gtk_window_activate_mnemonic): constrain modifier checks to those
+ permitted by gtk_accelerator_get_default_mod_mask().
+ got rid of gtk_window_get_default_accel_group().
+
+ * gtk/gtkwidget.c (gtk_widget_real_activate_mnemonic): handle non
+ activatable widgets either by focussing or a warning.
+ added a signal accumulator to ::activate_mnemonic which stops the
+ emission once a handler returned TRUE.
+
2001-03-22 Havoc Pennington <hp@pobox.com>
* gtk/gtktoolbar.c (gtk_toolbar_insert_stock): handle mnemonics in
+Thu Mar 22 13:01:44 2001 Tim Janik <timj@gtk.org>
+
+ * gtk/gtklabel.[hc]: some cleanups, fixed mnemonic_widget handling,
+ added PROP_MNEMONIC_WIDGET.
+
+ * gtk/gtkwindow.c (gtk_window_activate_mnemonic):
+ (gtk_window_remove_mnemonic):
+ (gtk_window_add_mnemonic): fixed assertions.
+ (gtk_window_activate_mnemonic): constrain modifier checks to those
+ permitted by gtk_accelerator_get_default_mod_mask().
+ got rid of gtk_window_get_default_accel_group().
+
+ * gtk/gtkwidget.c (gtk_widget_real_activate_mnemonic): handle non
+ activatable widgets either by focussing or a warning.
+ added a signal accumulator to ::activate_mnemonic which stops the
+ emission once a handler returned TRUE.
+
2001-03-22 Havoc Pennington <hp@pobox.com>
* gtk/gtktoolbar.c (gtk_toolbar_insert_stock): handle mnemonics in
+Thu Mar 22 13:01:44 2001 Tim Janik <timj@gtk.org>
+
+ * gtk/gtklabel.[hc]: some cleanups, fixed mnemonic_widget handling,
+ added PROP_MNEMONIC_WIDGET.
+
+ * gtk/gtkwindow.c (gtk_window_activate_mnemonic):
+ (gtk_window_remove_mnemonic):
+ (gtk_window_add_mnemonic): fixed assertions.
+ (gtk_window_activate_mnemonic): constrain modifier checks to those
+ permitted by gtk_accelerator_get_default_mod_mask().
+ got rid of gtk_window_get_default_accel_group().
+
+ * gtk/gtkwidget.c (gtk_widget_real_activate_mnemonic): handle non
+ activatable widgets either by focussing or a warning.
+ added a signal accumulator to ::activate_mnemonic which stops the
+ emission once a handler returned TRUE.
+
2001-03-22 Havoc Pennington <hp@pobox.com>
* gtk/gtktoolbar.c (gtk_toolbar_insert_stock): handle mnemonics in
+Thu Mar 22 13:01:44 2001 Tim Janik <timj@gtk.org>
+
+ * gtk/gtklabel.[hc]: some cleanups, fixed mnemonic_widget handling,
+ added PROP_MNEMONIC_WIDGET.
+
+ * gtk/gtkwindow.c (gtk_window_activate_mnemonic):
+ (gtk_window_remove_mnemonic):
+ (gtk_window_add_mnemonic): fixed assertions.
+ (gtk_window_activate_mnemonic): constrain modifier checks to those
+ permitted by gtk_accelerator_get_default_mod_mask().
+ got rid of gtk_window_get_default_accel_group().
+
+ * gtk/gtkwidget.c (gtk_widget_real_activate_mnemonic): handle non
+ activatable widgets either by focussing or a warning.
+ added a signal accumulator to ::activate_mnemonic which stops the
+ emission once a handler returned TRUE.
+
2001-03-22 Havoc Pennington <hp@pobox.com>
* gtk/gtktoolbar.c (gtk_toolbar_insert_stock): handle mnemonics in
+Thu Mar 22 13:01:44 2001 Tim Janik <timj@gtk.org>
+
+ * gtk/gtklabel.[hc]: some cleanups, fixed mnemonic_widget handling,
+ added PROP_MNEMONIC_WIDGET.
+
+ * gtk/gtkwindow.c (gtk_window_activate_mnemonic):
+ (gtk_window_remove_mnemonic):
+ (gtk_window_add_mnemonic): fixed assertions.
+ (gtk_window_activate_mnemonic): constrain modifier checks to those
+ permitted by gtk_accelerator_get_default_mod_mask().
+ got rid of gtk_window_get_default_accel_group().
+
+ * gtk/gtkwidget.c (gtk_widget_real_activate_mnemonic): handle non
+ activatable widgets either by focussing or a warning.
+ added a signal accumulator to ::activate_mnemonic which stops the
+ emission once a handler returned TRUE.
+
2001-03-22 Havoc Pennington <hp@pobox.com>
* gtk/gtktoolbar.c (gtk_toolbar_insert_stock): handle mnemonics in
</para>
-<!-- ##### USER_FUNCTION GtkEmissionHook ##### -->
-<para>
-A simple function pointer to get invoked when the
-signal is emitted. This allows you tie a hook to the signal type,
-so that it will trap all emissions of that signal, from any object.
-</para>
-<para>
-You may not attach these to signals created with the
-#GTK_RUN_NO_HOOKS flag.
-</para>
-
-@object:
-@signal_id:
-@n_params:
-@params:
-@data:
-@Returns:
-
<!-- ##### ENUM GtkFontFilterType ##### -->
<para>
A set of bit flags used to specify the filter being set
@tentative_match:
@tentative_match_len:
+<!-- ##### ARG GtkLabel:accel-keyval ##### -->
+<para>
+
+</para>
+
+
<!-- ##### ARG GtkObject:object-signal ##### -->
<para>
Setting this with a GtkType of GTK_TYPE_SIGNAL connects
@min_width: minimum default width for child buttons.
@min_height: minimum default height for child buttons.
+<!-- ##### FUNCTION gtk_button_new_accel ##### -->
+<para>
+
+</para>
+
+@uline_label:
+@accel_group:
+@Returns:
+
+<!-- ##### FUNCTION gtk_button_new_stock ##### -->
+<para>
+
+</para>
+
+@stock_id:
+@accel_group:
+@Returns:
+
<!-- ##### FUNCTION gtk_clist_construct ##### -->
<para>
Initializes a previously allocated #GtkCList widget for use. This should not
@Returns: GtkType -- the enumerated type of something.
+<!-- ##### FUNCTION gtk_label_set_markup_with_accel ##### -->
+<para>
+
+</para>
+
+@label:
+@str:
+@Returns:
+
+<!-- ##### FUNCTION gtk_menu_ensure_uline_accel_group ##### -->
+<para>
+
+</para>
+
+@menu:
+@Returns:
+
+<!-- ##### FUNCTION gtk_menu_get_uline_accel_group ##### -->
+<para>
+
+</para>
+
+@menu:
+@Returns:
+
<!-- ##### FUNCTION gtk_object_arg_get ##### -->
<para>
Private function to get an argument and argument info from an object.
@ruler: the gtkruler
-<!-- ##### FUNCTION gtk_signal_add_emission_hook ##### -->
-<para>
-Add an emission hook for a type of signal, for any object.
-</para>
-
-@signal_id: the type of signal to hook for.
-@hook_func: the function to invoke to handle the emission hook.
-@data: the user data passed in to hook_func.
-@Returns: the id (that you may pass as a parameter
-to gtk_signal_remove_emission_hook()).
-@i:
-@h:
-@d:
-
<!-- ##### FUNCTION gtk_signal_add_emission_hook_full ##### -->
<para>
Add an emission hook for a type of signal, for any object.
@object: the object whose signal handlers should be destroyed.
-<!-- ##### FUNCTION gtk_signal_init ##### -->
-<para>
-
-</para>
-
-
<!-- ##### FUNCTION gtk_signal_n_emissions ##### -->
<para>
Find out the recursion depth of emissions for a particular type
which contains all the information, or NULL.
The pointer is allocated just for you: you must g_free() it.
-<!-- ##### FUNCTION gtk_signal_remove_emission_hook ##### -->
-<para>
-Delete an emission hook. (see gtk_signal_add_emission_hook())
-</para>
-
-@signal_id: the id of the signal type.
-@hook_id: the id of the emission handler, returned by add_emission_hook().
-@i:
-@h:
-
<!-- ##### FUNCTION gtk_signal_set_funcs ##### -->
<para>
These set default functions to call when the user didn't
fundamental type.
@varargs_type: Must be a GtkType which is either structured or flag, or NONE.
+<!-- ##### FUNCTION gtk_window_get_default_accel_group ##### -->
+<para>
+
+</para>
+
+@window:
+@Returns:
+
@Returns: The newly created #GtkButton widget.
-<!-- ##### FUNCTION gtk_button_new_accel ##### -->
-<para>
-
-</para>
-
-@uline_label:
-@accel_group:
-@Returns:
-
-
-<!-- ##### FUNCTION gtk_button_new_stock ##### -->
-<para>
-
-</para>
-
-@stock_id:
-@accel_group:
-@Returns:
-
-
<!-- ##### FUNCTION gtk_button_pressed ##### -->
<para>\r
Emits a #GtkButton::pressed signal to the given #GtkButton.\r
@callback:
@callback_action:
@item_type:
+@extra_data:
+@extra_data2:
<!-- ##### STRUCT GtkItemFactoryItem ##### -->
<para>
@str:
-<!-- ##### FUNCTION gtk_label_set_markup_with_accel ##### -->
-<para>
-
-</para>
-
-@label:
-@str:
-@Returns:
-
-
<!-- ##### FUNCTION gtk_label_set_pattern ##### -->
<para>\r
The pattern of underlines you want under the existing text within the\r
</para>
-<!-- ##### ARG GtkLabel:accel-keyval ##### -->
+<!-- ##### ARG GtkLabel:mnemonic-keyval ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GtkLabel:mnemonic-widget ##### -->
<para>
</para>
@Returns:
-<!-- ##### FUNCTION gtk_menu_get_uline_accel_group ##### -->
-<para>
-
-</para>
-
-@menu:
-@Returns:
-
-
-<!-- ##### FUNCTION gtk_menu_ensure_uline_accel_group ##### -->
-<para>
-
-</para>
-
-@menu:
-@Returns:
-
-
<!-- ##### FUNCTION gtk_menu_set_title ##### -->
<para>
Sets the title string for the menu. The title is displayed when the menu
@field:
+<!-- ##### USER_FUNCTION GtkEmissionHook ##### -->
+<para>
+A simple function pointer to get invoked when the
+signal is emitted. This allows you tie a hook to the signal type,
+so that it will trap all emissions of that signal, from any object.
+</para>
+<para>
+You may not attach these to signals created with the
+#GTK_RUN_NO_HOOKS flag.
+</para>
+
+@object:
+@signal_id:
+@n_params:
+@params:
+@data:
+@Returns:
+
+
<!-- ##### ENUM GtkSignalRunType ##### -->
<para>
These configure the signal's emission. They control
@GTK_RUN_ACTION:
@GTK_RUN_NO_HOOKS:
+<!-- ##### FUNCTION gtk_signal_init ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### FUNCTION gtk_signal_new ##### -->
<para>
Create a new signal type. (This is usually done in the
the callbacks.
-<!-- ##### MACRO gtk_signal_lookup ##### -->
+<!-- ##### FUNCTION gtk_signal_lookup ##### -->
<para>
Given the name of the signal and the type of object it connects
to, get the signal's identifying integer. Emitting the signal
It also tries the ancestors of the given type.
</para>
-@Returns: the signal's identifying number, or 0 if no signal was found.
-<!-- # Unused Parameters # -->
@name: the signal's name, e.g. clicked.
@object_type: the type that the signal operates on, e.g. #GTK_TYPE_BUTTON.
+@Returns: the signal's identifying number, or 0 if no signal was found.
-<!-- ##### MACRO gtk_signal_name ##### -->
+<!-- ##### FUNCTION gtk_signal_name ##### -->
<para>
Given the signal's identifier, find its name.
</para>
Two different signals may have the same name, if they have differing types.
</para>
-@Returns: the signal name, or NULL if the signal number was invalid.
-<!-- # Unused Parameters # -->
@signal_id: the signal's identifying number.
+@Returns: the signal name, or NULL if the signal number was invalid.
<!-- ##### FUNCTION gtk_signal_emit ##### -->
followed by one which is a pointer to the return type.
-<!-- ##### MACRO gtk_signal_emit_stop ##### -->
+<!-- ##### FUNCTION gtk_signal_emit_stop ##### -->
<para>
This function aborts a signal's current emission.
</para>
isn't being emitted.
</para>
-@i:
-@s:
-<!-- # Unused Parameters # -->
@object: the object whose signal handlers you wish to stop.
@signal_id: the signal identifier, as returned by gtk_signal_lookup().
+<!-- # Unused Parameters # -->
+@i:
+@s:
<!-- ##### FUNCTION gtk_signal_emit_stop_by_name ##### -->
@name: the name of the signal you wish to stop.
-<!-- ##### MACRO gtk_signal_connect ##### -->
+<!-- ##### FUNCTION gtk_signal_connect ##### -->
<para>
Attach a function pointer and user data to a signal for
a particular object.
</programlisting>
</informalexample>
-@o:
-@s:
-@f:
-@d:
-@Returns: the connection id.
-<!-- # Unused Parameters # -->
@object: the object associated with the signal, e.g. if a button
is getting pressed, this is that button.
@name: name of the signal.
@func: function pointer to attach to the signal.
@func_data: value to pass as to your function (through the marshaller).
+@Returns: the connection id.
+<!-- # Unused Parameters # -->
+@o:
+@s:
+@f:
+@d:
-<!-- ##### MACRO gtk_signal_connect_after ##### -->
+<!-- ##### FUNCTION gtk_signal_connect_after ##### -->
<para>
Attach a function pointer and user data to a signal
so that this handler will be called after the other handlers.
</para>
-@o:
-@s:
-@f:
-@d:
-@Returns: the unique identifier for this attachment: the connection id.
-<!-- # Unused Parameters # -->
@object: the object associated with the signal.
@name: name of the signal.
@func: function pointer to attach to the signal.
@func_data: value to pass as to your function (through the marshaller).
+@Returns: the unique identifier for this attachment: the connection id.
+<!-- # Unused Parameters # -->
+@o:
+@s:
+@f:
+@d:
-<!-- ##### MACRO gtk_signal_connect_object ##### -->
+<!-- ##### FUNCTION gtk_signal_connect_object ##### -->
<para>
This function is for registering a callback that will
call another object's callback. That is,
</programlisting>
</informalexample>
-@o:
-@s:
-@f:
-@d:
-@Returns: the connection id.
-<!-- # Unused Parameters # -->
@object: the object which emits the signal.
@name: the name of the signal.
@func: the function to callback.
@slot_object: the object to pass as the first parameter to func.
(Though it pretends to take an object, you can
really pass any gpointer as the #slot_object .)
+@Returns: the connection id.
+<!-- # Unused Parameters # -->
+@o:
+@s:
+@f:
+@d:
-<!-- ##### MACRO gtk_signal_connect_object_after ##### -->
+<!-- ##### FUNCTION gtk_signal_connect_object_after ##### -->
<para>
Attach a signal hook to a signal, passing in an alternate
object as the first parameter, and guaranteeing
handlers are called first.
</para>
-@o:
-@s:
-@f:
-@d:
-@Returns: the connection id.
-<!-- # Unused Parameters # -->
@object: the object associated with the signal.
@name: name of the signal.
@func: function pointer to attach to the signal.
@slot_object: the object to pass as the first parameter to #func.
+@Returns: the connection id.
+<!-- # Unused Parameters # -->
+@o:
+@s:
+@f:
+@d:
<!-- ##### FUNCTION gtk_signal_connect_full ##### -->
@name: name of the signal.
-<!-- ##### MACRO gtk_signal_disconnect ##### -->
+<!-- ##### FUNCTION gtk_signal_disconnect ##### -->
<para>
Destroy a user-defined handler connection.
</para>
-<!-- # Unused Parameters # -->
@object: the object which the handler pertains to.
@handler_id: the connection id.
-<!-- ##### MACRO gtk_signal_disconnect_by_func ##### -->
+<!-- ##### FUNCTION gtk_signal_disconnect_by_func ##### -->
<para>
Destroy all connections for a particular object, with
the given function-pointer and user-data.
</para>
-@o:
-@f:
-@d:
-<!-- # Unused Parameters # -->
@object: the object which emits the signal.
@func: the function pointer to search for.
@data: the user data to search for.
+<!-- # Unused Parameters # -->
+@o:
+@f:
+@d:
-<!-- ##### MACRO gtk_signal_disconnect_by_data ##### -->
+<!-- ##### FUNCTION gtk_signal_disconnect_by_data ##### -->
<para>
Destroy all connections for a particular object, with
the given user-data.
</para>
-@o:
-@d:
-<!-- # Unused Parameters # -->
@object: the object which emits the signal.
@data: the user data to search for.
+<!-- # Unused Parameters # -->
+@o:
+@d:
-<!-- ##### MACRO gtk_signal_handler_block ##### -->
+<!-- ##### FUNCTION gtk_signal_handler_block ##### -->
<para>
Prevent an user-defined handler from being invoked. All other
signal processing will go on as normal, but this particular
handler will ignore it.
</para>
-<!-- # Unused Parameters # -->
@object: the object which emits the signal to block.
@handler_id: the connection id.
-<!-- ##### MACRO gtk_signal_handler_block_by_func ##### -->
+<!-- ##### FUNCTION gtk_signal_handler_block_by_func ##### -->
<para>
Prevent a user-defined handler from being invoked, by reference to
the user-defined handler's function pointer and user data. (It may result in
multiple hooks being blocked, if you've called connect multiple times.)
</para>
-@o:
-@f:
-@d:
-<!-- # Unused Parameters # -->
@object: the object which emits the signal to block.
@func: the function pointer of the handler to block.
@data: the user data of the handler to block.
+<!-- # Unused Parameters # -->
+@o:
+@f:
+@d:
-<!-- ##### MACRO gtk_signal_handler_block_by_data ##### -->
+<!-- ##### FUNCTION gtk_signal_handler_block_by_data ##### -->
<para>
Prevent all user-defined handlers with a certain user data from being invoked.
</para>
-@o:
-@d:
-<!-- # Unused Parameters # -->
@object: the object which emits the signal we want to block.
@data: the user data of the handlers to block.
+<!-- # Unused Parameters # -->
+@o:
+@d:
-<!-- ##### MACRO gtk_signal_handler_unblock ##### -->
+<!-- ##### FUNCTION gtk_signal_handler_unblock ##### -->
<para>
Undo a block, by connection id. Note that undoing a block doesn't
necessarily make the hook callable, because if you block a
hook twice, you must unblock it twice.
</para>
-<!-- # Unused Parameters # -->
@object: the object which emits the signal we want to unblock.
@handler_id: the emission handler identifier, as returned by
gtk_signal_connect(), etc.
-<!-- ##### MACRO gtk_signal_handler_unblock_by_func ##### -->
+<!-- ##### FUNCTION gtk_signal_handler_unblock_by_func ##### -->
<para>
Undo a block, by function pointer and data.
Note that undoing a block doesn't
hook twice, you must unblock it twice.
</para>
-@o:
-@f:
-@d:
-<!-- # Unused Parameters # -->
@object: the object which emits the signal we want to unblock.
@func: the function pointer to search for.
@data: the user data to search for.
+<!-- # Unused Parameters # -->
+@o:
+@f:
+@d:
-<!-- ##### MACRO gtk_signal_handler_unblock_by_data ##### -->
+<!-- ##### FUNCTION gtk_signal_handler_unblock_by_data ##### -->
<para>
Undo block(s), to all signals for a particular object
with a particular user-data pointer
</para>
-@o:
-@d:
-<!-- # Unused Parameters # -->
@object: the object which emits the signal we want to unblock.
@data: the user data to search for.
+<!-- # Unused Parameters # -->
+@o:
+@d:
-<!-- ##### MACRO gtk_signal_handler_pending ##### -->
+<!-- ##### FUNCTION gtk_signal_handler_pending ##### -->
<para>
Returns a connection id corresponding to a given signal id and object.
</para>
thus saving the cost of building the arguments.
</para>
-@i:
-@s:
-@b:
-@Returns: the connection id, if a connection was found. 0 otherwise.
-<!-- # Unused Parameters # -->
@object: the object to search for the desired user-defined handler.
@signal_id: the number of the signal to search for.
@may_be_blocked: whether it is acceptable to return a blocked
handler.
+@Returns: the connection id, if a connection was found. 0 otherwise.
+<!-- # Unused Parameters # -->
+@i:
+@s:
+@b:
-<!-- ##### MACRO gtk_signal_handler_pending_by_func ##### -->
+<!-- ##### FUNCTION gtk_signal_handler_pending_by_func ##### -->
<para>
Returns a connection id corresponding to a given signal id, object, function
pointer and user data.
</para>
-@o:
-@s:
-@b:
-@f:
-@d:
-@Returns: the connection id, if a handler was found. 0 otherwise.
-<!-- # Unused Parameters # -->
@object: the object to search for the desired handler.
@signal_id: the number of the signal to search for.
@may_be_blocked: whether it is acceptable to return a blocked
handler.
@func: the function pointer to search for.
@data: the user data to search for.
+@Returns: the connection id, if a handler was found. 0 otherwise.
+<!-- # Unused Parameters # -->
+@o:
+@s:
+@b:
+@f:
+@d:
+
+
+<!-- ##### FUNCTION gtk_signal_add_emission_hook ##### -->
+<para>
+Add an emission hook for a type of signal, for any object.
+</para>
+
+@signal_id: the type of signal to hook for.
+@hook_func: the function to invoke to handle the emission hook.
+@data: the user data passed in to hook_func.
+@Returns: the id (that you may pass as a parameter
+to gtk_signal_remove_emission_hook()).
+<!-- # Unused Parameters # -->
+@i:
+@h:
+@d:
+
+
+<!-- ##### FUNCTION gtk_signal_remove_emission_hook ##### -->
+<para>
+Delete an emission hook. (see gtk_signal_add_emission_hook())
+</para>
+
+@signal_id: the id of the signal type.
+@hook_id: the id of the emission handler, returned by add_emission_hook().
+<!-- # Unused Parameters # -->
+@i:
+@h:
<!-- ##### MACRO gtk_signal_default_marshaller ##### -->
@type_info: must not be null, and @type_info->type_name must also not be null.
-<!-- ##### MACRO gtk_type_name ##### -->
+<!-- ##### FUNCTION gtk_type_name ##### -->
<para>
</para>
-@Returns: a pointer to the name of a type, or NULL if it has none.
-<!-- # Unused Parameters # -->
@type: a GtkType
+@Returns: a pointer to the name of a type, or NULL if it has none.
-<!-- ##### MACRO gtk_type_from_name ##### -->
+<!-- ##### FUNCTION gtk_type_from_name ##### -->
<para>
Get the internal representation of a type given its name.
</para>
-@Returns: a GtkType
-<!-- # Unused Parameters # -->
@name: the name of a gtk type
+@Returns: a GtkType
-<!-- ##### MACRO gtk_type_parent ##### -->
+<!-- ##### FUNCTION gtk_type_parent ##### -->
<para>
</para>
-@Returns: the GtkType of the parent
-<!-- # Unused Parameters # -->
@type: a GtkType
+@Returns: the GtkType of the parent
<!-- ##### FUNCTION gtk_type_class ##### -->
@Returns: gpointer to a GtkTypeObject
-<!-- ##### MACRO gtk_type_is_a ##### -->
+<!-- ##### FUNCTION gtk_type_is_a ##### -->
<para>
Look in the type hierarchy to see if @type has @is_a_type among its
ancestors. Do so with a simple lookup, not a loop.
</para>
-@Returns:
-<!-- # Unused Parameters # -->
@type: GtkType
@is_a_type: GtkType
+@Returns:
<!-- ##### FUNCTION gtk_type_enum_get_values ##### -->
@Returns:
+<!-- ##### SIGNAL GtkWidget::activate-mnemonic ##### -->
+<para>
+
+</para>
+
+@widget: the object which received the signal.
+@arg1:
+@Returns:
+
<!-- ##### SIGNAL GtkWidget::add-accelerator ##### -->
<para>
@Returns:
-<!-- ##### FUNCTION gtk_window_get_default_accel_group ##### -->
-<para>
-
-</para>
-
-@window:
-@Returns:
-
-
<!-- ##### SIGNAL GtkWindow::frame-event ##### -->
<para>
PROP_PATTERN,
PROP_WRAP,
PROP_SELECTABLE,
- PROP_MNEMONIC_KEYVAL
+ PROP_MNEMONIC_KEYVAL,
+ PROP_MNEMONIC_WIDGET
};
static void gtk_label_class_init (GtkLabelClass *klass);
guint prop_id,
GValue *value,
GParamSpec *pspec);
+static void gtk_label_destroy (GtkObject *object);
static void gtk_label_finalize (GObject *object);
static void gtk_label_size_request (GtkWidget *widget,
GtkRequisition *requisition);
gtk_label_class_init (GtkLabelClass *class)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (class);
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- object_class = (GtkObjectClass*) class;
- widget_class = (GtkWidgetClass*) class;
-
+ GtkObjectClass *object_class = GTK_OBJECT_CLASS (class);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
+
parent_class = gtk_type_class (GTK_TYPE_MISC);
gobject_class->set_property = gtk_label_set_property;
gobject_class->get_property = gtk_label_get_property;
gobject_class->finalize = gtk_label_finalize;
+
+ object_class->destroy = gtk_label_destroy;
widget_class->size_request = gtk_label_size_request;
widget_class->size_allocate = gtk_label_size_allocate;
g_object_class_install_property (gobject_class,
PROP_MNEMONIC_KEYVAL,
g_param_spec_uint ("mnemonic_keyval",
- _("Mnemonic accelerator key value"),
+ _("Mnemonic key"),
_("The mnemonic accelerator key for this label."),
0,
G_MAXUINT,
GDK_VoidSymbol,
G_PARAM_READABLE));
-
+ g_object_class_install_property (gobject_class,
+ PROP_MNEMONIC_WIDGET,
+ g_param_spec_object ("mnemonic_widget",
+ _("Mnemonic widget"),
+ _("The widget to be activated when the label's mnemonic "
+ "key is pressed."),
+ GTK_TYPE_WIDGET,
+ G_PARAM_READWRITE));
}
static void
case PROP_SELECTABLE:
gtk_label_set_selectable (label, g_value_get_boolean (value));
break;
+ case PROP_MNEMONIC_WIDGET:
+ gtk_label_set_mnemonic_widget (label, (GtkWidget*) g_value_get_object (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
case PROP_MNEMONIC_KEYVAL:
g_value_set_uint (value, label->mnemonic_keyval);
break;
+ case PROP_MNEMONIC_WIDGET:
+ g_value_set_object (value, (GObject*) label->mnemonic_widget);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
if (GTK_LABEL (widget)->mnemonic_widget)
return gtk_widget_activate_mnemonic (GTK_LABEL (widget)->mnemonic_widget, group_cycling);
- /* Try to find the widget to activate by traversing the widget
- * hierarachy.
+ /* Try to find the widget to activate by traversing the
+ * widget's ancestry.
*/
-
parent = widget->parent;
while (parent)
{
if (GTK_WIDGET_CAN_FOCUS (parent) ||
(!group_cycling && GTK_WIDGET_GET_CLASS (parent)->activate_signal) ||
- (parent->parent && GTK_IS_NOTEBOOK (parent->parent)) ||
+ (parent->parent && GTK_IS_NOTEBOOK (parent->parent)) ||
(GTK_IS_MENU_ITEM (parent)))
return gtk_widget_activate_mnemonic (parent, group_cycling);
parent = parent->parent;
}
+ /* barf if there was nothing to activate */
g_warning ("Couldn't find a target for a mnemonic activation.");
gdk_beep ();
}
static void
-gtk_label_setup_mnemonic (GtkLabel *label, guint last_key)
+gtk_label_setup_mnemonic (GtkLabel *label,
+ guint last_key)
{
GtkWidget *toplevel;
- if ((last_key != GDK_VoidSymbol) && label->mnemonic_window)
+ if (last_key != GDK_VoidSymbol && label->mnemonic_window)
gtk_window_remove_mnemonic (label->mnemonic_window,
last_key,
GTK_WIDGET (label));
* mnemonic collisions and toggle focus between the colliding widgets otherwise.
**/
void
-gtk_label_set_mnemonic_widget (GtkLabel *label,
- GtkWidget *widget)
+gtk_label_set_mnemonic_widget (GtkLabel *label,
+ GtkWidget *widget)
{
g_return_if_fail (GTK_IS_LABEL (label));
- g_return_if_fail (GTK_IS_WIDGET (widget));
+ if (widget)
+ g_return_if_fail (GTK_IS_WIDGET (widget));
+ if (label->mnemonic_widget)
+ gtk_widget_unref (label->mnemonic_widget);
label->mnemonic_widget = widget;
+ if (label->mnemonic_widget)
+ gtk_widget_ref (label->mnemonic_widget);
}
/* Calculates text, attrs and mnemonic_keyval from
- * label, use_underline and use_markup */
+ * label, use_underline and use_markup
+ */
static void
gtk_label_recalculate (GtkLabel *label)
{
if (!label->use_underline)
{
guint keyval = label->mnemonic_keyval;
+
label->mnemonic_keyval = GDK_VoidSymbol;
gtk_label_setup_mnemonic (label, keyval);
}
*str = label->text;
}
+static void
+gtk_label_destroy (GtkObject *object)
+{
+ GtkLabel *label = GTK_LABEL (object);
+
+ gtk_label_set_mnemonic_widget (label, NULL);
+
+ GTK_OBJECT_CLASS (parent_class)->destroy (object);
+}
+
static void
gtk_label_finalize (GObject *object)
{
}
}
+#if 0
static void
layout_to_window_coords (GtkLabel *label,
gint *x,
*y -= widget->allocation.y; /* go to selection window */
}
}
+#endif
static void
get_layout_index (GtkLabel *label,
GtkMiscClass parent_class;
};
-GtkType gtk_label_get_type (void) G_GNUC_CONST;
-GtkWidget *gtk_label_new (const char *str);
-GtkWidget *gtk_label_new_with_mnemonic (const char *str);
-
-void gtk_label_set_text (GtkLabel *label,
- const char *str);
-G_CONST_RETURN gchar *gtk_label_get_text (GtkLabel *label);
-
-void gtk_label_set_attributes (GtkLabel *label,
- PangoAttrList *attrs);
-
-void gtk_label_set_markup (GtkLabel *label,
- const gchar *str);
-void gtk_label_set_markup_with_mnemonic (GtkLabel *label,
- const gchar *str);
-
-guint gtk_label_get_mnemonic_keyval (GtkLabel *label);
-void gtk_label_set_justify (GtkLabel *label,
- GtkJustification jtype);
-void gtk_label_set_pattern (GtkLabel *label,
- const gchar *pattern);
-void gtk_label_set_line_wrap (GtkLabel *label,
- gboolean wrap);
-
-void gtk_label_set_text_with_mnemonic (GtkLabel *label,
- const gchar *string);
-void gtk_label_set_mnemonic_widget (GtkLabel *label,
- GtkWidget *widget);
-
-void gtk_label_set_selectable (GtkLabel *label,
- gboolean setting);
-gboolean gtk_label_get_selectable (GtkLabel *label);
-
-void gtk_label_select_region (GtkLabel *label,
- gint start_offset,
- gint end_offset);
-
-void gtk_label_get_layout_offsets (GtkLabel *label,
- gint *x,
- gint *y);
+GtkType gtk_label_get_type (void) G_GNUC_CONST;
+GtkWidget* gtk_label_new (const char *str);
+GtkWidget* gtk_label_new_with_mnemonic (const char *str);
+void gtk_label_set_text (GtkLabel *label,
+ const char *str);
+G_CONST_RETURN gchar* gtk_label_get_text (GtkLabel *label);
+void gtk_label_set_attributes (GtkLabel *label,
+ PangoAttrList *attrs);
+void gtk_label_set_markup (GtkLabel *label,
+ const gchar *str);
+void gtk_label_set_markup_with_mnemonic (GtkLabel *label,
+ const gchar *str);
+guint gtk_label_get_mnemonic_keyval (GtkLabel *label);
+void gtk_label_set_mnemonic_widget (GtkLabel *label,
+ GtkWidget *widget);
+void gtk_label_set_text_with_mnemonic (GtkLabel *label,
+ const gchar *string);
+void gtk_label_set_justify (GtkLabel *label,
+ GtkJustification jtype);
+void gtk_label_set_pattern (GtkLabel *label,
+ const gchar *pattern);
+void gtk_label_set_line_wrap (GtkLabel *label,
+ gboolean wrap);
+void gtk_label_set_selectable (GtkLabel *label,
+ gboolean setting);
+gboolean gtk_label_get_selectable (GtkLabel *label);
+void gtk_label_select_region (GtkLabel *label,
+ gint start_offset,
+ gint end_offset);
+void gtk_label_get_layout_offsets (GtkLabel *label,
+ gint *x,
+ gint *y);
#ifndef GTK_DISABLE_COMPAT_H
# define gtk_label_set gtk_label_set_text
gpointer data)
{
GtkNotebook *notebook = GTK_NOTEBOOK (data);
- GtkNotebookPage *page;
GList *list;
-
+
list = g_list_find_custom (notebook->children, child,
gtk_notebook_page_compare_tab);
- if (!list)
- return TRUE;
-
+ if (list)
+ {
+ GtkNotebookPage *page = list->data;
- page = list->data;
+ gtk_notebook_switch_page (notebook, page, -1);
+ }
- gtk_notebook_switch_page (notebook, page, -1);
return TRUE;
}
return widget_type;
}
+static gboolean
+accumulator_stop_handled_emission (GSignalInvocationHint *ihint,
+ GValue *return_accu,
+ const GValue *handler_return,
+ gpointer data)
+{
+ gboolean continue_emission;
+ gboolean signal_handled;
+
+ signal_handled = g_value_get_boolean (handler_return);
+ g_value_set_boolean (return_accu, signal_handled);
+ continue_emission = !signal_handled;
+
+ return continue_emission;
+}
+
/*****************************************
* gtk_widget_class_init:
*
gtk_accel_group_create_remove (GTK_CLASS_TYPE (object_class), GTK_RUN_LAST,
GTK_SIGNAL_OFFSET (GtkWidgetClass, remove_accelerator));
widget_signals[ACTIVATE_MNEMONIC] =
- gtk_signal_new ("activate_mnemonic",
- GTK_RUN_LAST,
- GTK_CLASS_TYPE (object_class),
- GTK_SIGNAL_OFFSET (GtkWidgetClass, activate_mnemonic),
- gtk_marshal_BOOLEAN__BOOLEAN,
- GTK_TYPE_BOOL, 1,
- GTK_TYPE_BOOL);
+ g_signal_newc ("activate_mnemonic",
+ GTK_CLASS_TYPE (object_class),
+ GTK_RUN_LAST,
+ GTK_SIGNAL_OFFSET (GtkWidgetClass, activate_mnemonic),
+ accumulator_stop_handled_emission, NULL,
+ gtk_marshal_BOOLEAN__BOOLEAN,
+ GTK_TYPE_BOOL, 1,
+ GTK_TYPE_BOOL);
widget_signals[GRAB_FOCUS] =
gtk_signal_new ("grab_focus",
GTK_RUN_LAST | GTK_RUN_ACTION,
gtk_widget_activate_mnemonic (GtkWidget *widget,
gboolean group_cycling)
{
- gboolean handled = FALSE;
+ gboolean handled;
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
+ group_cycling = group_cycling != FALSE;
if (!GTK_WIDGET_IS_SENSITIVE (widget))
- return TRUE;
-
- gtk_signal_emit_by_name (GTK_OBJECT (widget),
- "activate_mnemonic",
- group_cycling,
- &handled);
+ handled = TRUE;
+ else
+ gtk_signal_emit (GTK_OBJECT (widget),
+ widget_signals[ACTIVATE_MNEMONIC],
+ group_cycling,
+ &handled);
return handled;
}
gtk_widget_real_activate_mnemonic (GtkWidget *widget,
gboolean group_cycling)
{
- if (group_cycling)
- gtk_widget_grab_focus (widget);
- else if (!group_cycling)
+ if (!group_cycling && GTK_WIDGET_GET_CLASS (widget)->activate_signal)
gtk_widget_activate (widget);
+ else if (GTK_WIDGET_CAN_FOCUS (widget))
+ gtk_widget_grab_focus (widget);
+ else
+ {
+ g_warning ("widget `%s' isn't suitable for mnemonic activation",
+ G_OBJECT_TYPE_NAME (widget));
+ gdk_beep ();
+ }
return TRUE;
}
-
static gint
gtk_widget_real_key_press_event (GtkWidget *widget,
GdkEventKey *event)
GTK_HAS_FOCUS = 1 << 12,
/* widget is allowed to receive the default via gtk_widget_grab_default
- * and will reserve space to draw the default if possible */
+ * and will reserve space to draw the default if possible
+ */
GTK_CAN_DEFAULT = 1 << 13,
/* the widget currently is receiving the default action and should be drawn
- * appropriately if possible */
+ * appropriately if possible
+ */
GTK_HAS_DEFAULT = 1 << 14,
GTK_HAS_GRAB = 1 << 15,
GTK_APP_PAINTABLE = 1 << 19,
/* the widget when focused will receive the default action and have
- * HAS_DEFAULT set even if there is a different widget set as default */
+ * HAS_DEFAULT set even if there is a different widget set as default
+ */
GTK_RECEIVES_DEFAULT = 1 << 20,
GTK_DOUBLE_BUFFERED = 1 << 21
gtk_accel_group_detach (accel_group, GTK_OBJECT (window));
}
-GtkAccelGroup*
-gtk_window_get_default_accel_group (GtkWindow *window)
-{
- GtkAccelGroup *group;
-
- g_return_val_if_fail (GTK_IS_WINDOW (window), NULL);
-
- group = gtk_object_get_data (GTK_OBJECT (window),
- "gtk-accel-group");
-
- if (group == NULL)
- {
- group = gtk_accel_group_new ();
- gtk_window_add_accel_group (window, group);
- gtk_object_set_data (GTK_OBJECT (window),
- "gtk-accel-group",
- group);
- gtk_accel_group_unref (group);
- }
-
- return group;
-}
-
void
gtk_window_add_mnemonic (GtkWindow *window,
guint keyval,
GtkWindowMnemonic key;
GtkWindowMnemonic *mnemonic;
- g_return_if_fail (window != NULL);
g_return_if_fail (GTK_IS_WINDOW (window));
g_return_if_fail (GTK_IS_WIDGET (target));
key.window = window;
key.keyval = keyval;
-
mnemonic = g_hash_table_lookup (mnemonic_hash_table, &key);
if (mnemonic)
- mnemonic->targets = g_slist_prepend (mnemonic->targets, target);
+ {
+ g_return_if_fail (g_slist_find (mnemonic->targets, target) == NULL);
+ mnemonic->targets = g_slist_prepend (mnemonic->targets, target);
+ }
else
{
mnemonic = g_new (GtkWindowMnemonic, 1);
GtkWindowMnemonic key;
GtkWindowMnemonic *mnemonic;
- g_return_if_fail (window != NULL);
g_return_if_fail (GTK_IS_WINDOW (window));
g_return_if_fail (GTK_IS_WIDGET (target));
key.window = window;
key.keyval = keyval;
-
mnemonic = g_hash_table_lookup (mnemonic_hash_table, &key);
- g_assert (mnemonic);
+ g_return_if_fail (mnemonic && g_slist_find (mnemonic->targets, target) != NULL);
- if (mnemonic)
+ mnemonic->targets = g_slist_remove (mnemonic->targets, target);
+ if (mnemonic->targets == NULL)
{
- mnemonic->targets = g_slist_remove (mnemonic->targets, target);
-
- if (mnemonic->targets == NULL)
- {
- g_hash_table_remove (mnemonic_hash_table, mnemonic);
- g_free (mnemonic);
- }
+ g_hash_table_remove (mnemonic_hash_table, mnemonic);
+ g_free (mnemonic);
}
}
GtkWidget *widget, *chosen_widget;
gboolean overloaded;
- g_return_val_if_fail (window != NULL, FALSE);
g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
- if (modifier != window->mnemonic_modifier)
+ if (window->mnemonic_modifier != (modifier & gtk_accelerator_get_default_mod_mask ()))
return FALSE;
key.window = window;
key.keyval = keyval;
-
mnemonic = g_hash_table_lookup (mnemonic_hash_table, &key);
if (!mnemonic)
if (chosen_widget)
{
/* For round robin we put the activated entry on
- * the end of the list after activation */
+ * the end of the list after activation
+ */
mnemonic->targets = g_slist_remove (mnemonic->targets, chosen_widget);
mnemonic->targets = g_slist_append (mnemonic->targets, chosen_widget);
+
return gtk_widget_activate_mnemonic (chosen_widget, overloaded);
}
return FALSE;
gtk_window_set_mnemonic_modifier (GtkWindow *window,
GdkModifierType modifier)
{
- g_return_if_fail (window != NULL);
g_return_if_fail (GTK_IS_WINDOW (window));
+ g_return_if_fail ((modifier & ~GDK_MODIFIER_MASK) == 0);
window->mnemonic_modifier = modifier;
}
gtk_window_set_position (GtkWindow *window,
GtkWindowPosition position)
{
- g_return_if_fail (window != NULL);
g_return_if_fail (GTK_IS_WINDOW (window));
window->position = position;
if (mnemonic->window == window)
{
+ if (mnemonic->targets)
+ {
+ gchar *name = gtk_accelerator_name (mnemonic->keyval, 0);
+
+ g_warning ("mnemonic \"%s\" wasn't removed for widget (%p)",
+ name, mnemonic->targets->data);
+ g_free (name);
+ }
g_slist_free (mnemonic->targets);
g_free (mnemonic);
handled = FALSE;
- if (window->focus_widget &&
- window->focus_widget != widget &&
+ if (window->focus_widget && window->focus_widget != widget &&
GTK_WIDGET_IS_SENSITIVE (window->focus_widget))
- {
- handled = gtk_widget_event (window->focus_widget, (GdkEvent*) event);
- }
+ handled = gtk_widget_event (window->focus_widget, (GdkEvent*) event);
if (!handled)
handled = gtk_window_activate_mnemonic (window,
gboolean modal);
GList* gtk_window_list_toplevels (void);
-/* Get the "built-in" accel group (convenience thing) */
-GtkAccelGroup* gtk_window_get_default_accel_group (GtkWindow *window);
-
void gtk_window_add_mnemonic (GtkWindow *window,
guint keyval,
GtkWidget *target);
if (!window)
{
- GtkAccelGroup *accel_group;
-
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- accel_group = gtk_window_get_default_accel_group (GTK_WINDOW (window));
-
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC (gtk_widget_destroyed),
&window);
if (!window)
{
- GtkAccelGroup *accel_group;
-
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- accel_group = gtk_window_get_default_accel_group (GTK_WINDOW (window));
-
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC (gtk_widget_destroyed),
&window);