]> Pileus Git - ~andy/gtk/commitdiff
some cleanups, fixed mnemonic_widget handling, added PROP_MNEMONIC_WIDGET.
authorTim Janik <timj@gtk.org>
Thu, 22 Mar 2001 13:44:00 +0000 (13:44 +0000)
committerTim Janik <timj@src.gnome.org>
Thu, 22 Mar 2001 13:44:00 +0000 (13:44 +0000)
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.

25 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
docs/reference/gtk/tmpl/gtk-unused.sgml
docs/reference/gtk/tmpl/gtkbutton.sgml
docs/reference/gtk/tmpl/gtkitemfactory.sgml
docs/reference/gtk/tmpl/gtklabel.sgml
docs/reference/gtk/tmpl/gtkmenu.sgml
docs/reference/gtk/tmpl/gtksignal.sgml
docs/reference/gtk/tmpl/gtktypeutils.sgml
docs/reference/gtk/tmpl/gtkwidget.sgml
docs/reference/gtk/tmpl/gtkwindow.sgml
gtk/gtklabel.c
gtk/gtklabel.h
gtk/gtknotebook.c
gtk/gtkwidget.c
gtk/gtkwidget.h
gtk/gtkwindow.c
gtk/gtkwindow.h
gtk/testgtk.c
tests/testgtk.c

index 638ed8455b9c38cdc7f5b3fbffebf2f1cc44033e..6d3f0fcced2a93b0aee89094d9c6d00f554c1f4e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+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
index 638ed8455b9c38cdc7f5b3fbffebf2f1cc44033e..6d3f0fcced2a93b0aee89094d9c6d00f554c1f4e 100644 (file)
@@ -1,3 +1,20 @@
+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
index 638ed8455b9c38cdc7f5b3fbffebf2f1cc44033e..6d3f0fcced2a93b0aee89094d9c6d00f554c1f4e 100644 (file)
@@ -1,3 +1,20 @@
+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
index 638ed8455b9c38cdc7f5b3fbffebf2f1cc44033e..6d3f0fcced2a93b0aee89094d9c6d00f554c1f4e 100644 (file)
@@ -1,3 +1,20 @@
+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
index 638ed8455b9c38cdc7f5b3fbffebf2f1cc44033e..6d3f0fcced2a93b0aee89094d9c6d00f554c1f4e 100644 (file)
@@ -1,3 +1,20 @@
+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
index 638ed8455b9c38cdc7f5b3fbffebf2f1cc44033e..6d3f0fcced2a93b0aee89094d9c6d00f554c1f4e 100644 (file)
@@ -1,3 +1,20 @@
+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
index 638ed8455b9c38cdc7f5b3fbffebf2f1cc44033e..6d3f0fcced2a93b0aee89094d9c6d00f554c1f4e 100644 (file)
@@ -1,3 +1,20 @@
+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
index 0c19d12762aac4e044e32df63cb25662f975ee6b..420f3b311c96fb4085ad1ba91360bb338ba1f0dd 100644 (file)
@@ -445,24 +445,6 @@ The position of the cursor.
 </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
@@ -497,6 +479,12 @@ gtk_font_selection_set_filter().
 @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
@@ -734,6 +722,24 @@ Sets the default size of child buttons.
 @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
@@ -842,6 +848,31 @@ Get the type of GtkIdentifier.
 
 @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.
@@ -1056,20 +1087,6 @@ Internal function.
 
 @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.
@@ -1109,12 +1126,6 @@ This function is labeled private.
 
 @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
@@ -1156,16 +1167,6 @@ Obtain information about a signal.
 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
@@ -1331,3 +1332,11 @@ Set the varargs type for a fundamental type @foreign_type.
 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: 
+
index c7dda98a4c9552222d9f44de70a99381a48ca8fb..db22ccf65984f38d59aa0b61f5bb5d477ad07a3f 100644 (file)
@@ -45,26 +45,6 @@ text.
 @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
index 8c4dd6a9d24473c478b4851e339ad13ee4d15871..18c4cc601d58ff130291db6a9105bf1ebd301200 100644 (file)
@@ -76,6 +76,8 @@ GtkItemFactory
 @callback: 
 @callback_action: 
 @item_type: 
+@extra_data: 
+@extra_data2: 
 
 <!-- ##### STRUCT GtkItemFactoryItem ##### -->
 <para>
index 40e7d1d3473ccc9691062d9eb8a338bab83c31b8..b168ac0e2c5737a231f9ebe23c2d5e68a5cf5baa 100644 (file)
@@ -64,16 +64,6 @@ gtk_label_set_pattern().
 @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
@@ -183,7 +173,12 @@ pointer, it isn't copied.
 
 </para>
 
-<!-- ##### ARG GtkLabel:accel-keyval ##### -->
+<!-- ##### ARG GtkLabel:mnemonic-keyval ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GtkLabel:mnemonic-widget ##### -->
 <para>
 
 </para>
index 7ba3409198dbad1b521dc7069d168f1889ec006a..f68992453fb5b56be0591c62518517b4dc134da2 100644 (file)
@@ -171,24 +171,6 @@ Set the #GtkAccelGroup which holds global accelerators for the menu.
 @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
index 1bb805c8ba44b05f829bec5d997406afbab06f7e..11705206fd7abb9fe099a37ca46b684c69c598fd 100644 (file)
@@ -157,6 +157,25 @@ you might have to write a marshaller.
 @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
@@ -232,6 +251,13 @@ to the signal.
 @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
@@ -289,7 +315,7 @@ you don't want a return value.
 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
@@ -299,13 +325,12 @@ by number is somewhat faster than using the name each time.
 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>
@@ -313,9 +338,8 @@ Given the signal's identifier, find its name.
 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 ##### -->
@@ -383,7 +407,7 @@ an array of GtkArgs instead of using C's varargs mechanism.
 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>
@@ -397,11 +421,11 @@ It will print a warning if used on a signal which
 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 ##### -->
@@ -417,7 +441,7 @@ except it will lookup the signal id for you.
 @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.
@@ -456,38 +480,38 @@ static void attach_print_signal(GtkButton* button, gint to_print)
 </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,
@@ -508,21 +532,21 @@ gtk_signal_connect_object(button, "clicked", gtk_widget_show, window);
 </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 
@@ -530,16 +554,16 @@ that the default handler and all normal
 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 ##### -->
@@ -628,98 +652,95 @@ should signal the removal of this signal.
 @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
@@ -727,29 +748,29 @@ necessarily make the hook callable, because if you block a
 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>
@@ -760,36 +781,64 @@ may opt to not emit the signal if no one is attached anyway,
 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 ##### -->
index 16a7e543fe3c07d2d2f92ae550b3b72848fe61cb..6295e2dfa13c7a3966a7f8539ef3509ca5119ff6 100644 (file)
@@ -560,33 +560,30 @@ Create a new, unique type.
 @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 ##### -->
@@ -611,16 +608,15 @@ has all the proper initializers called.
 @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 ##### -->
index 6f1e03319dcb4556c1018e6a45d6e40ad7cea67b..f5349f94d2906f1a90ffe933ac6f3cf1453ceb4b 100644 (file)
@@ -1247,6 +1247,15 @@ GtkWidget
 @Returns: 
 
 
+<!-- ##### SIGNAL GtkWidget::activate-mnemonic ##### -->
+<para>
+
+</para>
+
+@widget: the object which received the signal.
+@arg1: 
+@Returns: 
+
 <!-- ##### SIGNAL GtkWidget::add-accelerator ##### -->
 <para>
 
index c3db63e8c295db6537efcb93302ff05a58268fba..cd300a2606e59af250ff67405a99376fd0fbad6c 100644 (file)
@@ -236,15 +236,6 @@ it's larger
 @Returns: 
 
 
-<!-- ##### FUNCTION gtk_window_get_default_accel_group ##### -->
-<para>
-
-</para>
-
-@window: 
-@Returns: 
-
-
 <!-- ##### SIGNAL GtkWindow::frame-event ##### -->
 <para>
 
index a269f8634f7165d5fcdb4fce05d9630248ce3957..42d6300f5684df081297f66ec557006046f91ae3 100644 (file)
@@ -54,7 +54,8 @@ enum {
   PROP_PATTERN,
   PROP_WRAP,
   PROP_SELECTABLE,
-  PROP_MNEMONIC_KEYVAL
+  PROP_MNEMONIC_KEYVAL,
+  PROP_MNEMONIC_WIDGET
 };
 
 static void gtk_label_class_init        (GtkLabelClass    *klass);
@@ -67,6 +68,7 @@ static void gtk_label_get_property      (GObject          *object,
                                         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);
@@ -158,17 +160,16 @@ static void
 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;
@@ -248,13 +249,20 @@ gtk_label_class_init (GtkLabelClass *class)
   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 
@@ -297,6 +305,9 @@ gtk_label_set_property (GObject      *object,
     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;
@@ -339,6 +350,9 @@ gtk_label_get_property (GObject     *object,
     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);
@@ -425,21 +439,21 @@ gtk_label_activate_mnemonic (GtkWidget *widget,
   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 ();
   
@@ -447,11 +461,12 @@ gtk_label_activate_mnemonic (GtkWidget *widget,
 }
 
 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));
@@ -499,13 +514,18 @@ gtk_label_hierarchy_changed (GtkWidget *widget)
  * 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);
 }
 
 
@@ -584,7 +604,8 @@ gtk_label_set_attributes_internal (GtkLabel         *label,
 
 
 /* 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)
 {
@@ -604,6 +625,7 @@ 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);
     }
@@ -873,6 +895,16 @@ gtk_label_get (GtkLabel *label,
   *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)
 {
@@ -1497,6 +1529,7 @@ window_to_layout_coords (GtkLabel *label,
     }
 }
 
+#if 0
 static void
 layout_to_window_coords (GtkLabel *label,
                          gint     *x,
@@ -1522,6 +1555,7 @@ layout_to_window_coords (GtkLabel *label,
       *y -= widget->allocation.y; /* go to selection window */
     }
 }
+#endif
 
 static void
 get_layout_index (GtkLabel *label,
index 3e3d783e4ae03704efa4e5ce9dbff38624a45c27..bef1ca491ee074acb2a85e10d534dcb6cd75ce88 100644 (file)
@@ -79,46 +79,38 @@ struct _GtkLabelClass
   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
index 390538de91fa4202a6c7bd245d296a2e8e8988bf..1ee200d4d8b47fee3b53aa7342822f5ef348bdce 100644 (file)
@@ -3638,18 +3638,17 @@ gtk_notebook_activate_mnemonic_switch_page (GtkWidget *child,
                                            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;
 }
 
index c63ff4a590ced391ef7b5bf0e92f5990fd354781..52cf619ad84ed5eb1101b11d15f68b24291d34b0 100644 (file)
@@ -252,6 +252,22 @@ gtk_widget_get_type (void)
   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:
  *
@@ -465,13 +481,14 @@ gtk_widget_class_init (GtkWidgetClass *klass)
     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,
@@ -2191,17 +2208,18 @@ gboolean
 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;
 }
 
@@ -2209,14 +2227,19 @@ static gboolean
 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)
index dbad8c98e82fbaa55053a9010132ee8afeb7d50e..1d5d4bee85c16493629807f421ec6780aa493d23 100644 (file)
@@ -55,11 +55,13 @@ typedef enum
   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,
@@ -69,7 +71,8 @@ typedef enum
   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
index 62067deacb13e5272f570e7ff83cf87580d043e2..a61ca77414a73996ef28d581f822942b8ffaf596 100644 (file)
@@ -822,29 +822,6 @@ gtk_window_remove_accel_group (GtkWindow       *window,
   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,
@@ -853,17 +830,18 @@ gtk_window_add_mnemonic (GtkWindow *window,
   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);
@@ -881,26 +859,20 @@ gtk_window_remove_mnemonic (GtkWindow *window,
   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);
     }
 }
 
@@ -915,15 +887,13 @@ gtk_window_activate_mnemonic (GtkWindow      *window,
   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)
@@ -953,9 +923,11 @@ gtk_window_activate_mnemonic (GtkWindow      *window,
   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;
@@ -965,8 +937,8 @@ void
 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;
 }
@@ -975,7 +947,6 @@ void
 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;
@@ -1539,6 +1510,14 @@ gtk_window_mnemonic_hash_remove (gpointer        key,
 
   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);
       
@@ -2064,12 +2043,9 @@ gtk_window_key_press_event (GtkWidget   *widget,
 
   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,
index 0de5aa5e6f70f1330641d86b97458ef54ccc014c..04e015c858760d499289e4202f1377954446b687 100644 (file)
@@ -174,9 +174,6 @@ void       gtk_window_set_modal                (GtkWindow           *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);
index 49c405b0d7c3c05cb54e5f1c5a517044e01a6816..b44d880c6fa396887138205b1a0287b7a2d94be5 100644 (file)
@@ -166,12 +166,8 @@ create_buttons (void)
 
   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);
index 49c405b0d7c3c05cb54e5f1c5a517044e01a6816..b44d880c6fa396887138205b1a0287b7a2d94be5 100644 (file)
@@ -166,12 +166,8 @@ create_buttons (void)
 
   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);