]> uap-core.de Git - uwplayer.git/commitdiff
correctly hide the sidebar when disabled
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 20 Nov 2025 19:16:09 +0000 (20:16 +0100)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 20 Nov 2025 19:16:09 +0000 (20:16 +0100)
application/window.c
ui/common/context.c
ui/motif/Grid.c
ui/motif/Grid.h
ui/motif/container.c
ui/ui/tree.h

index 7a5a5e78d678d67ce2631c60f6f41d2fb9ecc42f..f36298dc223ed8f0c6509188344fabdd387aeae2 100644 (file)
@@ -264,6 +264,8 @@ static UIWIDGET create_motif_listview(UiObject *obj, UiWidgetArgs *args, void *u
 static UIWIDGET create_motif_player(UiObject *obj, UiWidgetArgs *args, void *userdata, Widget parent, Arg *a, int n) {
     MainWindow *window = userdata;
     XtSetArg(a[n], XmNbackground, BlackPixelOfScreen(XtScreen(parent))); n++;
+    XtSetArg(a[n], XmNwidth, 100); n++;
+    XtSetArg(a[n], XmNheight, 60); n++;
     Widget player_widget = XmCreateDrawingArea(parent, "player", a, n);
     XtAddCallback(player_widget, XmNinputCallback, playerWidgetInputCB, window);
     XmProcessTraversal(player_widget, XmTRAVERSE_CURRENT);
index 0079ff0019e00b2c4f098bd20c031a480faf1ec9..40c1544d4276c8fffbc5a8368a6552a66f0eb3c9 100644 (file)
@@ -464,7 +464,7 @@ void uic_reg_var(UiContext *ctx, const char *name, UiVarType type, void *value)
     } else {
         // override var with new value
         if(var->type != type) {
-            fprintf(stderr, "Error: var %s type mismatch: %s - %s\n", name, uic_type2str(var->type), type);
+            fprintf(stderr, "Error: var %s type mismatch: %s - %s\n", name, uic_type2str(var->type), uic_type2str(type));
             return;
         }
         if(var->bound) {
index 0b14370910682a584453abaa88707a802afda178..da74124f14b673ffbbecb3f1366250100ee99048 100644 (file)
@@ -60,7 +60,7 @@ static XtResource resources[] =
         XmRDimension,
         sizeof (Dimension),
         XtOffsetOf( GridRec,
-                   mywidget.columnspacing),
+                   grid.columnspacing),
         XmRImmediate,
         (XtPointer) 0
     },
@@ -70,7 +70,7 @@ static XtResource resources[] =
         XmRDimension,
         sizeof (Dimension),
         XtOffsetOf( GridRec,
-                   mywidget.rowspacing),
+                   grid.rowspacing),
         XmRImmediate,
         (XtPointer) 0
     },
@@ -80,7 +80,7 @@ static XtResource resources[] =
         XmRDimension,
         sizeof (Dimension),
         XtOffsetOf( GridRec,
-                   mywidget.padding_left),
+                   grid.padding_left),
         XmRImmediate,
         (XtPointer) 0
     },
@@ -90,7 +90,7 @@ static XtResource resources[] =
         XmRDimension,
         sizeof (Dimension),
         XtOffsetOf( GridRec,
-                   mywidget.padding_right),
+                   grid.padding_right),
         XmRImmediate,
         (XtPointer) 0
     },
@@ -100,7 +100,7 @@ static XtResource resources[] =
         XmRDimension,
         sizeof (Dimension),
         XtOffsetOf( GridRec,
-                   mywidget.padding_top),
+                   grid.padding_top),
         XmRImmediate,
         (XtPointer) 0
     },
@@ -110,7 +110,7 @@ static XtResource resources[] =
         XmRDimension,
         sizeof (Dimension),
         XtOffsetOf( GridRec,
-                   mywidget.padding_bottom),
+                   grid.padding_bottom),
         XmRImmediate,
         (XtPointer) 0
     }
@@ -335,8 +335,8 @@ void grid_class_initialize(void) {
 void grid_initialize(Widget request, Widget new, ArgList args, Cardinal num_args) {
     Grid mn = (Grid)new;
     
-    mn->mywidget.max_col = 0;
-    mn->mywidget.max_row = 0;
+    mn->grid.max_col = 0;
+    mn->grid.max_row = 0;
     
 }
 void grid_realize(Widget w,XtValueMask *valueMask,XSetWindowAttributes *attributes) {
@@ -394,17 +394,17 @@ XtGeometryResult GridGeometryManager(Widget       widget, XtWidgetGeometry *request, X
 }
 
 void GridChangeManaged(Widget widget) {
-    
+    grid_place_children((Grid)widget);
 }
 
 Boolean ConstraintSetValues(Widget old, Widget request, Widget neww, ArgList args, Cardinal *num_args) {
     GridConstraintRec *constraints = neww->core.constraints;
     Grid grid = (Grid)XtParent(neww);
-    if(constraints->grid.x > grid->mywidget.max_col) {
-        grid->mywidget.max_col = constraints->grid.x;
+    if(constraints->grid.x > grid->grid.max_col) {
+        grid->grid.max_col = constraints->grid.x;
     }
-    if(constraints->grid.y > grid->mywidget.max_row) {
-        grid->mywidget.max_row = constraints->grid.y;
+    if(constraints->grid.y > grid->grid.max_row) {
+        grid->grid.max_row = constraints->grid.y;
     }
 }
 
@@ -419,25 +419,29 @@ void grid_constraint_init(
     GridConstraintRec *constraints = neww->core.constraints;
     
     Grid grid = (Grid)XtParent(neww);
-    if(constraints->grid.x > grid->mywidget.max_col) {
-        grid->mywidget.max_col = constraints->grid.x;
+    if(constraints->grid.x > grid->grid.max_col) {
+        grid->grid.max_col = constraints->grid.x;
     }
-    if(constraints->grid.y > grid->mywidget.max_row) {
-        grid->mywidget.max_row = constraints->grid.y;
+    if(constraints->grid.y > grid->grid.max_row) {
+        grid->grid.max_row = constraints->grid.y;
     }
     constraints->grid.pref_width = neww->core.width;
     constraints->grid.pref_height = neww->core.height;
 }
 
 void grid_place_children(Grid w) {
-    int ncols = w->mywidget.max_col+1;
-    int nrows = w->mywidget.max_row+1;
+    if(!XtIsRealized((Widget)w)) {
+        return;
+    }
+    
+    int ncols = w->grid.max_col+1;
+    int nrows = w->grid.max_row+1;
     GridDef *cols = calloc(ncols, sizeof(GridDef));
     GridDef *rows = calloc(nrows, sizeof(GridDef));
     int num_cols_expanding = 0;
     int num_rows_expanding = 0;
-    int req_width = w->mywidget.padding_left + w->mywidget.padding_right;
-    int req_height = w->mywidget.padding_top + w->mywidget.padding_bottom;
+    int req_width = w->grid.padding_left + w->grid.padding_right;
+    int req_height = w->grid.padding_top + w->grid.padding_bottom;
     int width = w->core.width;
     int height = w->core.height;
     
@@ -462,6 +466,10 @@ void grid_place_children(Grid w) {
             }
             int elm_width = constraints->grid.pref_width + constraints->grid.margin_left + constraints->grid.margin_right;
             int elm_height = constraints->grid.pref_height + constraints->grid.margin_top + constraints->grid.margin_bottom;
+            if(!XtIsManaged(child)) {
+                elm_width = 0;
+                elm_height = 0;
+            }
             
             if(constraints->grid.colspan > span_max || constraints->grid.rowspan > span_max) {
                 continue;
@@ -564,10 +572,23 @@ void grid_place_children(Grid w) {
         req_height += rows[i].size;
     }
     
+    int total_colspacing = 0;
+    int total_rowspacing = 0;
+    for(int i=0;i+1<ncols;i++) {
+        if(cols[i].size > 0) {
+            total_colspacing += w->grid.columnspacing;
+        }
+    }
+    for(int i=0;i+1<nrows;i++) {
+        if(rows[i].size > 0) {
+            total_rowspacing += w->grid.rowspacing;
+        }
+    }
+    
     if(req_width > 0 && req_height > 0) {
         // add col/row spacing
-        req_width += (ncols-1)*w->mywidget.columnspacing;
-        req_height += (nrows-1)*w->mywidget.rowspacing;
+        req_width += total_colspacing; //(ncols-1)*w->grid.columnspacing;
+        req_height += total_rowspacing; //(nrows-1)*w->grid.rowspacing;
         
         Widget parent = w->core.parent;
         Dimension rwidth = req_width;
@@ -579,9 +600,9 @@ void grid_place_children(Grid w) {
             //rheight = w->core.height;
         }
         
-        if(!w->mywidget.sizerequest) {
+        if(!w->grid.sizerequest) {
             Dimension actual_width, actual_height;
-            w->mywidget.sizerequest = TRUE;
+            w->grid.sizerequest = TRUE;
             
             //printf("sizerequest: %d x %d\n", (int)req_width, (int)req_height);
             
@@ -592,7 +613,7 @@ void grid_place_children(Grid w) {
             //XtGeometryResult result = XtMakeGeometryRequest((Widget)w, &request, &reply);
             
             XtMakeResizeRequest((Widget)w, req_width, req_height, &actual_width, &actual_height);
-            w->mywidget.sizerequest = FALSE;
+            w->grid.sizerequest = FALSE;
             //printf("size request: %d %d\n", (int)actual_width, (int)actual_height);
         }
         
@@ -608,13 +629,15 @@ void grid_place_children(Grid w) {
         hexpand = width_diff / num_cols_expanding;
         hexpand2 = width_diff-hexpand*num_cols_expanding;
     }
-    int x = w->mywidget.padding_left;
+    int x = w->grid.padding_left;
     for(int i=0;i<ncols;i++) {
         cols[i].pos = x;
         if(cols[i].expand) {
             cols[i].size += hexpand + hexpand2;
         }
-        x += cols[i].size + w->mywidget.columnspacing;
+        if(cols[i].size > 0) {
+            x += cols[i].size + w->grid.columnspacing;
+        }
         
         hexpand2 = 0;
     }
@@ -626,13 +649,15 @@ void grid_place_children(Grid w) {
         vexpand = height_diff / num_rows_expanding;
         vexpand2 = height_diff-vexpand*num_rows_expanding;
     }
-    int y = w->mywidget.padding_bottom;
+    int y = w->grid.padding_bottom;
     for(int i=0;i<nrows;i++) {
         rows[i].pos = y;
         if(rows[i].expand) {
             rows[i].size += vexpand + vexpand2;
         }
-        y += rows[i].size += w->mywidget.rowspacing;
+        if(rows[i].size > 0) {
+            y += rows[i].size += w->grid.rowspacing;
+        }
         
         vexpand2 = 0;
     }
@@ -651,12 +676,12 @@ void grid_place_children(Grid w) {
                 Dimension cwidth = 0;
                 for(int j=0;j<constraints->grid.colspan;j++) {
                     if(constraints->grid.x+j < ncols) {
-                        cwidth += cols[constraints->grid.x+j].size + (j > 0 ? w->mywidget.columnspacing : 0);
+                        cwidth += cols[constraints->grid.x+j].size + (j > 0 ? w->grid.columnspacing : 0);
                     }
                 }
                 width = cwidth;
             } else {
-                width = c.size - w->mywidget.columnspacing - constraints->grid.margin_left - constraints->grid.margin_right;
+                width = c.size - w->grid.columnspacing - constraints->grid.margin_left - constraints->grid.margin_right;
             }
         }
         if(constraints->grid.vfill) {
@@ -664,12 +689,12 @@ void grid_place_children(Grid w) {
                 Dimension cheight = 0;
                 for(int j=0;j<constraints->grid.rowspan;j++) {
                     if(constraints->grid.y+j < nrows) {
-                        cheight += rows[constraints->grid.y+j].size + (j > 0 ? w->mywidget.rowspacing : 0);
+                        cheight += rows[constraints->grid.y+j].size + (j > 0 ? w->grid.rowspacing : 0);
                     }
                 }
                 height = cheight;
             } else {
-                height = r.size - w->mywidget.rowspacing - constraints->grid.margin_top - constraints->grid.margin_bottom;
+                height = r.size - w->grid.rowspacing - constraints->grid.margin_top - constraints->grid.margin_bottom;
             }
         }
               
index b6f22deaf41dbc3c7e0c18820f9675211c0a4d1d..af75b41ed64c74c94a51acad7baa8dc5309f6246 100644 (file)
@@ -78,8 +78,8 @@ typedef struct GridClassRec {
     CoreClassPart        core_class;
     CompositeClassPart   composite_class;
     ConstraintClassPart  constraint_class;
-    XmManagerClassPart  manager_class;
-    GridClassPart    mywidgetclass;
+    XmManagerClassPart   manager_class;
+    GridClassPart        gridwidgetclass;
 } GridClassRec;
 
 
@@ -101,7 +101,7 @@ typedef struct GridRec {
     CompositePart   composite;
     ConstraintPart  constraint;
     XmManagerPart   manager;
-    GridPart    mywidget;
+    GridPart        grid;
 } GridRec;
 
 typedef struct GridContraintPart {
index 7213ed369935cc6add73c0f661882d26b19f493d..a1ac8f150dc69a54cc42e8fad6bcf0c18547a66f 100644 (file)
@@ -78,9 +78,9 @@ static UIWIDGET box_create(UiObject *obj, UiContainerArgs *args, UiBoxOrientatio
     int n = 0;
     
     if(orientation == UI_BOX_VERTICAL) {
-        //XtSetArg(xargs[n], gridRowSpacing, args->spacing); n++;
+        XtSetArg(xargs[n], gridRowSpacing, args->spacing); n++;
     } else {
-        //XtSetArg(xargs[n], gridColumnSpacing, args->spacing); n++;
+        XtSetArg(xargs[n], gridColumnSpacing, args->spacing); n++;
     }
     
     Widget parent = ui_container_prepare(ctn, &layout, xargs, &n);
index 33a903c06196df279a8d87a2c6005bc1700c06f0..a71092b1df7a262079ca2191cb691c3764235434 100644 (file)
@@ -132,9 +132,9 @@ struct UiListArgs {
 
     const char *name;
     const char *style_class;
-    UiListlist;
+    UiList *list;
     const char* varname;
-    UiModelmodel;
+    UiModel *model;
     char **static_elements;
     size_t static_nelm;
     ui_getvaluefunc getvalue;
@@ -143,15 +143,15 @@ struct UiListArgs {
     ui_getstylefunc getstyle;
     void *getstyledata;
     ui_callback onactivate;
-    voidonactivatedata;
+    void *onactivatedata;
     ui_callback onselection;
-    voidonselectiondata;
+    void *onselectiondata;
     ui_callback ondragstart;
-    voidondragstartdata;
+    void *ondragstartdata;
     ui_callback ondragcomplete;
-    voidondragcompletedata;
+    void *ondragcompletedata;
     ui_callback ondrop;
-    voidondropdata;
+    void *ondropdata;
     UiBool multiselection;
     UiMenuBuilder *contextmenu;
     ui_list_savefunc onsave;
@@ -300,10 +300,10 @@ UIEXPORT void ui_model_free(UiContext *ctx, UiModel *mi);
 #define ui_breadcrumbbar(obj, ...) ui_breadcrumbbar_create(obj, &(UiListArgs) { __VA_ARGS__ } )
 #define ui_sourcelist(obj, ...) ui_sourcelist_create(obj, &(UiSourceListArgs) { __VA_ARGS__ } )
 
-UIEXPORT UIWIDGET ui_listview_create(UiObjectobj, UiListArgs *args);
-UIEXPORT UIWIDGET ui_table_create(UiObjectobj, UiListArgs *args);
-UIEXPORT UIWIDGET ui_combobox_create(UiObjectobj, UiListArgs *args);
-UIEXPORT UIWIDGET ui_breadcrumbbar_create(UiObjectobj, UiListArgs *args);
+UIEXPORT UIWIDGET ui_listview_create(UiObject *obj, UiListArgs *args);
+UIEXPORT UIWIDGET ui_table_create(UiObject *obj, UiListArgs *args);
+UIEXPORT UIWIDGET ui_combobox_create(UiObject *obj, UiListArgs *args);
+UIEXPORT UIWIDGET ui_breadcrumbbar_create(UiObject *obj, UiListArgs *args);
 
 UIEXPORT void ui_listview_select(UIWIDGET listview, int index);
 UIEXPORT void ui_combobox_select(UIWIDGET dropdown, int index);