This patch enables users to set the workspace background (WorkspaceBack) in the Appearance Preferences section of WPrefs. It appears as a new item in the popup menu in the Texture tab, in the list of textures below, and a preview appears in the background of the preview panel on the left. --- WPrefs.app/Appearance.c | 73 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 24 deletions(-)
diff --git a/WPrefs.app/Appearance.c b/WPrefs.app/Appearance.c index ec71ee4..12ee13c 100644 --- a/WPrefs.app/Appearance.c +++ b/WPrefs.app/Appearance.c @@ -108,6 +108,7 @@ typedef struct _Panel { Pixmap preview; Pixmap previewNoText; + Pixmap previewBack; char *fprefix; } _Panel; @@ -303,7 +304,8 @@ static const struct { { "ResizebarBack", "(solid, gray)", N_("[Resizebar]") }, { "MenuTitleBack", "(solid, black)", N_("[Menu Title]") }, { "MenuTextBack", "(solid, gray)", N_("[Menu Item]") }, - { "IconBack", "(solid, gray)", N_("[Icon]") } + { "IconBack", "(solid, gray)", N_("[Icon]") }, + { "WorkspaceBack", "(solid, black)", N_("[Background]") } }; #define RESIZEBAR_BEVEL -1 @@ -364,6 +366,7 @@ static WMRect previewPositions[] = { {{155, 130}, {64, 64}} }; +#define PBACKGROUND 7 #define EVERYTHING 0xff static WMRect previewColorPositions[] = { @@ -755,21 +758,32 @@ static void updatePreviewBox(_Panel * panel, int elements) gc = XCreateGC(dpy, WMWidgetXID(panel->parent), 0, NULL); if (panel->preview == None) { - WMColor *color; WMPixmap *p; panel->previewNoText = XCreatePixmap(dpy, WMWidgetXID(panel->parent), 240 - 4, 215 - 4, WMScreenDepth(scr)); + panel->previewBack = XCreatePixmap(dpy, WMWidgetXID(panel->parent), + 240 - 4, 215 - 4, WMScreenDepth(scr)); p = WMCreatePixmap(scr, 240 - 4, 215 - 4, WMScreenDepth(scr), False); panel->preview = WMGetPixmapXID(p); WMSetLabelImage(panel->prevL, p); WMReleasePixmap(p); + } + if (elements & (1 << PBACKGROUND)) { + Pixmap tmp; + TextureListItem *titem; + WMListItem *item; + + item = WMGetListItem(panel->texLs, + panel->textureIndex[PBACKGROUND]); + titem = (TextureListItem *) item->clientData; + tmp = renderTexture(scr, titem->prop, 240 - 4, 215 - 4, NULL, 0); - color = WMCreateRGBColor(scr, 0x5100, 0x5100, 0x7100, True); - XFillRectangle(dpy, panel->preview, WMColorGC(color), 0, 0, 240 - 4, 215 - 4); - XFillRectangle(dpy, panel->previewNoText, WMColorGC(color), 0, 0, 240 - 4, 215 - 4); - WMReleaseColor(color); + XCopyArea(dpy, tmp, panel->preview, gc, 0, 0, 240 - 4, 215 -4 , 0, 0); + XCopyArea(dpy, tmp, panel->previewNoText, gc, 0, 0, 240 - 4, 215 -4 , 0, 0); + XCopyArea(dpy, tmp, panel->previewBack, gc, 0, 0, 240 - 4, 215 -4 , 0, 0); + XFreePixmap(dpy, tmp); } if (elements & (1 << PFOCUSED)) { @@ -966,8 +980,12 @@ static void okEditTexture(void *data) WMRedisplayWidget(panel->texLs); - if (titem->selectedFor) - updatePreviewBox(panel, titem->selectedFor); + if (titem->selectedFor) { + if (titem->selectedFor & (1 << PBACKGROUND)) + updatePreviewBox(panel, EVERYTHING); + else + updatePreviewBox(panel, titem->selectedFor); + } changePage(panel->secP, panel); } @@ -1097,12 +1115,14 @@ static void changePage(WMWidget * w, void *data) WMSetListPosition(panel->texLs, panel->textureIndex[section] - 2); } { - WMColor *color; - - color = WMCreateRGBColor(scr, 0x5100, 0x5100, 0x7100, True); - XFillRectangle(rc->dpy, panel->preview, WMColorGC(color), - positions[panel->oldsection].x, positions[panel->oldsection].y, 22, 22); - WMReleaseColor(color); + GC gc; + + gc = XCreateGC(rc->dpy, WMWidgetXID(panel->parent), 0, NULL); + XCopyArea(rc->dpy, panel->previewBack, panel->preview, gc, + positions[panel->oldsection].x, + positions[panel->oldsection].y, 22, 22 , + positions[panel->oldsection].x, + positions[panel->oldsection].y); } if (w) { panel->oldsection = section; @@ -1206,7 +1226,10 @@ static void textureDoubleClick(WMWidget * w, void *data) WMRedisplayWidget(panel->texLs); - updatePreviewBox(panel, 1 << section); + if (section == PBACKGROUND) + updatePreviewBox(panel, EVERYTHING); + else + updatePreviewBox(panel, 1 << section); } static void paintListItem(WMList * lPtr, int index, Drawable d, char *text, int state, WMRect * rect) @@ -1380,12 +1403,14 @@ static void changeColorPage(WMWidget * w, void *data) }; if (panel->preview) { - WMColor *color; - - color = WMCreateRGBColor(scr, 0x5100, 0x5100, 0x7100, True); - XFillRectangle(rc->dpy, panel->preview, WMColorGC(color), - positions[panel->oldcsection].x, positions[panel->oldcsection].y, 22, 22); - WMReleaseColor(color); + GC gc; + + gc = XCreateGC(rc->dpy, WMWidgetXID(panel->parent), 0, NULL); + XCopyArea(rc->dpy, panel->previewBack, panel->preview, gc, + positions[panel->oldcsection].x, + positions[panel->oldcsection].y, 22, 22 , + positions[panel->oldcsection].x, + positions[panel->oldcsection].y); } if (w) { section = WMGetPopUpButtonSelectedItem(panel->colP); @@ -1668,8 +1693,8 @@ static void createPanel(Panel * p) WMAddPopUpButtonItem(panel->secP, _("Titlebar of Menus")); WMAddPopUpButtonItem(panel->secP, _("Menu Items")); WMAddPopUpButtonItem(panel->secP, _("Icon Background")); - /* WMAddPopUpButtonItem(panel->secP, _("Workspace Backgrounds")); - */ + WMAddPopUpButtonItem(panel->secP, _("Workspace Background")); + WMSetPopUpButtonSelectedItem(panel->secP, 0); WMSetPopUpButtonAction(panel->secP, changePage, panel); @@ -2044,7 +2069,7 @@ static void prepareForClose(_Panel * panel) textureList = WMCreatePLArray(NULL, NULL); /* store list of textures */ - for (i = 7; i < WMGetListNumberOfRows(panel->texLs); i++) { + for (i = 8; i < WMGetListNumberOfRows(panel->texLs); i++) { item = WMGetListItem(panel->texLs, i); titem = (TextureListItem *) item->clientData; -- 1.9.1 -- To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.