all repos — openbox @ d3359676e49b558cb7c6e24ea889c037d044b79f

openbox fork - make it a bit more like ryudo

Let the menu placement code know if the position was user specified

This way, it can avoid running the code that moves it to a good position
relative to a mouse that isn't there
Mikael Magnusson mikachu@gmail.com
commit

d3359676e49b558cb7c6e24ea889c037d044b79f

parent

1b3afcff1fea0d1334b50dff378a6667e264b557

5 files changed, 17 insertions(+), 8 deletions(-)

jump to
M openbox/actions/showmenu.copenbox/actions/showmenu.c

@@ -115,7 +115,8 @@ }

/* you cannot call ShowMenu from inside a menu */ if (data->uact != OB_USER_ACTION_MENU_SELECTION && o->name) - menu_show(o->name, position, monitor, data->button != 0, data->client); + menu_show(o->name, position, monitor, + data->button != 0, o->use_position, data->client); return FALSE; }
M openbox/menu.copenbox/menu.c

@@ -458,7 +458,7 @@ return FALSE; /* no repeat */

} void menu_show(gchar *name, GravityPoint pos, gint monitor, - gboolean mouse, ObClient *client) + gboolean mouse, gboolean user_positioned, ObClient *client) { ObMenu *self; ObMenuFrame *frame;

@@ -480,7 +480,7 @@ /* clear the pipe menus when showing a new menu */

menu_clear_pipe_caches(); frame = menu_frame_new(self, 0, client); - if (!menu_frame_show_topmenu(frame, pos, monitor, mouse)) + if (!menu_frame_show_topmenu(frame, pos, monitor, mouse, user_positioned)) menu_frame_free(frame); else { if (!mouse) {
M openbox/menu.hopenbox/menu.h

@@ -182,7 +182,8 @@

void menu_show_all_shortcuts(ObMenu *self, gboolean show); void menu_show(gchar *name, GravityPoint pos, gint monitor, - gboolean mouse, struct _ObClient *client); + gboolean mouse, gboolean user_positioned, + struct _ObClient *client); gboolean menu_hide_delay_reached(void); /*! The show function is called right after a menu is shown */
M openbox/menuframe.copenbox/menuframe.c

@@ -233,12 +233,16 @@ XMoveWindow(obt_display, self->window, self->area.x, self->area.y);

} static void menu_frame_place_topmenu(ObMenuFrame *self, GravityPoint *pos, - gint *x, gint *y, gint monitor) + gint *x, gint *y, gint monitor, + gboolean user_positioned) { gint dx, dy; screen_apply_gravity_point(x, y, self->area.width, self->area.height, pos, screen_physical_area_monitor(monitor)); + + if (user_positioned) + return; if (config_menu_middle) { gint myx;

@@ -994,7 +998,8 @@ return TRUE;

} gboolean menu_frame_show_topmenu(ObMenuFrame *self, GravityPoint pos, - gint monitor, gboolean mouse) + gint monitor, gboolean mouse, + gboolean user_positioned) { gint px, py; gint x, y;

@@ -1009,7 +1014,8 @@ x = pos.x.pos;

y = pos.y.pos; self->menu->place_func(self, &x, &y, mouse, self->menu->data); } else { - menu_frame_place_topmenu(self, &pos, &x, &y, monitor); + menu_frame_place_topmenu(self, &pos, &x, &y, monitor, + user_positioned); } menu_frame_move(self, x, y);
M openbox/menuframe.hopenbox/menuframe.h

@@ -121,7 +121,8 @@ void menu_frame_move_on_screen(ObMenuFrame *self, gint x, gint y,

gint *dx, gint *dy); gboolean menu_frame_show_topmenu(ObMenuFrame *self, GravityPoint pos, - gint monitor, gboolean mouse); + gint monitor, gboolean mouse, + gboolean user_positioned); gboolean menu_frame_show_submenu(ObMenuFrame *self, ObMenuFrame *parent, ObMenuEntryFrame *parent_entry);