layers submenu on client
This commit is contained in:
parent
4d814a383b
commit
04a85677e5
2 changed files with 45 additions and 5 deletions
|
@ -272,7 +272,6 @@ void menu_show_full(Menu *self, int x, int y, Client *client)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void menu_hide(Menu *self) {
|
||||
if (self->shown) {
|
||||
XUnmapWindow(ob_display, self->frame);
|
||||
|
|
|
@ -2,9 +2,15 @@
|
|||
|
||||
#include "kernel/menu.h"
|
||||
#include "kernel/screen.h"
|
||||
#include "kernel/client.h"
|
||||
#include "kernel/openbox.h"
|
||||
|
||||
#include "kernel/frame.h"
|
||||
|
||||
static char *PLUGIN_NAME = "client_menu";
|
||||
|
||||
static Menu *send_to_menu;
|
||||
static Menu *layer_menu;
|
||||
|
||||
typedef struct {
|
||||
|
||||
|
@ -20,7 +26,6 @@ void client_menu_clean_up(Menu *m) {
|
|||
void client_send_to_update(Menu *self)
|
||||
{
|
||||
guint i;
|
||||
g_message("yo!");
|
||||
|
||||
for (i = 0; i < screen_num_desktops; ++i) {
|
||||
MenuEntry *e;
|
||||
|
@ -34,6 +39,30 @@ void client_send_to_update(Menu *self)
|
|||
menu_render_full(self);
|
||||
}
|
||||
|
||||
void client_menu_show(Menu *self, int x, int y, Client *client)
|
||||
{
|
||||
int newy;
|
||||
g_assert(!self->invalid);
|
||||
g_assert(client);
|
||||
|
||||
newy = client->frame->area.y + client->frame->a_focused_title->area.height;
|
||||
|
||||
XMoveWindow(ob_display, self->frame,
|
||||
MIN(x, screen_physical_size.width - self->size.width),
|
||||
MIN(newy, screen_physical_size.height - self->size.height));
|
||||
POINT_SET(self->location,
|
||||
MIN(x, screen_physical_size.width - self->size.width),
|
||||
MIN(newy, screen_physical_size.height - self->size.height));
|
||||
|
||||
if (!self->shown) {
|
||||
XMapWindow(ob_display, self->frame);
|
||||
stacking_raise(MENU_AS_WINDOW(self));
|
||||
self->shown = TRUE;
|
||||
} else if (self->shown && self->open_submenu) {
|
||||
menu_hide(self->open_submenu);
|
||||
}
|
||||
}
|
||||
|
||||
void plugin_setup_config() { }
|
||||
|
||||
void plugin_shutdown() { }
|
||||
|
@ -44,7 +73,8 @@ void plugin_destroy (Menu *m)
|
|||
|
||||
void *plugin_create() /* TODO: need config */
|
||||
{
|
||||
Menu *m = menu_new(NULL, "client-menu", NULL);
|
||||
Menu *m = menu_new_full(NULL, "client-menu", NULL,
|
||||
client_menu_show, NULL);
|
||||
menu_add_entry(m, menu_entry_new_submenu("Send To Workspace",
|
||||
send_to_menu));
|
||||
send_to_menu->parent = m;
|
||||
|
@ -61,6 +91,9 @@ void *plugin_create() /* TODO: need config */
|
|||
action_from_string("toggleshade")));
|
||||
menu_add_entry(m, menu_entry_new("Omnipresent",
|
||||
action_from_string("toggleomnipresent")));
|
||||
menu_add_entry(m, menu_entry_new_submenu("Layers",
|
||||
layer_menu));
|
||||
layer_menu->parent = m;
|
||||
|
||||
/* send to desktop
|
||||
iconify
|
||||
|
@ -79,9 +112,17 @@ void plugin_startup()
|
|||
{
|
||||
Menu *t;
|
||||
/* create a Send To Workspace Menu */
|
||||
send_to_menu = menu_new_full("Send To Workspace", "send-to-workspace",
|
||||
send_to_menu = menu_new_full(NULL, "send-to-workspace",
|
||||
NULL, NULL, client_send_to_update);
|
||||
|
||||
layer_menu = menu_new(NULL, "layer", NULL);
|
||||
menu_add_entry(layer_menu, menu_entry_new("Top Layer",
|
||||
action_from_string("sendtotoplayer")));
|
||||
menu_add_entry(layer_menu, menu_entry_new("Normal Layer",
|
||||
action_from_string("sendtonormallayer")));
|
||||
menu_add_entry(layer_menu, menu_entry_new("Bottom Layer",
|
||||
action_from_string("sendtobottomlayer")));
|
||||
|
||||
t = (Menu *)plugin_create("client_menu");
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue