From a8cdef7243983680240647ba30d8cfa8f9815511 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Mon, 7 May 2001 19:16:05 +0000 Subject: Connect to key_press_event on the GtkHTML widget. (etree_key): Only handle * folder-browser.c (my_folder_browser_init): Connect to key_press_event on the GtkHTML widget. (etree_key): Only handle space/backspace here, pass the rest off to on_key_press. (on_key_press): Handle Delete/N/P/Menu in either MessageList or MailDisplay. * message-list.c (message_list_select): Grab focus if we don't have it. svn path=/trunk/; revision=9694 --- mail/folder-browser.c | 82 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 34 deletions(-) (limited to 'mail/folder-browser.c') diff --git a/mail/folder-browser.c b/mail/folder-browser.c index c2d224d6ad..c070dd2072 100644 --- a/mail/folder-browser.c +++ b/mail/folder-browser.c @@ -15,11 +15,12 @@ #include #include -#include -#include #include -#include +#include +#include #include +#include +#include #include "filter/vfolder-rule.h" #include "filter/vfolder-context.h" @@ -821,38 +822,20 @@ display_menu: return TRUE; } -static int -etree_key (ETree *tree, int row, ETreePath path, int col, GdkEvent *ev, FolderBrowser *fb) +static gint +on_key_press (GtkWidget *widget, GdkEventKey *key, gpointer data) { - if ((ev->key.state & GDK_CONTROL_MASK) != 0) - return FALSE; - - switch (ev->key.keyval) { - case GDK_space: - case GDK_BackSpace: - { - GtkAdjustment *vadj; - gfloat page_size; + FolderBrowser *fb = data; + ETreePath *path; + int row; - vadj = e_scroll_frame_get_vadjustment (fb->mail_display->scroll); - page_size = vadj->page_size - vadj->step_increment; + if (key->state & GDK_CONTROL_MASK) + return FALSE; - if (ev->key.keyval == GDK_BackSpace) { - if (vadj->value > vadj->lower + page_size) - vadj->value -= page_size; - else - vadj->value = vadj->lower; - } else { - if (vadj->value < vadj->upper - vadj->page_size - page_size) - vadj->value += page_size; - else - vadj->value = vadj->upper - vadj->page_size; - } + path = e_tree_get_cursor (fb->message_list->tree); + row = e_tree_row_of_node (fb->message_list->tree, path); - gtk_adjustment_value_changed (vadj); - return TRUE; - } - + switch (key->keyval) { case GDK_Delete: case GDK_KP_Delete: delete_msg (NULL, fb); @@ -876,14 +859,42 @@ etree_key (ETree *tree, int row, ETreePath path, int col, GdkEvent *ev, FolderBr return TRUE; case GDK_Menu: - on_right_click (tree, row, path, col, ev, fb); + on_right_click (fb->message_list->tree, row, path, 2, + (GdkEvent *)key, fb); return TRUE; + } + + return FALSE; +} + +static int +etree_key (ETree *tree, int row, ETreePath path, int col, GdkEvent *ev, FolderBrowser *fb) +{ + GtkAdjustment *vadj; + gfloat page_size; - default: + if ((ev->key.state & GDK_CONTROL_MASK) != 0) return FALSE; + if (ev->key.keyval != GDK_space && ev->key.keyval != GDK_BackSpace) + return on_key_press ((GtkWidget *)tree, (GdkEventKey *)ev, fb); + + vadj = e_scroll_frame_get_vadjustment (fb->mail_display->scroll); + page_size = vadj->page_size - vadj->step_increment; + + if (ev->key.keyval == GDK_BackSpace) { + if (vadj->value > vadj->lower + page_size) + vadj->value -= page_size; + else + vadj->value = vadj->lower; + } else { + if (vadj->value < vadj->upper - vadj->page_size - page_size) + vadj->value += page_size; + else + vadj->value = vadj->upper - vadj->page_size; } - return FALSE; + gtk_adjustment_value_changed (vadj); + return TRUE; } static void @@ -1085,6 +1096,9 @@ my_folder_browser_init (GtkObject *object) GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); + gtk_signal_connect (GTK_OBJECT (fb->mail_display->html), + "key_press_event", GTK_SIGNAL_FUNC (on_key_press), fb); + gtk_signal_connect (GTK_OBJECT (fb->message_list->tree), "key_press", GTK_SIGNAL_FUNC (etree_key), fb); -- cgit