summaryrefslogtreecommitdiffstats
path: root/src/home-button.c
diff options
context:
space:
mode:
authorPatrick McDermott <pj@pehjota.net>2017-10-13 02:58:27 (EDT)
committer Patrick McDermott <pj@pehjota.net>2017-10-13 02:58:27 (EDT)
commit8a6b0aa358c5f3686a6cb26e50cbfb6e439fd7f8 (patch)
treec94dd7c1082d73d7e9ebb8ccbade0c4bda78b561 /src/home-button.c
parent980fefc173df2cd805f8fa7987d3544a34d2b342 (diff)
downloadmarquee-8a6b0aa358c5f3686a6cb26e50cbfb6e439fd7f8.zip
marquee-8a6b0aa358c5f3686a6cb26e50cbfb6e439fd7f8.tar.gz
marquee-8a6b0aa358c5f3686a6cb26e50cbfb6e439fd7f8.tar.bz2
MqHomeButton: New class
Diffstat (limited to 'src/home-button.c')
-rw-r--r--src/home-button.c158
1 files changed, 158 insertions, 0 deletions
diff --git a/src/home-button.c b/src/home-button.c
new file mode 100644
index 0000000..ee46497
--- /dev/null
+++ b/src/home-button.c
@@ -0,0 +1,158 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <webkit2/webkit2.h>
+
+#include "home-button.h"
+#include "config.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);
+}
+
+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 *pspec)
+{
+ 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,
+ pspec);
+ break;
+ }
+}
+
+static void
+set_property(GObject *object, guint property_id, const GValue *value,
+ GParamSpec *pspec)
+{
+ 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,
+ pspec);
+ 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",
+ "MqConfig",
+ "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",
+ "MqWebView",
+ "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_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);
+}