mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-15 04:32:24 +00:00
dtstyle: Alphabetically sort the list of screen savers.
This commit is contained in:
parent
3e7a921af2
commit
62b63331ed
1 changed files with 76 additions and 68 deletions
|
@ -98,6 +98,13 @@
|
||||||
#define SAVER_HEIGHT 238
|
#define SAVER_HEIGHT 238
|
||||||
#define SAVER_WIDTH 298
|
#define SAVER_WIDTH 298
|
||||||
|
|
||||||
|
/* Struct to hold name and detailed description of savers, so an
|
||||||
|
* array of these can be sorted later */
|
||||||
|
typedef struct {
|
||||||
|
char *saverActionName;
|
||||||
|
char *saverActionDesc;
|
||||||
|
} SaverSub;
|
||||||
|
|
||||||
/*+++++++++++++++++++++++++++++++++++++++*/
|
/*+++++++++++++++++++++++++++++++++++++++*/
|
||||||
/* Internal Functions */
|
/* Internal Functions */
|
||||||
/*+++++++++++++++++++++++++++++++++++++++*/
|
/*+++++++++++++++++++++++++++++++++++++++*/
|
||||||
|
@ -160,7 +167,7 @@ static void no_svr_ext_ButtonCB(Widget w,
|
||||||
XtPointer client_data,
|
XtPointer client_data,
|
||||||
XtPointer call_data) ;
|
XtPointer call_data) ;
|
||||||
|
|
||||||
static XmString * MakeListStrings(char **list ) ;
|
static XmString * MakeListStrings(SaverSub *list ) ;
|
||||||
|
|
||||||
static void FreeListStrings(XmString *xmlist,
|
static void FreeListStrings(XmString *xmlist,
|
||||||
int count) ;
|
int count) ;
|
||||||
|
@ -236,8 +243,7 @@ static saveRestore save = {FALSE, 0,};
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *saversList; /* list of available savers */
|
char *saversList; /* list of available savers */
|
||||||
char *selsaversList; /* list of selected savers */
|
char *selsaversList; /* list of selected savers */
|
||||||
char **saverActionNames; /* array of saver names */
|
SaverSub *subList; /* array of saver names and action descriptions */
|
||||||
char **saverActionDesc; /* array of saver action descriptions */
|
|
||||||
char **selsaverActionNames; /* array of originally selected saver names */
|
char **selsaverActionNames; /* array of originally selected saver names */
|
||||||
int *selPositions; /* array of currently selected saver positions */
|
int *selPositions; /* array of currently selected saver positions */
|
||||||
int *origSelPositions; /* array of originally selected saver positions */
|
int *origSelPositions; /* array of originally selected saver positions */
|
||||||
|
@ -256,23 +262,39 @@ typedef struct {
|
||||||
static Savers savers;
|
static Savers savers;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* comparison function, for qsort, to alphabetically sort
|
||||||
|
* screensaver structs
|
||||||
|
*
|
||||||
|
* @param a First element to check
|
||||||
|
* @param b Second element to check
|
||||||
|
* @returns 0, negative or positive to indicate difference
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
savernamesort(const void *a, const void *b)
|
||||||
|
{
|
||||||
|
const SaverSub *aa = a;
|
||||||
|
const SaverSub *bb = b;
|
||||||
|
|
||||||
|
return strcmp(aa->saverActionDesc, bb->saverActionDesc);
|
||||||
|
}
|
||||||
|
|
||||||
/*++++++++++++++++++++++++++++++++++++++++*/
|
/*++++++++++++++++++++++++++++++++++++++++*/
|
||||||
/* build_saverList */
|
/* build_saverList */
|
||||||
/* parses a space separated list of */
|
/* parses a space separated list of */
|
||||||
/* savers to build a an array of saver */
|
/* savers to build a an array of saver */
|
||||||
/* names. Returns the array and the saver */
|
/* names and saver descriptions. */
|
||||||
/* count. */
|
/* Returns the array and the saver count. */
|
||||||
/*++++++++++++++++++++++++++++++++++++++++*/
|
/*++++++++++++++++++++++++++++++++++++++++*/
|
||||||
|
|
||||||
char **
|
SaverSub *
|
||||||
build_saverList(char * str,
|
build_saverList(char * str,
|
||||||
int * count)
|
int * count)
|
||||||
{
|
{
|
||||||
char tokenSep[] = " ";
|
char tokenSep[] = " ";
|
||||||
char * token;
|
char * token;
|
||||||
char ** saverList = NULL;
|
char *tmpstr;
|
||||||
|
SaverSub *saverList = NULL;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
char * tmpStr, *tmpStr2;
|
char * tmpStr, *tmpStr2;
|
||||||
int len = strlen(str);
|
int len = strlen(str);
|
||||||
|
@ -293,7 +315,7 @@ build_saverList(char * str,
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
saverList = (char **) XtCalloc(1, i * sizeof(char *));
|
saverList = (SaverSub *) XtCalloc(1, i * sizeof(SaverSub));
|
||||||
if( saverList )
|
if( saverList )
|
||||||
{
|
{
|
||||||
strcpy(tmpStr, str);
|
strcpy(tmpStr, str);
|
||||||
|
@ -305,8 +327,23 @@ build_saverList(char * str,
|
||||||
{
|
{
|
||||||
if (DtActionExists(token))
|
if (DtActionExists(token))
|
||||||
{
|
{
|
||||||
saverList[*count] = (char *) XtCalloc(1, strlen( token ) + 1);
|
saverList[*count].saverActionName = (char *) XtCalloc(1, strlen( token ) + 1);
|
||||||
strcpy(saverList[*count], token);
|
strcpy(saverList[*count].saverActionName, token);
|
||||||
|
|
||||||
|
// Find the savers description, if not found, use the name again
|
||||||
|
tmpstr = DtActionDescription(saverList[*count].saverActionName);
|
||||||
|
if (tmpstr == NULL)
|
||||||
|
{
|
||||||
|
saverList[*count].saverActionDesc = (char *) XtMalloc(strlen(saverList[*count].saverActionName) + 1);
|
||||||
|
strcpy(saverList[*count].saverActionDesc, saverList[*count].saverActionName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
saverList[*count].saverActionDesc = (char *) XtMalloc(strlen(tmpstr) + 1);
|
||||||
|
strcpy(saverList[*count].saverActionDesc, tmpstr);
|
||||||
|
}
|
||||||
|
XtFree((char *) tmpstr);
|
||||||
|
|
||||||
++(*count);
|
++(*count);
|
||||||
}
|
}
|
||||||
tmpStr += strlen(token);
|
tmpStr += strlen(token);
|
||||||
|
@ -372,39 +409,6 @@ build_selsaverList(char * envStr,
|
||||||
return(saverList);
|
return(saverList);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*+++++++++++++++++++++++++++++++++++++++*/
|
|
||||||
/* build_saverDesc */
|
|
||||||
/*+++++++++++++++++++++++++++++++++++++++*/
|
|
||||||
|
|
||||||
char **
|
|
||||||
build_saverDesc(char ** names,
|
|
||||||
int count)
|
|
||||||
{
|
|
||||||
char **saverDesc = NULL;
|
|
||||||
char *tmpstr;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
saverDesc = (char **) XtCalloc(1, count * sizeof(char *));
|
|
||||||
|
|
||||||
for (i=0; i<count; i++)
|
|
||||||
{
|
|
||||||
tmpstr = DtActionDescription(savers.saverActionNames[i]);
|
|
||||||
if (tmpstr == NULL)
|
|
||||||
{
|
|
||||||
saverDesc[i] = (char *) XtMalloc(strlen(savers.saverActionNames[i]) + 1);
|
|
||||||
strcpy(saverDesc[i], savers.saverActionNames[i]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
saverDesc[i] = (char *) XtMalloc(strlen(tmpstr) + 1);
|
|
||||||
strcpy(saverDesc[i], tmpstr);
|
|
||||||
}
|
|
||||||
XtFree((char *) tmpstr);
|
|
||||||
}
|
|
||||||
return(saverDesc);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*+++++++++++++++++++++++++++++++++++++++*/
|
/*+++++++++++++++++++++++++++++++++++++++*/
|
||||||
/* build_selectedList */
|
/* build_selectedList */
|
||||||
/* takes an array of names and a count */
|
/* takes an array of names and a count */
|
||||||
|
@ -521,8 +525,7 @@ build_screenDialog(
|
||||||
savers.selsaverActionNames = NULL;
|
savers.selsaverActionNames = NULL;
|
||||||
savers.selPositions = NULL;
|
savers.selPositions = NULL;
|
||||||
savers.selsaversList = NULL;
|
savers.selsaversList = NULL;
|
||||||
savers.saverActionNames = NULL;
|
savers.subList = NULL;
|
||||||
savers.saverActionDesc = NULL;
|
|
||||||
savers.current_saver = NULL;
|
savers.current_saver = NULL;
|
||||||
savers.current_saverDesc = NULL;
|
savers.current_saverDesc = NULL;
|
||||||
savers.current_position = 0;
|
savers.current_position = 0;
|
||||||
|
@ -722,10 +725,15 @@ build_screenDialog(
|
||||||
savers.saverCount = 0;
|
savers.saverCount = 0;
|
||||||
savers.selsaverCount=0;
|
savers.selsaverCount=0;
|
||||||
} else {
|
} else {
|
||||||
savers.saverActionNames = build_saverList(savers.saversList, &savers.saverCount);
|
savers.subList = build_saverList(savers.saversList, &savers.saverCount);
|
||||||
savers.saverActionDesc = build_saverDesc(savers.saverActionNames, savers.saverCount);
|
|
||||||
|
/* Sort the savers into alphabetical order based on the saver's description */
|
||||||
|
if(savers.saverCount > 1) {
|
||||||
|
qsort(savers.subList, savers.saverCount, sizeof(SaverSub), savernamesort);
|
||||||
|
}
|
||||||
|
|
||||||
/* convert to XmString */
|
/* convert to XmString */
|
||||||
listStrings = MakeListStrings(savers.saverActionDesc);
|
listStrings = MakeListStrings(savers.subList);
|
||||||
XmListAddItems (screen.saverList, listStrings, savers.saverCount, 0);
|
XmListAddItems (screen.saverList, listStrings, savers.saverCount, 0);
|
||||||
XtAddCallback (screen.saverList, XmNmultipleSelectionCallback,
|
XtAddCallback (screen.saverList, XmNmultipleSelectionCallback,
|
||||||
ListCB, (XtPointer)NULL);
|
ListCB, (XtPointer)NULL);
|
||||||
|
@ -749,7 +757,7 @@ build_screenDialog(
|
||||||
/* determine if this selected saver matches one in valid saver list */
|
/* determine if this selected saver matches one in valid saver list */
|
||||||
for (m=0; (m < savers.saverCount) &&
|
for (m=0; (m < savers.saverCount) &&
|
||||||
((sel_found = strcmp(savers.selsaverActionNames[n],
|
((sel_found = strcmp(savers.selsaverActionNames[n],
|
||||||
savers.saverActionNames[m])) != 0); m++) {}
|
savers.subList[m].saverActionName)) != 0); m++) {}
|
||||||
if (sel_found == 0) {
|
if (sel_found == 0) {
|
||||||
XmListSelectPos (screen.saverList, m+1, False);
|
XmListSelectPos (screen.saverList, m+1, False);
|
||||||
savers.selPositions[n]=m+1;
|
savers.selPositions[n]=m+1;
|
||||||
|
@ -776,16 +784,16 @@ build_screenDialog(
|
||||||
/* if there are still savers selected that match valid saver names */
|
/* if there are still savers selected that match valid saver names */
|
||||||
if (savers.selsaverCount) {
|
if (savers.selsaverCount) {
|
||||||
/* set current saver to first selection */
|
/* set current saver to first selection */
|
||||||
savers.current_saver = savers.saverActionNames[savers.selPositions[0] - 1];
|
savers.current_saver = savers.subList[savers.selPositions[0] - 1].saverActionName;
|
||||||
savers.current_saverDesc = savers.saverActionDesc[savers.selPositions[0] - 1];
|
savers.current_saverDesc = savers.subList[savers.selPositions[0] - 1].saverActionDesc;
|
||||||
savers.current_position = savers.selPositions[0];
|
savers.current_position = savers.selPositions[0];
|
||||||
} else {
|
} else {
|
||||||
/* highlight last saver */
|
/* highlight last saver */
|
||||||
XmListSelectPos (screen.saverList, savers.saverCount, False);
|
XmListSelectPos (screen.saverList, savers.saverCount, False);
|
||||||
|
|
||||||
/* set current saver to last one */
|
/* set current saver to last one */
|
||||||
savers.current_saver = savers.saverActionNames[savers.saverCount - 1];
|
savers.current_saver = savers.subList[savers.saverCount - 1].saverActionName;
|
||||||
savers.current_saverDesc = savers.saverActionDesc[savers.saverCount - 1];
|
savers.current_saverDesc = savers.subList[savers.saverCount - 1].saverActionDesc;
|
||||||
|
|
||||||
savers.selPositions = (int *) XtMalloc(sizeof(int));
|
savers.selPositions = (int *) XtMalloc(sizeof(int));
|
||||||
savers.selPositions[0] = savers.saverCount;
|
savers.selPositions[0] = savers.saverCount;
|
||||||
|
@ -2460,7 +2468,7 @@ ButtonCB(
|
||||||
|
|
||||||
for (i=0; i<savers.selsaverCount; i++)
|
for (i=0; i<savers.selsaverCount; i++)
|
||||||
{
|
{
|
||||||
char *tmp = savers.saverActionNames[savers.selPositions[i] - 1];
|
char *tmp = savers.subList[savers.selPositions[i] - 1].saverActionName;
|
||||||
savers.selsaverActionNames[i] = (char *) XtMalloc(strlen(tmp) + 1);
|
savers.selsaverActionNames[i] = (char *) XtMalloc(strlen(tmp) + 1);
|
||||||
strcpy(savers.selsaverActionNames[i], tmp);
|
strcpy(savers.selsaverActionNames[i], tmp);
|
||||||
}
|
}
|
||||||
|
@ -2564,8 +2572,8 @@ ButtonCB(
|
||||||
for (i=0; i<savers.orig_selsaverCount; i++)
|
for (i=0; i<savers.orig_selsaverCount; i++)
|
||||||
XmListSelectPos(screen.saverList, savers.origSelPositions[i], False);
|
XmListSelectPos(screen.saverList, savers.origSelPositions[i], False);
|
||||||
/* set the current saver to be the first saver in the selected list */
|
/* set the current saver to be the first saver in the selected list */
|
||||||
savers.current_saver = savers.saverActionNames[savers.origSelPositions[0] - 1];
|
savers.current_saver = savers.subList[savers.origSelPositions[0] - 1].saverActionName;
|
||||||
savers.current_saverDesc = savers.saverActionDesc[savers.origSelPositions[0] - 1];
|
savers.current_saverDesc = savers.subList[savers.origSelPositions[0] - 1].saverActionDesc;
|
||||||
savers.current_position = savers.origSelPositions[0];
|
savers.current_position = savers.origSelPositions[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2666,7 +2674,7 @@ no_svr_ext_ButtonCB(
|
||||||
|
|
||||||
for (i=0; i<savers.selsaverCount; i++)
|
for (i=0; i<savers.selsaverCount; i++)
|
||||||
{
|
{
|
||||||
char *tmp = savers.saverActionNames[savers.selPositions[i] - 1];
|
char *tmp = savers.subList[savers.selPositions[i] - 1].saverActionName;
|
||||||
savers.selsaverActionNames[i] = (char *) XtMalloc(strlen(tmp) + 1);
|
savers.selsaverActionNames[i] = (char *) XtMalloc(strlen(tmp) + 1);
|
||||||
strcpy(savers.selsaverActionNames[i], tmp);
|
strcpy(savers.selsaverActionNames[i], tmp);
|
||||||
}
|
}
|
||||||
|
@ -2800,8 +2808,8 @@ no_svr_ext_ButtonCB(
|
||||||
for (i=0; i<savers.orig_selsaverCount; i++)
|
for (i=0; i<savers.orig_selsaverCount; i++)
|
||||||
XmListSelectPos(screen.saverList, savers.origSelPositions[i], False);
|
XmListSelectPos(screen.saverList, savers.origSelPositions[i], False);
|
||||||
/* set the current saver to be the first saver in the selected list */
|
/* set the current saver to be the first saver in the selected list */
|
||||||
savers.current_saver = savers.saverActionNames[savers.origSelPositions[0] - 1];
|
savers.current_saver = savers.subList[savers.origSelPositions[0] - 1].saverActionName;
|
||||||
savers.current_saverDesc = savers.saverActionDesc[savers.origSelPositions[0] - 1];
|
savers.current_saverDesc = savers.subList[savers.origSelPositions[0] - 1].saverActionDesc;
|
||||||
savers.current_position = savers.origSelPositions[0];
|
savers.current_position = savers.origSelPositions[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2926,7 +2934,7 @@ saveScreen(
|
||||||
/* Make XmStrings from the saver names, to pass into list. */
|
/* Make XmStrings from the saver names, to pass into list. */
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
static XmString *
|
static XmString *
|
||||||
MakeListStrings( char ** list )
|
MakeListStrings( SaverSub * list )
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
XmString *xmList;
|
XmString *xmList;
|
||||||
|
@ -2935,7 +2943,7 @@ MakeListStrings( char ** list )
|
||||||
|
|
||||||
for (i = 0; i < savers.saverCount; i++)
|
for (i = 0; i < savers.saverCount; i++)
|
||||||
{
|
{
|
||||||
xmList[i] = XmStringCreateLocalized (list[i]);
|
xmList[i] = XmStringCreateLocalized (list[i].saverActionDesc);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (xmList);
|
return (xmList);
|
||||||
|
@ -2991,8 +2999,8 @@ ListCB(
|
||||||
XtFree ((char *) savers.selPositions);
|
XtFree ((char *) savers.selPositions);
|
||||||
savers.selPositions = (int *) XtMalloc(sizeof(int));
|
savers.selPositions = (int *) XtMalloc(sizeof(int));
|
||||||
savers.selPositions[0] = cb->item_position;
|
savers.selPositions[0] = cb->item_position;
|
||||||
savers.current_saver = savers.saverActionNames[savers.selPositions[0] - 1];
|
savers.current_saver = savers.subList[savers.selPositions[0] - 1].saverActionName;
|
||||||
savers.current_saverDesc = savers.saverActionDesc[savers.selPositions[0] - 1];
|
savers.current_saverDesc = savers.subList[savers.selPositions[0] - 1].saverActionDesc;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3050,8 +3058,8 @@ ListCB(
|
||||||
XSync(style.display, False);
|
XSync(style.display, False);
|
||||||
savers.saverstate = NULL;
|
savers.saverstate = NULL;
|
||||||
}
|
}
|
||||||
savers.current_saver = savers.saverActionNames[i-1];
|
savers.current_saver = savers.subList[i - 1].saverActionName;
|
||||||
savers.current_saverDesc = savers.saverActionDesc[i-1];
|
savers.current_saverDesc = savers.subList[i - 1].saverActionDesc;
|
||||||
savers.current_position = i;
|
savers.current_position = i;
|
||||||
XtVaSetValues(screen.saverArea, XmNbackground, savers.black, NULL);
|
XtVaSetValues(screen.saverArea, XmNbackground, savers.black, NULL);
|
||||||
savers.saverstate = _DtSaverStart(style.display, &screen.saverArea,
|
savers.saverstate = _DtSaverStart(style.display, &screen.saverArea,
|
||||||
|
@ -3080,8 +3088,8 @@ ListCB(
|
||||||
XtVaSetValues(screen.saverArea, XmNbackground, savers.black, NULL);
|
XtVaSetValues(screen.saverArea, XmNbackground, savers.black, NULL);
|
||||||
|
|
||||||
savers.current_position = cb->item_position;
|
savers.current_position = cb->item_position;
|
||||||
savers.current_saver = savers.saverActionNames[savers.current_position - 1];
|
savers.current_saver = savers.subList[savers.current_position - 1].saverActionName;
|
||||||
savers.current_saverDesc = savers.saverActionDesc[savers.current_position - 1];
|
savers.current_saverDesc = savers.subList[savers.current_position - 1].saverActionDesc;
|
||||||
savers.saverstate = _DtSaverStart(style.display, &screen.saverArea, 1,
|
savers.saverstate = _DtSaverStart(style.display, &screen.saverArea, 1,
|
||||||
savers.current_saver, style.screenDialog);
|
savers.current_saver, style.screenDialog);
|
||||||
/* update the preview label with the current running saver */
|
/* update the preview label with the current running saver */
|
||||||
|
|
Loading…
Reference in a new issue