/* * Navigation toolbar * * 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 "navigation-toolbar.h" #include #include #include #include "../config/config.h" #include "../i18n.h" #include "../tab-page.h" #include "../web-view.h" #include "find-toolbar.h" #include "navigation/back-forward-button-box.h" #include "navigation/bookmarks-button-box.h" #include "navigation/downloads-button.h" #include "navigation/history-button.h" #include "navigation/home-button.h" #include "navigation/main-menu.h" #include "navigation/stop-reload-button.h" #include "navigation/uri-entry.h" struct _MqNavigationToolbar { GtkToolbar parent_instance; MqConfig *config; MqTabPage *tab_page; MqFindToolbar *find_toolbar; MqWebView *web_view; gchar *uri; GtkToolItem *uri_entry; }; enum { PROP_CONFIG = 1, PROP_TAB_PAGE, PROP_FIND_TOOLBAR, PROP_WEB_VIEW, PROP_URI, N_PROPERTIES }; static GParamSpec *obj_properties[N_PROPERTIES] = {NULL,}; struct _MqNavigationToolbarClass { GtkToolbarClass parent_class; }; G_DEFINE_TYPE(MqNavigationToolbar, mq_navigation_toolbar, GTK_TYPE_TOOLBAR) static void constructed(GObject *object) { MqNavigationToolbar *navigation_toolbar; GtkToolItem *back_forward_button_box; GtkToolItem *bookmarks_button_box; GtkToolItem *stop_reload_button; GtkToolItem *home_button; GtkToolItem *history_button; GtkToolItem *downloads_button; GtkToolItem *menu_button; if (G_OBJECT_CLASS(mq_navigation_toolbar_parent_class)->constructed) { G_OBJECT_CLASS(mq_navigation_toolbar_parent_class)->constructed( object); } navigation_toolbar = MQ_NAVIGATION_TOOLBAR(object); /* Back/forward button box */ back_forward_button_box = mq_back_forward_button_box_new( navigation_toolbar->web_view); /* Stop/reload button */ stop_reload_button = mq_stop_reload_button_new( navigation_toolbar->web_view); /* URI entry */ navigation_toolbar->uri_entry = mq_uri_entry_new( navigation_toolbar->web_view, navigation_toolbar->uri); /* Bookmarks button box */ bookmarks_button_box = mq_bookmarks_button_box_new(); /* Home button */ home_button = mq_home_button_new(navigation_toolbar->config, navigation_toolbar->web_view); /* History button */ history_button = mq_history_button_new(); /* Downloads button */ downloads_button = mq_downloads_button_new(); /* Menu button */ menu_button = mq_main_menu_new(navigation_toolbar->tab_page, navigation_toolbar->find_toolbar, navigation_toolbar->web_view); /* Navigation toolbar */ gtk_toolbar_insert(GTK_TOOLBAR(navigation_toolbar), back_forward_button_box, -1); gtk_toolbar_insert(GTK_TOOLBAR(navigation_toolbar), stop_reload_button, -1); gtk_toolbar_insert(GTK_TOOLBAR(navigation_toolbar), navigation_toolbar->uri_entry, -1); gtk_toolbar_insert(GTK_TOOLBAR(navigation_toolbar), bookmarks_button_box, -1); gtk_toolbar_insert(GTK_TOOLBAR(navigation_toolbar), home_button, -1); gtk_toolbar_insert(GTK_TOOLBAR(navigation_toolbar), history_button, -1); gtk_toolbar_insert(GTK_TOOLBAR(navigation_toolbar), downloads_button, -1); gtk_toolbar_insert(GTK_TOOLBAR(navigation_toolbar), menu_button, -1); gtk_widget_set_hexpand(GTK_WIDGET(navigation_toolbar), TRUE); } static void finalize(GObject *object) { MqNavigationToolbar *navigation_toolbar; navigation_toolbar = MQ_NAVIGATION_TOOLBAR(object); if (navigation_toolbar->uri) { g_free(navigation_toolbar->uri); } G_OBJECT_CLASS(mq_navigation_toolbar_parent_class)->finalize(object); } static void get_property(GObject *object, guint property_id, GValue *value, GParamSpec *param_spec) { MqNavigationToolbar *navigation_toolbar; navigation_toolbar = MQ_NAVIGATION_TOOLBAR(object); switch (property_id) { case PROP_CONFIG: g_value_set_pointer(value, navigation_toolbar->config); break; case PROP_TAB_PAGE: g_value_set_object(value, navigation_toolbar->tab_page); break; case PROP_FIND_TOOLBAR: g_value_set_object(value, navigation_toolbar->find_toolbar); break; case PROP_WEB_VIEW: g_value_set_object(value, navigation_toolbar->web_view); break; case PROP_URI: g_value_set_string(value, navigation_toolbar->uri); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, param_spec); break; } } static void set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *param_spec) { MqNavigationToolbar *navigation_toolbar; navigation_toolbar = MQ_NAVIGATION_TOOLBAR(object); switch (property_id) { case PROP_CONFIG: navigation_toolbar->config = g_value_get_pointer(value); break; case PROP_TAB_PAGE: navigation_toolbar->tab_page = g_value_get_object(value); break; case PROP_FIND_TOOLBAR: navigation_toolbar->find_toolbar = g_value_get_object(value); break; case PROP_WEB_VIEW: navigation_toolbar->web_view = g_value_get_object(value); break; case PROP_URI: navigation_toolbar->uri = g_strdup(g_value_get_string( value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, param_spec); break; } } static void mq_navigation_toolbar_class_init(MqNavigationToolbarClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS(klass); object_class->constructed = constructed; object_class->finalize = finalize; object_class->get_property = get_property; object_class->set_property = set_property; obj_properties[PROP_CONFIG] = g_param_spec_pointer( "config", P_("MqConfig"), P_("The application's MqConfig instance"), G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB); obj_properties[PROP_TAB_PAGE] = g_param_spec_object( "tab-page", P_("MqTabPage"), P_("The ancestral MqTabPage instance"), MQ_TYPE_TAB_PAGE, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB); obj_properties[PROP_FIND_TOOLBAR] = g_param_spec_object( "find-toolbar", P_("MqFindToolbar"), P_("The associated MqFindToolbar instance"), MQ_TYPE_FIND_TOOLBAR, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB); obj_properties[PROP_WEB_VIEW] = g_param_spec_object( "web-view", P_("MqWebView"), P_("The associated MqWebView instance"), MQ_TYPE_WEB_VIEW, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB); obj_properties[PROP_URI] = g_param_spec_string( "uri", P_("URI"), P_("The URI to load"), "", G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB); g_object_class_install_properties(object_class, N_PROPERTIES, obj_properties); } static void mq_navigation_toolbar_init( MqNavigationToolbar G_GNUC_UNUSED *navigation_toolbar) { } GtkWidget * mq_navigation_toolbar_new(MqConfig *config, MqTabPage *tab_page, MqFindToolbar *find_toolbar, MqWebView *web_view, const gchar *uri) { return g_object_new(MQ_TYPE_NAVIGATION_TOOLBAR, "config", config, "tab-page", tab_page, "find-toolbar", find_toolbar, "web-view", web_view, "uri", uri, NULL); } void mq_navigation_toolbar_focus_uri_entry(MqNavigationToolbar *navigation_toolbar) { mq_uri_entry_grab_focus(MQ_URI_ENTRY(navigation_toolbar->uri_entry)); }