Blame gladeui/glade-palette.c

Packit 1e8aac
/*
Packit 1e8aac
 * glade-palette.c
Packit 1e8aac
 *
Packit 1e8aac
 * Copyright (C) 2006 The GNOME Foundation.
Packit 1e8aac
 * Copyright (C) 2001-2005 Ximian, Inc.
Packit 1e8aac
 *
Packit 1e8aac
 * Authors:
Packit 1e8aac
 *   Chema Celorio
Packit 1e8aac
 *   Joaquin Cuenca Abela <e98cuenc@yahoo.com>
Packit 1e8aac
 *   Vincent Geddes <vgeddes@metroweb.co.za>
Packit 1e8aac
 *
Packit 1e8aac
 * This program is free software; you can redistribute it and/or modify
Packit 1e8aac
 * it under the terms of the GNU General Public License as published by
Packit 1e8aac
 * the Free Software Foundation; either version 2 of the License, or
Packit 1e8aac
 * (at your option) any later version.
Packit 1e8aac
 *
Packit 1e8aac
 * This program is distributed in the hope that it will be useful,
Packit 1e8aac
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 1e8aac
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 1e8aac
 * GNU General Public License for more details.
Packit 1e8aac
 *
Packit 1e8aac
 * You should have received a copy of the GNU General Public License
Packit 1e8aac
 * along with this program; if not, write to the Free Software
Packit 1e8aac
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Packit 1e8aac
 *
Packit 1e8aac
 */
Packit 1e8aac
#ifdef HAVE_CONFIG_H
Packit 1e8aac
#include <config.h>
Packit 1e8aac
#endif
Packit 1e8aac
Packit 1e8aac
/**
Packit 1e8aac
 * SECTION:glade-palette
Packit 1e8aac
 * @Short_Description: A widget to select a #GladeWidgetClass for addition.
Packit 1e8aac
 *
Packit 1e8aac
 * #GladePalette is responsible for displaying the list of available
Packit 1e8aac
 * #GladeWidgetClass types and publishing the currently selected class
Packit 1e8aac
 * to the Glade core.
Packit 1e8aac
 */
Packit 1e8aac
Packit 1e8aac
#include "glade.h"
Packit 1e8aac
#include "gladeui-enum-types.h"
Packit 1e8aac
#include "glade-app.h"
Packit 1e8aac
#include "glade-palette.h"
Packit 1e8aac
#include "glade-catalog.h"
Packit 1e8aac
#include "glade-project.h"
Packit 1e8aac
#include "glade-widget.h"
Packit 1e8aac
#include "glade-widget-adaptor.h"
Packit 1e8aac
#include "glade-popup.h"
Packit 1e8aac
#include "glade-design-private.h"
Packit 1e8aac
#include "glade-dnd.h"
Packit 1e8aac
Packit 1e8aac
#include <glib/gi18n-lib.h>
Packit 1e8aac
#include <gdk/gdk.h>
Packit 1e8aac
Packit 1e8aac
struct _GladePalettePrivate
Packit 1e8aac
{
Packit 1e8aac
  const GList *catalogs;        /* List of widget catalogs */
Packit 1e8aac
Packit 1e8aac
  GladeProject *project;
Packit 1e8aac
Packit 1e8aac
  GtkWidget *selector_hbox;
Packit 1e8aac
  GtkWidget *selector_button;
Packit 1e8aac
Packit 1e8aac
  GtkWidget *toolpalette;
Packit 1e8aac
Packit 1e8aac
  GladeItemAppearance item_appearance;
Packit 1e8aac
  gboolean            use_small_item_icons;
Packit 1e8aac
Packit 1e8aac
  GladeWidgetAdaptor *local_selection;
Packit 1e8aac
  GHashTable         *button_table;
Packit 1e8aac
};
Packit 1e8aac
Packit 1e8aac
enum
Packit 1e8aac
{
Packit 1e8aac
  REFRESH,
Packit 1e8aac
  LAST_SIGNAL
Packit 1e8aac
};
Packit 1e8aac
Packit 1e8aac
enum
Packit 1e8aac
{
Packit 1e8aac
  PROP_0,
Packit 1e8aac
  PROP_ITEM_APPEARANCE,
Packit 1e8aac
  PROP_USE_SMALL_ITEM_ICONS,
Packit 1e8aac
  PROP_SHOW_SELECTOR_BUTTON,
Packit 1e8aac
  PROP_PROJECT,
Packit 1e8aac
  N_PROPERTIES
Packit 1e8aac
};
Packit 1e8aac
Packit 1e8aac
static GParamSpec *properties[N_PROPERTIES];
Packit 1e8aac
static guint glade_palette_signals[LAST_SIGNAL] = { 0 };
Packit 1e8aac
Packit 1e8aac
static void glade_palette_append_item_group (GladePalette        *palette,
Packit 1e8aac
                                             GladeWidgetGroup    *group);
Packit 1e8aac
static void palette_item_toggled_cb         (GtkToggleToolButton *button, 
Packit 1e8aac
					     GladePalette        *palette);
Packit 1e8aac
Packit 1e8aac
G_DEFINE_TYPE_WITH_PRIVATE (GladePalette, glade_palette, GTK_TYPE_BOX)
Packit 1e8aac
Packit 1e8aac
Packit 1e8aac
/*******************************************************
Packit 1e8aac
 *                   Project Signals                   *
Packit 1e8aac
 *******************************************************/
Packit 1e8aac
static void
Packit 1e8aac
palette_item_refresh_cb (GladePalette *palette,
Packit 1e8aac
			 GtkWidget    *item)
Packit 1e8aac
{
Packit 1e8aac
  GladeProject       *project;
Packit 1e8aac
  GladeSupportMask    support;
Packit 1e8aac
  GladeWidgetAdaptor *adaptor;
Packit 1e8aac
  gchar              *warning, *text;
Packit 1e8aac
Packit 1e8aac
  adaptor = g_object_get_data (G_OBJECT (item), "glade-widget-adaptor");
Packit 1e8aac
  g_assert (adaptor);
Packit 1e8aac
Packit 1e8aac
  if ((project = palette->priv->project) &&
Packit 1e8aac
      (warning = glade_project_verify_widget_adaptor (project, adaptor,
Packit 1e8aac
						      &support)) != NULL)
Packit 1e8aac
    {
Packit 1e8aac
      /* set sensitivity */
Packit 1e8aac
      gtk_widget_set_sensitive (GTK_WIDGET (item),
Packit 1e8aac
                                !(support & GLADE_SUPPORT_MISMATCH));
Packit 1e8aac
Packit 1e8aac
      gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item),
Packit 1e8aac
				     glade_widget_adaptor_get_icon_name (adaptor));
Packit 1e8aac
Packit 1e8aac
      /* prepend widget title */
Packit 1e8aac
      text = g_strdup_printf ("%s: %s", glade_widget_adaptor_get_title (adaptor), warning);
Packit 1e8aac
      gtk_widget_set_tooltip_text (item, text);
Packit 1e8aac
      g_free (text);
Packit 1e8aac
      g_free (warning);
Packit 1e8aac
    }
Packit 1e8aac
  else
Packit 1e8aac
    {
Packit 1e8aac
      gtk_widget_set_tooltip_text (GTK_WIDGET (item), 
Packit 1e8aac
				   glade_widget_adaptor_get_title (adaptor));
Packit 1e8aac
      gtk_widget_set_sensitive (GTK_WIDGET (item), TRUE);
Packit 1e8aac
      gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item),
Packit 1e8aac
                                     glade_widget_adaptor_get_icon_name (adaptor));
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_palette_refresh (GladePalette *palette)
Packit 1e8aac
{
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PALETTE (palette));
Packit 1e8aac
Packit 1e8aac
  g_signal_emit (G_OBJECT (palette), glade_palette_signals[REFRESH], 0);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
project_add_item_changed_cb (GladeProject *project,
Packit 1e8aac
			     GParamSpec   *pspec,
Packit 1e8aac
			     GladePalette *palette)
Packit 1e8aac
{
Packit 1e8aac
  GtkToggleToolButton *selection = NULL;
Packit 1e8aac
  GladePalettePrivate *priv = palette->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->local_selection)
Packit 1e8aac
    {
Packit 1e8aac
      selection = g_hash_table_lookup (priv->button_table, 
Packit 1e8aac
				       glade_widget_adaptor_get_name (priv->local_selection));
Packit 1e8aac
Packit 1e8aac
      g_signal_handlers_block_by_func (selection, palette_item_toggled_cb, palette);
Packit 1e8aac
      gtk_toggle_tool_button_set_active (selection, FALSE);
Packit 1e8aac
      g_signal_handlers_unblock_by_func (selection, palette_item_toggled_cb, palette);
Packit 1e8aac
Packit 1e8aac
      glade_project_set_pointer_mode (priv->project, GLADE_POINTER_SELECT);
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  priv->local_selection = glade_project_get_add_item (priv->project);
Packit 1e8aac
Packit 1e8aac
  if (priv->local_selection)
Packit 1e8aac
    {
Packit 1e8aac
      selection = g_hash_table_lookup (priv->button_table, 
Packit 1e8aac
				       glade_widget_adaptor_get_name (priv->local_selection));
Packit 1e8aac
Packit 1e8aac
      g_signal_handlers_block_by_func (selection, palette_item_toggled_cb, palette);
Packit 1e8aac
      gtk_toggle_tool_button_set_active (selection, TRUE);
Packit 1e8aac
      g_signal_handlers_unblock_by_func (selection, palette_item_toggled_cb, palette);
Packit 1e8aac
Packit 1e8aac
      glade_project_set_pointer_mode (priv->project, GLADE_POINTER_ADD_WIDGET);
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/*******************************************************
Packit 1e8aac
 *                    Local Signals                    *
Packit 1e8aac
 *******************************************************/
Packit 1e8aac
static void
Packit 1e8aac
selector_button_toggled_cb (GtkToggleButton *button,
Packit 1e8aac
			    GladePalette    *palette)
Packit 1e8aac
{
Packit 1e8aac
  GladePalettePrivate *priv = palette->priv;
Packit 1e8aac
Packit 1e8aac
  if (!priv->project)
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  if (gtk_toggle_button_get_active (button))
Packit 1e8aac
    {
Packit 1e8aac
      g_signal_handlers_block_by_func (priv->project, project_add_item_changed_cb, palette);
Packit 1e8aac
      glade_project_set_add_item (priv->project, NULL);
Packit 1e8aac
      g_signal_handlers_unblock_by_func (priv->project, project_add_item_changed_cb, palette);
Packit 1e8aac
    }
Packit 1e8aac
  else if (glade_project_get_add_item (priv->project) == NULL)
Packit 1e8aac
    gtk_toggle_button_set_active (button, TRUE);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
palette_item_toggled_cb (GtkToggleToolButton *button, GladePalette *palette)
Packit 1e8aac
{
Packit 1e8aac
  GladePalettePrivate *priv = palette->priv;
Packit 1e8aac
  GladeWidgetAdaptor  *adaptor;
Packit 1e8aac
  GtkToggleToolButton *selection = NULL;
Packit 1e8aac
Packit 1e8aac
  if (!priv->project)
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  adaptor = g_object_get_data (G_OBJECT (button), "glade-widget-adaptor");
Packit 1e8aac
  if (!adaptor)
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  /* Start by unselecting the currently selected item if any */
Packit 1e8aac
  if (priv->local_selection)
Packit 1e8aac
    {
Packit 1e8aac
      selection = g_hash_table_lookup (priv->button_table, 
Packit 1e8aac
				       glade_widget_adaptor_get_name (priv->local_selection));
Packit 1e8aac
Packit 1e8aac
      g_signal_handlers_block_by_func (selection, palette_item_toggled_cb, palette);
Packit 1e8aac
      gtk_toggle_tool_button_set_active (selection, FALSE);
Packit 1e8aac
      g_signal_handlers_unblock_by_func (selection, palette_item_toggled_cb, palette);
Packit 1e8aac
      
Packit 1e8aac
      priv->local_selection = NULL;
Packit 1e8aac
Packit 1e8aac
      g_signal_handlers_block_by_func (priv->project, project_add_item_changed_cb, palette);
Packit 1e8aac
      glade_project_set_add_item (priv->project, NULL);
Packit 1e8aac
      g_signal_handlers_unblock_by_func (priv->project, project_add_item_changed_cb, palette);
Packit 1e8aac
Packit 1e8aac
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->selector_button), TRUE);
Packit 1e8aac
Packit 1e8aac
      glade_project_set_pointer_mode (priv->project, GLADE_POINTER_SELECT);
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  if (!gtk_toggle_tool_button_get_active (button))
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  /* Auto-create toplevel types */
Packit 1e8aac
  if (GWA_IS_TOPLEVEL (adaptor))
Packit 1e8aac
    {
Packit 1e8aac
      glade_command_create (adaptor, NULL, NULL, priv->project);
Packit 1e8aac
Packit 1e8aac
      g_signal_handlers_block_by_func (button, palette_item_toggled_cb, palette);
Packit 1e8aac
      gtk_toggle_tool_button_set_active (button, FALSE);
Packit 1e8aac
      g_signal_handlers_unblock_by_func (button, palette_item_toggled_cb, palette);
Packit 1e8aac
    }
Packit 1e8aac
  else
Packit 1e8aac
    {
Packit 1e8aac
      g_signal_handlers_block_by_func (priv->project, project_add_item_changed_cb, palette);
Packit 1e8aac
      glade_project_set_add_item (priv->project, adaptor);
Packit 1e8aac
      g_signal_handlers_unblock_by_func (priv->project, project_add_item_changed_cb, palette);
Packit 1e8aac
Packit 1e8aac
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->selector_button), FALSE);
Packit 1e8aac
Packit 1e8aac
      priv->local_selection = adaptor;
Packit 1e8aac
Packit 1e8aac
      glade_project_set_pointer_mode (priv->project, GLADE_POINTER_ADD_WIDGET);
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_palette_drag_begin (GtkWidget *widget,
Packit 1e8aac
                          GdkDragContext *context,
Packit 1e8aac
                          GladeWidgetAdaptor *adaptor)
Packit 1e8aac
{
Packit 1e8aac
  _glade_dnd_set_icon_widget (context,
Packit 1e8aac
                              glade_widget_adaptor_get_icon_name (adaptor),
Packit 1e8aac
                              glade_widget_adaptor_get_name (adaptor));
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_palette_drag_data_get (GtkWidget          *widget,
Packit 1e8aac
                             GdkDragContext     *context,
Packit 1e8aac
                             GtkSelectionData   *data,
Packit 1e8aac
                             guint               info,
Packit 1e8aac
                             guint               time,
Packit 1e8aac
                             GladeWidgetAdaptor *adaptor)
Packit 1e8aac
{
Packit 1e8aac
  _glade_dnd_set_data (data, G_OBJECT (adaptor));
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static gint
Packit 1e8aac
palette_item_button_press_cb (GtkWidget      *button,
Packit 1e8aac
			      GdkEventButton *event, 
Packit 1e8aac
			      GtkToolItem    *item)
Packit 1e8aac
{
Packit 1e8aac
  GladePalette *palette = g_object_get_data (G_OBJECT (item), "glade-palette");
Packit 1e8aac
  GladeWidgetAdaptor *adaptor = g_object_get_data (G_OBJECT (item), "glade-widget-adaptor");
Packit 1e8aac
  
Packit 1e8aac
  if (glade_popup_is_popup_event (event))
Packit 1e8aac
    {
Packit 1e8aac
      glade_popup_palette_pop (palette, adaptor, event);
Packit 1e8aac
      return TRUE;
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  return FALSE;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/*******************************************************
Packit 1e8aac
 *          Building Widgets/Populating catalog        *
Packit 1e8aac
 *******************************************************/
Packit 1e8aac
static GtkWidget *
Packit 1e8aac
glade_palette_new_item (GladePalette *palette, GladeWidgetAdaptor *adaptor)
Packit 1e8aac
{
Packit 1e8aac
  GtkWidget *item, *button, *label, *box;
Packit 1e8aac
Packit 1e8aac
  item = (GtkWidget *) gtk_toggle_tool_button_new ();
Packit 1e8aac
  g_object_set_data (G_OBJECT (item), "glade-widget-adaptor", adaptor);
Packit 1e8aac
  g_object_set_data (G_OBJECT (item), "glade-palette", palette);
Packit 1e8aac
Packit 1e8aac
  button = gtk_bin_get_child (GTK_BIN (item));
Packit 1e8aac
  g_assert (GTK_IS_BUTTON (button));
Packit 1e8aac
Packit 1e8aac
  /* Add a box to avoid the ellipsize on the items */
Packit 1e8aac
  box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
Packit 1e8aac
  label = gtk_label_new (glade_widget_adaptor_get_title (adaptor));
Packit 1e8aac
  gtk_widget_set_halign (label, GTK_ALIGN_START);
Packit 1e8aac
  gtk_widget_show (label);
Packit 1e8aac
  gtk_widget_show (box);
Packit 1e8aac
  gtk_container_add (GTK_CONTAINER (box), label);
Packit 1e8aac
  gtk_tool_button_set_label_widget (GTK_TOOL_BUTTON (item), box);
Packit 1e8aac
  palette_item_refresh_cb (palette, item);
Packit 1e8aac
Packit 1e8aac
  /* Update selection when the item is pushed */
Packit 1e8aac
  g_signal_connect (G_OBJECT (item), "toggled",
Packit 1e8aac
                    G_CALLBACK (palette_item_toggled_cb), palette);
Packit 1e8aac
Packit 1e8aac
  /* Update palette item when active project state changes */
Packit 1e8aac
  g_signal_connect (G_OBJECT (palette), "refresh",
Packit 1e8aac
		    G_CALLBACK (palette_item_refresh_cb), item);
Packit 1e8aac
Packit 1e8aac
  /* Fire Glade palette popup menus */
Packit 1e8aac
  g_signal_connect (G_OBJECT (button), "button-press-event",
Packit 1e8aac
                    G_CALLBACK (palette_item_button_press_cb), item);
Packit 1e8aac
  g_signal_connect_object (button, "drag-begin",
Packit 1e8aac
                           G_CALLBACK (glade_palette_drag_begin), adaptor, 0);
Packit 1e8aac
  g_signal_connect_object (button, "drag-data-get",
Packit 1e8aac
                           G_CALLBACK (glade_palette_drag_data_get), adaptor, 0);
Packit 1e8aac
Packit 1e8aac
  gtk_drag_source_set (button, GDK_BUTTON1_MASK, _glade_dnd_get_target (), 1, 0);
Packit 1e8aac
Packit 1e8aac
  gtk_widget_show (item);
Packit 1e8aac
Packit 1e8aac
  g_hash_table_insert (palette->priv->button_table, 
Packit 1e8aac
		       (gchar *)glade_widget_adaptor_get_name (adaptor),
Packit 1e8aac
		       item);
Packit 1e8aac
Packit 1e8aac
  return item;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static GtkWidget *
Packit 1e8aac
glade_palette_new_item_group (GladePalette *palette, GladeWidgetGroup *group)
Packit 1e8aac
{
Packit 1e8aac
  GtkWidget *item_group, *item, *label;
Packit 1e8aac
  GList *l;
Packit 1e8aac
Packit 1e8aac
  /* Give the item group a left aligned label */
Packit 1e8aac
  label = gtk_label_new (glade_widget_group_get_title (group));
Packit 1e8aac
  gtk_widget_set_halign (label, GTK_ALIGN_START);
Packit 1e8aac
  gtk_widget_show (label);
Packit 1e8aac
Packit 1e8aac
  item_group = gtk_tool_item_group_new ("");
Packit 1e8aac
  gtk_tool_item_group_set_label_widget (GTK_TOOL_ITEM_GROUP (item_group),
Packit 1e8aac
                                        label);
Packit 1e8aac
Packit 1e8aac
  /* Tell the item group to ellipsize our custom label for us */
Packit 1e8aac
  gtk_tool_item_group_set_ellipsize (GTK_TOOL_ITEM_GROUP (item_group),
Packit 1e8aac
                                     PANGO_ELLIPSIZE_END);
Packit 1e8aac
Packit 1e8aac
  gtk_widget_set_tooltip_text (item_group,
Packit 1e8aac
                               glade_widget_group_get_title (group));
Packit 1e8aac
Packit 1e8aac
  /* Go through all the widget classes in this catalog. */
Packit 1e8aac
  for (l = (GList *) glade_widget_group_get_adaptors (group); l; l = l->next)
Packit 1e8aac
    {
Packit 1e8aac
      GladeWidgetAdaptor *adaptor = GLADE_WIDGET_ADAPTOR (l->data);
Packit 1e8aac
Packit 1e8aac
      /* Create/append new item */
Packit 1e8aac
      item = glade_palette_new_item (palette, adaptor);
Packit 1e8aac
      gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (item_group),
Packit 1e8aac
                                  GTK_TOOL_ITEM (item), -1);
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  /* set default expanded state */
Packit 1e8aac
  gtk_tool_item_group_set_collapsed (GTK_TOOL_ITEM_GROUP (item_group),
Packit 1e8aac
                                     glade_widget_group_get_expanded (group) == FALSE);
Packit 1e8aac
Packit 1e8aac
  gtk_widget_show (item_group);
Packit 1e8aac
Packit 1e8aac
  return item_group;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_palette_append_item_group (GladePalette *palette, GladeWidgetGroup *group)
Packit 1e8aac
{
Packit 1e8aac
  GladePalettePrivate *priv = palette->priv;
Packit 1e8aac
  GtkWidget *item_group;
Packit 1e8aac
Packit 1e8aac
  if ((item_group = glade_palette_new_item_group (palette, group)) != NULL)
Packit 1e8aac
    gtk_container_add (GTK_CONTAINER (priv->toolpalette), item_group);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_palette_populate (GladePalette *palette)
Packit 1e8aac
{
Packit 1e8aac
  GList *l;
Packit 1e8aac
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PALETTE (palette));
Packit 1e8aac
Packit 1e8aac
  for (l = (GList *) glade_app_get_catalogs (); l; l = l->next)
Packit 1e8aac
    {
Packit 1e8aac
      GList *groups = glade_catalog_get_widget_groups (GLADE_CATALOG (l->data));
Packit 1e8aac
Packit 1e8aac
      for (; groups; groups = groups->next)
Packit 1e8aac
        {
Packit 1e8aac
          GladeWidgetGroup *group = GLADE_WIDGET_GROUP (groups->data);
Packit 1e8aac
Packit 1e8aac
          if (glade_widget_group_get_adaptors (group))
Packit 1e8aac
            glade_palette_append_item_group (palette, group);
Packit 1e8aac
        }
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static GtkWidget *
Packit 1e8aac
glade_palette_create_selector_button (GladePalette *palette)
Packit 1e8aac
{
Packit 1e8aac
  GtkWidget *selector;
Packit 1e8aac
  GtkWidget *image;
Packit 1e8aac
  gchar *path;
Packit 1e8aac
Packit 1e8aac
  /* create selector button */
Packit 1e8aac
  selector = gtk_toggle_button_new ();
Packit 1e8aac
Packit 1e8aac
  gtk_container_set_border_width (GTK_CONTAINER (selector), 0);
Packit 1e8aac
Packit 1e8aac
  path = g_build_filename (glade_app_get_pixmaps_dir (), "selector.png", NULL);
Packit 1e8aac
  image = gtk_image_new_from_file (path);
Packit 1e8aac
  gtk_widget_show (image);
Packit 1e8aac
Packit 1e8aac
  gtk_container_add (GTK_CONTAINER (selector), image);
Packit 1e8aac
  gtk_button_set_relief (GTK_BUTTON (selector), GTK_RELIEF_NONE);
Packit 1e8aac
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (selector), TRUE);
Packit 1e8aac
Packit 1e8aac
  g_signal_connect (G_OBJECT (selector), "toggled",
Packit 1e8aac
                    G_CALLBACK (selector_button_toggled_cb), palette);
Packit 1e8aac
Packit 1e8aac
  g_free (path);
Packit 1e8aac
Packit 1e8aac
  return selector;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/*******************************************************
Packit 1e8aac
 *                    Class & methods                  *
Packit 1e8aac
 *******************************************************/
Packit 1e8aac
Packit 1e8aac
/* override GtkWidget::show_all since we have internal widgets we wish to keep
Packit 1e8aac
 * hidden unless we decide otherwise, like the hidden selector button.
Packit 1e8aac
 */
Packit 1e8aac
static void
Packit 1e8aac
glade_palette_show_all (GtkWidget *widget)
Packit 1e8aac
{
Packit 1e8aac
  gtk_widget_show (widget);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_palette_set_property (GObject      *object,
Packit 1e8aac
                            guint         prop_id,
Packit 1e8aac
                            const GValue *value,
Packit 1e8aac
                            GParamSpec   *pspec)
Packit 1e8aac
{
Packit 1e8aac
  GladePalette *palette = GLADE_PALETTE (object);
Packit 1e8aac
Packit 1e8aac
  switch (prop_id)
Packit 1e8aac
    {
Packit 1e8aac
    case PROP_PROJECT:
Packit 1e8aac
      glade_palette_set_project (palette, (GladeProject *)g_value_get_object (value));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_USE_SMALL_ITEM_ICONS:
Packit 1e8aac
      glade_palette_set_use_small_item_icons (palette,
Packit 1e8aac
					      g_value_get_boolean (value));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_ITEM_APPEARANCE:
Packit 1e8aac
      glade_palette_set_item_appearance (palette, g_value_get_enum (value));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_SHOW_SELECTOR_BUTTON:
Packit 1e8aac
      glade_palette_set_show_selector_button (palette,
Packit 1e8aac
					      g_value_get_boolean (value));
Packit 1e8aac
      break;
Packit 1e8aac
    default:
Packit 1e8aac
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit 1e8aac
      break;
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_palette_get_property (GObject    *object,
Packit 1e8aac
                            guint       prop_id,
Packit 1e8aac
                            GValue     *value, 
Packit 1e8aac
                            GParamSpec *pspec)
Packit 1e8aac
{
Packit 1e8aac
  GladePalette *palette = GLADE_PALETTE (object);
Packit 1e8aac
  GladePalettePrivate *priv = palette->priv;
Packit 1e8aac
Packit 1e8aac
  switch (prop_id)
Packit 1e8aac
    {
Packit 1e8aac
    case PROP_PROJECT:
Packit 1e8aac
      g_value_set_object (value, priv->project);
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_USE_SMALL_ITEM_ICONS:
Packit 1e8aac
      g_value_set_boolean (value, priv->use_small_item_icons);
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_SHOW_SELECTOR_BUTTON:
Packit 1e8aac
      g_value_set_boolean (value,
Packit 1e8aac
			   gtk_widget_get_visible (priv->selector_button));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_ITEM_APPEARANCE:
Packit 1e8aac
      g_value_set_enum (value, priv->item_appearance);
Packit 1e8aac
      break;
Packit 1e8aac
    default:
Packit 1e8aac
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit 1e8aac
      break;
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_palette_dispose (GObject *object)
Packit 1e8aac
{
Packit 1e8aac
  GladePalettePrivate *priv;
Packit 1e8aac
Packit 1e8aac
  priv = GLADE_PALETTE (object)->priv;
Packit 1e8aac
Packit 1e8aac
  priv->catalogs = NULL;
Packit 1e8aac
Packit 1e8aac
  glade_palette_set_project (GLADE_PALETTE (object), NULL);
Packit 1e8aac
Packit 1e8aac
  G_OBJECT_CLASS (glade_palette_parent_class)->dispose (object);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_palette_finalize (GObject *object)
Packit 1e8aac
{
Packit 1e8aac
  GladePalettePrivate *priv;
Packit 1e8aac
Packit 1e8aac
  priv = GLADE_PALETTE (object)->priv;
Packit 1e8aac
Packit 1e8aac
  g_hash_table_destroy (priv->button_table);
Packit 1e8aac
Packit 1e8aac
  G_OBJECT_CLASS (glade_palette_parent_class)->finalize (object);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_palette_class_init (GladePaletteClass *klass)
Packit 1e8aac
{
Packit 1e8aac
  GObjectClass *object_class;
Packit 1e8aac
  GtkWidgetClass *widget_class;
Packit 1e8aac
Packit 1e8aac
  object_class = G_OBJECT_CLASS (klass);
Packit 1e8aac
  widget_class = GTK_WIDGET_CLASS (klass);
Packit 1e8aac
Packit 1e8aac
  object_class->get_property = glade_palette_get_property;
Packit 1e8aac
  object_class->set_property = glade_palette_set_property;
Packit 1e8aac
  object_class->dispose = glade_palette_dispose;
Packit 1e8aac
  object_class->finalize = glade_palette_finalize;
Packit 1e8aac
Packit 1e8aac
  widget_class->show_all = glade_palette_show_all;
Packit 1e8aac
Packit 1e8aac
  glade_palette_signals[REFRESH] =
Packit 1e8aac
      g_signal_new ("refresh",
Packit 1e8aac
                    G_TYPE_FROM_CLASS (object_class),
Packit 1e8aac
                    G_SIGNAL_RUN_LAST,
Packit 1e8aac
                    G_STRUCT_OFFSET (GladePaletteClass, refresh),
Packit 1e8aac
                    NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
Packit 1e8aac
Packit 1e8aac
  properties[PROP_PROJECT] =
Packit 1e8aac
    g_param_spec_object ("project",
Packit 1e8aac
                         "Project",
Packit 1e8aac
                         "This palette's current project",
Packit 1e8aac
                         GLADE_TYPE_PROJECT,
Packit 1e8aac
                         G_PARAM_READWRITE);
Packit 1e8aac
Packit 1e8aac
  properties[PROP_ITEM_APPEARANCE] =
Packit 1e8aac
    g_param_spec_enum ("item-appearance",
Packit 1e8aac
                       "Item Appearance",
Packit 1e8aac
                       "The appearance of the palette items",
Packit 1e8aac
                       GLADE_TYPE_ITEM_APPEARANCE,
Packit 1e8aac
                       GLADE_ITEM_ICON_ONLY,
Packit 1e8aac
                       G_PARAM_READWRITE);
Packit 1e8aac
Packit 1e8aac
  properties[PROP_USE_SMALL_ITEM_ICONS] =
Packit 1e8aac
    g_param_spec_boolean ("use-small-item-icons",
Packit 1e8aac
                          "Use Small Item Icons",
Packit 1e8aac
                          "Whether to use small icons to represent items",
Packit 1e8aac
                          FALSE,
Packit 1e8aac
                          G_PARAM_READWRITE);
Packit 1e8aac
Packit 1e8aac
  properties[PROP_SHOW_SELECTOR_BUTTON] =
Packit 1e8aac
    g_param_spec_boolean ("show-selector-button",
Packit 1e8aac
                          "Show Selector Button",
Packit 1e8aac
                          "Whether to show the internal selector button",
Packit 1e8aac
                          TRUE,
Packit 1e8aac
                          G_PARAM_READWRITE);
Packit 1e8aac
Packit 1e8aac
  /* Install all properties */
Packit 1e8aac
  g_object_class_install_properties (object_class, N_PROPERTIES, properties);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_palette_init (GladePalette *palette)
Packit 1e8aac
{
Packit 1e8aac
  GladePalettePrivate *priv;
Packit 1e8aac
  GtkWidget           *sw;
Packit 1e8aac
Packit 1e8aac
  gtk_orientable_set_orientation (GTK_ORIENTABLE (palette),
Packit 1e8aac
				  GTK_ORIENTATION_VERTICAL);
Packit 1e8aac
Packit 1e8aac
  priv = palette->priv = glade_palette_get_instance_private (palette);
Packit 1e8aac
Packit 1e8aac
  priv->button_table = g_hash_table_new (g_str_hash, g_str_equal);
Packit 1e8aac
Packit 1e8aac
  priv->item_appearance      = GLADE_ITEM_ICON_ONLY;
Packit 1e8aac
  priv->use_small_item_icons = FALSE;
Packit 1e8aac
Packit 1e8aac
  /* create selector button */
Packit 1e8aac
  priv->selector_button = glade_palette_create_selector_button (palette);
Packit 1e8aac
  priv->selector_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
Packit 1e8aac
  gtk_box_pack_start (GTK_BOX (priv->selector_hbox), priv->selector_button,
Packit 1e8aac
                      FALSE, FALSE, 0);
Packit 1e8aac
  gtk_box_pack_start (GTK_BOX (palette), priv->selector_hbox, FALSE, FALSE, 0);
Packit 1e8aac
  gtk_widget_show (priv->selector_button);
Packit 1e8aac
  gtk_widget_show (priv->selector_hbox);
Packit 1e8aac
Packit 1e8aac
  gtk_widget_set_tooltip_text (priv->selector_button, _("Widget selector"));
Packit 1e8aac
Packit 1e8aac
  /* The GtkToolPalette */
Packit 1e8aac
  priv->toolpalette = gtk_tool_palette_new ();
Packit 1e8aac
  gtk_tool_palette_set_style (GTK_TOOL_PALETTE (priv->toolpalette),
Packit 1e8aac
                              GTK_TOOLBAR_ICONS);
Packit 1e8aac
  gtk_tool_palette_set_icon_size (GTK_TOOL_PALETTE (priv->toolpalette),
Packit 1e8aac
                                  GTK_ICON_SIZE_LARGE_TOOLBAR);
Packit 1e8aac
  
Packit 1e8aac
  sw = gtk_scrolled_window_new (NULL, NULL);
Packit 1e8aac
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
Packit 1e8aac
                                  GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
Packit 1e8aac
  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
Packit 1e8aac
                                       GTK_SHADOW_NONE);
Packit 1e8aac
Packit 1e8aac
  gtk_container_add (GTK_CONTAINER (sw), priv->toolpalette);
Packit 1e8aac
  gtk_box_pack_start (GTK_BOX (palette), sw, TRUE, TRUE, 0);
Packit 1e8aac
Packit 1e8aac
  gtk_widget_show (sw);
Packit 1e8aac
  gtk_widget_show (priv->toolpalette);
Packit 1e8aac
  gtk_widget_set_no_show_all (GTK_WIDGET (palette), TRUE);
Packit 1e8aac
Packit 1e8aac
  glade_palette_populate (palette);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
Packit 1e8aac
/*******************************************************
Packit 1e8aac
 *                         API                         *
Packit 1e8aac
 *******************************************************/
Packit 1e8aac
Packit 1e8aac
/**
Packit 1e8aac
 * glade_palette_new:
Packit 1e8aac
 *
Packit 1e8aac
 * Creates a new #GladePalette widget
Packit 1e8aac
 *
Packit 1e8aac
 * Returns: a new #GladePalette
Packit 1e8aac
 */
Packit 1e8aac
GtkWidget *
Packit 1e8aac
glade_palette_new (void)
Packit 1e8aac
{
Packit 1e8aac
  GladePalette *palette;
Packit 1e8aac
Packit 1e8aac
  palette = g_object_new (GLADE_TYPE_PALETTE,
Packit 1e8aac
                          "spacing", 2,
Packit 1e8aac
                          "item-appearance", GLADE_ITEM_ICON_ONLY,
Packit 1e8aac
                          NULL);
Packit 1e8aac
Packit 1e8aac
  return GTK_WIDGET (palette);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
Packit 1e8aac
GladeProject *
Packit 1e8aac
glade_palette_get_project (GladePalette *palette)
Packit 1e8aac
{
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PALETTE (palette), NULL);
Packit 1e8aac
Packit 1e8aac
  return palette->priv->project;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_palette_set_project (GladePalette *palette, GladeProject *project)
Packit 1e8aac
{
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PALETTE (palette));
Packit 1e8aac
Packit 1e8aac
  if (palette->priv->project != project)
Packit 1e8aac
    {
Packit 1e8aac
      if (palette->priv->project)
Packit 1e8aac
	{
Packit 1e8aac
	  g_signal_handlers_disconnect_by_func (G_OBJECT (palette->priv->project),
Packit 1e8aac
						G_CALLBACK (glade_palette_refresh),
Packit 1e8aac
						palette);
Packit 1e8aac
Packit 1e8aac
	  g_signal_handlers_disconnect_by_func (G_OBJECT (palette->priv->project),
Packit 1e8aac
						G_CALLBACK (project_add_item_changed_cb),
Packit 1e8aac
						palette);
Packit 1e8aac
Packit 1e8aac
	  g_object_unref (palette->priv->project);
Packit 1e8aac
	}
Packit 1e8aac
Packit 1e8aac
      palette->priv->project = project;
Packit 1e8aac
Packit 1e8aac
      if (palette->priv->project)
Packit 1e8aac
	{
Packit 1e8aac
	  g_signal_connect_swapped (G_OBJECT (palette->priv->project), "targets-changed",
Packit 1e8aac
				    G_CALLBACK (glade_palette_refresh), palette);
Packit 1e8aac
	  g_signal_connect_swapped (G_OBJECT (palette->priv->project), "parse-finished",
Packit 1e8aac
				    G_CALLBACK (glade_palette_refresh), palette);
Packit 1e8aac
Packit 1e8aac
	  g_signal_connect (G_OBJECT (palette->priv->project), "notify::add-item",
Packit 1e8aac
			    G_CALLBACK (project_add_item_changed_cb), palette);
Packit 1e8aac
Packit 1e8aac
	  g_object_ref (palette->priv->project);
Packit 1e8aac
Packit 1e8aac
	  project_add_item_changed_cb (project, NULL, palette);
Packit 1e8aac
	}
Packit 1e8aac
Packit 1e8aac
      glade_palette_refresh (palette);
Packit 1e8aac
Packit 1e8aac
      g_object_notify_by_pspec (G_OBJECT (palette), properties[PROP_PROJECT]);
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/**
Packit 1e8aac
 * glade_palette_set_item_appearance:
Packit 1e8aac
 * @palette: a #GladePalette
Packit 1e8aac
 * @item_appearance: the item appearance
Packit 1e8aac
 *
Packit 1e8aac
 * Sets the appearance of the palette items.
Packit 1e8aac
 */
Packit 1e8aac
void
Packit 1e8aac
glade_palette_set_item_appearance (GladePalette       *palette,
Packit 1e8aac
                                   GladeItemAppearance item_appearance)
Packit 1e8aac
{
Packit 1e8aac
  GladePalettePrivate *priv;
Packit 1e8aac
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PALETTE (palette));
Packit 1e8aac
Packit 1e8aac
  priv = palette->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->item_appearance != item_appearance)
Packit 1e8aac
    {
Packit 1e8aac
      GtkToolbarStyle style;
Packit 1e8aac
      priv->item_appearance = item_appearance;
Packit 1e8aac
Packit 1e8aac
      switch (item_appearance)
Packit 1e8aac
        {
Packit 1e8aac
          case GLADE_ITEM_ICON_AND_LABEL:
Packit 1e8aac
            style = GTK_TOOLBAR_BOTH_HORIZ;
Packit 1e8aac
            break;
Packit 1e8aac
          case GLADE_ITEM_ICON_ONLY:
Packit 1e8aac
            style = GTK_TOOLBAR_ICONS;
Packit 1e8aac
            break;
Packit 1e8aac
          case GLADE_ITEM_LABEL_ONLY:
Packit 1e8aac
            style = GTK_TOOLBAR_TEXT;
Packit 1e8aac
            break;
Packit 1e8aac
          default:
Packit 1e8aac
            g_assert_not_reached ();
Packit 1e8aac
            break;
Packit 1e8aac
        }
Packit 1e8aac
Packit 1e8aac
      gtk_tool_palette_set_style (GTK_TOOL_PALETTE (priv->toolpalette), style);
Packit 1e8aac
Packit 1e8aac
      g_object_notify_by_pspec (G_OBJECT (palette), properties[PROP_ITEM_APPEARANCE]);
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/**
Packit 1e8aac
 * glade_palette_set_use_small_item_icons:
Packit 1e8aac
 * @palette: a #GladePalette
Packit 1e8aac
 * @use_small_item_icons: Whether to use small item icons
Packit 1e8aac
 *
Packit 1e8aac
 * Sets whether to use small item icons.
Packit 1e8aac
 */
Packit 1e8aac
void
Packit 1e8aac
glade_palette_set_use_small_item_icons (GladePalette *palette,
Packit 1e8aac
                                        gboolean      use_small_item_icons)
Packit 1e8aac
{
Packit 1e8aac
  GladePalettePrivate *priv;
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PALETTE (palette));
Packit 1e8aac
  priv = palette->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->use_small_item_icons != use_small_item_icons)
Packit 1e8aac
    {
Packit 1e8aac
      priv->use_small_item_icons = use_small_item_icons;
Packit 1e8aac
Packit 1e8aac
      gtk_tool_palette_set_icon_size (GTK_TOOL_PALETTE (priv->toolpalette),
Packit 1e8aac
                                      (use_small_item_icons) ?
Packit 1e8aac
                                        GTK_ICON_SIZE_SMALL_TOOLBAR :
Packit 1e8aac
                                        GTK_ICON_SIZE_LARGE_TOOLBAR);
Packit 1e8aac
Packit 1e8aac
      g_object_notify_by_pspec (G_OBJECT (palette), properties[PROP_USE_SMALL_ITEM_ICONS]);
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/**
Packit 1e8aac
 * glade_palette_set_show_selector_button:
Packit 1e8aac
 * @palette: a #GladePalette
Packit 1e8aac
 * @show_selector_button: whether to show selector button
Packit 1e8aac
 *
Packit 1e8aac
 * Sets whether to show the internal widget selector button
Packit 1e8aac
 */
Packit 1e8aac
void
Packit 1e8aac
glade_palette_set_show_selector_button (GladePalette *palette,
Packit 1e8aac
                                        gboolean      show_selector_button)
Packit 1e8aac
{
Packit 1e8aac
  GladePalettePrivate *priv;
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PALETTE (palette));
Packit 1e8aac
  priv = palette->priv;
Packit 1e8aac
Packit 1e8aac
  if (gtk_widget_get_visible (priv->selector_hbox) != show_selector_button)
Packit 1e8aac
    {
Packit 1e8aac
      if (show_selector_button)
Packit 1e8aac
        gtk_widget_show (priv->selector_hbox);
Packit 1e8aac
      else
Packit 1e8aac
        gtk_widget_hide (priv->selector_hbox);
Packit 1e8aac
Packit 1e8aac
      g_object_notify_by_pspec (G_OBJECT (palette), properties[PROP_SHOW_SELECTOR_BUTTON]);
Packit 1e8aac
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/**
Packit 1e8aac
 * glade_palette_get_item_appearance:
Packit 1e8aac
 * @palette: a #GladePalette
Packit 1e8aac
 *
Packit 1e8aac
 * Returns: The appearance of the palette items
Packit 1e8aac
 */
Packit 1e8aac
GladeItemAppearance
Packit 1e8aac
glade_palette_get_item_appearance (GladePalette *palette)
Packit 1e8aac
{;
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PALETTE (palette), GLADE_ITEM_ICON_ONLY);
Packit 1e8aac
Packit 1e8aac
  return palette->priv->item_appearance;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/**
Packit 1e8aac
 * glade_palette_get_use_small_item_icons:
Packit 1e8aac
 * @palette: a #GladePalette
Packit 1e8aac
 *
Packit 1e8aac
 * Returns: Whether small item icons are used
Packit 1e8aac
 */
Packit 1e8aac
gboolean
Packit 1e8aac
glade_palette_get_use_small_item_icons (GladePalette *palette)
Packit 1e8aac
{
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PALETTE (palette), FALSE);
Packit 1e8aac
Packit 1e8aac
  return palette->priv->use_small_item_icons;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/**
Packit 1e8aac
 * glade_palette_get_show_selector_button:
Packit 1e8aac
 * @palette: a #GladePalette
Packit 1e8aac
 *
Packit 1e8aac
 * Returns: Whether the selector button is visible
Packit 1e8aac
 */
Packit 1e8aac
gboolean
Packit 1e8aac
glade_palette_get_show_selector_button (GladePalette *palette)
Packit 1e8aac
{
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PALETTE (palette), FALSE);
Packit 1e8aac
Packit 1e8aac
  return gtk_widget_get_visible (palette->priv->selector_hbox);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/**
Packit 1e8aac
 * glade_palette_get_tool_palette:
Packit 1e8aac
 * @palette: a #GladePalette
Packit 1e8aac
 *
Packit 1e8aac
 * Returns: the GtkToolPalette associated to this palette.
Packit 1e8aac
 */
Packit 1e8aac
GtkToolPalette *
Packit 1e8aac
glade_palette_get_tool_palette (GladePalette *palette)
Packit 1e8aac
{
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PALETTE (palette), FALSE);
Packit 1e8aac
Packit 1e8aac
  return GTK_TOOL_PALETTE (palette->priv->toolpalette);
Packit 1e8aac
}