Openbox2 patch 4a replaces patch 4

Marc Wilson msw at cox.net
Mon Aug 11 18:26:36 EDT 2003


Due to a stupid mistake on my part, patch 4 does not take into proper
account what should happen when you pop the root menu less than half the
width of the root menu in pixels from the left edge of the right monitor.

This is a corrected patch.

-- 
 Marc Wilson |     Class, that's the only thing that counts in life.
 msw at cox.net |     Class.  Without class and style, a man's a bum;
             |     he might as well be dead.  -- "Bugsy" Siegel
-------------- next part --------------
--- src/Screen.cc.orig	2003-08-04 19:24:27.000000000 -0700
+++ src/Screen.cc	2003-08-11 15:16:17.000000000 -0700
@@ -2614,8 +2645,31 @@
   if (mx < 0) mx = 0;
   if (my < 0) my = 0;
 
+#ifdef     XINERAMA
+  if (isXineramaActive()) {
+    int t = mx;  // our original position
+    int w = getWidth()/2;  // half of the screen
+
+    // ok, is the menu crossing from the left?
+    if ( (mx + workspacemenu->getWidth() > w && (mx < w) && (x < w)) )
+      t = (getWidth()/2) - workspacemenu->getWidth() - getBorderWidth();
+
+    // is it crossing from the right?
+    if ( (mx + workspacemenu->getWidth() > w && (mx < w) && (x > w)) )
+      t = (getWidth()/2);
+
+    // no, use normal positioning
+    if (mx + workspacemenu->getWidth() > getWidth())
+      t = getWidth() - workspacemenu->getWidth() - getBorderWidth();
+
+    mx = t;
+  } else
+      if (mx + workspacemenu->getWidth() > getWidth())
+        mx = getWidth() - workspacemenu->getWidth() - getBorderWidth();
+#else
   if (mx + workspacemenu->getWidth() > getWidth())
     mx = getWidth() - workspacemenu->getWidth() - getBorderWidth();
+#endif
 
   if (my + workspacemenu->getHeight() > getHeight())
     my = getHeight() - workspacemenu->getHeight() - getBorderWidth();
@@ -2632,16 +2686,38 @@
 void BScreen::showRootMenu(int x, int y) {
   int mx = x - (rootmenu->getWidth() / 2);
   int my = y - (rootmenu->getTitleHeight() / 2);
-
+  
   if (mx < 0) mx = 0;
   if (my < 0) my = 0;
 
+#ifdef     XINERAMA
+  if (isXineramaActive()) {
+    int t = mx;  // our original position
+    int w = getWidth()/2;  // half of the screen
+
+    // ok, is the menu crossing from the left?
+    if ( (mx + rootmenu->getWidth() > w && (mx < w) && (x < w)) )
+      t = (getWidth()/2) - rootmenu->getWidth() - getBorderWidth();
+
+    // is it crossing from the right?
+    if ( (mx + rootmenu->getWidth() > w && (mx < w) && (x > w)) )
+      t = (getWidth()/2);
+
+    // no, use normal positioning
+    if (mx + rootmenu->getWidth() > getWidth())
+      t = getWidth() - rootmenu->getWidth() - getBorderWidth();
+
+    mx = t;
+  } else
+      if (mx + rootmenu->getWidth() > getWidth())
+        mx = getWidth() - rootmenu->getWidth() - getBorderWidth();
+#else
   if (mx + rootmenu->getWidth() > getWidth())
     mx = getWidth() - rootmenu->getWidth() - getBorderWidth();
+#endif
 
   if (my + rootmenu->getHeight() > getHeight())
     my = getHeight() - rootmenu->getHeight() - getBorderWidth();
-
   rootmenu->move(mx, my);
 
   if (! rootmenu->isVisible()) {
--- src/Basemenu.cc.orig	2003-08-11 11:57:03.000000000 -0700
+++ src/Basemenu.cc	2003-08-11 12:04:25.000000000 -0700
@@ -494,9 +494,29 @@
       y = (((shifted) ? menu.y_shift : menu.y) +
            menu.height - submenu->menu.height);
 
+#ifdef     XINERAMA
+    if (screen->isXineramaActive()) {
+      int t = x;  // our original position
+      int w = screen->getWidth()/2;  // half of the screen
+    
+      if ( (x + submenu->getWidth()) > w && (x <= w) )
+        t = ((shifted) ? menu.x_shift : menu.x) -
+          submenu->getWidth() - screen->getBorderWidth();
+        
+      if ((x + submenu->getWidth()) > screen->getWidth())
+        t = ((shifted) ? menu.x_shift : menu.x) -
+          submenu->getWidth() - screen->getBorderWidth();
+
+      x = t;
+    } else
+        if ((x + submenu->getWidth()) > screen->getWidth())
+          x = ((shifted) ? menu.x_shift : menu.x) -
+            submenu->getWidth() - screen->getBorderWidth();
+#else
     if ((x + submenu->getWidth()) > screen->getWidth())
       x = ((shifted) ? menu.x_shift : menu.x) -
         submenu->getWidth() - screen->getBorderWidth();
+#endif
 
     if (x < 0) x = 0;
 


More information about the openbox mailing list