Sisyphus repository
Last update: 1 october 2023 | SRPMs: 18631 | Visits: 37850228
en ru br
ALT Linux repos
S:3.4.2-alt1
5.0: 1.2.36-alt2.1
4.1: 1.2.35-alt2.1
4.0: 1.2.32-alt2.1
3.0: 1.2.23-alt1
+backports:1.2.30-alt1.M30.1

Group :: Graphical desktop/Icewm
RPM: icewm

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs and FR  Repocop 

Patch: icewm-alt-taskbar.patch
Download


 icewm/src/atasks.cc    |  4 +++-
 icewm/src/atray.cc     | 32 ++++++++++++++++++--------------
 icewm/src/default.h    |  6 ++++++
 icewm/src/objbar.cc    |  2 +-
 icewm/src/themable.h   | 11 +++++++++++
 icewm/src/wmtaskbar.cc | 35 ++++++++++++++++++++++++-----------
 6 files changed, 63 insertions(+), 27 deletions(-)
diff --git a/icewm/src/atasks.cc b/icewm/src/atasks.cc
index 8d213d7..8a038fb 100644
--- a/icewm/src/atasks.cc
+++ b/icewm/src/atasks.cc
@@ -455,6 +455,8 @@ void TaskPane::relayoutNow() {
     int rightX = width();
 
     w = (rightX - leftX - 2) / tc;
+    w -= taskButtonSepSize;
+    w = (taskButtonWidth && w > taskButtonWidth) ? taskButtonWidth : w;
     int rem = (rightX - leftX - 2) % tc;
     x = leftX;
     h = height();
@@ -473,7 +475,7 @@ void TaskPane::relayoutNow() {
             f->setGeometry(YRect(x, y, w1, h));
             f->show();
             x += w1;
-            x += 0;
+            x += taskButtonSepSize ;
             lc++;
         } else
             f->hide();
diff --git a/icewm/src/atray.cc b/icewm/src/atray.cc
index 5fdfeef..38a1ed3 100644
--- a/icewm/src/atray.cc
+++ b/icewm/src/atray.cc
@@ -116,29 +116,29 @@ void TrayApp::paint(Graphics &g, const YRect &/*r*/) {
     } else if (getFrame()->isMinimized()) {
         bg = minimizedTrayAppBg;
         fg = minimizedTrayAppFg;
-        bgPix = taskbuttonminimizedPixmap;
+        bgPix = trayPanelUseBgPixmaps ? taskbuttonminimizedPixmap : taskbackPixmap;
 #ifdef CONFIG_GRADIENTS
-        if (taskMinimizedGradient == null && taskbuttonminimizedPixbuf != null)
+        if (trayPanelUseBgPixmaps && taskMinimizedGradient == null && taskbuttonminimizedPixbuf != null)
             taskMinimizedGradient = taskbuttonminimizedPixbuf->scale(sw, sh);
-        bgGrad = taskMinimizedGradient;
+        bgGrad = trayPanelUseBgPixmaps ? taskMinimizedGradient : getGradient();
 #endif
     } else if (getFrame()->focused()) {
         bg = activeTrayAppBg;
         fg = activeTrayAppFg;
-        bgPix = taskbuttonactivePixmap;
+        bgPix = trayPanelUseBgPixmaps ? taskbuttonactivePixmap : taskbackPixmap;
 #ifdef CONFIG_GRADIENTS
-        if (taskActiveGradient == null && taskbuttonactivePixbuf != null)
+        if (trayPanelUseBgPixmaps && taskActiveGradient == null && taskbuttonactivePixbuf != null)
             taskActiveGradient = taskbuttonactivePixbuf->scale(sw, sh);
-        bgGrad = taskActiveGradient;
+        bgGrad = trayPanelUseBgPixmaps ? taskActiveGradient : getGradient();
 #endif
     } else {
         bg = normalTrayAppBg;
         fg = normalTrayAppFg;
-        bgPix = taskbuttonPixmap;
+        bgPix = trayPanelUseBgPixmaps ? taskbuttonPixmap : taskbackPixmap;
 #ifdef CONFIG_GRADIENTS
-        if (taskNormalGradient == null && taskbuttonPixbuf != null)
+        if (trayPanelUseBgPixmaps && taskNormalGradient == null && taskbuttonPixbuf != null)
             taskNormalGradient = taskbuttonPixbuf->scale(sw, sh);
-        bgGrad = taskNormalGradient;
+        bgGrad = trayPanelUseBgPixmaps ? taskNormalGradient : getGradient();
 #endif
     }
 
@@ -156,7 +156,10 @@ void TrayApp::paint(Graphics &g, const YRect &/*r*/) {
             else
 #endif
             if (bgPix != null)
+                if (trayPanelUseBgPixmaps)
                 g.fillPixmap(bgPix, 0, 0, width(), height(), 0, 0);
+                else
+                   g.fillPixmap(bgPix, 0, 0, width(), height(), parent()->x(), parent()->y());
             else {
                 g.setColor(bg);
                 g.fillRect(0, 0, width(), height());
@@ -167,7 +170,7 @@ void TrayApp::paint(Graphics &g, const YRect &/*r*/) {
     ref<YIcon> icon(getFrame()->getIcon());
 
     if (icon != null) {
-        icon->draw(g, 2, 2, YIcon::smallSize());
+        icon->draw(g, (width()-smallIconSize) / 2, (height()-smallIconSize) / 2, smallIconSize);
     }
 }
 
@@ -333,7 +336,7 @@ int TrayPane::getRequiredWidth() {
     for (TrayApp *a(fFirst); a != NULL; a = a->getNext())
         if (a->getShown()) tc++;
 
-    return (tc ? 4 + tc * (height() - 4) : 1);
+    return (tc ? tc * height() : 0);
 }
 
 void TrayPane::relayoutNow() {
@@ -355,9 +358,10 @@ void TrayPane::relayoutNow() {
     for (TrayApp *a(fFirst); a != NULL; a = a->getNext())
         if (a->getShown()) tc++;
 
-    w = h = height() - 4;
-    x = width() - 2 - tc * w;
-    y = 2;
+    w = h = height();
+    x = width() - 0 - tc * w;
+    x = x < 0 ? 0 : x;
+    y = 0;
 
     for (TrayApp *f(fFirst); f != NULL; f = f->getNext()) {
         if (f->getShown()) {
diff --git a/icewm/src/default.h b/icewm/src/default.h
index c84c6ea..a290c99 100644
--- a/icewm/src/default.h
+++ b/icewm/src/default.h
@@ -45,6 +45,9 @@ XIV(bool, taskBarShowStartMenu,                 true)
 XIV(bool, taskBarShowWindowListMenu,            true)
 XIV(bool, taskBarShowWorkspaces,                true)
 XIV(bool, taskBarShowWindows,                   true)
+XIV(int, taskBarXPos,                           0)
+XIV(int, taskBarLength,                         0)
+XIV(bool, taskBarCentered,                      false)
 XIV(bool, taskBarShowShowDesktopButton,         true)
 
 XIV(int, taskBarButtonWidthDivisor,             3)
@@ -281,6 +284,9 @@ cfoption icewm_preferences[] = {
     OBV("TaskBarShowWindows",                   &taskBarShowWindows,            "Show windows on the taskbar"),
     OBV("TaskBarShowShowDesktopButton",         &taskBarShowShowDesktopButton,  "Show 'show desktop' button on taskbar"),
     OBV("ShowEllipsis",                         &showEllipsis,                  "Show Ellipsis in taskbar items"),
+    OIV("TaskBarXPos",                          &taskBarXPos, 0, 16383,         "Set task bar position, in pixels from the left screen edge"),
+    OIV("TaskBarLength",                        &taskBarLength, 0, 16383,       "Set task bar length in pixels (0 for full screen)"),
+    OBV("TaskBarCentered",                      &taskBarCentered,               "Show task bar centered horizontally"),
 #ifdef CONFIG_TRAY
     OBV("TaskBarShowTray",                      &taskBarShowTray,               "Show windows in the tray"),
     OBV("TrayShowAllWindows",                   &trayShowAllWindows,            "Show windows from all workspaces on tray"),
diff --git a/icewm/src/objbar.cc b/icewm/src/objbar.cc
index d5e85dc..45a776c 100644
--- a/icewm/src/objbar.cc
+++ b/icewm/src/objbar.cc
@@ -34,7 +34,7 @@ ref<YImage> toolbuttonPixbuf;
 ObjectBar::ObjectBar(YWindow *parent): YWindow(parent) {
     if (bgColor == 0)
         bgColor = new YColor(clrDefaultTaskBar);
-    setSize(1, 1);
+    setSize(0, 0);
 }
 
 ObjectBar::~ObjectBar() {
diff --git a/icewm/src/themable.h b/icewm/src/themable.h
index e4e23c9..ae3de7c 100644
--- a/icewm/src/themable.h
+++ b/icewm/src/themable.h
@@ -5,6 +5,11 @@
 
 XIV(bool, prettyClock,                          true)
 XIV(bool, rolloverTitleButtons,                 false)
+XIV(int,  taskBarHeight,			0)
+XIV(int,  taskButtonHeight,			0)
+XIV(int,  taskButtonWidth,			0)
+XIV(int,  taskButtonSepSize,			0)
+XIV(bool, trayPanelUseBgPixmaps,		true)
 
 XIV(bool, trayDrawBevel,                        false)
 XIV(bool, titleBarCentered,                     false)
@@ -157,6 +162,12 @@ cfoption icewm_themable_preferences[] = {
 #ifndef LITE
     OBV("RolloverButtonsSupported",                             &rolloverTitleButtons,                      "Does it support the 'O' title bar button images (for mouse rollover)"),
 #endif
+    OIV("TaskBarHeight",                        &taskBarHeight, 0, 64,          "Taskbar Height (default SmallIconSize + 8)"),
+    OIV("TaskButtonHeight",                     &taskButtonHeight, 0, 64,       "Height for button elements in taskbar (default TaskBarHeight)"),
+    OIV("TaskButtonWidth",                      &taskButtonWidth, 0, 256,       "Width for button elements in taskpanel (default taskPanelWidth/TaskbarButtonDivisor )"),
+    OIV("TaskButtonSeparatorSize",              &taskButtonSepSize, 0, 64,      "Distance between task buttons (default 0)"),
+    OBV("TrayPanelUseBgPixmaps",                &trayPanelUseBgPixmaps,         "TrayPanel will use the some taskbutton[..].xpm pixmaps (default true)"),
+
     OBV("TaskBarClockLeds",                     &prettyClock,                   "Task bar clock/APM uses nice pixmapped LCD display (but then it doesn't display correctly in many languages anymore, e.g. for Japanese and Korean it works only when a real font is used and not the LEDs"),
     OBV("TrayDrawBevel",                        &trayDrawBevel,                 "Surround the tray with plastic border"),
 
diff --git a/icewm/src/wmtaskbar.cc b/icewm/src/wmtaskbar.cc
index fbf9b37..bd8a626 100644
--- a/icewm/src/wmtaskbar.cc
+++ b/icewm/src/wmtaskbar.cc
@@ -611,16 +611,16 @@ void TaskBar::updateLayout(int &size_w, int &size_h) {
 #ifndef NO_CONFIGURE_MENUS
         { fApplications, true, 1, true, 0, 0, true },
 #endif
-        { fShowDesktop, true, 0, true, 0, 0, true },
+        { fShowDesktop, true, 0, true, 0, 0, taskButtonHeight ? false : true },
 #ifdef CONFIG_WINMENU
-        { fWinList, true, 0, true, 0, 0, true},
+        { fWinList, true, 0, true, 0, 0, taskButtonHeight ? false : true},
 #endif
 #ifndef NO_CONFIGURE_MENUS
-        { fObjectBar, true, 1, true, 4, 0, true },
+        { fObjectBar, true, 1, true, 4, 0, taskButtonHeight ? false : true },
 #endif
-        { fWorkspaces, taskBarWorkspacesLeft, 0, true, 4, 4, true },
+        { fWorkspaces, taskBarWorkspacesLeft, 0, true, 4, 4, taskButtonHeight ? false : true },
 
-        { fCollapseButton, false, 0, true, 0, 2, true },
+        { fCollapseButton, false, 0, true, 0, 2, taskButtonHeight ? false : true },
 #ifdef CONFIG_APPLET_CLOCK
         { fClock, false, 1, true, 2, 2, false },
 #endif
@@ -649,7 +649,7 @@ void TaskBar::updateLayout(int &size_w, int &size_h) {
 #endif
         { fDesktopTray, false, 1, true, 1, 1, false },
 #ifdef CONFIG_TRAY
-        { fWindowTray, false, 0, true, 1, 1, true },
+        { fWindowTray, false, 0, true, 1, 1, taskButtonHeight ? false : true },
 #endif
     };
     const int wcount = sizeof(wlist)/sizeof(wlist[0]);
@@ -676,6 +676,8 @@ void TaskBar::updateLayout(int &size_w, int &size_h) {
     {
         int dx, dy, dw, dh;
         manager->getScreenGeometry(&dx, &dy, &dw, &dh);
+        if (taskBarLength != 0)
+                dw = taskBarLength;
         w = dw;
     }
 
@@ -700,8 +702,12 @@ void TaskBar::updateLayout(int &size_w, int &size_h) {
         if (h[0] < 16)
             h[0] = 16;
 #else
+        if (taskBarHeight >= smallIconSize) {
+            h[0] = taskBarHeight;
+        } else {
         if (h[0] < YIcon::smallSize() + 8)
             h[0] = YIcon::smallSize() + 8;
+        }
 #endif
     }
 
@@ -719,8 +725,8 @@ void TaskBar::updateLayout(int &size_w, int &size_h) {
         if (wl->expand) {
             yy = y[wl->row];
         } else {
-            hh = wl->w->height();
-            yy = y[wl->row] + (h[wl->row] - wl->w->height()) / 2;
+            hh = taskButtonHeight ? taskButtonHeight : wl->w->height();
+            yy = y[wl->row] + (h[wl->row] - hh) / 2;
         }
 
         if (wl->left) {
@@ -743,9 +749,9 @@ void TaskBar::updateLayout(int &size_w, int &size_h) {
     if (taskBarShowWindows) {
         if (fTasks) {
             fTasks->setGeometry(YRect(left[0],
-                                      y[0],
+                                      taskButtonHeight ? y[0] + (h[0] - taskButtonHeight) / 2 : y[0],
                                       right[0] - left[0],
-                                      h[0]));
+                                      taskButtonHeight ? taskButtonHeight : h[0]));
             fTasks->show();
             fTasks->relayout();
         }
@@ -796,7 +802,14 @@ void TaskBar::updateLocation() {
     int dx, dy, dw, dh;
     manager->getScreenGeometry(&dx, &dy, &dw, &dh, -1);
 
-    int x = dx;
+    int x = taskBarCentered ? dx+dw/2-taskBarLength/2 : dx+taskBarXPos;
+
+    if (taskBarLength != 0)
+        dw = taskBarLength;
+        else
+// to centered full screen taskbar
+            x = dx;
+ 
     int y = dy;
     int w = 0;
     int h = 0;
 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin