]> Dogcows Code - chaz/openbox/commitdiff
titlebar layouts work
authorDana Jansens <danakj@orodu.net>
Fri, 3 Jan 2003 15:55:42 +0000 (15:55 +0000)
committerDana Jansens <danakj@orodu.net>
Fri, 3 Jan 2003 15:55:42 +0000 (15:55 +0000)
scripts/builtins.py
scripts/config.py
src/frame.cc

index bce2b0f076803be8ee4d5e2649cbbe48fb5cbaea..231d5ab5a41e56ce232df0519e7834950f532a7f 100644 (file)
@@ -58,3 +58,5 @@ def resize(data):
                     data.press_clientwidth() + dx,
                     data.press_clientheight() + dy);
 
+def execute(bin, screen = 0):
+    Openbox_execute(openbox, screen, bin)
index c1f60ba04fe3edd37ff8a742fcd189309654a2ba..f0cd4baa96e6b02d90dababfc0022a86d05529a3 100644 (file)
@@ -11,6 +11,13 @@ client_buttons = ["A-1", "A-2", "A-3"]
 # theme - the theme used to decorate everything.
 theme = "/usr/local/share/openbox/styles/nyz"
 
+# titlebar_layout - the layout of the buttons/label on client titlebars, can be
+#                   made up of the following:
+#                   I - iconify button, L - text label, M - maximize button,
+#                   S - sticky button, C - close button
+#                   If no 'L' is included in the string, one will be added to
+#                   the end by Openbox.
+titlebar_layout = "ILC"
 
 #############################################################################
 ### Options that can be modified by the user to change the default hooks' ###
@@ -18,7 +25,7 @@ theme = "/usr/local/share/openbox/styles/nyz"
 #############################################################################
 
 # resize_nearest - 1 to resize from the corner nearest where the mouse is, 0
-#                  to resize always from the bottom right corner
+#                  to resize always from the bottom right corner.
 resize_nearest = 1
 
 
index 6f4bba0061db8d5bb25dece4e6066a0c8f8e1219..8085f952a3c1476cf72229da73d3ca2475752d8c 100644 (file)
@@ -127,7 +127,9 @@ void OBFrame::adjustSize()
   // XXX: only if not overridden or something!!! MORE LOGIC HERE!!
   _decorations = _client->decorations();
   _decorations = 0xffffffff;
-  
+
+  // true/false for whether to show each element of the titlebar
+  bool tit_i = false, tit_m = false, tit_s = false, tit_c = false;
   int width;   // the width of the client and its border
   int bwidth;  // width to make borders
   int cbwidth; // width of the inner client border
@@ -181,11 +183,54 @@ void OBFrame::adjustSize()
     // separation between titlebar elements
     const int sep = bevel + 1;
 
-    std::string layout = "SLIMC"; // XXX: get this from somewhere
-    // XXX: it is REQUIRED that by this point, the string only has one of each
-    // possible letter, all of the letters are valid, and L exists somewhere in
-    // the string!
+    std::string layout;
+    if (!python_get_string("titlebar_layout", &layout))
+      layout = "ILMC";
 
+    // this code ensures that the string only has one of each possible
+    // letter, all of the letters are valid, and L exists somewhere in the
+    // string!
+    bool tit_l = false;
+  
+    for (std::string::size_type i = 0; i < layout.size(); ++i) {
+      switch(layout[i]) {
+      case 'i':
+      case 'I':
+        if (!tit_i && (_decorations & OBClient::Decor_Iconify)) {
+          tit_i = true;
+          continue;
+        }
+      case 'l':
+      case 'L':
+        if (!tit_l) {
+          tit_l = true;
+          continue;
+        }
+      case 'm':
+      case 'M':
+        if (!tit_m && (_decorations & OBClient::Decor_Maximize)) {
+          tit_m = true;
+          continue;
+        }
+      case 's':
+      case 'S':
+        if (!tit_s && (_decorations & OBClient::Decor_Sticky)) {
+          tit_s = true;
+          continue;
+        }
+      case 'c':
+      case 'C':
+        if (!tit_c && (_decorations & OBClient::Decor_Close)) {
+          tit_c = true;
+          continue;
+        }
+      }
+      // if we get here then we don't want the letter, kill it
+      layout.erase(i--, 1);
+    }
+    if (!tit_l)
+      layout += 'L';
+    
     // the size of the label. this ASSUMES the layout has only buttons other
     // that the ONE LABEL!!
     // adds an extra sep so that there's a space on either side of the
@@ -260,19 +305,19 @@ void OBFrame::adjustSize()
   // map/unmap all the windows
   if (_decorations & OBClient::Decor_Titlebar) {
     _label.show();
-    if (_decorations & OBClient::Decor_Iconify)
+    if (tit_i)
       _button_iconify.show();
     else
       _button_iconify.hide();
-    if (_decorations & OBClient::Decor_Maximize)
+    if (tit_m)
       _button_max.show();
     else
       _button_max.hide();
-    if (_decorations & OBClient::Decor_Sticky)
+    if (tit_s)
       _button_stick.show();
     else
       _button_stick.hide();
-    if (_decorations & OBClient::Decor_Close)
+    if (tit_c)
       _button_close.show();
     else
       _button_close.hide();
This page took 0.031345 seconds and 4 git commands to generate.