- 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_MAXIMIZE);
- menu_entry_set_label(e,
- (frame->client->max_vert || frame->client->max_horz ?
- _("Restor&e") : _("Maximiz&e")), TRUE);
- e->data.normal.enabled =frame->client->functions & OB_CLIENT_FUNC_MAXIMIZE;
-
- e = menu_find_entry_id(menu, CLIENT_SHADE);
- menu_entry_set_label(e, (frame->client->shaded ?
- _("&Roll down") : _("&Roll up")), TRUE);
- 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;
+static void client_menu_execute(ObMenuEntry *e, ObMenuFrame *f,
+ ObClient *c, guint state, gpointer data,
+ Time time)
+{
+ gint x, y;
+
+ g_assert(c);
+
+ switch (e->id) {
+ case CLIENT_ICONIFY:
+ /* the client won't be on screen anymore so hide the menu */
+ menu_frame_hide_all();
+ f = NULL; /* and don't update */
+
+ client_iconify(c, TRUE, FALSE, 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:
+ /* this needs to grab the keyboard so hide the menu */
+ menu_frame_hide_all();
+ f = NULL; /* and don't update */
+
+ screen_pointer_pos(&x, &y);
+ moveresize_start(c, x, y, 0,
+ prop_atoms.net_wm_moveresize_move_keyboard);
+ break;
+ case CLIENT_RESIZE:
+ /* this needs to grab the keyboard so hide the menu */
+ menu_frame_hide_all();
+ f = NULL; /* and don't update */
+
+ screen_pointer_pos(&x, &y);
+ moveresize_start(c, x, y, 0,
+ prop_atoms.net_wm_moveresize_size_keyboard);
+ break;
+ case CLIENT_CLOSE:
+ client_close(c);
+ break;
+ default:
+ g_assert_not_reached();
+ }