- e = menu_find_entry_id(menu, CLIENT_ICONIFY);
- e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_ICONIFY;
-
- e = menu_find_entry_id(menu, CLIENT_RESTORE);
- e->data.normal.enabled =frame->client->max_horz || frame->client->max_vert;
-
- e = menu_find_entry_id(menu, CLIENT_MAXIMIZE);
- e->data.normal.enabled =
- (frame->client->functions & OB_CLIENT_FUNC_MAXIMIZE) &&
- !frame->client->max_horz && !frame->client->max_vert;
-
- e = menu_find_entry_id(menu, CLIENT_SHADE);
- e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_SHADE;
-
- e = menu_find_entry_id(menu, CLIENT_MOVE);
- e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_MOVE;
-
- e = menu_find_entry_id(menu, CLIENT_RESIZE);
- e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_RESIZE;
-
- e = menu_find_entry_id(menu, CLIENT_CLOSE);
- e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_CLOSE;
+static void client_menu_execute(ObMenuEntry *e, guint state, gpointer data,
+ Time time)
+{
+ GList *it;
+ ObMenuFrame *f;
+ ObClient *c;
+
+ /* find our frame */
+ for (it = menu_frame_visible; it; it = g_list_next(it)) {
+ f = it->data;
+ /* yay this is our menu frame */
+ if (f->menu == e->menu)
+ break;
+ }
+ g_assert(it);
+
+ c = f->client;
+
+ switch (e->id) {
+ case CLIENT_ICONIFY:
+ client_iconify(c, TRUE, FALSE);
+ break;
+ case CLIENT_RESTORE:
+ client_maximize(c, FALSE, 0);
+ break;
+ case CLIENT_MAXIMIZE:
+ client_maximize(c, TRUE, 0);
+ break;
+ case CLIENT_SHADE:
+ client_shade(c, !c->shaded);
+ break;
+ case CLIENT_DECORATE:
+ client_set_undecorated(c, !c->undecorated);
+ break;
+ case CLIENT_MOVE:
+ moveresize_start(c,0,0,0, prop_atoms.net_wm_moveresize_move_keyboard);
+ break;
+ case CLIENT_RESIZE:
+ moveresize_start(c,0,0,0,prop_atoms.net_wm_moveresize_size_keyboard);
+ break;
+ case CLIENT_CLOSE:
+ client_close(c);
+ break;
+ default:
+ g_assert_not_reached();
+ }