summaryrefslogtreecommitdiff
path: root/openbox/menuframe.h
diff options
context:
space:
mode:
Diffstat (limited to 'openbox/menuframe.h')
-rw-r--r--openbox/menuframe.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/openbox/menuframe.h b/openbox/menuframe.h
new file mode 100644
index 00000000..f7391444
--- /dev/null
+++ b/openbox/menuframe.h
@@ -0,0 +1,95 @@
+#ifndef ob__menuframe_h
+#define ob__menuframe_h
+
+#include "geom.h"
+#include "window.h"
+#include "render/render.h"
+
+#include <glib.h>
+
+struct _ObClient;
+struct _ObMenu;
+struct _ObMenuEntry;
+
+typedef struct _ObMenuFrame ObMenuFrame;
+typedef struct _ObMenuEntryFrame ObMenuEntryFrame;
+
+extern GList *menu_frame_visible;
+
+struct _ObMenuFrame
+{
+ /* stuff to be an ObWindow */
+ Window_InternalType type;
+ Window window;
+
+ struct _ObMenu *menu;
+
+ /* The client that the visual instance of the menu is associated with for
+ its actions */
+ struct _ObClient *client;
+
+ ObMenuFrame *parent;
+ ObMenuFrame *child;
+
+ /* On-screen area (including borders!) */
+ Rect area;
+ gint inner_w; /* inside the borders */
+ gint title_h; /* includes the bwidth below it */
+ gint item_h; /* height of all normal items */
+ gint text_x; /* offset at which the text appears in the items */
+ gint text_w; /* width of the text area in the items */
+
+ GList *entries;
+ ObMenuEntryFrame *selected;
+
+ Window title;
+ Window items;
+
+ RrAppearance *a_title;
+ RrAppearance *a_items;
+};
+
+struct _ObMenuEntryFrame
+{
+ struct _ObMenuEntry *entry;
+ ObMenuFrame *frame;
+
+ Rect area;
+
+ Window window;
+ Window icon;
+ Window text;
+ Window bullet;
+
+ RrAppearance *a_normal;
+ RrAppearance *a_disabled;
+ RrAppearance *a_selected;
+
+ RrAppearance *a_icon;
+ RrAppearance *a_bullet;
+ RrAppearance *a_text_normal;
+ RrAppearance *a_text_disabled;
+ RrAppearance *a_text_selected;
+};
+
+ObMenuFrame* menu_frame_new(struct _ObMenu *menu, struct _ObClient *client);
+void menu_frame_free(ObMenuFrame *self);
+
+void menu_frame_move(ObMenuFrame *self, gint x, gint y);
+void menu_frame_move_on_screen(ObMenuFrame *self);
+
+void menu_frame_show(ObMenuFrame *self, ObMenuFrame *parent);
+void menu_frame_hide(ObMenuFrame *self);
+
+void menu_frame_hide_all();
+
+void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry);
+
+ObMenuFrame* menu_frame_under(gint x, gint y);
+ObMenuEntryFrame* menu_entry_frame_under(gint x, gint y);
+
+void menu_entry_frame_show_submenu(ObMenuEntryFrame *self);
+
+void menu_entry_frame_execute(ObMenuEntryFrame *self);
+
+#endif