aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fastiv-browser.c3
-rw-r--r--fastiv-view.c15
-rw-r--r--fastiv.c1
3 files changed, 18 insertions, 1 deletions
diff --git a/fastiv-browser.c b/fastiv-browser.c
index 5411989..50c4676 100644
--- a/fastiv-browser.c
+++ b/fastiv-browser.c
@@ -614,7 +614,8 @@ fastiv_browser_button_press_event(GtkWidget *widget, GdkEventButton *event)
FastivBrowser *self = FASTIV_BROWSER(widget);
if (event->type != GDK_BUTTON_PRESS || event->state != 0)
return FALSE;
- if (event->button == GDK_BUTTON_PRIMARY)
+ if (event->button == GDK_BUTTON_PRIMARY &&
+ gtk_widget_get_focus_on_click(widget))
gtk_widget_grab_focus(widget);
const Entry *entry = entry_at(self, event->x, event->y);
diff --git a/fastiv-view.c b/fastiv-view.c
index 4efb8be..f200bd1 100644
--- a/fastiv-view.c
+++ b/fastiv-view.c
@@ -276,6 +276,20 @@ fastiv_view_draw(GtkWidget *widget, cairo_t *cr)
return TRUE;
}
+static gboolean
+fastiv_view_button_press_event(GtkWidget *widget, GdkEventButton *event)
+{
+ GTK_WIDGET_CLASS(fastiv_view_parent_class)
+ ->button_press_event(widget, event);
+
+ if (event->button == GDK_BUTTON_PRIMARY &&
+ gtk_widget_get_focus_on_click(widget))
+ gtk_widget_grab_focus(widget);
+
+ // TODO(p): Use for left button scroll drag, which may rather be a gesture.
+ return FALSE;
+}
+
#define SCALE_STEP 1.4
static gboolean
@@ -361,6 +375,7 @@ fastiv_view_class_init(FastivViewClass *klass)
widget_class->size_allocate = fastiv_view_size_allocate;
widget_class->realize = fastiv_view_realize;
widget_class->draw = fastiv_view_draw;
+ widget_class->button_press_event = fastiv_view_button_press_event;
widget_class->scroll_event = fastiv_view_scroll_event;
widget_class->key_press_event = fastiv_view_key_press_event;
diff --git a/fastiv.c b/fastiv.c
index ec40a85..7d38384 100644
--- a/fastiv.c
+++ b/fastiv.c
@@ -120,6 +120,7 @@ switch_to_view(const char *path)
{
gtk_window_set_title(GTK_WINDOW(g.window), path);
gtk_stack_set_visible_child(GTK_STACK(g.stack), g.view_scroller);
+ gtk_widget_grab_focus(g.view);
}
static void