]> Dogcows Code - chaz/openbox/blob - openbox/menu.h
prefix and capitalize ObMenu ObMenuEntry and ObMenuEntryRenderType
[chaz/openbox] / openbox / menu.h
1 #ifndef __menu_h
2 #define __menu_h
3
4 #include "action.h"
5 #include "window.h"
6 #include "render/render.h"
7 #include "geom.h"
8
9 #include <glib.h>
10
11 struct _ObClient;
12
13 typedef struct _ObMenu ObMenu;
14 typedef struct _ObMenuEntry ObMenuEntry;
15
16 typedef void(*menu_controller_show)(ObMenu *self, int x, int y,
17 struct _ObClient *);
18 typedef void(*menu_controller_update)(ObMenu *self);
19 typedef void(*menu_controller_mouseover)(ObMenuEntry *self, gboolean enter);
20
21 extern GHashTable *menu_hash;
22 extern GSList *menu_visible;
23
24 struct _ObMenu
25 {
26 ObWindow obwin;
27
28 gchar *label;
29 gchar *name;
30
31 GList *entries;
32
33 gboolean shown;
34 gboolean invalid;
35
36 ObMenu *parent;
37
38 ObMenu *open_submenu;
39
40 /* place a menu on screen */
41 menu_controller_show show;
42 void (*hide)( /* some bummu */);
43
44 /* render a menu */
45 menu_controller_update update;
46 menu_controller_mouseover mouseover;
47 void (*selected)( /* some bummu */);
48
49
50 /* render stuff */
51 struct _ObClient *client;
52 Window frame;
53 Window title;
54 RrAppearance *a_title;
55 gint title_min_w, title_h;
56 Window items;
57 RrAppearance *a_items;
58 gint bullet_w;
59 gint item_h;
60 Point location;
61 Size size;
62 guint xin_area; /* index of the xinerama head/area */
63
64 /* plugin stuff */
65 char *plugin;
66 void *plugin_data;
67 };
68
69 typedef enum
70 {
71 OB_MENU_ENTRY_RENDER_TYPE_NONE,
72 OB_MENU_ENTRY_RENDER_TYPE_SUBMENU,
73 OB_MENU_ENTRY_RENDER_TYPE_BOOLEAN,
74 OB_MENU_ENTRY_RENDER_TYPE_SEPARATOR,
75 OB_MENU_ENTRY_RENDER_TYPE_OTHER /* XXX what is this? */
76 } ObMenuEntryRenderType;
77
78 struct _ObMenuEntry
79 {
80 char *label;
81 ObMenu *parent;
82
83 Action *action;
84
85 ObMenuEntryRenderType render_type;
86 gboolean hilite;
87 gboolean enabled;
88 gboolean boolean_value;
89
90 ObMenu *submenu;
91
92 /* render stuff */
93 Window item;
94 RrAppearance *a_item;
95 RrAppearance *a_disabled;
96 RrAppearance *a_hilite;
97 gint y;
98 gint min_w;
99 };
100
101 void menu_startup();
102 void menu_shutdown();
103
104 #define menu_new(l, n, p) \
105 menu_new_full(l, n, p, NULL, NULL)
106
107 ObMenu *menu_new_full(char *label, char *name, ObMenu *parent,
108 menu_controller_show show, menu_controller_update update);
109 void menu_free(char *name);
110
111 void menu_show(char *name, int x, int y, struct _ObClient *client);
112 void menu_show_full(ObMenu *menu, int x, int y, struct _ObClient *client);
113
114 void menu_hide(ObMenu *self);
115
116 void menu_clear(ObMenu *self);
117
118 ObMenuEntry *menu_entry_new_full(char *label, Action *action,
119 ObMenuEntryRenderType render_type,
120 gpointer submenu);
121
122 #define menu_entry_new(label, action) \
123 menu_entry_new_full(label, action, OB_MENU_ENTRY_RENDER_TYPE_NONE, NULL)
124
125 #define menu_entry_new_separator(label) \
126 menu_entry_new_full(label, NULL, OB_MENU_ENTRY_RENDER_TYPE_SEPARATOR, NULL)
127
128 #define menu_entry_new_submenu(label, submenu) \
129 menu_entry_new_full(label, NULL, OB_MENU_ENTRY_RENDER_TYPE_SUBMENU, submenu)
130
131 #define menu_entry_new_boolean(label, action) \
132 menu_entry_new_full(label, action, OB_MENU_ENTRY_RENDER_TYPE_BOOLEAN, NULL)
133
134 void menu_entry_free(ObMenuEntry *entry);
135
136 void menu_entry_set_submenu(ObMenuEntry *entry, ObMenu *submenu);
137
138 void menu_add_entry(ObMenu *menu, ObMenuEntry *entry);
139
140 ObMenuEntry *menu_find_entry(ObMenu *menu, Window win);
141 ObMenuEntry *menu_find_entry_by_pos(ObMenu *menu, int x, int y);
142
143 void menu_entry_render(ObMenuEntry *self);
144
145 void menu_entry_fire(ObMenuEntry *self);
146
147 void menu_render(ObMenu *self);
148 void menu_render_full(ObMenu *self);
149
150 void menu_control_mouseover(ObMenuEntry *entry, gboolean enter);
151 #endif
This page took 0.039683 seconds and 4 git commands to generate.