Because Netscape insists on opening on the left hand side of the
screen, I decided to write a patch that would allow the auto-placement
settings to work from right-to-left or from left-to-right. The patch
adds an option to the config menu that will allow you to choose which of
these two options you would like.
The only actual changes to the run-time code, not including the menu
options, were two if statments and a conditional. So this should not
really make any difference in performance. Try it out if you get a
chance and tell me how things go.
--
Ryan Patrick Harris (maXter)
[EMAIL PROTECTED]
http://www-personal.engin.umich.edu/~rpharris
University of Michigan EECS
diff -urN blackbox-0.60.0.orig/src/Configmenu.cc blackbox-0.60.0.new/src/Configmenu.cc
--- blackbox-0.60.0.orig/src/Configmenu.cc Sun Mar 19 17:21:51 2000
+++ blackbox-0.60.0.new/src/Configmenu.cc Wed Apr 26 23:14:31 2000
@@ -85,17 +85,17 @@
switch(item->function()) {
case 1: { // dither
Bool change = ((screen->getImageControl()->doDither()) ? False : True);
- screen->getImageControl()->setDither(change);
+ screen->getImageControl()->setDither(change);
- setItemSelected(index, screen->getImageControl()->doDither());
+ setItemSelected(index, screen->getImageControl()->doDither());
break; }
case 2: { // opaque move
Bool change = (! screen->doOpaqueMove());
- screen->saveOpaqueMove(change);
+ screen->saveOpaqueMove(change);
- setItemSelected(index, screen->doOpaqueMove());
+ setItemSelected(index, screen->doOpaqueMove());
break; }
@@ -215,9 +215,21 @@
insert("Smart Placement (Rows)", BScreen::RowSmartPlacement);
insert("Smart Placement (Columns)", BScreen::ColSmartPlacement);
insert("Cascade Placement", BScreen::CascadePlacement);
+ insert("Left To Right", BScreen::PlacementRight);
+ insert("Right To Left", BScreen::PlacementLeft);
update();
+ switch (configmenu->screen->getPlacementDirection()) {
+ case BScreen::PlacementRight:
+ setItemSelected(3, True);
+ break;
+
+ case BScreen::PlacementLeft:
+ setItemSelected(4, True);
+ break;
+ }
+
switch (configmenu->screen->getPlacementPolicy()) {
case BScreen::RowSmartPlacement:
setItemSelected(0, True);
@@ -229,8 +241,12 @@
case BScreen::CascadePlacement:
setItemSelected(2, True);
+ setItemEnabled(3, False);
+ setItemSelected(3, False);
+ setItemEnabled(4, False);
+ setItemSelected(4, False);
break;
- }
+ }
}
@@ -248,32 +264,38 @@
if (item->function()) {
switch (item->function()) {
case BScreen::RowSmartPlacement:
- configmenu->screen->savePlacementPolicy(item->function());
-
- setItemSelected(0, True);
- setItemSelected(1, False);
- setItemSelected(2, False);
-
- break;
-
- case BScreen::ColSmartPlacement:
+ case BScreen::ColSmartPlacement:
configmenu->screen->savePlacementPolicy(item->function());
-
- setItemSelected(0, False);
- setItemSelected(1, True);
- setItemSelected(2, False);
-
break;
-
- case BScreen::CascadePlacement:
- configmenu->screen->savePlacementPolicy(item->function());
- setItemSelected(0, False);
- setItemSelected(1, False);
- setItemSelected(2, True);
+ case BScreen::CascadePlacement:
+ configmenu->screen->savePlacementPolicy(item->function());
+ break;
- break;
+ case BScreen::PlacementRight:
+ case BScreen::PlacementLeft:
+ configmenu->screen->savePlacementDirection(item->function());
+ break;
}
}
}
+ setItemSelected(0, (configmenu->screen->getPlacementPolicy() ==
+ BScreen::RowSmartPlacement));
+ setItemSelected(1, (configmenu->screen->getPlacementPolicy() ==
+ BScreen::ColSmartPlacement));
+ setItemSelected(2, (configmenu->screen->getPlacementPolicy() ==
+ BScreen::CascadePlacement));
+ setItemEnabled(3, (configmenu->screen->getPlacementPolicy() !=
+ BScreen::CascadePlacement));
+ setItemSelected(3, (configmenu->screen->getPlacementDirection() ==
+ BScreen::PlacementRight) &&
+ (configmenu->screen->getPlacementPolicy() !=
+ BScreen::CascadePlacement));
+ setItemEnabled(4, (configmenu->screen->getPlacementPolicy() !=
+ BScreen::CascadePlacement));
+ setItemSelected(4, (configmenu->screen->getPlacementDirection() ==
+ BScreen::PlacementLeft) &&
+ (configmenu->screen->getPlacementPolicy() !=
+ BScreen::CascadePlacement));
+
}
diff -urN blackbox-0.60.0.orig/src/Screen.hh blackbox-0.60.0.new/src/Screen.hh
--- blackbox-0.60.0.orig/src/Screen.hh Sun Mar 19 17:17:31 2000
+++ blackbox-0.60.0.new/src/Screen.hh Wed Apr 26 20:59:18 2000
@@ -119,7 +119,8 @@
MenuStyle mstyle;
Bool toolbar_on_top, sloppy_focus, auto_raise, auto_edge_balance,
- image_dither, ordered_dither, opaque_move, full_max, focus_new;
+ image_dither, ordered_dither, opaque_move, full_max, focus_new,
+ placement_direction;
BColor border_color;
XrmDatabase stylerc;
@@ -219,6 +220,8 @@
{ return resource.toolbar_width_percent; }
inline const int &getPlacementPolicy(void) const
{ return resource.placement_policy; }
+ inline const int &getPlacementDirection(void) const
+ { return resource.placement_direction; }
inline const int &getEdgeSnapThreshold(void) const
{ return resource.edge_snap_threshold; }
@@ -231,6 +234,7 @@
{ resource.toolbar_width_percent = w; }
inline void saveToolbarPlacement(int p) { resource.toolbar_placement = p; }
inline void savePlacementPolicy(int p) { resource.placement_policy = p; }
+ inline void savePlacementDirection(int d) { resource.placement_direction = d;}
inline void saveEdgeSnapThreshold(int t)
{ resource.edge_snap_threshold = t; }
inline void saveImageDither(Bool d) { resource.image_dither = d; }
@@ -284,7 +288,9 @@
void updateNetizenWindowRaise(Window);
void updateNetizenWindowLower(Window);
- enum { RowSmartPlacement = 1, ColSmartPlacement, CascadePlacement };
+ enum { RowSmartPlacement = 1, ColSmartPlacement, CascadePlacement,
+ PlacementRight, PlacementLeft };
+
enum { LeftJustify = 1, RightJustify, CenterJustify };
enum { RoundBullet = 1, TriangleBullet, SquareBullet, NoBullet };
enum { Restart = 1, RestartOther, Exit, Shutdown, Execute, Reconfigure,
diff -urN blackbox-0.60.0.orig/src/Workspace.cc blackbox-0.60.0.new/src/Workspace.cc
--- blackbox-0.60.0.orig/src/Workspace.cc Sun Mar 19 20:11:07 2000
+++ blackbox-0.60.0.new/src/Workspace.cc Wed Apr 26 21:31:25 2000
@@ -366,13 +366,18 @@
switch (screen->getPlacementPolicy()) {
case BScreen::RowSmartPlacement: {
- test_x = test_y = screen->getBorderWidth() +
- screen->getEdgeSnapThreshold();
+ test_y = screen->getBorderWidth() + screen->getEdgeSnapThreshold();
while (test_y + win_h < (signed) screen->getHeight() && ! placed) {
- test_x = screen->getBorderWidth() + screen->getEdgeSnapThreshold();
-
- while (test_x + win_w < (signed) screen->getWidth() && ! placed) {
+ if(screen->getPlacementDirection() == BScreen::PlacementRight)
+ test_x = screen->getBorderWidth() + screen->getEdgeSnapThreshold();
+ else
+ test_x = screen->getWidth() - screen->getEdgeSnapThreshold() -
+ screen->getBorderWidth2x() - screen->getBorderWidth2x() - win_w;
+
+ while ((screen->getPlacementDirection() == BScreen::PlacementRight ?
+ test_x + win_w < (signed) screen->getWidth() :
+ test_x > 0) && ! placed) {
placed = True;
it.reset();
@@ -414,7 +419,9 @@
break;
}
- test_x += 2;
+ if(screen->getPlacementDirection() == BScreen::PlacementRight)
+ test_x += 2;
+ else test_x -= 2;
}
test_y += 2;
@@ -423,10 +430,15 @@
break; }
case BScreen::ColSmartPlacement: {
- test_x = test_y = screen->getBorderWidth() +
- screen->getEdgeSnapThreshold();
+ if( screen->getPlacementDirection() == BScreen::PlacementRight)
+ test_x = screen->getBorderWidth() +
+ screen->getEdgeSnapThreshold();
+ else
+ test_x = screen->getWidth() - screen->getEdgeSnapThreshold() -
+ screen->getBorderWidth2x() - screen->getBorderWidth2x() - win_w;
- while (test_x + win_w < (signed) screen->getWidth() && ! placed) {
+ while ((screen->getPlacementDirection() == BScreen::PlacementRight ?
+ test_x + win_w < (signed) screen->getWidth() : test_x > 0) && ! placed) {
test_y = screen->getBorderWidth() + screen->getEdgeSnapThreshold();
while (test_y + win_h < (signed) screen->getHeight() && ! placed) {
@@ -472,9 +484,11 @@
}
test_y += 2;
- }
+ }
- test_x += 2;
+ if(screen->getPlacementDirection() == BScreen::PlacementRight)
+ test_x += 2;
+ else test_x -= 2;
}
break; }
diff -urN blackbox-0.60.0.orig/src/blackbox.cc blackbox-0.60.0.new/src/blackbox.cc
--- blackbox-0.60.0.orig/src/blackbox.cc Thu Mar 30 18:36:37 2000
+++ blackbox-0.60.0.new/src/blackbox.cc Wed Apr 26 17:17:27 2000
@@ -1095,6 +1095,22 @@
placement);
XrmPutLineResource(&new_blackboxrc, rc_string);
+ char *direction = (char *) 0;
+ switch (screen->getPlacementDirection()) {
+
+ case BScreen::PlacementRight:
+ direction = "PlacementRight";
+ break;
+
+ default:
+ case BScreen::PlacementLeft:
+ direction = "PlacementLeft";
+ break;
+ }
+ sprintf(rc_string, "session.screen%d.placementDirection: %s",
+ screen_number , direction);
+ XrmPutLineResource(&new_blackboxrc, rc_string);
+
sprintf(rc_string, "session.screen%d.focusModel: %s", screen_number,
((screen->isSloppyFocus()) ?
((screen->doAutoRaise()) ? "AutoRaiseSloppyFocus" :
@@ -1521,6 +1537,17 @@
screen->savePlacementPolicy(BScreen::CascadePlacement);
else
screen->savePlacementPolicy(BScreen::RowSmartPlacement);
+
+ sprintf(name_lookup, "session.screen%d.placementDirection", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.placementDirection", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value))
+ if (! strncasecmp(value.addr, "PlacementRight", value.size))
+ screen->savePlacementDirection(BScreen::PlacementRight);
+ else
+ screen->savePlacementDirection(BScreen::PlacementLeft);
+ else
+ screen->savePlacementDirection(BScreen::PlacementLeft);
#ifdef SLIT
sprintf(name_lookup, "session.screen%d.slit.placement", screen_number);