From: Benjamin Petrenko Date: Sun, 2 Aug 2015 09:53:54 +0000 (+0300) Subject: Do not blur the focused element after alt-tabbing. X-Git-Url: https://git.owens.tech/assets/static/git-logo.png/assets/static/git-logo.png/git?a=commitdiff_plain;h=a13905ed84ee8ef4c0c885d8647440cb6471a748;p=vimb.git Do not blur the focused element after alt-tabbing. --- diff --git a/src/dom.c b/src/dom.c index 4ca0a73..34bb8d2 100644 --- a/src/dom.c +++ b/src/dom.c @@ -281,9 +281,10 @@ static gboolean auto_insert(Element *element) static gboolean editable_blur_cb(Element *element, Event *event) { - if (vb.mode->id == 'i') { + if (vb.state.window_has_focus && vb.mode->id == 'i') { vb_enter('n'); } + return false; } diff --git a/src/main.c b/src/main.c index b981656..8790fa3 100644 --- a/src/main.c +++ b/src/main.c @@ -66,6 +66,8 @@ static void webview_load_status_cb(WebKitWebView *view, GParamSpec *pspec); static void webview_request_starting_cb(WebKitWebView *view, WebKitWebFrame *frame, WebKitWebResource *res, WebKitNetworkRequest *req, WebKitNetworkResponse *resp, gpointer data); +static gboolean focus_out_event_cb(GtkWidget *widget, GdkEvent *event, gpointer user_data); +static gboolean focus_in_event_cb(GtkWidget *widget, GdkEvent *event, gpointer user_data); static void destroy_window_cb(GtkWidget *widget); static void scroll_cb(GtkAdjustment *adjustment); static gboolean input_focus_in_cb(GtkWidget *widget, GdkEventFocus *event, @@ -851,6 +853,20 @@ static void webview_request_starting_cb(WebKitWebView *view, } } +static gboolean focus_out_event_cb(GtkWidget *widget, GdkEvent *event, + gpointer user_data) +{ + vb.state.window_has_focus = false; + return false; +} + +static gboolean focus_in_event_cb(GtkWidget *widget, GdkEvent *event, + gpointer user_data) +{ + vb.state.window_has_focus = true; + return false; +} + static void destroy_window_cb(GtkWidget *widget) { vb_quit(true); @@ -1159,7 +1175,8 @@ static void setup_signals() "signal::onload-event", G_CALLBACK(onload_event_cb), NULL, NULL ); - + g_signal_connect(vb.gui.window, "focus-in-event", G_CALLBACK(focus_in_event_cb), NULL); + g_signal_connect(vb.gui.window, "focus-out-event", G_CALLBACK(focus_out_event_cb), NULL); #ifdef FEATURE_ARH g_signal_connect(vb.session, "request-queued", G_CALLBACK(session_request_queued_cb), NULL); #endif diff --git a/src/main.h b/src/main.h index b112b11..562e310 100644 --- a/src/main.h +++ b/src/main.h @@ -316,6 +316,7 @@ typedef struct { char *socket_path; /* holds the path to the control socket */ char *pid_str; /* holds the pid as string */ gboolean done_loading_page; + gboolean window_has_focus; } State; typedef struct {