epiphany r8619 - trunk/src



Author: xan
Date: Sat Nov 29 19:14:13 2008
New Revision: 8619
URL: http://svn.gnome.org/viewvc/epiphany?rev=8619&view=rev

Log:
window: zoom in/out with ctrl+scroll-{up,down}

We connect to the scroll-event of the view directly because
GtkScrolledWindow eats all the GdkEventScroll it gets without checking
the modifier keys mask, making it impossible to set-up our own handler
for scroll-event.

Modified:
   trunk/src/ephy-window.c

Modified: trunk/src/ephy-window.c
==============================================================================
--- trunk/src/ephy-window.c	(original)
+++ trunk/src/ephy-window.c	Sat Nov 29 19:14:13 2008
@@ -883,6 +883,24 @@
 }
 
 static gboolean 
+scroll_event_cb (GtkWidget *widget,
+		 GdkEventScroll *event,
+		 EphyWindow *window)
+{
+	guint modifier = event->state & gtk_accelerator_get_default_mod_mask ();
+
+	if (modifier != GDK_CONTROL_MASK)
+		return FALSE;
+
+	if (event->direction == GDK_SCROLL_UP)
+		ephy_window_set_zoom (window, ZOOM_IN);
+	else if (event->direction == GDK_SCROLL_DOWN)
+		ephy_window_set_zoom (window, ZOOM_OUT);
+
+	return TRUE;
+}
+
+static gboolean 
 ephy_window_key_press_event (GtkWidget *widget,
 			     GdkEventKey *event)
 {
@@ -2412,6 +2430,9 @@
 		g_signal_handlers_disconnect_by_func (web_view,
 						      G_CALLBACK (sync_tab_zoom),
 						      window);
+		g_signal_handlers_disconnect_by_func (web_view,
+						      G_CALLBACK (scroll_event_cb),
+						      window);
 
 		g_signal_handlers_disconnect_by_func (embed,
 						      G_CALLBACK (sync_tab_popup_windows),
@@ -2484,6 +2505,15 @@
 		g_signal_connect_object (web_view, "notify::zoom-level",
 					 G_CALLBACK (sync_tab_zoom),
 					 window, 0);
+		/* FIXME: we should set our own handler for
+		   scroll-event, but right now it's pointless because
+		   GtkScrolledWindow will eat all the events, even
+		   those with modifier keys we want to catch to zoom
+		   in and out. See bug #562630
+		*/
+		g_signal_connect_object (web_view, "scroll-event",
+					 G_CALLBACK (scroll_event_cb),
+					 window, 0);
 
 		g_signal_connect_object (embed, "notify::hidden-popup-count",
 					 G_CALLBACK (sync_tab_popup_windows),



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]