summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2015-08-16 15:58:01 -0300
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2015-08-16 16:02:15 -0300
commit84faf7473b6c375188cd24746a3569872def8f13 (patch)
tree8a699780686e48966a25b53f8aa6d09a6329f81c
parentb0bfc7ad76b10eebba6de10ceb455c9032cf8b76 (diff)
downloadnautilus-84faf7473b6c375188cd24746a3569872def8f13.tar.gz
view: handle zoom X11 events
All X11 custom keys are currently handled by NautilusWindow, which performs a search on it's own action group as well as the view's one to perform the corresponding action. Since we're isolating NautilusView from other classes, the search on the view's action group is undesired. Fix that by making the view handle zoom-in and zoom-out actions, instead of the window itself. https://bugzilla.gnome.org/show_bug.cgi?id=753695
-rw-r--r--src/nautilus-view.c45
-rw-r--r--src/nautilus-window.c18
2 files changed, 46 insertions, 17 deletions
diff --git a/src/nautilus-view.c b/src/nautilus-view.c
index 56638c48b..2c1b0d5b5 100644
--- a/src/nautilus-view.c
+++ b/src/nautilus-view.c
@@ -44,6 +44,10 @@
#include "nautilus-empty-view.h"
#endif
+#ifdef HAVE_X11_XF86KEYSYM_H
+#include <X11/XF86keysym.h>
+#endif
+
#include <gdk/gdkx.h>
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
@@ -300,6 +304,18 @@ static void check_empty_states (NautilusView *vi
G_DEFINE_TYPE (NautilusView, nautilus_view, GTK_TYPE_OVERLAY);
+static const struct {
+ unsigned int keyval;
+ const char *action;
+} extra_view_keybindings [] = {
+#ifdef HAVE_X11_XF86KEYSYM_H
+ /* View actions */
+ { XF86XK_ZoomIn, "zoom-in" },
+ { XF86XK_ZoomOut, "zoom-out" },
+
+#endif
+};
+
static void
check_empty_states (NautilusView *view)
{
@@ -7755,6 +7771,34 @@ nautilus_view_parent_set (GtkWidget *widget,
}
}
+static gboolean
+nautilus_view_key_press_event (GtkWidget *widget,
+ GdkEventKey *event)
+{
+ NautilusView *view;
+ gint i;
+
+ view = NAUTILUS_VIEW (widget);
+
+ for (i = 0; i < G_N_ELEMENTS (extra_view_keybindings); i++) {
+ if (extra_view_keybindings[i].keyval == event->keyval) {
+ GAction *action;
+
+ action = g_action_map_lookup_action (G_ACTION_MAP (view->details->view_action_group),
+ extra_view_keybindings[i].action);
+
+ if (g_action_get_enabled (action)) {
+ g_action_activate (action, NULL);
+ return GDK_EVENT_STOP;
+ }
+
+ break;
+ }
+ }
+
+ return GDK_EVENT_PROPAGATE;
+}
+
static void
nautilus_view_class_init (NautilusViewClass *klass)
{
@@ -7769,6 +7813,7 @@ nautilus_view_class_init (NautilusViewClass *klass)
oclass->set_property = nautilus_view_set_property;
widget_class->destroy = nautilus_view_destroy;
+ widget_class->key_press_event = nautilus_view_key_press_event;
widget_class->scroll_event = nautilus_view_scroll_event;
widget_class->parent_set = nautilus_view_parent_set;
widget_class->grab_focus = nautilus_view_grab_focus;
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 99667d1b7..4ccc96d27 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -41,7 +41,6 @@
#include "nautilus-toolbar.h"
#include "nautilus-window-slot.h"
#include "nautilus-list-view.h"
-#include "nautilus-view.h"
#include <eel/eel-debug.h>
#include <eel/eel-gtk-extensions.h>
@@ -176,10 +175,6 @@ static const struct {
{ XF86XK_Stop, "stop" },
{ XF86XK_Back, "back" },
{ XF86XK_Forward, "forward" },
- /* View actions */
- { XF86XK_ZoomIn, "zoom-in" },
- { XF86XK_ZoomOut, "zoom-out" },
-
#endif
};
@@ -2297,19 +2292,13 @@ nautilus_window_key_press_event (GtkWidget *widget,
GdkEventKey *event)
{
NautilusWindow *window;
- NautilusWindowSlot *active_slot;
- NautilusView *view;
GtkWidget *focus_widget;
int i;
window = NAUTILUS_WINDOW (widget);
- active_slot = nautilus_window_get_active_slot (window);
- view = nautilus_window_slot_get_view (active_slot);
-
focus_widget = gtk_window_get_focus (GTK_WINDOW (window));
- if (view != NULL && focus_widget != NULL &&
- GTK_IS_EDITABLE (focus_widget)) {
+ if (focus_widget != NULL && GTK_IS_EDITABLE (focus_widget)) {
/* if we have input focus on a GtkEditable (e.g. a GtkEntry), forward
* the event to it before activating accelerator bindings too.
*/
@@ -2320,14 +2309,9 @@ nautilus_window_key_press_event (GtkWidget *widget,
for (i = 0; i < G_N_ELEMENTS (extra_window_keybindings); i++) {
if (extra_window_keybindings[i].keyval == event->keyval) {
- const GActionGroup *action_group;
GAction *action;
action = g_action_map_lookup_action (G_ACTION_MAP (window), extra_window_keybindings[i].action);
- if (action == NULL) {
- action_group = nautilus_view_get_action_group (view);
- action = g_action_map_lookup_action (G_ACTION_MAP (action_group), extra_window_keybindings[i].action);
- }
g_assert (action != NULL);
if (g_action_get_enabled (action)) {