Changeset 188

Show
Ignore:
Timestamp:
05/21/06 07:23:10 (2 years ago)
Author:
jordi
Message:

The keyboard scrolling now behaves as most users expects thanks to the patch of LoneFox? (#10).

Location:
trunk/src/gtk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/gtk/MainView.cxx

    r186 r188  
    110110      G_CALLBACK (main_window_go_to_first_page_cb) }, 
    111111 
    112     { "GoToNextPage", GTK_STOCK_GO_FORWARD, N_("_Next Page"), "Page_Down",  
     112    { "GoToNextPage", GTK_STOCK_GO_FORWARD, N_("_Next Page"), "<Shift>Page_Down",  
    113113      N_("Go to the next page"),  
    114114      G_CALLBACK (main_window_go_to_next_page_cb) }, 
    115115 
    116     { "GoToPreviousPage", GTK_STOCK_GO_BACK, N_("_Previous Page"), "Page_Up",  
     116    { "GoToPreviousPage", GTK_STOCK_GO_BACK, N_("_Previous Page"), "<Shift>Page_Up",  
    117117      N_("Go to the previous page"), 
    118118      G_CALLBACK (main_window_go_to_previous_page_cb) }, 
  • trunk/src/gtk/PageView.cxx

    r187 r188  
    1919#include <gettext.h> 
    2020#include <gtk/gtk.h> 
     21#include <gdk/gdkkeysyms.h> 
    2122#include <epdfview.h> 
    2223#include "PageView.h" 
     
    3435static gboolean page_view_mouse_motion_cb (GtkWidget *, GdkEventMotion *, 
    3536                                           gpointer); 
    36 static void page_view_get_scrollbars_size (GtkWidget *widget,  
     37static void page_view_get_scrollbars_size (GtkWidget *, 
    3738                                           gint *width, gint *height); 
    3839static void page_view_resized_cb (GtkWidget *, GtkAllocation *, gpointer); 
    39 static gboolean page_view_scrolled_cb (GtkWidget *widget, GdkEventScroll *, 
    40                                       gpointer); 
     40static gboolean page_view_scrolled_cb (GtkWidget *, GdkEventScroll *, gpointer); 
     41static gboolean page_view_keypress_cb (GtkWidget *, GdkEventKey *, gpointer); 
    4142 
    4243 
     
    217218    g_signal_connect (G_OBJECT (m_PageScroll), "scroll-event", 
    218219                      G_CALLBACK (page_view_scrolled_cb), pter); 
     220    g_signal_connect (G_OBJECT (m_PageScroll), "key-press-event", 
     221                      G_CALLBACK (page_view_keypress_cb), pter); 
    219222 
    220223    // And connect the motion, button press and release events. 
     
    409412    view->getPresenter ()->mouseButtonPressed (event->button, x, y); 
    410413 
     414    gtk_widget_grab_focus(view->getTopWidget()); 
     415     
    411416    return TRUE; 
    412417} 
     
    524529    return FALSE; 
    525530} 
     531 
     532/// 
     533/// @brief A key was pressed. 
     534/// 
     535static gboolean 
     536page_view_keypress_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) 
     537{ 
     538    g_assert ( NULL != data && "The data parameter is NULL."); 
     539 
     540    GtkScrollType direction; 
     541    gboolean horizontal = FALSE; 
     542    PagePter *pter = (PagePter *)data; 
     543     
     544    GtkAdjustment *adjustment =  
     545        gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (widget)); 
     546    gdouble position = gtk_adjustment_get_value (adjustment); 
     547     
     548    if ( event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK) ) 
     549    { 
     550        return FALSE; 
     551    } 
     552     
     553    switch ( event->keyval ) 
     554    { 
     555        case GDK_Left: 
     556        case GDK_KP_Left: 
     557            direction = GTK_SCROLL_STEP_LEFT; 
     558            horizontal = TRUE; 
     559            break; 
     560         
     561        case GDK_Right: 
     562        case GDK_KP_Right: 
     563            horizontal = TRUE; 
     564            direction = GTK_SCROLL_STEP_RIGHT; 
     565            break; 
     566         
     567        case GDK_Up: 
     568        case GDK_KP_Up: 
     569            direction = GTK_SCROLL_STEP_UP; 
     570            break; 
     571         
     572        case GDK_Down: 
     573        case GDK_KP_Down: 
     574            direction = GTK_SCROLL_STEP_DOWN; 
     575            break; 
     576         
     577        case GDK_Page_Up: 
     578        case GDK_KP_Page_Up: 
     579            if ( position == adjustment->lower ) 
     580            { 
     581                pter->scrollToPreviousPage (); 
     582                return TRUE; 
     583            } 
     584            direction = GTK_SCROLL_START; 
     585            break; 
     586         
     587        case GDK_Page_Down: 
     588        case GDK_KP_Page_Down: 
     589            if ( position == ( adjustment->upper - adjustment->page_size) ) 
     590            { 
     591                pter->scrollToNextPage (); 
     592                return TRUE; 
     593            } 
     594            direction = GTK_SCROLL_END; 
     595            break; 
     596         
     597        default: 
     598            return FALSE; 
     599    } 
     600     
     601    g_signal_emit_by_name(G_OBJECT(widget), "scroll-child", 
     602                          direction, horizontal); 
     603    return TRUE; 
     604}