X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=tests%2Ftesttoolbar.c;h=cd82dacb4ea065517e7b906ed1d8ffd28a93e2cc;hb=HEAD;hp=6ad3b8e8486241f4585d5c0276f7f41754e49627;hpb=2669847342d37bdbbe9107128579de090e1a121a;p=~andy%2Fgtk diff --git a/tests/testtoolbar.c b/tests/testtoolbar.c index 6ad3b8e84..cd82dacb4 100644 --- a/tests/testtoolbar.c +++ b/tests/testtoolbar.c @@ -15,56 +15,38 @@ * 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., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ - +#include "config.h" #include #include "prop-editor.h" -static void -reload_clicked (GtkWidget *widget) -{ - static GdkAtom atom_rcfiles = GDK_NONE; - - GdkEventClient sev; - int i; - - if (!atom_rcfiles) - atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE); - - for(i = 0; i < 5; i++) - sev.data.l[i] = 0; - sev.data_format = 32; - sev.message_type = atom_rcfiles; - gdk_event_send_clientmessage_toall ((GdkEvent *) &sev); -} - static void change_orientation (GtkWidget *button, GtkWidget *toolbar) { - GtkWidget *table; + GtkWidget *grid; GtkOrientation orientation; - table = gtk_widget_get_parent (toolbar); + grid = gtk_widget_get_parent (toolbar); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) orientation = GTK_ORIENTATION_VERTICAL; else orientation = GTK_ORIENTATION_HORIZONTAL; g_object_ref (toolbar); - gtk_container_remove (GTK_CONTAINER (table), toolbar); - gtk_toolbar_set_orientation (GTK_TOOLBAR (toolbar), orientation); + gtk_container_remove (GTK_CONTAINER (grid), toolbar); + gtk_orientable_set_orientation (GTK_ORIENTABLE (toolbar), orientation); if (orientation == GTK_ORIENTATION_HORIZONTAL) { - gtk_table_attach (GTK_TABLE (table), toolbar, - 0,2, 0,1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0); + gtk_widget_set_hexpand (toolbar, TRUE); + gtk_widget_set_vexpand (toolbar, FALSE); + gtk_grid_attach (GTK_GRID (grid), toolbar, 0, 0, 2, 1); } else { - gtk_table_attach (GTK_TABLE (table), toolbar, - 0,1, 0,4, GTK_FILL, GTK_FILL|GTK_EXPAND, 0, 0); + gtk_widget_set_hexpand (toolbar, FALSE); + gtk_widget_set_vexpand (toolbar, TRUE); + gtk_grid_attach (GTK_GRID (grid), toolbar, 0, 0, 1, 5); } g_object_unref (toolbar); } @@ -86,7 +68,7 @@ set_toolbar_style_toggled (GtkCheckButton *button, GtkToolbar *toolbar) if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) { - style = gtk_option_menu_get_history (GTK_OPTION_MENU (option_menu)); + style = gtk_combo_box_get_active (GTK_COMBO_BOX (option_menu)); gtk_toolbar_set_style (toolbar, style); gtk_widget_set_sensitive (option_menu, TRUE); @@ -103,7 +85,7 @@ change_toolbar_style (GtkWidget *option_menu, GtkWidget *toolbar) { GtkToolbarStyle style; - style = gtk_option_menu_get_history (GTK_OPTION_MENU (option_menu)); + style = gtk_combo_box_get_active (GTK_COMBO_BOX (option_menu)); gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), style); } @@ -116,8 +98,8 @@ set_visible_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, gtk_tree_model_get (model, iter, 0, &tool_item, -1); - g_object_get (G_OBJECT (tool_item), "visible", &visible, NULL); - g_object_set (G_OBJECT (cell), "active", visible, NULL); + g_object_get (tool_item, "visible", &visible, NULL); + g_object_set (cell, "active", visible, NULL); g_object_unref (tool_item); } @@ -134,8 +116,8 @@ visibile_toggled(GtkCellRendererToggle *cell, const gchar *path_str, gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_get (model, &iter, 0, &tool_item, -1); - g_object_get (G_OBJECT (tool_item), "visible", &visible, NULL); - g_object_set (G_OBJECT (tool_item), "visible", !visible, NULL); + g_object_get (tool_item, "visible", &visible, NULL); + g_object_set (tool_item, "visible", !visible, NULL); g_object_unref (tool_item); gtk_tree_model_row_changed (model, path, &iter); @@ -150,7 +132,7 @@ set_expand_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, gtk_tree_model_get (model, iter, 0, &tool_item, -1); - g_object_set (G_OBJECT (cell), "active", tool_item->expand, NULL); + g_object_set (cell, "active", gtk_tool_item_get_expand (tool_item), NULL); g_object_unref (tool_item); } @@ -166,7 +148,7 @@ expand_toggled(GtkCellRendererToggle *cell, const gchar *path_str, gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_get (model, &iter, 0, &tool_item, -1); - gtk_tool_item_set_expand (tool_item, !tool_item->expand); + gtk_tool_item_set_expand (tool_item, !gtk_tool_item_get_expand (tool_item)); g_object_unref (tool_item); gtk_tree_model_row_changed (model, path, &iter); @@ -174,20 +156,20 @@ expand_toggled(GtkCellRendererToggle *cell, const gchar *path_str, } static void -set_pack_end_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, - GtkTreeModel *model, GtkTreeIter *iter, gpointer data) +set_homogeneous_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, + GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { GtkToolItem *tool_item; gtk_tree_model_get (model, iter, 0, &tool_item, -1); - g_object_set (G_OBJECT (cell), "active", tool_item->pack_end, NULL); + g_object_set (cell, "active", gtk_tool_item_get_homogeneous (tool_item), NULL); g_object_unref (tool_item); } static void -pack_end_toggled(GtkCellRendererToggle *cell, const gchar *path_str, - GtkTreeModel *model) +homogeneous_toggled(GtkCellRendererToggle *cell, const gchar *path_str, + GtkTreeModel *model) { GtkTreePath *path; GtkTreeIter iter; @@ -197,28 +179,29 @@ pack_end_toggled(GtkCellRendererToggle *cell, const gchar *path_str, gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_get (model, &iter, 0, &tool_item, -1); - gtk_tool_item_set_pack_end (tool_item, !tool_item->pack_end); + gtk_tool_item_set_homogeneous (tool_item, !gtk_tool_item_get_homogeneous (tool_item)); g_object_unref (tool_item); gtk_tree_model_row_changed (model, path, &iter); gtk_tree_path_free (path); } + static void -set_homogeneous_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, - GtkTreeModel *model, GtkTreeIter *iter, gpointer data) +set_important_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, + GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { GtkToolItem *tool_item; gtk_tree_model_get (model, iter, 0, &tool_item, -1); - g_object_set (G_OBJECT (cell), "active", tool_item->homogeneous, NULL); + g_object_set (cell, "active", gtk_tool_item_get_is_important (tool_item), NULL); g_object_unref (tool_item); } static void -homogeneous_toggled(GtkCellRendererToggle *cell, const gchar *path_str, - GtkTreeModel *model) +important_toggled(GtkCellRendererToggle *cell, const gchar *path_str, + GtkTreeModel *model) { GtkTreePath *path; GtkTreeIter iter; @@ -228,7 +211,7 @@ homogeneous_toggled(GtkCellRendererToggle *cell, const gchar *path_str, gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_get (model, &iter, 0, &tool_item, -1); - gtk_tool_item_set_homogeneous (tool_item, !tool_item->homogeneous); + gtk_tool_item_set_is_important (tool_item, !gtk_tool_item_get_is_important (tool_item)); g_object_unref (tool_item); gtk_tree_model_row_changed (model, path, &iter); @@ -268,20 +251,20 @@ create_items_list (GtkWidget **tree_view_p) set_expand_func, NULL, NULL); cell = gtk_cell_renderer_toggle_new (); - g_signal_connect (cell, "toggled", G_CALLBACK (pack_end_toggled), + g_signal_connect (cell, "toggled", G_CALLBACK (homogeneous_toggled), list_store); gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (tree_view), - -1, "Pack End", + -1, "Homogeneous", cell, - set_pack_end_func, NULL, NULL); + set_homogeneous_func, NULL,NULL); cell = gtk_cell_renderer_toggle_new (); - g_signal_connect (cell, "toggled", G_CALLBACK (homogeneous_toggled), + g_signal_connect (cell, "toggled", G_CALLBACK (important_toggled), list_store); gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (tree_view), - -1, "Homogeneous", + -1, "Important", cell, - set_homogeneous_func, NULL,NULL); + set_important_func, NULL,NULL); g_object_unref (list_store); @@ -320,8 +303,10 @@ set_icon_size_toggled (GtkCheckButton *button, GtkToolbar *toolbar) if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) { - icon_size = gtk_option_menu_get_history (GTK_OPTION_MENU (option_menu)); - icon_size += GTK_ICON_SIZE_SMALL_TOOLBAR; + if (gtk_combo_box_get_active (GTK_COMBO_BOX (option_menu)) == 0) + icon_size = GTK_ICON_SIZE_SMALL_TOOLBAR; + else + icon_size = GTK_ICON_SIZE_LARGE_TOOLBAR; gtk_toolbar_set_icon_size (toolbar, icon_size); gtk_widget_set_sensitive (option_menu, TRUE); @@ -334,12 +319,14 @@ set_icon_size_toggled (GtkCheckButton *button, GtkToolbar *toolbar) } static void -icon_size_history_changed (GtkOptionMenu *menu, GtkToolbar *toolbar) +icon_size_history_changed (GtkComboBox *menu, GtkToolbar *toolbar) { int icon_size; - icon_size = gtk_option_menu_get_history (menu); - icon_size += GTK_ICON_SIZE_SMALL_TOOLBAR; + if (gtk_combo_box_get_active (menu) == 0) + icon_size = GTK_ICON_SIZE_SMALL_TOOLBAR; + else + icon_size = GTK_ICON_SIZE_LARGE_TOOLBAR; gtk_toolbar_set_icon_size (toolbar, icon_size); } @@ -378,11 +365,128 @@ rtl_toggled (GtkCheckButton *check) gtk_widget_set_default_direction (GTK_TEXT_DIR_LTR); } +typedef struct +{ + int x; + int y; +} MenuPositionData; + +static void +position_function (GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer user_data) +{ + /* Do not do this in your own code */ + + MenuPositionData *position_data = user_data; + + if (x) + *x = position_data->x; + + if (y) + *y = position_data->y; + + if (push_in) + *push_in = FALSE; +} + +static gboolean +popup_context_menu (GtkToolbar *toolbar, gint x, gint y, gint button_number) +{ + MenuPositionData position_data; + + GtkMenu *menu = GTK_MENU (gtk_menu_new ()); + int i; + + for (i = 0; i < 5; i++) + { + GtkWidget *item; + gchar *label = g_strdup_printf ("Item _%d", i); + item = gtk_menu_item_new_with_mnemonic (label); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + } + gtk_widget_show_all (GTK_WIDGET (menu)); + + if (button_number != -1) + { + position_data.x = x; + position_data.y = y; + + gtk_menu_popup (menu, NULL, NULL, position_function, + &position_data, button_number, gtk_get_current_event_time()); + } + else + gtk_menu_popup (menu, NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time()); + + return TRUE; +} + +static GtkToolItem *drag_item = NULL; + +static gboolean +toolbar_drag_motion (GtkToolbar *toolbar, + GdkDragContext *context, + gint x, + gint y, + guint time, + gpointer null) +{ + gint index; + + if (!drag_item) + { + drag_item = gtk_tool_button_new (NULL, "A quite long button"); + g_object_ref_sink (g_object_ref (drag_item)); + } + + gdk_drag_status (context, GDK_ACTION_MOVE, time); + + index = gtk_toolbar_get_drop_index (toolbar, x, y); + + gtk_toolbar_set_drop_highlight_item (toolbar, drag_item, index); + + return TRUE; +} + +static void +toolbar_drag_leave (GtkToolbar *toolbar, + GdkDragContext *context, + guint time, + gpointer null) +{ + if (drag_item) + { + g_object_unref (drag_item); + drag_item = NULL; + } + + gtk_toolbar_set_drop_highlight_item (toolbar, NULL, 0); +} + +static gboolean +timeout_cb (GtkWidget *widget) +{ + static gboolean sensitive = TRUE; + + sensitive = !sensitive; + + gtk_widget_set_sensitive (widget, sensitive); + + return TRUE; +} + +static gboolean +timeout_cb1 (GtkWidget *widget) +{ + static gboolean sensitive = TRUE; + sensitive = !sensitive; + gtk_widget_set_sensitive (widget, sensitive); + return TRUE; +} + gint main (gint argc, gchar **argv) { - GtkWidget *window, *toolbar, *table, *treeview, *scrolled_window; - GtkWidget *hbox, *checkbox, *option_menu, *menu; + GtkWidget *window, *toolbar, *grid, *treeview, *scrolled_window; + GtkWidget *hbox, *hbox1, *hbox2, *checkbox, *option_menu, *menu; gint i; static const gchar *toolbar_styles[] = { "icons", "text", "both (vertical)", "both (horizontal)" }; @@ -392,6 +496,7 @@ main (gint argc, gchar **argv) GtkWidget *menuitem; GtkWidget *button; GtkWidget *label; + GIcon *gicon; GSList *group; gtk_init (&argc, &argv); @@ -400,80 +505,70 @@ main (gint argc, gchar **argv) g_signal_connect (window, "destroy", G_CALLBACK(gtk_main_quit), NULL); - table = gtk_table_new (4, 2, FALSE); - gtk_container_add (GTK_CONTAINER (window), table); + grid = gtk_grid_new (); + gtk_container_add (GTK_CONTAINER (window), grid); toolbar = gtk_toolbar_new (); - gtk_table_attach (GTK_TABLE (table), toolbar, - 0,2, 0,1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0); + gtk_widget_set_vexpand (toolbar, TRUE); + gtk_grid_attach (GTK_GRID (grid), toolbar, 0, 0, 2, 1); - hbox = gtk_hbox_new (FALSE, 5); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); - gtk_table_attach (GTK_TABLE (table), hbox, - 1,2, 1,2, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0); + hbox1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3); + gtk_container_set_border_width (GTK_CONTAINER (hbox1), 5); + gtk_widget_set_vexpand (hbox1, TRUE); + gtk_grid_attach (GTK_GRID (grid), hbox1, 1, 1, 1, 1); + + hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); + gtk_container_set_border_width (GTK_CONTAINER (hbox2), 5); + gtk_widget_set_vexpand (hbox2, TRUE); + gtk_grid_attach (GTK_GRID (grid), hbox2, 1, 2, 1, 1); checkbox = gtk_check_button_new_with_mnemonic("_Vertical"); - gtk_box_pack_start (GTK_BOX (hbox), checkbox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox1), checkbox, FALSE, FALSE, 0); g_signal_connect (checkbox, "toggled", G_CALLBACK (change_orientation), toolbar); checkbox = gtk_check_button_new_with_mnemonic("_Show Arrow"); - gtk_box_pack_start (GTK_BOX (hbox), checkbox, FALSE, FALSE, 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), TRUE); + gtk_box_pack_start (GTK_BOX (hbox1), checkbox, FALSE, FALSE, 0); g_signal_connect (checkbox, "toggled", G_CALLBACK (change_show_arrow), toolbar); checkbox = gtk_check_button_new_with_mnemonic("_Set Toolbar Style:"); g_signal_connect (checkbox, "toggled", G_CALLBACK (set_toolbar_style_toggled), toolbar); - gtk_box_pack_start (GTK_BOX (hbox), checkbox, FALSE, FALSE, 0); - - option_menu = gtk_option_menu_new(); + gtk_box_pack_start (GTK_BOX (hbox1), checkbox, FALSE, FALSE, 0); + + option_menu = gtk_combo_box_text_new (); gtk_widget_set_sensitive (option_menu, FALSE); g_object_set_data (G_OBJECT (checkbox), "option-menu", option_menu); - menu = gtk_menu_new(); for (i = 0; i < G_N_ELEMENTS (toolbar_styles); i++) - { - GtkWidget *menuitem; - - menuitem = gtk_menu_item_new_with_label (toolbar_styles[i]); - gtk_container_add (GTK_CONTAINER (menu), menuitem); - gtk_widget_show (menuitem); - } - gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), menu); - gtk_option_menu_set_history (GTK_OPTION_MENU (option_menu), - GTK_TOOLBAR (toolbar)->style); - gtk_box_pack_start (GTK_BOX (hbox), option_menu, FALSE, FALSE, 0); + gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (option_menu), toolbar_styles[i]); + gtk_combo_box_set_active (GTK_COMBO_BOX (option_menu), + gtk_toolbar_get_style (GTK_TOOLBAR (toolbar))); + gtk_box_pack_start (GTK_BOX (hbox2), option_menu, FALSE, FALSE, 0); g_signal_connect (option_menu, "changed", G_CALLBACK (change_toolbar_style), toolbar); checkbox = gtk_check_button_new_with_mnemonic("_Set Icon Size:"); g_signal_connect (checkbox, "toggled", G_CALLBACK (set_icon_size_toggled), toolbar); - gtk_box_pack_start (GTK_BOX (hbox), checkbox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox2), checkbox, FALSE, FALSE, 0); - option_menu = gtk_option_menu_new(); + option_menu = gtk_combo_box_text_new (); g_object_set_data (G_OBJECT (checkbox), "option-menu", option_menu); gtk_widget_set_sensitive (option_menu, FALSE); - menu = gtk_menu_new(); - menuitem = gtk_menu_item_new_with_label ("small toolbar"); - g_object_set_data (G_OBJECT (menuitem), "value-id", GINT_TO_POINTER (GTK_ICON_SIZE_SMALL_TOOLBAR)); - gtk_container_add (GTK_CONTAINER (menu), menuitem); - gtk_widget_show (menuitem); - - menuitem = gtk_menu_item_new_with_label ("large toolbar"); - g_object_set_data (G_OBJECT (menuitem), "value-id", GINT_TO_POINTER (GTK_ICON_SIZE_LARGE_TOOLBAR)); - gtk_container_add (GTK_CONTAINER (menu), menuitem); - gtk_widget_show (menuitem); - - gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), menu); - gtk_box_pack_start (GTK_BOX (hbox), option_menu, FALSE, FALSE, 0); + gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (option_menu), "small toolbar"); + gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (option_menu), "large toolbar"); + + gtk_box_pack_start (GTK_BOX (hbox2), option_menu, FALSE, FALSE, 0); g_signal_connect (option_menu, "changed", G_CALLBACK (icon_size_history_changed), toolbar); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_table_attach (GTK_TABLE (table), scrolled_window, - 1,2, 2,3, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); + gtk_widget_set_hexpand (scrolled_window, TRUE); + gtk_widget_set_vexpand (scrolled_window, TRUE); + gtk_grid_attach (GTK_GRID (grid), scrolled_window, 1, 3, 1, 1); store = create_items_list (&treeview); gtk_container_add (GTK_CONTAINER (scrolled_window), treeview); @@ -483,20 +578,46 @@ main (gint argc, gchar **argv) gtk_tool_button_set_label (GTK_TOOL_BUTTON (item), NULL); add_item_to_list (store, item, "New"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); + gdk_threads_add_timeout (3000, (GSourceFunc) timeout_cb, item); + gtk_tool_item_set_expand (item, TRUE); + + menu = gtk_menu_new (); + for (i = 0; i < 20; i++) + { + char *text; + text = g_strdup_printf ("Menuitem %d", i); + menuitem = gtk_menu_item_new_with_label (text); + g_free (text); + gtk_widget_show (menuitem); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); + } - item = gtk_tool_button_new_from_stock (GTK_STOCK_OPEN); + item = gtk_menu_tool_button_new_from_stock (GTK_STOCK_OPEN); + gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (item), menu); add_item_to_list (store, item, "Open"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); + gdk_threads_add_timeout (3000, (GSourceFunc) timeout_cb1, item); + + menu = gtk_menu_new (); + for (i = 0; i < 20; i++) + { + char *text; + text = g_strdup_printf ("A%d", i); + menuitem = gtk_menu_item_new_with_label (text); + g_free (text); + gtk_widget_show (menuitem); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); + } + item = gtk_menu_tool_button_new_from_stock (GTK_STOCK_GO_BACK); + gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (item), menu); + add_item_to_list (store, item, "BackWithHistory"); + gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); + item = gtk_separator_tool_item_new (); add_item_to_list (store, item, "-----"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); - item = gtk_tool_button_new_from_stock (GTK_STOCK_REFRESH); - add_item_to_list (store, item, "Refresh"); - g_signal_connect (item, "clicked", G_CALLBACK (reload_clicked), NULL); - gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); - image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG); item = gtk_tool_item_new (); gtk_widget_show (image); @@ -520,31 +641,59 @@ main (gint argc, gchar **argv) g_signal_connect (item, "toggled", G_CALLBACK (bold_toggled), NULL); add_item_to_list (store, item, "Bold"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); + gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE); item = gtk_separator_tool_item_new (); add_item_to_list (store, item, "-----"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); - + gtk_tool_item_set_expand (item, TRUE); + gtk_separator_tool_item_set_draw (GTK_SEPARATOR_TOOL_ITEM (item), FALSE); + g_assert (gtk_toolbar_get_nth_item (GTK_TOOLBAR (toolbar), 0) != 0); + item = gtk_radio_tool_button_new_from_stock (NULL, GTK_STOCK_JUSTIFY_LEFT); group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (item)); add_item_to_list (store, item, "Left"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); - item = gtk_radio_tool_button_new_from_stock (group, GTK_STOCK_JUSTIFY_CENTER); make_prop_editor (G_OBJECT (item)); + + item = gtk_radio_tool_button_new_from_stock (group, GTK_STOCK_JUSTIFY_CENTER); + make_prop_editor (G_OBJECT (item)); - group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (item)); + group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (item)); add_item_to_list (store, item, "Center"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_radio_tool_button_new_from_stock (group, GTK_STOCK_JUSTIFY_RIGHT); - add_item_to_list (store, item, "Right"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); - hbox = gtk_hbox_new (FALSE, 5); + item = gtk_tool_button_new (gtk_image_new_from_file ("apple-red.png"), "_Apple"); + add_item_to_list (store, item, "Apple"); + gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); + gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (item), TRUE); + + gicon = g_content_type_get_icon ("video/ogg"); + image = gtk_image_new_from_gicon (gicon, GTK_ICON_SIZE_LARGE_TOOLBAR); + g_object_unref (gicon); + item = gtk_tool_button_new (image, "Video"); + add_item_to_list (store, item, "Video"); + gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); + + image = gtk_image_new_from_icon_name ("utilities-terminal", GTK_ICON_SIZE_LARGE_TOOLBAR); + item = gtk_tool_button_new (image, "Terminal"); + add_item_to_list (store, item, "Terminal"); + gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); + + image = gtk_spinner_new (); + gtk_spinner_start (GTK_SPINNER (image)); + item = gtk_tool_button_new (image, "Spinner"); + add_item_to_list (store, item, "Spinner"); + gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); + + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5); gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); - gtk_table_attach (GTK_TABLE (table), hbox, - 1,2, 3,4, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0); + gtk_widget_set_hexpand (hbox, TRUE); + gtk_grid_attach (GTK_GRID (grid), hbox, 1, 4, 1, 1); button = gtk_button_new_with_label ("Drag me to the toolbar"); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); @@ -570,12 +719,20 @@ main (gint argc, gchar **argv) gtk_drag_dest_set (toolbar, GTK_DEST_DEFAULT_DROP, target_table, G_N_ELEMENTS (target_table), GDK_ACTION_MOVE); + g_signal_connect (toolbar, "drag_motion", + G_CALLBACK (toolbar_drag_motion), NULL); + g_signal_connect (toolbar, "drag_leave", + G_CALLBACK (toolbar_drag_leave), NULL); g_signal_connect (toolbar, "drag_drop", G_CALLBACK (toolbar_drag_drop), label); gtk_widget_show_all (window); make_prop_editor (G_OBJECT (toolbar)); + + g_signal_connect (window, "delete_event", G_CALLBACK (gtk_main_quit), NULL); + + g_signal_connect (toolbar, "popup_context_menu", G_CALLBACK (popup_context_menu), NULL); gtk_main ();