diff options
-rw-r--r-- | ChangeLog | 22 | ||||
-rw-r--r-- | ChangeLog.pre-2-0 | 22 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 22 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 22 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 22 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 22 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 22 | ||||
-rw-r--r-- | gtk/gtkbindings.c | 197 | ||||
-rw-r--r-- | gtk/gtknotebook.c | 59 | ||||
-rw-r--r-- | gtk/gtknotebook.h | 4 |
10 files changed, 313 insertions, 101 deletions
@@ -1,3 +1,25 @@ +Wed Jan 16 19:23:04 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkbindings.c (gtk_binding_entry_activate): + Support "optional" bindings. If a binding signal + has a boolean return value, and returns FALSE it + is as if it didn't exist all. + + * gtk/gtkbindings.c (binding_compose_params): Switch + over to GValue. + + * gtk/gtknotebook.[ch]: Make the select_page() and + change_current_page() signals only take effect when + the focus is on the tab area so that key presses + in children pass up to the toplevel correctly. + +Wed Jan 16 12:16:37 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkoptionmenu.c (gtk_option_menu_size_request): Fix + calculation error in the (shouldn't happen) case where + option_menu->height < child_requisition.height. (Patch + from Jacob Berkman, #66969) + 2002-01-15 Matthias Clasen <matthiasc@poet.de> * gtk/gtkenums.h (GtkMatchType): Deprecate. (#68183) diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 94a6355600..7eeb3f3204 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,25 @@ +Wed Jan 16 19:23:04 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkbindings.c (gtk_binding_entry_activate): + Support "optional" bindings. If a binding signal + has a boolean return value, and returns FALSE it + is as if it didn't exist all. + + * gtk/gtkbindings.c (binding_compose_params): Switch + over to GValue. + + * gtk/gtknotebook.[ch]: Make the select_page() and + change_current_page() signals only take effect when + the focus is on the tab area so that key presses + in children pass up to the toplevel correctly. + +Wed Jan 16 12:16:37 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkoptionmenu.c (gtk_option_menu_size_request): Fix + calculation error in the (shouldn't happen) case where + option_menu->height < child_requisition.height. (Patch + from Jacob Berkman, #66969) + 2002-01-15 Matthias Clasen <matthiasc@poet.de> * gtk/gtkenums.h (GtkMatchType): Deprecate. (#68183) diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 94a6355600..7eeb3f3204 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,25 @@ +Wed Jan 16 19:23:04 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkbindings.c (gtk_binding_entry_activate): + Support "optional" bindings. If a binding signal + has a boolean return value, and returns FALSE it + is as if it didn't exist all. + + * gtk/gtkbindings.c (binding_compose_params): Switch + over to GValue. + + * gtk/gtknotebook.[ch]: Make the select_page() and + change_current_page() signals only take effect when + the focus is on the tab area so that key presses + in children pass up to the toplevel correctly. + +Wed Jan 16 12:16:37 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkoptionmenu.c (gtk_option_menu_size_request): Fix + calculation error in the (shouldn't happen) case where + option_menu->height < child_requisition.height. (Patch + from Jacob Berkman, #66969) + 2002-01-15 Matthias Clasen <matthiasc@poet.de> * gtk/gtkenums.h (GtkMatchType): Deprecate. (#68183) diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 94a6355600..7eeb3f3204 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,25 @@ +Wed Jan 16 19:23:04 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkbindings.c (gtk_binding_entry_activate): + Support "optional" bindings. If a binding signal + has a boolean return value, and returns FALSE it + is as if it didn't exist all. + + * gtk/gtkbindings.c (binding_compose_params): Switch + over to GValue. + + * gtk/gtknotebook.[ch]: Make the select_page() and + change_current_page() signals only take effect when + the focus is on the tab area so that key presses + in children pass up to the toplevel correctly. + +Wed Jan 16 12:16:37 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkoptionmenu.c (gtk_option_menu_size_request): Fix + calculation error in the (shouldn't happen) case where + option_menu->height < child_requisition.height. (Patch + from Jacob Berkman, #66969) + 2002-01-15 Matthias Clasen <matthiasc@poet.de> * gtk/gtkenums.h (GtkMatchType): Deprecate. (#68183) diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 94a6355600..7eeb3f3204 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,25 @@ +Wed Jan 16 19:23:04 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkbindings.c (gtk_binding_entry_activate): + Support "optional" bindings. If a binding signal + has a boolean return value, and returns FALSE it + is as if it didn't exist all. + + * gtk/gtkbindings.c (binding_compose_params): Switch + over to GValue. + + * gtk/gtknotebook.[ch]: Make the select_page() and + change_current_page() signals only take effect when + the focus is on the tab area so that key presses + in children pass up to the toplevel correctly. + +Wed Jan 16 12:16:37 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkoptionmenu.c (gtk_option_menu_size_request): Fix + calculation error in the (shouldn't happen) case where + option_menu->height < child_requisition.height. (Patch + from Jacob Berkman, #66969) + 2002-01-15 Matthias Clasen <matthiasc@poet.de> * gtk/gtkenums.h (GtkMatchType): Deprecate. (#68183) diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 94a6355600..7eeb3f3204 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,25 @@ +Wed Jan 16 19:23:04 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkbindings.c (gtk_binding_entry_activate): + Support "optional" bindings. If a binding signal + has a boolean return value, and returns FALSE it + is as if it didn't exist all. + + * gtk/gtkbindings.c (binding_compose_params): Switch + over to GValue. + + * gtk/gtknotebook.[ch]: Make the select_page() and + change_current_page() signals only take effect when + the focus is on the tab area so that key presses + in children pass up to the toplevel correctly. + +Wed Jan 16 12:16:37 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkoptionmenu.c (gtk_option_menu_size_request): Fix + calculation error in the (shouldn't happen) case where + option_menu->height < child_requisition.height. (Patch + from Jacob Berkman, #66969) + 2002-01-15 Matthias Clasen <matthiasc@poet.de> * gtk/gtkenums.h (GtkMatchType): Deprecate. (#68183) diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 94a6355600..7eeb3f3204 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,25 @@ +Wed Jan 16 19:23:04 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkbindings.c (gtk_binding_entry_activate): + Support "optional" bindings. If a binding signal + has a boolean return value, and returns FALSE it + is as if it didn't exist all. + + * gtk/gtkbindings.c (binding_compose_params): Switch + over to GValue. + + * gtk/gtknotebook.[ch]: Make the select_page() and + change_current_page() signals only take effect when + the focus is on the tab area so that key presses + in children pass up to the toplevel correctly. + +Wed Jan 16 12:16:37 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkoptionmenu.c (gtk_option_menu_size_request): Fix + calculation error in the (shouldn't happen) case where + option_menu->height < child_requisition.height. (Patch + from Jacob Berkman, #66969) + 2002-01-15 Matthias Clasen <matthiasc@poet.de> * gtk/gtkenums.h (GtkMatchType): Deprecate. (#68183) diff --git a/gtk/gtkbindings.c b/gtk/gtkbindings.c index 30cb56d28e..fcc672ea5e 100644 --- a/gtk/gtkbindings.c +++ b/gtk/gtkbindings.c @@ -259,84 +259,109 @@ binding_ht_lookup_entry (GtkBindingSet *set, } static gboolean -binding_compose_params (GtkBindingArg *args, +binding_compose_params (GtkObject *object, + GtkBindingArg *args, GSignalQuery *query, - GtkArg **params_p) + GValue **params_p) { - GtkArg *params; - const GtkType *types; + GValue *params; + const GType *types; guint i; gboolean valid; - params = g_new0 (GtkArg, query->n_params); + params = g_new0 (GValue, query->n_params + 1); *params_p = params; + + /* The instance we emit on is the first object in the array + */ + g_value_init (params, G_TYPE_OBJECT); + g_value_set_object (params, G_OBJECT (object)); + params++; types = query->param_types; valid = TRUE; - for (i = 0; i < query->n_params && valid; i++) + for (i = 1; i < query->n_params + 1 && valid; i++) { - GtkType param_ftype; + GValue tmp_value = { 0, }; + + g_value_init (params, *types); - params->type = *types; - params->name = NULL; - param_ftype = GTK_FUNDAMENTAL_TYPE (params->type); - switch (GTK_FUNDAMENTAL_TYPE (args->arg_type)) + switch (G_TYPE_FUNDAMENTAL (args->arg_type)) { - case GTK_TYPE_DOUBLE: - if (param_ftype == GTK_TYPE_FLOAT) - GTK_VALUE_FLOAT (*params) = args->d.double_data; - else if (param_ftype == GTK_TYPE_DOUBLE) - GTK_VALUE_DOUBLE (*params) = args->d.double_data; - else - valid = FALSE; + case G_TYPE_DOUBLE: + g_value_init (&tmp_value, G_TYPE_DOUBLE); + g_value_set_double (&tmp_value, args->d.double_data); break; - case GTK_TYPE_LONG: - if (param_ftype == GTK_TYPE_BOOL && - (args->d.long_data == 0 || - args->d.long_data == 1)) - GTK_VALUE_BOOL (*params) = args->d.long_data; - else if (param_ftype == GTK_TYPE_INT || - param_ftype == GTK_TYPE_ENUM) - GTK_VALUE_INT (*params) = args->d.long_data; - else if ((param_ftype == GTK_TYPE_UINT || - param_ftype == GTK_TYPE_FLAGS) && - args->d.long_data >= 0) - GTK_VALUE_UINT (*params) = args->d.long_data; - else if (param_ftype == GTK_TYPE_LONG) - GTK_VALUE_LONG (*params) = args->d.long_data; - else if (param_ftype == GTK_TYPE_ULONG && - args->d.long_data >= 0) - GTK_VALUE_ULONG (*params) = args->d.long_data; - else if (param_ftype == GTK_TYPE_FLOAT) - GTK_VALUE_FLOAT (*params) = args->d.long_data; - else if (param_ftype == GTK_TYPE_DOUBLE) - GTK_VALUE_DOUBLE (*params) = args->d.long_data; - else - valid = FALSE; + case G_TYPE_LONG: + g_value_init (&tmp_value, G_TYPE_LONG); + g_value_set_long (&tmp_value, args->d.long_data); break; - case GTK_TYPE_STRING: - if (args->arg_type == GTK_TYPE_STRING && - param_ftype == GTK_TYPE_STRING) - GTK_VALUE_STRING (*params) = args->d.string_data; - else if (args->arg_type == GTK_TYPE_IDENTIFIER && - (param_ftype == GTK_TYPE_ENUM || - param_ftype == GTK_TYPE_FLAGS)) + case G_TYPE_STRING: + /* gtk_rc_parse_flags/enum() has fancier parsing for this; we can't call + * that since we don't have a GParamSpec, so just do something simple + */ + if (G_TYPE_FUNDAMENTAL (*types) == G_TYPE_ENUM) + { + GEnumClass *class = G_ENUM_CLASS (g_type_class_ref (*types)); + + valid = FALSE; + + if (args->arg_type == GTK_TYPE_IDENTIFIER) + { + GEnumValue *enum_value = NULL; + enum_value = g_enum_get_value_by_name (class, args->d.string_data); + if (!enum_value) + enum_value = g_enum_get_value_by_nick (class, args->d.string_data); + if (enum_value) + { + g_value_set_enum (&tmp_value, enum_value->value); + valid = TRUE; + } + } + + g_type_class_unref (class); + } + /* This is just a hack for compatibility with GTK+-1.2 where a string + * could be used for a single flag value / without the support for multiple + * values in gtk_rc_parse_flags(), this isn't very useful. + */ + else if (G_TYPE_FUNDAMENTAL (*types) == G_TYPE_FLAGS) { - GtkEnumValue *value; + GFlagsClass *class = G_FLAGS_CLASS (g_type_class_ref (*types)); + + valid = FALSE; + + if (args->arg_type == GTK_TYPE_IDENTIFIER) + { + GFlagsValue *flags_value = NULL; + flags_value = g_flags_get_value_by_name (class, args->d.string_data); + if (!flags_value) + flags_value = g_flags_get_value_by_nick (class, args->d.string_data); + if (flags_value) + { + g_value_set_flags (&tmp_value, flags_value->value); + valid = TRUE; + } + } - value = gtk_type_enum_find_value (params->type, args->d.string_data); - if (value) - GTK_VALUE_ENUM (*params) = value->value; - else - valid = FALSE; + g_type_class_unref (class); } else - valid = FALSE; + { + g_value_init (&tmp_value, G_TYPE_STRING); + g_value_set_static_string (params, args->d.string_data); + } break; default: valid = FALSE; break; } + + if (valid && !g_value_transform (&tmp_value, params)) + valid = FALSE; + + g_value_unset (&tmp_value); + types++; params++; args++; @@ -344,6 +369,11 @@ binding_compose_params (GtkBindingArg *args, if (!valid) { + guint j; + + for (j = 0; j < i; j++) + g_value_unset (&(*params_p)[j]); + g_free (*params_p); *params_p = NULL; } @@ -351,26 +381,29 @@ binding_compose_params (GtkBindingArg *args, return valid; } -static void -gtk_binding_entry_activate (GtkBindingEntry *entry, - GtkObject *object) +static gboolean +gtk_binding_entry_activate (GtkBindingEntry *entry, + GtkObject *object) { GtkBindingSignal *sig; gboolean old_emission; + gboolean handled = FALSE; + gint i; old_emission = entry->in_emission; entry->in_emission = TRUE; - gtk_object_ref (object); + g_object_ref (object); for (sig = entry->signals; sig; sig = sig->next) { GSignalQuery query; guint signal_id; - GtkArg *params = NULL; + GValue *params = NULL; + GValue return_val = { 0, }; gchar *accelerator = NULL; - signal_id = gtk_signal_lookup (sig->signal_name, GTK_OBJECT_TYPE (object)); + signal_id = g_signal_lookup (sig->signal_name, G_OBJECT_TYPE (object)); if (!signal_id) { accelerator = gtk_accelerator_name (entry->keyval, entry->modifiers); @@ -379,15 +412,15 @@ gtk_binding_entry_activate (GtkBindingEntry *entry, entry->binding_set->set_name, accelerator, sig->signal_name, - gtk_type_name (GTK_OBJECT_TYPE (object))); + g_type_name (G_OBJECT_TYPE (object))); g_free (accelerator); continue; } g_signal_query (signal_id, &query); if (query.n_params != sig->n_args || - query.return_type != G_TYPE_NONE || - !binding_compose_params (sig->args, &query, ¶ms)) + (query.return_type != G_TYPE_NONE && query.return_type != G_TYPE_BOOLEAN) || + !binding_compose_params (object, sig->args, &query, ¶ms)) { accelerator = gtk_accelerator_name (entry->keyval, entry->modifiers); g_warning ("gtk_binding_entry_activate(): binding \"%s::%s\": " @@ -395,7 +428,7 @@ gtk_binding_entry_activate (GtkBindingEntry *entry, entry->binding_set->set_name, accelerator, sig->signal_name, - gtk_type_name (GTK_OBJECT_TYPE (object))); + g_type_name (G_OBJECT_TYPE (object))); } else if (!(query.signal_flags & GTK_RUN_ACTION)) { @@ -405,24 +438,41 @@ gtk_binding_entry_activate (GtkBindingEntry *entry, entry->binding_set->set_name, accelerator, sig->signal_name, - gtk_type_name (GTK_OBJECT_TYPE (object))); + g_type_name (G_OBJECT_TYPE (object))); } g_free (accelerator); if (accelerator) continue; - gtk_signal_emitv (object, signal_id, params); + if (query.return_type == G_TYPE_BOOLEAN) + g_value_init (&return_val, G_TYPE_BOOLEAN); + + g_signal_emitv (params, signal_id, 0, &return_val); + + if (query.return_type == G_TYPE_BOOLEAN) + { + if (g_value_get_boolean (&return_val)) + handled = TRUE; + g_value_unset (&return_val); + } + else + handled = TRUE; + + for (i = 0; i < query.n_params + 1; i++) + g_value_unset (¶ms[i]); g_free (params); if (entry->destroyed) break; } - gtk_object_unref (object); + g_object_unref (object); entry->in_emission = old_emission; if (entry->destroyed && !entry->in_emission) binding_entry_free (entry); + + return handled; } GtkBindingSet* @@ -506,11 +556,7 @@ gtk_binding_set_activate (GtkBindingSet *binding_set, entry = binding_ht_lookup_entry (binding_set, keyval, modifiers); if (entry) - { - gtk_binding_entry_activate (entry, object); - - return TRUE; - } + return gtk_binding_entry_activate (entry, object); return FALSE; } @@ -806,9 +852,8 @@ binding_match_activate (GSList *pspec_list, binding_set = pspec->user_data; - gtk_binding_entry_activate (binding_set->current, object); - - return TRUE; + if (gtk_binding_entry_activate (binding_set->current, object)) + return TRUE; } } diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c index fee5e357ba..438adf8cf2 100644 --- a/gtk/gtknotebook.c +++ b/gtk/gtknotebook.c @@ -115,9 +115,9 @@ struct _GtkNotebookPage static void gtk_notebook_class_init (GtkNotebookClass *klass); static void gtk_notebook_init (GtkNotebook *notebook); -static void gtk_notebook_select_page (GtkNotebook *notebook, - gboolean move_focus); -static void gtk_notebook_focus_tab (GtkNotebook *notebook, +static gboolean gtk_notebook_select_page (GtkNotebook *notebook, + gboolean move_focus); +static gboolean gtk_notebook_focus_tab (GtkNotebook *notebook, GtkNotebookTab type); static void gtk_notebook_change_current_page (GtkNotebook *notebook, gint offset); @@ -448,7 +448,7 @@ gtk_notebook_class_init (GtkNotebookClass *class) G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GtkNotebookClass, focus_tab), NULL, NULL, - _gtk_marshal_VOID__ENUM, + _gtk_marshal_BOOLEAN__ENUM, G_TYPE_NONE, 1, GTK_TYPE_NOTEBOOK_TAB); notebook_signals[SELECT_PAGE] = @@ -457,8 +457,8 @@ gtk_notebook_class_init (GtkNotebookClass *class) G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GtkNotebookClass, select_page), NULL, NULL, - _gtk_marshal_VOID__BOOLEAN, - G_TYPE_NONE, 1, + _gtk_marshal_BOOLEAN__BOOLEAN, + G_TYPE_BOOLEAN, 1, G_TYPE_BOOLEAN); notebook_signals[CHANGE_CURRENT_PAGE] = g_signal_new ("change_current_page", @@ -467,7 +467,7 @@ gtk_notebook_class_init (GtkNotebookClass *class) G_STRUCT_OFFSET (GtkNotebookClass, change_current_page), NULL, NULL, gtk_marshal_VOID__INT, - G_TYPE_NONE, 1, + G_TYPE_BOOLEAN, 1, G_TYPE_INT); binding_set = gtk_binding_set_by_class (object_class); @@ -543,32 +543,45 @@ gtk_notebook_init (GtkNotebook *notebook) notebook->have_visible_child = FALSE; } -static void +static gboolean gtk_notebook_select_page (GtkNotebook *notebook, gboolean move_focus) { - gtk_notebook_page_select (notebook, move_focus); + if (gtk_widget_is_focus (GTK_WIDGET (notebook))) + { + gtk_notebook_page_select (notebook, move_focus); + return TRUE; + } + else + return FALSE; } -static void +static gboolean gtk_notebook_focus_tab (GtkNotebook *notebook, GtkNotebookTab type) { GList *list; - - switch (type) + + if (gtk_widget_is_focus (GTK_WIDGET (notebook))) { - case GTK_NOTEBOOK_TAB_FIRST: - list = gtk_notebook_search_page (notebook, NULL, STEP_NEXT, TRUE); - if (list) - gtk_notebook_switch_focus_tab (notebook, list); - break; - case GTK_NOTEBOOK_TAB_LAST: - list = gtk_notebook_search_page (notebook, NULL, STEP_PREV, TRUE); - if (list) - gtk_notebook_switch_focus_tab (notebook, list); - break; + switch (type) + { + case GTK_NOTEBOOK_TAB_FIRST: + list = gtk_notebook_search_page (notebook, NULL, STEP_NEXT, TRUE); + if (list) + gtk_notebook_switch_focus_tab (notebook, list); + break; + case GTK_NOTEBOOK_TAB_LAST: + list = gtk_notebook_search_page (notebook, NULL, STEP_PREV, TRUE); + if (list) + gtk_notebook_switch_focus_tab (notebook, list); + break; + } + + return TRUE; } + else + return FALSE; } static void @@ -3773,7 +3786,7 @@ gtk_notebook_mnemonic_activate_switch_page (GtkWidget *child, { GtkNotebookPage *page = list->data; - gtk_widget_grab_focus (notebook); /* Do this first to avoid focusing new page */ + gtk_widget_grab_focus (GTK_WIDGET (notebook)); /* Do this first to avoid focusing new page */ gtk_notebook_switch_page (notebook, page, -1); focus_tabs_in (notebook); } diff --git a/gtk/gtknotebook.h b/gtk/gtknotebook.h index c4cbbf3a20..65d6fd4362 100644 --- a/gtk/gtknotebook.h +++ b/gtk/gtknotebook.h @@ -94,9 +94,9 @@ struct _GtkNotebookClass guint page_num); /* Action signals for keybindings */ - void (* select_page) (GtkNotebook *notebook, + gboolean (* select_page) (GtkNotebook *notebook, gboolean move_focus); - void (* focus_tab) (GtkNotebook *notebook, + gboolean (* focus_tab) (GtkNotebook *notebook, GtkNotebookTab type); void (* change_current_page) (GtkNotebook *notebook, gint offset); |