[PATCH 3/6] clients/view: Add mousewheel and arrow keys

Tim Wiederhake twied at gmx.net
Tue Jan 25 13:21:57 PST 2011


---
 clients/view.c |   68 ++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 51 insertions(+), 17 deletions(-)

diff --git a/clients/view.c b/clients/view.c
index cc3206d..1e0cbb0 100644
--- a/clients/view.c
+++ b/clients/view.c
@@ -107,38 +107,72 @@ redraw_handler(struct window *window, void *data)
 }
 
 static void
+view_page_up(struct view *view)
+{
+        if(view->page <= 0)
+                return;
+
+        view->page--;
+        window_schedule_redraw(view->window);
+}
+
+static void
+view_page_down(struct view *view)
+{
+        if(view->page >= poppler_document_get_n_pages(view->document) - 1)
+                return;
+
+        view->page++;
+        window_schedule_redraw(view->window);
+}
+
+static void
+button_handler(struct window *window, struct input *input, uint32_t time,
+               int button, int state, void *data)
+{
+        struct view *view = data;
+
+        if(!state)
+                return;
+
+        switch(button) {
+        case 275:
+                view_page_up(view);
+                break;
+        case 276:
+                view_page_down(view);
+                break;
+        default:
+                break;
+        }
+}
+
+static void
 key_handler(struct window *window, struct input *input, uint32_t time,
 	    uint32_t key, uint32_t unicode, uint32_t state, void *data)
 {
 	struct view *view = data;
 
+	if(!state)
+	        return;
+
 	switch (key) {
 	case KEY_F11:
-		if (!state)
-			break;
 		view->fullscreen ^= 1;
 		window_set_fullscreen(window, view->fullscreen);
 		window_schedule_redraw(view->window);
 		break;
 	case KEY_SPACE:
 	case KEY_PAGEDOWN:
-		if (!state)
-			break;
-
-		if (view->page + 1 < poppler_document_get_n_pages(view->document))
-                        view->page++;
-
-		window_schedule_redraw(view->window);
+	case KEY_RIGHT:
+	case KEY_DOWN:
+                view_page_down(view);
 		break;
 	case KEY_BACKSPACE:
 	case KEY_PAGEUP:
-		if (!state)
-			break;
-
-		if(view->page > 0)
-                        view->page--;
-
-		window_schedule_redraw(view->window);
+	case KEY_LEFT:
+	case KEY_UP:
+                view_page_up(view);
 		break;
 	default:
 		break;
@@ -179,7 +213,7 @@ view_create(struct display *display, uint32_t key, const char *filename)
 	window_set_key_handler(view->window, key_handler);
 	window_set_keyboard_focus_handler(view->window,
 					  keyboard_focus_handler);
-
+	window_set_button_handler(view->window, button_handler);
 	view->document = poppler_document_new_from_file(filename,
 							NULL, &error);
 	view->page = 0;
-- 
1.7.2.3



More information about the wayland-devel mailing list