aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/comet.c48
1 files changed, 41 insertions, 7 deletions
diff --git a/src/comet.c b/src/comet.c
index ece7c89..6257bf1 100644
--- a/src/comet.c
+++ b/src/comet.c
@@ -196,6 +196,25 @@ static void quit_action(Button *btn)
g_main_loop_quit(CAST(btn, ButtonSimple)->action_data);
}
+static void menu_action(Button *btn)
+{
+ struct {
+ ButtonGroup *group;
+ GList *toggled;
+ State *state;
+ } *menu_ctx = CAST(btn, ButtonSimple)->action_data;
+
+ // Otherwise the menu can't be closed
+ g_assert(menu_ctx->group->children->data == btn);
+
+ GList *temp = menu_ctx->group->children;
+ menu_ctx->group->children = menu_ctx->toggled;
+ menu_ctx->toggled = temp;
+
+ log_debug("Toggled menu");
+ state_redraw(menu_ctx->state, true);
+}
+
static void register_buttons(State *state, Color color, Color line_color, Color text_color)
{
// Tags button
@@ -309,22 +328,35 @@ int main(int argc, char **argv)
Button *child1 = button_simple_create(PANGO_ALIGN_CENTER, color, line_color);
button_set_padding(child1, 1);
- button_simple_set_text(child1, "Open", text_color);
+ button_simple_set_text(child1, "C1", text_color);
button_simple_set_action(child1, show_action, NULL);
Button *child2 = button_simple_create(PANGO_ALIGN_CENTER, color, line_color);
button_set_padding(child2, 1);
- button_simple_set_text(child2, "Firefox", text_color);
+ button_simple_set_text(child2, "C2", text_color);
button_simple_set_action(child2, show_action, NULL);
Button *child3 = button_simple_create(PANGO_ALIGN_CENTER, color, line_color);
- button_set_padding(child3, 0);
- button_simple_set_text(child3, "Alacritty", text_color);
+ button_set_padding(child3, 1);
+ button_simple_set_text(child3, "C3", text_color);
button_simple_set_action(child3, show_action, NULL);
- button_group_append(group, child1);
- button_group_append(group, child2);
- button_group_append(group, child3);
+ struct {
+ ButtonGroup *group;
+ GList *toggled;
+ State *state;
+ } menu_ctx = { (gpointer)group, NULL, state };
+
+ Button *menu = button_simple_create(PANGO_ALIGN_CENTER, color, line_color);
+ button_simple_set_text(menu, "Open", text_color);
+ button_simple_set_action(menu, menu_action, &menu_ctx);
+
+ menu_ctx.toggled = g_list_append(menu_ctx.toggled, menu);
+ menu_ctx.toggled = g_list_append(menu_ctx.toggled, child1);
+ menu_ctx.toggled = g_list_append(menu_ctx.toggled, child2);
+ menu_ctx.toggled = g_list_append(menu_ctx.toggled, child3);
+
+ button_group_append(group, menu);
state_add_button(state, group);
connect_attach_state(con, state);
@@ -347,7 +379,9 @@ int main(int argc, char **argv)
g_source_remove(source_int);
timer_delete(date_ctx.timer);
+ g_list_free(menu_ctx.toggled);
+ // Buttons are freed by state_destroy
state_destroy(state);
draw_destroy(draw);
window_destroy(win);