Add new toolbar headers

Wed Jul  2 15:42:26 2003  Soeren Sandmann  <sandmann@daimi.au.dk>

	* gtk/gtk.h: Add new toolbar headers

	* tests/testtoolbar.c: new file

	* tests/Makefile.am (noinst_PROGRAMS): Add testtoolbar.c

	* gtk/gtkexpander.c (gtk_expander_class_init): Make it compile

Tue Jul  1 22:49:25 2003  Soeren Sandmann  <sandmann@daimi.au.dk>

	* gtk/gtktoolbar.c:
	(gtk_toolbar_remove_tool_item): Fix bug where list is changed
	inside a for loop (pointed out by Morten Welinder).
	(gtk_toolbar_focus_home_or_end): Minor formatting change

	Comments from Owen:

	* gtk/gtktoolbutton.c: remove copy of elide_underscores(). Use
	gtk_toolbar_elide_underscores instead.

	* gtk/gtktoolbar.c: rename signal from focus_ends to
	focus_home_or_end.
	(_gtk_toolbar_elide_underscores): export this as an internal
	function.
	(gtk_toolbar_move_focus): add comment explaining difference to
	gtk_toolbar_focus();
	(gtk_toolbar_list_children_in_focus_order): Make TAB_FORWARD and
	TAB_BACKWARD focus the right widgets in RTL mode

	* gtk/gtktoolbutton.c (gtk_tool_button_new): Change to take
	"label" and "icon" parameters

	* gtk/gtktoolbutton.[ch]: remove icon_set property.
This commit is contained in:
Soeren Sandmann 2003-07-02 14:04:43 +00:00 committed by Søren Sandmann Pedersen
parent 39f5280dcb
commit 2669847342
13 changed files with 999 additions and 213 deletions

View File

@ -1,3 +1,39 @@
Wed Jul 2 15:42:26 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtk.h: Add new toolbar headers
* tests/testtoolbar.c: new file
* tests/Makefile.am (noinst_PROGRAMS): Add testtoolbar.c
* gtk/gtkexpander.c (gtk_expander_class_init): Make it compile
Tue Jul 1 22:49:25 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtktoolbar.c:
(gtk_toolbar_remove_tool_item): Fix bug where list is changed
inside a for loop (pointed out by Morten Welinder).
(gtk_toolbar_focus_home_or_end): Minor formatting change
Comments from Owen:
* gtk/gtktoolbutton.c: remove copy of elide_underscores(). Use
gtk_toolbar_elide_underscores instead.
* gtk/gtktoolbar.c: rename signal from focus_ends to
focus_home_or_end.
(_gtk_toolbar_elide_underscores): export this as an internal
function.
(gtk_toolbar_move_focus): add comment explaining difference to
gtk_toolbar_focus();
(gtk_toolbar_list_children_in_focus_order): Make TAB_FORWARD and
TAB_BACKWARD focus the right widgets in RTL mode
* gtk/gtktoolbutton.c (gtk_tool_button_new): Change to take
"label" and "icon" parameters
* gtk/gtktoolbutton.[ch]: remove icon_set property.
2003-07-01 Matthias Clasen <maclas@gmx.de>
* gtk/gtkspinbutton.c (gtk_spin_button_set_digits): Improve docs. (116364, Morten Welinder)
@ -64,21 +100,36 @@
Mon Jun 30 01:20:19 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtkradiotoolbutton.c
* gtkradiotoolbutton.h
* gtktoggletoolbutton.c
* gtktoggletoolbutton.h
* gtktoolbutton.c
* gtktoolbutton.h
* gtktoolitem.c
* gtktoolitem.h
* gtktoolbar.c
* gtktoolbar.h
* gtkseparatortoolitem.c
* gtkseparatortoolitem.h
* gtkradiotoolbutton.c: new file
* gtkradiotoolbutton.h: "
* gtktoggletoolbutton.c: "
* gtktoggletoolbutton.h: "
* gtktoolbutton.c: "
* gtktoolbutton.h: "
* gtktoolitem.c: "
* gtktoolitem.h: "
* gtktoolbar.c: many changes
* gtktoolbar.h: many changes
* gtkseparatortoolitem.c: new file
* gtkseparatortoolitem.h "
New toolbar.
- Items on a toolbar are now separate widgets, instances of a
subclass of GtkToolItem.
- Items there aren't room for on the toolbar are unmapped, and an
overflow menu with a proxy menu item is added instead.
- The toolbar is keyboard navigatable. Press TAB to focus the
first item, then use arrow keys and Ctrl TAB to move around the
toolbar. TAB moves focus out of the toolbar.
- Bascially all of the old toolbar API is deprecated in favor of
new API in gtktoolbar.h, gtktoolitem.h, gtktoolbutton.h
- The toolbar is backwards compatible with the old toolbar.
2003-06-29 Matthias Clasen <maclas@gmx.de>
* gtk/gtkwidget.c (gtk_widget_class_init): Remove a duplicate parameter from docs, some more formatting

View File

@ -1,3 +1,39 @@
Wed Jul 2 15:42:26 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtk.h: Add new toolbar headers
* tests/testtoolbar.c: new file
* tests/Makefile.am (noinst_PROGRAMS): Add testtoolbar.c
* gtk/gtkexpander.c (gtk_expander_class_init): Make it compile
Tue Jul 1 22:49:25 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtktoolbar.c:
(gtk_toolbar_remove_tool_item): Fix bug where list is changed
inside a for loop (pointed out by Morten Welinder).
(gtk_toolbar_focus_home_or_end): Minor formatting change
Comments from Owen:
* gtk/gtktoolbutton.c: remove copy of elide_underscores(). Use
gtk_toolbar_elide_underscores instead.
* gtk/gtktoolbar.c: rename signal from focus_ends to
focus_home_or_end.
(_gtk_toolbar_elide_underscores): export this as an internal
function.
(gtk_toolbar_move_focus): add comment explaining difference to
gtk_toolbar_focus();
(gtk_toolbar_list_children_in_focus_order): Make TAB_FORWARD and
TAB_BACKWARD focus the right widgets in RTL mode
* gtk/gtktoolbutton.c (gtk_tool_button_new): Change to take
"label" and "icon" parameters
* gtk/gtktoolbutton.[ch]: remove icon_set property.
2003-07-01 Matthias Clasen <maclas@gmx.de>
* gtk/gtkspinbutton.c (gtk_spin_button_set_digits): Improve docs. (116364, Morten Welinder)
@ -64,21 +100,36 @@
Mon Jun 30 01:20:19 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtkradiotoolbutton.c
* gtkradiotoolbutton.h
* gtktoggletoolbutton.c
* gtktoggletoolbutton.h
* gtktoolbutton.c
* gtktoolbutton.h
* gtktoolitem.c
* gtktoolitem.h
* gtktoolbar.c
* gtktoolbar.h
* gtkseparatortoolitem.c
* gtkseparatortoolitem.h
* gtkradiotoolbutton.c: new file
* gtkradiotoolbutton.h: "
* gtktoggletoolbutton.c: "
* gtktoggletoolbutton.h: "
* gtktoolbutton.c: "
* gtktoolbutton.h: "
* gtktoolitem.c: "
* gtktoolitem.h: "
* gtktoolbar.c: many changes
* gtktoolbar.h: many changes
* gtkseparatortoolitem.c: new file
* gtkseparatortoolitem.h "
New toolbar.
- Items on a toolbar are now separate widgets, instances of a
subclass of GtkToolItem.
- Items there aren't room for on the toolbar are unmapped, and an
overflow menu with a proxy menu item is added instead.
- The toolbar is keyboard navigatable. Press TAB to focus the
first item, then use arrow keys and Ctrl TAB to move around the
toolbar. TAB moves focus out of the toolbar.
- Bascially all of the old toolbar API is deprecated in favor of
new API in gtktoolbar.h, gtktoolitem.h, gtktoolbutton.h
- The toolbar is backwards compatible with the old toolbar.
2003-06-29 Matthias Clasen <maclas@gmx.de>
* gtk/gtkwidget.c (gtk_widget_class_init): Remove a duplicate parameter from docs, some more formatting

View File

@ -1,3 +1,39 @@
Wed Jul 2 15:42:26 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtk.h: Add new toolbar headers
* tests/testtoolbar.c: new file
* tests/Makefile.am (noinst_PROGRAMS): Add testtoolbar.c
* gtk/gtkexpander.c (gtk_expander_class_init): Make it compile
Tue Jul 1 22:49:25 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtktoolbar.c:
(gtk_toolbar_remove_tool_item): Fix bug where list is changed
inside a for loop (pointed out by Morten Welinder).
(gtk_toolbar_focus_home_or_end): Minor formatting change
Comments from Owen:
* gtk/gtktoolbutton.c: remove copy of elide_underscores(). Use
gtk_toolbar_elide_underscores instead.
* gtk/gtktoolbar.c: rename signal from focus_ends to
focus_home_or_end.
(_gtk_toolbar_elide_underscores): export this as an internal
function.
(gtk_toolbar_move_focus): add comment explaining difference to
gtk_toolbar_focus();
(gtk_toolbar_list_children_in_focus_order): Make TAB_FORWARD and
TAB_BACKWARD focus the right widgets in RTL mode
* gtk/gtktoolbutton.c (gtk_tool_button_new): Change to take
"label" and "icon" parameters
* gtk/gtktoolbutton.[ch]: remove icon_set property.
2003-07-01 Matthias Clasen <maclas@gmx.de>
* gtk/gtkspinbutton.c (gtk_spin_button_set_digits): Improve docs. (116364, Morten Welinder)
@ -64,21 +100,36 @@
Mon Jun 30 01:20:19 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtkradiotoolbutton.c
* gtkradiotoolbutton.h
* gtktoggletoolbutton.c
* gtktoggletoolbutton.h
* gtktoolbutton.c
* gtktoolbutton.h
* gtktoolitem.c
* gtktoolitem.h
* gtktoolbar.c
* gtktoolbar.h
* gtkseparatortoolitem.c
* gtkseparatortoolitem.h
* gtkradiotoolbutton.c: new file
* gtkradiotoolbutton.h: "
* gtktoggletoolbutton.c: "
* gtktoggletoolbutton.h: "
* gtktoolbutton.c: "
* gtktoolbutton.h: "
* gtktoolitem.c: "
* gtktoolitem.h: "
* gtktoolbar.c: many changes
* gtktoolbar.h: many changes
* gtkseparatortoolitem.c: new file
* gtkseparatortoolitem.h "
New toolbar.
- Items on a toolbar are now separate widgets, instances of a
subclass of GtkToolItem.
- Items there aren't room for on the toolbar are unmapped, and an
overflow menu with a proxy menu item is added instead.
- The toolbar is keyboard navigatable. Press TAB to focus the
first item, then use arrow keys and Ctrl TAB to move around the
toolbar. TAB moves focus out of the toolbar.
- Bascially all of the old toolbar API is deprecated in favor of
new API in gtktoolbar.h, gtktoolitem.h, gtktoolbutton.h
- The toolbar is backwards compatible with the old toolbar.
2003-06-29 Matthias Clasen <maclas@gmx.de>
* gtk/gtkwidget.c (gtk_widget_class_init): Remove a duplicate parameter from docs, some more formatting

View File

@ -1,3 +1,39 @@
Wed Jul 2 15:42:26 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtk.h: Add new toolbar headers
* tests/testtoolbar.c: new file
* tests/Makefile.am (noinst_PROGRAMS): Add testtoolbar.c
* gtk/gtkexpander.c (gtk_expander_class_init): Make it compile
Tue Jul 1 22:49:25 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtktoolbar.c:
(gtk_toolbar_remove_tool_item): Fix bug where list is changed
inside a for loop (pointed out by Morten Welinder).
(gtk_toolbar_focus_home_or_end): Minor formatting change
Comments from Owen:
* gtk/gtktoolbutton.c: remove copy of elide_underscores(). Use
gtk_toolbar_elide_underscores instead.
* gtk/gtktoolbar.c: rename signal from focus_ends to
focus_home_or_end.
(_gtk_toolbar_elide_underscores): export this as an internal
function.
(gtk_toolbar_move_focus): add comment explaining difference to
gtk_toolbar_focus();
(gtk_toolbar_list_children_in_focus_order): Make TAB_FORWARD and
TAB_BACKWARD focus the right widgets in RTL mode
* gtk/gtktoolbutton.c (gtk_tool_button_new): Change to take
"label" and "icon" parameters
* gtk/gtktoolbutton.[ch]: remove icon_set property.
2003-07-01 Matthias Clasen <maclas@gmx.de>
* gtk/gtkspinbutton.c (gtk_spin_button_set_digits): Improve docs. (116364, Morten Welinder)
@ -64,21 +100,36 @@
Mon Jun 30 01:20:19 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtkradiotoolbutton.c
* gtkradiotoolbutton.h
* gtktoggletoolbutton.c
* gtktoggletoolbutton.h
* gtktoolbutton.c
* gtktoolbutton.h
* gtktoolitem.c
* gtktoolitem.h
* gtktoolbar.c
* gtktoolbar.h
* gtkseparatortoolitem.c
* gtkseparatortoolitem.h
* gtkradiotoolbutton.c: new file
* gtkradiotoolbutton.h: "
* gtktoggletoolbutton.c: "
* gtktoggletoolbutton.h: "
* gtktoolbutton.c: "
* gtktoolbutton.h: "
* gtktoolitem.c: "
* gtktoolitem.h: "
* gtktoolbar.c: many changes
* gtktoolbar.h: many changes
* gtkseparatortoolitem.c: new file
* gtkseparatortoolitem.h "
New toolbar.
- Items on a toolbar are now separate widgets, instances of a
subclass of GtkToolItem.
- Items there aren't room for on the toolbar are unmapped, and an
overflow menu with a proxy menu item is added instead.
- The toolbar is keyboard navigatable. Press TAB to focus the
first item, then use arrow keys and Ctrl TAB to move around the
toolbar. TAB moves focus out of the toolbar.
- Bascially all of the old toolbar API is deprecated in favor of
new API in gtktoolbar.h, gtktoolitem.h, gtktoolbutton.h
- The toolbar is backwards compatible with the old toolbar.
2003-06-29 Matthias Clasen <maclas@gmx.de>
* gtk/gtkwidget.c (gtk_widget_class_init): Remove a duplicate parameter from docs, some more formatting

View File

@ -1,3 +1,39 @@
Wed Jul 2 15:42:26 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtk.h: Add new toolbar headers
* tests/testtoolbar.c: new file
* tests/Makefile.am (noinst_PROGRAMS): Add testtoolbar.c
* gtk/gtkexpander.c (gtk_expander_class_init): Make it compile
Tue Jul 1 22:49:25 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtktoolbar.c:
(gtk_toolbar_remove_tool_item): Fix bug where list is changed
inside a for loop (pointed out by Morten Welinder).
(gtk_toolbar_focus_home_or_end): Minor formatting change
Comments from Owen:
* gtk/gtktoolbutton.c: remove copy of elide_underscores(). Use
gtk_toolbar_elide_underscores instead.
* gtk/gtktoolbar.c: rename signal from focus_ends to
focus_home_or_end.
(_gtk_toolbar_elide_underscores): export this as an internal
function.
(gtk_toolbar_move_focus): add comment explaining difference to
gtk_toolbar_focus();
(gtk_toolbar_list_children_in_focus_order): Make TAB_FORWARD and
TAB_BACKWARD focus the right widgets in RTL mode
* gtk/gtktoolbutton.c (gtk_tool_button_new): Change to take
"label" and "icon" parameters
* gtk/gtktoolbutton.[ch]: remove icon_set property.
2003-07-01 Matthias Clasen <maclas@gmx.de>
* gtk/gtkspinbutton.c (gtk_spin_button_set_digits): Improve docs. (116364, Morten Welinder)
@ -64,21 +100,36 @@
Mon Jun 30 01:20:19 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtkradiotoolbutton.c
* gtkradiotoolbutton.h
* gtktoggletoolbutton.c
* gtktoggletoolbutton.h
* gtktoolbutton.c
* gtktoolbutton.h
* gtktoolitem.c
* gtktoolitem.h
* gtktoolbar.c
* gtktoolbar.h
* gtkseparatortoolitem.c
* gtkseparatortoolitem.h
* gtkradiotoolbutton.c: new file
* gtkradiotoolbutton.h: "
* gtktoggletoolbutton.c: "
* gtktoggletoolbutton.h: "
* gtktoolbutton.c: "
* gtktoolbutton.h: "
* gtktoolitem.c: "
* gtktoolitem.h: "
* gtktoolbar.c: many changes
* gtktoolbar.h: many changes
* gtkseparatortoolitem.c: new file
* gtkseparatortoolitem.h "
New toolbar.
- Items on a toolbar are now separate widgets, instances of a
subclass of GtkToolItem.
- Items there aren't room for on the toolbar are unmapped, and an
overflow menu with a proxy menu item is added instead.
- The toolbar is keyboard navigatable. Press TAB to focus the
first item, then use arrow keys and Ctrl TAB to move around the
toolbar. TAB moves focus out of the toolbar.
- Bascially all of the old toolbar API is deprecated in favor of
new API in gtktoolbar.h, gtktoolitem.h, gtktoolbutton.h
- The toolbar is backwards compatible with the old toolbar.
2003-06-29 Matthias Clasen <maclas@gmx.de>
* gtk/gtkwidget.c (gtk_widget_class_init): Remove a duplicate parameter from docs, some more formatting

View File

@ -35,18 +35,18 @@
#include <gtk/gtkaccessible.h>
#include <gtk/gtkadjustment.h>
#include <gtk/gtkalignment.h>
#include <gtk/gtkaspectframe.h>
#include <gtk/gtkarrow.h>
#include <gtk/gtkaspectframe.h>
#include <gtk/gtkbbox.h>
#include <gtk/gtkbin.h>
#include <gtk/gtkbindings.h>
#include <gtk/gtkbox.h>
#include <gtk/gtkbbox.h>
#include <gtk/gtkbutton.h>
#include <gtk/gtkcalendar.h>
#include <gtk/gtkcellrenderer.h>
#include <gtk/gtkcellrendererpixbuf.h>
#include <gtk/gtkcellrenderertext.h>
#include <gtk/gtkcellrenderertoggle.h>
#include <gtk/gtkcellrendererpixbuf.h>
#include <gtk/gtkcheckbutton.h>
#include <gtk/gtkcheckmenuitem.h>
#include <gtk/gtkclipboard.h>
@ -74,8 +74,8 @@
#include <gtk/gtkgamma.h>
#include <gtk/gtkgc.h>
#include <gtk/gtkhandlebox.h>
#include <gtk/gtkhbox.h>
#include <gtk/gtkhbbox.h>
#include <gtk/gtkhbox.h>
#include <gtk/gtkhpaned.h>
#include <gtk/gtkhruler.h>
#include <gtk/gtkhscale.h>
@ -115,6 +115,7 @@
#include <gtk/gtkprogressbar.h>
#include <gtk/gtkradiobutton.h>
#include <gtk/gtkradiomenuitem.h>
#include <gtk/gtkradiotoolbutton.h>
#include <gtk/gtkrange.h>
#include <gtk/gtkrc.h>
#include <gtk/gtkruler.h>
@ -124,14 +125,15 @@
#include <gtk/gtkselection.h>
#include <gtk/gtkseparator.h>
#include <gtk/gtkseparatormenuitem.h>
#include <gtk/gtkseparatortoolitem.h>
#include <gtk/gtksettings.h>
#include <gtk/gtksignal.h>
#include <gtk/gtksizegroup.h>
#include <gtk/gtksocket.h>
#include <gtk/gtkspinbutton.h>
#include <gtk/gtkstatusbar.h>
#include <gtk/gtkstock.h>
#include <gtk/gtkstyle.h>
#include <gtk/gtkstatusbar.h>
#include <gtk/gtktable.h>
#include <gtk/gtktearoffmenuitem.h>
#include <gtk/gtktext.h>
@ -139,7 +141,11 @@
#include <gtk/gtktextview.h>
#include <gtk/gtktipsquery.h>
#include <gtk/gtktogglebutton.h>
#include <gtk/gtktoggletoolbutton.h>
#include <gtk/gtktoolbar.h>
#include <gtk/gtktoolbar.h>
#include <gtk/gtktoolbutton.h>
#include <gtk/gtktoolitem.h>
#include <gtk/gtktooltips.h>
#include <gtk/gtktree.h>
#include <gtk/gtktreednd.h>
@ -151,8 +157,8 @@
#include <gtk/gtktreeview.h>
#include <gtk/gtktreeviewcolumn.h>
#include <gtk/gtktypeutils.h>
#include <gtk/gtkvbox.h>
#include <gtk/gtkvbbox.h>
#include <gtk/gtkvbox.h>
#include <gtk/gtkversion.h>
#include <gtk/gtkviewport.h>
#include <gtk/gtkvpaned.h>

View File

@ -246,9 +246,7 @@ gtk_expander_class_init (GtkExpanderClass *klass)
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
G_STRUCT_OFFSET (GtkExpanderClass, activate),
NULL, NULL,
_gtk_marsha /**
l_VOID__VOID,
_gtk_marshal_VOID__VOID,
G_TYPE_NONE, 0);
}

View File

@ -78,7 +78,7 @@ enum {
STYLE_CHANGED,
POPUP_CONTEXT_MENU,
MOVE_FOCUS,
FOCUS_ENDS,
FOCUS_HOME_OR_END,
LAST_SIGNAL
};
@ -147,10 +147,10 @@ static void gtk_toolbar_real_orientation_changed (GtkToolbar *toolbar,
static void gtk_toolbar_real_style_changed (GtkToolbar *toolbar,
GtkToolbarStyle style);
static gboolean gtk_toolbar_move_focus (GtkToolbar *toolbar,
GtkDirectionType dir);
static gboolean gtk_toolbar_focus_ends (GtkToolbar *toolbar,
gboolean home);
static gboolean gtk_toolbar_move_focus (GtkToolbar *toolbar,
GtkDirectionType dir);
static gboolean gtk_toolbar_focus_home_or_end (GtkToolbar *toolbar,
gboolean focus_home);
static gboolean gtk_toolbar_button_press (GtkWidget *toolbar,
GdkEventButton *event);
@ -343,11 +343,11 @@ gtk_toolbar_class_init (GtkToolbarClass *klass)
_gtk_marshal_BOOLEAN__ENUM,
G_TYPE_BOOLEAN, 1,
GTK_TYPE_DIRECTION_TYPE);
toolbar_signals[FOCUS_ENDS] =
_gtk_binding_signal_new ("focus_ends",
toolbar_signals[FOCUS_HOME_OR_END] =
_gtk_binding_signal_new ("focus_home_or_end",
G_OBJECT_CLASS_TYPE (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
G_CALLBACK (gtk_toolbar_focus_ends),
G_CALLBACK (gtk_toolbar_focus_home_or_end),
NULL, NULL,
_gtk_marshal_BOOLEAN__BOOLEAN,
G_TYPE_BOOLEAN, 1,
@ -468,20 +468,20 @@ gtk_toolbar_class_init (GtkToolbarClass *klass)
add_arrow_bindings (binding_set, GDK_Down, GTK_DIR_DOWN);
gtk_binding_entry_add_signal (binding_set, GDK_KP_Home, 0,
"focus_ends", 1,
"focus_home_or_end", 1,
G_TYPE_BOOLEAN, TRUE);
gtk_binding_entry_add_signal (binding_set, GDK_Home, 0,
"focus_ends", 1,
"focus_home_or_end", 1,
G_TYPE_BOOLEAN, TRUE);
gtk_binding_entry_add_signal (binding_set, GDK_KP_End, 0,
"focus_ends", 1,
"focus_home_or_end", 1,
G_TYPE_BOOLEAN, FALSE);
gtk_binding_entry_add_signal (binding_set, GDK_End, 0,
"focus_ends", 1,
"focus_home_or_end", 1,
G_TYPE_BOOLEAN, FALSE);
add_ctrl_tab_bindings (binding_set, 0, GTK_DIR_RIGHT);
add_ctrl_tab_bindings (binding_set, GDK_SHIFT_MASK, GTK_DIR_LEFT);
add_ctrl_tab_bindings (binding_set, 0, GTK_DIR_TAB_FORWARD);
add_ctrl_tab_bindings (binding_set, GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD);
g_type_class_add_private (gobject_class, sizeof (GtkToolbarPrivate));
}
@ -1271,6 +1271,9 @@ gtk_toolbar_list_children_in_focus_order (GtkToolbar *toolbar,
GtkToolbarPrivate *priv = GTK_TOOLBAR_GET_PRIVATE (toolbar);
GList *result = NULL;
GList *list;
gboolean rtl;
/* generate list of children in reverse logical order */
for (list = priv->items; list != NULL; list = list->next)
{
@ -1289,31 +1292,40 @@ gtk_toolbar_list_children_in_focus_order (GtkToolbar *toolbar,
result = g_list_prepend (result, priv->arrow_button);
if (dir == GTK_DIR_RIGHT || dir == GTK_DIR_DOWN || dir == GTK_DIR_TAB_FORWARD)
result = g_list_reverse (result);
rtl = (gtk_widget_get_direction (GTK_WIDGET (toolbar)) == GTK_TEXT_DIR_RTL);
if (gtk_widget_get_direction (GTK_WIDGET (toolbar)) == GTK_TEXT_DIR_RTL)
result = g_list_reverse (result);
/* move in logical order when
*
* - dir is TAB_FORWARD
*
* - in RTL mode and moving left or up
*
* - in LTR mode and moving right or down
*/
if (dir == GTK_DIR_TAB_FORWARD ||
(rtl && (dir == GTK_DIR_UP || dir == GTK_DIR_LEFT)) ||
(!rtl && (dir == GTK_DIR_DOWN || dir == GTK_DIR_RIGHT)))
{
result = g_list_reverse (result);
}
return result;
}
static gboolean
gtk_toolbar_focus_ends (GtkToolbar *toolbar,
gboolean home)
gtk_toolbar_focus_home_or_end (GtkToolbar *toolbar,
gboolean focus_home)
{
GList *children, *list;
GtkDirectionType dir = home? GTK_DIR_RIGHT : GTK_DIR_LEFT;
GtkDirectionType dir = focus_home? GTK_DIR_RIGHT : GTK_DIR_LEFT;
children = gtk_toolbar_list_children_in_focus_order (toolbar, dir);
if (gtk_widget_get_direction (GTK_WIDGET (toolbar)) == GTK_TEXT_DIR_RTL)
{
children = g_list_reverse (children);
if (dir == GTK_DIR_RIGHT)
dir = GTK_DIR_LEFT;
else
dir = GTK_DIR_RIGHT;
dir = (dir == GTK_DIR_RIGHT)? GTK_DIR_LEFT : GTK_DIR_RIGHT;
}
for (list = children; list != NULL; list = list->next)
@ -1332,13 +1344,25 @@ gtk_toolbar_focus_ends (GtkToolbar *toolbar,
return TRUE;
}
/* Keybinding handler. This function is called when the user presses
* Ctrl TAB or an arrow key.
*/
static gboolean
gtk_toolbar_move_focus (GtkToolbar *toolbar,
GtkDirectionType dir)
{
GList *list;
gboolean try_focus = FALSE;
GList *children = gtk_toolbar_list_children_in_focus_order (toolbar, dir);
GList *children;
GtkContainer *container = GTK_CONTAINER (toolbar);
if (container->focus_child &&
gtk_widget_child_focus (container->focus_child, dir))
{
return TRUE;
}
children = gtk_toolbar_list_children_in_focus_order (toolbar, dir);
for (list = children; list != NULL; list = list->next)
{
@ -1356,8 +1380,8 @@ gtk_toolbar_move_focus (GtkToolbar *toolbar,
return TRUE;
}
/* The focus handler for the toolbar. It called when the user presses TAB or otherwise
* tries to focus the toolbar.
/* The focus handler for the toolbar. It called when the user presses
* TAB or otherwise tries to focus the toolbar.
*/
static gboolean
gtk_toolbar_focus (GtkWidget *widget,
@ -2079,8 +2103,10 @@ gtk_toolbar_remove_tool_item (GtkToolbar *toolbar,
priv = GTK_TOOLBAR_GET_PRIVATE (toolbar);
for (tmp = priv->items; tmp != NULL; tmp = tmp->next)
tmp = priv->items;
while (tmp)
{
GList *next = tmp->next;
GtkWidget *child = tmp->data;
if (child == GTK_WIDGET (item))
@ -2098,6 +2124,8 @@ gtk_toolbar_remove_tool_item (GtkToolbar *toolbar,
break;
}
tmp = next;
}
}
@ -2588,8 +2616,8 @@ gtk_toolbar_insert_element (GtkToolbar *toolbar,
icon, callback, user_data, position, FALSE);
}
static gchar *
elide_underscores (const gchar *original)
gchar *
_gtk_toolbar_elide_underscores (const gchar *original)
{
gchar *q, *result;
const gchar *p;
@ -2660,7 +2688,7 @@ gtk_toolbar_internal_insert_element (GtkToolbar *toolbar,
break;
case GTK_TOOLBAR_CHILD_BUTTON:
item = gtk_tool_button_new ();
item = gtk_tool_button_new (NULL, NULL);
child->widget = GTK_TOOL_BUTTON (item)->button;
break;
@ -2693,7 +2721,7 @@ gtk_toolbar_internal_insert_element (GtkToolbar *toolbar,
gtk_tool_button_set_stock_id (GTK_TOOL_BUTTON (item), text);
gtk_stock_lookup (text, &stock_item);
label_text = elide_underscores (stock_item.label);
label_text = _gtk_toolbar_elide_underscores (stock_item.label);
child->label = GTK_WIDGET (gtk_label_new (label_text));
g_free (label_text);
}

View File

@ -157,6 +157,9 @@ GtkIconSize gtk_toolbar_get_icon_size (GtkToolbar *toolbar);
gboolean gtk_toolbar_get_tooltips (GtkToolbar *toolbar);
GtkReliefStyle gtk_toolbar_get_relief_style (GtkToolbar *toolbar);
/* internal function */
gchar * _gtk_toolbar_elide_underscores (const gchar *original);
#ifndef GTK_DISABLE_DEPRECATED
/* Simple button items */
void gtk_toolbar_set_style (GtkToolbar *toolbar,

View File

@ -30,6 +30,7 @@
#include "gtkstock.h"
#include "gtkvbox.h"
#include "gtkintl.h"
#include "gtktoolbar.h"
#include <string.h>
@ -46,7 +47,6 @@ enum {
PROP_USE_UNDERLINE,
PROP_LABEL_WIDGET,
PROP_STOCK_ID,
PROP_ICON_SET,
PROP_ICON_WIDGET,
};
@ -157,13 +157,6 @@ gtk_tool_button_class_init (GtkToolButtonClass *klass)
_("The stock icon displayed on the item"),
NULL,
G_PARAM_READWRITE));
g_object_class_install_property (object_class,
PROP_ICON_SET,
g_param_spec_boxed ("icon_set",
_("Icon set"),
_("Icon set to use to draw the item's icon"),
GTK_TYPE_ICON_SET,
G_PARAM_READWRITE));
g_object_class_install_property (object_class,
PROP_ICON_WIDGET,
g_param_spec_object ("icon_widget",
@ -192,7 +185,7 @@ gtk_tool_button_init (GtkToolButton *button,
/* create button */
button->button = g_object_new (klass->button_type, NULL);
gtk_button_set_focus_on_click (button->button, FALSE);
gtk_button_set_focus_on_click (GTK_BUTTON (button->button), FALSE);
g_signal_connect_object (button->button, "clicked",
G_CALLBACK (button_clicked), button, 0);
@ -250,32 +243,6 @@ gtk_tool_button_size_allocate (GtkWidget *widget,
}
}
static gchar *
elide_underscores (const gchar *original)
{
gchar *q, *result;
const gchar *p;
gboolean last_underscore;
q = result = g_malloc (strlen (original) + 1);
last_underscore = FALSE;
for (p = original; *p; p++)
{
if (!last_underscore && *p == '_')
last_underscore = TRUE;
else
{
last_underscore = FALSE;
*q++ = *p;
}
}
*q = '\0';
return result;
}
static void
gtk_tool_button_construct_contents (GtkToolItem *tool_item)
{
@ -345,7 +312,7 @@ gtk_tool_button_construct_contents (GtkToolItem *tool_item)
label_text = "";
if (elide)
label_text = elide_underscores (label_text);
label_text = _gtk_toolbar_elide_underscores (label_text);
else
label_text = g_strdup (label_text);
@ -360,12 +327,7 @@ gtk_tool_button_construct_contents (GtkToolItem *tool_item)
icon_size = gtk_tool_item_get_icon_size (GTK_TOOL_ITEM (button));
if (need_icon)
{
if (button->icon_set)
{
icon = gtk_image_new_from_icon_set (button->icon_set, icon_size);
gtk_widget_show (icon);
}
else if (button->icon_widget)
if (button->icon_widget)
{
icon = button->icon_widget;
@ -456,9 +418,6 @@ gtk_tool_button_set_property (GObject *object,
case PROP_STOCK_ID:
gtk_tool_button_set_stock_id (button, g_value_get_string (value));
break;
case PROP_ICON_SET:
gtk_tool_button_set_icon_set (button, g_value_get_boxed (value));
break;
case PROP_ICON_WIDGET:
gtk_tool_button_set_icon_widget (button, g_value_get_object (value));
break;
@ -489,9 +448,6 @@ gtk_tool_button_get_property (GObject *object,
case PROP_STOCK_ID:
g_value_set_string (value, button->stock_id);
break;
case PROP_ICON_SET:
g_value_set_boxed (value, gtk_tool_button_get_icon_set (button));
break;
case PROP_ICON_WIDGET:
g_value_set_object (value, button->icon_widget);
break;
@ -536,11 +492,7 @@ gtk_tool_button_create_menu_proxy (GtkToolItem *item)
else
menu_item = gtk_image_menu_item_new_with_label (label);
if (button->icon_set)
{
menu_image = gtk_image_new_from_icon_set (button->icon_set, GTK_ICON_SIZE_MENU);
}
else if (button->icon_widget && GTK_IS_IMAGE (button->icon_widget))
if (button->icon_widget && GTK_IS_IMAGE (button->icon_widget))
{
GtkImage *image = GTK_IMAGE (button->icon_widget);
GtkImageType storage_type = gtk_image_get_storage_type (image);
@ -605,13 +557,20 @@ gtk_tool_button_new_from_stock (const gchar *stock_id)
}
GtkToolItem *
gtk_tool_button_new (void)
gtk_tool_button_new (const gchar *label,
GtkWidget *icon_widget)
{
GtkToolButton *button;
button = g_object_new (GTK_TYPE_TOOL_BUTTON,
NULL);
if (label)
gtk_tool_button_set_label (button, label);
if (icon_widget)
gtk_tool_button_set_icon_widget (button, icon_widget);
return GTK_TOOL_ITEM (button);
}
@ -703,8 +662,6 @@ gtk_tool_button_set_icon_widget (GtkToolButton *button,
if (icon != button->icon_widget)
{
g_object_freeze_notify (G_OBJECT (button));
if (button->icon_widget)
g_object_unref (G_OBJECT (button->icon_widget));
@ -716,18 +673,9 @@ gtk_tool_button_set_icon_widget (GtkToolButton *button,
button->icon_widget = icon;
if (button->icon_widget && button->icon_set)
{
gtk_icon_set_unref (button->icon_set);
button->icon_set = NULL;
g_object_notify (G_OBJECT (button), "icon_set");
}
gtk_tool_button_construct_contents (GTK_TOOL_ITEM (button));
g_object_notify (G_OBJECT (button), "icon_widget");
g_object_thaw_notify (G_OBJECT (button));
}
}
@ -772,41 +720,3 @@ gtk_tool_button_get_icon_widget (GtkToolButton *button)
return button->icon_widget;
}
void
gtk_tool_button_set_icon_set (GtkToolButton *button,
GtkIconSet *icon_set)
{
g_return_if_fail (GTK_IS_TOOL_BUTTON (button));
if (icon_set != button->icon_set)
{
g_object_freeze_notify (G_OBJECT (button));
if (button->icon_set)
gtk_icon_set_unref (button->icon_set);
button->icon_set = icon_set;
if (button->icon_set && button->icon_widget)
{
g_object_unref (button->icon_widget);
button->icon_widget = NULL;
g_object_notify (G_OBJECT (button->icon_widget), "icon_widget");
}
gtk_tool_button_construct_contents (GTK_TOOL_ITEM (button));
g_object_notify (G_OBJECT (button), "icon_set");
g_object_thaw_notify (G_OBJECT (button));
}
}
GtkIconSet *
gtk_tool_button_get_icon_set (GtkToolButton *button)
{
g_return_val_if_fail (GTK_IS_TOOL_BUTTON (button), NULL);
return button->icon_set;
}

View File

@ -48,7 +48,6 @@ struct _GtkToolButton
gchar *label_text;
GtkWidget *label_widget;
GtkWidget *icon_widget;
GtkIconSet *icon_set;
guint use_underline : 1;
};
@ -64,7 +63,8 @@ struct _GtkToolButtonClass
};
GType gtk_tool_button_get_type (void);
GtkToolItem *gtk_tool_button_new (void);
GtkToolItem *gtk_tool_button_new (const gchar *label,
GtkWidget *icon_widget);
GtkToolItem *gtk_tool_button_new_from_stock (const gchar *stock_id);
void gtk_tool_button_set_label (GtkToolButton *button,
@ -76,9 +76,6 @@ gboolean gtk_tool_button_get_use_underline (GtkToolButton *button);
void gtk_tool_button_set_stock_id (GtkToolButton *button,
const gchar *stock_id);
G_CONST_RETURN gchar *gtk_tool_button_get_stock_id (GtkToolButton *button);
void gtk_tool_button_set_icon_set (GtkToolButton *button,
GtkIconSet *icon_set);
GtkIconSet * gtk_tool_button_get_icon_set (GtkToolButton *button);
void gtk_tool_button_set_icon_widget (GtkToolButton *button,
GtkWidget *icon);
GtkWidget * gtk_tool_button_get_icon_widget (GtkToolButton *button);

View File

@ -40,6 +40,7 @@ noinst_PROGRAMS = \
$(testsocket_programs) \
testtext \
testtextbuffer \
testtoolbar \
testtreeedit \
testtreeview \
testtreefocus \
@ -89,6 +90,7 @@ testselection_LDADD = $(LDADDS)
testsocket_LDADD = $(LDADDS)
testsocket_child_LDADD = $(LDADDS)
testtextbuffer_LDADD = $(LDADDS)
testtoolbar_LDADD = $(LDADDS)
testtreeedit_LDADD = $(LDADDS)
testtreeview_LDADD = $(LDADDS)
testtreefocus_LDADD = $(LDADDS)
@ -118,6 +120,10 @@ testtext_SOURCES = \
prop-editor.c \
testtext.c
testtoolbar_SOURCES = \
testtoolbar.c \
prop-editor.c
testsocket_SOURCES = \
testsocket.c \
testsocket_common.c

583
tests/testtoolbar.c Normal file
View File

@ -0,0 +1,583 @@
/* testtoolbar.c
*
* Copyright (C) 2002 Anders Carlsson <andersca@codefactory.se>
* Copyright (C) 2002 James Henstridge <james@daa.com.au>
* Copyright (C) 2003 Soeren Sandmann <sandmann@daimi.au.dk>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* 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.
*/
#include <gtk/gtk.h>
#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;
GtkOrientation orientation;
table = 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);
if (orientation == GTK_ORIENTATION_HORIZONTAL)
{
gtk_table_attach (GTK_TABLE (table), toolbar,
0,2, 0,1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
}
else
{
gtk_table_attach (GTK_TABLE (table), toolbar,
0,1, 0,4, GTK_FILL, GTK_FILL|GTK_EXPAND, 0, 0);
}
g_object_unref (toolbar);
}
static void
change_show_arrow (GtkWidget *button, GtkWidget *toolbar)
{
gtk_toolbar_set_show_arrow (GTK_TOOLBAR (toolbar),
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)));
}
static void
set_toolbar_style_toggled (GtkCheckButton *button, GtkToolbar *toolbar)
{
GtkWidget *option_menu;
int style;
option_menu = g_object_get_data (G_OBJECT (button), "option-menu");
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))
{
style = gtk_option_menu_get_history (GTK_OPTION_MENU (option_menu));
gtk_toolbar_set_style (toolbar, style);
gtk_widget_set_sensitive (option_menu, TRUE);
}
else
{
gtk_toolbar_unset_style (toolbar);
gtk_widget_set_sensitive (option_menu, FALSE);
}
}
static void
change_toolbar_style (GtkWidget *option_menu, GtkWidget *toolbar)
{
GtkToolbarStyle style;
style = gtk_option_menu_get_history (GTK_OPTION_MENU (option_menu));
gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), style);
}
static void
set_visible_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
{
GtkToolItem *tool_item;
gboolean visible;
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_unref (tool_item);
}
static void
visibile_toggled(GtkCellRendererToggle *cell, const gchar *path_str,
GtkTreeModel *model)
{
GtkTreePath *path;
GtkTreeIter iter;
GtkToolItem *tool_item;
gboolean visible;
path = gtk_tree_path_new_from_string (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_unref (tool_item);
gtk_tree_model_row_changed (model, path, &iter);
gtk_tree_path_free (path);
}
static void
set_expand_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->expand, NULL);
g_object_unref (tool_item);
}
static void
expand_toggled(GtkCellRendererToggle *cell, const gchar *path_str,
GtkTreeModel *model)
{
GtkTreePath *path;
GtkTreeIter iter;
GtkToolItem *tool_item;
path = gtk_tree_path_new_from_string (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);
g_object_unref (tool_item);
gtk_tree_model_row_changed (model, path, &iter);
gtk_tree_path_free (path);
}
static void
set_pack_end_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_unref (tool_item);
}
static void
pack_end_toggled(GtkCellRendererToggle *cell, const gchar *path_str,
GtkTreeModel *model)
{
GtkTreePath *path;
GtkTreeIter iter;
GtkToolItem *tool_item;
path = gtk_tree_path_new_from_string (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);
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)
{
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_unref (tool_item);
}
static void
homogeneous_toggled(GtkCellRendererToggle *cell, const gchar *path_str,
GtkTreeModel *model)
{
GtkTreePath *path;
GtkTreeIter iter;
GtkToolItem *tool_item;
path = gtk_tree_path_new_from_string (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);
g_object_unref (tool_item);
gtk_tree_model_row_changed (model, path, &iter);
gtk_tree_path_free (path);
}
static GtkListStore *
create_items_list (GtkWidget **tree_view_p)
{
GtkWidget *tree_view;
GtkListStore *list_store;
GtkCellRenderer *cell;
list_store = gtk_list_store_new (2, GTK_TYPE_TOOL_ITEM, G_TYPE_STRING);
tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
-1, "Tool Item",
gtk_cell_renderer_text_new (),
"text", 1, NULL);
cell = gtk_cell_renderer_toggle_new ();
g_signal_connect (cell, "toggled", G_CALLBACK (visibile_toggled),
list_store);
gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (tree_view),
-1, "Visible",
cell,
set_visible_func, NULL, NULL);
cell = gtk_cell_renderer_toggle_new ();
g_signal_connect (cell, "toggled", G_CALLBACK (expand_toggled),
list_store);
gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (tree_view),
-1, "Expand",
cell,
set_expand_func, NULL, NULL);
cell = gtk_cell_renderer_toggle_new ();
g_signal_connect (cell, "toggled", G_CALLBACK (pack_end_toggled),
list_store);
gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (tree_view),
-1, "Pack End",
cell,
set_pack_end_func, NULL, NULL);
cell = gtk_cell_renderer_toggle_new ();
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, "Homogeneous",
cell,
set_homogeneous_func, NULL,NULL);
g_object_unref (list_store);
*tree_view_p = tree_view;
return list_store;
}
static void
add_item_to_list (GtkListStore *store, GtkToolItem *item, const gchar *text)
{
GtkTreeIter iter;
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0, item,
1, text,
-1);
}
static void
bold_toggled (GtkToggleToolButton *button)
{
g_message ("Bold toggled (active=%d)",
gtk_toggle_tool_button_get_active (button));
}
static void
set_icon_size_toggled (GtkCheckButton *button, GtkToolbar *toolbar)
{
GtkWidget *option_menu;
int icon_size;
option_menu = g_object_get_data (G_OBJECT (button), "option-menu");
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;
gtk_toolbar_set_icon_size (toolbar, icon_size);
gtk_widget_set_sensitive (option_menu, TRUE);
}
else
{
gtk_toolbar_unset_icon_size (toolbar);
gtk_widget_set_sensitive (option_menu, FALSE);
}
}
static void
icon_size_history_changed (GtkOptionMenu *menu, GtkToolbar *toolbar)
{
int icon_size;
icon_size = gtk_option_menu_get_history (menu);
icon_size += GTK_ICON_SIZE_SMALL_TOOLBAR;
gtk_toolbar_set_icon_size (toolbar, icon_size);
}
static gboolean
toolbar_drag_drop (GtkWidget *widget, GdkDragContext *context,
gint x, gint y, guint time, GtkWidget *label)
{
gchar buf[32];
g_snprintf(buf, sizeof(buf), "%d",
gtk_toolbar_get_drop_index (GTK_TOOLBAR (widget), x, y));
gtk_label_set_label (GTK_LABEL (label), buf);
return TRUE;
}
static GtkTargetEntry target_table[] = {
{ "application/x-toolbar-item", 0, 0 }
};
static GtkWidget *
make_prop_editor (GObject *object)
{
GtkWidget *prop_editor = create_prop_editor (object, 0);
gtk_widget_show (prop_editor);
return prop_editor;
}
static void
rtl_toggled (GtkCheckButton *check)
{
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)))
gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
else
gtk_widget_set_default_direction (GTK_TEXT_DIR_LTR);
}
gint
main (gint argc, gchar **argv)
{
GtkWidget *window, *toolbar, *table, *treeview, *scrolled_window;
GtkWidget *hbox, *checkbox, *option_menu, *menu;
gint i;
static const gchar *toolbar_styles[] = { "icons", "text", "both (vertical)",
"both (horizontal)" };
GtkToolItem *item;
GtkListStore *store;
GtkWidget *image;
GtkWidget *menuitem;
GtkWidget *button;
GtkWidget *label;
GSList *group;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
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);
toolbar = gtk_toolbar_new ();
gtk_table_attach (GTK_TABLE (table), toolbar,
0,2, 0,1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
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);
checkbox = gtk_check_button_new_with_mnemonic("_Vertical");
gtk_box_pack_start (GTK_BOX (hbox), 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);
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_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);
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);
option_menu = gtk_option_menu_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);
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);
store = create_items_list (&treeview);
gtk_container_add (GTK_CONTAINER (scrolled_window), treeview);
item = gtk_tool_button_new_from_stock (GTK_STOCK_NEW);
gtk_tool_button_set_label (GTK_TOOL_BUTTON (item), "Custom label");
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);
item = gtk_tool_button_new_from_stock (GTK_STOCK_OPEN);
add_item_to_list (store, item, "Open");
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);
gtk_container_add (GTK_CONTAINER (item), image);
add_item_to_list (store, item, "(Custom Item)");
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_BACK);
add_item_to_list (store, item, "Back");
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_GO_FORWARD);
add_item_to_list (store, item, "Forward");
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
item = gtk_toggle_tool_button_new_from_stock (GTK_STOCK_BOLD);
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);
item = gtk_separator_tool_item_new ();
add_item_to_list (store, item, "-----");
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
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));
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);
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);
button = gtk_button_new_with_label ("Drag me to the toolbar");
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
label = gtk_label_new ("Drop index:");
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
label = gtk_label_new ("");
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
checkbox = gtk_check_button_new_with_mnemonic("_Right to left");
if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), TRUE);
else
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), FALSE);
g_signal_connect (checkbox, "toggled", G_CALLBACK (rtl_toggled), NULL);
gtk_box_pack_end (GTK_BOX (hbox), checkbox, FALSE, FALSE, 0);
gtk_drag_source_set (button, GDK_BUTTON1_MASK,
target_table, G_N_ELEMENTS (target_table),
GDK_ACTION_MOVE);
gtk_drag_dest_set (toolbar, GTK_DEST_DEFAULT_DROP,
target_table, G_N_ELEMENTS (target_table),
GDK_ACTION_MOVE);
g_signal_connect (toolbar, "drag_drop",
G_CALLBACK (toolbar_drag_drop), label);
gtk_widget_show_all (window);
make_prop_editor (G_OBJECT (toolbar));
gtk_main ();
return 0;
}