all repos — openbox @ 3443454f33f88e10f187b78594ecfb5c09e1448d

openbox fork - make it a bit more like ryudo

openbox/menu.h (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#ifndef __menu_h
#define __menu_h

#include <glib.h>

typedef struct {
    char *label;
    
    GList *entries;
    /* GList *tail; */

    /* ? */
    gboolean shown;
    gboolean invalid;

    Menu *parent;

    /* waste o' pointers */
    void (*show)( /* some bummu */);
    void (*hide)( /* some bummu */);
    void (*update)( /* some bummu */);
    void (*mouseover)( /* some bummu */);
    void (*selected)( /* some bummu */);
} Menu;

typedef enum MenuEntryRenderType {
    MenuEntryRenderType_None = 0,
    MenuEntryRenderType_Submenu 1 << 0,
    MenuEntryRenderType_Boolean 1 << 1,
    MenuEntryRenderType_Separator 1 << 2,
    
    MenuEntryRenderType_Other 1 << 7
} MenuEntryType;


typedef struct {
    char *label;
    Menu *parent;

    Action action;    
    
    MenuEntryRenderType render_type;
    gboolean enabled;
    gboolean boolean_value;
    gpointer render_data;

    Menu *submenu;
} MenuEntry;

Menu *menu_new(char *label, Menu *parent);
MenuEntry *menu_entry_new_full(char *label, Action *action,
                          MenuEntryRenderType render_type,
                          gpointer render_data, gpointer submenu);

#define menu_entry_new(label, action) \
  menu_entry_new(label, action, MenuEntryRenderType_None, NULL, NULL)

void menu_entry_set_submenu(MenuEntry *entry, Menu *submenu);

void menu_add_entry(Menu *menu, MenuEntry *entry);
#endif