/* * Tab chrome * * Copyright (C) 2017 Patrick McDermott * * This file is part of Marquee. * * Marquee is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Marquee is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Marquee. If not, see . */ #include #include #include #include "tab-chrome.h" static GtkWidget * navigation_toolbar_new(MqTabChrome *chrome, gchar *uri) { GtkToolbar *navigation_toolbar; GtkToolItem *uri_toolitem; navigation_toolbar = GTK_TOOLBAR(gtk_toolbar_new()); /* Back button */ gtk_toolbar_insert(navigation_toolbar, gtk_tool_button_new( gtk_image_new_from_icon_name("go-previous", 16), "Back"), -1); /* Forward button */ gtk_toolbar_insert(navigation_toolbar, gtk_tool_button_new( gtk_image_new_from_icon_name("go-next", 16), "Forward"), -1); /* URI bar */ uri_toolitem = gtk_tool_item_new(); chrome->uri_entry = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(chrome->uri_entry), uri); gtk_entry_set_placeholder_text(GTK_ENTRY(chrome->uri_entry), "URI..."); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(chrome->uri_entry), GTK_ENTRY_ICON_PRIMARY, "text-x-generic"); gtk_entry_set_progress_fraction(GTK_ENTRY(chrome->uri_entry), 0.0); gtk_container_add(GTK_CONTAINER(uri_toolitem), chrome->uri_entry); gtk_tool_item_set_expand(uri_toolitem, TRUE); gtk_toolbar_insert(navigation_toolbar, uri_toolitem, -1); gtk_widget_set_hexpand(GTK_WIDGET(navigation_toolbar), TRUE); return GTK_WIDGET(navigation_toolbar); } MqTabChrome * mq_tab_chrome_new(gchar *uri, GtkNotebook *notebook, GtkWidget *notebook_child) { MqTabChrome *chrome; chrome = malloc(sizeof(*chrome)); chrome->container = gtk_grid_new(); gtk_grid_attach(GTK_GRID(chrome->container), navigation_toolbar_new(chrome, uri), 0, 0, 1, 1); return chrome; } GtkWidget * mq_tab_chrome_get_container(MqTabChrome *chrome) { return chrome->container; } static void load_changed_cb(WebKitWebView *web_view, WebKitLoadEvent load_event, MqTabChrome *chrome) { switch (load_event) { case WEBKIT_LOAD_STARTED: case WEBKIT_LOAD_REDIRECTED: case WEBKIT_LOAD_COMMITTED: gtk_entry_set_text(GTK_ENTRY(chrome->uri_entry), webkit_web_view_get_uri(web_view)); break; case WEBKIT_LOAD_FINISHED: gtk_entry_set_progress_fraction( GTK_ENTRY(chrome->uri_entry), 0.0); break; } } static void load_progress_cb(WebKitWebView *web_view, GParamSpec __attribute__((unused)) *paramspec, MqTabChrome *chrome) { gtk_entry_set_progress_fraction(GTK_ENTRY(chrome->uri_entry), webkit_web_view_get_estimated_load_progress(web_view)); } static void uri_cb(WebKitWebView *web_view, GParamSpec __attribute__((unused)) *paramspec, MqTabChrome *chrome) { gtk_entry_set_text(GTK_ENTRY(chrome->uri_entry), webkit_web_view_get_uri(web_view)); } static void connect_web_view(MqTabChrome *chrome) { g_signal_connect(chrome->web_view, "load-changed", G_CALLBACK(load_changed_cb), chrome); g_signal_connect(chrome->web_view, "notify::estimated-load-progress", G_CALLBACK(load_progress_cb), chrome); g_signal_connect(chrome->web_view, "notify::uri", G_CALLBACK(uri_cb), chrome); } void mq_tab_chrome_set_web_view(MqTabChrome *chrome, WebKitWebView *web_view) { chrome->web_view = web_view; connect_web_view(chrome); }