[SF#820] Fix "dynamic" panel width allocation.
authorAndriy Grytsenko <andrej@rep.kiev.ua>
Sun, 23 Oct 2016 18:37:35 +0000 (21:37 +0300)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Sun, 23 Oct 2016 18:37:35 +0000 (21:37 +0300)
ChangeLog
src/icon-grid.c
src/misc.c

index 852804a..d289ffd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -51,6 +51,7 @@
     mixers, with ability to type own command as well.
 * Fixed crash on action on task window which was deleted while task menu
     is still opened.
     mixers, with ability to type own command as well.
 * Fixed crash on action on task window which was deleted while task menu
     is still opened.
+* Fixed "dynamic" panel width allocation.
 
 0.8.2
 -------------------------------------------------------------------------
 
 0.8.2
 -------------------------------------------------------------------------
index 8acab6e..290a8d8 100644 (file)
@@ -75,7 +75,7 @@ static void icon_grid_element_check_requisition(PanelIconGrid *ig,
     {
         /* calculate width from aspect */
         gdouble ratio = (gdouble)requisition->width / requisition->height;
     {
         /* calculate width from aspect */
         gdouble ratio = (gdouble)requisition->width / requisition->height;
-        requisition->width = ig->child_height * ratio;
+        requisition->width = MAX(ig->child_height * ratio, ig->child_width);
     }
     else
     {
     }
     else
     {
index 2779ac4..bfc16db 100644 (file)
@@ -803,13 +803,15 @@ int panel_handle_x_error_swallow_BadWindow_BadDrawable(Display * d, XErrorEvent
 }
 
 static void
 }
 
 static void
-calculate_width(int scrw, int wtype, int align, int margin,
+calculate_width(int scrw, int pw, int wtype, int align, int margin,
       int *panw, int *x)
 {
     ENTER;
     DBG("scrw=%d\n", scrw);
     DBG("IN panw=%d, margin=%d\n", *panw, margin);
     //scrw -= 2;
       int *panw, int *x)
 {
     ENTER;
     DBG("scrw=%d\n", scrw);
     DBG("IN panw=%d, margin=%d\n", *panw, margin);
     //scrw -= 2;
+    if (wtype != WIDTH_REQUEST)
+        *panw = pw;
     if (wtype == WIDTH_PERCENT) {
         /* sanity check */
         if (*panw > 100)
     if (wtype == WIDTH_PERCENT) {
         /* sanity check */
         if (*panw > 100)
@@ -865,17 +867,15 @@ void _calculate_position(LXPanel *panel, GdkRectangle *rect)
     }
 
     if (np->edge == EDGE_TOP || np->edge == EDGE_BOTTOM) {
     }
 
     if (np->edge == EDGE_TOP || np->edge == EDGE_BOTTOM) {
-        rect->width = np->width;
         rect->x = marea.x;
         rect->x = marea.x;
-        calculate_width(marea.width, np->widthtype, np->align, np->margin,
+        calculate_width(marea.width, np->width, np->widthtype, np->align, np->margin,
               &rect->width, &rect->x);
         rect->height = ((( ! np->autohide) || (np->visible)) ? np->height : np->height_when_hidden);
         rect->y = marea.y + ((np->edge == EDGE_TOP) ? 0 : (marea.height - rect->height));
 
     } else {
               &rect->width, &rect->x);
         rect->height = ((( ! np->autohide) || (np->visible)) ? np->height : np->height_when_hidden);
         rect->y = marea.y + ((np->edge == EDGE_TOP) ? 0 : (marea.height - rect->height));
 
     } else {
-        rect->height = np->width;
         rect->y = marea.y;
         rect->y = marea.y;
-        calculate_width(marea.height, np->widthtype, np->align, np->margin,
+        calculate_width(marea.height, np->width, np->widthtype, np->align, np->margin,
               &rect->height, &rect->y);
         rect->width = ((( ! np->autohide) || (np->visible)) ? np->height : np->height_when_hidden);
         rect->x = marea.x + ((np->edge == EDGE_LEFT) ? 0 : (marea.width - rect->width));
               &rect->height, &rect->y);
         rect->width = ((( ! np->autohide) || (np->visible)) ? np->height : np->height_when_hidden);
         rect->x = marea.x + ((np->edge == EDGE_LEFT) ? 0 : (marea.width - rect->width));