Let the menu placement code know if the position was user specified
[mikachu/openbox.git] / openbox / menuframe.c
index 61632f9..4bb93b6 100644 (file)
@@ -233,13 +233,17 @@ void menu_frame_move(ObMenuFrame *self, gint x, gint 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(pos, x, y, screen_physical_area_monitor(monitor),
                                self->area.width, self->area.height);
 
+    if (user_positioned)
+        return;
+
     if (config_menu_middle) {
 
         *x -= self->area.width / 2;
@@ -982,7 +986,8 @@ static gboolean menu_frame_show(ObMenuFrame *self)
 }
 
 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;
@@ -997,7 +1002,8 @@ gboolean menu_frame_show_topmenu(ObMenuFrame *self, GravityPoint 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,
+                                 !mouse && user_positioned);
     }
 
     menu_frame_move(self, x, y);