aboutsummaryrefslogblamecommitdiffstats
path: root/src/bookmarks/ephy-bookmark-toolitem.c
blob: 1c21b8f1da128d9b03017417373dd0ff026dfa88 (plain) (tree)











































































































































                                                                                             
/*
 *  Copyright (C) 2003  Christian Persch
 *
 *  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 "ephy-bookmark-toolitem.h"
#include "ephy-marshal.h"
#include "ephy-debug.h"

#include <gtk/gtk.h>
#include <gtk/gtkimagemenuitem.h>

static GObjectClass *parent_class = NULL;

static void ephy_bookmark_toolitem_class_init   (EphyBookmarkToolitemClass *klass);
static void ephy_bookmark_toolitem_init     (EphyBookmarkToolitem *item);

#define MENU_ID "ephy-bookmark-toolitem-menu-id"

/**
 * EphyBookmarkToolitem object
 */

GType
ephy_bookmark_toolitem_get_type (void)
{
        static GType ephy_bookmark_toolitem_type = 0;

        if (ephy_bookmark_toolitem_type == 0)
        {
                static const GTypeInfo our_info =
            {
                sizeof (EphyBookmarkToolitemClass),
                NULL, /* base_init */
                NULL, /* base_finalize */
                (GClassInitFunc) ephy_bookmark_toolitem_class_init,
                NULL,
                NULL, /* class_data */
                sizeof (EphyBookmarkToolitem),
                0, /* n_preallocs */
                (GInstanceInitFunc) ephy_bookmark_toolitem_init,
            };

                ephy_bookmark_toolitem_type = g_type_register_static (EGG_TYPE_TOOL_ITEM,
                                      "EphyBookmarkToolitem",
                                       &our_info, 0);
        }

        return ephy_bookmark_toolitem_type;
}

static gboolean
ephy_bookmark_toolitem_create_menu_proxy (EggToolItem *item)
{
    GtkWidget *menu_item, *label, *icon, *image;
    GdkPixbuf *pixbuf;
    const char *text;

    LOG ("create menu proxy for %p", item)
    
    icon = g_object_get_data (G_OBJECT (item), "icon");
    pixbuf = gtk_image_get_pixbuf (GTK_IMAGE (icon));
    image = gtk_image_new_from_pixbuf (pixbuf);

    label = g_object_get_data (G_OBJECT (item), "label");
    text = gtk_label_get_label (GTK_LABEL (label));

    menu_item = gtk_image_menu_item_new_with_mnemonic (text);
    gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image);

    egg_tool_item_set_proxy_menu_item (item, MENU_ID, menu_item);

    return TRUE;
}

static void
ephy_bookmark_toolitem_init (EphyBookmarkToolitem *item)
{
    GtkWidget *button, *hbox, *label, *icon, *entry;

    LOG ("Initialising bookmark toolitem %p", item)

    hbox = gtk_hbox_new (FALSE, 0);
    gtk_widget_show (hbox);
    gtk_container_add (GTK_CONTAINER (item), hbox);

    button = gtk_button_new ();
    gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
    gtk_widget_show (button);
    gtk_container_add (GTK_CONTAINER (hbox), button);
    g_object_set_data (G_OBJECT (item), "button", button);

    entry = gtk_entry_new ();
    gtk_widget_set_size_request (entry, 120, -1);
    gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
    g_object_set_data (G_OBJECT (item), "entry", entry);

    hbox = gtk_hbox_new (FALSE, 0);
    gtk_widget_show (hbox);
    gtk_container_add (GTK_CONTAINER (button), hbox);

    icon = gtk_image_new ();
    gtk_widget_show (icon);
    gtk_box_pack_start (GTK_BOX (hbox), icon, TRUE, TRUE, 0);
    g_object_set_data (G_OBJECT (item), "icon", icon);

    label = gtk_label_new (NULL);
    gtk_widget_show (label);
    gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
    g_object_set_data (G_OBJECT (item), "label", label);
}

static void
ephy_bookmark_toolitem_class_init (EphyBookmarkToolitemClass *klass)
{
    EggToolItemClass *tool_item_class;

    parent_class = g_type_class_peek_parent (klass);

    tool_item_class = (EggToolItemClass *)klass;

    tool_item_class->create_menu_proxy = ephy_bookmark_toolitem_create_menu_proxy;
}