12 typedef struct W_FontPanel
{
36 #define MIN_UPPER_HEIGHT 20
37 #define MIN_LOWER_HEIGHT 140
40 #define MAX_FONTS_TO_RETRIEVE 2000
42 #define BUTTON_SPACE_HEIGHT 40
45 #define MIN_HEIGHT (MIN_UPPER_HEIGHT+MIN_LOWER_HEIGHT+BUTTON_SPACE_HEIGHT)
47 #define DEF_UPPER_HEIGHT 60
48 #define DEF_LOWER_HEIGHT 310
51 #define DEF_HEIGHT (DEF_UPPER_HEIGHT+DEF_LOWER_HEIGHT)
56 static int scalableFontSizes
[] = {
73 static void getSelectedFont(FontPanel
*panel
, char buffer
[]);
76 static void arrangeLowerFrame(FontPanel
*panel
);
78 static void familyClick(WMWidget
*, void *);
79 static void typefaceClick(WMWidget
*, void *);
80 static void sizeClick(WMWidget
*, void *);
83 static void listFamilies(WMScreen
*scr
, WMFontPanel
*panel
);
87 splitViewConstrainCallback(WMSplitView
*sPtr
, int indView
, int *min
, int *max
)
90 *min
= MIN_UPPER_HEIGHT
;
92 *min
= MIN_LOWER_HEIGHT
;
96 notificationObserver(void *self
, WMNotification
*notif
)
98 WMFontPanel
*panel
= (WMFontPanel
*)self
;
99 void *object
= WMGetNotificationObject(notif
);
101 if (WMGetNotificationName(notif
) == WMViewSizeDidChangeNotification
) {
102 if (object
== WMWidgetView(panel
->win
)) {
103 int h
= WMWidgetHeight(panel
->win
);
104 int w
= WMWidgetWidth(panel
->win
);
106 WMResizeWidget(panel
->split
, w
, h
-BUTTON_SPACE_HEIGHT
);
108 WMMoveWidget(panel
->setB
, w
-80, h
-(BUTTON_SPACE_HEIGHT
-5));
110 WMMoveWidget(panel
->revertB
, w
-240, h
-(BUTTON_SPACE_HEIGHT
-5));
112 } else if (object
== WMWidgetView(panel
->upperF
)) {
114 if (WMWidgetHeight(panel
->upperF
) < MIN_UPPER_HEIGHT
) {
115 WMResizeWidget(panel
->upperF
, WMWidgetWidth(panel
->upperF
),
118 WMResizeWidget(panel
->sampleT
, WMWidgetWidth(panel
->upperF
)-20,
119 WMWidgetHeight(panel
->upperF
)-10);
122 } else if (object
== WMWidgetView(panel
->lowerF
)) {
124 if (WMWidgetHeight(panel
->lowerF
) < MIN_LOWER_HEIGHT
) {
125 WMResizeWidget(panel
->upperF
, WMWidgetWidth(panel
->upperF
),
128 WMMoveWidget(panel
->lowerF
, 0, WMWidgetHeight(panel
->upperF
)
129 + WMGetSplitViewDividerThickness(panel
->split
));
131 WMResizeWidget(panel
->lowerF
, WMWidgetWidth(panel
->lowerF
),
132 WMWidgetWidth(panel
->split
) - MIN_UPPER_HEIGHT
133 - WMGetSplitViewDividerThickness(panel
->split
));
135 arrangeLowerFrame(panel
);
143 closeWindow(WMWidget
*w
, void *data
)
145 FontPanel
*panel
= (FontPanel
*)data
;
147 WMHideFontPanel(panel
);
153 WMGetFontPanel(WMScreen
*scr
)
156 WMColor
*dark
, *white
;
160 if (scr
->sharedFontPanel
)
161 return scr
->sharedFontPanel
;
164 panel
= wmalloc(sizeof(FontPanel
));
165 memset(panel
, 0, sizeof(FontPanel
));
167 panel
->win
= WMCreateWindow(scr
, "fontPanel");
168 /* WMSetWidgetBackgroundColor(panel->win, WMWhiteColor(scr));*/
169 WMResizeWidget(panel
->win
, DEF_WIDTH
, DEF_HEIGHT
);
170 WMSetWindowMinSize(panel
->win
, MIN_WIDTH
, MIN_HEIGHT
);
171 WMSetViewNotifySizeChanges(WMWidgetView(panel
->win
), True
);
173 WMSetWindowCloseAction(panel
->win
, closeWindow
, panel
);
175 panel
->split
= WMCreateSplitView(panel
->win
);
176 WMResizeWidget(panel
->split
, DEF_WIDTH
, DEF_HEIGHT
- BUTTON_SPACE_HEIGHT
);
177 WMSetSplitViewConstrainProc(panel
->split
, splitViewConstrainCallback
);
179 divThickness
= WMGetSplitViewDividerThickness(panel
->split
);
181 panel
->upperF
= WMCreateFrame(panel
->win
);
182 WMSetFrameRelief(panel
->upperF
, WRFlat
);
183 WMSetViewNotifySizeChanges(WMWidgetView(panel
->upperF
), True
);
184 panel
->lowerF
= WMCreateFrame(panel
->win
);
185 /* WMSetWidgetBackgroundColor(panel->lowerF, WMBlackColor(scr));*/
186 WMSetFrameRelief(panel
->lowerF
, WRFlat
);
187 WMSetViewNotifySizeChanges(WMWidgetView(panel
->lowerF
), True
);
189 WMAddSplitViewSubview(panel
->split
, W_VIEW(panel
->upperF
));
190 WMAddSplitViewSubview(panel
->split
, W_VIEW(panel
->lowerF
));
192 WMResizeWidget(panel
->upperF
, DEF_WIDTH
, DEF_UPPER_HEIGHT
);
194 WMResizeWidget(panel
->lowerF
, DEF_WIDTH
, DEF_LOWER_HEIGHT
);
196 WMMoveWidget(panel
->lowerF
, 0, 60+divThickness
);
198 white
= WMWhiteColor(scr
);
199 dark
= WMDarkGrayColor(scr
);
201 panel
->sampleT
= WMCreateTextField(panel
->upperF
);
202 WMResizeWidget(panel
->sampleT
, DEF_WIDTH
- 20, 50);
203 WMMoveWidget(panel
->sampleT
, 10, 10);
204 WMSetTextFieldText(panel
->sampleT
, "Test!!!");
206 font
= WMBoldSystemFontOfSize(scr
, 12);
208 panel
->famL
= WMCreateLabel(panel
->lowerF
);
209 WMSetWidgetBackgroundColor(panel
->famL
, dark
);
210 WMSetLabelText(panel
->famL
, "Family");
211 WMSetLabelFont(panel
->famL
, font
);
212 WMSetLabelTextColor(panel
->famL
, white
);
213 WMSetLabelRelief(panel
->famL
, WRSunken
);
214 WMSetLabelTextAlignment(panel
->famL
, WACenter
);
216 panel
->famLs
= WMCreateList(panel
->lowerF
);
217 WMSetListAction(panel
->famLs
, familyClick
, panel
);
219 panel
->typL
= WMCreateLabel(panel
->lowerF
);
220 WMSetWidgetBackgroundColor(panel
->typL
, dark
);
221 WMSetLabelText(panel
->typL
, "Typeface");
222 WMSetLabelFont(panel
->typL
, font
);
223 WMSetLabelTextColor(panel
->typL
, white
);
224 WMSetLabelRelief(panel
->typL
, WRSunken
);
225 WMSetLabelTextAlignment(panel
->typL
, WACenter
);
227 panel
->typLs
= WMCreateList(panel
->lowerF
);
228 WMSetListAction(panel
->typLs
, typefaceClick
, panel
);
230 panel
->sizL
= WMCreateLabel(panel
->lowerF
);
231 WMSetWidgetBackgroundColor(panel
->sizL
, dark
);
232 WMSetLabelText(panel
->sizL
, "Size");
233 WMSetLabelFont(panel
->sizL
, font
);
234 WMSetLabelTextColor(panel
->sizL
, white
);
235 WMSetLabelRelief(panel
->sizL
, WRSunken
);
236 WMSetLabelTextAlignment(panel
->sizL
, WACenter
);
238 panel
->sizT
= WMCreateTextField(panel
->lowerF
);
239 /* WMSetTextFieldAlignment(panel->sizT, WARight);*/
241 panel
->sizLs
= WMCreateList(panel
->lowerF
);
242 WMSetListAction(panel
->sizLs
, sizeClick
, panel
);
245 WMReleaseColor(white
);
246 WMReleaseColor(dark
);
248 panel
->setB
= WMCreateCommandButton(panel
->win
);
249 WMResizeWidget(panel
->setB
, 70, 24);
250 WMMoveWidget(panel
->setB
, 240, DEF_HEIGHT
- (BUTTON_SPACE_HEIGHT
-5));
251 WMSetButtonText(panel
->setB
, "Set");
253 panel
->revertB
= WMCreateCommandButton(panel
->win
);
254 WMResizeWidget(panel
->revertB
, 70, 24);
255 WMMoveWidget(panel
->revertB
, 80, DEF_HEIGHT
- (BUTTON_SPACE_HEIGHT
-5));
256 WMSetButtonText(panel
->revertB
, "Revert");
258 WMRealizeWidget(panel
->win
);
260 WMMapSubwidgets(panel
->upperF
);
261 WMMapSubwidgets(panel
->lowerF
);
262 WMMapSubwidgets(panel
->split
);
263 WMMapSubwidgets(panel
->win
);
265 WMUnmapWidget(panel
->revertB
);
267 arrangeLowerFrame(panel
);
269 scr
->sharedFontPanel
= panel
;
272 /* register notification observers */
273 WMAddNotificationObserver(notificationObserver
, panel
,
274 WMViewSizeDidChangeNotification
,
275 WMWidgetView(panel
->win
));
276 WMAddNotificationObserver(notificationObserver
, panel
,
277 WMViewSizeDidChangeNotification
,
278 WMWidgetView(panel
->upperF
));
279 WMAddNotificationObserver(notificationObserver
, panel
,
280 WMViewSizeDidChangeNotification
,
281 WMWidgetView(panel
->lowerF
));
284 listFamilies(scr
, panel
);
292 WMFreeFontPanel(WMFontPanel
*panel
)
294 if (panel
== WMWidgetScreen(panel
->win
)->sharedFontPanel
) {
295 WMWidgetScreen(panel
->win
)->sharedFontPanel
= NULL
;
297 WMRemoveNotificationObserver(panel
);
298 WMUnmapWidget(panel
->win
);
299 WMDestroyWidget(panel
->win
);
305 WMShowFontPanel(WMFontPanel
*panel
)
307 WMMapWidget(panel
->win
);
312 WMHideFontPanel(WMFontPanel
*panel
)
314 WMUnmapWidget(panel
->win
);
319 WMSetFontPanelFont(WMFontPanel
*panel
, WMFont
*font
)
326 WMSetFontPanelFontName(WMFontPanel
*panel
, char *fontName
)
334 WMGetFontPanelFont(WMFontPanel
*panel
)
336 return WMGetTextFieldFont(panel
->sampleT
);
341 WMGetFontPanelFontName(WMFontPanel
*panel
)
345 getSelectedFont(panel
, name
);
347 return wstrdup(name
);
353 arrangeLowerFrame(FontPanel
*panel
)
355 int width
= WMWidgetWidth(panel
->lowerF
) - 55 - 30;
356 int height
= WMWidgetHeight(panel
->split
) - WMWidgetHeight(panel
->upperF
);
359 #define LABEL_HEIGHT 20
361 height
-= WMGetSplitViewDividerThickness(panel
->split
);
364 height
-= LABEL_HEIGHT
+ 8;
366 fw
= (125*width
) / 235;
367 tw
= (110*width
) / 235;
370 WMMoveWidget(panel
->famL
, 10, 0);
371 WMResizeWidget(panel
->famL
, fw
, LABEL_HEIGHT
);
373 WMMoveWidget(panel
->famLs
, 10, 23);
374 WMResizeWidget(panel
->famLs
, fw
, height
);
376 WMMoveWidget(panel
->typL
, 10+fw
+3, 0);
377 WMResizeWidget(panel
->typL
, tw
, LABEL_HEIGHT
);
379 WMMoveWidget(panel
->typLs
, 10+fw
+3, 23);
380 WMResizeWidget(panel
->typLs
, tw
, height
);
382 WMMoveWidget(panel
->sizL
, 10+fw
+3+tw
+3, 0);
383 WMResizeWidget(panel
->sizL
, sw
+4, LABEL_HEIGHT
);
385 WMMoveWidget(panel
->sizT
, 10+fw
+3+tw
+3, 23);
386 WMResizeWidget(panel
->sizT
, sw
+4, 20);
388 WMMoveWidget(panel
->sizLs
, 10+fw
+3+tw
+3, 46);
389 WMResizeWidget(panel
->sizLs
, sw
+4, height
-23);
395 #define ALL_FONTS_MASK "-*-*-*-*-*-*-*-*-*-*-*-*-*-*"
412 #define NUM_FIELDS 14
417 parseFont(char *font
, char values
[NUM_FIELDS
][256])
421 char buffer
[256], *bptr
;
425 ptr
++; /* skip first - */
430 strcpy(values
[part
], buffer
);
439 strcpy(values
[part
], buffer
);
447 isXLFD(char *font
, int *length_ret
)
458 return c
==NUM_FIELDS
;
471 char showSetWidth
; /* when duplicated */
472 char showAddStyle
; /* when duplicated */
482 char *registry
, *encoding
;
484 char showFoundry
; /* when duplicated */
485 char showRegistry
; /* when duplicated */
494 compare_int(const void *a
, const void *b
)
510 addSizeToTypeface(Typeface
*face
, int size
)
515 for (j
= 0; j
< sizeof(scalableFontSizes
)/sizeof(int); j
++) {
516 size
= scalableFontSizes
[j
];
518 if (!WMCountInBag(face
->sizes
, (void*)size
)) {
519 WMPutInBag(face
->sizes
, (void*)size
);
522 WMSortBag(face
->sizes
, compare_int
);
524 if (!WMCountInBag(face
->sizes
, (void*)size
)) {
525 WMPutInBag(face
->sizes
, (void*)size
);
526 WMSortBag(face
->sizes
, compare_int
);
534 addTypefaceToFamily(Family
*family
, char fontFields
[NUM_FIELDS
][256])
539 if (family
->typefaces
) {
540 for (i
= 0; i
< WMGetBagItemCount(family
->typefaces
); i
++) {
543 face
= WMGetFromBag(family
->typefaces
, i
);
545 if (strcmp(face
->weight
, fontFields
[WEIGHT
]) != 0) {
548 if (strcmp(face
->slant
, fontFields
[SLANT
]) != 0) {
552 size
= atoi(fontFields
[PIXEL_SIZE
]);
554 addSizeToTypeface(face
, size
);
559 family
->typefaces
= WMCreateBag(4);
562 face
= wmalloc(sizeof(Typeface
));
563 memset(face
, 0, sizeof(Typeface
));
565 face
->weight
= wstrdup(fontFields
[WEIGHT
]);
566 face
->slant
= wstrdup(fontFields
[SLANT
]);
567 face
->setWidth
= wstrdup(fontFields
[SETWIDTH
]);
568 face
->addStyle
= wstrdup(fontFields
[ADD_STYLE
]);
570 face
->sizes
= WMCreateBag(4);
571 addSizeToTypeface(face
, atoi(fontFields
[PIXEL_SIZE
]));
573 WMPutInBag(family
->typefaces
, face
);
579 * families (same family name) (Hashtable of family -> bag)
580 * registries (same family but different registries)
585 addFontToFamily(WMHashTable
*families
, char fontFields
[NUM_FIELDS
][256])
592 family
= WMHashGet(families
, fontFields
[FAMILY
]);
595 /* look for same encoding/registry and foundry */
596 for (i
= 0; i
< WMGetBagItemCount(family
); i
++) {
599 fam
= WMGetFromBag(family
, i
);
601 enc
= (strcmp(fam
->encoding
, fontFields
[ENCODING
]) == 0);
602 reg
= (strcmp(fam
->registry
, fontFields
[REGISTRY
]) == 0);
603 found
= (strcmp(fam
->foundry
, fontFields
[FOUNDRY
]) == 0);
605 if (enc
&& reg
&& found
) {
606 addTypefaceToFamily(fam
, fontFields
);
610 /* look for same encoding/registry */
611 for (i
= 0; i
< WMGetBagItemCount(family
); i
++) {
614 fam
= WMGetFromBag(family
, i
);
616 enc
= (strcmp(fam
->encoding
, fontFields
[ENCODING
]) == 0);
617 reg
= (strcmp(fam
->registry
, fontFields
[REGISTRY
]) == 0);
620 /* has the same encoding, but the foundry is different */
621 fam
->showFoundry
= 1;
623 fam
= wmalloc(sizeof(Family
));
624 memset(fam
, 0, sizeof(Family
));
626 fam
->name
= wstrdup(fontFields
[FAMILY
]);
627 fam
->foundry
= wstrdup(fontFields
[FOUNDRY
]);
628 fam
->registry
= wstrdup(fontFields
[REGISTRY
]);
629 fam
->encoding
= wstrdup(fontFields
[ENCODING
]);
630 fam
->showFoundry
= 1;
632 addTypefaceToFamily(fam
, fontFields
);
634 WMPutInBag(family
, fam
);
638 /* look for same foundry */
639 for (i
= 0; i
< WMGetBagItemCount(family
); i
++) {
642 fam
= WMGetFromBag(family
, i
);
644 found
= (strcmp(fam
->foundry
, fontFields
[FOUNDRY
]) == 0);
647 /* has the same foundry, but encoding is different */
648 fam
->showRegistry
= 1;
650 fam
= wmalloc(sizeof(Family
));
651 memset(fam
, 0, sizeof(Family
));
653 fam
->name
= wstrdup(fontFields
[FAMILY
]);
654 fam
->foundry
= wstrdup(fontFields
[FOUNDRY
]);
655 fam
->registry
= wstrdup(fontFields
[REGISTRY
]);
656 fam
->encoding
= wstrdup(fontFields
[ENCODING
]);
657 fam
->showRegistry
= 1;
659 addTypefaceToFamily(fam
, fontFields
);
661 WMPutInBag(family
, fam
);
665 /* foundry and encoding do not match anything known */
666 fam
= wmalloc(sizeof(Family
));
667 memset(fam
, 0, sizeof(Family
));
669 fam
->name
= wstrdup(fontFields
[FAMILY
]);
670 fam
->foundry
= wstrdup(fontFields
[FOUNDRY
]);
671 fam
->registry
= wstrdup(fontFields
[REGISTRY
]);
672 fam
->encoding
= wstrdup(fontFields
[ENCODING
]);
673 fam
->showFoundry
= 1;
674 fam
->showRegistry
= 1;
676 addTypefaceToFamily(fam
, fontFields
);
678 WMPutInBag(family
, fam
);
682 family
= WMCreateBag(8);
684 fam
= wmalloc(sizeof(Family
));
685 memset(fam
, 0, sizeof(Family
));
687 fam
->name
= wstrdup(fontFields
[FAMILY
]);
688 fam
->foundry
= wstrdup(fontFields
[FOUNDRY
]);
689 fam
->registry
= wstrdup(fontFields
[REGISTRY
]);
690 fam
->encoding
= wstrdup(fontFields
[ENCODING
]);
692 addTypefaceToFamily(fam
, fontFields
);
694 WMPutInBag(family
, fam
);
696 WMHashInsert(families
, fam
->name
, family
);
702 listFamilies(WMScreen
*scr
, WMFontPanel
*panel
)
707 WMHashTable
*families
= WMCreateHashTable(WMStringPointerHashCallbacks
);
708 char fields
[NUM_FIELDS
][256];
709 WMHashEnumerator enumer
;
712 fontList
= XListFonts(scr
->display
, ALL_FONTS_MASK
, MAX_FONTS_TO_RETRIEVE
,
715 WMRunAlertPanel(scr
, panel
->win
, "Error",
716 "Could not retrieve font list", "OK", NULL
, NULL
);
720 for (i
= 0; i
< count
; i
++) {
723 if (!isXLFD(fontList
[i
], &fname_len
)) {
727 if (fname_len
> 255) {
728 wwarning("font name %s is longer than 256, which is invalid.",
733 if (!parseFont(fontList
[i
], fields
)) {
737 addFontToFamily(families
, fields
);
740 enumer
= WMEnumerateHashTable(families
);
742 while ((bag
= WMNextHashEnumeratorItem(&enumer
))) {
748 for (i
= 0; i
< WMGetBagItemCount(bag
); i
++) {
749 fam
= WMGetFromBag(bag
, i
);
751 strcpy(buffer
, fam
->name
);
753 if (fam
->showFoundry
) {
755 strcat(buffer
, fam
->foundry
);
758 if (fam
->showRegistry
) {
759 strcat(buffer
, " (");
760 strcat(buffer
, fam
->registry
);
762 strcat(buffer
, fam
->encoding
);
765 item
= WMAddListItem(panel
->famLs
, buffer
);
767 item
->clientData
= fam
;
771 WMSortListItems(panel
->famLs
);
773 WMFreeHashTable(families
);
778 getSelectedFont(FontPanel
*panel
, char buffer
[])
786 item
= WMGetListSelectedItem(panel
->famLs
);
789 family
= (Family
*)item
->clientData
;
791 item
= WMGetListSelectedItem(panel
->typLs
);
794 face
= (Typeface
*)item
->clientData
;
796 size
= WMGetTextFieldText(panel
->sizT
);
798 sprintf(buffer
, "-%s-%s-%s-%s-%s-%s-%s-*-*-*-*-*-%s-%s",
813 preview(FontPanel
*panel
)
818 getSelectedFont(panel
, buffer
);
820 font
= WMCreateFont(WMWidgetScreen(panel
->win
), buffer
);
822 WMSetTextFieldFont(panel
->sampleT
, font
);
830 familyClick(WMWidget
*w
, void *data
)
832 WMList
*lPtr
= (WMList
*)w
;
835 FontPanel
*panel
= (FontPanel
*)data
;
838 /* current typeface and size */
844 /* must try to keep the same typeface and size for the new family */
845 item
= WMGetListSelectedItem(panel
->typLs
);
847 oface
= wstrdup(item
->text
);
849 osize
= WMGetTextFieldText(panel
->sizT
);
852 item
= WMGetListSelectedItem(lPtr
);
853 family
= (Family
*)item
->clientData
;
855 WMClearList(panel
->typLs
);
857 for (i
= 0; i
< WMGetBagItemCount(family
->typefaces
); i
++) {
862 face
= WMGetFromBag(family
->typefaces
, i
);
864 if (strcmp(face
->weight
, "medium") == 0) {
868 strcpy(buffer
, face
->weight
);
869 buffer
[0] = toupper(buffer
[0]);
876 if (strcmp(face
->slant
, "r") == 0) {
877 strcat(buffer
, "Roman");
879 } else if (strcmp(face
->slant
, "i") == 0) {
880 strcat(buffer
, "Italic");
881 } else if (strcmp(face
->slant
, "o") == 0) {
882 strcat(buffer
, "Oblique");
883 } else if (strcmp(face
->slant
, "ri") == 0) {
884 strcat(buffer
, "Rev Italic");
885 } else if (strcmp(face
->slant
, "ro") == 0) {
886 strcat(buffer
, "Rev Oblique");
888 strcat(buffer
, face
->slant
);
891 if (buffer
[0] == 0) {
892 strcpy(buffer
, "Normal");
896 fitem
= WMInsertListItem(panel
->typLs
, 0, buffer
);
898 fitem
= WMAddListItem(panel
->typLs
, buffer
);
899 fitem
->clientData
= face
;
903 facei
= WMFindRowOfListItemWithTitle(panel
->typLs
, oface
);
909 WMSelectListItem(panel
->typLs
, facei
);
910 typefaceClick(panel
->typLs
, panel
);
913 sizei
= WMFindRowOfListItemWithTitle(panel
->sizLs
, osize
);
916 WMSelectListItem(panel
->sizLs
, sizei
);
917 sizeClick(panel
->sizLs
, panel
);
929 typefaceClick(WMWidget
*w
, void *data
)
931 FontPanel
*panel
= (FontPanel
*)data
;
940 osize
= WMGetTextFieldText(panel
->sizT
);
943 item
= WMGetListSelectedItem(panel
->typLs
);
944 face
= (Typeface
*)item
->clientData
;
946 WMClearList(panel
->sizLs
);
948 for (i
= 0; i
< WMGetBagItemCount(face
->sizes
); i
++) {
951 size
= (int)WMGetFromBag(face
->sizes
, i
);
954 sprintf(buffer
, "%i", size
);
956 WMAddListItem(panel
->sizLs
, buffer
);
961 sizei
= WMFindRowOfListItemWithTitle(panel
->sizLs
, osize
);
964 sizei
= WMFindRowOfListItemWithTitle(panel
->sizLs
, "12");
969 WMSelectListItem(panel
->sizLs
, sizei
);
970 WMSetListPosition(panel
->sizLs
, sizei
);
971 sizeClick(panel
->sizLs
, panel
);
981 sizeClick(WMWidget
*w
, void *data
)
983 FontPanel
*panel
= (FontPanel
*)data
;
986 item
= WMGetListSelectedItem(panel
->sizLs
);
988 WMSetTextFieldText(panel
->sizT
, item
->text
);
990 WMSelectTextFieldRange(panel
->sizT
, wmkrange(0, strlen(item
->text
)));