aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorClaudio Saavedra <csaavedra@igalia.com>2011-12-16 00:27:35 +0800
committerClaudio Saavedra <csaavedra@igalia.com>2011-12-18 01:47:58 +0800
commitb1cd68562f3ceaf17a803f0f9161c28fdc5ba766 (patch)
tree32706d6771ef799bd17c051b1bd42ba218fc429f /src
parent33cb922f3c7135a8f4e696f4637d1a6878b93b62 (diff)
downloadgsoc2013-epiphany-b1cd68562f3ceaf17a803f0f9161c28fdc5ba766.tar
gsoc2013-epiphany-b1cd68562f3ceaf17a803f0f9161c28fdc5ba766.tar.gz
gsoc2013-epiphany-b1cd68562f3ceaf17a803f0f9161c28fdc5ba766.tar.bz2
gsoc2013-epiphany-b1cd68562f3ceaf17a803f0f9161c28fdc5ba766.tar.lz
gsoc2013-epiphany-b1cd68562f3ceaf17a803f0f9161c28fdc5ba766.tar.xz
gsoc2013-epiphany-b1cd68562f3ceaf17a803f0f9161c28fdc5ba766.tar.zst
gsoc2013-epiphany-b1cd68562f3ceaf17a803f0f9161c28fdc5ba766.zip
Combine the Reload and Stop toolbar buttons into one
Add a combined action that toggles itself between the two states and instantiate it from the window. Replace the Reload and Stop buttons with the combined one in the default toolbar description. https://bugzilla.gnome.org/show_bug.cgi?id=657655
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am2
-rw-r--r--src/ephy-combined-stop-reload-action.c162
-rw-r--r--src/ephy-combined-stop-reload-action.h61
-rw-r--r--src/ephy-window.c14
4 files changed, 239 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 45b55d210..d71fd4263 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -15,6 +15,7 @@ header_DATA = \
NOINST_H_FILES = \
ephy-action-helper.h \
+ ephy-combined-stop-reload-action.h \
ephy-encoding-dialog.h \
ephy-encoding-menu.h \
ephy-find-toolbar.h \
@@ -50,6 +51,7 @@ libephymain_la_SOURCES = \
ephy-action-helper.c \
ephy-completion-model.c \
ephy-completion-model.h \
+ ephy-combined-stop-reload-action.c \
ephy-encoding-dialog.c \
ephy-encoding-menu.c \
ephy-extension.c \
diff --git a/src/ephy-combined-stop-reload-action.c b/src/ephy-combined-stop-reload-action.c
new file mode 100644
index 000000000..73a638fa4
--- /dev/null
+++ b/src/ephy-combined-stop-reload-action.c
@@ -0,0 +1,162 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set sw=2 ts=2 sts=2 et: */
+/*
+ * Copyright © 2011 Igalia S.L.
+ *
+ * This program 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 2, or (at your option)
+ * any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+
+#include "ephy-combined-stop-reload-action.h"
+#include "ephy-window.h"
+#include "window-commands.h"
+
+#include <glib/gi18n.h>
+
+
+G_DEFINE_TYPE (EphyCombinedStopReloadAction, ephy_combined_stop_reload_action, GTK_TYPE_ACTION)
+
+#define COMBINED_STOP_RELOAD_ACTION_PRIVATE(o) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((o), EPHY_TYPE_COMBINED_STOP_RELOAD_ACTION, EphyCombinedStopReloadActionPrivate))
+
+struct _EphyCombinedStopReloadActionPrivate
+{
+ gboolean loading;
+ EphyWindow *window;
+ gulong action_handler_id;
+};
+
+GtkActionEntry combined_stop_reload_action_entries [] = {
+ { NULL, GTK_STOCK_STOP, N_("Stop"), NULL,
+ N_("Stop current data transfer"),
+ G_CALLBACK (window_cmd_view_stop) },
+ { NULL, GTK_STOCK_REFRESH, N_("_Reload"), NULL,
+ N_("Display the latest content of the current page"),
+ G_CALLBACK (window_cmd_view_reload) }
+};
+
+typedef enum {
+ EPHY_COMBINED_STOP_RELOAD_ACTION_STOP,
+ EPHY_COMBINED_STOP_RELOAD_ACTION_REFRESH
+} EphyCombinedStopReloadActionEnum;
+
+enum {
+ PROP_0,
+ PROP_LOADING,
+ PROP_WINDOW
+};
+
+void
+ephy_combined_stop_reload_action_set_loading (EphyCombinedStopReloadAction *action,
+ gboolean loading)
+{
+ EphyCombinedStopReloadActionEnum action_enum;
+
+ if (action->priv->loading == loading)
+ return;
+
+ action_enum = loading ?
+ EPHY_COMBINED_STOP_RELOAD_ACTION_STOP : EPHY_COMBINED_STOP_RELOAD_ACTION_REFRESH;
+
+ g_object_set (action,
+ "label", combined_stop_reload_action_entries[action_enum].label,
+ "stock-id", combined_stop_reload_action_entries[action_enum].stock_id,
+ "tooltip", combined_stop_reload_action_entries[action_enum].tooltip,
+ NULL);
+
+ if (action->priv->action_handler_id)
+ g_signal_handler_disconnect (action, action->priv->action_handler_id);
+
+ action->priv->action_handler_id = g_signal_connect (action, "activate",
+ combined_stop_reload_action_entries[action_enum].callback,
+ action->priv->window);
+
+ action->priv->loading = loading;
+}
+
+static void
+ephy_combined_stop_reload_action_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EphyCombinedStopReloadAction *action = EPHY_COMBINED_STOP_RELOAD_ACTION (object);
+
+ switch (property_id)
+ {
+ case PROP_LOADING:
+ g_value_set_boolean (value, action->priv->loading);
+ break;
+ case PROP_WINDOW:
+ g_value_set_object (value, action->priv->window);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+}
+
+static void
+ephy_combined_stop_reload_action_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EphyCombinedStopReloadAction *action = EPHY_COMBINED_STOP_RELOAD_ACTION (object);
+
+ switch (property_id)
+ {
+ case PROP_LOADING:
+ ephy_combined_stop_reload_action_set_loading (action,
+ g_value_get_boolean (value));
+ break;
+ case PROP_WINDOW:
+ action->priv->window = EPHY_WINDOW (g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+}
+
+static void
+ephy_combined_stop_reload_action_class_init (EphyCombinedStopReloadActionClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (EphyCombinedStopReloadActionPrivate));
+
+ object_class->get_property = ephy_combined_stop_reload_action_get_property;
+ object_class->set_property = ephy_combined_stop_reload_action_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_LOADING,
+ g_param_spec_boolean ("loading", NULL, NULL,
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property (object_class,
+ PROP_WINDOW,
+ g_param_spec_object ("window", NULL, NULL,
+ EPHY_TYPE_WINDOW,
+ G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+}
+
+static void
+ephy_combined_stop_reload_action_init (EphyCombinedStopReloadAction *self)
+{
+ self->priv = COMBINED_STOP_RELOAD_ACTION_PRIVATE (self);
+}
diff --git a/src/ephy-combined-stop-reload-action.h b/src/ephy-combined-stop-reload-action.h
new file mode 100644
index 000000000..680f3fec0
--- /dev/null
+++ b/src/ephy-combined-stop-reload-action.h
@@ -0,0 +1,61 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set sw=2 ts=2 sts=2 et: */
+/*
+ * Copyright © 2011 Igalia S.L.
+ *
+ * This program 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 2, or (at your option)
+ * any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef _EPHY_COMBINED_STOP_RELOAD_ACTION_H
+#define _EPHY_COMBINED_STOP_RELOAD_ACTION_H
+
+#include <glib-object.h>
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define EPHY_TYPE_COMBINED_STOP_RELOAD_ACTION (ephy_combined_stop_reload_action_get_type())
+#define EPHY_COMBINED_STOP_RELOAD_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EPHY_TYPE_COMBINED_STOP_RELOAD_ACTION, EphyCombinedStopReloadAction))
+#define EPHY_COMBINED_STOP_RELOAD_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EPHY_TYPE_COMBINED_STOP_RELOAD_ACTION, EphyCombinedStopReloadActionClass))
+#define EPHY_IS_COMBINED_STOP_RELOAD_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EPHY_TYPE_COMBINED_STOP_RELOAD_ACTION))
+#define EPHY_IS_COMBINED_STOP_RELOAD_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EPHY_TYPE_COMBINED_STOP_RELOAD_ACTION))
+#define EPHY_COMBINED_STOP_RELOAD_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EPHY_TYPE_COMBINED_STOP_RELOAD_ACTION, EphyCombinedStopReloadActionClass))
+
+typedef struct _EphyCombinedStopReloadAction EphyCombinedStopReloadAction;
+typedef struct _EphyCombinedStopReloadActionClass EphyCombinedStopReloadActionClass;
+typedef struct _EphyCombinedStopReloadActionPrivate EphyCombinedStopReloadActionPrivate;
+
+struct _EphyCombinedStopReloadAction
+{
+ GtkAction parent;
+
+ /*< private >*/
+ EphyCombinedStopReloadActionPrivate *priv;
+};
+
+struct _EphyCombinedStopReloadActionClass
+{
+ GtkActionClass parent_class;
+};
+
+GType ephy_combined_stop_reload_action_get_type (void) G_GNUC_CONST;
+
+void ephy_combined_stop_reload_action_set_loading (EphyCombinedStopReloadAction *action,
+ gboolean loading);
+
+G_END_DECLS
+
+#endif /* _EPHY_COMBINED_STOP_RELOAD_ACTION_H */
diff --git a/src/ephy-window.c b/src/ephy-window.c
index 8b634292e..7fc4f3874 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -25,6 +25,7 @@
#include "ephy-action-helper.h"
#include "ephy-bookmarks-ui.h"
+#include "ephy-combined-stop-reload-action.h"
#include "ephy-debug.h"
#include "ephy-download-widget.h"
#include "ephy-download.h"
@@ -1726,6 +1727,14 @@ setup_ui_manager (EphyWindow *window)
gtk_action_group_add_action_with_accel (action_group, action, "<control>N");
g_object_unref (action);
+ action = g_object_new (EPHY_TYPE_COMBINED_STOP_RELOAD_ACTION,
+ "name", "ViewCombinedStopReload",
+ "loading", FALSE,
+ "window", window,
+ NULL);
+ gtk_action_group_add_action (action_group, action);
+ g_object_unref (action);
+
gtk_ui_manager_insert_action_group (manager, action_group, 0);
window->priv->toolbar_action_group = action_group;
g_object_unref (action_group);
@@ -2089,6 +2098,11 @@ sync_tab_load_status (EphyWebView *view,
ephy_action_change_sensitivity_flags (action, SENS_FLAG_LOADING, loading);
action = gtk_action_group_get_action (action_group, "FilePrint");
ephy_action_change_sensitivity_flags (action, SENS_FLAG_LOADING, loading);
+
+ action = gtk_action_group_get_action (priv->toolbar_action_group,
+ "ViewCombinedStopReload");
+ ephy_combined_stop_reload_action_set_loading (EPHY_COMBINED_STOP_RELOAD_ACTION (action),
+ loading);
}
static void