[maemo-commits] [maemo-commits] r9191 - in projects/haf/branches/gtk+/maemo-gtk-2-10: . docs/reference docs/reference/gtk docs/reference/gtk/tmpl gtk
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Fri Jan 19 15:27:39 EET 2007
- Previous message: [maemo-commits] r9190 - in projects/haf/branches/gtk+/maemo-gtk-2-10: . docs/reference docs/reference/gdk gdk gdk/directfb gdk/quartz gdk/win32 gdk/x11
- Next message: [maemo-commits] r9192 - in projects/haf/trunk/maemo-af-desktop: . hildon-navigator
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: mitch Date: 2007-01-19 15:27:34 +0200 (Fri, 19 Jan 2007) New Revision: 9191 Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/ChangeLog projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/gtk-sections.txt projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/tmpl/gtk-unused.sgml projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/tmpl/gtkbindings.sgml projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/tmpl/gtkrc.sgml projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtk.symbols projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkbindings.c projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkbindings.h projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkrc.c projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkrc.h Log: 2007-01-19 Michael Natterer <mitch at gimp.org> Backport unbinding of keybindings, needed for combo box kaynav: Wed Oct 11 14:31:30 2006 Tim Janik <timj at imendio.com> * docs/reference/gtk/gtk-sections.txt: * gtk/gtkbindings.c: document gtk_binding_entry_skip(). Tue Oct 10 16:38:23 2006 Tim Janik <timj at imendio.com> * gtk/tmpl/gtkbindings.sgml: * gtk/gtkbindings.c: applied patch from Michael Natterer to move to inline docs. applied wording fixes suggested by Martyn Russell. 2006-10-05 Michael Natterer <mitch at imendio.com> * gtk/gtkrc.[ch]: added new scanner token "unbind" which gets rid of a key binding (in fact, it only lets it appear unbound). * gtk/gtkbindings.[ch] (struct GtkBindingEntry): added "guint marks_unbound : 1" (gtk_binding_entry_skip): new API which marks the entry as unbound. Changed code so it returns FALSE when "marks_unbound == TRUE" is encountered while activating bindings, effectively letting the binding appear unbound (regardless of still existing bindings in lower binding priority levels). Fixes bug #358329. (gtk_binding_entry_add) (gtk_binding_entry_clear) (gtk_binding_entry_add_signall) (gtk_binding_parse_binding): deprected these functions. (_gtk_binding_parse_binding) (_gtk_binding_entry_add_signall): new internal API. * gtk/gtk.symbols: changed accordingly. Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog 2007-01-19 12:39:18 UTC (rev 9190) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog 2007-01-19 13:27:34 UTC (rev 9191) @@ -1,3 +1,43 @@ +2007-01-19 Michael Natterer <mitch at gimp.org> + + Backport unbinding of keybindings, needed for combo box kaynav: + + Wed Oct 11 14:31:30 2006 Tim Janik <timj at imendio.com> + + * docs/reference/gtk/gtk-sections.txt: + * gtk/gtkbindings.c: document gtk_binding_entry_skip(). + + Tue Oct 10 16:38:23 2006 Tim Janik <timj at imendio.com> + + * gtk/tmpl/gtkbindings.sgml: + * gtk/gtkbindings.c: applied patch from Michael Natterer to move to + inline docs. applied wording fixes suggested by Martyn Russell. + + 2006-10-05 Michael Natterer <mitch at imendio.com> + + * gtk/gtkrc.[ch]: added new scanner token "unbind" which gets + rid of a key binding (in fact, it only lets it appear unbound). + + * gtk/gtkbindings.[ch] (struct GtkBindingEntry): added + "guint marks_unbound : 1" + + (gtk_binding_entry_skip): new API which marks the entry as unbound. + + Changed code so it returns FALSE when "marks_unbound == TRUE" is + encountered while activating bindings, effectively letting the + binding appear unbound (regardless of still existing bindings in + lower binding priority levels). Fixes bug #358329. + + (gtk_binding_entry_add) + (gtk_binding_entry_clear) + (gtk_binding_entry_add_signall) + (gtk_binding_parse_binding): deprected these functions. + + (_gtk_binding_parse_binding) + (_gtk_binding_entry_add_signall): new internal API. + + * gtk/gtk.symbols: changed accordingly. + 2007-01-19 Michael Natterer <mitch at imendio.com> Backport gdk_window_beep() from upstream trunk, needed Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/ChangeLog =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/ChangeLog 2007-01-19 12:39:18 UTC (rev 9190) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/ChangeLog 2007-01-19 13:27:34 UTC (rev 9191) @@ -1,3 +1,13 @@ +2007-01-19 Michael Natterer <mitch at gimp.org> + + Backport unbinding of keybindings: + + Tue Oct 10 16:38:23 2006 Tim Janik <timj at imendio.com> + + * gtk/tmpl/gtkbindings.sgml: + * gtk/gtkbindings.c: applied patch from Michael Natterer to move to + inline docs. applied wording fixes suggested by Martyn Russell. + 2007-01-19 Michael Natterer <mitch at imendio.com> Backport gdk_window_beep(): Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/gtk-sections.txt =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/gtk-sections.txt 2007-01-19 12:39:18 UTC (rev 9190) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/gtk-sections.txt 2007-01-19 13:27:34 UTC (rev 9191) @@ -5796,13 +5796,10 @@ gtk_bindings_activate gtk_bindings_activate_event gtk_binding_set_activate -gtk_binding_entry_add -gtk_binding_entry_clear gtk_binding_entry_add_signal -gtk_binding_set_add_path +gtk_binding_entry_skip gtk_binding_entry_remove -gtk_binding_entry_add_signall -gtk_binding_parse_binding +gtk_binding_set_add_path </SECTION> <SECTION> Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/tmpl/gtk-unused.sgml =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/tmpl/gtk-unused.sgml 2007-01-19 12:39:18 UTC (rev 9190) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/tmpl/gtk-unused.sgml 2007-01-19 13:27:34 UTC (rev 9191) @@ -1858,6 +1858,40 @@ @n_args_p: the number of arguments this object accepts. @Returns: the array of arguments (or NULL on error). +<!-- ##### MACRO gtk_binding_entry_add ##### --> +<para> +Deprecated. +</para> + + +<!-- ##### FUNCTION gtk_binding_entry_add_signall ##### --> +<para> + +</para> + + at binding_set: + at keyval: + at modifiers: + at signal_name: + at binding_args: + +<!-- ##### FUNCTION gtk_binding_entry_clear ##### --> +<para> + +</para> + + at binding_set: + at keyval: + at modifiers: + +<!-- ##### FUNCTION gtk_binding_parse_binding ##### --> +<para> + +</para> + + at scanner: + at Returns: + <!-- ##### FUNCTION gtk_button_box_child_requisition ##### --> <para> This is an internally used function and should never be called from an Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/tmpl/gtkbindings.sgml =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/tmpl/gtkbindings.sgml 2007-01-19 12:39:18 UTC (rev 9190) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/tmpl/gtkbindings.sgml 2007-01-19 13:27:34 UTC (rev 9191) @@ -6,12 +6,108 @@ <!-- ##### SECTION Long_Description ##### --> <para> +GtkBinding provides a mechanism for configuring Gtk+ key bindings through RC files. +This eases key binding adjustments for application developers as well as users and +provides Gtk+ users or administrators with high key binding configurability which +requires no application or toolkit side changes. +</para> +<refsect2> +<anchor id="gtk-bindings-install"/> +<title>Installing a key binding</title> + +<para> +A resource file binding consists of a 'binding' definition and a match statement to +apply the binding to specific widget types. Details on the matching mechanism are +described under <link linkend="gtkrc-pathnames-and-patterns">Pathnames and patterns</link>. +Inside the binding definition, key combinations are bound to specific signal emissions +on the target widget. Key combinations are strings consisting of an optional #GdkModifierType +name and <link linkend="gdk-Keyboard-Handling">key names</link> such as those defined in +<filename><gdk/gdkkeysyms.h></filename> or returned from gdk_keyval_name(), they have +to be parsable by gtk_accelerator_parse(). +Specifications of signal emissions consist of a string identifying the signal name, and +a list of signal specific arguments in parenthesis. + +For example for binding Control and the left or right cursor keys of a #GtkEntry widget to the +#GtkEntry::move-cursor signal, so movement occurs in 3 letter steps, +the following binding can be used: + +<informalexample><programlisting> +binding "MoveCursor3" { + bind "<Control>Right" { + "move-cursor" (visual-positions, 3, 0) + } + bind "<Control>Left" { + "move-cursor" (visual-positions, -3, 0) + } +} +class "GtkEntry" binding "MoveCursor3" +</programlisting></informalexample> </para> + +<anchor id="gtk-bindings-unbind"/> +<title>Unbinding existing key bindings</title> +<para> +Gtk+ already defines a number of useful bindings for the widgets it provides. +Because custom bindings set up in RC files take precedence over the default bindings +shipped with Gtk+, overriding existing bindings as demonstrated in +<link linkend="gtk-bindings-install">Installing a key binding</link> +works as expected. The same mechanism can not be used to "unbind" existing bindings, +however. + +<informalexample><programlisting> +binding "MoveCursor3" { + bind "<Control>Right" { } + bind "<Control>Left" { } +} +class "GtkEntry" binding "MoveCursor3" +</programlisting></informalexample> + +The above example will not have the desired effect of causing "<Control>Right" +and "<Control>Left" key presses to be ignored by Gtk+. Instead, it just causes +any existing bindings from the bindings set "MoveCursor3" to be deleted, so when +"<Control>Right" or "<Control>Left" are pressed, no binding for these keys +is found in binding set "MoveCursor3". Gtk+ will thus continue to search for matching +key bindings, and will eventually lookup and find the default Gtk+ bindings for entries +which implement word movement. To keep Gtk+ from activating its default bindings, the +"unbind" keyword can be used like this: + +<informalexample><programlisting> +binding "MoveCursor3" { + unbind "<Control>Right" + unbind "<Control>Left" +} +class "GtkEntry" binding "MoveCursor3" +</programlisting></informalexample> + +Now, Gtk+ will find a match when looking up "<Control>Right" and "<Control>Left" +key presses before it resorts to its default bindings, and the match instructs it to abort +("unbind") the search, so the key presses are not consumed by this widget. +As usual, further processing of the key presses, e.g. by an entries parent widget, +is now possible. + +</para> + +</refsect2> + <!-- ##### SECTION See_Also ##### --> <para> +<variablelist> +<varlistentry> +<term><link linkend="gtk-keyboard-accelerators">Keyboard Accelerators</link> +</term> +<listitem><para>installing and using keyboard short-cuts.</para></listitem> +</varlistentry> + +<varlistentry> +<term><link linkend="Resource-Files">Resource Files</link> +</term> +<listitem><para>Gtk+ Resource Files - behavior and style definitions.</para></listitem> +</varlistentry> + +</variablelist> </para> <!-- ##### SECTION Stability_Level ##### --> @@ -19,49 +115,94 @@ <!-- ##### STRUCT GtkBindingSet ##### --> <para> - +A binding set maintains a list of activatable key bindings. +A single binding set can match multiple types of widgets. +Similar to styles, widgets can be mapped by widget name paths, widget class paths or widget class types. +When a binding within a set is matched upon activation, an action signal is emitted on +the target widget to carry out the actual activation. </para> - at set_name: - at priority: - at widget_path_pspecs: - at widget_class_pspecs: - at class_branch_pspecs: - at entries: - at current: - at parsed: + at set_name: unique binding set name + at priority: unused + at widget_path_pspecs: widgets matched by path that this binding set applies to + at widget_class_pspecs: widgets matched by class path that this binding set applies to + at class_branch_pspecs: widgets matched by class that this binding set applies to + at entries: the key binding entries in this binding set + at current: implementation detail + at parsed: whether this binding set stems from an RC file and is reset upon theme changes <!-- ##### STRUCT GtkBindingEntry ##### --> <para> +Each key binding element of a binding sets binding list is represented by a #GtkBindingEntry. +</para> + at keyval: key value to match + at modifiers: key modifier to match + at binding_set: binding set this entry belongs to + at destroyed: implementation detail + at in_emission: implementation detail + at marks_unbound: + at set_next: linked list of entries maintained by binding set + at hash_next: implementation detail + at signals: action signals of this entry + +<!-- ##### STRUCT GtkBindingSignal ##### --> +<para> +A #GtkBindingSignal stores the necessary information to activate a widget +in response to a key press via a signal emission. </para> + at next: implementation detail + at signal_name: the action signal to be emitted + at n_args: number of arguments specified for the signal + at args: the arguments specified for the signal + +<!-- ##### STRUCT GtkBindingArg ##### --> +<para> +A #GtkBindingArg holds the data associated with an argument for a +key binding signal emission as stored in #GtkBindingSignal. +</para> + + at arg_type: implementation detail + +<!-- ##### MACRO gtk_binding_entry_add ##### --> +<para> +Deprecated. +</para> + + + +<!-- ##### FUNCTION gtk_binding_entry_add_signall ##### --> +<para> + +</para> + + at binding_set: @keyval: @modifiers: - at binding_set: - at destroyed: - at in_emission: - at set_next: - at hash_next: - at signals: + at signal_name: + at binding_args: -<!-- ##### STRUCT GtkBindingSignal ##### --> + +<!-- ##### FUNCTION gtk_binding_entry_clear ##### --> <para> </para> - at next: - at signal_name: - at n_args: - at args: + at binding_set: + at keyval: + at modifiers: -<!-- ##### STRUCT GtkBindingArg ##### --> + +<!-- ##### FUNCTION gtk_binding_parse_binding ##### --> <para> </para> - at arg_type: + at scanner: + at Returns: + <!-- ##### FUNCTION gtk_binding_set_new ##### --> <para> @@ -102,7 +243,7 @@ <!-- ##### FUNCTION gtk_bindings_activate_event ##### --> <para> - +<!-- documented inline --> </para> @object: @@ -122,23 +263,6 @@ @Returns: -<!-- ##### MACRO gtk_binding_entry_add ##### --> -<para> - -</para> - - - -<!-- ##### FUNCTION gtk_binding_entry_clear ##### --> -<para> - -</para> - - at binding_set: - at keyval: - at modifiers: - - <!-- ##### FUNCTION gtk_binding_entry_add_signal ##### --> <para> @@ -152,15 +276,14 @@ @Varargs: -<!-- ##### FUNCTION gtk_binding_set_add_path ##### --> +<!-- ##### FUNCTION gtk_binding_entry_skip ##### --> <para> </para> @binding_set: - at path_type: - at path_pattern: - at priority: + at keyval: + at modifiers: <!-- ##### FUNCTION gtk_binding_entry_remove ##### --> @@ -173,24 +296,14 @@ @modifiers: -<!-- ##### FUNCTION gtk_binding_entry_add_signall ##### --> +<!-- ##### FUNCTION gtk_binding_set_add_path ##### --> <para> </para> @binding_set: - at keyval: - at modifiers: - at signal_name: - at binding_args: + at path_type: + at path_pattern: + at priority: -<!-- ##### FUNCTION gtk_binding_parse_binding ##### --> -<para> - -</para> - - at scanner: - at Returns: - - Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/tmpl/gtkrc.sgml =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/tmpl/gtkrc.sgml 2007-01-19 12:39:18 UTC (rev 9190) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/docs/reference/gtk/tmpl/gtkrc.sgml 2007-01-19 13:27:34 UTC (rev 9191) @@ -813,6 +813,7 @@ @GTK_RC_TOKEN_LTR: @GTK_RC_TOKEN_RTL: @GTK_RC_TOKEN_COLOR: + at GTK_RC_TOKEN_UNBIND: @GTK_RC_TOKEN_LAST: <!-- ##### FUNCTION gtk_rc_scanner_new ##### --> Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtk.symbols =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtk.symbols 2007-01-19 12:39:18 UTC (rev 9190) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtk.symbols 2007-01-19 13:27:34 UTC (rev 9191) @@ -372,11 +372,14 @@ #if IN_HEADER(__GTK_BINDINGS_H__) #if IN_FILE(__GTK_BINDINGS_C__) +#ifndef GTK_DISABLE_DEPRECATED +gtk_binding_entry_clear +gtk_binding_entry_add_signall +gtk_binding_parse_binding +#endif +gtk_binding_entry_skip gtk_binding_entry_add_signal -gtk_binding_entry_add_signall -gtk_binding_entry_clear gtk_binding_entry_remove -gtk_binding_parse_binding gtk_bindings_activate gtk_bindings_activate_event gtk_binding_set_activate Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkbindings.c =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkbindings.c 2007-01-19 12:39:18 UTC (rev 9190) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkbindings.c 2007-01-19 13:27:34 UTC (rev 9191) @@ -206,6 +206,7 @@ entry->binding_set = binding_set, entry->destroyed = FALSE; entry->in_emission = FALSE; + entry->marks_unbound = FALSE; entry->signals = NULL; entry->set_next = binding_set->entries; @@ -560,15 +561,24 @@ return handled; } +/** + * gtk_binding_set_new: + * @set_name: unique name of this binding set + * + * Gtk+ maintains a global list of binding sets. Each binding set has + * a unique name which needs to be specified upon creation. + * + * Return value: new binding set + **/ GtkBindingSet* -gtk_binding_set_new (const gchar *set_name) +gtk_binding_set_new (const gchar *set_name) { GtkBindingSet *binding_set; g_return_val_if_fail (set_name != NULL, NULL); binding_set = g_new (GtkBindingSet, 1); - binding_set->set_name = g_intern_string (set_name); + binding_set->set_name = (gchar *) g_intern_string (set_name); binding_set->widget_path_pspecs = NULL; binding_set->widget_class_pspecs = NULL; binding_set->class_branch_pspecs = NULL; @@ -581,6 +591,16 @@ return binding_set; } +/** + * gtk_binding_set_by_class: + * @object_class: a valid #GtkObject class + * + * This function returns the binding set named after the type name of + * the passed in class structure. New binding sets are created on + * demand by this function. + * + * Return value: the binding set corresponding to @object_class + **/ GtkBindingSet* gtk_binding_set_by_class (gpointer object_class) { @@ -607,8 +627,18 @@ return binding_set; } +/** + * gtk_binding_set_find: + * @set_name: unique binding set name + * + * Find a binding set by its globally unique name. The @set_name can + * either be a name used for gtk_binding_set_new() or the type name of + * a class used in gtk_binding_set_by_class(). + * + * Return value: %NULL or the specified binding set + **/ GtkBindingSet* -gtk_binding_set_find (const gchar *set_name) +gtk_binding_set_find (const gchar *set_name) { GSList *slist; @@ -625,6 +655,18 @@ return NULL; } +/** + * gtk_binding_set_activate: + * @binding_set: @binding_set to activate + * @keyval: key value of the binding + * @modifiers: key modifier of the binding + * @object: object to activate when binding found + * + * Find a key binding matching @keyval and @modifiers within + * @binding_set and activate the binding on @object. + * + * Return value: %TRUE if a binding was found and activated + **/ gboolean gtk_binding_set_activate (GtkBindingSet *binding_set, guint keyval, @@ -646,6 +688,14 @@ return FALSE; } +/** + * gtk_binding_entry_clear: + * @binding_set: + * @keyval: + * @modifiers: + * + * Use of this function is deprecated. + **/ void gtk_binding_entry_clear (GtkBindingSet *binding_set, guint keyval, @@ -665,7 +715,48 @@ entry = binding_entry_new (binding_set, keyval, modifiers); } +/** + * gtk_binding_entry_skip: + * @binding_set: @binding_set to skip an entry of + * @keyval: key value of binding to skip + * @modifiers: key modifier of binding to skip + * + * Since: 2.12 + * + * Install a binding on @binding_set which causes key lookups + * to be aborted, to prevent bindings from lower priority sets + * to be activated. + **/ void +gtk_binding_entry_skip (GtkBindingSet *binding_set, + guint keyval, + GdkModifierType modifiers) +{ + GtkBindingEntry *entry; + + g_return_if_fail (binding_set != NULL); + + keyval = gdk_keyval_to_lower (keyval); + modifiers = modifiers & BINDING_MOD_MASK (); + + entry = binding_ht_lookup_entry (binding_set, keyval, modifiers); + if (entry) + binding_entry_destroy (entry); + + entry = binding_entry_new (binding_set, keyval, modifiers); + entry->marks_unbound = TRUE; +} + +/** + * gtk_binding_entry_remove: + * @binding_set: @binding_set to remove an entry of + * @keyval: key value of binding to remove + * @modifiers: key modifier of binding to remove + * + * Remove a binding previously installed via + * gtk_binding_entry_add_signal() on @binding_set. + **/ +void gtk_binding_entry_remove (GtkBindingSet *binding_set, guint keyval, GdkModifierType modifiers) @@ -682,13 +773,35 @@ binding_entry_destroy (entry); } +/** + * gtk_binding_entry_add_signall: + * @binding_set: binding set to add a signal to + * @keyval: key value + * @modifiers: key modifier + * @signal_name: signal name to be bound + * @binding_args: list of #GtkBindingArg signal arguments + * + * Deprecated. + **/ void gtk_binding_entry_add_signall (GtkBindingSet *binding_set, - guint keyval, - GdkModifierType modifiers, - const gchar *signal_name, - GSList *binding_args) + guint keyval, + GdkModifierType modifiers, + const gchar *signal_name, + GSList *binding_args) { + _gtk_binding_entry_add_signall (binding_set, + keyval, modifiers, + signal_name, binding_args); +} + +void +_gtk_binding_entry_add_signall (GtkBindingSet *binding_set, + guint keyval, + GdkModifierType modifiers, + const gchar *signal_name, + GSList *binding_args) +{ GtkBindingEntry *entry; GtkBindingSignal *signal, **signal_p; GSList *slist; @@ -760,6 +873,20 @@ *signal_p = signal; } +/** + * gtk_binding_entry_add_signal: + * @binding_set: @binding_set to install an entry for + * @keyval: key value of binding to install + * @modifiers: key modifier of binding to install + * @signal_name: signal to execute upon activation + * @n_args: number of arguments to @signal_name + * @: arguments to @signal_name + * + * Override or install a new key binding for @keyval with @modifiers on + * @binding_set. When the binding is activated, @signal_name will be + * emitted on the target widget, with @n_args @Varargs used as + * arguments. + **/ void gtk_binding_entry_add_signal (GtkBindingSet *binding_set, guint keyval, @@ -846,6 +973,16 @@ g_slist_free (free_slist); } +/** + * gtk_binding_set_add_path: + * @binding_set: binding set to add a path to + * @path_type: path type the pattern applies to + * @path_pattern: the actual match pattern + * @priority: binding priority + * + * This function is used internally by the GtkRC parsing mechanism to + * assign match patterns to #GtkBindingSet structures. + **/ void gtk_binding_set_add_path (GtkBindingSet *binding_set, GtkPathType path_type, @@ -929,10 +1066,13 @@ GtkObject *object, guint path_length, gchar *path, - gchar *path_reversed) + gchar *path_reversed, + gboolean *unbound) { GSList *slist; + *unbound = FALSE; + for (slist = pspec_list; slist; slist = slist->next) { PatternSpec *pspec; @@ -952,8 +1092,17 @@ binding_set = pspec->user_data; } - if (binding_set && gtk_binding_entry_activate (binding_set->current, object)) - return TRUE; + if (binding_set) + { + if (binding_set->current->marks_unbound) + { + *unbound = TRUE; + return FALSE; + } + + if (gtk_binding_entry_activate (binding_set->current, object)) + return TRUE; + } } return FALSE; @@ -1047,13 +1196,17 @@ guint path_length; gchar *path, *path_reversed; GSList *patterns; + gboolean unbound; gtk_widget_path (widget, &path_length, &path, &path_reversed); patterns = gtk_binding_entries_sort_patterns (entries, GTK_PATH_WIDGET, is_release); - handled = binding_match_activate (patterns, object, path_length, path, path_reversed); + handled = binding_match_activate (patterns, object, path_length, path, path_reversed, &unbound); g_slist_free (patterns); g_free (path); g_free (path_reversed); + + if (unbound) + return FALSE; } if (!handled) @@ -1061,20 +1214,25 @@ guint path_length; gchar *path, *path_reversed; GSList *patterns; + gboolean unbound; gtk_widget_class_path (widget, &path_length, &path, &path_reversed); patterns = gtk_binding_entries_sort_patterns (entries, GTK_PATH_WIDGET_CLASS, is_release); - handled = binding_match_activate (patterns, object, path_length, path, path_reversed); + handled = binding_match_activate (patterns, object, path_length, path, path_reversed, &unbound); g_slist_free (patterns); g_free (path); g_free (path_reversed); + + if (unbound) + return FALSE; } if (!handled) { GSList *patterns; GType class_type; - + gboolean unbound = FALSE; + patterns = gtk_binding_entries_sort_patterns (entries, GTK_PATH_CLASS, is_release); class_type = G_TYPE_FROM_INSTANCE (object); while (class_type && !handled) @@ -1082,23 +1240,40 @@ guint path_length; gchar *path; gchar *path_reversed; - + path = g_strdup (g_type_name (class_type)); path_reversed = g_strdup (path); g_strreverse (path_reversed); path_length = strlen (path); - handled = binding_match_activate (patterns, object, path_length, path, path_reversed); + handled = binding_match_activate (patterns, object, path_length, path, path_reversed, &unbound); g_free (path); g_free (path_reversed); + if (unbound) + break; + class_type = g_type_parent (class_type); } g_slist_free (patterns); + + if (unbound) + return FALSE; } return handled; } +/** + * gtk_bindings_activate: + * @object: object to activate when binding found + * @keyval: key value of the binding + * @modifiers: key modifier of the binding + * + * Find a key binding matching @keyval and @modifiers and activate the + * binding on @object. + * + * Return value: %TRUE if a binding was found and activated + **/ gboolean gtk_bindings_activate (GtkObject *object, guint keyval, @@ -1335,12 +1510,15 @@ { guint keyval = 0; GdkModifierType modifiers = 0; + gboolean unbind = FALSE; g_return_val_if_fail (scanner != NULL, G_TOKEN_ERROR); g_scanner_get_next_token (scanner); - if (scanner->token != GTK_RC_TOKEN_BIND) + if (scanner->token != GTK_RC_TOKEN_BIND && + scanner->token != GTK_RC_TOKEN_UNBIND) return GTK_RC_TOKEN_BIND; + unbind = scanner->token == GTK_RC_TOKEN_UNBIND; g_scanner_get_next_token (scanner); if (scanner->token != G_TOKEN_STRING) return G_TOKEN_STRING; @@ -1349,7 +1527,14 @@ if (keyval == 0) return G_TOKEN_STRING; + if (unbind) + { + gtk_binding_entry_skip (binding_set, keyval, modifiers); + return G_TOKEN_NONE; + } + g_scanner_get_next_token (scanner); + if (scanner->token != '{') return '{'; @@ -1381,9 +1566,23 @@ return G_TOKEN_NONE; } +/** + * gtk_binding_parse_binding: + * @scanner: GtkRC scanner + * + * Deprecated as public API, used only internally. + * + * Return value: expected token upon errors, %G_TOKEN_NONE on success. + **/ guint -gtk_binding_parse_binding (GScanner *scanner) +gtk_binding_parse_binding (GScanner *scanner) { + return _gtk_binding_parse_binding (scanner); +} + +guint +_gtk_binding_parse_binding (GScanner *scanner) +{ gchar *name; GtkBindingSet *binding_set; @@ -1420,6 +1619,7 @@ guint expected_token; case GTK_RC_TOKEN_BIND: + case GTK_RC_TOKEN_UNBIND: expected_token = gtk_binding_parse_bind (scanner, binding_set); if (expected_token != G_TOKEN_NONE) return expected_token; Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkbindings.h =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkbindings.h 2007-01-19 12:39:18 UTC (rev 9190) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkbindings.h 2007-01-19 13:27:34 UTC (rev 9191) @@ -69,6 +69,7 @@ GtkBindingSet *binding_set; guint destroyed : 1; guint in_emission : 1; + guint marks_unbound : 1; GtkBindingEntry *set_next; GtkBindingEntry *hash_next; GtkBindingSignal *signals; @@ -106,16 +107,33 @@ guint keyval, GdkModifierType modifiers, GtkObject *object); + +#ifndef GTK_DISABLE_DEPRECATED #define gtk_binding_entry_add gtk_binding_entry_clear void gtk_binding_entry_clear (GtkBindingSet *binding_set, guint keyval, GdkModifierType modifiers); -void gtk_binding_entry_add_signal (GtkBindingSet *binding_set, +void gtk_binding_entry_add_signall (GtkBindingSet *binding_set, guint keyval, GdkModifierType modifiers, const gchar *signal_name, - guint n_args, - ...); + GSList *binding_args); +guint gtk_binding_parse_binding (GScanner *scanner); +#endif /* GTK_DISABLE_DEPRECATED */ + +void gtk_binding_entry_skip (GtkBindingSet *binding_set, + guint keyval, + GdkModifierType modifiers); +void gtk_binding_entry_add_signal (GtkBindingSet *binding_set, + guint keyval, + GdkModifierType modifiers, + const gchar *signal_name, + guint n_args, + ...); +void gtk_binding_entry_remove (GtkBindingSet *binding_set, + guint keyval, + GdkModifierType modifiers); + void gtk_binding_set_add_path (GtkBindingSet *binding_set, GtkPathType path_type, const gchar *path_pattern, @@ -124,19 +142,14 @@ /* Non-public methods */ -void gtk_binding_entry_remove (GtkBindingSet *binding_set, +guint _gtk_binding_parse_binding (GScanner *scanner); +void _gtk_binding_reset_parsed (void); +void _gtk_binding_entry_add_signall (GtkBindingSet *binding_set, guint keyval, - GdkModifierType modifiers); -void gtk_binding_entry_add_signall (GtkBindingSet *binding_set, - guint keyval, GdkModifierType modifiers, const gchar *signal_name, GSList *binding_args); -guint gtk_binding_parse_binding (GScanner *scanner); - -void _gtk_binding_reset_parsed (void); - /* Creates a signal with a fixed callback instead of a class offset; * useful for key binding signals */ Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkrc.c =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkrc.c 2007-01-19 12:39:18 UTC (rev 9190) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkrc.c 2007-01-19 13:27:34 UTC (rev 9191) @@ -319,7 +319,8 @@ "im_module_file\0" "LTR\0" "RTL\0" - "color\0"; + "color\0" + "unbind\0"; static const struct { @@ -361,7 +362,8 @@ { 245, GTK_RC_TOKEN_IM_MODULE_FILE }, { 260, GTK_RC_TOKEN_LTR }, { 264, GTK_RC_TOKEN_RTL }, - { 268, GTK_RC_TOKEN_COLOR } + { 268, GTK_RC_TOKEN_COLOR }, + { 274, GTK_RC_TOKEN_UNBIND } }; static GHashTable *realized_style_ht = NULL; @@ -2864,7 +2866,7 @@ return gtk_rc_parse_style (context, scanner); case GTK_RC_TOKEN_BINDING: - return gtk_binding_parse_binding (scanner); + return _gtk_binding_parse_binding (scanner); case GTK_RC_TOKEN_PIXMAP_PATH: return gtk_rc_parse_pixmap_path (context, scanner); Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkrc.h =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkrc.h 2007-01-19 12:39:18 UTC (rev 9190) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkrc.h 2007-01-19 13:27:34 UTC (rev 9191) @@ -217,6 +217,7 @@ GTK_RC_TOKEN_LTR, GTK_RC_TOKEN_RTL, GTK_RC_TOKEN_COLOR, + GTK_RC_TOKEN_UNBIND, GTK_RC_TOKEN_LAST } GtkRcTokenType;
- Previous message: [maemo-commits] r9190 - in projects/haf/branches/gtk+/maemo-gtk-2-10: . docs/reference docs/reference/gdk gdk gdk/directfb gdk/quartz gdk/win32 gdk/x11
- Next message: [maemo-commits] r9192 - in projects/haf/trunk/maemo-af-desktop: . hildon-navigator
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]