From 893114a0a7b0c8b774b927dbc7de1844fb670ac3 Mon Sep 17 00:00:00 2001 From: Xan Lopez Date: Mon, 10 Aug 2009 08:28:40 +0300 Subject: Add again the spinner. We need some indication in the UI of network activity when there are no tabs opened and the progress bar hasn't appeared yet in the URL entry. Re-add the spinner for now, we'll think of a better solution later. Bug #585035 --- lib/widgets/Makefile.am | 2 + lib/widgets/ephy-spinner-tool-item.c | 115 +++++++++++++++++++++++++++++++++++ lib/widgets/ephy-spinner-tool-item.h | 62 +++++++++++++++++++ 3 files changed, 179 insertions(+) create mode 100644 lib/widgets/ephy-spinner-tool-item.c create mode 100644 lib/widgets/ephy-spinner-tool-item.h (limited to 'lib') diff --git a/lib/widgets/Makefile.am b/lib/widgets/Makefile.am index 4a3a69033..c0134b6ff 100644 --- a/lib/widgets/Makefile.am +++ b/lib/widgets/Makefile.am @@ -9,6 +9,8 @@ libephywidgets_la_SOURCES = \ ephy-search-entry.h \ ephy-spinner.c \ ephy-spinner.h \ + ephy-spinner-tool-item.c \ + ephy-spinner-tool-item.h \ ephy-tree-model-node.c \ ephy-tree-model-node.h \ ephy-tree-model-sort.c \ diff --git a/lib/widgets/ephy-spinner-tool-item.c b/lib/widgets/ephy-spinner-tool-item.c new file mode 100644 index 000000000..96af434c6 --- /dev/null +++ b/lib/widgets/ephy-spinner-tool-item.c @@ -0,0 +1,115 @@ +/* + * Copyright © 2006 Christian Persch + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * $Id$ + */ + +#ifndef COMPILING_TESTSPINNER +#include "config.h" +#endif + +#include "ephy-spinner-tool-item.h" +#include "ephy-spinner.h" + +G_DEFINE_TYPE (EphySpinnerToolItem, ephy_spinner_tool_item, GTK_TYPE_TOOL_ITEM) + +static void +ephy_spinner_tool_item_init (EphySpinnerToolItem *item) +{ + GtkWidget *spinner; + + spinner = ephy_spinner_new (); + gtk_container_add (GTK_CONTAINER (item), spinner); + gtk_widget_show (spinner); +} + +static void +ephy_spinner_tool_item_toolbar_reconfigured (GtkToolItem *tool_item) +{ + EphySpinner *spinner; + GtkToolbarStyle style; + GtkIconSize spinner_size; + + spinner = EPHY_SPINNER (gtk_bin_get_child (GTK_BIN (tool_item))); + g_return_if_fail (spinner); + + style = gtk_tool_item_get_toolbar_style (tool_item); + + /* FIXME: be smarter by taking the toolbar icon size (gtk_toolbar_get_icon_size) into account! */ + + if (style == GTK_TOOLBAR_BOTH) + { + spinner_size = GTK_ICON_SIZE_DIALOG; + } + else + { + spinner_size = GTK_ICON_SIZE_LARGE_TOOLBAR; + } + + ephy_spinner_set_size (spinner, spinner_size); + + if (GTK_TOOL_ITEM_CLASS (ephy_spinner_tool_item_parent_class)->toolbar_reconfigured) + GTK_TOOL_ITEM_CLASS (ephy_spinner_tool_item_parent_class)->toolbar_reconfigured (tool_item); +} + +static void +ephy_spinner_tool_item_class_init (EphySpinnerToolItemClass *klass) +{ + GtkToolItemClass *tool_item_class = GTK_TOOL_ITEM_CLASS (klass); + + tool_item_class->toolbar_reconfigured = ephy_spinner_tool_item_toolbar_reconfigured; +} + +/* + * ephy_spinner_tool_item_new: + * + * Create a new #EphySpinnerToolItem. The spinner is a widget + * that gives the user feedback about network status with + * an animated image. + * + * Return Value: the spinner tool item + **/ +GtkToolItem * +ephy_spinner_tool_item_new (void) +{ + return GTK_TOOL_ITEM (g_object_new (EPHY_TYPE_SPINNER_TOOL_ITEM, NULL)); +} + +/* + * ephy_spinner_tool_item_set_spinning: + * + * Start or stop the spinner. + **/ +void +ephy_spinner_tool_item_set_spinning (EphySpinnerToolItem *item, + gboolean spinning) +{ + EphySpinner *spinner; + + spinner = EPHY_SPINNER (gtk_bin_get_child (GTK_BIN (item))); + g_return_if_fail (spinner); + + if (spinning) + { + ephy_spinner_start (spinner); + } + else + { + ephy_spinner_stop (spinner); + } +} diff --git a/lib/widgets/ephy-spinner-tool-item.h b/lib/widgets/ephy-spinner-tool-item.h new file mode 100644 index 000000000..04abcdf46 --- /dev/null +++ b/lib/widgets/ephy-spinner-tool-item.h @@ -0,0 +1,62 @@ +/* + * Copyright © 2006 Christian Persch + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * $Id$ + */ + +#ifndef EPHY_SPINNER_TOOL_ITEM_H +#define EPHY_SPINNER_TOOL_ITEM_H + +#include + +G_BEGIN_DECLS + +#define EPHY_TYPE_SPINNER_TOOL_ITEM (ephy_spinner_tool_item_get_type ()) +#define EPHY_SPINNER_TOOL_ITEM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EPHY_TYPE_SPINNER_TOOL_ITEM, EphySpinnerToolItem)) +#define EPHY_SPINNER_TOOL_ITEM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EPHY_TYPE_SPINNER_TOOL_ITEM, EphySpinnerToolItemClass)) +#define EPHY_IS_SPINNER_TOOL_ITEM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EPHY_TYPE_SPINNER_TOOL_ITEM)) +#define EPHY_IS_SPINNER_TOOL_ITEM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EPHY_TYPE_SPINNER_TOOL_ITEM)) +#define EPHY_SPINNER_TOOL_ITEM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EPHY_TYPE_SPINNER_TOOL_ITEM, EphySpinnerToolItemClass)) + +typedef struct _EphySpinnerToolItem EphySpinnerToolItem; +typedef struct _EphySpinnerToolItemClass EphySpinnerToolItemClass; +typedef struct _EphySpinnerToolItemDetails EphySpinnerToolItemDetails; + +struct _EphySpinnerToolItem +{ + GtkToolItem parent; + + /*< private >*/ + EphySpinnerToolItemDetails *details; +}; + +struct _EphySpinnerToolItemClass +{ + GtkToolItemClass parent_class; +}; + +GType ephy_spinner_tool_item_get_type (void); + +GtkToolItem *ephy_spinner_tool_item_new (void); + +void ephy_spinner_tool_item_set_spinning (EphySpinnerToolItem *item, + gboolean spinning); + +G_END_DECLS + +#endif /* !EPHY_SPINNER_TOOL_ITEM_H */ -- cgit v1.2.3