1 /* Helper functions for gtk-engines
2  *
3  * Copyright (C) 2006 Andrew Johnson <acjgenius@earthlink.net>
4  * Copyright (C) 2006 Thomas Wood <thos@gnome.org>
5  * Copyright (C) 2006-2007 Benjamin Berg <benjamin@sipsolutions.net>
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20  *
21  * Project contact: <gnome-themes-list@gnome.org>
22  *
23  *
24  * Written by Andrew Johnson <acjgenius@earthlink.net>
25  * Written by Benjamin Berg <benjamin@sipsolutions.net>
26  * Written by Thomas Wood <thos@gnome.org>
27  * modified by Andrea Cimitan <andrea.cimitan@gmail.com>
28  *
29  */
30 
31 #ifndef WIDGET_INFORMATION_H
32 #define WIDGET_INFORMATION_H
33 
34 #include "general-support.h"
35 #include <glib.h>
36 #include <gtk/gtk.h>
37 
38 typedef enum {
39 	GE_HINT_TREEVIEW,
40 	GE_HINT_TREEVIEW_HEADER,
41 	GE_HINT_STATUSBAR,
42 	GE_HINT_COMBOBOX_ENTRY,
43 	GE_HINT_SPINBUTTON,
44 	GE_HINT_SCALE,
45 	GE_HINT_VSCALE,
46 	GE_HINT_HSCALE,
47 	GE_HINT_SCROLLBAR,
48 	GE_HINT_VSCROLLBAR,
49 	GE_HINT_HSCROLLBAR,
50 	GE_HINT_PROGRESSBAR,
51 	GE_HINT_MENUBAR,
52 	GE_HINT_COUNT
53 } GEHint;
54 
55 /* ALL OF THE FOLLOWING SHOULD DIE ...
56  * instead the hint system will be used, and a huge switch ;-) */
57 
58 /* Object Type Lookups/Macros
59 
60    Based on/modified from functions in
61    Smooth-Engine.
62 */
63 #define GE_IS_WIDGET(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkWidget"))
64 #define GE_IS_CONTAINER(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkContainer"))
65 #define GE_IS_BIN(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkBin"))
66 
67 #define GE_IS_ARROW(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkArrow"))
68 
69 #define GE_IS_SEPARATOR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkSeparator"))
70 #define GE_IS_VSEPARATOR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkVSeparator"))
71 #define GE_IS_HSEPARATOR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHSeparator"))
72 
73 #define GE_IS_HANDLE_BOX(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHandleBox"))
74 #define GE_IS_HANDLE_BOX_ITEM(object) ((object) && GE_IS_HANDLE_BOX(object->parent))
75 #define GE_IS_BONOBO_DOCK_ITEM(object) ((object) && ge_object_is_a ((GObject*)(object), "BonoboDockItem"))
76 #define GE_IS_BONOBO_DOCK_ITEM_GRIP(object) ((object) && ge_object_is_a ((GObject*)(object), "BonoboDockItemGrip"))
77 #define GE_IS_BONOBO_TOOLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "BonoboUIToolbar"))
78 #define GE_IS_EGG_TOOLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "Toolbar"))
79 #define GE_IS_TOOLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkToolbar"))
80 #define GE_IS_PANEL_WIDGET(object) ((object) && (ge_object_is_a ((GObject*)(object), "PanelWidget") || ge_object_is_a ((GObject*)(object), "PanelApplet")))
81 
82 #define GE_IS_COMBO_BOX_ENTRY(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkComboBoxEntry"))
83 #define GE_IS_COMBO_BOX(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkComboBox"))
84 #define GE_IS_COMBO(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkCombo"))
85 #define GE_IS_OPTION_MENU(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkOptionMenu"))
86 
87 #define GE_IS_TOGGLE_BUTTON(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkToggleButton"))
88 #define GE_IS_CHECK_BUTTON(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkCheckButton"))
89 #define GE_IS_SPIN_BUTTON(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkSpinButton"))
90 
91 #define GE_IS_STATUSBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkStatusbar"))
92 #define GE_IS_PROGRESS_BAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkProgressBar"))
93 
94 #define GE_IS_MENU_SHELL(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkMenuShell"))
95 #define GE_IS_MENU(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkMenu"))
96 #define GE_IS_MENU_BAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkMenuBar"))
97 #define GE_IS_MENU_ITEM(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkMenuItem"))
98 
99 #define GE_IS_CHECK_MENU_ITEM(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkCheckMenuItem"))
100 
101 #define GE_IS_RANGE(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkRange"))
102 
103 #define GE_IS_SCROLLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkScrollbar"))
104 #define GE_IS_VSCROLLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkVScrollbar"))
105 #define GE_IS_HSCROLLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHScrollbar"))
106 
107 #define GE_IS_SCALE(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkScale"))
108 #define GE_IS_VSCALE(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkVScale"))
109 #define GE_IS_HSCALE(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHScale"))
110 
111 #define GE_IS_PANED(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkPaned"))
112 #define GE_IS_VPANED(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkVPaned"))
113 #define GE_IS_HPANED(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHPaned"))
114 
115 #define GE_IS_BOX(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkBox"))
116 #define GE_IS_VBOX(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkVBox"))
117 #define GE_IS_HBOX(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHBox"))
118 
119 #define GE_IS_CLIST(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkCList"))
120 #define GE_IS_TREE_VIEW(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkTreeView"))
121 #define GE_IS_ENTRY(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkEntry"))
122 #define GE_IS_BUTTON(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkButton"))
123 #define GE_IS_FIXED(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkFixed"))
124 
125 #define TOGGLE_BUTTON(object) (GE_IS_TOGGLE_BUTTON(object)?(GtkToggleButton *)object:NULL)
126 
127 #define GE_IS_NOTEBOOK(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkNotebook"))
128 #define GE_IS_CELL_RENDERER_TOGGLE(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkCellRendererToggle"))
129 
130 #define GE_WIDGET_HAS_DEFAULT(object) ((object) && GE_IS_WIDGET(object) && GTK_WIDGET_HAS_DEFAULT(object))
131 
132 
133 GE_INTERNAL gboolean ge_check_hint (GEHint hint, GQuark style_hint, GtkWidget *widget);
134 
135 GE_INTERNAL gboolean ge_object_is_a (const GObject * object, const gchar * type_name);
136 
137 GE_INTERNAL gboolean ge_is_combo_box_entry (GtkWidget * widget);
138 GE_INTERNAL gboolean ge_is_combo_box (GtkWidget * widget, gboolean as_list);
139 GE_INTERNAL gboolean ge_is_combo (GtkWidget * widget);
140 GE_INTERNAL gboolean ge_is_in_combo_box (GtkWidget * widget);
141 
142 GE_INTERNAL gboolean ge_is_toolbar_item (GtkWidget * widget);
143 
144 GE_INTERNAL gboolean ge_is_panel_widget_item (GtkWidget * widget);
145 
146 GE_INTERNAL gboolean ge_is_bonobo_dock_item (GtkWidget * widget);
147 
148 GE_INTERNAL GtkWidget *ge_find_combo_box_widget_parent (GtkWidget * widget);
149 
150 GE_INTERNAL void ge_option_menu_get_props (GtkWidget * widget,
151                             GtkRequisition * indicator_size,
152                             GtkBorder * indicator_spacing);
153 
154 GE_INTERNAL void ge_button_get_default_border (GtkWidget *widget,
155                                                GtkBorder *border);
156 
157 GE_INTERNAL gboolean ge_widget_is_ltr (GtkWidget *widget);
158 
159 GE_INTERNAL guint ge_rc_parse_hint (GScanner *scanner, GQuark *quark);
160 
161 #endif /* WIDGET_INFORMATION_H */
162