diff options
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkcalendar.c | 5 | ||||
-rw-r--r-- | gtk/gtkclist.c | 81 | ||||
-rw-r--r-- | gtk/gtkcolorsel.c | 5 | ||||
-rw-r--r-- | gtk/gtkcombo.c | 5 | ||||
-rw-r--r-- | gtk/gtkctree.c | 46 | ||||
-rw-r--r-- | gtk/gtkdialog.c | 62 | ||||
-rw-r--r-- | gtk/gtkdialog.h | 4 | ||||
-rw-r--r-- | gtk/gtkentry.c | 11 | ||||
-rw-r--r-- | gtk/gtkfilesel.c | 4 | ||||
-rw-r--r-- | gtk/gtkimcontextsimple.c | 4 | ||||
-rw-r--r-- | gtk/gtkitemfactory.c | 4 | ||||
-rw-r--r-- | gtk/gtklistitem.c | 80 | ||||
-rw-r--r-- | gtk/gtkmarshal.list | 1 | ||||
-rw-r--r-- | gtk/gtkmarshalers.list | 1 | ||||
-rw-r--r-- | gtk/gtkmenu.c | 20 | ||||
-rw-r--r-- | gtk/gtkmenubar.c | 22 | ||||
-rw-r--r-- | gtk/gtkmenushell.c | 10 | ||||
-rw-r--r-- | gtk/gtknotebook.c | 5 | ||||
-rw-r--r-- | gtk/gtkoptionmenu.c | 1 | ||||
-rw-r--r-- | gtk/gtkspinbutton.c | 195 | ||||
-rw-r--r-- | gtk/gtktext.c | 11 | ||||
-rw-r--r-- | gtk/gtktextview.c | 65 | ||||
-rw-r--r-- | gtk/gtktooltips.c | 33 | ||||
-rw-r--r-- | gtk/gtktooltips.h | 5 | ||||
-rw-r--r-- | gtk/gtkwidget.c | 50 | ||||
-rw-r--r-- | gtk/gtkwidget.h | 16 | ||||
-rw-r--r-- | gtk/gtkwindow.c | 10 |
27 files changed, 591 insertions, 165 deletions
diff --git a/gtk/gtkcalendar.c b/gtk/gtkcalendar.c index 00df16af66..4d222711b2 100644 --- a/gtk/gtkcalendar.c +++ b/gtk/gtkcalendar.c @@ -2648,6 +2648,7 @@ gtk_calendar_key_press (GtkWidget *widget, switch (event->keyval) { + case GDK_KP_Left: case GDK_Left: return_val = TRUE; if (event->state & GDK_CONTROL_MASK) @@ -2670,6 +2671,7 @@ gtk_calendar_key_press (GtkWidget *widget, calendar->focus_col); } break; + case GDK_KP_Right: case GDK_Right: return_val = TRUE; if (event->state & GDK_CONTROL_MASK) @@ -2692,6 +2694,7 @@ gtk_calendar_key_press (GtkWidget *widget, calendar->focus_col); } break; + case GDK_KP_Up: case GDK_Up: return_val = TRUE; if (event->state & GDK_CONTROL_MASK) @@ -2709,6 +2712,7 @@ gtk_calendar_key_press (GtkWidget *widget, calendar->focus_col); } break; + case GDK_KP_Down: case GDK_Down: return_val = TRUE; if (event->state & GDK_CONTROL_MASK) @@ -2726,6 +2730,7 @@ gtk_calendar_key_press (GtkWidget *widget, calendar->focus_col); } break; + case GDK_KP_Space: case GDK_space: row = calendar->focus_row; col = calendar->focus_col; diff --git a/gtk/gtkclist.c b/gtk/gtkclist.c index 653783417e..b372a44b13 100644 --- a/gtk/gtkclist.c +++ b/gtk/gtkclist.c @@ -733,80 +733,157 @@ gtk_clist_class_init (GtkCListClass *klass) "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Up, 0, + "scroll_vertical", 2, + GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, + GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Down, 0, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Down, 0, + "scroll_vertical", 2, + GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, + GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Page_Up, 0, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_PAGE_BACKWARD, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Page_Up, 0, + "scroll_vertical", 2, + GTK_TYPE_ENUM, GTK_SCROLL_PAGE_BACKWARD, + GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Page_Down, 0, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_PAGE_FORWARD, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Page_Down, 0, + "scroll_vertical", 2, + GTK_TYPE_ENUM, GTK_SCROLL_PAGE_FORWARD, + GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Home, GDK_CONTROL_MASK, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Home, GDK_CONTROL_MASK, + "scroll_vertical", 2, + GTK_TYPE_ENUM, GTK_SCROLL_JUMP, + GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_End, GDK_CONTROL_MASK, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 1.0); - + gtk_binding_entry_add_signal (binding_set, GDK_KP_End, GDK_CONTROL_MASK, + "scroll_vertical", 2, + GTK_TYPE_ENUM, GTK_SCROLL_JUMP, + GTK_TYPE_FLOAT, 1.0); + gtk_binding_entry_add_signal (binding_set, GDK_Up, GDK_SHIFT_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Up, GDK_SHIFT_MASK, + "extend_selection", 3, + GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, + GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, GDK_Down, GDK_SHIFT_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Down, GDK_SHIFT_MASK, + "extend_selection", 3, + GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, + GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, GDK_Page_Up, GDK_SHIFT_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_PAGE_BACKWARD, GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Page_Up, GDK_SHIFT_MASK, + "extend_selection", 3, + GTK_TYPE_ENUM, GTK_SCROLL_PAGE_BACKWARD, + GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, GDK_Page_Down, GDK_SHIFT_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_PAGE_FORWARD, GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Page_Down, GDK_SHIFT_MASK, + "extend_selection", 3, + GTK_TYPE_ENUM, GTK_SCROLL_PAGE_FORWARD, + GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, GDK_Home, GDK_SHIFT_MASK | GDK_CONTROL_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Home, + GDK_SHIFT_MASK | GDK_CONTROL_MASK, + "extend_selection", 3, + GTK_TYPE_ENUM, GTK_SCROLL_JUMP, + GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, GDK_End, GDK_SHIFT_MASK | GDK_CONTROL_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 1.0, GTK_TYPE_BOOL, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KP_End, + GDK_SHIFT_MASK | GDK_CONTROL_MASK, + "extend_selection", 3, + GTK_TYPE_ENUM, GTK_SCROLL_JUMP, + GTK_TYPE_FLOAT, 1.0, GTK_TYPE_BOOL, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_Left, 0, "scroll_horizontal", 2, GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Left, 0, + "scroll_horizontal", 2, + GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, + GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_Right, 0, "scroll_horizontal", 2, GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Right, 0, + "scroll_horizontal", 2, + GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, + GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_Home, 0, "scroll_horizontal", 2, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Home, 0, + "scroll_horizontal", 2, + GTK_TYPE_ENUM, GTK_SCROLL_JUMP, + GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_End, 0, "scroll_horizontal", 2, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 1.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_End, 0, + "scroll_horizontal", 2, + GTK_TYPE_ENUM, GTK_SCROLL_JUMP, + GTK_TYPE_FLOAT, 1.0); + gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0, "undo_selection", 0); gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0, "abort_column_resize", 0); gtk_binding_entry_add_signal (binding_set, GDK_space, 0, "toggle_focus_row", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Space, 0, + "toggle_focus_row", 0); gtk_binding_entry_add_signal (binding_set, GDK_space, GDK_CONTROL_MASK, "toggle_add_mode", 0); - gtk_binding_entry_add_signal (binding_set, '/', GDK_CONTROL_MASK, + gtk_binding_entry_add_signal (binding_set, GDK_KP_Space, GDK_CONTROL_MASK, + "toggle_add_mode", 0); + gtk_binding_entry_add_signal (binding_set, GDK_slash, GDK_CONTROL_MASK, + "select_all", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Divide, GDK_CONTROL_MASK, "select_all", 0); gtk_binding_entry_add_signal (binding_set, '\\', GDK_CONTROL_MASK, "unselect_all", 0); diff --git a/gtk/gtkcolorsel.c b/gtk/gtkcolorsel.c index 47546b83b6..ba204ec040 100644 --- a/gtk/gtkcolorsel.c +++ b/gtk/gtkcolorsel.c @@ -955,7 +955,10 @@ palette_activate (GtkWidget *widget, gpointer data) { /* should have a drawing area subclass with an activate signal */ - if ((event->keyval == ' ') || (event->keyval == GDK_Return)) + if ((event->keyval == GDK_space) || + (event->keyval == GDK_Return) || + (event->keyval == GDK_KP_Enter) || + (event->keyval == GDK_KP_Space)) { if (GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (widget), "color_set")) != 0) { diff --git a/gtk/gtkcombo.c b/gtk/gtkcombo.c index 1d11930292..11a1e464f6 100644 --- a/gtk/gtkcombo.c +++ b/gtk/gtkcombo.c @@ -176,7 +176,10 @@ gtk_combo_entry_key_press (GtkEntry * entry, GdkEventKey * event, GtkCombo * com GList *li; /* completion */ - if ((event->keyval == GDK_Tab) && (event->state & GDK_MOD1_MASK)) + if ((event->keyval == GDK_Tab || + event->keyval == GDK_ISO_Left_Tab || + event->keyval == GDK_KP_Tab) && + (event->state & GDK_MOD1_MASK)) { GtkEditable *editable = GTK_EDITABLE (entry); GCompletion * cmpl; diff --git a/gtk/gtkctree.c b/gtk/gtkctree.c index 415fdeceec..763ddec171 100644 --- a/gtk/gtkctree.c +++ b/gtk/gtkctree.c @@ -474,36 +474,45 @@ gtk_ctree_class_init (GtkCTreeClass *klass) binding_set = gtk_binding_set_by_class (klass); gtk_binding_entry_add_signal (binding_set, - '+', GDK_SHIFT_MASK, + GDK_plus, GDK_SHIFT_MASK, "change_focus_row_expansion", 1, GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_EXPAND); gtk_binding_entry_add_signal (binding_set, - '+', 0, + GDK_plus, 0, "change_focus_row_expansion", 1, GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_EXPAND); gtk_binding_entry_add_signal (binding_set, - '+', GDK_CONTROL_MASK | GDK_SHIFT_MASK, + GDK_plus, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "change_focus_row_expansion", 1, GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_EXPAND_RECURSIVE); gtk_binding_entry_add_signal (binding_set, - '+', GDK_CONTROL_MASK, + GDK_plus, GDK_CONTROL_MASK, "change_focus_row_expansion", 1, GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_EXPAND_RECURSIVE); + + gtk_binding_entry_add_signal (binding_set, + GDK_KP_Add, GDK_SHIFT_MASK, + "change_focus_row_expansion", 1, + GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_EXPAND); gtk_binding_entry_add_signal (binding_set, GDK_KP_Add, 0, "change_focus_row_expansion", 1, GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_EXPAND); gtk_binding_entry_add_signal (binding_set, + GDK_KP_Add, GDK_CONTROL_MASK | GDK_SHIFT_MASK, + "change_focus_row_expansion", 1, + GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_EXPAND_RECURSIVE); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Add, GDK_CONTROL_MASK, "change_focus_row_expansion", 1, - GTK_TYPE_ENUM, - GTK_CTREE_EXPANSION_EXPAND_RECURSIVE); + GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_EXPAND_RECURSIVE); + gtk_binding_entry_add_signal (binding_set, - '-', 0, + GDK_minus, 0, "change_focus_row_expansion", 1, GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_COLLAPSE); gtk_binding_entry_add_signal (binding_set, - '-', GDK_CONTROL_MASK, + GDK_minus, GDK_CONTROL_MASK, "change_focus_row_expansion", 1, GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_COLLAPSE_RECURSIVE); @@ -517,11 +526,19 @@ gtk_ctree_class_init (GtkCTreeClass *klass) GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_COLLAPSE_RECURSIVE); gtk_binding_entry_add_signal (binding_set, - '=', 0, + GDK_equal, 0, + "change_focus_row_expansion", 1, + GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_TOGGLE); + gtk_binding_entry_add_signal (binding_set, + GDK_KP_Equal, 0, + "change_focus_row_expansion", 1, + GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_TOGGLE); + gtk_binding_entry_add_signal (binding_set, + GDK_equal, GDK_SHIFT_MASK, "change_focus_row_expansion", 1, GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_TOGGLE); gtk_binding_entry_add_signal (binding_set, - '=', GDK_SHIFT_MASK, + GDK_KP_Equal, GDK_SHIFT_MASK, "change_focus_row_expansion", 1, GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_TOGGLE); gtk_binding_entry_add_signal (binding_set, @@ -529,10 +546,19 @@ gtk_ctree_class_init (GtkCTreeClass *klass) "change_focus_row_expansion", 1, GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_TOGGLE); gtk_binding_entry_add_signal (binding_set, + GDK_asterisk, 0, + "change_focus_row_expansion", 1, + GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_TOGGLE); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Multiply, GDK_CONTROL_MASK, "change_focus_row_expansion", 1, GTK_TYPE_ENUM, GTK_CTREE_EXPANSION_TOGGLE_RECURSIVE); + gtk_binding_entry_add_signal (binding_set, + GDK_asterisk, GDK_CONTROL_MASK, + "change_focus_row_expansion", 1, + GTK_TYPE_ENUM, + GTK_CTREE_EXPANSION_TOGGLE_RECURSIVE); } static void diff --git a/gtk/gtkdialog.c b/gtk/gtkdialog.c index 9e7e2ae68c..18b28df3bf 100644 --- a/gtk/gtkdialog.c +++ b/gtk/gtkdialog.c @@ -33,11 +33,10 @@ #include "gdkkeysyms.h" #include "gtkmain.h" #include "gtkintl.h" +#include "gtkbindings.h" static void gtk_dialog_class_init (GtkDialogClass *klass); static void gtk_dialog_init (GtkDialog *dialog); -static gint gtk_dialog_key_press (GtkWidget *widget, - GdkEventKey *key); static void gtk_dialog_add_buttons_valist (GtkDialog *dialog, const gchar *first_button_text, @@ -58,6 +57,8 @@ static void gtk_dialog_get_property (GObject *object, static void gtk_dialog_style_set (GtkWidget *widget, GtkStyle *prev_style); +static void gtk_dialog_close (GtkDialog *dialog); + enum { PROP_0, PROP_HAS_SEPARATOR @@ -65,6 +66,7 @@ enum { enum { RESPONSE, + CLOSE, LAST_SIGNAL }; @@ -102,18 +104,20 @@ gtk_dialog_class_init (GtkDialogClass *class) GObjectClass *gobject_class; GtkObjectClass *object_class; GtkWidgetClass *widget_class; - + GtkBindingSet *binding_set; + gobject_class = G_OBJECT_CLASS (class); object_class = GTK_OBJECT_CLASS (class); widget_class = GTK_WIDGET_CLASS (class); - + parent_class = g_type_class_peek_parent (class); gobject_class->set_property = gtk_dialog_set_property; gobject_class->get_property = gtk_dialog_get_property; - widget_class->key_press_event = gtk_dialog_key_press; widget_class->style_set = gtk_dialog_style_set; + + class->close = gtk_dialog_close; g_object_class_install_property (gobject_class, PROP_HAS_SEPARATOR, @@ -132,6 +136,14 @@ gtk_dialog_class_init (GtkDialogClass *class) GTK_TYPE_NONE, 1, GTK_TYPE_INT); + dialog_signals[CLOSE] = + gtk_signal_new ("close", + GTK_RUN_LAST | GTK_RUN_ACTION, + GTK_CLASS_TYPE (object_class), + GTK_SIGNAL_OFFSET (GtkDialogClass, close), + gtk_marshal_NONE__NONE, + GTK_TYPE_NONE, 0); + gtk_widget_class_install_style_property (widget_class, g_param_spec_int ("content_area_border", _("Content area border"), @@ -157,6 +169,11 @@ gtk_dialog_class_init (GtkDialogClass *class) G_MAXINT, 5, G_PARAM_READABLE)); + + binding_set = gtk_binding_set_by_class (class); + + gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0, + "close", 0); } static void @@ -277,37 +294,32 @@ gtk_dialog_delete_event_handler (GtkWidget *widget, return FALSE; } -static gint -gtk_dialog_key_press (GtkWidget *widget, - GdkEventKey *key) +static void +gtk_dialog_style_set (GtkWidget *widget, + GtkStyle *prev_style) +{ + update_spacings (GTK_DIALOG (widget)); +} + +static void +gtk_dialog_close (GtkDialog *dialog) { + /* Synthesize delete_event to close dialog. */ + GdkEventAny event; + GtkWidget *widget; + widget = GTK_WIDGET (dialog); + event.type = GDK_DELETE; event.window = widget->window; event.send_event = TRUE; - - if (GTK_WIDGET_CLASS (parent_class)->key_press_event (widget, key)) - return TRUE; - - if (key->keyval != GDK_Escape) - return FALSE; - - /* Synthesize delete_event to close dialog. */ + g_object_ref (G_OBJECT (event.window)); gtk_main_do_event ((GdkEvent*)&event); g_object_unref (G_OBJECT (event.window)); - - return TRUE; -} - -static void -gtk_dialog_style_set (GtkWidget *widget, - GtkStyle *prev_style) -{ - update_spacings (GTK_DIALOG (widget)); } GtkWidget* diff --git a/gtk/gtkdialog.h b/gtk/gtkdialog.h index 7bd8e975bf..5ff49b62ac 100644 --- a/gtk/gtkdialog.h +++ b/gtk/gtkdialog.h @@ -109,6 +109,10 @@ struct _GtkDialogClass GtkWindowClass parent_class; void (* response) (GtkDialog *dialog, gint response_id); + + /* Keybinding signals */ + + void (* close) (GtkDialog *dialog); }; diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index 3a4576f5cc..61cf5a8a91 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -698,10 +698,17 @@ gtk_entry_class_init (GtkEntryClass *class) "delete_from_cursor", 2, GTK_TYPE_ENUM, GTK_DELETE_WHITESPACE, GTK_TYPE_INT, 1); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Space, GDK_MOD1_MASK, + "delete_from_cursor", 2, + GTK_TYPE_ENUM, GTK_DELETE_WHITESPACE, + GTK_TYPE_INT, 1); gtk_binding_entry_add_signal (binding_set, GDK_space, GDK_MOD1_MASK, "insert_at_cursor", 1, GTK_TYPE_STRING, " "); - + gtk_binding_entry_add_signal (binding_set, GDK_KP_Space, GDK_MOD1_MASK, + "insert_at_cursor", 1, + GTK_TYPE_STRING, " "); + gtk_binding_entry_add_signal (binding_set, GDK_backslash, GDK_MOD1_MASK, "delete_from_cursor", 2, GTK_TYPE_ENUM, GTK_DELETE_WHITESPACE, @@ -727,6 +734,8 @@ gtk_entry_class_init (GtkEntryClass *class) /* Overwrite */ gtk_binding_entry_add_signal (binding_set, GDK_Insert, 0, "toggle_overwrite", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Insert, 0, + "toggle_overwrite", 0); } static void diff --git a/gtk/gtkfilesel.c b/gtk/gtkfilesel.c index 4036bf4519..96111d7350 100644 --- a/gtk/gtkfilesel.c +++ b/gtk/gtkfilesel.c @@ -1416,7 +1416,9 @@ gtk_file_selection_key_press (GtkWidget *widget, g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (event != NULL, FALSE); - if (event->keyval == GDK_Tab) + if (event->keyval == GDK_Tab || + event->keyval == GDK_ISO_Left_Tab || + event->keyval == GDK_KP_Tab) { fs = GTK_FILE_SELECTION (user_data); #ifdef G_WITH_CYGWIN diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c index 9f4f3ad517..525a916626 100644 --- a/gtk/gtkimcontextsimple.c +++ b/gtk/gtkimcontextsimple.c @@ -1154,7 +1154,9 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context, if ((event->state & (ISO_14755_MOD_MASK)) == ISO_14755_MOD_MASK) { /* space ends the sequence, and we eat the space */ - if (n_compose > 1 && event->keyval == GDK_space) + if (n_compose > 1 && + (event->keyval == GDK_space || + event->keyval == GDK_KP_Space)) { gtk_im_context_simple_commit_char (context, context_simple->tentative_match); context_simple->compose_buffer[0] = 0; diff --git a/gtk/gtkitemfactory.c b/gtk/gtkitemfactory.c index b47970e760..bead0ebe5f 100644 --- a/gtk/gtkitemfactory.c +++ b/gtk/gtkitemfactory.c @@ -1250,8 +1250,8 @@ gtk_item_factory_create_item (GtkItemFactory *ifactory, if (type_id == quark_type_stock_item) { image = gtk_image_new_from_stock (entry->extra_data, GTK_ICON_SIZE_MENU); - if (image) - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (widget), image); + + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (widget), image); if (gtk_stock_lookup (entry->extra_data, &stock_item)) { diff --git a/gtk/gtklistitem.c b/gtk/gtklistitem.c index 4e9b7bd46b..06704a1094 100644 --- a/gtk/gtklistitem.c +++ b/gtk/gtklistitem.c @@ -207,78 +207,152 @@ gtk_list_item_class_init (GtkListItemClass *class) "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Up, 0, + "scroll_vertical", 2, + GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, + GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Down, 0, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Down, 0, + "scroll_vertical", 2, + GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, + GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Page_Up, 0, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_PAGE_BACKWARD, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Page_Up, 0, + "scroll_vertical", 2, + GTK_TYPE_ENUM, GTK_SCROLL_PAGE_BACKWARD, + GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Page_Down, 0, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_PAGE_FORWARD, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Page_Down, 0, + "scroll_vertical", 2, + GTK_TYPE_ENUM, GTK_SCROLL_PAGE_FORWARD, + GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Home, GDK_CONTROL_MASK, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Home, GDK_CONTROL_MASK, + "scroll_vertical", 2, + GTK_TYPE_ENUM, GTK_SCROLL_JUMP, + GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_End, GDK_CONTROL_MASK, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 1.0); - + gtk_binding_entry_add_signal (binding_set, GDK_KP_End, GDK_CONTROL_MASK, + "scroll_vertical", 2, + GTK_TYPE_ENUM, GTK_SCROLL_JUMP, + GTK_TYPE_FLOAT, 1.0); + gtk_binding_entry_add_signal (binding_set, GDK_Up, GDK_SHIFT_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Up, GDK_SHIFT_MASK, + "extend_selection", 3, + GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, + GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_Down, GDK_SHIFT_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Down, GDK_SHIFT_MASK, + "extend_selection", 3, + GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, + GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, GDK_Page_Up, GDK_SHIFT_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_PAGE_BACKWARD, GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Page_Up, GDK_SHIFT_MASK, + "extend_selection", 3, + GTK_TYPE_ENUM, GTK_SCROLL_PAGE_BACKWARD, + GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, GDK_Page_Down, GDK_SHIFT_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_PAGE_FORWARD, GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Page_Down, GDK_SHIFT_MASK, + "extend_selection", 3, + GTK_TYPE_ENUM, GTK_SCROLL_PAGE_FORWARD, + GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, GDK_Home, GDK_SHIFT_MASK | GDK_CONTROL_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Home, + GDK_SHIFT_MASK | GDK_CONTROL_MASK, + "extend_selection", 3, + GTK_TYPE_ENUM, GTK_SCROLL_JUMP, + GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, GDK_End, GDK_SHIFT_MASK | GDK_CONTROL_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 1.0, GTK_TYPE_BOOL, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KP_End, + GDK_SHIFT_MASK | GDK_CONTROL_MASK, + "extend_selection", 3, + GTK_TYPE_ENUM, GTK_SCROLL_JUMP, + GTK_TYPE_FLOAT, 1.0, GTK_TYPE_BOOL, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_Left, 0, "scroll_horizontal", 2, GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Left, 0, + "scroll_horizontal", 2, + GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, + GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Right, 0, "scroll_horizontal", 2, GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Right, 0, + "scroll_horizontal", 2, + GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, + GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Home, 0, "scroll_horizontal", 2, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Home, 0, + "scroll_horizontal", 2, + GTK_TYPE_ENUM, GTK_SCROLL_JUMP, + GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_End, 0, "scroll_horizontal", 2, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 1.0); - + gtk_binding_entry_add_signal (binding_set, GDK_KP_End, 0, + "scroll_horizontal", 2, + GTK_TYPE_ENUM, GTK_SCROLL_JUMP, + GTK_TYPE_FLOAT, 1.0); + gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0, "undo_selection", 0); gtk_binding_entry_add_signal (binding_set, GDK_space, 0, "toggle_focus_row", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Space, 0, + "toggle_focus_row", 0); gtk_binding_entry_add_signal (binding_set, GDK_space, GDK_CONTROL_MASK, "toggle_add_mode", 0); - gtk_binding_entry_add_signal (binding_set, '/', GDK_CONTROL_MASK, + gtk_binding_entry_add_signal (binding_set, GDK_KP_Space, GDK_CONTROL_MASK, + "toggle_add_mode", 0); + gtk_binding_entry_add_signal (binding_set, GDK_slash, GDK_CONTROL_MASK, + "select_all", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Divide, GDK_CONTROL_MASK, "select_all", 0); gtk_binding_entry_add_signal (binding_set, '\\', GDK_CONTROL_MASK, "unselect_all", 0); diff --git a/gtk/gtkmarshal.list b/gtk/gtkmarshal.list index 0de93619d2..52777c822e 100644 --- a/gtk/gtkmarshal.list +++ b/gtk/gtkmarshal.list @@ -32,6 +32,7 @@ BOOLEAN:BOOLEAN ENUM:ENUM INT:POINTER NONE:BOOL +NONE:ENUM NONE:INT NONE:INT,INT NONE:NONE diff --git a/gtk/gtkmarshalers.list b/gtk/gtkmarshalers.list index 0de93619d2..52777c822e 100644 --- a/gtk/gtkmarshalers.list +++ b/gtk/gtkmarshalers.list @@ -32,6 +32,7 @@ BOOLEAN:BOOLEAN ENUM:ENUM INT:POINTER NONE:BOOL +NONE:ENUM NONE:INT NONE:INT,INT NONE:NONE diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c index b1c79fffd7..eb085fbbb8 100644 --- a/gtk/gtkmenu.c +++ b/gtk/gtkmenu.c @@ -187,20 +187,40 @@ gtk_menu_class_init (GtkMenuClass *class) GTK_TYPE_MENU_DIRECTION_TYPE, GTK_MENU_DIR_PREV); gtk_binding_entry_add_signal (binding_set, + GDK_KP_Up, 0, + "move_current", 1, + GTK_TYPE_MENU_DIRECTION_TYPE, + GTK_MENU_DIR_PREV); + gtk_binding_entry_add_signal (binding_set, GDK_Down, 0, "move_current", 1, GTK_TYPE_MENU_DIRECTION_TYPE, GTK_MENU_DIR_NEXT); gtk_binding_entry_add_signal (binding_set, + GDK_KP_Down, 0, + "move_current", 1, + GTK_TYPE_MENU_DIRECTION_TYPE, + GTK_MENU_DIR_NEXT); + gtk_binding_entry_add_signal (binding_set, GDK_Left, 0, "move_current", 1, GTK_TYPE_MENU_DIRECTION_TYPE, GTK_MENU_DIR_PARENT); gtk_binding_entry_add_signal (binding_set, + GDK_KP_Left, 0, + "move_current", 1, + GTK_TYPE_MENU_DIRECTION_TYPE, + GTK_MENU_DIR_PARENT); + gtk_binding_entry_add_signal (binding_set, GDK_Right, 0, "move_current", 1, GTK_TYPE_MENU_DIRECTION_TYPE, GTK_MENU_DIR_CHILD); + gtk_binding_entry_add_signal (binding_set, + GDK_KP_Right, 0, + "move_current", 1, + GTK_TYPE_MENU_DIRECTION_TYPE, + GTK_MENU_DIR_CHILD); } static gboolean diff --git a/gtk/gtkmenubar.c b/gtk/gtkmenubar.c index 3b0cb73e10..f266340176 100644 --- a/gtk/gtkmenubar.c +++ b/gtk/gtkmenubar.c @@ -107,21 +107,41 @@ gtk_menu_bar_class_init (GtkMenuBarClass *class) GTK_TYPE_MENU_DIRECTION_TYPE, GTK_MENU_DIR_PREV); gtk_binding_entry_add_signal (binding_set, + GDK_KP_Left, 0, + "move_current", 1, + GTK_TYPE_MENU_DIRECTION_TYPE, + GTK_MENU_DIR_PREV); + gtk_binding_entry_add_signal (binding_set, GDK_Right, 0, "move_current", 1, GTK_TYPE_MENU_DIRECTION_TYPE, GTK_MENU_DIR_NEXT); gtk_binding_entry_add_signal (binding_set, + GDK_KP_Right, 0, + "move_current", 1, + GTK_TYPE_MENU_DIRECTION_TYPE, + GTK_MENU_DIR_NEXT); + gtk_binding_entry_add_signal (binding_set, GDK_Up, 0, "move_current", 1, GTK_TYPE_MENU_DIRECTION_TYPE, GTK_MENU_DIR_PARENT); gtk_binding_entry_add_signal (binding_set, + GDK_KP_Up, 0, + "move_current", 1, + GTK_TYPE_MENU_DIRECTION_TYPE, + GTK_MENU_DIR_PARENT); + gtk_binding_entry_add_signal (binding_set, GDK_Down, 0, "move_current", 1, GTK_TYPE_MENU_DIRECTION_TYPE, GTK_MENU_DIR_CHILD); - + gtk_binding_entry_add_signal (binding_set, + GDK_KP_Down, 0, + "move_current", 1, + GTK_TYPE_MENU_DIRECTION_TYPE, + GTK_MENU_DIR_CHILD); + gtk_settings_install_property (gtk_settings_get_global (), g_param_spec_string ("gtk-menu-bar-accel", _("Menu bar accelerator"), diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c index 6575a80e43..c757b64aeb 100644 --- a/gtk/gtkmenushell.c +++ b/gtk/gtkmenushell.c @@ -262,10 +262,20 @@ gtk_menu_shell_class_init (GtkMenuShellClass *klass) GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, + GDK_KP_Enter, 0, + "activate_current", 1, + GTK_TYPE_BOOL, + TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_space, 0, "activate_current", 1, GTK_TYPE_BOOL, FALSE); + gtk_binding_entry_add_signal (binding_set, + GDK_KP_Space, 0, + "activate_current", 1, + GTK_TYPE_BOOL, + FALSE); } static GtkType diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c index a41b4b8c51..0ac2a0f572 100644 --- a/gtk/gtknotebook.c +++ b/gtk/gtknotebook.c @@ -475,6 +475,11 @@ gtk_notebook_class_init (GtkNotebookClass *class) "select_page", 1, G_TYPE_BOOLEAN, FALSE); gtk_binding_entry_add_signal (binding_set, + GDK_KP_Space, 0, + "select_page", 1, + G_TYPE_BOOLEAN, FALSE); + + gtk_binding_entry_add_signal (binding_set, GDK_Home, 0, "focus_tab", 1, GTK_TYPE_NOTEBOOK_TAB, GTK_NOTEBOOK_TAB_FIRST); diff --git a/gtk/gtkoptionmenu.c b/gtk/gtkoptionmenu.c index cd90b37830..f9a5a764c5 100644 --- a/gtk/gtkoptionmenu.c +++ b/gtk/gtkoptionmenu.c @@ -606,6 +606,7 @@ gtk_option_menu_key_press (GtkWidget *widget, switch (event->keyval) { + case GDK_KP_Space: case GDK_space: gtk_option_menu_remove_contents (option_menu); gtk_menu_popup (GTK_MENU (option_menu->menu), NULL, NULL, diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c index 324aa87504..df69180b38 100644 --- a/gtk/gtkspinbutton.c +++ b/gtk/gtkspinbutton.c @@ -1154,7 +1154,8 @@ gtk_spin_button_key_press (GtkWidget *widget, GtkSpinButton *spin; gint key; gboolean key_repeat = FALSE; - + gboolean retval = FALSE; + g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_SPIN_BUTTON (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); @@ -1164,100 +1165,112 @@ gtk_spin_button_key_press (GtkWidget *widget, key_repeat = (event->time == spin->ev_time); - if (GTK_ENTRY (widget)->editable && - (key == GDK_Up || key == GDK_Down || - key == GDK_Page_Up || key == GDK_Page_Down)) - gtk_spin_button_update (spin); - - switch (key) + if (GTK_ENTRY (widget)->editable) { - case GDK_Up: - - if (GTK_WIDGET_HAS_FOCUS (widget)) - { - gtk_signal_emit_stop_by_name (GTK_OBJECT (widget), - "key_press_event"); - if (!key_repeat) - spin->timer_step = spin->adjustment->step_increment; - - gtk_spin_button_real_spin (spin, spin->timer_step); - - if (key_repeat) - { - if (spin->climb_rate > 0.0 && spin->timer_step - < spin->adjustment->page_increment) - { - if (spin->timer_calls < MAX_TIMER_CALLS) - spin->timer_calls++; - else - { - spin->timer_calls = 0; - spin->timer_step += spin->climb_rate; - } - } - } - return TRUE; - } - return FALSE; - - case GDK_Down: - - if (GTK_WIDGET_HAS_FOCUS (widget)) - { - gtk_signal_emit_stop_by_name (GTK_OBJECT (widget), - "key_press_event"); - if (!key_repeat) - spin->timer_step = spin->adjustment->step_increment; - - gtk_spin_button_real_spin (spin, -spin->timer_step); - - if (key_repeat) - { - if (spin->climb_rate > 0.0 && spin->timer_step - < spin->adjustment->page_increment) - { - if (spin->timer_calls < MAX_TIMER_CALLS) - spin->timer_calls++; - else - { - spin->timer_calls = 0; - spin->timer_step += spin->climb_rate; - } - } - } - return TRUE; - } - return FALSE; - - case GDK_Page_Up: - - if (event->state & GDK_CONTROL_MASK) - { - gdouble diff = spin->adjustment->upper - spin->adjustment->value; - if (diff > EPSILON) - gtk_spin_button_real_spin (spin, diff); - } - else - gtk_spin_button_real_spin (spin, spin->adjustment->page_increment); - return TRUE; - - case GDK_Page_Down: + switch (key) + { + case GDK_KP_Up: + case GDK_Up: + + if (GTK_WIDGET_HAS_FOCUS (widget)) + { + gtk_signal_emit_stop_by_name (GTK_OBJECT (widget), + "key_press_event"); + if (!key_repeat) + spin->timer_step = spin->adjustment->step_increment; + + gtk_spin_button_real_spin (spin, spin->timer_step); + + if (key_repeat) + { + if (spin->climb_rate > 0.0 && spin->timer_step + < spin->adjustment->page_increment) + { + if (spin->timer_calls < MAX_TIMER_CALLS) + spin->timer_calls++; + else + { + spin->timer_calls = 0; + spin->timer_step += spin->climb_rate; + } + } + } + retval = TRUE; + } + break; + + case GDK_KP_Down: + case GDK_Down: + + if (GTK_WIDGET_HAS_FOCUS (widget)) + { + gtk_signal_emit_stop_by_name (GTK_OBJECT (widget), + "key_press_event"); + if (!key_repeat) + spin->timer_step = spin->adjustment->step_increment; + + gtk_spin_button_real_spin (spin, -spin->timer_step); + + if (key_repeat) + { + if (spin->climb_rate > 0.0 && spin->timer_step + < spin->adjustment->page_increment) + { + if (spin->timer_calls < MAX_TIMER_CALLS) + spin->timer_calls++; + else + { + spin->timer_calls = 0; + spin->timer_step += spin->climb_rate; + } + } + } + retval = TRUE; + } + break; + + case GDK_KP_Page_Up: + case GDK_Page_Up: + + if (event->state & GDK_CONTROL_MASK) + { + gdouble diff = spin->adjustment->upper - spin->adjustment->value; + if (diff > EPSILON) + gtk_spin_button_real_spin (spin, diff); + } + else + gtk_spin_button_real_spin (spin, spin->adjustment->page_increment); + + retval = TRUE; + break; + + case GDK_KP_Page_Down: + case GDK_Page_Down: + + if (event->state & GDK_CONTROL_MASK) + { + gdouble diff = spin->adjustment->value - spin->adjustment->lower; + if (diff > EPSILON) + gtk_spin_button_real_spin (spin, -diff); + } + else + gtk_spin_button_real_spin (spin, -spin->adjustment->page_increment); + + retval = TRUE; + break; + + default: + break; + } + } - if (event->state & GDK_CONTROL_MASK) - { - gdouble diff = spin->adjustment->value - spin->adjustment->lower; - if (diff > EPSILON) - gtk_spin_button_real_spin (spin, -diff); - } - else - gtk_spin_button_real_spin (spin, -spin->adjustment->page_increment); + if (retval) + { + gtk_spin_button_update (spin); return TRUE; - - default: - break; } - - return GTK_WIDGET_CLASS (parent_class)->key_press_event (widget, event); + else + return GTK_WIDGET_CLASS (parent_class)->key_press_event (widget, event); } static gint diff --git a/gtk/gtktext.c b/gtk/gtktext.c index 1851b3698e..3b3db38620 100644 --- a/gtk/gtktext.c +++ b/gtk/gtktext.c @@ -1947,23 +1947,30 @@ gtk_text_key_press (GtkWidget *widget, { switch (event->keyval) { - case GDK_Home: + case GDK_Home: + case GDK_KP_Home: if (event->state & GDK_CONTROL_MASK) scroll_int (text, -text->vadj->value); else return_val = FALSE; break; case GDK_End: + case GDK_KP_End: if (event->state & GDK_CONTROL_MASK) scroll_int (text, +text->vadj->upper); else return_val = FALSE; break; + case GDK_KP_Page_Up: case GDK_Page_Up: scroll_int (text, -text->vadj->page_increment); break; + case GDK_KP_Page_Down: case GDK_Page_Down: scroll_int (text, +text->vadj->page_increment); break; + case GDK_KP_Up: case GDK_Up: scroll_int (text, -KEY_SCROLL_PIXELS); break; + case GDK_KP_Down: case GDK_Down: scroll_int (text, +KEY_SCROLL_PIXELS); break; case GDK_Return: + case GDK_KP_Enter: if (event->state & GDK_CONTROL_MASK) gtk_signal_emit_by_name (GTK_OBJECT (text), "activate"); else @@ -2047,6 +2054,7 @@ gtk_text_key_press (GtkWidget *widget, case GDK_Clear: gtk_text_delete_line (text); break; + case GDK_KP_Insert: case GDK_Insert: if (event->state & GDK_SHIFT_MASK) { @@ -2076,6 +2084,7 @@ gtk_text_key_press (GtkWidget *widget, break; case GDK_Tab: case GDK_ISO_Left_Tab: + case GDK_KP_Tab: position = text->point.index; gtk_editable_insert_text (GTK_EDITABLE (old_editable), "\t", 1, &position); break; diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index f268e11aa4..5de42f936c 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -715,9 +715,15 @@ gtk_text_view_class_init (GtkTextViewClass *klass) add_move_binding (binding_set, GDK_Right, 0, GTK_MOVEMENT_VISUAL_POSITIONS, 1); + add_move_binding (binding_set, GDK_KP_Right, 0, + GTK_MOVEMENT_VISUAL_POSITIONS, 1); + add_move_binding (binding_set, GDK_Left, 0, GTK_MOVEMENT_VISUAL_POSITIONS, -1); + add_move_binding (binding_set, GDK_KP_Left, 0, + GTK_MOVEMENT_VISUAL_POSITIONS, -1); + add_move_binding (binding_set, GDK_f, GDK_CONTROL_MASK, GTK_MOVEMENT_LOGICAL_POSITIONS, 1); @@ -727,16 +733,28 @@ gtk_text_view_class_init (GtkTextViewClass *klass) add_move_binding (binding_set, GDK_Right, GDK_CONTROL_MASK, GTK_MOVEMENT_WORDS, 1); + add_move_binding (binding_set, GDK_KP_Right, GDK_CONTROL_MASK, + GTK_MOVEMENT_WORDS, 1); + add_move_binding (binding_set, GDK_Left, GDK_CONTROL_MASK, GTK_MOVEMENT_WORDS, -1); + add_move_binding (binding_set, GDK_KP_Left, GDK_CONTROL_MASK, + GTK_MOVEMENT_WORDS, 1); + /* Eventually we want to move by display lines, not paragraphs */ add_move_binding (binding_set, GDK_Up, 0, GTK_MOVEMENT_DISPLAY_LINES, -1); + add_move_binding (binding_set, GDK_KP_Up, 0, + GTK_MOVEMENT_DISPLAY_LINES, -1); + add_move_binding (binding_set, GDK_Down, 0, GTK_MOVEMENT_DISPLAY_LINES, 1); + add_move_binding (binding_set, GDK_KP_Down, 0, + GTK_MOVEMENT_DISPLAY_LINES, 1); + add_move_binding (binding_set, GDK_p, GDK_CONTROL_MASK, GTK_MOVEMENT_DISPLAY_LINES, -1); @@ -758,26 +776,45 @@ gtk_text_view_class_init (GtkTextViewClass *klass) add_move_binding (binding_set, GDK_Home, 0, GTK_MOVEMENT_DISPLAY_LINE_ENDS, -1); + add_move_binding (binding_set, GDK_KP_Home, 0, + GTK_MOVEMENT_DISPLAY_LINE_ENDS, -1); + add_move_binding (binding_set, GDK_End, 0, GTK_MOVEMENT_DISPLAY_LINE_ENDS, 1); + add_move_binding (binding_set, GDK_KP_End, 0, + GTK_MOVEMENT_DISPLAY_LINE_ENDS, 1); + add_move_binding (binding_set, GDK_Home, GDK_CONTROL_MASK, GTK_MOVEMENT_BUFFER_ENDS, -1); + add_move_binding (binding_set, GDK_KP_Home, GDK_CONTROL_MASK, + GTK_MOVEMENT_BUFFER_ENDS, -1); + add_move_binding (binding_set, GDK_End, GDK_CONTROL_MASK, GTK_MOVEMENT_BUFFER_ENDS, 1); + add_move_binding (binding_set, GDK_KP_End, GDK_CONTROL_MASK, + GTK_MOVEMENT_BUFFER_ENDS, 1); + add_move_binding (binding_set, GDK_Page_Up, 0, GTK_MOVEMENT_PAGES, -1); + add_move_binding (binding_set, GDK_KP_Page_Up, 0, + GTK_MOVEMENT_PAGES, -1); + add_move_binding (binding_set, GDK_Page_Down, 0, GTK_MOVEMENT_PAGES, 1); - + add_move_binding (binding_set, GDK_KP_Page_Down, 0, + GTK_MOVEMENT_PAGES, 1); + /* Setting the cut/paste/copy anchor */ gtk_binding_entry_add_signal (binding_set, GDK_space, GDK_CONTROL_MASK, "set_anchor", 0); - + gtk_binding_entry_add_signal (binding_set, GDK_KP_Space, GDK_CONTROL_MASK, + "set_anchor", 0); + /* Deleting text */ gtk_binding_entry_add_signal (binding_set, GDK_Delete, 0, "delete_from_cursor", 2, @@ -833,10 +870,17 @@ gtk_text_view_class_init (GtkTextViewClass *klass) "delete_from_cursor", 2, GTK_TYPE_ENUM, GTK_DELETE_WHITESPACE, GTK_TYPE_INT, 1); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Space, GDK_MOD1_MASK, + "delete_from_cursor", 2, + GTK_TYPE_ENUM, GTK_DELETE_WHITESPACE, + GTK_TYPE_INT, 1); gtk_binding_entry_add_signal (binding_set, GDK_space, GDK_MOD1_MASK, "insert_at_cursor", 1, GTK_TYPE_STRING, " "); - + gtk_binding_entry_add_signal (binding_set, GDK_KP_Space, GDK_MOD1_MASK, + "insert_at_cursor", 1, + GTK_TYPE_STRING, " "); + gtk_binding_entry_add_signal (binding_set, GDK_backslash, GDK_MOD1_MASK, "delete_from_cursor", 2, GTK_TYPE_ENUM, GTK_DELETE_WHITESPACE, @@ -862,6 +906,8 @@ gtk_text_view_class_init (GtkTextViewClass *klass) /* Overwrite */ gtk_binding_entry_add_signal (binding_set, GDK_Insert, 0, "toggle_overwrite", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Insert, 0, + "toggle_overwrite", 0); } void @@ -2168,7 +2214,7 @@ gtk_text_view_set_property (GObject *object, case PROP_WRAP_MODE: gtk_text_view_set_wrap_mode (text_view, g_value_get_enum (value)); break; - + case PROP_JUSTIFICATION: gtk_text_view_set_justification (text_view, g_value_get_enum (value)); break; @@ -3135,7 +3181,10 @@ gtk_text_view_key_press_event (GtkWidget *widget, GdkEventKey *event) retval = TRUE; } /* Pass through Tab as literal tab, unless Control is held down */ - else if (event->keyval == GDK_Tab && !(event->state & GDK_CONTROL_MASK)) + else if ((event->keyval == GDK_Tab || + event->keyval == GDK_KP_Tab || + event->keyval == GDK_ISO_Left_Tab) && + !(event->state & GDK_CONTROL_MASK)) { gtk_text_buffer_insert_interactive_at_cursor (get_buffer (text_view), "\t", 1, text_view->editable); @@ -3682,6 +3731,12 @@ gtk_text_view_check_cursor_blink (GtkTextView *text_view) return; #endif + if (text_view->layout == NULL) + return; + + if (!text_view->cursor_visible) + return; + if (text_view->layout != NULL && text_view->cursor_visible && GTK_WIDGET_HAS_FOCUS (text_view)) diff --git a/gtk/gtktooltips.c b/gtk/gtktooltips.c index 81858127bd..7bdf119d29 100644 --- a/gtk/gtktooltips.c +++ b/gtk/gtktooltips.c @@ -285,17 +285,6 @@ gtk_tooltips_set_tip (GtkTooltips *tooltips, } } -void -gtk_tooltips_set_colors (GtkTooltips *tooltips, - GdkColor *background, - GdkColor *foreground) -{ - g_return_if_fail (tooltips != NULL); - - g_warning ("gtk_tooltips_set_colors is deprecated and does nothing.\n" - "The colors for tooltips are now taken from the style."); -} - static gint gtk_tooltips_paint_window (GtkTooltips *tooltips) { @@ -521,3 +510,25 @@ gtk_tooltips_widget_remove (GtkWidget *widget, tooltipsdata); gtk_tooltips_destroy_data (tooltipsdata); } + +void +_gtk_tooltips_show_tip (GtkWidget *widget) +{ + /* Showing the tip from the keyboard */ + + /* FIXME this function is completely broken right now, + * popdown doesn't occur when it should. + */ + + GtkTooltipsData *tooltipsdata; + + tooltipsdata = gtk_tooltips_data_get (widget); + + if (tooltipsdata == NULL) + return; + + gtk_tooltips_set_active_widget (tooltipsdata->tooltips, + widget); + + gtk_tooltips_timeout (tooltipsdata->tooltips); +} diff --git a/gtk/gtktooltips.h b/gtk/gtktooltips.h index 609df3cd64..b88ae57d5d 100644 --- a/gtk/gtktooltips.h +++ b/gtk/gtktooltips.h @@ -66,6 +66,7 @@ struct _GtkTooltips guint delay : 30; guint enabled : 1; + guint have_grab : 1; gint timer_tag; gboolean use_sticky_delay; GTimeVal last_popdown; @@ -87,13 +88,11 @@ void gtk_tooltips_set_tip (GtkTooltips *tooltips, GtkWidget *widget, const gchar *tip_text, const gchar *tip_private); -void gtk_tooltips_set_colors (GtkTooltips *tooltips, - GdkColor *background, - GdkColor *foreground); GtkTooltipsData* gtk_tooltips_data_get (GtkWidget *widget); void gtk_tooltips_force_window (GtkTooltips *tooltips); +void _gtk_tooltips_show_tip (GtkWidget *widget); #ifdef __cplusplus } diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index ff9dfcfffc..3ff70a81c0 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -47,6 +47,7 @@ #include "gdk/gdkkeysyms.h" #include "gtkintl.h" #include "gtkaccessible.h" +#include "gtktooltips.h" #define WIDGET_CLASS(w) GTK_WIDGET_GET_CLASS (w) #define INIT_PATH_SIZE (512) @@ -112,6 +113,7 @@ enum { VISIBILITY_NOTIFY_EVENT, WINDOW_STATE_EVENT, POPUP_MENU, + SHOW_HELP, LAST_SIGNAL }; @@ -176,7 +178,11 @@ static void gtk_widget_style_set (GtkWidget *widget, GtkStyle *previous_style); static void gtk_widget_direction_changed (GtkWidget *widget, GtkTextDirection previous_direction); + static void gtk_widget_real_grab_focus (GtkWidget *focus_widget); +static void gtk_widget_real_show_help (GtkWidget *widget, + GtkWidgetHelpType help_type); + static void gtk_widget_dispatch_child_properties_changed (GtkWidget *object, guint n_pspecs, GParamSpec **pspecs); @@ -214,7 +220,6 @@ static AtkObject* gtk_widget_real_get_accessible (GtkWidget *widget); static void gtk_widget_accessible_interface_init (AtkImplementorIface *iface); static AtkObject* gtk_widget_ref_accessible (AtkImplementor *implementor); - /* --- variables --- */ static gpointer parent_class = NULL; static guint widget_signals[LAST_SIGNAL] = { 0 }; @@ -226,6 +231,7 @@ static GSList *style_stack = NULL; static guint composite_child_stack = 0; static GtkTextDirection gtk_default_direction = GTK_TEXT_DIR_LTR; static GParamSpecPool *style_property_spec_pool = NULL; + static GQuark quark_property_parser = 0; static GQuark quark_aux_info = 0; static GQuark quark_event_mask = 0; @@ -240,7 +246,6 @@ static GQuark quark_accessible_object = 0; GParamSpecPool *_gtk_widget_child_property_pool = NULL; GObjectNotifyContext *_gtk_widget_child_property_notify_context = NULL; - /* --- functions --- */ GtkType gtk_widget_get_type (void) @@ -378,7 +383,12 @@ gtk_widget_class_init (GtkWidgetClass *klass) klass->drag_motion = NULL; klass->drag_drop = NULL; klass->drag_data_received = NULL; - klass->get_accessible = gtk_widget_real_get_accessible; /* Accessibility support */ + + klass->show_help = gtk_widget_real_show_help; + + /* Accessibility support */ + klass->get_accessible = gtk_widget_real_get_accessible; + klass->no_expose_event = NULL; g_object_class_install_property (gobject_class, @@ -1021,6 +1031,13 @@ gtk_widget_class_init (GtkWidgetClass *klass) GTK_SIGNAL_OFFSET (GtkWidgetClass, popup_menu), gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0); + widget_signals[SHOW_HELP] = + gtk_signal_new ("show_help", + GTK_RUN_LAST | GTK_RUN_ACTION, + GTK_CLASS_TYPE (object_class), + GTK_SIGNAL_OFFSET (GtkWidgetClass, show_help), + gtk_marshal_NONE__ENUM, + GTK_TYPE_NONE, 1, GTK_TYPE_WIDGET_HELP_TYPE); binding_set = gtk_binding_set_by_class (klass); gtk_binding_entry_add_signal (binding_set, GDK_F10, GDK_SHIFT_MASK, @@ -1028,6 +1045,24 @@ gtk_widget_class_init (GtkWidgetClass *klass) gtk_binding_entry_add_signal (binding_set, GDK_Menu, 0, "popup_menu", 0); + gtk_binding_entry_add_signal (binding_set, GDK_F1, GDK_CONTROL_MASK, + "show_help", 1, + GTK_TYPE_WIDGET_HELP_TYPE, + GTK_WIDGET_HELP_TOOLTIP); + gtk_binding_entry_add_signal (binding_set, GDK_KP_F1, GDK_CONTROL_MASK, + "show_help", 1, + GTK_TYPE_WIDGET_HELP_TYPE, + GTK_WIDGET_HELP_TOOLTIP); + + gtk_binding_entry_add_signal (binding_set, GDK_F1, GDK_SHIFT_MASK, + "show_help", 1, + GTK_TYPE_WIDGET_HELP_TYPE, + GTK_WIDGET_HELP_WHATS_THIS); + gtk_binding_entry_add_signal (binding_set, GDK_KP_F1, GDK_SHIFT_MASK, + "show_help", 1, + GTK_TYPE_WIDGET_HELP_TYPE, + GTK_WIDGET_HELP_WHATS_THIS); + gtk_widget_class_install_style_property (klass, g_param_spec_boolean ("interior_focus", _("Interior Focus"), @@ -3094,6 +3129,14 @@ gtk_widget_real_grab_focus (GtkWidget *focus_widget) } } +static void +gtk_widget_real_show_help (GtkWidget *widget, + GtkWidgetHelpType help_type) +{ + if (help_type == GTK_WIDGET_HELP_TOOLTIP) + _gtk_tooltips_show_tip (widget); +} + static gboolean gtk_widget_real_focus (GtkWidget *widget, GtkDirectionType direction) @@ -3110,7 +3153,6 @@ gtk_widget_real_focus (GtkWidget *widget, return FALSE; } - /** * gtk_widget_is_focus: * @widget: a #GtkWidget diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h index 597a385df7..f2c0fa75e3 100644 --- a/gtk/gtkwidget.h +++ b/gtk/gtkwidget.h @@ -78,6 +78,13 @@ typedef enum GTK_DOUBLE_BUFFERED = 1 << 21 } GtkWidgetFlags; +/* Kinds of widget-specific help */ +typedef enum +{ + GTK_WIDGET_HELP_TOOLTIP, + GTK_WIDGET_HELP_WHATS_THIS +} GtkWidgetHelpType; + /* Macro for casting a pointer to a GtkWidget or GtkWidgetClass pointer. * Macros for testing whether `widget' or `klass' are of type GTK_TYPE_WIDGET. */ @@ -391,7 +398,14 @@ struct _GtkWidgetClass /* Signals used only for keybindings */ void (* popup_menu) (GtkWidget *widget); - + + /* If a widget has multiple tooltips/whatsthis, it should show the + * one for the current focus location, or if that doesn't make + * sense, should cycle through them showing each tip alongside + * whatever piece of the widget it applies to. + */ + void (* show_help) (GtkWidget *widget, + GtkWidgetHelpType help_type); /* accessibility support */ diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index eb7e96a4f4..f787153a46 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -476,7 +476,9 @@ gtk_window_class_init (GtkWindowClass *klass) gtk_binding_entry_add_signal (binding_set, GDK_space, 0, "activate_focus", 0); - + gtk_binding_entry_add_signal (binding_set, GDK_KP_Space, 0, + "activate_focus", 0); + gtk_binding_entry_add_signal (binding_set, GDK_Return, 0, "activate_default", 0); @@ -514,6 +516,9 @@ gtk_window_class_init (GtkWindowClass *klass) gtk_binding_entry_add_signal (binding_set, GDK_Tab, 0, "move_focus", 1, GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_FORWARD); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Tab, 0, + "move_focus", 1, + GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_FORWARD); gtk_binding_entry_add_signal (binding_set, GDK_ISO_Left_Tab, 0, "move_focus", 1, GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_FORWARD); @@ -521,6 +526,9 @@ gtk_window_class_init (GtkWindowClass *klass) gtk_binding_entry_add_signal (binding_set, GDK_Tab, GDK_SHIFT_MASK, "move_focus", 1, GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_BACKWARD); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Tab, GDK_SHIFT_MASK, + "move_focus", 1, + GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_BACKWARD); gtk_binding_entry_add_signal (binding_set, GDK_ISO_Left_Tab, GDK_SHIFT_MASK, "move_focus", 1, GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_BACKWARD); |