browser(webkit): handle ctr+click on linux (#11636)
This commit is contained in:
parent
687a16b848
commit
9b3589f261
|
|
@ -1,2 +1,2 @@
|
||||||
1601
|
1602
|
||||||
Changed: yurys@chromium.org Tue 25 Jan 2022 03:54:58 PM PST
|
Changed: yurys@chromium.org Tue 25 Jan 2022 06:07:37 PM PST
|
||||||
|
|
|
||||||
|
|
@ -21439,7 +21439,7 @@ index 1c84f30b2ea96dd0c168918f9d63773b8e2548a3..55603437900a65de7bef70563c9ec039
|
||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/Tools/MiniBrowser/gtk/BrowserWindow.c b/Tools/MiniBrowser/gtk/BrowserWindow.c
|
diff --git a/Tools/MiniBrowser/gtk/BrowserWindow.c b/Tools/MiniBrowser/gtk/BrowserWindow.c
|
||||||
index 881609c9fe8f2b5ed6158a5972438c14fd650cf5..4a032f5cc0808087405f2f9dd9614b5cbf85252a 100644
|
index 881609c9fe8f2b5ed6158a5972438c14fd650cf5..566568382a2983a8a823cf0a0cf2634a9848d607 100644
|
||||||
--- a/Tools/MiniBrowser/gtk/BrowserWindow.c
|
--- a/Tools/MiniBrowser/gtk/BrowserWindow.c
|
||||||
+++ b/Tools/MiniBrowser/gtk/BrowserWindow.c
|
+++ b/Tools/MiniBrowser/gtk/BrowserWindow.c
|
||||||
@@ -70,7 +70,7 @@ struct _BrowserWindowClass {
|
@@ -70,7 +70,7 @@ struct _BrowserWindowClass {
|
||||||
|
|
@ -21468,7 +21468,22 @@ index 881609c9fe8f2b5ed6158a5972438c14fd650cf5..4a032f5cc0808087405f2f9dd9614b5c
|
||||||
gtk_window_set_title(GTK_WINDOW(window), privateTitle ? privateTitle : title);
|
gtk_window_set_title(GTK_WINDOW(window), privateTitle ? privateTitle : title);
|
||||||
g_free(privateTitle);
|
g_free(privateTitle);
|
||||||
}
|
}
|
||||||
@@ -1445,6 +1443,12 @@ static gboolean browserWindowDeleteEvent(GtkWidget *widget, GdkEventAny* event)
|
@@ -493,8 +491,12 @@ static gboolean webViewDecidePolicy(WebKitWebView *webView, WebKitPolicyDecision
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
WebKitNavigationAction *navigationAction = webkit_navigation_policy_decision_get_navigation_action(WEBKIT_NAVIGATION_POLICY_DECISION(decision));
|
||||||
|
- if (webkit_navigation_action_get_navigation_type(navigationAction) != WEBKIT_NAVIGATION_TYPE_LINK_CLICKED
|
||||||
|
- || webkit_navigation_action_get_mouse_button(navigationAction) != GDK_BUTTON_MIDDLE)
|
||||||
|
+ if (webkit_navigation_action_get_navigation_type(navigationAction) != WEBKIT_NAVIGATION_TYPE_LINK_CLICKED)
|
||||||
|
+ return FALSE;
|
||||||
|
+
|
||||||
|
+ guint modifiers = webkit_navigation_action_get_modifiers(navigationAction);
|
||||||
|
+ if (webkit_navigation_action_get_mouse_button(navigationAction) != GDK_BUTTON_MIDDLE &&
|
||||||
|
+ (webkit_navigation_action_get_mouse_button(navigationAction) != GDK_BUTTON_PRIMARY || (modifiers & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) == 0))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
/* Multiple tabs are not allowed in editor mode. */
|
||||||
|
@@ -1445,6 +1447,12 @@ static gboolean browserWindowDeleteEvent(GtkWidget *widget, GdkEventAny* event)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -21481,7 +21496,7 @@ index 881609c9fe8f2b5ed6158a5972438c14fd650cf5..4a032f5cc0808087405f2f9dd9614b5c
|
||||||
static void browser_window_class_init(BrowserWindowClass *klass)
|
static void browser_window_class_init(BrowserWindowClass *klass)
|
||||||
{
|
{
|
||||||
GObjectClass *gobjectClass = G_OBJECT_CLASS(klass);
|
GObjectClass *gobjectClass = G_OBJECT_CLASS(klass);
|
||||||
@@ -1458,6 +1462,14 @@ static void browser_window_class_init(BrowserWindowClass *klass)
|
@@ -1458,6 +1466,14 @@ static void browser_window_class_init(BrowserWindowClass *klass)
|
||||||
GtkWidgetClass *widgetClass = GTK_WIDGET_CLASS(klass);
|
GtkWidgetClass *widgetClass = GTK_WIDGET_CLASS(klass);
|
||||||
widgetClass->delete_event = browserWindowDeleteEvent;
|
widgetClass->delete_event = browserWindowDeleteEvent;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -21661,7 +21676,7 @@ index 9e7863b61b3e9db76e04e14f45116684dae44e37..fb47d231744d578bcbef125df9011a80
|
||||||
|
|
||||||
return exitAfterLoad && webProcessCrashed ? 1 : 0;
|
return exitAfterLoad && webProcessCrashed ? 1 : 0;
|
||||||
diff --git a/Tools/MiniBrowser/wpe/main.cpp b/Tools/MiniBrowser/wpe/main.cpp
|
diff --git a/Tools/MiniBrowser/wpe/main.cpp b/Tools/MiniBrowser/wpe/main.cpp
|
||||||
index 4584d9573ba7d11d2249f17552ee5c947af539d2..9244a803a40e4d2ecd76f87282837660587142dd 100644
|
index 4584d9573ba7d11d2249f17552ee5c947af539d2..d5247a28b5374aef79e515fb701f1db7232711bc 100644
|
||||||
--- a/Tools/MiniBrowser/wpe/main.cpp
|
--- a/Tools/MiniBrowser/wpe/main.cpp
|
||||||
+++ b/Tools/MiniBrowser/wpe/main.cpp
|
+++ b/Tools/MiniBrowser/wpe/main.cpp
|
||||||
@@ -41,6 +41,9 @@ static gboolean headlessMode;
|
@@ -41,6 +41,9 @@ static gboolean headlessMode;
|
||||||
|
|
@ -21684,7 +21699,7 @@ index 4584d9573ba7d11d2249f17552ee5c947af539d2..9244a803a40e4d2ecd76f87282837660
|
||||||
{ G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &uriArguments, nullptr, "[URL]" },
|
{ G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &uriArguments, nullptr, "[URL]" },
|
||||||
{ nullptr, 0, 0, G_OPTION_ARG_NONE, nullptr, nullptr, nullptr }
|
{ nullptr, 0, 0, G_OPTION_ARG_NONE, nullptr, nullptr, nullptr }
|
||||||
};
|
};
|
||||||
@@ -148,13 +154,34 @@ static void filterSavedCallback(WebKitUserContentFilterStore *store, GAsyncResul
|
@@ -148,13 +154,36 @@ static void filterSavedCallback(WebKitUserContentFilterStore *store, GAsyncResul
|
||||||
g_main_loop_quit(data->mainLoop);
|
g_main_loop_quit(data->mainLoop);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -21714,13 +21729,15 @@ index 4584d9573ba7d11d2249f17552ee5c947af539d2..9244a803a40e4d2ecd76f87282837660
|
||||||
+ return TRUE;
|
+ return TRUE;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
|
+static gboolean webViewDecidePolicy(WebKitWebView *webView, WebKitPolicyDecision *decision, WebKitPolicyDecisionType decisionType, gpointer);
|
||||||
|
+
|
||||||
+static WebKitWebView* createWebView(WebKitWebView* webView, WebKitNavigationAction*, gpointer);
|
+static WebKitWebView* createWebView(WebKitWebView* webView, WebKitNavigationAction*, gpointer);
|
||||||
+
|
+
|
||||||
+static WebKitWebView* createWebViewImpl(WebKitWebView* webView, WebKitWebContext *webContext)
|
+static WebKitWebView* createWebViewImpl(WebKitWebView* webView, WebKitWebContext *webContext)
|
||||||
{
|
{
|
||||||
auto backend = createViewBackend(1280, 720);
|
auto backend = createViewBackend(1280, 720);
|
||||||
struct wpe_view_backend* wpeBackend = backend->backend();
|
struct wpe_view_backend* wpeBackend = backend->backend();
|
||||||
@@ -166,17 +193,66 @@ static WebKitWebView* createWebView(WebKitWebView* webView, WebKitNavigationActi
|
@@ -166,17 +195,88 @@ static WebKitWebView* createWebView(WebKitWebView* webView, WebKitNavigationActi
|
||||||
delete static_cast<WPEToolingBackends::ViewBackend*>(data);
|
delete static_cast<WPEToolingBackends::ViewBackend*>(data);
|
||||||
}, backend.release());
|
}, backend.release());
|
||||||
|
|
||||||
|
|
@ -21752,7 +21769,7 @@ index 4584d9573ba7d11d2249f17552ee5c947af539d2..9244a803a40e4d2ecd76f87282837660
|
||||||
+ g_signal_connect(newWebView, "load-failed", G_CALLBACK(webViewLoadFailed), nullptr);
|
+ g_signal_connect(newWebView, "load-failed", G_CALLBACK(webViewLoadFailed), nullptr);
|
||||||
+ g_signal_connect(newWebView, "script-dialog", G_CALLBACK(scriptDialog), nullptr);
|
+ g_signal_connect(newWebView, "script-dialog", G_CALLBACK(scriptDialog), nullptr);
|
||||||
+ g_signal_connect(newWebView, "script-dialog-handled", G_CALLBACK(scriptDialogHandled), nullptr);
|
+ g_signal_connect(newWebView, "script-dialog-handled", G_CALLBACK(scriptDialogHandled), nullptr);
|
||||||
+ g_signal_connect(newWebView, "create", G_CALLBACK(createWebView), nullptr);
|
+ g_signal_connect(newWebView, "decide-policy", G_CALLBACK(webViewDecidePolicy), nullptr);
|
||||||
return newWebView;
|
return newWebView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -21761,6 +21778,28 @@ index 4584d9573ba7d11d2249f17552ee5c947af539d2..9244a803a40e4d2ecd76f87282837660
|
||||||
+ return createWebViewImpl(webView, nullptr);
|
+ return createWebViewImpl(webView, nullptr);
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
|
+static gboolean webViewDecidePolicy(WebKitWebView *webView, WebKitPolicyDecision *decision, WebKitPolicyDecisionType decisionType, gpointer)
|
||||||
|
+{
|
||||||
|
+ if (decisionType != WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION)
|
||||||
|
+ return FALSE;
|
||||||
|
+
|
||||||
|
+ WebKitNavigationAction *navigationAction = webkit_navigation_policy_decision_get_navigation_action(WEBKIT_NAVIGATION_POLICY_DECISION(decision));
|
||||||
|
+ if (webkit_navigation_action_get_navigation_type(navigationAction) != WEBKIT_NAVIGATION_TYPE_LINK_CLICKED)
|
||||||
|
+ return FALSE;
|
||||||
|
+
|
||||||
|
+ guint modifiers = webkit_navigation_action_get_modifiers(navigationAction);
|
||||||
|
+ if (webkit_navigation_action_get_mouse_button(navigationAction) != 2 /* GDK_BUTTON_MIDDLE */ &&
|
||||||
|
+ (webkit_navigation_action_get_mouse_button(navigationAction) != 1 /* GDK_BUTTON_PRIMARY */ || (modifiers & (wpe_input_keyboard_modifier_control | wpe_input_keyboard_modifier_shift)) == 0))
|
||||||
|
+ return FALSE;
|
||||||
|
+
|
||||||
|
+ /* Open a new tab if link clicked with the middle button, shift+click or ctrl+click. */
|
||||||
|
+ WebKitWebView* newWebView = createWebViewImpl(nullptr, webkit_web_view_get_context(webView));
|
||||||
|
+ webkit_web_view_load_request(newWebView, webkit_navigation_action_get_request(navigationAction));
|
||||||
|
+
|
||||||
|
+ webkit_policy_decision_ignore(decision);
|
||||||
|
+ return TRUE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
+static WebKitWebContext *persistentWebContext = NULL;
|
+static WebKitWebContext *persistentWebContext = NULL;
|
||||||
+
|
+
|
||||||
+static WebKitWebView* createNewPage(WebKitBrowserInspector*, WebKitWebContext *webContext)
|
+static WebKitWebView* createNewPage(WebKitBrowserInspector*, WebKitWebContext *webContext)
|
||||||
|
|
@ -21789,7 +21828,7 @@ index 4584d9573ba7d11d2249f17552ee5c947af539d2..9244a803a40e4d2ecd76f87282837660
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
#if ENABLE_DEVELOPER_MODE
|
#if ENABLE_DEVELOPER_MODE
|
||||||
@@ -208,6 +284,16 @@ int main(int argc, char *argv[])
|
@@ -208,6 +308,16 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
auto* loop = g_main_loop_new(nullptr, FALSE);
|
auto* loop = g_main_loop_new(nullptr, FALSE);
|
||||||
|
|
@ -21806,7 +21845,7 @@ index 4584d9573ba7d11d2249f17552ee5c947af539d2..9244a803a40e4d2ecd76f87282837660
|
||||||
|
|
||||||
auto backend = createViewBackend(1280, 720);
|
auto backend = createViewBackend(1280, 720);
|
||||||
struct wpe_view_backend* wpeBackend = backend->backend();
|
struct wpe_view_backend* wpeBackend = backend->backend();
|
||||||
@@ -217,7 +303,15 @@ int main(int argc, char *argv[])
|
@@ -217,7 +327,15 @@ int main(int argc, char *argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -21823,7 +21862,7 @@ index 4584d9573ba7d11d2249f17552ee5c947af539d2..9244a803a40e4d2ecd76f87282837660
|
||||||
webkit_website_data_manager_set_itp_enabled(manager, enableITP);
|
webkit_website_data_manager_set_itp_enabled(manager, enableITP);
|
||||||
|
|
||||||
if (proxy) {
|
if (proxy) {
|
||||||
@@ -229,7 +323,8 @@ int main(int argc, char *argv[])
|
@@ -229,7 +347,8 @@ int main(int argc, char *argv[])
|
||||||
if (ignoreTLSErrors)
|
if (ignoreTLSErrors)
|
||||||
webkit_website_data_manager_set_tls_errors_policy(manager, WEBKIT_TLS_ERRORS_POLICY_IGNORE);
|
webkit_website_data_manager_set_tls_errors_policy(manager, WEBKIT_TLS_ERRORS_POLICY_IGNORE);
|
||||||
|
|
||||||
|
|
@ -21833,7 +21872,7 @@ index 4584d9573ba7d11d2249f17552ee5c947af539d2..9244a803a40e4d2ecd76f87282837660
|
||||||
g_object_unref(manager);
|
g_object_unref(manager);
|
||||||
|
|
||||||
if (cookiesPolicy) {
|
if (cookiesPolicy) {
|
||||||
@@ -288,7 +383,14 @@ int main(int argc, char *argv[])
|
@@ -288,7 +407,14 @@ int main(int argc, char *argv[])
|
||||||
auto* viewBackend = webkit_web_view_backend_new(wpeBackend, [](gpointer data) {
|
auto* viewBackend = webkit_web_view_backend_new(wpeBackend, [](gpointer data) {
|
||||||
delete static_cast<WPEToolingBackends::ViewBackend*>(data);
|
delete static_cast<WPEToolingBackends::ViewBackend*>(data);
|
||||||
}, backend.release());
|
}, backend.release());
|
||||||
|
|
@ -21849,7 +21888,7 @@ index 4584d9573ba7d11d2249f17552ee5c947af539d2..9244a803a40e4d2ecd76f87282837660
|
||||||
auto* webView = WEBKIT_WEB_VIEW(g_object_new(WEBKIT_TYPE_WEB_VIEW,
|
auto* webView = WEBKIT_WEB_VIEW(g_object_new(WEBKIT_TYPE_WEB_VIEW,
|
||||||
"backend", viewBackend,
|
"backend", viewBackend,
|
||||||
"web-context", webContext,
|
"web-context", webContext,
|
||||||
@@ -305,8 +407,6 @@ int main(int argc, char *argv[])
|
@@ -305,8 +431,6 @@ int main(int argc, char *argv[])
|
||||||
backendPtr->setAccessibleChild(ATK_OBJECT(accessible));
|
backendPtr->setAccessibleChild(ATK_OBJECT(accessible));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -21858,7 +21897,7 @@ index 4584d9573ba7d11d2249f17552ee5c947af539d2..9244a803a40e4d2ecd76f87282837660
|
||||||
webkit_web_context_set_automation_allowed(webContext, automationMode);
|
webkit_web_context_set_automation_allowed(webContext, automationMode);
|
||||||
g_signal_connect(webContext, "automation-started", G_CALLBACK(automationStartedCallback), webView);
|
g_signal_connect(webContext, "automation-started", G_CALLBACK(automationStartedCallback), webView);
|
||||||
g_signal_connect(webView, "permission-request", G_CALLBACK(decidePermissionRequest), nullptr);
|
g_signal_connect(webView, "permission-request", G_CALLBACK(decidePermissionRequest), nullptr);
|
||||||
@@ -319,16 +419,9 @@ int main(int argc, char *argv[])
|
@@ -319,16 +443,9 @@ int main(int argc, char *argv[])
|
||||||
webkit_web_view_set_background_color(webView, &color);
|
webkit_web_view_set_background_color(webView, &color);
|
||||||
|
|
||||||
if (uriArguments) {
|
if (uriArguments) {
|
||||||
|
|
@ -21878,7 +21917,7 @@ index 4584d9573ba7d11d2249f17552ee5c947af539d2..9244a803a40e4d2ecd76f87282837660
|
||||||
webkit_web_view_load_uri(webView, "about:blank");
|
webkit_web_view_load_uri(webView, "about:blank");
|
||||||
else
|
else
|
||||||
webkit_web_view_load_uri(webView, "https://wpewebkit.org");
|
webkit_web_view_load_uri(webView, "https://wpewebkit.org");
|
||||||
@@ -338,8 +431,7 @@ int main(int argc, char *argv[])
|
@@ -338,8 +455,7 @@ int main(int argc, char *argv[])
|
||||||
g_hash_table_destroy(openViews);
|
g_hash_table_destroy(openViews);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue