/* * Copyright (C) 2002 Ricardo Fernández Pascual * * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "ephy-gobject-misc.h" #include "ephy-marshal.h" #include "ephy-toolbar-bonobo-view.h" #include "ephy-bonobo-extensions.h" #define NOT_IMPLEMENTED g_warning ("not implemented: " G_STRLOC); //#define DEBUG_MSG(x) g_print x #define DEBUG_MSG(x) /** * Private data */ struct _EphyTbBonoboViewPrivate { EphyToolbar *tb; BonoboUIComponent *ui; gchar *path; }; /** * Private functions, only availble from this file */ static void ephy_tb_bonobo_view_class_init (EphyTbBonoboViewClass *klass); static void ephy_tb_bonobo_view_init (EphyTbBonoboView *tb); static void ephy_tb_bonobo_view_finalize_impl (GObject *o); static void ephy_tb_bonobo_view_rebuild (EphyTbBonoboView *tbv); static void ephy_tb_bonobo_view_tb_changed (EphyToolbar *tb, EphyTbBonoboView *tbv); static gpointer g_object_class; /** * TbBonoboView object */ MAKE_GET_TYPE (ephy_tb_bonobo_view, "EphyTbBonoboView", EphyTbBonoboView, ephy_tb_bonobo_view_class_init, ephy_tb_bonobo_view_init, G_TYPE_OBJECT); static void ephy_tb_bonobo_view_class_init (EphyTbBonoboViewClass *klass) { G_OBJECT_CLASS (klass)->finalize = ephy_tb_bonobo_view_finalize_impl; g_object_class = g_type_class_peek_parent (klass); } static void ephy_tb_bonobo_view_init (EphyTbBonoboView *tb) { EphyTbBonoboViewPrivate *p = g_new0 (EphyTbBonoboViewPrivate, 1); tb->priv = p; } static void ephy_tb_bonobo_view_finalize_impl (GObject *o) { EphyTbBonoboView *tbv = EPHY_TB_BONOBO_VIEW (o); EphyTbBonoboViewPrivate *p = tbv->priv; if (p->tb) { g_signal_handlers_disconnect_matched (p->tb, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, tbv); g_object_unref (p->tb); } if (p->ui) { g_object_unref (p->ui); } if (p->path) { g_free (p->path); } g_free (p); DEBUG_MSG (("EphyTbBonoboView finalized\n")); G_OBJECT_CLASS (g_object_class)->finalize (o); } EphyTbBonoboView * ephy_tb_bonobo_view_new (void) { EphyTbBonoboView *ret = g_object_new (EPHY_TYPE_TB_BONOBO_VIEW, NULL); return ret; } void ephy_tb_bonobo_view_set_toolbar (EphyTbBonoboView *tbv, EphyToolbar *tb) { EphyTbBonoboViewPrivate *p = tbv->priv; if (p->tb) { g_signal_handlers_disconnect_matched (p->tb, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, tbv); g_object_unref (p->tb); } p->tb = g_object_ref (tb); g_signal_connect (p->tb, "changed", G_CALLBACK (ephy_tb_bonobo_view_tb_changed), tbv); if (p->ui) { ephy_tb_bonobo_view_rebuild (tbv); } } static void ephy_tb_bonobo_view_tb_changed (EphyToolbar *tb, EphyTbBonoboView *tbv) { EphyTbBonoboViewPrivate *p = tbv->priv; if (p->ui) { ephy_tb_bonobo_view_rebuild (tbv); } } void ephy_tb_bonobo_view_set_path (EphyTbBonoboView *tbv, BonoboUIComponent *ui, const gchar *path) { EphyTbBonoboViewPrivate *p = tbv->priv; if (p->ui) { g_object_unref (p->ui); } if (p->path) { g_free (p->path); } p->ui = g_object_ref (ui); p->path = g_strdup (path); if (p->tb) { ephy_tb_bonobo_view_rebuild (tbv); } } static void ephy_tb_bonobo_view_rebuild (EphyTbBonoboView *tbv) { EphyTbBonoboViewPrivate *p = tbv->priv; GSList *items; GSList *li; uint index = 0; g_return_if_fail (EPHY_IS_TOOLBAR (p->tb)); g_return_if_fail (BONOBO_IS_UI_COMPONENT (p->ui)); g_return_if_fail (p->path); DEBUG_MSG (("Rebuilding EphyTbBonoboView\n")); ephy_bonobo_clear_path (p->ui, p->path); items = (GSList *) ephy_toolbar_get_item_list (p->tb); for (li = items; li; li = li->next) { ephy_tb_item_add_to_bonobo_tb (li->data, p->ui, p->path, index++); } DEBUG_MSG (("Rebuilt EphyTbBonoboView\n")); }