Blame tests/testtoolbar.c

Packit 98cdb6
/* testtoolbar.c
Packit 98cdb6
 *
Packit 98cdb6
 * Copyright (C) 2002 Anders Carlsson <andersca@codefactory.se>
Packit 98cdb6
 * Copyright (C) 2002 James Henstridge <james@daa.com.au>
Packit 98cdb6
 * Copyright (C) 2003 Soeren Sandmann <sandmann@daimi.au.dk>
Packit 98cdb6
 *
Packit 98cdb6
 * This library is free software; you can redistribute it and/or
Packit 98cdb6
 * modify it under the terms of the GNU Library General Public
Packit 98cdb6
 * License as published by the Free Software Foundation; either
Packit 98cdb6
 * version 2 of the License, or (at your option) any later version.
Packit 98cdb6
 *
Packit 98cdb6
 * This library is distributed in the hope that it will be useful,
Packit 98cdb6
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 98cdb6
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 98cdb6
 * Library General Public License for more details.
Packit 98cdb6
 *
Packit 98cdb6
 * You should have received a copy of the GNU Library General Public
Packit 98cdb6
 * License along with this library; if not, write to the
Packit 98cdb6
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit 98cdb6
 * Boston, MA 02111-1307, USA.
Packit 98cdb6
 */
Packit 98cdb6
#undef GTK_DISABLE_DEPRECATED
Packit 98cdb6
#include "config.h"
Packit 98cdb6
#include <gtk/gtk.h>
Packit 98cdb6
#include "prop-editor.h"
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
reload_clicked (GtkWidget *widget)
Packit 98cdb6
{
Packit 98cdb6
  static GdkAtom atom_rcfiles = GDK_NONE;
Packit 98cdb6
Packit 98cdb6
  GdkEventClient sev;
Packit 98cdb6
  int i;
Packit 98cdb6
  
Packit 98cdb6
  if (!atom_rcfiles)
Packit 98cdb6
    atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
Packit 98cdb6
Packit 98cdb6
  for(i = 0; i < 5; i++)
Packit 98cdb6
    sev.data.l[i] = 0;
Packit 98cdb6
  sev.data_format = 32;
Packit 98cdb6
  sev.message_type = atom_rcfiles;
Packit 98cdb6
  gdk_event_send_clientmessage_toall ((GdkEvent *) &sev;;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
change_orientation (GtkWidget *button, GtkWidget *toolbar)
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *table;
Packit 98cdb6
  GtkOrientation orientation;
Packit 98cdb6
Packit 98cdb6
  table = gtk_widget_get_parent (toolbar);
Packit 98cdb6
  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))
Packit 98cdb6
    orientation = GTK_ORIENTATION_VERTICAL;
Packit 98cdb6
  else
Packit 98cdb6
    orientation = GTK_ORIENTATION_HORIZONTAL;
Packit 98cdb6
Packit 98cdb6
  g_object_ref (toolbar);
Packit 98cdb6
  gtk_container_remove (GTK_CONTAINER (table), toolbar);
Packit 98cdb6
  gtk_toolbar_set_orientation (GTK_TOOLBAR (toolbar), orientation);
Packit 98cdb6
  if (orientation == GTK_ORIENTATION_HORIZONTAL)
Packit 98cdb6
    {
Packit 98cdb6
      gtk_table_attach (GTK_TABLE (table), toolbar,
Packit 98cdb6
			0,2, 0,1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
Packit 98cdb6
    }
Packit 98cdb6
  else
Packit 98cdb6
    {
Packit 98cdb6
      gtk_table_attach (GTK_TABLE (table), toolbar,
Packit 98cdb6
			0,1, 0,4, GTK_FILL, GTK_FILL|GTK_EXPAND, 0, 0);
Packit 98cdb6
    }
Packit 98cdb6
  g_object_unref (toolbar);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
change_show_arrow (GtkWidget *button, GtkWidget *toolbar)
Packit 98cdb6
{
Packit 98cdb6
  gtk_toolbar_set_show_arrow (GTK_TOOLBAR (toolbar),
Packit 98cdb6
		gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)));
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
set_toolbar_style_toggled (GtkCheckButton *button, GtkToolbar *toolbar)
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *option_menu;
Packit 98cdb6
  int style;
Packit 98cdb6
  
Packit 98cdb6
  option_menu = g_object_get_data (G_OBJECT (button), "option-menu");
Packit 98cdb6
Packit 98cdb6
  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))
Packit 98cdb6
    {
Packit 98cdb6
      style = gtk_option_menu_get_history (GTK_OPTION_MENU (option_menu));
Packit 98cdb6
Packit 98cdb6
      gtk_toolbar_set_style (toolbar, style);
Packit 98cdb6
      gtk_widget_set_sensitive (option_menu, TRUE);
Packit 98cdb6
    }
Packit 98cdb6
  else
Packit 98cdb6
    {
Packit 98cdb6
      gtk_toolbar_unset_style (toolbar);
Packit 98cdb6
      gtk_widget_set_sensitive (option_menu, FALSE);
Packit 98cdb6
    }
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
change_toolbar_style (GtkWidget *option_menu, GtkWidget *toolbar)
Packit 98cdb6
{
Packit 98cdb6
  GtkToolbarStyle style;
Packit 98cdb6
Packit 98cdb6
  style = gtk_option_menu_get_history (GTK_OPTION_MENU (option_menu));
Packit 98cdb6
  gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), style);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
set_visible_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
Packit 98cdb6
		 GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
Packit 98cdb6
{
Packit 98cdb6
  GtkToolItem *tool_item;
Packit 98cdb6
  gboolean visible;
Packit 98cdb6
Packit 98cdb6
  gtk_tree_model_get (model, iter, 0, &tool_item, -1);
Packit 98cdb6
Packit 98cdb6
  g_object_get (tool_item, "visible", &visible, NULL);
Packit 98cdb6
  g_object_set (cell, "active", visible, NULL);
Packit 98cdb6
  g_object_unref (tool_item);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
visibile_toggled(GtkCellRendererToggle *cell, const gchar *path_str,
Packit 98cdb6
		 GtkTreeModel *model)
Packit 98cdb6
{
Packit 98cdb6
  GtkTreePath *path;
Packit 98cdb6
  GtkTreeIter iter;
Packit 98cdb6
  GtkToolItem *tool_item;
Packit 98cdb6
  gboolean visible;
Packit 98cdb6
Packit 98cdb6
  path = gtk_tree_path_new_from_string (path_str);
Packit 98cdb6
  gtk_tree_model_get_iter (model, &iter, path);
Packit 98cdb6
Packit 98cdb6
  gtk_tree_model_get (model, &iter, 0, &tool_item, -1);
Packit 98cdb6
  g_object_get (tool_item, "visible", &visible, NULL);
Packit 98cdb6
  g_object_set (tool_item, "visible", !visible, NULL);
Packit 98cdb6
  g_object_unref (tool_item);
Packit 98cdb6
Packit 98cdb6
  gtk_tree_model_row_changed (model, path, &iter);
Packit 98cdb6
  gtk_tree_path_free (path);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
set_expand_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
Packit 98cdb6
		GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
Packit 98cdb6
{
Packit 98cdb6
  GtkToolItem *tool_item;
Packit 98cdb6
Packit 98cdb6
  gtk_tree_model_get (model, iter, 0, &tool_item, -1);
Packit 98cdb6
Packit 98cdb6
  g_object_set (cell, "active", gtk_tool_item_get_expand (tool_item), NULL);
Packit 98cdb6
  g_object_unref (tool_item);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
expand_toggled(GtkCellRendererToggle *cell, const gchar *path_str,
Packit 98cdb6
	       GtkTreeModel *model)
Packit 98cdb6
{
Packit 98cdb6
  GtkTreePath *path;
Packit 98cdb6
  GtkTreeIter iter;
Packit 98cdb6
  GtkToolItem *tool_item;
Packit 98cdb6
Packit 98cdb6
  path = gtk_tree_path_new_from_string (path_str);
Packit 98cdb6
  gtk_tree_model_get_iter (model, &iter, path);
Packit 98cdb6
Packit 98cdb6
  gtk_tree_model_get (model, &iter, 0, &tool_item, -1);
Packit 98cdb6
  gtk_tool_item_set_expand (tool_item, !gtk_tool_item_get_expand (tool_item));
Packit 98cdb6
  g_object_unref (tool_item);
Packit 98cdb6
Packit 98cdb6
  gtk_tree_model_row_changed (model, path, &iter);
Packit 98cdb6
  gtk_tree_path_free (path);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
set_homogeneous_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
Packit 98cdb6
		     GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
Packit 98cdb6
{
Packit 98cdb6
  GtkToolItem *tool_item;
Packit 98cdb6
Packit 98cdb6
  gtk_tree_model_get (model, iter, 0, &tool_item, -1);
Packit 98cdb6
Packit 98cdb6
  g_object_set (cell, "active", gtk_tool_item_get_homogeneous (tool_item), NULL);
Packit 98cdb6
  g_object_unref (tool_item);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
homogeneous_toggled(GtkCellRendererToggle *cell, const gchar *path_str,
Packit 98cdb6
		    GtkTreeModel *model)
Packit 98cdb6
{
Packit 98cdb6
  GtkTreePath *path;
Packit 98cdb6
  GtkTreeIter iter;
Packit 98cdb6
  GtkToolItem *tool_item;
Packit 98cdb6
Packit 98cdb6
  path = gtk_tree_path_new_from_string (path_str);
Packit 98cdb6
  gtk_tree_model_get_iter (model, &iter, path);
Packit 98cdb6
Packit 98cdb6
  gtk_tree_model_get (model, &iter, 0, &tool_item, -1);
Packit 98cdb6
  gtk_tool_item_set_homogeneous (tool_item, !gtk_tool_item_get_homogeneous (tool_item));
Packit 98cdb6
  g_object_unref (tool_item);
Packit 98cdb6
Packit 98cdb6
  gtk_tree_model_row_changed (model, path, &iter);
Packit 98cdb6
  gtk_tree_path_free (path);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
set_important_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
Packit 98cdb6
		   GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
Packit 98cdb6
{
Packit 98cdb6
  GtkToolItem *tool_item;
Packit 98cdb6
Packit 98cdb6
  gtk_tree_model_get (model, iter, 0, &tool_item, -1);
Packit 98cdb6
Packit 98cdb6
  g_object_set (cell, "active", gtk_tool_item_get_is_important (tool_item), NULL);
Packit 98cdb6
  g_object_unref (tool_item);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
important_toggled(GtkCellRendererToggle *cell, const gchar *path_str,
Packit 98cdb6
		  GtkTreeModel *model)
Packit 98cdb6
{
Packit 98cdb6
  GtkTreePath *path;
Packit 98cdb6
  GtkTreeIter iter;
Packit 98cdb6
  GtkToolItem *tool_item;
Packit 98cdb6
Packit 98cdb6
  path = gtk_tree_path_new_from_string (path_str);
Packit 98cdb6
  gtk_tree_model_get_iter (model, &iter, path);
Packit 98cdb6
Packit 98cdb6
  gtk_tree_model_get (model, &iter, 0, &tool_item, -1);
Packit 98cdb6
  gtk_tool_item_set_is_important (tool_item, !gtk_tool_item_get_is_important (tool_item));
Packit 98cdb6
  g_object_unref (tool_item);
Packit 98cdb6
Packit 98cdb6
  gtk_tree_model_row_changed (model, path, &iter);
Packit 98cdb6
  gtk_tree_path_free (path);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static GtkListStore *
Packit 98cdb6
create_items_list (GtkWidget **tree_view_p)
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *tree_view;
Packit 98cdb6
  GtkListStore *list_store;
Packit 98cdb6
  GtkCellRenderer *cell;
Packit 98cdb6
  
Packit 98cdb6
  list_store = gtk_list_store_new (2, GTK_TYPE_TOOL_ITEM, G_TYPE_STRING);
Packit 98cdb6
  
Packit 98cdb6
  tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
Packit 98cdb6
Packit 98cdb6
  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
Packit 98cdb6
					       -1, "Tool Item",
Packit 98cdb6
					       gtk_cell_renderer_text_new (),
Packit 98cdb6
					       "text", 1, NULL);
Packit 98cdb6
Packit 98cdb6
  cell = gtk_cell_renderer_toggle_new ();
Packit 98cdb6
  g_signal_connect (cell, "toggled", G_CALLBACK (visibile_toggled),
Packit 98cdb6
		    list_store);
Packit 98cdb6
  gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (tree_view),
Packit 98cdb6
					      -1, "Visible",
Packit 98cdb6
					      cell,
Packit 98cdb6
					      set_visible_func, NULL, NULL);
Packit 98cdb6
Packit 98cdb6
  cell = gtk_cell_renderer_toggle_new ();
Packit 98cdb6
  g_signal_connect (cell, "toggled", G_CALLBACK (expand_toggled),
Packit 98cdb6
		    list_store);
Packit 98cdb6
  gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (tree_view),
Packit 98cdb6
					      -1, "Expand",
Packit 98cdb6
					      cell,
Packit 98cdb6
					      set_expand_func, NULL, NULL);
Packit 98cdb6
Packit 98cdb6
  cell = gtk_cell_renderer_toggle_new ();
Packit 98cdb6
  g_signal_connect (cell, "toggled", G_CALLBACK (homogeneous_toggled),
Packit 98cdb6
		    list_store);
Packit 98cdb6
  gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (tree_view),
Packit 98cdb6
					      -1, "Homogeneous",
Packit 98cdb6
					      cell,
Packit 98cdb6
					      set_homogeneous_func, NULL,NULL);
Packit 98cdb6
Packit 98cdb6
  cell = gtk_cell_renderer_toggle_new ();
Packit 98cdb6
  g_signal_connect (cell, "toggled", G_CALLBACK (important_toggled),
Packit 98cdb6
		    list_store);
Packit 98cdb6
  gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (tree_view),
Packit 98cdb6
					      -1, "Important",
Packit 98cdb6
					      cell,
Packit 98cdb6
					      set_important_func, NULL,NULL);
Packit 98cdb6
Packit 98cdb6
  g_object_unref (list_store);
Packit 98cdb6
Packit 98cdb6
  *tree_view_p = tree_view;
Packit 98cdb6
Packit 98cdb6
  return list_store;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
add_item_to_list (GtkListStore *store, GtkToolItem *item, const gchar *text)
Packit 98cdb6
{
Packit 98cdb6
  GtkTreeIter iter;
Packit 98cdb6
Packit 98cdb6
  gtk_list_store_append (store, &iter);
Packit 98cdb6
  gtk_list_store_set (store, &iter,
Packit 98cdb6
		      0, item,
Packit 98cdb6
		      1, text,
Packit 98cdb6
		      -1);
Packit 98cdb6
  
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
bold_toggled (GtkToggleToolButton *button)
Packit 98cdb6
{
Packit 98cdb6
  g_message ("Bold toggled (active=%d)",
Packit 98cdb6
	     gtk_toggle_tool_button_get_active (button));
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
set_icon_size_toggled (GtkCheckButton *button, GtkToolbar *toolbar)
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *option_menu;
Packit 98cdb6
  int icon_size;
Packit 98cdb6
  
Packit 98cdb6
  option_menu = g_object_get_data (G_OBJECT (button), "option-menu");
Packit 98cdb6
Packit 98cdb6
  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))
Packit 98cdb6
    {
Packit 98cdb6
      icon_size = gtk_option_menu_get_history (GTK_OPTION_MENU (option_menu));
Packit 98cdb6
      icon_size += GTK_ICON_SIZE_SMALL_TOOLBAR;
Packit 98cdb6
Packit 98cdb6
      gtk_toolbar_set_icon_size (toolbar, icon_size);
Packit 98cdb6
      gtk_widget_set_sensitive (option_menu, TRUE);
Packit 98cdb6
    }
Packit 98cdb6
  else
Packit 98cdb6
    {
Packit 98cdb6
      gtk_toolbar_unset_icon_size (toolbar);
Packit 98cdb6
      gtk_widget_set_sensitive (option_menu, FALSE);
Packit 98cdb6
    }
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
icon_size_history_changed (GtkOptionMenu *menu, GtkToolbar *toolbar)
Packit 98cdb6
{
Packit 98cdb6
  int icon_size;
Packit 98cdb6
Packit 98cdb6
  icon_size = gtk_option_menu_get_history (menu);
Packit 98cdb6
  icon_size += GTK_ICON_SIZE_SMALL_TOOLBAR;
Packit 98cdb6
Packit 98cdb6
  gtk_toolbar_set_icon_size (toolbar, icon_size);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static gboolean
Packit 98cdb6
toolbar_drag_drop (GtkWidget *widget, GdkDragContext *context,
Packit 98cdb6
		   gint x, gint y, guint time, GtkWidget *label)
Packit 98cdb6
{
Packit 98cdb6
  gchar buf[32];
Packit 98cdb6
Packit 98cdb6
  g_snprintf(buf, sizeof(buf), "%d",
Packit 98cdb6
	     gtk_toolbar_get_drop_index (GTK_TOOLBAR (widget), x, y));
Packit 98cdb6
  gtk_label_set_label (GTK_LABEL (label), buf);
Packit 98cdb6
Packit 98cdb6
  return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static GtkTargetEntry target_table[] = {
Packit 98cdb6
  { "application/x-toolbar-item", 0, 0 }
Packit 98cdb6
};
Packit 98cdb6
Packit 98cdb6
static GtkWidget *
Packit 98cdb6
make_prop_editor (GObject *object)
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *prop_editor = create_prop_editor (object, 0);
Packit 98cdb6
  gtk_widget_show (prop_editor);
Packit 98cdb6
  return prop_editor;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
rtl_toggled (GtkCheckButton *check)
Packit 98cdb6
{
Packit 98cdb6
  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)))
Packit 98cdb6
    gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
Packit 98cdb6
  else
Packit 98cdb6
    gtk_widget_set_default_direction (GTK_TEXT_DIR_LTR);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
typedef struct
Packit 98cdb6
{
Packit 98cdb6
  int x;
Packit 98cdb6
  int y;
Packit 98cdb6
} MenuPositionData;
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
position_function (GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer user_data)
Packit 98cdb6
{
Packit 98cdb6
  /* Do not do this in your own code */
Packit 98cdb6
Packit 98cdb6
  MenuPositionData *position_data = user_data;
Packit 98cdb6
Packit 98cdb6
  if (x)
Packit 98cdb6
    *x = position_data->x;
Packit 98cdb6
Packit 98cdb6
  if (y)
Packit 98cdb6
    *y = position_data->y;
Packit 98cdb6
Packit 98cdb6
  if (push_in)
Packit 98cdb6
    *push_in = FALSE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static gboolean
Packit 98cdb6
popup_context_menu (GtkToolbar *toolbar, gint x, gint y, gint button_number)
Packit 98cdb6
{
Packit 98cdb6
  MenuPositionData position_data;
Packit 98cdb6
  
Packit 98cdb6
  GtkMenu *menu = GTK_MENU (gtk_menu_new ());
Packit 98cdb6
  int i;
Packit 98cdb6
Packit 98cdb6
  for (i = 0; i < 5; i++)
Packit 98cdb6
    {
Packit 98cdb6
      GtkWidget *item;
Packit 98cdb6
      gchar *label = g_strdup_printf ("Item _%d", i);
Packit 98cdb6
      item = gtk_menu_item_new_with_mnemonic (label);
Packit 98cdb6
      gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
Packit 98cdb6
    }
Packit 98cdb6
  gtk_widget_show_all (GTK_WIDGET (menu));
Packit 98cdb6
Packit 98cdb6
  if (button_number != -1)
Packit 98cdb6
    {
Packit 98cdb6
      position_data.x = x;
Packit 98cdb6
      position_data.y = y;
Packit 98cdb6
      
Packit 98cdb6
      gtk_menu_popup (menu, NULL, NULL, position_function,
Packit 98cdb6
		      &position_data, button_number, gtk_get_current_event_time());
Packit 98cdb6
    }
Packit 98cdb6
  else
Packit 98cdb6
    gtk_menu_popup (menu, NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time());
Packit 98cdb6
Packit 98cdb6
  return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static GtkToolItem *drag_item = NULL;
Packit 98cdb6
Packit 98cdb6
static gboolean
Packit 98cdb6
toolbar_drag_motion (GtkToolbar     *toolbar,
Packit 98cdb6
		     GdkDragContext *context,
Packit 98cdb6
		     gint            x,
Packit 98cdb6
		     gint            y,
Packit 98cdb6
		     guint           time,
Packit 98cdb6
		     gpointer        null)
Packit 98cdb6
{
Packit 98cdb6
  gint index;
Packit 98cdb6
  
Packit 98cdb6
  if (!drag_item)
Packit 98cdb6
    {
Packit 98cdb6
      drag_item = gtk_tool_button_new (NULL, "A quite long button");
Packit 98cdb6
      gtk_object_sink (GTK_OBJECT (g_object_ref (drag_item)));
Packit 98cdb6
    }
Packit 98cdb6
  
Packit 98cdb6
  gdk_drag_status (context, GDK_ACTION_MOVE, time);
Packit 98cdb6
Packit 98cdb6
  index = gtk_toolbar_get_drop_index (toolbar, x, y);
Packit 98cdb6
  
Packit 98cdb6
  gtk_toolbar_set_drop_highlight_item (toolbar, drag_item, index);
Packit 98cdb6
  
Packit 98cdb6
  return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
toolbar_drag_leave (GtkToolbar     *toolbar,
Packit 98cdb6
		    GdkDragContext *context,
Packit 98cdb6
		    guint           time,
Packit 98cdb6
		    gpointer	    null)
Packit 98cdb6
{
Packit 98cdb6
  if (drag_item)
Packit 98cdb6
    {
Packit 98cdb6
      g_object_unref (drag_item);
Packit 98cdb6
      drag_item = NULL;
Packit 98cdb6
    }
Packit 98cdb6
  
Packit 98cdb6
  gtk_toolbar_set_drop_highlight_item (toolbar, NULL, 0);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static gboolean
Packit 98cdb6
timeout_cb (GtkWidget *widget)
Packit 98cdb6
{
Packit 98cdb6
  static gboolean sensitive = TRUE;
Packit 98cdb6
  
Packit 98cdb6
  sensitive = !sensitive;
Packit 98cdb6
  
Packit 98cdb6
  gtk_widget_set_sensitive (widget, sensitive);
Packit 98cdb6
  
Packit 98cdb6
  return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static gboolean
Packit 98cdb6
timeout_cb1 (GtkWidget *widget)
Packit 98cdb6
{
Packit 98cdb6
	static gboolean sensitive = TRUE;
Packit 98cdb6
	sensitive = !sensitive;
Packit 98cdb6
	gtk_widget_set_sensitive (widget, sensitive);
Packit 98cdb6
	return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gint
Packit 98cdb6
main (gint argc, gchar **argv)
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *window, *toolbar, *table, *treeview, *scrolled_window;
Packit 98cdb6
  GtkWidget *hbox, *hbox1, *hbox2, *checkbox, *option_menu, *menu;
Packit 98cdb6
  gint i;
Packit 98cdb6
  static const gchar *toolbar_styles[] = { "icons", "text", "both (vertical)",
Packit 98cdb6
					   "both (horizontal)" };
Packit 98cdb6
  GtkToolItem *item;
Packit 98cdb6
  GtkListStore *store;
Packit 98cdb6
  GtkWidget *image;
Packit 98cdb6
  GtkWidget *menuitem;
Packit 98cdb6
  GtkWidget *button;
Packit 98cdb6
  GtkWidget *label;
Packit 98cdb6
  GIcon *gicon;
Packit 98cdb6
  GSList *group;
Packit 98cdb6
  
Packit 98cdb6
  gtk_init (&argc, &argv);
Packit 98cdb6
Packit 98cdb6
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
Packit 98cdb6
Packit 98cdb6
  g_signal_connect (window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
Packit 98cdb6
Packit 98cdb6
  table = gtk_table_new (4, 2, FALSE);
Packit 98cdb6
  gtk_container_add (GTK_CONTAINER (window), table);
Packit 98cdb6
Packit 98cdb6
  toolbar = gtk_toolbar_new ();
Packit 98cdb6
  gtk_table_attach (GTK_TABLE (table), toolbar,
Packit 98cdb6
		    0,2, 0,1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
Packit 98cdb6
Packit 98cdb6
  hbox1 = gtk_hbox_new (FALSE, 3);
Packit 98cdb6
  gtk_container_set_border_width (GTK_CONTAINER (hbox1), 5);
Packit 98cdb6
  gtk_table_attach (GTK_TABLE (table), hbox1,
Packit 98cdb6
		    1,2, 1,2, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
Packit 98cdb6
Packit 98cdb6
  hbox2 = gtk_hbox_new (FALSE, 2);
Packit 98cdb6
  gtk_container_set_border_width (GTK_CONTAINER (hbox2), 5);
Packit 98cdb6
  gtk_table_attach (GTK_TABLE (table), hbox2,
Packit 98cdb6
		    1,2, 2,3, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
Packit 98cdb6
Packit 98cdb6
  checkbox = gtk_check_button_new_with_mnemonic("_Vertical");
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (hbox1), checkbox, FALSE, FALSE, 0);
Packit 98cdb6
  g_signal_connect (checkbox, "toggled",
Packit 98cdb6
		    G_CALLBACK (change_orientation), toolbar);
Packit 98cdb6
Packit 98cdb6
  checkbox = gtk_check_button_new_with_mnemonic("_Show Arrow");
Packit 98cdb6
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), TRUE);
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (hbox1), checkbox, FALSE, FALSE, 0);
Packit 98cdb6
  g_signal_connect (checkbox, "toggled",
Packit 98cdb6
		    G_CALLBACK (change_show_arrow), toolbar);
Packit 98cdb6
Packit 98cdb6
  checkbox = gtk_check_button_new_with_mnemonic("_Set Toolbar Style:");
Packit 98cdb6
  g_signal_connect (checkbox, "toggled", G_CALLBACK (set_toolbar_style_toggled), toolbar);
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (hbox1), checkbox, FALSE, FALSE, 0);
Packit 98cdb6
Packit 98cdb6
  option_menu = gtk_combo_box_text_new ();
Packit 98cdb6
  gtk_widget_set_sensitive (option_menu, FALSE);  
Packit 98cdb6
  g_object_set_data (G_OBJECT (checkbox), "option-menu", option_menu);
Packit 98cdb6
  
Packit 98cdb6
  menu = gtk_menu_new();
Packit 98cdb6
  for (i = 0; i < G_N_ELEMENTS (toolbar_styles); i++)
Packit 98cdb6
    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (option_menu), toolbar_styles[i]);
Packit 98cdb6
  gtk_combo_box_set_active (GTK_COMBO_BOX (option_menu),
Packit 98cdb6
                            gtk_toolbar_get_style (GTK_TOOLBAR (toolbar)));
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (hbox2), option_menu, FALSE, FALSE, 0);
Packit 98cdb6
  g_signal_connect (option_menu, "changed",
Packit 98cdb6
		    G_CALLBACK (change_toolbar_style), toolbar);
Packit 98cdb6
Packit 98cdb6
  checkbox = gtk_check_button_new_with_mnemonic("_Set Icon Size:"); 
Packit 98cdb6
  g_signal_connect (checkbox, "toggled", G_CALLBACK (set_icon_size_toggled), toolbar);
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (hbox2), checkbox, FALSE, FALSE, 0);
Packit 98cdb6
Packit 98cdb6
  option_menu = gtk_combo_box_text_new ();
Packit 98cdb6
  g_object_set_data (G_OBJECT (checkbox), "option-menu", option_menu);
Packit 98cdb6
  gtk_widget_set_sensitive (option_menu, FALSE);
Packit 98cdb6
  gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (option_menu), "small toolbar");
Packit 98cdb6
  gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (option_menu), "large toolbar");
Packit 98cdb6
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (hbox2), option_menu, FALSE, FALSE, 0);
Packit 98cdb6
  g_signal_connect (option_menu, "changed",
Packit 98cdb6
		    G_CALLBACK (icon_size_history_changed), toolbar);
Packit 98cdb6
  
Packit 98cdb6
  scrolled_window = gtk_scrolled_window_new (NULL, NULL);
Packit 98cdb6
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
Packit 98cdb6
				  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
Packit 98cdb6
  gtk_table_attach (GTK_TABLE (table), scrolled_window,
Packit 98cdb6
		    1,2, 3,4, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0);
Packit 98cdb6
Packit 98cdb6
  store = create_items_list (&treeview);
Packit 98cdb6
  gtk_container_add (GTK_CONTAINER (scrolled_window), treeview);
Packit 98cdb6
  
Packit 98cdb6
  item = gtk_tool_button_new_from_stock (GTK_STOCK_NEW);
Packit 98cdb6
  gtk_tool_button_set_label (GTK_TOOL_BUTTON (item), "Custom label");
Packit 98cdb6
  gtk_tool_button_set_label (GTK_TOOL_BUTTON (item), NULL);
Packit 98cdb6
  add_item_to_list (store, item, "New");
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
  gdk_threads_add_timeout (3000, (GSourceFunc) timeout_cb, item);
Packit 98cdb6
  gtk_tool_item_set_expand (item, TRUE);
Packit 98cdb6
Packit 98cdb6
  menu = gtk_menu_new ();
Packit 98cdb6
  for (i = 0; i < 20; i++)
Packit 98cdb6
    {
Packit 98cdb6
      char *text;
Packit 98cdb6
      text = g_strdup_printf ("Menuitem %d", i);
Packit 98cdb6
      menuitem = gtk_menu_item_new_with_label (text);
Packit 98cdb6
      g_free (text);
Packit 98cdb6
      gtk_widget_show (menuitem);
Packit 98cdb6
      gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
Packit 98cdb6
    }
Packit 98cdb6
Packit 98cdb6
  item = gtk_menu_tool_button_new_from_stock (GTK_STOCK_OPEN);
Packit 98cdb6
  gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (item), menu);
Packit 98cdb6
  add_item_to_list (store, item, "Open");
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
  gdk_threads_add_timeout (3000, (GSourceFunc) timeout_cb1, item);
Packit 98cdb6
 
Packit 98cdb6
  menu = gtk_menu_new ();
Packit 98cdb6
  for (i = 0; i < 20; i++)
Packit 98cdb6
    {
Packit 98cdb6
      char *text;
Packit 98cdb6
      text = g_strdup_printf ("A%d", i);
Packit 98cdb6
      menuitem = gtk_menu_item_new_with_label (text);
Packit 98cdb6
      g_free (text);
Packit 98cdb6
      gtk_widget_show (menuitem);
Packit 98cdb6
      gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
Packit 98cdb6
    }
Packit 98cdb6
Packit 98cdb6
  item = gtk_menu_tool_button_new_from_stock (GTK_STOCK_GO_BACK);
Packit 98cdb6
  gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (item), menu);
Packit 98cdb6
  add_item_to_list (store, item, "BackWithHistory");
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
 
Packit 98cdb6
  item = gtk_separator_tool_item_new ();
Packit 98cdb6
  add_item_to_list (store, item, "-----");    
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
  
Packit 98cdb6
  item = gtk_tool_button_new_from_stock (GTK_STOCK_REFRESH);
Packit 98cdb6
  add_item_to_list (store, item, "Refresh");
Packit 98cdb6
  g_signal_connect (item, "clicked", G_CALLBACK (reload_clicked), NULL);
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
Packit 98cdb6
  image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG);
Packit 98cdb6
  item = gtk_tool_item_new ();
Packit 98cdb6
  gtk_widget_show (image);
Packit 98cdb6
  gtk_container_add (GTK_CONTAINER (item), image);
Packit 98cdb6
  add_item_to_list (store, item, "(Custom Item)");    
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
  
Packit 98cdb6
  item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_BACK);
Packit 98cdb6
  add_item_to_list (store, item, "Back");    
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
Packit 98cdb6
  item = gtk_separator_tool_item_new ();
Packit 98cdb6
  add_item_to_list (store, item, "-----");  
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
  
Packit 98cdb6
  item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_FORWARD);
Packit 98cdb6
  add_item_to_list (store, item, "Forward");  
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
Packit 98cdb6
  item = gtk_toggle_tool_button_new_from_stock (GTK_STOCK_BOLD);
Packit 98cdb6
  g_signal_connect (item, "toggled", G_CALLBACK (bold_toggled), NULL);
Packit 98cdb6
  add_item_to_list (store, item, "Bold");  
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
  gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE);
Packit 98cdb6
Packit 98cdb6
  item = gtk_separator_tool_item_new ();
Packit 98cdb6
  add_item_to_list (store, item, "-----");  
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
  gtk_tool_item_set_expand (item, TRUE);
Packit 98cdb6
  gtk_separator_tool_item_set_draw (GTK_SEPARATOR_TOOL_ITEM (item), FALSE);
Packit 98cdb6
  g_assert (gtk_toolbar_get_nth_item (GTK_TOOLBAR (toolbar), 0) != 0);
Packit 98cdb6
  
Packit 98cdb6
  item = gtk_radio_tool_button_new_from_stock (NULL, GTK_STOCK_JUSTIFY_LEFT);
Packit 98cdb6
  group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (item));
Packit 98cdb6
  add_item_to_list (store, item, "Left");
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
  
Packit 98cdb6
  
Packit 98cdb6
  item = gtk_radio_tool_button_new_from_stock (group, GTK_STOCK_JUSTIFY_CENTER);
Packit 98cdb6
  make_prop_editor (G_OBJECT (item));
Packit 98cdb6
Packit 98cdb6
  group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (item));
Packit 98cdb6
  add_item_to_list (store, item, "Center");
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
Packit 98cdb6
  item = gtk_radio_tool_button_new_from_stock (group, GTK_STOCK_JUSTIFY_RIGHT);
Packit 98cdb6
  add_item_to_list (store, item, "Right");
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
Packit 98cdb6
  item = gtk_tool_button_new (gtk_image_new_from_file ("apple-red.png"), "_Apple");
Packit 98cdb6
  add_item_to_list (store, item, "Apple");
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
  gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (item), TRUE);
Packit 98cdb6
Packit 98cdb6
  gicon = g_content_type_get_icon ("video/ogg");
Packit 98cdb6
  image = gtk_image_new_from_gicon (gicon, GTK_ICON_SIZE_LARGE_TOOLBAR);
Packit 98cdb6
  g_object_unref (gicon);
Packit 98cdb6
  item = gtk_tool_button_new (image, "Video");
Packit 98cdb6
  add_item_to_list (store, item, "Video");
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
Packit 98cdb6
  image = gtk_image_new_from_icon_name ("utility-terminal", GTK_ICON_SIZE_LARGE_TOOLBAR);
Packit 98cdb6
  item = gtk_tool_button_new (image, "Terminal");
Packit 98cdb6
  add_item_to_list (store, item, "Terminal");
Packit 98cdb6
  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
Packit 98cdb6
Packit 98cdb6
  hbox = gtk_hbox_new (FALSE, 5);
Packit 98cdb6
  gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
Packit 98cdb6
  gtk_table_attach (GTK_TABLE (table), hbox,
Packit 98cdb6
		    1,2, 4,5, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
Packit 98cdb6
Packit 98cdb6
  button = gtk_button_new_with_label ("Drag me to the toolbar");
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
Packit 98cdb6
Packit 98cdb6
  label = gtk_label_new ("Drop index:");
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
Packit 98cdb6
Packit 98cdb6
  label = gtk_label_new ("");
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
Packit 98cdb6
Packit 98cdb6
  checkbox = gtk_check_button_new_with_mnemonic("_Right to left");
Packit 98cdb6
  if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
Packit 98cdb6
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), TRUE);
Packit 98cdb6
  else
Packit 98cdb6
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), FALSE);
Packit 98cdb6
  g_signal_connect (checkbox, "toggled", G_CALLBACK (rtl_toggled), NULL);
Packit 98cdb6
Packit 98cdb6
  gtk_box_pack_end (GTK_BOX (hbox), checkbox, FALSE, FALSE, 0);
Packit 98cdb6
  
Packit 98cdb6
  gtk_drag_source_set (button, GDK_BUTTON1_MASK,
Packit 98cdb6
		       target_table, G_N_ELEMENTS (target_table),
Packit 98cdb6
		       GDK_ACTION_MOVE);
Packit 98cdb6
  gtk_drag_dest_set (toolbar, GTK_DEST_DEFAULT_DROP,
Packit 98cdb6
		     target_table, G_N_ELEMENTS (target_table),
Packit 98cdb6
		     GDK_ACTION_MOVE);
Packit 98cdb6
  g_signal_connect (toolbar, "drag_motion",
Packit 98cdb6
		    G_CALLBACK (toolbar_drag_motion), NULL);
Packit 98cdb6
  g_signal_connect (toolbar, "drag_leave",
Packit 98cdb6
		    G_CALLBACK (toolbar_drag_leave), NULL);
Packit 98cdb6
  g_signal_connect (toolbar, "drag_drop",
Packit 98cdb6
		    G_CALLBACK (toolbar_drag_drop), label);
Packit 98cdb6
Packit 98cdb6
  gtk_widget_show_all (window);
Packit 98cdb6
Packit 98cdb6
  make_prop_editor (G_OBJECT (toolbar));
Packit 98cdb6
Packit 98cdb6
  g_signal_connect (window, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
Packit 98cdb6
  
Packit 98cdb6
  g_signal_connect (toolbar, "popup_context_menu", G_CALLBACK (popup_context_menu), NULL);
Packit 98cdb6
  
Packit 98cdb6
  gtk_main ();
Packit 98cdb6
  
Packit 98cdb6
  return 0;
Packit 98cdb6
}