webkit: Track gtk_main()/gtk_main_quit() calls
Avoid unnecessary warnings from webkit on calling gtk_main_quit() more than once for a single gtk_main() call. This is also fixing an issue for a corner case where the very first URL has special purpose (osu:// or http://localhost:12345). Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
de0a8906f2
commit
7de8bd508f
1 changed files with 23 additions and 5 deletions
|
@ -24,11 +24,14 @@ struct browser_context {
|
||||||
int progress;
|
int progress;
|
||||||
char *hover_link;
|
char *hover_link;
|
||||||
char *title;
|
char *title;
|
||||||
|
int gtk_main_started;
|
||||||
|
int quit_gtk_main;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void win_cb_destroy(GtkWidget *win, struct browser_context *ctx)
|
static void win_cb_destroy(GtkWidget *win, struct browser_context *ctx)
|
||||||
{
|
{
|
||||||
wpa_printf(MSG_DEBUG, "BROWSER:%s", __func__);
|
wpa_printf(MSG_DEBUG, "BROWSER:%s", __func__);
|
||||||
|
if (ctx->gtk_main_started)
|
||||||
gtk_main_quit();
|
gtk_main_quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,6 +87,10 @@ static void view_cb_notify_load_status(WebKitWebView *view, GParamSpec *pspec,
|
||||||
int status = webkit_web_view_get_load_status(view);
|
int status = webkit_web_view_get_load_status(view);
|
||||||
wpa_printf(MSG_DEBUG, "BROWSER:%s load-status=%d uri=%s",
|
wpa_printf(MSG_DEBUG, "BROWSER:%s load-status=%d uri=%s",
|
||||||
__func__, status, webkit_web_view_get_uri(view));
|
__func__, status, webkit_web_view_get_uri(view));
|
||||||
|
if (ctx->quit_gtk_main) {
|
||||||
|
gtk_main_quit();
|
||||||
|
ctx->gtk_main_started = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif /* USE_WEBKIT2 */
|
#endif /* USE_WEBKIT2 */
|
||||||
|
|
||||||
|
@ -106,6 +113,8 @@ static void view_cb_resource_request_starting(WebKitWebView *view,
|
||||||
#else /* USE_WEBKIT2 */
|
#else /* USE_WEBKIT2 */
|
||||||
const gchar *uri = webkit_network_request_get_uri(req);
|
const gchar *uri = webkit_network_request_get_uri(req);
|
||||||
#endif /* USE_WEBKIT2 */
|
#endif /* USE_WEBKIT2 */
|
||||||
|
int quit = 0;
|
||||||
|
|
||||||
wpa_printf(MSG_DEBUG, "BROWSER:%s uri=%s", __func__, uri);
|
wpa_printf(MSG_DEBUG, "BROWSER:%s uri=%s", __func__, uri);
|
||||||
if (g_str_has_suffix(uri, "/favicon.ico")) {
|
if (g_str_has_suffix(uri, "/favicon.ico")) {
|
||||||
#ifdef USE_WEBKIT2
|
#ifdef USE_WEBKIT2
|
||||||
|
@ -117,15 +126,23 @@ static void view_cb_resource_request_starting(WebKitWebView *view,
|
||||||
|
|
||||||
if (g_str_has_prefix(uri, "osu://")) {
|
if (g_str_has_prefix(uri, "osu://")) {
|
||||||
ctx->success = atoi(uri + 6);
|
ctx->success = atoi(uri + 6);
|
||||||
gtk_main_quit();
|
quit = 1;
|
||||||
}
|
} else if (g_str_has_prefix(uri, "http://localhost:12345")) {
|
||||||
if (g_str_has_prefix(uri, "http://localhost:12345")) {
|
|
||||||
/*
|
/*
|
||||||
* This is used as a special trigger to indicate that the
|
* This is used as a special trigger to indicate that the
|
||||||
* user exchange has been completed.
|
* user exchange has been completed.
|
||||||
*/
|
*/
|
||||||
ctx->success = 1;
|
ctx->success = 1;
|
||||||
|
quit = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quit) {
|
||||||
|
if (ctx->gtk_main_started) {
|
||||||
gtk_main_quit();
|
gtk_main_quit();
|
||||||
|
ctx->gtk_main_started = 0;
|
||||||
|
} else {
|
||||||
|
ctx->quit_gtk_main = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,6 +361,7 @@ int hs20_web_browser(const char *url, int ignore_tls)
|
||||||
|
|
||||||
webkit_web_view_load_uri(view, url);
|
webkit_web_view_load_uri(view, url);
|
||||||
|
|
||||||
|
ctx.gtk_main_started = 1;
|
||||||
gtk_main();
|
gtk_main();
|
||||||
gtk_widget_destroy(ctx.win);
|
gtk_widget_destroy(ctx.win);
|
||||||
while (gtk_events_pending())
|
while (gtk_events_pending())
|
||||||
|
|
Loading…
Reference in a new issue