/* * Home button * * 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 "home-button.h" #include #include #include #include "../../config/config.h" #include "../../i18n.h" #include "../../web-view.h" struct _MqHomeButton { GtkToolButton parent_instance; MqConfig *config; MqWebView *web_view; GtkWidget *stop_icon; GtkWidget *reload_icon; }; enum { PROP_CONFIG = 1, PROP_WEB_VIEW, N_PROPERTIES }; static GParamSpec *obj_properties[N_PROPERTIES] = {NULL,}; struct _MqHomeButtonClass { GtkToolButtonClass parent_class; }; G_DEFINE_TYPE(MqHomeButton, mq_home_button, GTK_TYPE_TOOL_BUTTON) static void clicked_cb(MqHomeButton *home_button) { const gchar *uri; uri = mq_config_get_string(home_button->config, "tabs.home"); mq_web_view_load_uri(home_button->web_view, uri); mq_web_view_grab_focus(home_button->web_view); } static void set_config(MqHomeButton *home_button, MqConfig *config) { home_button->config = config; } static void set_web_view(MqHomeButton *home_button, MqWebView *web_view) { home_button->web_view = web_view; } static void get_property(GObject *object, guint property_id, GValue *value, GParamSpec *param_spec) { switch (property_id) { case PROP_CONFIG: g_value_set_pointer(value, NULL); break; case PROP_WEB_VIEW: g_value_set_object(value, NULL); 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) { MqHomeButton *home_button; home_button = MQ_HOME_BUTTON(object); switch (property_id) { case PROP_CONFIG: set_config(home_button, g_value_get_pointer(value)); break; case PROP_WEB_VIEW: set_web_view(home_button, g_value_get_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, param_spec); break; } } static void mq_home_button_class_init(MqHomeButtonClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS(klass); 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_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); g_object_class_install_properties(object_class, N_PROPERTIES, obj_properties); } static void mq_home_button_init(MqHomeButton *home_button) { gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(home_button), gtk_image_new_from_icon_name("go-home", GTK_ICON_SIZE_SMALL_TOOLBAR)); gtk_tool_button_set_label(GTK_TOOL_BUTTON(home_button), _("Home")); gtk_widget_set_can_focus(gtk_bin_get_child(GTK_BIN(home_button)), FALSE); gtk_widget_set_tooltip_text(GTK_WIDGET(home_button), _("Load the home page")); g_signal_connect(home_button, "clicked", G_CALLBACK(clicked_cb), NULL); } GtkToolItem * mq_home_button_new(MqConfig *config, MqWebView *web_view) { return g_object_new(MQ_TYPE_HOME_BUTTON, "config", config, "web-view", web_view, NULL); }